{"remainingRequest":"D:\\jenkins\\workspace\\ljzc-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\thread-loader\\dist\\cjs.js!D:\\jenkins\\workspace\\ljzc-fvue\\node_modules\\babel-loader\\lib\\index.js!D:\\jenkins\\workspace\\ljzc-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\cache-loader\\dist\\cjs.js??ref--0-0!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\\babel.config.js","mtime":1701311296006},{"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\\cli-plugin-babel\\node_modules\\thread-loader\\dist\\cjs.js","mtime":499162500000},{"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:aW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuZnVuY3Rpb24ubmFtZS5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnB1c2guanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5qc29uLnN0cmluZ2lmeS5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmluY2x1ZGVzLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLmluY2x1ZGVzLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LnRvLXN0cmluZy5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuZm9yLWVhY2guanMiOwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwoKaW1wb3J0IEltYWdlQnBtIGZyb20gIkAvY29tcG9uZW50cy9mbG93L2ltYWdlQnBtLnZ1ZSI7CmltcG9ydCBGb3JtQ29udGVudCBmcm9tICJAL2NvbXBvbmVudHMvZmxvdy9mb3JtQ29udGVudC52dWUiOwovL2ltcG9ydCBPcGluaW9uVGV4dCBmcm9tICJAL2NvbXBvbmVudHMvY29tbW9uL29waW5pb25UZXh0LnZ1ZSI7Ci8vaW1wb3J0IEZpbGVVcGxvYWQgZnJvbSAiQC9jb21wb25lbnRzL2NvbW1vbi9maWxlVXBsb2FkLnZ1ZSI7CmltcG9ydCB7IG1hcFN0YXRlIH0gZnJvbSAidnVleCI7CmltcG9ydCB7IE1lc3NhZ2UgfSBmcm9tICJlbGVtZW50LXVpIjsKaW1wb3J0IFRhc2tUb1JlamVjdCBmcm9tICJAL2NvbXBvbmVudHMvZmxvdy90YXNrL3Rhc2tUb1JlamVjdC52dWUiOwppbXBvcnQgVGFza1RvRGVsZWdhdGUgZnJvbSAiQC9jb21wb25lbnRzL2Zsb3cvdGFzay90YXNrVG9EZWxlZ2F0ZS52dWUiOwppbXBvcnQgVGFza1RvQ29weVRvIGZyb20gIkAvY29tcG9uZW50cy9mbG93L3Rhc2svdGFza1RvQ29weVRvLnZ1ZSI7CmltcG9ydCBUYXNrVG9JbnF1IGZyb20gIkAvY29tcG9uZW50cy9mbG93L3Rhc2svdGFza1RvSW5xdS52dWUiOwppbXBvcnQgVGFza1RvRW5kUHJvY2VzcyBmcm9tICJAL2NvbXBvbmVudHMvZmxvdy90YXNrL3Rhc2tUb0VuZFByb2Nlc3MudnVlIjsKaW1wb3J0IFRhc2tUb1RyYW5zIGZyb20gIkAvY29tcG9uZW50cy9mbG93L3Rhc2svdGFza1RvVHJhbnMudnVlIjsKaW1wb3J0IFRhc2tUb0FkZFNpZ24gZnJvbSAiQC9jb21wb25lbnRzL2Zsb3cvdGFzay90YXNrVG9BZGRTaWduLnZ1ZSI7CmltcG9ydCBUYXNrVG9EZWxheSBmcm9tICJAL2NvbXBvbmVudHMvZmxvdy90YXNrL3Rhc2tUb0RlbGF5LnZ1ZSI7CmltcG9ydCBUYXNrU2VsZWN0RGVzdGluYXRpb24gZnJvbSAiQC9jb21wb25lbnRzL2Zsb3cvdGFzay90YXNrU2VsZWN0RGVzdGluYXRpb24udnVlIjsKaW1wb3J0IFRhc2tUb0FwcHJvdmVMaW5lIGZyb20gIkAvY29tcG9uZW50cy9mbG93L3Rhc2svdGFza1RvQXBwcm92ZUxpbmUudnVlIjsKaW1wb3J0IHRhc2tUb1NpZ25TZXF1ZW5jZSBmcm9tICJAL2NvbXBvbmVudHMvZmxvdy90YXNrL3Rhc2tUb1NpZ25TZXF1ZW5jZS52dWUiOwppbXBvcnQgdGFza1RvU2lnbkxpbmUgZnJvbSAiQC9jb21wb25lbnRzL2Zsb3cvdGFzay90YXNrVG9TaWduTGluZS52dWUiOwppbXBvcnQgdGFza1RvQ29tcGxldGUgZnJvbSAiQC9jb21wb25lbnRzL2Zsb3cvdGFzay90YXNrVG9Db21wbGV0ZS52dWUiOwppbXBvcnQgdGFza1RvU2F2ZSBmcm9tICJAL2NvbXBvbmVudHMvZmxvdy90YXNrL3Rhc2tUb1NhdmUudnVlIjsKaW1wb3J0IHRhc2tUb1JlYWQgZnJvbSAiQC9jb21wb25lbnRzL2Zsb3cvdGFzay90YXNrVG9SZWFkLnZ1ZSI7CmltcG9ydCB0YXNrVG9GZWVCYWNrIGZyb20gIkAvY29tcG9uZW50cy9mbG93L3Rhc2svdGFza1RvRmVlQmFjay52dWUiOwppbXBvcnQgdGFza1RvSW5xdVJlcGx5IGZyb20gIkAvY29tcG9uZW50cy9mbG93L3Rhc2svdGFza1RvSW5xdVJlcGx5LnZ1ZSI7CmltcG9ydCB1c2VyQWRkU2lnblJlcGx5IGZyb20gIkAvY29tcG9uZW50cy9mbG93L3Rhc2svdXNlckFkZFNpZ25SZXBseS52dWUiOwppbXBvcnQgdGFza1RvUmV2b2tlIGZyb20gIkAvY29tcG9uZW50cy9mbG93L3Rhc2svdGFza1RvUmV2b2tlLnZ1ZSI7CmltcG9ydCB1dGlscyBmcm9tICJAL3V0aWxzLmpzIjsKaW1wb3J0IHsgQmFzZTY0IH0gZnJvbSAianMtYmFzZTY0IjsKaW1wb3J0IG1vbWVudCBmcm9tICJtb21lbnQiOyAvL+aXpeacn+agvOW8j+WMluaPkuS7tgppbXBvcnQgZm9ybSBmcm9tICJAL2FwaS9mb3JtLmpzIjsKaW1wb3J0IGZsb3cgZnJvbSAiQC9hcGkvZmxvdy5qcyI7CmltcG9ydCBpMThuIGZyb20gIkAvbGFuZy9pbmRleC5qcyI7CmltcG9ydCByZXEgZnJvbSAiQC9yZXF1ZXN0LmpzIjsKZXhwb3J0IGRlZmF1bHQgewogIGNvbXBvbmVudHM6IHsKICAgIEltYWdlQnBtOiBJbWFnZUJwbSwKICAgIEZvcm1Db250ZW50OiBGb3JtQ29udGVudCwKICAgIC8vT3BpbmlvblRleHQsCiAgICAvL0ZpbGVVcGxvYWQsCiAgICBUYXNrVG9SZWplY3Q6IFRhc2tUb1JlamVjdCwKICAgIFRhc2tUb0RlbGVnYXRlOiBUYXNrVG9EZWxlZ2F0ZSwKICAgIFRhc2tUb0NvcHlUbzogVGFza1RvQ29weVRvLAogICAgVGFza1RvSW5xdTogVGFza1RvSW5xdSwKICAgIFRhc2tUb0VuZFByb2Nlc3M6IFRhc2tUb0VuZFByb2Nlc3MsCiAgICBUYXNrVG9UcmFuczogVGFza1RvVHJhbnMsCiAgICBUYXNrVG9BZGRTaWduOiBUYXNrVG9BZGRTaWduLAogICAgVGFza1RvRGVsYXk6IFRhc2tUb0RlbGF5LAogICAgVGFza1NlbGVjdERlc3RpbmF0aW9uOiBUYXNrU2VsZWN0RGVzdGluYXRpb24sCiAgICBUYXNrVG9BcHByb3ZlTGluZTogVGFza1RvQXBwcm92ZUxpbmUsCiAgICB0YXNrVG9TaWduU2VxdWVuY2U6IHRhc2tUb1NpZ25TZXF1ZW5jZSwKICAgIHRhc2tUb1NpZ25MaW5lOiB0YXNrVG9TaWduTGluZSwKICAgIHRhc2tUb0NvbXBsZXRlOiB0YXNrVG9Db21wbGV0ZSwKICAgIHRhc2tUb1NhdmU6IHRhc2tUb1NhdmUsCiAgICB0YXNrVG9SZWFkOiB0YXNrVG9SZWFkLAogICAgdGFza1RvRmVlQmFjazogdGFza1RvRmVlQmFjaywKICAgIHRhc2tUb0lucXVSZXBseTogdGFza1RvSW5xdVJlcGx5LAogICAgdXNlckFkZFNpZ25SZXBseTogdXNlckFkZFNpZ25SZXBseSwKICAgIHRhc2tUb1Jldm9rZTogdGFza1RvUmV2b2tlCiAgfSwKICBwcm9wczogWyJ0YXNrcyIsCiAgLy/ku7vliqHor6bmg4UKICAidGFza19zdGF0ZSIsICJpbnN0SWQiLCAidHlwZSIsICJ0YXNrSWQiLCAiZXhlY0lkIiwgImRlZklkIiwgInN0YXR1cyIsICJjaG9pY2VFeGN1dG9yIiwgImp1bXBUeXBlIiwgImluc3RTdGF0dXMiLCAibGVhZGVySWQiLCAibXlSZWFkVHlwZSIsICJyZWFkSWQiLAogIC8v55+l5Lya5Lu75Yqh5b6F5Yqe5Lyg6ZiF5Lu75Yqh55qE5Li76ZSuSUQKICAicmVhZERvbmVJZCIsCiAgLy/nn6XkvJrku7vliqHlt7Llip7kvKDpmIXku7vliqHnmoTkuLvplK5JRAogICJhcHByb3ZhbEFyZWEiLAogIC8v5a6h5om55Yy65Z+f5pi+56S655qE5YaF5a65CiAgInJlZmVyT3BpbmlvbiIsCiAgLy/lhYHorrjlj4LogIPmhI/op4EgKOmAieaLqeWQpu+8jOWImeWuoeaJueaXtuS4jeWFgeiuuOWPguiAg+WQjOeOr+iKguWFtuS7luS8muetvuS6uuWRmOeahOaEj+ingSkKICAibm9kZVR5cGUiLAogIC8v5b2T5YmN5Lu75Yqh57G75Z6LCiAgIm5vZGVJZCIsCiAgLy/lvZPliY3ku7vliqHoioLngrkKICAiaXNMb29rIiwgInNwb25zb3JSZXZva2UiLAogIC8v5YWB6K645Y+R6LW35Lq65pKk5Zue77yI6buY6K6k5LiN5Yu+6YCJ77yJCiAgIm9waW5pb25GaWVsZCIsCiAgLy/lvZPliY3oioLngrnlrqHmibnmhI/op4Hlm57loavlrZfmrrUKICAiYXBwZW5kT3BpbmlvbiIsCiAgLy/mmK/lkKbopobnm5blrqHmibnmhI/op4EKICAic2lnbmF0dXJlRmllbGQiLAogIC8v6Ieq5Yqo562+56ug5a2X5q61CiAgInNpZ25hdHVyZUNvdmVyIiwKICAvL+iHquWKqOetvueroOaYr+WQpuimhueblgogICJzZWNyZXRGcmVlIiwKICAvL+iHquWKqOetvueroOaXtuaYr+WQpuWFjeWvhiwKICAiZGVmS2V5Il0sCiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHsKICAgIHJldHVybiB7CiAgICAgIGlzTWs6IGZhbHNlLAogICAgICAvL+aYr+WQpuaYr+aooeWdl+WMluW8gOWPkei/m+adpQogICAgICBpc0RkOiBmYWxzZSwKICAgICAgLy8g5piv5ZCm5piv5Y+q5pi+56S65a6h5om56aG16Z2iCiAgICAgIGlzR2R0OiBmYWxzZSwKICAgICAgLy/mmK/lkKbmnInmu5rliqjmnaEKICAgICAgZGlhbG9nRm9ybVZpc2libGU6IGZhbHNlLAogICAgICBkYWlsb2dUaXRsZTogIiIsCiAgICAgIG9waW5pb246ICIiLAogICAgICBpc0hhbmQ6ICIiLAogICAgICBzdGF0ZTogIiIsCiAgICAgIGNhbkxvY2s6ICIiLAogICAgICBmb3JtRGF0YTogIiIsCiAgICAgIGFjdGlvbk5hbWU6ICIiLAogICAgICB0ZXh0OiAiIiwKICAgICAgZGlzYWJsZWQ6IHRydWUsCiAgICAgIGJ0bkFsaWFzOiAiIiwKICAgICAgLy/pgInmi6nnmoTmjInpkq4KICAgICAgdG9rZW46IHV0aWxzLmdldFVybEtleSgidG9rZW4iKSwKICAgICAgaXNBcHByb3ZhbE9waW5pb246IHRydWUsCiAgICAgIC8v5piv5ZCm5pi+56S65a6h5om55oSP6KeBCiAgICAgIGlzekZpbGU6IHRydWUsCiAgICAgIC8v5piv5ZCm5pi+56S65q2j5paHCiAgICAgIGlzRmlsZTogdHJ1ZSwKICAgICAgLy/mmK/lkKbmmL7npLrpmYTku7YKICAgICAgaXNQcm9jZXNzUmVjb3JkOiB0cnVlLAogICAgICAvL+aYr+WQpuaYvuekuuWkhOeQhuiusOW9lQogICAgICBpc0ltYWdlQnBtOiB0cnVlLAogICAgICAvL+aYr+WQpuaYvuekuua1geeoi+WbvgogICAgICB0YXNrU3RhdHVzQXJyYXk6IFsiQVBQUk9WRUxJTkVJTkciLCAiQVBQUk9WRUxJTkVFRCIsICJTSUdOU0VRVUVOQ0VJTkciLCAiU0lHTlNFUVVFTkNFRUQiLCAiU0lHTkxJTkVJTkciLCAiU0lHTkxJTkVFRCJdLAogICAgICBpc0hhbmc6IGZhbHNlLAogICAgICBvcGluaW9uRmlsZXM6ICIiLAogICAgICBhcHBlbmRTdHI6IHRydWUsCiAgICAgIGluaXRCb0F0dHI6ICcnCiAgICB9OwogIH0sCiAgd2F0Y2g6IHsKICAgIHN0YXR1czogZnVuY3Rpb24gc3RhdHVzKG5ld1ZhbCwgb2xkVmFsKSB7CiAgICAgIHZhciBfdGhpczIgPSB0aGlzOwogICAgICB0aGlzLnN0YXRlID0gbmV3VmFsOyAvL25ld1ZhbOWNs+aYr3N0YXR1cwogICAgICBpZiAodGhpcy5zdGF0ZSAhPSAiQ09QWVRPIiAmJiB0aGlzLnN0YXRlICE9ICJGT0xMT1ciICYmIHRoaXMuc3RhdGUgIT0gIkNPTU1VIikgewogICAgICAgIHZhciBwYXJhbXMgPSB7CiAgICAgICAgICB0YXNrSWQ6IHRoaXMudGFza0lkLAogICAgICAgICAgbGVhZGVySWQ6IHRoaXMubGVhZGVySWQsCiAgICAgICAgICBub2RlVHlwZTogdGhpcy5ub2RlVHlwZQogICAgICAgIH07CiAgICAgICAgLy/liKTmlq3mmK/lkKbmmK/mma7pgJrnlKjmiLfku7vliqHliqDnrb7lkI7nmoTlvoXlip7ku7vliqEKICAgICAgICBpZiAodGhpcy50YXNrcy5icG1UYXNrLnBhcmVudElkICE9ICIwIikgewogICAgICAgICAgcGFyYW1zLmlzQWRkU2lnbiA9IHRydWU7CiAgICAgICAgfQogICAgICAgIC8v6YCa6L+H5rWB56iL5a6e5L6LSUTlkozku7vliqFJROiOt+WPluWuoeaJueaEj+ingQogICAgICAgIGlmICh0aGlzLnRhc2tJZCAmJiB0aGlzLmluc3RJZCkgewogICAgICAgICAgdmFyIGJwbVNhdmVPcGluaW9uID0gewogICAgICAgICAgICBpbnN0SWQ6IHRoaXMuaW5zdElkLAogICAgICAgICAgICB0YXNrSWQ6IHRoaXMudGFza0lkCiAgICAgICAgICB9OwogICAgICAgICAgZmxvdy5nZXRCcG1TYXZlT3BpbmlvbkJ5VGVhbShicG1TYXZlT3BpbmlvbikudGhlbihmdW5jdGlvbiAoZGF0YSkgewogICAgICAgICAgICBpZiAoZGF0YS5zdGF0ZSkgewogICAgICAgICAgICAgIGlmIChkYXRhLnZhbHVlICE9ICIiKSB7CiAgICAgICAgICAgICAgICBfdGhpczIudGV4dCA9IGRhdGEudmFsdWU7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgdGhpcy4kc3RvcmUuZGlzcGF0Y2goInN0b3JlUHJvY2Vzcy90YXNrRGV0YWlsIiwgcGFyYW1zKTsgLy/ojrflj5bmk43kvZzmjInpkq4KICAgICAgICB0aGlzLiRzdG9yZS5kaXNwYXRjaCgic3RvcmVQcm9jZXNzL2NhbkxvY2siLCB7CiAgICAgICAgICB0YXNrSWQ6IHRoaXMudGFza0lkLAogICAgICAgICAgbGVhZGVySWQ6IHRoaXMubGVhZGVySWQKICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChjYW5Mb2NrKSB7CiAgICAgICAgICAvL+iOt+WPluS7u+WKoeaYr+WQpuiDvemUgeWumgogICAgICAgICAgaWYgKGNhbkxvY2sgPT0gNCAmJiBfdGhpczIuJHJvdXRlci5oaXN0b3J5LmN1cnJlbnQuZnVsbFBhdGguaW5kZXhPZigidG9rZW4iKSA+IC0xKSB7CiAgICAgICAgICAgIGNhbkxvY2sgPSAiNSI7CiAgICAgICAgICB9CiAgICAgICAgICBfdGhpczIuY2FuTG9jayA9IGNhbkxvY2s7CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0sCiAgICBhcHByb3ZhbEFyZWE6IGZ1bmN0aW9uIGFwcHJvdmFsQXJlYShuZXdWYWwsIG9sZFZhbCkgewogICAgICAvL+WuoeaJueWMuuWfn+aYvuekuueahOWGheWuuQogICAgICBpZiAobmV3VmFsKSB7CiAgICAgICAgdGhpcy5hcHByb3ZhbEFyZWEgPSBuZXdWYWw7CiAgICAgICAgaWYgKHRoaXMuYXBwcm92YWxBcmVhKSB7CiAgICAgICAgICBpZiAodGhpcy5hcHByb3ZhbEFyZWEuaW5kZXhPZigiYXBwcm92YWxPcGluaW9uIikgPT0gLTEpIHsKICAgICAgICAgICAgdGhpcy5pc0FwcHJvdmFsT3BpbmlvbiA9IGZhbHNlOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHRoaXMuYXBwcm92YWxBcmVhLmluZGV4T2YoInpGaWxlIikgPT0gLTEpIHsKICAgICAgICAgICAgdGhpcy5pc3pGaWxlID0gZmFsc2U7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAodGhpcy5hcHByb3ZhbEFyZWEuaW5kZXhPZigiZmlsZSIpID09IC0xKSB7CiAgICAgICAgICAgIHRoaXMuaXNGaWxlID0gZmFsc2U7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAodGhpcy5hcHByb3ZhbEFyZWEuaW5kZXhPZigicHJvY2Vzc1JlY29yZCIpID09IC0xKSB7CiAgICAgICAgICAgIHRoaXMuaXNQcm9jZXNzUmVjb3JkID0gZmFsc2U7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAodGhpcy5hcHByb3ZhbEFyZWEuaW5kZXhPZigiaW1hZ2VCcG0iKSA9PSAtMSkgewogICAgICAgICAgICB0aGlzLmlzSW1hZ2VCcG0gPSBmYWxzZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9LAogIGNvbXB1dGVkOiBtYXBTdGF0ZSh7CiAgICByb3dzQnRuOiBmdW5jdGlvbiByb3dzQnRuKHN0YXRlKSB7CiAgICAgIHJldHVybiBzdGF0ZS5zdG9yZVByb2Nlc3Mucm93c0J0bjsKICAgIH0sCiAgICBmb3JjZUxvY2s6IGZ1bmN0aW9uIGZvcmNlTG9jayhzdGF0ZSkgewogICAgICByZXR1cm4gc3RhdGUuc3RvcmVQcm9jZXNzLmZvcmNlTG9jazsKICAgIH0sCiAgICBpc1Nob3dBcHByb3ZhbEFyZWE6IGZ1bmN0aW9uIGlzU2hvd0FwcHJvdmFsQXJlYSgpIHsKICAgICAgaWYgKHRoaXMuc3RhdHVzICE9ICJDT1BZVE8iICYmIHRoaXMuc3RhdHVzICE9ICJGT0xMT1ciICYmICh0aGlzLnR5cGUgIT0gdW5kZWZpbmVkIHx8IHRoaXMudGFza0lkICE9IHVuZGVmaW5lZCkgJiYgdGhpcy5pbnN0U3RhdHVzICE9ICJlbmQiICYmIHRoaXMuaW5zdFN0YXR1cyAhPSAibWFudWFsZW5kIiB8fCB0aGlzLnN0YXR1cyA9PSAiQ09NTVUiKSB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogIH0pLAogIGJlZm9yZURlc3Ryb3k6IGZ1bmN0aW9uIGJlZm9yZURlc3Ryb3koKSB7CiAgICAvL+e7hOS7tuazqOmUgOenu+mZpOS6i+S7tuebkeWQrOWZqO+8jOS7pemYsuWkmuasoeiwg+eUqAogICAgdGhpcy4kcm9vdC4kb2ZmKCJmb3JtTG9hZGluZyIpOwogIH0sCiAgbW91bnRlZDogZnVuY3Rpb24gbW91bnRlZCgpIHsKICAgIHZhciB0aGlzXyA9IHRoaXM7CiAgICAvL+ebkeWQrOihqOWNleWKoOi9veWujOaIkOWPkeW4g+S6i+S7tgogICAgdGhpc18uJHJvb3QuJG9uKCJmb3JtTG9hZGluZyIsIGZ1bmN0aW9uICh2YWx1ZSkgewogICAgICB0aGlzXy5kaXNhYmxlZCA9IHZhbHVlOwogICAgICAvL+ajgOafpeW9k+WJjeaMgui1t+eKtuaAge+8jOWIpOaWreaYr+WQpuemgeeUqOaMiemSrgogICAgICB0aGlzXy5jaGVja0luc3RTdGF0dXMoKTsKICAgIH0pOwogIH0sCiAgbWV0aG9kczogewogICAgLy8g6YCa6L+H5oyJ6ZKu5Yir5ZCN6I635Y+W5oyJ6ZKu5Li76aKY57G75Z6LCiAgICBnZXRUeXBlOiBmdW5jdGlvbiBnZXRUeXBlKGFsaWFzKSB7CiAgICAgIHZhciB0eXBlID0gImRlZmF1bHQiOwogICAgICBzd2l0Y2ggKGFsaWFzKSB7CiAgICAgICAgY2FzZSAiYWdyZWUiOgogICAgICAgIGNhc2UgImFncmVlVHJhbnMiOgogICAgICAgICAgdHlwZSA9ICJwcmltYXJ5IjsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgIm9wcG9zZSI6CiAgICAgICAgY2FzZSAib3Bwb3NlVHJhbnMiOgogICAgICAgIGNhc2UgInJlamVjdCI6CiAgICAgICAgY2FzZSAiZW5kUHJvY2VzcyI6CiAgICAgICAgICB0eXBlID0gImRhbmdlciI7CiAgICAgICAgICBicmVhazsKICAgICAgfQogICAgICByZXR1cm4gdHlwZTsKICAgIH0sCiAgICAvLyAvL+aaguWtmOWuoeaJueaEj+ingQogICAgLy8gY3JlYXRlQnBtU2F2ZU9waW5pb24oZmxhZykgewogICAgLy8gICAvL+eCueWHu+S/neWtmOaaguWtmOWuoeaJueaEj+ingeaXtu+8jOayoeacieWhq+WGmeWuoeaJueaEj+ingeS4jeWkhOeQhgogICAgLy8gICBpZiAodGhpcy4kcmVmcy5vcGluaW9uVGV4dC5nZXRPcGluaW9uKCkgPT0gIiIgJiYgZmxhZykgewogICAgLy8gICAgIHJldHVybjsKICAgIC8vICAgfQogICAgLy8gICBpZiAodGhpcy4kcmVmcy5vcGluaW9uVGV4dC5nZXRPcGluaW9uKCkgPT0gIiIpIHsKICAgIC8vICAgICBNZXNzYWdlLndhcm5pbmcoIuivt+i+k+WFpeWuoeaJueaEj+ingeWGheWuuSIpOwogICAgLy8gICB9IGVsc2UgewogICAgLy8gICAgIGxldCBicG1TYXZlT3BpbmlvbiA9IHsgcHJvY0luc3RJZDogdGhpcy5pbnN0SWQsIHRhc2tJZDogdGhpcy50YXNrSWQsIG9waW5pb246IHRoaXMuJHJlZnMub3BpbmlvblRleHQuZ2V0T3BpbmlvbigpIH07CiAgICAvLyAgICAgZmxvdy5jcmVhdGVCcG1TYXZlT3BpbmlvbihicG1TYXZlT3BpbmlvbikudGhlbihkYXRhID0+IHsKICAgIC8vICAgICAgIGlmIChkYXRhLnN0YXRlKSB7CiAgICAvLyAgICAgICAgIGlmICghZmxhZykgewogICAgLy8gICAgICAgICAgIHRoaXMuJG1lc3NhZ2UoeyB0eXBlOiAic3VjY2VzcyIsIG1lc3NhZ2U6IGRhdGEubWVzc2FnZSB9KTsKICAgIC8vICAgICAgICAgfQogICAgLy8gICAgICAgfQogICAgLy8gICAgIH0pOwogICAgLy8gICB9CiAgICAvLyB9LAogICAgLy/ojrflj5bmhI/op4EKICAgIC8vIGdldE9waW5pb24ob3BpbmlvbikgewogICAgLy8gICB0aGlzLnRleHQgPSBvcGluaW9uOwogICAgLy8gICBsZXQgb3BpbmlvVmFsdWUgPSB0aGlzLiRyZWZzLm9waW5pb25UZXh0LmdldE9waW5pb24oKTsKICAgIC8vICAgaWYgKHRoaXMub3BpbmlvbkZpZWxkKSB7CiAgICAvLyAgICAgbGV0IGN1cnJlbnRVc2VyID0gdGhpcy4kc3RvcmUuc3RhdGUudXNlci5jdXJyZW50VXNlckRldGFpbC51c2VyOwogICAgLy8gICAgIGxldCBtb21lbnQgPSByZXF1aXJlKCJtb21lbnQiKTsKICAgIC8vICAgICBsZXQgYm9EYXRhID0gdGhpcy4kcmVmcy5mb3JtQ29udGVudC5kYXRhOwogICAgLy8gICAgIGxldCBmaWxlZCA9IHRoaXMub3BpbmlvbkZpZWxkLnNwbGl0KCIuIik7CiAgICAvLyAgICAgaWYgKGJvRGF0YVtmaWxlZFswXV1bZmlsZWRbMV1dID09ICc8cD48YnIvPjwvcD4nKSB7CiAgICAvLyAgICAgICBib0RhdGFbZmlsZWRbMF1dW2ZpbGVkWzFdXSA9ICIiOwogICAgLy8gICAgIH0KICAgIC8vICAgICAvL+aYr+WQpuimhuebluWuoeaJueaEj+ingQogICAgLy8gICAgIGlmICh0aGlzLmFwcGVuZE9waW5pb24pIHsKICAgIC8vICAgICAgIGlmIChvcGluaW9WYWx1ZSkgewogICAgLy8gICAgICAgICBib0RhdGFbZmlsZWRbMF1dW2ZpbGVkWzFdXSA9IG9waW5pb1ZhbHVlICsgIlxuIiArIGN1cnJlbnRVc2VyLmZ1bGxuYW1lICsgIiAiICsgbW9tZW50KCkuZm9ybWF0KCJZWVlZLU1NLUREIEhIOm1tOnNzIik7CiAgICAvLyAgICAgICB9CiAgICAvLyAgICAgfSBlbHNlIHsKICAgIC8vICAgICAgIGlmIChvcGluaW9WYWx1ZSkgewogICAgLy8gICAgICAgICBvcGluaW9WYWx1ZSArPSAiXG4iICsgY3VycmVudFVzZXIuZnVsbG5hbWUgKyAiICIgKyBtb21lbnQoKS5mb3JtYXQoIllZWVktTU0tREQgSEg6bW06c3MiKTsKICAgIC8vICAgICAgIH0KICAgIC8vICAgICAgIGlmICh0aGlzLmFwcGVuZFN0cikgewogICAgLy8gICAgICAgICB0aGlzLmluaXRCb0F0dHIgPSBib0RhdGFbZmlsZWRbMF1dW2ZpbGVkWzFdXTsKICAgIC8vICAgICAgIH0KICAgIC8vICAgICAgIGlmIChmaWxlZC5sZW5ndGggPT0gMikgewogICAgLy8gICAgICAgICBpZiAodGhpcy5pbml0Qm9BdHRyKSB7CiAgICAvLyAgICAgICAgICAgaWYgKG9waW5pb24pIHsKICAgIC8vICAgICAgICAgICAgIGJvRGF0YVtmaWxlZFswXV1bZmlsZWRbMV1dID0gdGhpcy5pbml0Qm9BdHRyICsgIlxuXG4iICsgb3BpbmlvVmFsdWU7CiAgICAvLyAgICAgICAgICAgfSBlbHNlIHsKICAgIC8vICAgICAgICAgICAgIGJvRGF0YVtmaWxlZFswXV1bZmlsZWRbMV1dID0gdGhpcy5pbml0Qm9BdHRyCiAgICAvLyAgICAgICAgICAgfQogICAgLy8gICAgICAgICB9IGVsc2UgewogICAgLy8gICAgICAgICAgIGJvRGF0YVtmaWxlZFswXV1bZmlsZWRbMV1dID0gb3BpbmlvVmFsdWU7CiAgICAvLyAgICAgICAgIH0KICAgIC8vICAgICAgIH0KICAgIC8vICAgICAgIHRoaXMuYXBwZW5kU3RyID0gZmFsc2U7CiAgICAvLyAgICAgfQogICAgLy8gICB9CiAgICAvLyB9LAogICAgLy/kv53lrZjmjInpkq4KICAgIHNhdmVEcmFmdEJ0bjogZnVuY3Rpb24gc2F2ZURyYWZ0QnRuKCkgewogICAgICB2YXIgX3RoaXMzID0gdGhpczsKICAgICAgLy90aGlzLiRyZWZzLnRhc2tUb1NhdmUuc2hvd0RpYWxvZygpOwogICAgICB0aGlzLiRzdG9yZS5kaXNwYXRjaCgic3RvcmVQcm9jZXNzL2NhbkxvY2siLCB7CiAgICAgICAgdGFza0lkOiB0aGlzLnRhc2tJZCwKICAgICAgICBsZWFkZXJJZDogdGhpcy5sZWFkZXJJZAogICAgICB9KS50aGVuKGZ1bmN0aW9uIChjYW5Mb2NrKSB7CiAgICAgICAgLy/ojrflj5bku7vliqHmmK/lkKbog73plIHlrpoKICAgICAgICBpZiAoY2FuTG9jayA9PSA0ICYmIF90aGlzMy4kcm91dGVyLmhpc3RvcnkuY3VycmVudC5mdWxsUGF0aC5pbmRleE9mKCJ0b2tlbiIpID4gLTEpIHsKICAgICAgICAgIGNhbkxvY2sgPSAiNSI7CiAgICAgICAgfQogICAgICAgIGlmIChjYW5Mb2NrID09IDQpIHsKICAgICAgICAgIF90aGlzMy4kbWVzc2FnZS53YXJuaW5nKCLku7vliqHlt7Looqvlhbbku5bkurrnrb7mlLbkuoYiKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgX3RoaXMzLnRhc2tTYXZlRHJhZnQoKTsgLy/kv53lrZjooajljZXlhoXlrrkKICAgICAgICAgIC8vdGhpcy5jcmVhdGVCcG1TYXZlT3Bpbmlvbih0cnVlKTsvL+aaguWtmOWuoeaJueaEj+ingQogICAgICAgIH0KICAgICAgfSk7CiAgICB9LAogICAgLy/lkIzmhI/mjInpkq4KICAgIGFncmVlQnRuOiBmdW5jdGlvbiBhZ3JlZUJ0bigpIHsKICAgICAgdmFyIF90aGlzNCA9IHRoaXM7CiAgICAgIHRoaXMuJHN0b3JlLmRpc3BhdGNoKCJzdG9yZVByb2Nlc3MvY2FuTG9jayIsIHsKICAgICAgICB0YXNrSWQ6IHRoaXMudGFza0lkLAogICAgICAgIGxlYWRlcklkOiB0aGlzLmxlYWRlcklkCiAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKGNhbkxvY2spIHsKICAgICAgICAvL+iOt+WPluS7u+WKoeaYr+WQpuiDvemUgeWumgogICAgICAgIGlmIChjYW5Mb2NrID09IDQgJiYgX3RoaXM0LiRyb3V0ZXIuaGlzdG9yeS5jdXJyZW50LmZ1bGxQYXRoLmluZGV4T2YoInRva2VuIikgPiAtMSkgewogICAgICAgICAgY2FuTG9jayA9ICI1IjsKICAgICAgICB9CiAgICAgICAgaWYgKGNhbkxvY2sgPT0gNCkgewogICAgICAgICAgX3RoaXM0LiRtZXNzYWdlLndhcm5pbmcoIuS7u+WKoeW3suiiq+WFtuS7luS6uuetvuaUtuS6hiIpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBfdGhpczQudGFza0FncmVlKCk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0sCiAgICBjaGVja0luc3RTdGF0dXM6IGZ1bmN0aW9uIGNoZWNrSW5zdFN0YXR1cyhjYWxsYmFjaykgewogICAgICB2YXIgdGhpc18gPSB0aGlzOwogICAgICB0aGlzLiRodHRwLmdldCgiJHticG1SdW5UaW1lfS9ydW50aW1lL2luc3RhbmNlL3YxL2dldERlZlN0YXR1cz9pbnN0SWQ9IiArICh0aGlzLmluc3RJZCB8fCAiIikgKyAiJnRhc2tJZD0iICsgKHRoaXMudGFza0lkIHx8ICIiKSkudGhlbihmdW5jdGlvbiAocmVzcCkgewogICAgICAgIGlmIChyZXNwLmRhdGEpIHsKICAgICAgICAgIHJlc3AuZGF0YSArPSAiIjsKICAgICAgICAgIGlmIChyZXNwLmRhdGEuaW5kZXhPZigiMSIpID4gLTEpIHsKICAgICAgICAgICAgdGhpc18uZGlzYWJsZWQgPSB0cnVlOwogICAgICAgICAgICB0aGlzXy5pc0hhbmcgPSB0cnVlOwogICAgICAgICAgICB0aGlzXy4kbWVzc2FnZS53YXJuaW5nKCLlvZPliY3mtYHnqIvlrp7kvovlt7LooqvmjILotbfvvIzml6Dms5XlrqHmibkiKTsKICAgICAgICAgIH0gZWxzZSBpZiAocmVzcC5kYXRhLmluZGV4T2YoIjMiKSA+IC0xKSB7CiAgICAgICAgICAgIHRoaXNfLmRpc2FibGVkID0gdHJ1ZTsKICAgICAgICAgICAgdGhpc18uJG1lc3NhZ2Uud2FybmluZygi5b2T5YmN5rWB56iL5a6a5LmJ5bey6KKr56aB5q2i5a6e5L6L77yM5peg5rOV5a6h5om5Iik7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjYWxsYmFjayAmJiBjYWxsYmFjaygpOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAoY2FsbGJhY2spIHsKICAgICAgICAgIGNhbGxiYWNrKCk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0sCiAgICAvL+aPkOS6pOS6i+S7tgogICAgc3VibWl0UmV2b2tlOiBmdW5jdGlvbiBzdWJtaXRSZXZva2UoYWxpYXMpIHsKICAgICAgdmFyIF90aGlzNSA9IHRoaXM7CiAgICAgIHZhciBfdGhpcyA9IHRoaXM7CiAgICAgIC8v6I635Y+WVlVF6KGo5Y2V5a6e5L6LKOWIpOaWreaYr+WQpuaYr+WcqOe6v+ihqOWNlSkKICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKCJvbmxpbmUtZm9ybSIpWzBdKSB7CiAgICAgICAgdmFyIHRhYmxlcyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKCJvbmxpbmUtZm9ybSIpWzBdLl9fdnVlX18ucGVybWlzc2lvbi50YWJsZTsgLy/ojrflj5blrZDooajmnYPpmZAKICAgICAgICB2YXIgYm9EYXRhID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoIm9ubGluZS1mb3JtIilbMF0uX192dWVfXy5kYXRhOyAvL+iOt+WPluihqOWNlWJv5a+56LGhCiAgICAgICAgdmFyIHpEYXRhID0ge307CiAgICAgICAgZm9yICh2YXIgayBpbiBib0RhdGEpIHsKICAgICAgICAgIHpEYXRhID0gYm9EYXRhW2tdOwogICAgICAgIH0KICAgICAgICBmb3IgKHZhciBrZXkgaW4gdGFibGVzKSB7CiAgICAgICAgICAvL+WmguaenOacieWvvOWFpeWxnuaAp++8jOWImeihqOaYjuS4jeaYr+WtkOihqOiAjOaYr+aVsOaNruaKpeihqO+8jOS4jeWBmuW/heWhq+agoemqjAogICAgICAgICAgaWYgKHRhYmxlc1trZXldICYmIHRhYmxlc1trZXldLmhhc093blByb3BlcnR5KCJleHBvcnQiKSkgewogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICgodGFibGVzW2tleV0ucmVxdWlyZWQgPT0gdHJ1ZSB8fCB0YWJsZXNba2V5XS5yZXF1aXJlZCA9PSAidHJ1ZSIpICYmIHpEYXRhWyJzdWJfIiArIGtleV0gJiYgekRhdGFbInN1Yl8iICsga2V5XS5sZW5ndGggPT0gMCkgewogICAgICAgICAgICB0aGlzLiRtZXNzYWdlKHsKICAgICAgICAgICAgICBtZXNzYWdlOiAi5a2Q6KGo5b+F5aGr5LiA5p2h6K6w5b2VIiwKICAgICAgICAgICAgICB0eXBlOiAid2FybmluZyIKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgdGhpcy5wcmVzc0FjdGlvbiA9IHRydWU7CiAgICAgIHRoaXMuYnRuQWxpYXMgPSBhbGlhczsKICAgICAgLy/lhbPpl60KICAgICAgaWYgKHRoaXMuYnRuQWxpYXMgPT0gInRhc2tDbG9zZSIpIHsKICAgICAgICB1dGlscy5jbG9zZUFsbE5vdGlmaWNhdGlvbigpOwogICAgICAgIC8v5Yik5pat6I+c5Y2V5piv5ZCm5piv5qih5Z2X5byA5Y+R6YWN572u5Ye65p2l55qECiAgICAgICAgaWYgKHRoaXMuJHJvdXRlLm5hbWUuaW5kZXhPZigicmVwb3J0TW9kdWxlSW5zdCIpICE9IC0xKSB7CiAgICAgICAgICB0aGlzLiRyb3V0ZXIucHVzaCgiL3N0YXRlbWVudC90ZW1wbGF0ZS9wcmV2aWV3LyIgKyB0aGlzLiRyb3V0ZS5wYXJhbXMudGVtcGxhdGVLZXkgKyAiL3RvZG8vIiArIHRoaXMuJHJvdXRlLnBhcmFtcy5kZWZLZXkgKyAiL3RydWUiKTsKICAgICAgICB9IGVsc2UgaWYgKHRoaXMuJHJvdXRlLm5hbWUuaW5kZXhPZigic3lzTW9kdWxlSW5zdCIpICE9IC0xKSB7CiAgICAgICAgICB0aGlzLiRyb3V0ZXIucHVzaCgiL3YtZmxvdy92LXRvZG8vIiArIHRoaXMuJHJvdXRlLnBhcmFtcy5kZWZLZXkpOwogICAgICAgIH0gZWxzZSBpZiAodGhpcy50eXBlID09ICJkb25lIiB8fCB0aGlzLnR5cGUgPT0gInJlcXVlc3QiIHx8IHRoaXMubXlSZWFkVHlwZSA9PSAibXlSZXF1ZXN0IikgewogICAgICAgICAgdGhpcy4kcm91dGVyLnB1c2goIi92LWZsb3cvdi1yZXF1ZXN0Iik7CiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnN0YXRlID09ICJDT01NVSIgfHwgdGhpcy5zdGF0ZSA9PSAiRk9MTE9XIiB8fCB0aGlzLiRyb3V0ZS5uYW1lID09ICJpbnN0UmVhZC1yZWFkIikgewogICAgICAgICAgdGhpcy4kcm91dGVyLnB1c2goIi92LWZsb3cvdi10b2RvUmVhZCIpOyAvL+W+hemYhQogICAgICAgIH0gZWxzZSBpZiAodGhpcy4kcm91dGUubmFtZSA9PSAiaW5zdFJlYWQtZG9uZSIpIHsKICAgICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKCIvdi1mbG93L3YtZG9uZVJlYWQiKTsgLy/lt7LpmIUKICAgICAgICB9IGVsc2UgaWYgKHRoaXMuJHJvdXRlLm5hbWUgPT0gIm15UmVhZC10eXBlIikgewogICAgICAgICAgdGhpcy4kcm91dGVyLnB1c2goIi92LWZsb3cvdi1teVJlYWQiKTsgLy/miJHkvKDpmIXnmoQKICAgICAgICB9IGVsc2UgaWYgKHRoaXMuJHJvdXRlLm5hbWUgPT0gImluc3RSZWFkIiAmJiB0aGlzLiRyb3V0ZS5wYXJhbXMubXlSZWFkVHlwZSA9PSAiZGVsZWdhdGUiKSB7CiAgICAgICAgICB0aGlzLiRyb3V0ZXIucHVzaCgiL3YtZmxvdy92LW15RGVsZWdhdGUiKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaWYgKEpTT04uc3RyaW5naWZ5KHRoaXMuJHJvdXRlLnF1ZXJ5KSA9PSAie30iKSB7CiAgICAgICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKCIvdi1mbG93L3YtdG9kbyIpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhpcy4kcm91dGVyLnB1c2goIi9ob21lIik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKHRoaXMuYnRuQWxpYXMgPT0gInNhdmVEcmFmdCIpIHsKICAgICAgICAvLyB0b2RvIOS/neWtmAogICAgICAgIHRoaXMuc2F2ZURyYWZ0QnRuKCk7CiAgICAgIH0gZWxzZSBpZiAodGhpcy5idG5BbGlhcyA9PSAiYWdyZWUiKSB7CiAgICAgICAgLy8gdG9kbyDlkIzmhI8KICAgICAgICB0aGlzLmFncmVlQnRuKCk7CiAgICAgIH0gZWxzZSBpZiAodGhpcy5idG5BbGlhcyA9PSAiaGFuZGxlUmVhZCIpIHsKICAgICAgICAvL+S8oOmYheWbnuWkjQogICAgICAgIHRoaXMuaGFuZGxlUmVhZCgpOwogICAgICB9IGVsc2UgaWYgKHRoaXMuYnRuQWxpYXMgPT0gImhhbmRsZVJldm9rZSIpIHsKICAgICAgICAvL+aSpOWbngogICAgICAgIHRoaXMuaGFuZGxlUmV2b2tlKCk7CiAgICAgIH0gZWxzZSBpZiAodGhpcy5idG5BbGlhcyA9PSAiY29tbXVGZWVkQmFjayIpIHsKICAgICAgICAvL+ayn+mAmuWPjemmiAogICAgICAgIHRoaXMuY29tbXVGZWVkQmFjaygpOwogICAgICB9IGVsc2UgaWYgKHRoaXMuYnRuQWxpYXMgPT0gInRhc2tUb0lucXVSZXBseSIpIHsKICAgICAgICAvL+W+geivouWbnuWkjQogICAgICAgIHRoaXMudGFza1RvSW5xdVJlcGx5KCk7CiAgICAgIH0gZWxzZSBpZiAodGhpcy5idG5BbGlhcyA9PSAidXNlckFkZFNpZ24iKSB7CiAgICAgICAgLy/mma7pgJroioLngrnliqDnrb7lj43ppogKICAgICAgICB0aGlzLnVzZXJBZGRTaWduKCk7CiAgICAgIH0gZWxzZSBpZiAodGhpcy5idG5BbGlhcyA9PSAicmVqZWN0IikgewogICAgICAgIC8vdG9kbyDpqbPlm54KICAgICAgICB0aGlzLnRhc2tUb1JlamVjdCgpOwogICAgICB9IGVsc2UgaWYgKHRoaXMuYnRuQWxpYXMgPT0gImRlbGVnYXRlIikgewogICAgICAgIC8v6L2s5YqeCiAgICAgICAgdGhpcy50YXNrVG9EZWxlZ2F0ZSgpOwogICAgICB9IGVsc2UgaWYgKHRoaXMuYnRuQWxpYXMgPT0gImlucXUiKSB7CiAgICAgICAgLy/lvoHor6IKICAgICAgICB0aGlzLnRhc2tUb0lucXUoKTsKICAgICAgfSBlbHNlIGlmICh0aGlzLmJ0bkFsaWFzID09ICJlbmRQcm9jZXNzIikgewogICAgICAgIC8vIHRvZG8g5rWB56iL57uI5q2iCiAgICAgICAgdGhpcy50YXNrVG9FbmRQcm9jZXNzKCk7CiAgICAgIH0gZWxzZSBpZiAodGhpcy5idG5BbGlhcyA9PSAic3RhcnRUcmFucyIpIHsKICAgICAgICAvL3RvZG8g5rWB6L2sCiAgICAgICAgdGhpcy50YXNrVG9UcmFucygpOwogICAgICB9IGVsc2UgaWYgKHRoaXMuYnRuQWxpYXMgPT0gImFkZFNpZ24iKSB7CiAgICAgICAgLy90b2RvIOWKoOetvgogICAgICAgIHRoaXMudGFza1RvQWRkU2lnbigpOwogICAgICB9IGVsc2UgaWYgKHRoaXMuYnRuQWxpYXMgPT0gInRhc2tEZWxheSIpIHsKICAgICAgICAvL3RvZG8g5Lu75Yqh5bu25pyfCiAgICAgICAgLy8gdGhpcy50YXNrVG9EZWxheSgpOwogICAgICB9IGVsc2UgaWYgKHRoaXMuYnRuQWxpYXMgPT0gImFncmVlVHJhbnMiKSB7CiAgICAgICAgLy90b2RvIOWQjOaEj++8iOa1gei9rO+8iQogICAgICAgIHRoaXMudGFza0FncmVlVHJhbnMoKTsKICAgICAgfSBlbHNlIGlmICh0aGlzLmJ0bkFsaWFzID09ICJvcHBvc2VUcmFucyIpIHsKICAgICAgICAvL3RvZG8g5Y+N5a+577yI5rWB6L2s77yJCiAgICAgICAgdGhpcy50YXNrT3Bwb3NlVHJhbnMoKTsKICAgICAgfSBlbHNlIGlmICh0aGlzLmJ0bkFsaWFzID09ICJvcHBvc2UiKSB7CiAgICAgICAgLy90b2RvIOWPjeWvuQogICAgICAgIHRoaXMudGFza09wcG9zZSgpOwogICAgICB9IGVsc2UgaWYgKHRoaXMuYnRuQWxpYXMgPT0gImxvY2tVbmxvY2siKSB7CiAgICAgICAgLy/nrb7mlLYKICAgICAgICB0aGlzLiRzdG9yZS5kaXNwYXRjaCgic3RvcmVQcm9jZXNzL2NhbkxvY2siLCB0aGlzLnRhc2tJZCkudGhlbihmdW5jdGlvbiAoY2FuTG9jaykgewogICAgICAgICAgLy/ojrflj5bku7vliqHmmK/lkKbog73plIHlrpoKICAgICAgICAgIGlmIChjYW5Mb2NrID09IDQgJiYgX3RoaXM1LiRyb3V0ZXIuaGlzdG9yeS5jdXJyZW50LmZ1bGxQYXRoLmluZGV4T2YoInRva2VuIikgPiAtMSkgewogICAgICAgICAgICBjYW5Mb2NrID0gIjUiOwogICAgICAgICAgfQogICAgICAgICAgaWYgKGNhbkxvY2sgPT0gNCkgewogICAgICAgICAgICBfdGhpczUuJG1lc3NhZ2Uud2FybmluZygi5Lu75Yqh5bey6KKr5YW25LuW5Lq6562+5pS25LqGIik7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBfdGhpczUubG9ja1VubG9jaygpOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9IGVsc2UgaWYgKHRoaXMuYnRuQWxpYXMgPT0gImFwcHJvdmVMaW5lIikgewogICAgICAgIC8v5bm26KGM5a6h5om5CiAgICAgICAgdGhpcy50YXNrQXBwcm92ZUxpbmUoKTsKICAgICAgfSBlbHNlIGlmICh0aGlzLmJ0bkFsaWFzID09ICJzaWduU2VxdWVuY2UiKSB7CiAgICAgICAgLy8g6aG65bqP562+572yCiAgICAgICAgdGhpcy50YXNrU2lnblNlcXVlbmNlKCk7CiAgICAgIH0gZWxzZSBpZiAodGhpcy5idG5BbGlhcyA9PSAic2lnbkxpbmUiKSB7CiAgICAgICAgLy8g5bm26KGM562+572yCiAgICAgICAgdGhpcy50YXNrU2lnbkxpbmUoKTsKICAgICAgfQogICAgfSwKICAgIC8v5omn6KGM5YmN572u6ISa5pysCiAgICBydW5CZWZvcmVTY3JpcHQ6IGZ1bmN0aW9uIHJ1bkJlZm9yZVNjcmlwdCgpIHsKICAgICAgdmFyIF90aGlzID0gdGhpczsKICAgICAgdmFyIGl0ZW0gPSB1dGlscy5pbmRleE9mTGlzdChfdGhpcy5yb3dzQnRuLCAiYWxpYXMiLCBfdGhpcy5idG5BbGlhcyk7CiAgICAgIHJldHVybiBfdGhpcy50ZW1wU2NyaXB0KGl0ZW0uYmVmb3JlU2NyaXB0KTsKICAgIH0sCiAgICAvL+aJp+ihjOWJjee9ruiEmuacrAogICAgdGVtcFNjcmlwdDogZnVuY3Rpb24gdGVtcFNjcmlwdChzY3JpcHQpIHsKICAgICAgdmFyIF90aGlzID0gdGhpczsKICAgICAgdmFyIF9yZXEgPSByZXE7CiAgICAgIHZhciBib0RhdGEgPSBfdGhpcy4kcmVmcy5mb3JtQ29udGVudC5kYXRhOwogICAgICB2YXIgdGVtcFNjcmlwdCA9ICJ2YXIgdGVtcEZ1bmN0aW9uID0gZnVuY3Rpb24oX3JlcSxkYXRhLF90aGlzKXsgIiArIHNjcmlwdCArICJ9OyI7CiAgICAgIHZhciByZXN1bHQgPSBldmFsKHRlbXBTY3JpcHQgKyAidGVtcEZ1bmN0aW9uKF9yZXEsYm9EYXRhLF90aGlzKTsiKTsKICAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQudGhlbiAmJiB0eXBlb2YgcmVzdWx0LnRoZW4gPT0gImZ1bmN0aW9uIikgewogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgIH0KICAgICAgaWYgKHJlc3VsdCA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9LAogICAgLy/kv53lrZgKICAgIHRhc2tTYXZlRHJhZnQ6IGZ1bmN0aW9uIHRhc2tTYXZlRHJhZnQoKSB7CiAgICAgIHZhciBfdGhpczYgPSB0aGlzOwogICAgICB2YXIgdGhpc18gPSB0aGlzOwogICAgICB1dGlscy5nZXRPbmxpbmVGb3JtRGF0YShmYWxzZSkudGhlbihmdW5jdGlvbiAoZm9ybURhdGFTdHIpIHsKICAgICAgICByZXR1cm4gdGhpc18uc2F2ZURyYWZ0U3VibWl0KGZvcm1EYXRhU3RyKTsKICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKHJlYXNvbikgewogICAgICAgIHJldHVybiB1dGlscy5oYW5kbGVHZXRGb3JtRGF0YVJlamVjdChyZWFzb24pLnRoZW4oZnVuY3Rpb24gKCkgewogICAgICAgICAgcmV0dXJuIF90aGlzNi5zYXZlRHJhZnRTdWJtaXQoKTsKICAgICAgICB9KTsKICAgICAgfSk7CiAgICB9LAogICAgc2F2ZURyYWZ0U3VibWl0OiBmdW5jdGlvbiBzYXZlRHJhZnRTdWJtaXQoZm9ybURhdGFTdHIpIHsKICAgICAgdmFyIF90aGlzID0gdGhpczsKICAgICAgdmFyIHNjcmlwdFJlc3VsdCA9IHRoaXMucnVuQmVmb3JlU2NyaXB0KCk7CiAgICAgIC8v5omn6KGM5YmN572u6ISa5pys6L+U5ZueZmFsc2Xml7bnu4jmraLmjInpkq7mk43kvZwKICAgICAgaWYgKHNjcmlwdFJlc3VsdCA9PT0gZmFsc2UpIHJldHVybjsKICAgICAgLy/miafooYzliY3nva7ohJrmnKzov5Tlm57nmoTmjqXlj6Pml7blhYjmiafooYzliY3nva7kuovku7bmjqXlj6MKICAgICAgaWYgKHNjcmlwdFJlc3VsdC50aGVuICYmIHR5cGVvZiBzY3JpcHRSZXN1bHQudGhlbiA9PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgc2NyaXB0UmVzdWx0LnRoZW4oZnVuY3Rpb24gKCkgewogICAgICAgICAgLy/mjqXlj6Pov5Tlm57miJDlip/liJnmraPluLjmiafooYzmjInpkq7mk43kvZwKICAgICAgICAgIF90aGlzLmZ1bmNTYXZlRHJhZnQoZm9ybURhdGFTdHIpOwogICAgICAgIH0sIGZ1bmN0aW9uIChmYWlsKSB7CiAgICAgICAgICAvL+aOpeWPo+i/lOWbnuWksei0peWImee7iOatouaMiemSruaTjeS9nO+8jOW5tue7meS4juaPkOekugogICAgICAgICAgX3RoaXMuJG1lc3NhZ2Uud2FybmluZyhmYWlsKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9KTsKICAgICAgfSBlbHNlIHsKICAgICAgICAvL+aJp+ihjOWJjee9ruiEmuacrOi/lOWbnnRydWXml7bmraPluLjmiafooYzmjInpkq7mk43kvZwKICAgICAgICBfdGhpcy5mdW5jU2F2ZURyYWZ0KGZvcm1EYXRhU3RyKTsKICAgICAgfQogICAgfSwKICAgIC8v5L+d5a2Y6I2J56i/CiAgICBmdW5jU2F2ZURyYWZ0OiBmdW5jdGlvbiBmdW5jU2F2ZURyYWZ0KGZvcm1EYXRhU3RyKSB7CiAgICAgIHV0aWxzLmNsb3NlQWxsTm90aWZpY2F0aW9uKCk7CiAgICAgIHZhciBkYXRhID0gdGhpcy5oYW5kbGVGb3JtRGF0YShmb3JtRGF0YVN0cik7CiAgICAgIGRhdGEuZGVmSWQgPSB0aGlzLmRlZklkOwogICAgICBkYXRhLmFwcHJvdmFsID0gdHJ1ZTsKICAgICAgZGF0YS5mb3JtS2V5ID0gdGhpcy4kcmVmcy5mb3JtQ29udGVudC5mb3JtS2V5OwogICAgICB0aGlzLiRyZWZzLnRhc2tUb1NhdmUuc2hvd0RpYWxvZyhkYXRhKTsKICAgICAgLy8gdGhpcy4kc3RvcmUuZGlzcGF0Y2goInN0b3JlUHJvY2Vzcy9zYXZlVGFza0RyYWZ0IiwgZGF0YSkudGhlbigoKSA9PiB7CiAgICAgIC8vICAgdXRpbHMucmVsb2FkKCk7CiAgICAgIC8vIH0pOwogICAgfSwKICAgIC8v5Lyg6ZiF5Zue5aSNCiAgICBoYW5kbGVSZWFkOiBmdW5jdGlvbiBoYW5kbGVSZWFkKCkgewogICAgICB0aGlzLiRyZWZzLnRhc2tUb1JlYWQuc2hvd0RpYWxvZygpOwogICAgfSwKICAgIC8vIOWHhuWkh+imgeaPkOS6pOeahOaVsOaNrgogICAgaGFuZGxlRm9ybURhdGE6IGZ1bmN0aW9uIGhhbmRsZUZvcm1EYXRhKGZvcm1EYXRhU3RyKSB7CiAgICAgIC8vbGV0IGZpbGVzID0gIiI7CiAgICAgIHZhciB6ZmlsZXMgPSAiIjsKICAgICAgLy8gdGhpcy4kcmVmcy5maWxlVXBsb2FkLmlzRmluaXNoVXBsb2FkKCk7CiAgICAgIC8vIGlmICh0aGlzLiRyZWZzLmZpbGVVcGxvYWQgJiYgdGhpcy4kcmVmcy5maWxlVXBsb2FkLmdldEZpbGVzKCkgIT0gIiIpIHsKICAgICAgLy8gICBmaWxlcyA9IEpTT04uc3RyaW5naWZ5KHRoaXMuJHJlZnMuZmlsZVVwbG9hZC5nZXRGaWxlcygpKTsKICAgICAgLy8gfQogICAgICAvL2xldCBvcGluaW9uID0gIiI7CiAgICAgIC8vIGlmICh0aGlzLiRyZWZzLm9waW5pb25UZXh0ICYmIHRoaXMuJHJlZnMub3BpbmlvblRleHQuZ2V0T3BpbmlvbigpICE9ICIiKSB7CiAgICAgIC8vICAgb3BpbmlvbiA9IHRoaXMuJHJlZnMub3BpbmlvblRleHQuZ2V0T3BpbmlvbigpOwogICAgICAvLyB9CgogICAgICB2YXIgZGF0YSA9IHsKICAgICAgICB0YXNrSWQ6IHRoaXMudGFza0lkLAogICAgICAgIGFjdGlvbk5hbWU6IHRoaXMuYWN0aW9uTmFtZSwKICAgICAgICBkZXN0aW5hdGlvbjogIiIsCiAgICAgICAgLy9maWxlczogZmlsZXMsCiAgICAgICAgemZpbGVzOiB6ZmlsZXMsCiAgICAgICAgLy9vcGluaW9uOiBvcGluaW9uLAogICAgICAgIGp1bXBUeXBlOiAiIiwKICAgICAgICBhZ2VudExlYWRlcklkOiB0aGlzLmxlYWRlcklkLAogICAgICAgIG5vZGVVc2VyczogIltdIgogICAgICB9OwogICAgICBpZiAoZm9ybURhdGFTdHIpIHsKICAgICAgICAvLyBVUkzooajljZUKICAgICAgICBpZiAoZm9ybURhdGFTdHIuY29uc3RydWN0b3IgPT0gT2JqZWN0KSB7CiAgICAgICAgICBkYXRhLmZvcm1UeXBlID0gImZyYW1lIjsKICAgICAgICAgIGlmIChmb3JtRGF0YVN0ci5idXNpbmVzc0tleSkgewogICAgICAgICAgICBkYXRhLmJ1c2luZXNzS2V5ID0gZm9ybURhdGFTdHIuYnVzaW5lc3NLZXk7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoZm9ybURhdGFTdHIuc3lzQ29kZSkgewogICAgICAgICAgICBkYXRhLnN5c0NvZGUgPSBmb3JtRGF0YVN0ci5zeXNDb2RlOwogICAgICAgICAgfQogICAgICAgICAgaWYgKGZvcm1EYXRhU3RyLnZhcnMpIHsKICAgICAgICAgICAgZGF0YS52YXJzID0gZm9ybURhdGFTdHIudmFyczsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKGZvcm1EYXRhU3RyLmNvbnN0cnVjdG9yID09IFN0cmluZykgewogICAgICAgICAgZGF0YS5kYXRhID0gQmFzZTY0LmVuY29kZShmb3JtRGF0YVN0cik7CiAgICAgICAgICBkYXRhLmZvcm1UeXBlID0gImlubmVyIjsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKHdpbmRvdy51cmdlbnRTdGF0ZVZhbHVlKSB7CiAgICAgICAgZGF0YS51cmdlbnRTdGF0ZVZhbHVlID0gd2luZG93LnVyZ2VudFN0YXRlVmFsdWU7CiAgICAgIH0KICAgICAgcmV0dXJuIGRhdGE7CiAgICB9LAogICAgaGFuZGxlQ2xvc2U6IGZ1bmN0aW9uIGhhbmRsZUNsb3NlKCkgewogICAgICB0aGlzLmRpYWxvZ0Zvcm1WaXNpYmxlID0gdHJ1ZTsKICAgIH0sCiAgICAvL+iOt+WPluS7u+WKoemUgeWumueKtuaAgQogICAgbG9ja1VubG9jazogZnVuY3Rpb24gbG9ja1VubG9jaygpIHsKICAgICAgdGhpcy4kc3RvcmUuZGlzcGF0Y2goInN0b3JlUHJvY2Vzcy9sb2NrVW5sb2NrIiwgdGhpcy50YXNrSWQgKyAiJmxlYWRlcklkPSIgKyB0aGlzLmxlYWRlcklkKS50aGVuKGZ1bmN0aW9uICgpIHsKICAgICAgICAvLyB0aGlzLiRyb3V0ZXIuZ28odGhpcy4kcm91dGVyLmN1cnJlbnRSb3V0ZSk7CiAgICAgICAgdXRpbHMucmVsb2FkKCk7CiAgICAgIH0pOwogICAgfSwKICAgIC8v5pKk5ZueCiAgICBoYW5kbGVSZXZva2U6IGZ1bmN0aW9uIGhhbmRsZVJldm9rZShpZCwgc3RhdHVzKSB7CiAgICAgIGlmIChzdGF0dXMgPT0gInJldm9rZVRvU3RhcnQiKSB7CiAgICAgICAgdGhpcy4kbWVzc2FnZS53YXJuaW5nKCLlt7LmkqTlm57vvIzkuI3og73lho3mkqTlm54iKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgLy8gaWYgKHRoaXMuJHJlZnMub3BpbmlvblRleHQuZ2V0T3BpbmlvbigpID09ICIiKSB7CiAgICAgIC8vICAgdGhpcy4kbWVzc2FnZS53YXJuaW5nKCLor7floavlhpnmkqTlm57mhI/op4EiKTsKICAgICAgLy8gICByZXR1cm4gZmFsc2U7CiAgICAgIC8vIH0KICAgICAgdmFyIGRhdGEgPSB7CiAgICAgICAgaW5zdGFuY2VJZDogdGhpcy5pbnN0SWQsCiAgICAgICAgaXNIYW5kUmV2b2tlOiB0aGlzLmlzSGFuZAogICAgICAgIC8vY2F1c2U6IHRoaXMuJHJlZnMub3BpbmlvblRleHQuZ2V0T3BpbmlvbigpCiAgICAgIH07CiAgICAgIHZhciByZXZva2VVcmwgPSAic3RvcmVQcm9jZXNzL3Jldm9rZUluc3RhbmNlQnRuIjsKICAgICAgdGhpcy4kcmVmcy50YXNrVG9SZXZva2Uuc2hvd0RpYWxvZyhyZXZva2VVcmwsIGRhdGEpOwogICAgICAvLyB0aGlzLiRjb25maXJtKCLnoa7orqQiICsgdGhpcy5kYWlsb2dUaXRsZSArICI/IiwgIuaPkOekuiIsIHsKICAgICAgLy8gICBjYW5jZWxCdXR0b25UZXh0OiAi5Y+W5raIIiwKICAgICAgLy8gICBjb25maXJtQnV0dG9uVGV4dDogIuehruWumiIsCiAgICAgIC8vICAgdHlwZTogIndhcm5pbmciLAogICAgICAvLyAgIGNsb3NlT25DbGlja01vZGFsOiBmYWxzZQogICAgICAvLyB9KS50aGVuKCgpID0+IHsKICAgICAgLy8gICB0aGlzLiRzdG9yZQogICAgICAvLyAgICAgLmRpc3BhdGNoKCJzdG9yZVByb2Nlc3MvcmV2b2tlSW5zdGFuY2VCdG4iLCBkYXRhKQogICAgICAvLyAgICAgLnRoZW4oaXNIYW5kUmV2b2tlID0+IHsKICAgICAgLy8gICAgICAgaWYgKHRoaXMudG9rZW4gIT0gbnVsbCkgewogICAgICAvLyAgICAgICAgIHdpbmRvdy5jbG9zZSgpOwogICAgICAvLyAgICAgICB9IGVsc2UgewogICAgICAvLyAgICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKCIvdi1mbG93L3YtdG9kbyIpOwogICAgICAvLyAgICAgICB9CiAgICAgIC8vICAgICB9KTsKICAgICAgLy8gfSk7CiAgICB9LAogICAgc2F2ZVJldm9rZTogZnVuY3Rpb24gc2F2ZVJldm9rZSgpIHsKICAgICAgdmFyIF90aGlzNyA9IHRoaXM7CiAgICAgIGlmICh0aGlzLm9waW5pb24gPT0gIiIpIHsKICAgICAgICB0aGlzLiRtZXNzYWdlLndhcm5pbmcoIuivt+Whq+WGmeaSpOWbnuaEj+ingSIpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICB2YXIgZGF0YSA9IHsKICAgICAgICBpbnN0YW5jZUlkOiB0aGlzLmluc3RJZCwKICAgICAgICBpc0hhbmRSZXZva2U6IHRoaXMuaXNIYW5kLAogICAgICAgIGNhdXNlOiB0aGlzLm9waW5pb24KICAgICAgfTsKICAgICAgdGhpcy4kc3RvcmUuZGlzcGF0Y2goInN0b3JlUHJvY2Vzcy9yZXZva2VJbnN0YW5jZUJ0biIsIGRhdGEpLnRoZW4oZnVuY3Rpb24gKCkgewogICAgICAgIGlmIChfdGhpczcudG9rZW4gIT0gbnVsbCkgewogICAgICAgICAgd2luZG93LmNsb3NlKCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIF90aGlzNy4kcm91dGVyLmdvKC0xKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgICB0aGlzLmRpYWxvZ0Zvcm1WaXNpYmxlID0gZmFsc2U7CiAgICAgIHRoaXMub3BpbmlvbiA9ICIiOwogICAgfSwKICAgIGV4aXRSZXZva2U6IGZ1bmN0aW9uIGV4aXRSZXZva2UoKSB7CiAgICAgIHRoaXMuZGlhbG9nRm9ybVZpc2libGUgPSBmYWxzZTsKICAgICAgdGhpcy5vcGluaW9uID0gIiI7CiAgICB9LAogICAgLy/msp/pgJrlj43ppogKICAgIGNvbW11RmVlZEJhY2s6IGZ1bmN0aW9uIGNvbW11RmVlZEJhY2soKSB7CiAgICAgIHRoaXMuJHJlZnMudGFza1RvRmVlQmFjay5zaG93RGlhbG9nKCk7CiAgICB9LAogICAgdXNlckFkZFNpZ246IGZ1bmN0aW9uIHVzZXJBZGRTaWduKCkgewogICAgICB0aGlzLiRyZWZzLnVzZXJBZGRTaWduUmVwbHkuc2hvd0RpYWxvZygpOwogICAgICAvLyBpZiAodGhpcy4kcmVmcy5vcGluaW9uVGV4dC5nZXRPcGluaW9uKCkgPT0gIiIpIHsKICAgICAgLy8gICBNZXNzYWdlLndhcm5pbmcoIuivt+i+k+WFpeaEj+ingeWGheWuuSIpOwogICAgICAvLyB9IGVsc2UgewogICAgICAvLyAgIGxldCBmaWxlcyA9ICIiOwogICAgICAvLyAgIGxldCB6ZmlsZXMgPSAiIjsKICAgICAgLy8gICB0aGlzLiRyZWZzLmZpbGVVcGxvYWQuaXNGaW5pc2hVcGxvYWQoKTsKICAgICAgLy8gICBpZiAodGhpcy4kcmVmcy5maWxlVXBsb2FkICYmIHRoaXMuJHJlZnMuZmlsZVVwbG9hZC5nZXRGaWxlcygpICE9ICIiKSB7CiAgICAgIC8vICAgICBmaWxlcyA9IEpTT04uc3RyaW5naWZ5KHRoaXMuJHJlZnMuZmlsZVVwbG9hZC5nZXRGaWxlcygpKTsKICAgICAgLy8gICB9CiAgICAgIC8vICAgbGV0IGRhdGEgPSB7CiAgICAgIC8vICAgICBwcm9jRGVmSWQ6IHRoaXMuZGVmSWQsCiAgICAgIC8vICAgICBwcm9jSW5zdElkOiB0aGlzLmluc3RJZCwKICAgICAgLy8gICAgIHN0YXR1czogImlucXVfcmVwbHkiLAogICAgICAvLyAgICAgdGFza0lkOiB0aGlzLnRhc2tJZCwKICAgICAgLy8gICAgIG9waW5pb246IHRoaXMuJHJlZnMub3BpbmlvblRleHQuZ2V0T3BpbmlvbigpLAogICAgICAvLyAgICAgZmlsZXM6IGZpbGVzLAogICAgICAvLyAgICAgemZpbGVzOiB6ZmlsZXMKICAgICAgLy8gICB9OwogICAgICAvLyAgIHRoaXMuJHN0b3JlLmRpc3BhdGNoKCJzdG9yZVByb2Nlc3MvdXNlckFkZFNpZ24iLCBkYXRhKS50aGVuKCgpID0+IHsKICAgICAgLy8gICAgIGlmICh0aGlzLnRva2VuICE9IG51bGwpIHsKICAgICAgLy8gICAgICAgd2luZG93LmNsb3NlKCk7CiAgICAgIC8vICAgICB9IGVsc2UgewogICAgICAvLyAgICAgICB0aGlzLiRyb3V0ZXIuZ28oLTEpOwogICAgICAvLyAgICAgfQogICAgICAvLyAgIH0pOwogICAgICAvLyB9CiAgICB9LAogICAgLy/lvoHor6Llm57lpI0KICAgIHRhc2tUb0lucXVSZXBseTogZnVuY3Rpb24gdGFza1RvSW5xdVJlcGx5KCkgewogICAgICB0aGlzLiRyZWZzLnRhc2tUb0lucXVSZXBseS5zaG93RGlhbG9nKCk7CiAgICAgIC8vIGlmICh0aGlzLiRyZWZzLm9waW5pb25UZXh0LmdldE9waW5pb24oKSA9PSAiIikgewogICAgICAvLyAgIE1lc3NhZ2Uud2FybmluZygi6K+36L6T5YWl5oSP6KeB5YaF5a65Iik7CiAgICAgIC8vIH0gZWxzZSB7CiAgICAgIC8vICAgbGV0IGZpbGVzID0gIiI7CiAgICAgIC8vICAgbGV0IHpmaWxlcyA9ICIiOwogICAgICAvLyAgIHRoaXMuJHJlZnMuZmlsZVVwbG9hZC5pc0ZpbmlzaFVwbG9hZCgpOwogICAgICAvLyAgIGlmICh0aGlzLiRyZWZzLmZpbGVVcGxvYWQgJiYgdGhpcy4kcmVmcy5maWxlVXBsb2FkLmdldEZpbGVzKCkgIT0gIiIpIHsKICAgICAgLy8gICAgIGZpbGVzID0gSlNPTi5zdHJpbmdpZnkodGhpcy4kcmVmcy5maWxlVXBsb2FkLmdldEZpbGVzKCkpOwogICAgICAvLyAgIH0KICAgICAgLy8gICBsZXQgZGF0YSA9IHsKICAgICAgLy8gICAgIHByb2NEZWZJZDogdGhpcy5kZWZJZCwKICAgICAgLy8gICAgIHByb2NJbnN0SWQ6IHRoaXMuaW5zdElkLAogICAgICAvLyAgICAgc3RhdHVzOiAiaW5xdV9yZXBseSIsCiAgICAgIC8vICAgICB0YXNrSWQ6IHRoaXMudGFza0lkLAogICAgICAvLyAgICAgb3BpbmlvbjogdGhpcy4kcmVmcy5vcGluaW9uVGV4dC5nZXRPcGluaW9uKCksCiAgICAgIC8vICAgICBmaWxlczogZmlsZXMsCiAgICAgIC8vICAgICB6ZmlsZXM6IHpmaWxlcywKICAgICAgLy8gICAgIGZvcm1EYXRhOiBKU09OLnN0cmluZ2lmeSh0aGlzLiRyZWZzLmZvcm1Db250ZW50LmRhdGEpCiAgICAgIC8vICAgfTsKICAgICAgLy8gICB0aGlzLiRzdG9yZS5kaXNwYXRjaCgic3RvcmVQcm9jZXNzL3Rhc2tUb0lucXVSZXBseSIsIGRhdGEpLnRoZW4oKCkgPT4gewogICAgICAvLyAgICAgaWYgKHRoaXMudG9rZW4gIT0gbnVsbCkgewogICAgICAvLyAgICAgICB3aW5kb3cuY2xvc2UoKTsKICAgICAgLy8gICAgIH0gZWxzZSB7CiAgICAgIC8vICAgICAgIHRoaXMuJHJvdXRlci5nbygtMSk7CiAgICAgIC8vICAgICB9CiAgICAgIC8vICAgfSk7CiAgICAgIC8vIH0KICAgIH0sCiAgICAvL+mps+Wbnuiuvue9rgogICAgdGFza1RvUmVqZWN0OiBmdW5jdGlvbiB0YXNrVG9SZWplY3QoKSB7CiAgICAgIC8vIOWuoeaJuemZhOS7tuaVsOaNrgogICAgICAvLyBpZiAodGhpcy4kcmVmcy5maWxlVXBsb2FkICYmIHRoaXMuJHJlZnMuZmlsZVVwbG9hZC5nZXRGaWxlcygpICE9ICIiKSB7CiAgICAgIC8vICAgdGhpcy5vcGluaW9uRmlsZXMgPSBKU09OLnN0cmluZ2lmeSh0aGlzLiRyZWZzLmZpbGVVcGxvYWQuZ2V0RmlsZXMoKSk7CiAgICAgIC8vIH0KICAgICAgdmFyIHBhcmVudFRhc2tJZCA9ICIiOyAvL+eUqOaIt+S7u+WKoeWKoOetvuWQjueahOeItuS7u+WKoUlECiAgICAgIGlmICh0aGlzLm5vZGVUeXBlID09ICJVU0VSVEFTSyIgJiYgdGhpcy50YXNrcy5icG1UYXNrLnBhcmVudElkICE9ICIwIikgewogICAgICAgIC8v55So5oi35Lu75Yqh5Yqg562+CiAgICAgICAgcGFyZW50VGFza0lkID0gdGhpcy50YXNrcy5icG1UYXNrLnBhcmVudElkOwogICAgICB9CiAgICAgIHRoaXMuJHJlZnMudGFza1RvUmVqZWN0LmhhbmRsZU9wZW4ocGFyZW50VGFza0lkLCB0aGlzKTsgLy/niLbnu4Tku7bosIPnlKjlrZDnu4Tku7bmlrnms5UKICAgIH0sCiAgICAvL+i9rOWKnuiuvue9rgogICAgdGFza1RvRGVsZWdhdGU6IGZ1bmN0aW9uIHRhc2tUb0RlbGVnYXRlKCkgewogICAgICB0aGlzLiRyZWZzLnRhc2tUb0RlbGVnYXRlLmhhbmRsZUNsb3NlKHRoaXMub3BpbmlvbkZpZWxkLCB0aGlzLiRyZWZzLmZvcm1Db250ZW50LmRhdGEsIHRoaXMuYXBwZW5kT3BpbmlvbiwgdGhpcyk7IC8v54i257uE5Lu26LCD55So5a2Q57uE5Lu25pa55rOVCiAgICB9LAogICAgLy/lvoHor6Lorr7nva4KICAgIHRhc2tUb0lucXU6IGZ1bmN0aW9uIHRhc2tUb0lucXUoKSB7CiAgICAgIGlmICh0aGlzLnN0YXR1cyAhPSAiVFJBTlNGT1JNRURJTlFVIikgewogICAgICAgIHRoaXMuJHJlZnMudGFza1RvSW5xdS5zaG93VHlwZSgpOwogICAgICB9CiAgICAgIHRoaXMuJHJlZnMudGFza1RvSW5xdS5oYW5kbGVDbG9zZSh0aGlzLm9waW5pb25GaWVsZCwgdGhpcy4kcmVmcy5mb3JtQ29udGVudC5kYXRhLCB0aGlzLmFwcGVuZE9waW5pb24pOyAvL+eItue7hOS7tuiwg+eUqOWtkOe7hOS7tuaWueazlQogICAgfSwKICAgIC8v5rWB56iL57uI5q2iCiAgICB0YXNrVG9FbmRQcm9jZXNzOiBmdW5jdGlvbiB0YXNrVG9FbmRQcm9jZXNzKCkgewogICAgICB0aGlzLiRyZWZzLnRhc2tUb0VuZFByb2Nlc3MuaGFuZGxlQ2xvc2UodGhpcyk7IC8v54i257uE5Lu26LCD55So5a2Q57uE5Lu25pa55rOVCiAgICB9LAogICAgLy/mtYHovazorr7nva4KICAgIHRhc2tUb1RyYW5zOiBmdW5jdGlvbiB0YXNrVG9UcmFucygpIHsKICAgICAgLy8gaWYgKHRoaXMuJHJlZnMuZmlsZVVwbG9hZCAmJiB0aGlzLiRyZWZzLmZpbGVVcGxvYWQuZ2V0RmlsZXMoKSAhPSAiIikgewogICAgICAvLyAgIHRoaXMub3BpbmlvbkZpbGVzID0gSlNPTi5zdHJpbmdpZnkodGhpcy4kcmVmcy5maWxlVXBsb2FkLmdldEZpbGVzKCkpOwogICAgICAvLyB9CiAgICAgIHRoaXMuJHJlZnMudGFza1RvVHJhbnMuaGFuZGxlQ2xvc2UodGhpcywgdGhpcy5vcGluaW9uRmllbGQsIHRoaXMuJHJlZnMuZm9ybUNvbnRlbnQuZGF0YSwgdGhpcy5hcHBlbmRPcGluaW9uKTsgLy/niLbnu4Tku7bosIPnlKjlrZDnu4Tku7bmlrnms5UKICAgIH0sCiAgICAvL+WKoOetvuiuvue9rgogICAgdGFza1RvQWRkU2lnbjogZnVuY3Rpb24gdGFza1RvQWRkU2lnbigpIHsKICAgICAgdGhpcy4kcmVmcy50YXNrVG9BZGRTaWduLmhhbmRsZUNsb3NlKHRoaXMubm9kZVR5cGUsIHRoaXMuaW5zdElkLCB0aGlzKTsgLy/niLbnu4Tku7bosIPnlKjlrZDnu4Tku7bmlrnms5UKICAgIH0sCiAgICAvL+S7u+WKoeW7tuacnwogICAgdGFza1RvRGVsYXk6IGZ1bmN0aW9uIHRhc2tUb0RlbGF5KCkgewogICAgICB0aGlzLiRyZWZzLnRhc2tUb0RlbGF5LmhhbmRsZUNsb3NlKCk7IC8v54i257uE5Lu26LCD55So5a2Q57uE5Lu25pa55rOVCiAgICB9LAogICAgLy/lubbooYzlrqHmibkKICAgIHRhc2tBcHByb3ZlTGluZTogZnVuY3Rpb24gdGFza0FwcHJvdmVMaW5lKCkgewogICAgICB0aGlzLiRyZWZzLnRhc2tUb0FwcHJvdmVMaW5lLmhhbmRsZUNsb3NlKCk7IC8v54i257uE5Lu26LCD55So5a2Q57uE5Lu25pa55rOVCiAgICB9LAogICAgLy8g6aG65bqP562+572yCiAgICB0YXNrU2lnblNlcXVlbmNlOiBmdW5jdGlvbiB0YXNrU2lnblNlcXVlbmNlKCkgewogICAgICB0aGlzLiRyZWZzLnRhc2tUb1NpZ25TZXF1ZW5jZS5oYW5kbGVDbG9zZSgpOyAvL+eItue7hOS7tuiwg+eUqOWtkOe7hOS7tuaWueazlQogICAgfSwKICAgIC8vIOW5tuihjOetvue9sgogICAgdGFza1NpZ25MaW5lOiBmdW5jdGlvbiB0YXNrU2lnbkxpbmUoKSB7CiAgICAgIHRoaXMuJHJlZnMudGFza1RvU2lnbkxpbmUuaGFuZGxlQ2xvc2UoKTsgLy/niLbnu4Tku7bosIPnlKjlrZDnu4Tku7bmlrnms5UKICAgIH0sCiAgICBkb05leHQ6IGZ1bmN0aW9uIGRvTmV4dCgpIHsKICAgICAgdmFyIF90aGlzOCA9IHRoaXM7CiAgICAgIGlmICghdGhpcy50ZXh0KSB7CiAgICAgICAgaWYgKHRoaXMuYWN0aW9uTmFtZSA9PSAib3Bwb3NlVHJhbnMiIHx8IHRoaXMuYWN0aW9uTmFtZSA9PSAib3Bwb3NlIikgewogICAgICAgICAgdGhpcy50ZXh0ID0gIuWPjeWvuSI7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRoaXMudGV4dCA9ICLlkIzmhI8iOwogICAgICAgIH0KICAgICAgfQogICAgICB2YXIgdGhpc18gPSB0aGlzOwogICAgICB1dGlscy5nZXRPbmxpbmVGb3JtRGF0YSh0cnVlKS50aGVuKGZ1bmN0aW9uIChmb3JtRGF0YVN0cikgewogICAgICAgIHJldHVybiB0aGlzXy5kb05leHRTdWJtaXQoZm9ybURhdGFTdHIpOwogICAgICB9KS5jYXRjaChmdW5jdGlvbiAocmVhc29uKSB7CiAgICAgICAgcmV0dXJuIHV0aWxzLmhhbmRsZUdldEZvcm1EYXRhUmVqZWN0KHJlYXNvbikudGhlbihmdW5jdGlvbiAoKSB7CiAgICAgICAgICByZXR1cm4gX3RoaXM4LmRvTmV4dFN1Ym1pdCgpOwogICAgICAgIH0pOwogICAgICB9KTsKICAgIH0sCiAgICAvLyBkb05leHTmiafooYzjgIJmb3JtRGF0YVN0cu+8muWtl+espuS4suagvOW8j+eahOihqOWNleaVsOaNruOAggogICAgZG9OZXh0U3VibWl0OiBmdW5jdGlvbiBkb05leHRTdWJtaXQoZm9ybURhdGFTdHIpIHsKICAgICAgdmFyIF90aGlzID0gdGhpczsKICAgICAgdmFyIHNjcmlwdFJlc3VsdCA9IHRoaXMucnVuQmVmb3JlU2NyaXB0KCk7CiAgICAgIC8v5omn6KGM5YmN572u6ISa5pys6L+U5ZueZmFsc2Xml7bnu4jmraLmjInpkq7mk43kvZwKICAgICAgaWYgKHNjcmlwdFJlc3VsdCA9PT0gZmFsc2UpIHJldHVybjsKICAgICAgLy/miafooYzliY3nva7ohJrmnKzov5Tlm57nmoTmjqXlj6Pml7blhYjmiafooYzliY3nva7kuovku7bmjqXlj6MKICAgICAgaWYgKHNjcmlwdFJlc3VsdC50aGVuICYmIHR5cGVvZiBzY3JpcHRSZXN1bHQudGhlbiA9PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgc2NyaXB0UmVzdWx0LnRoZW4oZnVuY3Rpb24gKCkgewogICAgICAgICAgLy/mjqXlj6Pov5Tlm57miJDlip/liJnmraPluLjmiafooYzmjInpkq7mk43kvZwKICAgICAgICAgIF90aGlzLmZ1bmNEb05leHQoZm9ybURhdGFTdHIpOwogICAgICAgIH0sIGZ1bmN0aW9uIChmYWlsKSB7CiAgICAgICAgICAvL+aOpeWPo+i/lOWbnuWksei0peWImee7iOatouaMiemSruaTjeS9nO+8jOW5tue7meS4juaPkOekugogICAgICAgICAgX3RoaXMuJG1lc3NhZ2Uud2FybmluZyhmYWlsKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9KTsKICAgICAgfSBlbHNlIHsKICAgICAgICAvL+aJp+ihjOWJjee9ruiEmuacrOi/lOWbnnRydWXml7bmraPluLjmiafooYzmjInpkq7mk43kvZwKICAgICAgICBfdGhpcy5mdW5jRG9OZXh0KGZvcm1EYXRhU3RyKTsKICAgICAgfQogICAgfSwKICAgIGZ1bmNEb05leHQ6IGZ1bmN0aW9uIGZ1bmNEb05leHQoZm9ybURhdGFTdHIpIHsKICAgICAgdmFyIF90aGlzOSA9IHRoaXM7CiAgICAgIHV0aWxzLmNsb3NlQWxsTm90aWZpY2F0aW9uKCk7CiAgICAgIHZhciBkYXRhID0gdGhpcy5oYW5kbGVGb3JtRGF0YShmb3JtRGF0YVN0cik7CiAgICAgIGRhdGEuZm9ybUtleSA9IHRoaXMuJHJlZnMuZm9ybUNvbnRlbnQuZm9ybUtleTsKICAgICAgZGF0YS5vcGluaW9uID0gdGhpcy50ZXh0OwogICAgICBpZiAodGhpcy5ub2RlVHlwZSA9PSAiVVNFUlRBU0siICYmIHRoaXMudGFza3MuYnBtVGFzay5wYXJlbnRJZCAhPSAiMCIpIHsKICAgICAgICAvL+eUqOaIt+S7u+WKoeWKoOetvgogICAgICAgIGlmICh0aGlzLmFjdGlvbk5hbWUgPT0gIm9wcG9zZSIpIHsKICAgICAgICAgIGRhdGEuYWRkU2lnbkFjdGlvbiA9ICJvcHBvc2VUcmFucyI7CiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmFjdGlvbk5hbWUgPT0gImFncmVlIikgewogICAgICAgICAgZGF0YS5hZGRTaWduQWN0aW9uID0gImFncmVlVHJhbnMiOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoKHRoaXMuY2hvaWNlRXhjdXRvciB8fCB0aGlzLmp1bXBUeXBlIHx8IHRoaXMuJHJvdXRlLnF1ZXJ5LnR5cGUgPT09ICdmcmVlJykgJiYgIXRoaXMudGFza1N0YXR1c0FycmF5LmluY2x1ZGVzKHRoaXMuc3RhdHVzKSkgewogICAgICAgIHRoaXMuJHN0b3JlLmRpc3BhdGNoKCJzdG9yZVByb2Nlc3MvZ2V0QWZ0ZXJKdW1wTm9kZXMiLCB7CiAgICAgICAgICB0YXNrSWQ6IHRoaXMudGFza0lkLAogICAgICAgICAgZGF0YTogZGF0YS5kYXRhLAogICAgICAgICAgZGVmSWQ6ICIiLAogICAgICAgICAgaW5zdElkOiAiIiwKICAgICAgICAgIHR5cGU6IHRoaXMuJHJvdXRlLnF1ZXJ5LnR5cGUgfHwgdGhpcy5qdW1wVHlwZQogICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKHJlcykgewogICAgICAgICAgZGVidWdnZXI7CiAgICAgICAgICBpZiAocmVzLmFmdGVyTm9kZXMubGVuZ3RoID09IDAgfHwgcmVzLmFmdGVyTm9kZXMubGVuZ3RoID09IDEgJiYgcmVzLmFmdGVyTm9kZXNbMF0uZXhjdXRvckxpc3QgIT0gdW5kZWZpbmVkICYmIHJlcy5hZnRlck5vZGVzWzBdLmV4Y3V0b3JMaXN0Lmxlbmd0aCA9PSAxKSB7CiAgICAgICAgICAgIF90aGlzOS4kcmVmcy50YXNrVG9Db21wbGV0ZS5zaG93RGlhbG9nKF90aGlzOS5vcGluaW9uRmllbGQsIF90aGlzOS4kcmVmcy5mb3JtQ29udGVudC5kYXRhLCBfdGhpczkuYXBwZW5kT3BpbmlvbiwgZGF0YSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBfdGhpczkuJHJlZnMudGFza1NlbGVjdERlc3RpbmF0aW9uLnNob3dEaWFsb2coZGF0YS5kYXRhLCBkYXRhLmZpbGVzLCBkYXRhLnpmaWxlcywgZGF0YS5vcGluaW9uLCBfdGhpczkuaW5zdElkLCBfdGhpczkuanVtcFR5cGUpOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9IGVsc2UgewogICAgICAgIC8vdGhpcy5kaXNhYmxlZCA9IHRydWU7CiAgICAgICAgdmFyIHRpcE1zZyA9ICLnoa7orqTlip7nkIbmraTku7vliqE/IjsKICAgICAgICBpZiAodGhpcy5hY3Rpb25OYW1lID09ICJhZ3JlZSIgJiYgdGhpcy5zdGF0dXMgPT0gIlNJR05TRVFVRU5DRUVEIikgewogICAgICAgICAgdGhpcy4kaHR0cC5nZXQoIiR7YnBtUnVuVGltZX0vcnVudGltZS90YXNrL3YxL25leHRFeGVjdXRvcj90YXNrSWQ9IiArIHRoaXMudGFza0lkKS50aGVuKGZ1bmN0aW9uIChyZXNwb25zZSkgewogICAgICAgICAgICBpZiAocmVzcG9uc2UuZGF0YS5zdGF0ZSAmJiByZXNwb25zZS5kYXRhLnZhbHVlKSB7CiAgICAgICAgICAgICAgdGlwTXNnID0gIlx1NEUwQlx1NEUwMFx1NkI2NVx1NzY4NFx1NjI2N1x1ODg0Q1x1NEVCQVx1NEUzQVx1RkYxQSIuY29uY2F0KHJlc3BvbnNlLmRhdGEudmFsdWUubmFtZSwgIlx1MzAwMjxici8+IFx1NjBBOFx1Nzg2RVx1NUI5QVx1ODk4MVx1NjNEMFx1NEVBNFx1NTQxN1x1RkYxRiIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIF90aGlzOS4kcmVmcy50YXNrVG9Db21wbGV0ZS5zaG93RGlhbG9nKF90aGlzOS5vcGluaW9uRmllbGQsIF90aGlzOS4kcmVmcy5mb3JtQ29udGVudC5kYXRhLCBfdGhpczkuYXBwZW5kT3BpbmlvbiwgZGF0YSk7CiAgICAgICAgICB9KTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgdGhpcy4kcmVmcy50YXNrVG9Db21wbGV0ZS5zaG93RGlhbG9nKHRoaXMub3BpbmlvbkZpZWxkLCB0aGlzLiRyZWZzLmZvcm1Db250ZW50LmRhdGEsIHRoaXMuYXBwZW5kT3BpbmlvbiwgZGF0YSk7CiAgICAgIH0KICAgIH0sCiAgICAvL+WQjOaEjwogICAgdGFza0FncmVlOiBmdW5jdGlvbiB0YXNrQWdyZWUoKSB7CiAgICAgIHRoaXMuYWN0aW9uTmFtZSA9ICJhZ3JlZSI7CiAgICAgIHRoaXMuZG9OZXh0KCk7CiAgICB9LAogICAgLy/lkIzmhI/vvIjmtYHovazvvIkKICAgIHRhc2tBZ3JlZVRyYW5zOiBmdW5jdGlvbiB0YXNrQWdyZWVUcmFucygpIHsKICAgICAgdGhpcy5hY3Rpb25OYW1lID0gImFncmVlVHJhbnMiOwogICAgICB0aGlzLmRvTmV4dCgpOwogICAgfSwKICAgIC8v5Y+N5a+5CiAgICB0YXNrT3Bwb3NlOiBmdW5jdGlvbiB0YXNrT3Bwb3NlKCkgewogICAgICB0aGlzLmFjdGlvbk5hbWUgPSAib3Bwb3NlIjsKICAgICAgdGhpcy5kb05leHQoKTsKICAgIH0sCiAgICAvL+WPjeWvue+8iOa1gei9rO+8iQogICAgdGFza09wcG9zZVRyYW5zOiBmdW5jdGlvbiB0YXNrT3Bwb3NlVHJhbnMoKSB7CiAgICAgIHRoaXMuYWN0aW9uTmFtZSA9ICJvcHBvc2VUcmFucyI7CiAgICAgIHRoaXMuZG9OZXh0KCk7CiAgICB9LAogICAgaGlkZGVuT3BlcnRpb246IGZ1bmN0aW9uIGhpZGRlbk9wZXJ0aW9uKCkgewogICAgICBpZiAodGhpcy4kcmVmcy5idG5SZWdpb24pIHsKICAgICAgICB0aGlzLiRyZWZzLmJ0blJlZ2lvbi5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwogICAgICB9CiAgICAgIHRoaXMuJHJlZnMuZm9ybUNvbnRlbnQuaGlkZGVuQ29udGVudCgpOwogICAgfSwKICAgIC8v5piv5ZCm5pi+56S65rua5Yqo5p2hCiAgICBpc1Njcm9sbDogZnVuY3Rpb24gaXNTY3JvbGwoKSB7CiAgICAgIC8v5bGP5bmV5a695bqmCiAgICAgIHZhciB3aW5kb3dfd2lkdGggPSAkKHdpbmRvdykud2lkdGgoKTsKICAgICAgLy/lrqHmibnpobXpnaLlrr3luqYKICAgICAgdmFyIGZyb21fdyA9ICQoIm1haW4iKVswXS5jbGllbnRXaWR0aDsKICAgICAgLy/mnInmu5rliqjmnaEKICAgICAgaWYgKHdpbmRvd193aWR0aCA+IGZyb21fdykgewogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0sCiAgICAvL+aMgui1twogICAgaGFuZ1VwOiBmdW5jdGlvbiBoYW5nVXAoKSB7CiAgICAgIHZhciBfdGhpczEwID0gdGhpczsKICAgICAgZmxvdy5mb3JiaWRkZW5JbnN0YW5jZSh0aGlzLmluc3RJZCkudGhlbihmdW5jdGlvbiAoZGF0YSkgewogICAgICAgIGlmIChkYXRhLnN0YXRlKSB7CiAgICAgICAgICBfdGhpczEwLiRtZXNzYWdlKHsKICAgICAgICAgICAgdHlwZTogInN1Y2Nlc3MiLAogICAgICAgICAgICBtZXNzYWdlOiBkYXRhLm1lc3NhZ2UKICAgICAgICAgIH0pOwogICAgICAgICAgX3RoaXMxMC5jaGVja0luc3RTdGF0dXMoKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfSwKICAgIC8v5Y+W5raI5oyC6LW3CiAgICBjYW5jZWxIYW5nVXA6IGZ1bmN0aW9uIGNhbmNlbEhhbmdVcCgpIHsKICAgICAgdmFyIF90aGlzMTEgPSB0aGlzOwogICAgICBmbG93LnVuRm9yYmlkZGVuSW5zdGFuY2UodGhpcy5pbnN0SWQpLnRoZW4oZnVuY3Rpb24gKGRhdGEpIHsKICAgICAgICBpZiAoZGF0YS5zdGF0ZSkgewogICAgICAgICAgX3RoaXMxMS4kbWVzc2FnZSh7CiAgICAgICAgICAgIHR5cGU6ICJzdWNjZXNzIiwKICAgICAgICAgICAgbWVzc2FnZTogZGF0YS5tZXNzYWdlCiAgICAgICAgICB9KTsKICAgICAgICAgIF90aGlzMTEuY2hlY2tJbnN0U3RhdHVzKGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgX3RoaXMxMS5pc0hhbmcgPSBmYWxzZTsKICAgICAgICAgICAgX3RoaXMxMS5kaXNhYmxlZCA9IGZhbHNlOwogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0sCiAgICAvL+i3s+i9rOWIsOS4i+S4gOS4quS7u+WKoQogICAgbmV4dFRhc2s6IGZ1bmN0aW9uIG5leHRUYXNrKCkgewogICAgICB2YXIgX3RoaXMxMiA9IHRoaXM7CiAgICAgIHZhciBfdGhpcyA9IHRoaXM7CiAgICAgIGlmIChfdGhpcy4kcm91dGUubmFtZS5pbmRleE9mKCJyZXBvcnRNb2R1bGVJbnN0IikgIT0gLTEpIHsKICAgICAgICBfdGhpcy4kcm91dGVyLnB1c2goIi9zdGF0ZW1lbnQvdGVtcGxhdGUvcHJldmlldy8iICsgX3RoaXMuJHJvdXRlLnBhcmFtcy50ZW1wbGF0ZUtleSArICIvdG9kby8iICsgX3RoaXMuJHJvdXRlLnBhcmFtcy5kZWZLZXkgKyAiL3RydWUiKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLiRzdG9yZS5kaXNwYXRjaCgic3RvcmVQcm9jZXNzL2dldE5leHRUYXNrQnlEZWZJZCIsIHsKICAgICAgICAgIGRlZklkOiB0aGlzLmRlZklkLAogICAgICAgICAgZGVmS2V5OiB0aGlzLmRlZktleQogICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKHJlc3ApIHsKICAgICAgICAgIGlmIChyZXNwLnN0YXRlKSB7CiAgICAgICAgICAgIC8v6Lez6L2s5Yiw5paw55qE5b6F5Yqe6aG16Z2iCiAgICAgICAgICAgIGlmIChyZXNwLnZhbHVlKSB7CiAgICAgICAgICAgICAgX3RoaXMxMi5oYW5kbGVPcGVuVGFzayhyZXNwLnZhbHVlKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBfdGhpczEyLiRtZXNzYWdlKHsKICAgICAgICAgICAgICAgIHR5cGU6ICJzdWNjZXNzIiwKICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICLor6XmtYHnqIvmiYDlsZ7ku7vliqHlt7LlpITnkIblrozmiJAiCiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICBpZiAoX3RoaXMxMi4kcm91dGUubmFtZS5pbmRleE9mKCJzeXNNb2R1bGVJbnN0IikgIT0gLTEpIHsKICAgICAgICAgICAgICAgICAgX3RoaXMuJHJvdXRlci5wdXNoKCIvdi1mbG93L3YtdG9kby8iICsgX3RoaXMuJHJvdXRlLnBhcmFtcy5kZWZLZXkpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgX3RoaXMuJHJvdXRlci5wdXNoKCIvdi1mbG93L3YtdG9kby8iKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9LCAxMCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfQogICAgfSwKICAgIGhhbmRsZU9wZW5UYXNrOiBmdW5jdGlvbiBoYW5kbGVPcGVuVGFzayhyb3cpIHsKICAgICAgaWYgKHJvdy5zdGF0dXMgPT0gIlNIQVJFIiB8fCByb3cuc3RhdHVzID09ICJCQUNLU0hBUkUiKSB7CiAgICAgICAgaWYgKHJvdy5pZGVudGl0eUxpc3QgJiYgcm93LmlkZW50aXR5TGlzdC5sZW5ndGggPT0gMSkgewogICAgICAgICAgdmFyIHVybCA9ICIvdGFzay8iICsgcm93LmlkICsgIi8iICsgcm93LmlkZW50aXR5TGlzdFswXS5pZDsKICAgICAgICAgIHRoaXMub3BlbkFuZFJlbG9hZCh1cmwpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB2YXIgaHRtbCA9ICI8c2VsZWN0IHJlZj0iICsgTWF0aC5yYW5kb20oKSArICcgaWQ9ImFwcHJvdmFsTGVhZGVyU2VsZWN0IiBzdHlsZT0id2lkdGg6IDIwMHB4O2hlaWdodDogMzBweDtib3JkZXItcmFkaXVzOiA0cHg7bWFyZ2luOiAyMHB4IDcwcHg7IiA+PG9wdGlvbiB2YWx1ZT0iIj7or7fpgInmi6k8L29wdGlvbj4nOwogICAgICAgICAgcm93LmlkZW50aXR5TGlzdC5mb3JFYWNoKGZ1bmN0aW9uIChpZGVudGl0eSkgewogICAgICAgICAgICBodG1sICs9ICc8b3B0aW9uIHZhbHVlPSInICsgaWRlbnRpdHkuaWQgKyAnIj4nICsgaWRlbnRpdHkubmFtZSArICI8L29wdGlvbj4iOwogICAgICAgICAgfSk7CiAgICAgICAgICBodG1sICs9ICI8L3NlbGVjdD4iOwogICAgICAgICAgdmFyIHRoaXNfID0gdGhpczsKICAgICAgICAgIHRoaXMuJGFsZXJ0KGh0bWwsICLor7fpgInmi6nkuIDkuKrpooblr7zku6PkuLrlrqHmibkiLCB7CiAgICAgICAgICAgIGRhbmdlcm91c2x5VXNlSFRNTFN0cmluZzogdHJ1ZSwKICAgICAgICAgICAgYmVmb3JlQ2xvc2U6IGZ1bmN0aW9uIGJlZm9yZUNsb3NlKGFjdGlvbiwgaW5zdGFuY2UsIGRvbmUpIHsKICAgICAgICAgICAgICBpZiAoYWN0aW9uID09ICJjb25maXJtIikgewogICAgICAgICAgICAgICAgdmFyIHNlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFwcHJvdmFsTGVhZGVyU2VsZWN0Iik7CiAgICAgICAgICAgICAgICBpZiAoc2Uuc2VsZWN0ZWRJbmRleCA9PSAwKSB7CiAgICAgICAgICAgICAgICAgIHRoaXMuJG1lc3NhZ2Uud2FybmluZygi6K+36YCJ5oup5Luj5Li65a6h5om555qE6aKG5a+8Iik7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICBpbnN0YW5jZS5jbG9zZSgpOwogICAgICAgICAgICAgICAgICB0aGlzXy5vcGVuQW5kUmVsb2FkKCIvdGFzay8iICsgcm93LmlkICsgIi8iICsgc2Vbc2Uuc2VsZWN0ZWRJbmRleF0udmFsdWUpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBpbnN0YW5jZS5jbG9zZSgpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKHJvdy5zdGF0dXMgPT0gIkFHRU5UIiAmJiByb3cub3duZXJJZCAhPSByb3cuYXNzaWduZWVJZCAmJiByb3cub3duZXJJZCA9PSB0aGlzLiRzdG9yZS5zdGF0ZS5sb2dpbi5jdXJyZW50VXNlci51c2VySWQpIHsKICAgICAgICAvL+WnlOaJmOS7u+WKoQogICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKCIvaW5zdFJlYWQvIiArIHJvdy5wcm9jSW5zdElkICsgIi9hZ2VudCIpOwogICAgICB9IGVsc2UgaWYgKHJvdy5zdGF0dXMgPT0gIkZPTExPVyIpIHsKICAgICAgICAvL+i3n+i4quS7u+WKoQogICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKCIvdGFza1JlYWQvIiArIHJvdy5pZCArICIvRk9MTE9XIik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdmFyIF91cmwgPSAiL3Rhc2svIiArIHJvdy5pZCArICIvMCI7CiAgICAgICAgaWYgKHRoaXMuJHJvdXRlLm5hbWUuaW5kZXhPZigicmVwb3J0TW9kdWxlSW5zdCIpICE9IC0xKSB7CiAgICAgICAgICBfdXJsID0gIi9yZXBvcnRNb2R1bGVJbnN0LyIgKyByb3cuaWQgKyAiLzAiICsgIi8iICsgdGhpcy4kcm91dGUucGFyYW1zLmRlZktleSArICIvdHJ1ZS8iICsgdGhpcy4kcm91dGUudGVtcGxhdGVLZXk7CiAgICAgICAgfSBlbHNlIGlmICh0aGlzLiRyb3V0ZS5uYW1lLmluZGV4T2YoInN5c01vZHVsZUluc3QiKSAhPSAtMSkgewogICAgICAgICAgX3VybCA9ICIvc3lzTW9kdWxlSW5zdC8iICsgcm93LmlkICsgIi8wIiArICIvIiArIHRoaXMuJHJvdXRlLnBhcmFtcy5kZWZLZXkgKyAiL3RydWUiOwogICAgICAgIH0KICAgICAgICB0aGlzLm9wZW5BbmRSZWxvYWQoX3VybCk7CiAgICAgIH0KICAgIH0sCiAgICBvcGVuQW5kUmVsb2FkOiBmdW5jdGlvbiBvcGVuQW5kUmVsb2FkKHVybCkgewogICAgICB2YXIgX3RoaXMxMyA9IHRoaXM7CiAgICAgIHRoaXMuJHJvdXRlci5wdXNoKHVybCk7CiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgICAgIF90aGlzMTMuJHJvb3QuJGNoaWxkcmVuWzBdLnJlbG9hZCgpOwogICAgICB9LCAxMCk7CiAgICB9CiAgfSwKICBjcmVhdGVkOiBmdW5jdGlvbiBjcmVhdGVkKCkgewogICAgLy/lhbzlrrnlj6rmmL7npLrlrqHmibnpobXpnaLml7YKICAgIGlmICh0aGlzLiRyb3V0ZS5tZXRhLnNpbmdsZSkgewogICAgICB0aGlzLmlzRGQgPSB0cnVlOwogICAgfQogICAgaWYgKHRoaXMudHlwZSA9PSAiZG9uZSIpIHsKICAgICAgdGhpcy5kYWlsb2dUaXRsZSA9ICLmkqTlm54iOwogICAgICB0aGlzLmlzSGFuZCA9IHRydWU7CiAgICB9IGVsc2UgaWYgKHRoaXMudHlwZSA9PSAicmVxdWVzdCIpIHsKICAgICAgdGhpcy5kYWlsb2dUaXRsZSA9ICLmkqTlm57liLDlj5HotbfkuroiOwogICAgICB0aGlzLmlzSGFuZCA9IGZhbHNlOwogICAgfQogIH0KfTs="},null]}