{"remainingRequest":"/data/jenkins/workspace/badp-bcxin-web-5.x-dispatch-rail/node_modules/vue-loader/lib/index.js??vue-loader-options!/data/jenkins/workspace/badp-bcxin-web-5.x-dispatch-rail/src/views/rail/index.vue?vue&type=script&lang=js","dependencies":[{"path":"/data/jenkins/workspace/badp-bcxin-web-5.x-dispatch-rail/src/views/rail/index.vue","mtime":1705389397681},{"path":"/data/jenkins/workspace/badp-bcxin-web-5.x-dispatch-rail/node_modules/cache-loader/dist/cjs.js","mtime":499162500000},{"path":"/data/jenkins/workspace/badp-bcxin-web-5.x-dispatch-rail/node_modules/babel-loader/lib/index.js","mtime":456789000000},{"path":"/data/jenkins/workspace/badp-bcxin-web-5.x-dispatch-rail/node_modules/cache-loader/dist/cjs.js","mtime":499162500000},{"path":"/data/jenkins/workspace/badp-bcxin-web-5.x-dispatch-rail/node_modules/vue-loader/lib/index.js","mtime":499162500000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:CmltcG9ydCB7IHV0aWxzLCBWTWFwLCBWVGlsZSwgVlZlY3RvciwgVk92ZXJsYXksIFZEcmF3IH0gZnJvbSAidi1vbC1tYXAiOwppbXBvcnQgInYtb2wtbWFwL2xpYi92LW9sLW1hcC5jc3MiOwppbXBvcnQgbWFwVG9vbGJhciBmcm9tICJAL2NvbXBvbmVudHMvbWFwVG9vbGJhci9pbmRleC52dWUiOwppbXBvcnQgeyBNZXNzYWdlIH0gZnJvbSAiZWxlbWVudC11aSI7CmltcG9ydCB7IGRlbGV0ZVJhaWxBY2Nlc3MsIGdldFJhaWxEZXRhaWxBY2Nlc3MsIHNlYXJjaFJhaWxBY2Nlc3MgfSBmcm9tICJAL2FwaS9zZWN1cml0eS1zdGF0aW9uLXJhaWxzLWNvbnRyb2xsZXIiOwppbXBvcnQgeyB0ZXh0U2xpY2UgfSBmcm9tICJAL2FwaS9jb21tb24iOwppbXBvcnQgT3ZlcmxheVN0YXRpb24gZnJvbSAiQC9jb21wb25lbnRzL21hcE92ZXJsYXkvc3RhdGlvbiI7CmltcG9ydCBPdmVybGF5Q29tcGFueSBmcm9tICJAL2NvbXBvbmVudHMvbWFwT3ZlcmxheS9jb21wYW55IjsKaW1wb3J0IHsgZ2V0Q29tcGFueURldGFpbCB9IGZyb20gIkAvYXBpL2NvbXBhbnktY29udHJvbGxlciI7CmltcG9ydCB7IGdldEVtcGxveWVlcyB9IGZyb20gIkAvYXBpL2VtcGxveWVlLWNvbnRyb2xsZXIiOwppbXBvcnQgT3ZlcmxheVN0YXRpb25FbXBsb3llZXMgZnJvbSAiQC9jb21wb25lbnRzL21hcE92ZXJsYXkvc3RhdGlvbkVtcGxveWVlcyI7CmltcG9ydCBlbGVjdHJvbmljRmVuY2VEaWFsb2cgZnJvbSAiQC92aWV3cy9yYWlsL2NvbXBvbmVudHMvZWxlY3Ryb25pY0ZlbmNlLnZ1ZSI7CmltcG9ydCBlbGVjdHJvbmljRmVuY2VFZGl0RGlhbG9nIGZyb20gIkAvY29tcG9uZW50cy9lbGVjdHJvbmljRmVuY2VFZGl0LnZ1ZSI7CmltcG9ydCBlbGVjdHJvbmljRmVuY2VQZW9wbGUgZnJvbSAiQC9jb21wb25lbnRzL2VsZWN0cm9uaWNGZW5jZVBlb3BsZS52dWUiOwppbXBvcnQgZWxlY3Ryb25pY0ZlbmNlU3RhdGlvbkRpYWxvZyBmcm9tICJAL2NvbXBvbmVudHMvZWxlY3Ryb25pY0ZlbmNlU3RhdGlvbi52dWUiOwoKZXhwb3J0IGRlZmF1bHQgewogIG5hbWU6ICJyYWlsIiwKICBjb21wb25lbnRzOiB7CiAgICBWTWFwLAogICAgVlRpbGUsCiAgICBWVmVjdG9yLAogICAgVk92ZXJsYXksCiAgICBWRHJhdywKICAgIG1hcFRvb2xiYXIsCiAgICBPdmVybGF5U3RhdGlvbiwKICAgIE92ZXJsYXlDb21wYW55LAogICAgT3ZlcmxheVN0YXRpb25FbXBsb3llZXMsCiAgICBlbGVjdHJvbmljRmVuY2VEaWFsb2csCiAgICBlbGVjdHJvbmljRmVuY2VFZGl0RGlhbG9nLAogICAgZWxlY3Ryb25pY0ZlbmNlU3RhdGlvbkRpYWxvZywKICAgIGVsZWN0cm9uaWNGZW5jZVBlb3BsZSwKICB9LAogIGRhdGEoKSB7CiAgICByZXR1cm4gewogICAgICB2aWV3OiB7CiAgICAgICAgY2l0eTogIuWOpumXqCIsCiAgICAgICAgem9vbTogMTIsCiAgICAgIH0sCiAgICAgIHRpbGVUeXBlOiAiR0QiLAogICAgICBpbnRlcmFjdGlvbnM6IHsKICAgICAgICBEcmFnUm90YXRlQW5kWm9vbTogdHJ1ZSwKICAgICAgICBkb3VibGVDbGlja1pvb206IGZhbHNlLAogICAgICB9LAogICAgICBjb250cm9sczogewogICAgICAgIHpvb206IHRydWUsCiAgICAgICAgem9vbU9wdGlvbnM6IHsKICAgICAgICAgIGNsYXNzTmFtZTogIm9sLXpvb20tY3VzdG9tIiwKICAgICAgICB9LAogICAgICB9LAogICAgICBzdGF0aW9uSWQ6ICIiLAogICAgICBtYXBUb29sTGlzdDogWyJmZW5jZSIsICJ0aWxlIl0sCiAgICAgIHRhYmxlRGF0YTogW10sCiAgICAgIG9yaWdpbkRhdGE6IFtdLAogICAgICBzdGF0aW9uOiB7fSwKICAgICAgaW5mbzoge30sCiAgICAgIHJldHVybldpbjoge30sCiAgICAgIGxheWVyczogewogICAgICAgIC8vIOmpu+WLpOeCuQogICAgICAgIHN0YXRpb25MYXllcjogewogICAgICAgICAgZmVhdHVyZXM6IFtdLAogICAgICAgICAgb3ZlcmxheTogewogICAgICAgICAgICBwb3NpdGlvbjogdW5kZWZpbmVkLAogICAgICAgICAgICBvZmZzZXQ6IFswLCAtMzZdLAogICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIC8vIOS8geS4mgogICAgICAgIGNvbXBhbnlMYXllcjogewogICAgICAgICAgZmVhdHVyZXM6IFtdLAogICAgICAgICAgb3ZlcmxheTogewogICAgICAgICAgICBwb3NpdGlvbjogdW5kZWZpbmVkLAogICAgICAgICAgICBvZmZzZXQ6IFswLCAtMzZdLAogICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIC8vIOmpu+WLpOeCueS6uuWRmAogICAgICAgIHN0YXRpb25FbXBsb3llZXNMYXllcjogewogICAgICAgICAgZmVhdHVyZXM6IFtdLAogICAgICAgICAgb3ZlcmxheTogewogICAgICAgICAgICBwb3NpdGlvbjogdW5kZWZpbmVkLAogICAgICAgICAgICBvZmZzZXQ6IFswLCAtMzZdLAogICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIC8vIOeUteWtkOWbtOagjwogICAgICAgIHJhaWxMYXllcjogewogICAgICAgICAgZmVhdHVyZXM6IFtdLAogICAgICAgICAgY2x1c3RlcjogewogICAgICAgICAgICBkaXN0YW5jZTogMTEwLAogICAgICAgICAgICBzdHlsZTogewogICAgICAgICAgICAgIGNpcmNsZTogewogICAgICAgICAgICAgICAgcmFkaXVzOiA1MCwKICAgICAgICAgICAgICAgIGZpbGw6IHsKICAgICAgICAgICAgICAgICAgY29sb3I6ICIjMEU3MUZGIiwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICB0ZXh0OiB7CiAgICAgICAgICAgICAgICBmb250OiAiMjJweCBTb3VyY2UgSGFuIFNhbnMgQ04tTWVkaXVtLCBTb3VyY2UgSGFuIFNhbnMgQ04iLAogICAgICAgICAgICAgICAgZmlsbDogewogICAgICAgICAgICAgICAgICBjb2xvcjogIiNGRkZGRkYiLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgfSwKICAgICAgICAgIHN0eWxlOiB7CiAgICAgICAgICAgIGZpbGw6IHsKICAgICAgICAgICAgICBjb2xvcjogInJnYmEoMjMwLDE2Miw2MCwwLjIpIiwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgc3Ryb2tlOiB7CiAgICAgICAgICAgICAgY29sb3I6ICIjRTZBMjNDIiwKICAgICAgICAgICAgICB3aWR0aDogMiwKICAgICAgICAgICAgfSwKICAgICAgICAgIH0sCiAgICAgICAgICBvdmVybGF5OiB7CiAgICAgICAgICAgIHBvc2l0aW9uOiB1bmRlZmluZWQsCiAgICAgICAgICAgIG9mZnNldDogWzAsIC0zNl0sCiAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgIH0sCiAgICAgIGlzRWxlY3Ryb25pY0ZlbmNlRWRpdERpYWxvZzogZmFsc2UsCiAgICAgIGlzRWxlY3Ryb25pY0ZlbmNlU3RhdGlvbkRpYWxvZzogZmFsc2UsCiAgICAgIGlzRWxlY3Ryb25pY0ZlbmNlRGlhbG9nOiBmYWxzZSwKICAgICAgaXNFbGVjdHJvbmljRmVuY2VQZW9wbGU6IGZhbHNlLAogICAgICBlbGVjdHJvbmljRmVuY2VEYXRhOiBbXSwKICAgICAgZWxlY3Ryb25pY0ZlbmNlSW5mbzoge30sCiAgICAgIGRyYXdUeXBlOiAiIiwKICAgICAgZWxlY3Ryb25pY0ZlbmNlUGVvcGxlTGlzdDogW10sCiAgICAgIHBlb3BsZVN0YXRpb25OYW1lOiAiIiwKICAgIH07CiAgfSwKICBtZXRob2RzOiB7CiAgICAvKioKICAgICAqIEDpqbvli6Tngrnlm77lsYLngrnlh7vkuovku7YKICAgICAqIDHjgIHlhYjliKTmlq3ngrnlh7vkvY3nva7mmK/lkKbmnInpqbvli6TngrkKICAgICAqIDLjgIHojrflj5bngrnlsZ7mgKdpZAogICAgICogM+OAgemAmui/h2lk5p+l5om+6am75Yuk54K56K+m5oOFCiAgICAgKiA044CB5oqK6K+m5oOF5pS+5YiwaW5mb+WPmOmHj+eUqOadpeWxleeOsOivpuaDhe+8iHNob3dTdGF0aW9uSW5mb++8iQogICAgICogNeOAgeaKiue7j+e6rOW6pui1i+WAvOe7mXBvc2l0aW9u5bGe5oCn5bGV56S65by55qGGCiAgICAgKiBAcGFyYW0gZXZ0CiAgICAgKiBAcGFyYW0gZmVhdHVyZQogICAgICovCiAgICBjbGlja1N0YXRpb24oZXZ0LCBmZWF0dXJlKSB7CiAgICAgIGlmIChmZWF0dXJlKSB7CiAgICAgICAgdGhpcy5zaG93U3RhdGlvbkluZm8oKTsKICAgICAgfQogICAgfSwKICAgIC8qKgogICAgICogQOS8geS4muWbvuWxgueCueWHu+S6i+S7tgogICAgICogQHBhcmFtIGV2dAogICAgICogQHBhcmFtIGZlYXR1cmUKICAgICAqLwogICAgY2xpY2tDb21wYW55KGV2dCwgZmVhdHVyZSkgewogICAgICBpZiAoZmVhdHVyZSkgewogICAgICAgIGNvbnNvbGUubG9nKGZlYXR1cmUpOwogICAgICAgIGNvbnN0IGZlYXR1cmVzID0gZmVhdHVyZS5nZXQoImZlYXR1cmVzIik7CiAgICAgICAgaWYgKGZlYXR1cmVzICYmIGZlYXR1cmVzLmxlbmd0aCA9PT0gMSkgewogICAgICAgICAgY29uc3QgY29tcGFueSA9IGZlYXR1cmVzWzBdOwogICAgICAgICAgY29uc3QgaW5mbyA9IGNvbXBhbnkuZ2V0KCJwcm9wcyIpOwogICAgICAgICAgY29uc29sZS5sb2coaW5mbyk7CiAgICAgICAgICB0aGlzLnNob3dDb21wYW55SW5mbyh7IGluZm8gfSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIC8vIOWmguaenOaYr+iBmuWQiOeCueWwseS4i+mSu+S4gOe6pwogICAgICAgICAgY29uc3Qgem9vbSA9IHRoaXMuJHJlZnMubWFwLm1hcC5nZXRWaWV3KCkuZ2V0Wm9vbSgpICsgMTsKICAgICAgICAgIGNvbnN0IGNlbnRlciA9IGV2dC5jb29yZGluYXRlOwogICAgICAgICAgdGhpcy4kcmVmcy5tYXAucGFuVG8oeyB6b29tLCBjZW50ZXIgfSk7CiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgLyoqCiAgICAgKiBA6am75Yuk54K56K+m5oOFCiAgICAgKi8KICAgIHNob3dTdGF0aW9uSW5mbygpIHsKICAgICAgdGhpcy5jbGVhck1hcCgpOwogICAgICBjb25zdCB7IHN1cGVydmlzZURlcGFydE5hbWUsIGFkZHJlc3MsIGxvbmdpdHVkZSwgbGF0aXR1ZGUsIHN0YXRpb25UeXBlcyB9ID0gdGhpcy5zdGF0aW9uOwogICAgICBjb25zdCBbeyBtYXBJY29uIH1dID0gc3RhdGlvblR5cGVzOwogICAgICBpZiAodGhpcy5sYXllcnMuc3RhdGlvbkxheWVyLmZlYXR1cmVzLmxlbmd0aCA8PSAwKSB7CiAgICAgICAgdGhpcy5sYXllcnMuc3RhdGlvbkxheWVyLmZlYXR1cmVzID0gWwogICAgICAgICAgewogICAgICAgICAgICBjb29yZGluYXRlczogW051bWJlcihsb25naXR1ZGUpLCBOdW1iZXIobGF0aXR1ZGUpXSwKICAgICAgICAgICAgY29udmVydDogImdkLTg0IiwKICAgICAgICAgICAgc3R5bGU6IHsKICAgICAgICAgICAgICBpY29uOiB7CiAgICAgICAgICAgICAgICBzcmM6IG1hcEljb24sCiAgICAgICAgICAgICAgICBzY2FsZTogMC41LAogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHByb3BzOiB0aGlzLnN0YXRpb24sCiAgICAgICAgICB9LAogICAgICAgIF07CiAgICAgIH0KICAgICAgdGhpcy5pbmZvID0gewogICAgICAgIC4uLnRoaXMuc3RhdGlvbiwKICAgICAgICBzdXBlcnZpc2VEZXBhcnROYW1lU2xpY2U6IHRleHRTbGljZShzdXBlcnZpc2VEZXBhcnROYW1lKSwKICAgICAgICBhZGRyZXNzU2xpY2U6IHRleHRTbGljZShhZGRyZXNzKSwKICAgICAgfTsKICAgICAgLyoqCiAgICAgICAqIEDlvLnmoYbkvY3nva7ovazpq5jlvrfovaw4NAogICAgICAgKi8KICAgICAgdGhpcy5sYXllcnMuc3RhdGlvbkxheWVyLm92ZXJsYXkucG9zaXRpb24gPSB1dGlscy5jb252ZXJ0Q29vcmRpbmF0ZShbTnVtYmVyKGxvbmdpdHVkZSksIE51bWJlcihsYXRpdHVkZSldLCAiZ2QtODQiKTsKICAgICAgdGhpcy4kcmVmcy5tYXAucGFuVG8oewogICAgICAgIGNlbnRlcjogdGhpcy5sYXllcnMuc3RhdGlvbkxheWVyLm92ZXJsYXkucG9zaXRpb24sCiAgICAgIH0pOwogICAgfSwKICAgIC8qKgogICAgICogQOmpu+WLpOeCueW8ueahhueCueWHu+WFs+mXrQogICAgICovCiAgICBjbG9zZVN0YXRpb25JbmZvKCkgewogICAgICB0aGlzLmxheWVycy5zdGF0aW9uTGF5ZXIub3ZlcmxheS5wb3NpdGlvbiA9IHVuZGVmaW5lZDsKICAgIH0sCiAgICAvKioKICAgICAqIEDkvIHkuJror6bmg4UKICAgICAqIEBwYXJhbSBpbmZvCiAgICAgKiBAcGFyYW0gaW5mb1R5cGUKICAgICAqLwogICAgc2hvd0NvbXBhbnlJbmZvKHsgaW5mbywgaW5mb1R5cGUgfSkgewogICAgICBjb25zb2xlLmxvZygiY29tcGFueSIsIGluZm8pOwogICAgICBsZXQgeyBvcmdhbml6YXRpb25JZCB9ID0gaW5mbzsKICAgICAgZ2V0Q29tcGFueURldGFpbChvcmdhbml6YXRpb25JZCkKICAgICAgICAudGhlbigoY29tcGFueSkgPT4gewogICAgICAgICAgY29uc3QgeyByZWdpc3RlckFkZHJlc3MsIGxvbmdpdHVkZSwgbGF0aXR1ZGUgfSA9IGNvbXBhbnk7CiAgICAgICAgICBjb25zb2xlLmxvZygiY29tcGFueSIsIGNvbXBhbnkpOwogICAgICAgICAgdGhpcy5pbmZvID0gewogICAgICAgICAgICAuLi5jb21wYW55LAogICAgICAgICAgICByZWdpc3RlckFkZHJlc3NTbGljZTogdGV4dFNsaWNlKHJlZ2lzdGVyQWRkcmVzcyksCiAgICAgICAgICB9OwogICAgICAgICAgaWYgKGluZm9UeXBlKSB7CiAgICAgICAgICAgIHRoaXMuY2xlYXJNYXAoKTsKICAgICAgICAgICAgdGhpcy5oaWRlRmVuY2VUYWJsZSgpOwogICAgICAgICAgICB0aGlzLnJldHVybldpbiA9IHsgaW5mbywgaW5mb1R5cGUgfTsKICAgICAgICAgICAgdGhpcy5sYXllcnMuY29tcGFueUxheWVyLmZlYXR1cmVzID0gWwogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGNvb3JkaW5hdGVzOiBbTnVtYmVyKGxvbmdpdHVkZSksIE51bWJlcihsYXRpdHVkZSldLAogICAgICAgICAgICAgICAgY29udmVydDogImdkLTg0IiwKICAgICAgICAgICAgICAgIHN0eWxlOiB7CiAgICAgICAgICAgICAgICAgIGljb246IHsKICAgICAgICAgICAgICAgICAgICBzcmM6IHJlcXVpcmUoIkAvYXNzZXRzL2ltYWdlcy9tYXBTZWFyY2gv5YWs5Y+4LnBuZyIpLAogICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHByb3BzOiBjb21wYW55LAogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF07CiAgICAgICAgICB9CiAgICAgICAgICAvKioKICAgICAgICAgICAqIEDlvLnmoYbkvY3nva7ovazpq5jlvrfovaw4NAogICAgICAgICAgICovCiAgICAgICAgICB0aGlzLmxheWVycy5jb21wYW55TGF5ZXIub3ZlcmxheS5wb3NpdGlvbiA9IHV0aWxzLmNvbnZlcnRDb29yZGluYXRlKFtOdW1iZXIobG9uZ2l0dWRlKSwgTnVtYmVyKGxhdGl0dWRlKV0sICJnZC04NCIpOwogICAgICAgICAgdGhpcy4kcmVmcy5tYXAucGFuVG8oewogICAgICAgICAgICBjZW50ZXI6IHRoaXMubGF5ZXJzLmNvbXBhbnlMYXllci5vdmVybGF5LnBvc2l0aW9uLAogICAgICAgICAgfSk7CiAgICAgICAgfSkKICAgICAgICAuY2F0Y2goKGVycikgPT4gewogICAgICAgICAgY29uc29sZS5sb2coZXJyKTsKICAgICAgICB9KTsKICAgIH0sCiAgICAvKioKICAgICAqIEDkvIHkuJrlvLnmoYbngrnlh7vlhbPpl60KICAgICAqLwogICAgY2xvc2VDb21wYW55SW5mbygpIHsKICAgICAgdGhpcy5yZXR1cm5XaW4gPSB7fTsKICAgICAgdGhpcy5sYXllcnMuY29tcGFueUxheWVyLm92ZXJsYXkucG9zaXRpb24gPSB1bmRlZmluZWQ7CiAgICB9LAogICAgLyoqCiAgICAgKiBA6am75Yuk54K55Lq65ZGY6K+m5oOFCiAgICAgKiBAcGFyYW0gaW5mbwogICAgICogQHBhcmFtIGluZm9UeXBlCiAgICAgKi8KICAgIHNob3dTdGF0aW9uRW1wbG95ZWVzSW5mbyh7IGluZm8sIGluZm9UeXBlIH0pIHsKICAgICAgY29uc29sZS5sb2coInNob3dTdGF0aW9uRW1wbG95ZWVzSW5mby0iICsgaW5mb1R5cGUsIGluZm8pOwogICAgICBsZXQgeyBpZCB9ID0gaW5mbzsKICAgICAgZ2V0RW1wbG95ZWVzKHsKICAgICAgICBwYWdlSW5kZXg6IDEsCiAgICAgICAgcGFnZVNpemU6IDEwMDAsCiAgICAgICAgc2VjdXJpdHlTdGF0aW9uSWQ6IGlkLAogICAgICAgIHNlYXJjaE1vZGVsOiAic2VjdXJpdHlTdGF0aW9uIiwKICAgICAgfSkKICAgICAgICAudGhlbigocmVzKSA9PiB7CiAgICAgICAgICBjb25zb2xlLmxvZygic3RhdGlvbkVtcGxveWVlcyIsIHJlcyk7CiAgICAgICAgICBjb25zb2xlLmxvZygic3RhdGlvbiIsIGluZm8pOwogICAgICAgICAgaW5mb1sic3RhdGlvbkVtcGxveWVlcyJdID0gWy4uLnJlc10ubWFwKCh4KSA9PiB7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgLi4ueCwKICAgICAgICAgICAgICBpc1Bob25lOiBmYWxzZSwKICAgICAgICAgICAgfTsKICAgICAgICAgIH0pOwogICAgICAgICAgdGhpcy5pbmZvID0geyAuLi57fSwgLi4uaW5mbyB9OwogICAgICAgICAgY29uc29sZS5sb2coImluZm8iLCB0aGlzLmluZm8pOwogICAgICAgICAgaWYgKGluZm9UeXBlKSB7CiAgICAgICAgICAgIHRoaXMuY2xlYXJNYXAoKTsKICAgICAgICAgICAgdGhpcy5oaWRlRmVuY2VUYWJsZSgpOwoKICAgICAgICAgICAgdGhpcy5yZXR1cm5XaW4gPSB7IGluZm8sIGluZm9UeXBlIH07CiAgICAgICAgICAgIHRoaXMubGF5ZXJzLnN0YXRpb25FbXBsb3llZXNMYXllci5mZWF0dXJlcyA9IFsKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBjb29yZGluYXRlczogW051bWJlcihpbmZvLmxvbmdpdHVkZSksIE51bWJlcihpbmZvLmxhdGl0dWRlKV0sCiAgICAgICAgICAgICAgICBjb252ZXJ0OiAiZ2QtODQiLAogICAgICAgICAgICAgICAgc3R5bGU6IHsKICAgICAgICAgICAgICAgICAgaWNvbjogewogICAgICAgICAgICAgICAgICAgIHNyYzogcmVxdWlyZSgiQC9hc3NldHMvaW1hZ2VzL21hcFNlYXJjaC/lnKjlspdf5L+d5a6J5ZGYLnBuZyIpLAogICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHByb3BzOiBpbmZvLAogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF07CiAgICAgICAgICAgIGlmIChpbmZvVHlwZSA9PT0gInJhaWwiKSB7CiAgICAgICAgICAgICAgaW5mb1sibmFtZSJdID0gaW5mby5zdGF0aW9uTmFtZTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgLyoqCiAgICAgICAgICAgKiBA5by55qGG5L2N572u6L2s6auY5b636L2sODQKICAgICAgICAgICAqLwogICAgICAgICAgdGhpcy5sYXllcnMuc3RhdGlvbkVtcGxveWVlc0xheWVyLm92ZXJsYXkucG9zaXRpb24gPSB1dGlscy5jb252ZXJ0Q29vcmRpbmF0ZSgKICAgICAgICAgICAgW051bWJlcihpbmZvLmxvbmdpdHVkZSksIE51bWJlcihpbmZvLmxhdGl0dWRlKV0sCiAgICAgICAgICAgICJnZC04NCIKICAgICAgICAgICk7CiAgICAgICAgICB0aGlzLiRyZWZzLm1hcC5wYW5Ubyh7CiAgICAgICAgICAgIC8vIHpvb206IDEzLAogICAgICAgICAgICAvLyBmbHlab29tOiA4LAogICAgICAgICAgICBjZW50ZXI6IHRoaXMubGF5ZXJzLnN0YXRpb25FbXBsb3llZXNMYXllci5vdmVybGF5LnBvc2l0aW9uLAogICAgICAgICAgfSk7CiAgICAgICAgfSkKICAgICAgICAuY2F0Y2goKGVycikgPT4gewogICAgICAgICAgY29uc29sZS5sb2coZXJyKTsKICAgICAgICB9KTsKICAgIH0sCiAgICAvKioKICAgICAqIEDpqbvli6TngrnkurrlkZjlm77lsYLngrnlh7vkuovku7YKICAgICAqIEBwYXJhbSBldnQKICAgICAqIEBwYXJhbSBmZWF0dXJlCiAgICAgKi8KICAgIGNsaWNrU3RhdGlvbkVtcGxveWVlcyhldnQsIGZlYXR1cmUpIHsKICAgICAgaWYgKGZlYXR1cmUpIHsKICAgICAgICBjb25zb2xlLmxvZygiY2xpY2tTdGF0aW9uRW1wbG95ZWVzLWZlYXR1cmUiLCBmZWF0dXJlKTsKICAgICAgICBjb25zdCBzdGF0aW9ucyA9IGZlYXR1cmUuZ2V0KCJmZWF0dXJlcyIpOwogICAgICAgIGlmIChzdGF0aW9ucyAmJiBzdGF0aW9ucy5sZW5ndGggPT09IDEpIHsKICAgICAgICAgIGNvbnN0IHN0YXRpb24gPSBzdGF0aW9uc1swXTsKICAgICAgICAgIGNvbnN0IGluZm8gPSBzdGF0aW9uLmdldCgicHJvcHMiKTsKICAgICAgICAgIHRoaXMuc2hvd1N0YXRpb25FbXBsb3llZXNJbmZvKHsgaW5mbyB9KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaWYgKGZlYXR1cmUuZ2V0KCJwcm9wcyIpKSB7CiAgICAgICAgICAgIGNvbnN0IGluZm8gPSBmZWF0dXJlLmdldCgicHJvcHMiKTsKICAgICAgICAgICAgdGhpcy5zaG93U3RhdGlvbkVtcGxveWVlc0luZm8oeyBpbmZvIH0pOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8g5aaC5p6c5piv6IGa5ZCI54K55bCx5LiL6ZK75LiA57qnCiAgICAgICAgICAgIGNvbnN0IHpvb20gPSB0aGlzLiRyZWZzLm1hcC5tYXAuZ2V0VmlldygpLmdldFpvb20oKSArIDE7CiAgICAgICAgICAgIGNvbnN0IGNlbnRlciA9IGV2dC5jb29yZGluYXRlOwogICAgICAgICAgICB0aGlzLiRyZWZzLm1hcC5wYW5Ubyh7IHpvb20sIGNlbnRlciB9KTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAvKioKICAgICAqIEDpqbvli6TngrnkurrmlbDlvLnmoYbngrnlh7vlhbPpl60KICAgICAqLwogICAgY2xvc2VTdGF0aW9uRW1wbG95ZWVzSW5mbygpIHsKICAgICAgdGhpcy5yZXR1cm5XaW4gPSB7fTsKICAgICAgdGhpcy5sYXllcnMuc3RhdGlvbkVtcGxveWVlc0xheWVyLm92ZXJsYXkucG9zaXRpb24gPSB1bmRlZmluZWQ7CiAgICB9LAogICAgLyoqCiAgICAgKiBA55S15a2Q5Zu05qCP5Zu+5bGC54K55Ye75LqL5Lu2CiAgICAgKiBAcGFyYW0gZXZ0CiAgICAgKiBAcGFyYW0gZmVhdHVyZQogICAgICovCiAgICBjbGlja1JhaWwoZXZ0LCBmZWF0dXJlKSB7CiAgICAgIGlmIChmZWF0dXJlKSB7CiAgICAgICAgY29uc29sZS5sb2coZmVhdHVyZSk7CiAgICAgICAgY29uc3QgcmFpbHMgPSBmZWF0dXJlLmdldCgiZmVhdHVyZXMiKTsKICAgICAgICBpZiAocmFpbHMgJiYgcmFpbHMubGVuZ3RoID09PSAxKSB7CiAgICAgICAgICB0aGlzLnNob3dSYWlsSW5mb0Zyb21MaXN0ID0gZmFsc2U7CiAgICAgICAgICBjb25zdCByYWlsID0gcmFpbHNbMF07CiAgICAgICAgICBjb25zdCBpbmZvID0gcmFpbC5nZXQoInByb3BzIik7CiAgICAgICAgICBjb25zb2xlLmxvZygiY2xpY2tSYWlsSW5mbyIsIGluZm8pOwogICAgICAgICAgdGhpcy5zaG93UmFpbEluZm8oeyBpbmZvIH0pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpZiAoZmVhdHVyZS5nZXQoInByb3BzIikpIHsKICAgICAgICAgICAgdGhpcy5zaG93UmFpbEluZm9Gcm9tTGlzdCA9IGZhbHNlOwogICAgICAgICAgICBjb25zdCBpbmZvID0gZmVhdHVyZS5nZXQoInByb3BzIik7CiAgICAgICAgICAgIGNvbnNvbGUubG9nKCJjbGlja1JhaWxJbmZvIiwgaW5mbyk7CiAgICAgICAgICAgIHRoaXMuc2hvd1JhaWxJbmZvKHsgaW5mbyB9KTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIC8vIOWmguaenOaYr+iBmuWQiOeCueWwseS4i+mSu+S4gOe6pwogICAgICAgICAgICBjb25zdCB6b29tID0gdGhpcy4kcmVmcy5tYXAubWFwLmdldFZpZXcoKS5nZXRab29tKCkgKyAxOwogICAgICAgICAgICBjb25zdCBjZW50ZXIgPSBldnQuY29vcmRpbmF0ZTsKICAgICAgICAgICAgdGhpcy4kcmVmcy5tYXAucGFuVG8oeyB6b29tLCBjZW50ZXIgfSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgLyoqCiAgICAgKiBA55S15a2Q5Zu05qCP6K+m5oOFCiAgICAgKiBAcGFyYW0gaW5mbwogICAgICogQHBhcmFtIGluZm9UeXBlCiAgICAgKi8KICAgIHNob3dSYWlsSW5mbyh7IGluZm8sIGluZm9UeXBlIH0pIHsKICAgICAgLy8gdGhpcy5sYXllcnMucmFpbExheWVyLmZlYXR1cmVzID0gW107CiAgICAgIGdldFJhaWxEZXRhaWxBY2Nlc3MoaW5mby5pZCkKICAgICAgICAudGhlbigocmVzKSA9PiB7CiAgICAgICAgICBjb25zb2xlLmxvZygicmFpbHJlcyIsIHJlcyk7CiAgICAgICAgICBjb25zb2xlLmxvZygicmFpbGluZm8iLCBpbmZvKTsKICAgICAgICAgIGNvbnN0IHsgaWQsIHNoYXBlZExvY2F0aW9uIH0gPSBpbmZvOwogICAgICAgICAgY29uc3QgeyBjb21wYW55TmFtZSwgcmFpbFNoYXBlVHlwZSB9ID0gcmVzOwogICAgICAgICAgdGhpcy5pbmZvID0gewogICAgICAgICAgICAuLi5yZXMsCiAgICAgICAgICAgIGNvbXBhbnlOYW1lU2xpY2U6IHRleHRTbGljZShjb21wYW55TmFtZSksCiAgICAgICAgICAgIHNoYXBlZExvY2F0aW9uLCAvL+WQjuerr+S8oOWAvOaciemXrumimAogICAgICAgICAgICBpZCwgLy/lkI7nq6/kvKDlgLzmnInpl67popgKICAgICAgICAgIH07CiAgICAgICAgICBpZiAoaW5mb1R5cGUpIHsKICAgICAgICAgICAgdGhpcy5jbGVhck1hcCgpOwogICAgICAgICAgICB0aGlzLmhpZGVGZW5jZVRhYmxlKCk7CiAgICAgICAgICAgIHRoaXMucmV0dXJuV2luID0geyBpbmZvLCBpbmZvVHlwZSB9OwogICAgICAgICAgfQogICAgICAgICAgaWYgKHJhaWxTaGFwZVR5cGUgJiYgcmFpbFNoYXBlVHlwZSA9PT0gIkNpcmNsZSIpIHsKICAgICAgICAgICAgY29uc29sZS5sb2coIkNpcmNsZSIsIHJlcy5zaGFwZWRMb2NhdGlvbik7CiAgICAgICAgICAgIGNvbnN0IGZlYXR1cmUgPSB7CiAgICAgICAgICAgICAgdHlwZTogImNpcmNsZSIsCiAgICAgICAgICAgICAgLy8gY2VudGVyOiBbMTE4LjA1MTg3NiwgMjQuNjA3NDUzXSwKICAgICAgICAgICAgICAvLyByYWRpdXM6IDI3MiwKICAgICAgICAgICAgICBjb252ZXJ0OiAiZ2QtODQiLAogICAgICAgICAgICAgIGNlbnRlcjogW3Jlcy5zaGFwZWRMb2NhdGlvbi5nZW9zWzBdLmxvbiwgcmVzLnNoYXBlZExvY2F0aW9uLmdlb3NbMF0ubGF0XSwKICAgICAgICAgICAgICByYWRpdXM6IHJlcy5zaGFwZWRMb2NhdGlvbi5yYWRpdXMsCiAgICAgICAgICAgICAgcHJvcHM6IGluZm8sCiAgICAgICAgICAgIH07CiAgICAgICAgICAgIGNvbnNvbGUubG9nKGZlYXR1cmUpOwogICAgICAgICAgICB0aGlzLmxheWVycy5yYWlsTGF5ZXIuY2x1c3RlciA9IGZhbHNlOwogICAgICAgICAgICB0aGlzLmxheWVycy5yYWlsTGF5ZXIuZmVhdHVyZXMgPSBbZmVhdHVyZV07CiAgICAgICAgICB9IGVsc2UgaWYgKHJhaWxTaGFwZVR5cGUgPT09ICJDcmliIiB8fCByYWlsU2hhcGVUeXBlID09PSAiUG9seWdvbiIpIHsKICAgICAgICAgICAgY29uc3QgY29vcmRpbmF0ZXMgPSByZXMuc2hhcGVkTG9jYXRpb24uZ2Vvcy5tYXAoKHgpID0+IHsKICAgICAgICAgICAgICByZXR1cm4gW3gubG9uLCB4LmxhdF07CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICB0aGlzLmxheWVycy5yYWlsTGF5ZXIuY2x1c3RlciA9IGZhbHNlOwogICAgICAgICAgICB0aGlzLmxheWVycy5yYWlsTGF5ZXIuZmVhdHVyZXMgPSBbCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdHlwZTogInBvbHlnb24iLAogICAgICAgICAgICAgICAgY29udmVydDogImdkLTg0IiwKICAgICAgICAgICAgICAgIGNvb3JkaW5hdGVzLAogICAgICAgICAgICAgICAgcHJvcHM6IGluZm8sCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgXTsKICAgICAgICAgIH0KICAgICAgICB9KQogICAgICAgIC5jYXRjaCgoZXJyKSA9PiB7CiAgICAgICAgICBjb25zb2xlLmxvZyhlcnIpOwogICAgICAgIH0pOwogICAgfSwKICAgIG9uUmFpbExheWVyQ2hhbmdlKGZlYXR1cmVzKSB7CiAgICAgIGNvbnNvbGUubG9nKGZlYXR1cmVzKTsKICAgICAgaWYgKGZlYXR1cmVzICYmIGZlYXR1cmVzLmxlbmd0aCA9PT0gMSkgewogICAgICAgIGNvbnN0IGZlYXR1cmUgPSBmZWF0dXJlc1swXTsKICAgICAgICBjb25zdCB0eXBlID0gZmVhdHVyZS5nZXQoInR5cGUiKTsKICAgICAgICBpZiAodHlwZSAmJiAhdGhpcy5zaG93UmFpbEluZm9Gcm9tTGlzdCkgewogICAgICAgICAgY29uc29sZS5sb2codHlwZSk7CiAgICAgICAgICBpZiAodHlwZSA9PT0gInBvbHlnb24iIHx8IHR5cGUgPT09ICJQb2x5Z29uIikgewogICAgICAgICAgICBjb25zdCBnZW9tZXRyeSA9IGZlYXR1cmUuZ2V0KCJnZW9tZXRyeSIpOwogICAgICAgICAgICAvLyBjb25zdCB2aWV3ID0gdGhpcy4kcmVmcy5tYXAubWFwLmdldFZpZXcoKTsKICAgICAgICAgICAgLy8gdmlldy5maXQoZ2VvbWV0cnksIHsKICAgICAgICAgICAgLy8gICBkdXJhdGlvbjogMTAwMCwKICAgICAgICAgICAgLy8gfSk7CiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuJHJlZnMubWFwLmNhbGN1bGF0ZUNlbnRlcihnZW9tZXRyeSk7CiAgICAgICAgICAgIGNvbnN0IHsgY2VudGVyIH0gPSByZXN1bHQ7CiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGNvb3JkaW5hdGVzKQogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogQOW8ueahhuS9jee9rui9rOmrmOW+t+i9rDg0CiAgICAgICAgICAgICAqLwogICAgICAgICAgICB0aGlzLmxheWVycy5yYWlsTGF5ZXIub3ZlcmxheS5wb3NpdGlvbiA9IGNlbnRlcjsKICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gImNpcmNsZSIgfHwgdHlwZSA9PT0gIkNpcmNsZSIpIHsKICAgICAgICAgICAgY29uc3QgZ2VvbWV0cnkgPSBmZWF0dXJlLmdldCgiZ2VvbWV0cnkiKTsKICAgICAgICAgICAgLy8gY29uc3QgdmlldyA9IHRoaXMuJHJlZnMubWFwLm1hcC5nZXRWaWV3KCk7CiAgICAgICAgICAgIC8vIHZpZXcuZml0KGdlb21ldHJ5LCB7CiAgICAgICAgICAgIC8vICAgZHVyYXRpb246IDEwMDAsCiAgICAgICAgICAgIC8vIH0pOwogICAgICAgICAgICB0aGlzLmxheWVycy5yYWlsTGF5ZXIub3ZlcmxheS5wb3NpdGlvbiA9IGdlb21ldHJ5LmdldENlbnRlcigpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgIC8qKgogICAgICogQOeUteWtkOWbtOagj+WIl+ihqAogICAgICovCiAgICBzZXRGZW5jZSgpIHsKICAgICAgdGhpcy5pc0VsZWN0cm9uaWNGZW5jZURpYWxvZyA9IHRydWU7CiAgICB9LAogICAgLyoqCiAgICAgKiBA5rOo5YaM5pi+56S65by55qGG57G75LqL5Lu2CiAgICAgKi8KICAgIGV2ZW50QnVzQmluZGluZygpIHsKICAgICAgdGhpcy4kYnVzLiRvbigiY2xpY2stc3RhdGlvbiIsIHRoaXMuc2hvd1N0YXRpb25JbmZvKTsgLy8g5pi+56S66am75Yuk54K55by55qGGCiAgICAgIHRoaXMuJGJ1cy4kb24oImNsaWNrLWNvbXBhbnkiLCB0aGlzLnNob3dDb21wYW55SW5mbyk7IC8vIOaYvuekuuWFrOWPuOW8ueahhgogICAgICB0aGlzLiRidXMuJG9uKCJjbGljay1zdGF0aW9uRW1wbG95ZWVzIiwgdGhpcy5zaG93U3RhdGlvbkVtcGxveWVlc0luZm8pOyAvLyDmmL7npLrpqbvli6TngrnkurrlkZgKICAgIH0sCiAgICAvKioKICAgICAqIEDmuIXnqbrlnLDlm74KICAgICAqLwogICAgY2xlYXJNYXAoZXhjbHVkZSA9IFsic3RhdGlvbkxheWVyIl0pIHsKICAgICAgZm9yIChsZXQgbGF5ZXJzS2V5IGluIHRoaXMubGF5ZXJzKSB7CiAgICAgICAgaWYgKCFleGNsdWRlLmluY2x1ZGVzKGxheWVyc0tleSkpIHsKICAgICAgICAgIHRoaXMubGF5ZXJzW2xheWVyc0tleV0uZmVhdHVyZXMgPSBbXTsKICAgICAgICB9CiAgICAgIH0KICAgICAgdGhpcy4kcmVmcy5tYXAuY2xvc2VPdmVybGF5cygpOwogICAgfSwKICAgIG9uQ2hhbmdlTGF5ZXIodHlwZSkgewogICAgICAvLyBjb25zb2xlLmxvZygib25DaGFuZ2VMYXllciIsIHR5cGUpOwogICAgICBpZiAodHlwZS5pbmRleE9mKCJkZWZhdWx0IikgPiAtMSkgewogICAgICAgIHRoaXMudGlsZVR5cGUgPSAiR0QiOwogICAgICB9IGVsc2UgewogICAgICAgIHRoaXMudGlsZVR5cGUgPSAiR0RfSU1HIjsKICAgICAgfQogICAgfSwKICAgIGhpZGVGZW5jZVRhYmxlKCkgewogICAgICB0aGlzLmlzRWxlY3Ryb25pY0ZlbmNlRWRpdERpYWxvZyA9IGZhbHNlOwogICAgICB0aGlzLmlzRWxlY3Ryb25pY0ZlbmNlU3RhdGlvbkRpYWxvZyA9IGZhbHNlOwogICAgICB0aGlzLmlzRWxlY3Ryb25pY0ZlbmNlRGlhbG9nID0gZmFsc2U7CiAgICB9LAogICAgZWxlY3Ryb25pY0ZlbmNlQ2FuY2VsKCkgewogICAgICB0aGlzLmlzRWxlY3Ryb25pY0ZlbmNlRGlhbG9nID0gZmFsc2U7CiAgICB9LAogICAgLyoqCiAgICAgKiBA5paw5aKe55S15a2Q5Zu05qCPCiAgICAgKi8KICAgIGFkZEVsZWN0cm9uaWMoKSB7CiAgICAgIHRoaXMuaXNFbGVjdHJvbmljRmVuY2VFZGl0RGlhbG9nID0gdHJ1ZTsKICAgICAgdGhpcy5pc0VsZWN0cm9uaWNGZW5jZURpYWxvZyA9IGZhbHNlOwogICAgICB0aGlzLmVsZWN0cm9uaWNGZW5jZUluZm8gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuaW5mbykpOwogICAgICB0aGlzLmVsZWN0cm9uaWNGZW5jZUluZm8gPSB7fTsKICAgICAgY29uc29sZS5sb2codGhpcy5zdGF0aW9uKTsKICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4gewogICAgICAgIHRoaXMuJHJlZnMuZWxlY3Ryb25pY0ZlbmNlRWRpdC51cGRhdGVTdGF0aW9uKHsKICAgICAgICAgIHN0YXRpb25OYW1lOiB0aGlzLnN0YXRpb24ubmFtZSwKICAgICAgICAgIHBlb3BsZU51bTogdGhpcy5zdGF0aW9uLmNvdW50T2ZTZWN1cml0eU1hbiwKICAgICAgICAgIGNvdW50T2ZTZWN1cml0eU1hbjogdGhpcy5zdGF0aW9uLmNvdW50T2ZTZWN1cml0eU1hbiwKICAgICAgICAgIHN0YXRpb25JZDogdGhpcy5zdGF0aW9uLmlkLAogICAgICAgIH0pOwogICAgICB9KTsKICAgIH0sCiAgICAvKioKICAgICAqIEDnvJbovpHmn5DmnaHnlLXlrZDlm7TmoI8KICAgICAqIEBwYXJhbSBkYXRhCiAgICAgKi8KICAgIGFzeW5jIGVsZWN0cm9uaWNGZW5jZUVkaXRGbih7IGRhdGEgfSkgewogICAgICBjb25zb2xlLmxvZygi57yW6L6R5p+Q5p2h55S15a2Q5Zu05qCPIiwgZGF0YSk7CiAgICAgIHRoaXMuc2hvd1JhaWxJbmZvRnJvbUxpc3QgPSB0cnVlOwogICAgICAvLyB0aGlzLm1hcC5jbGVhck1hcCgpOwogICAgICB0aGlzLmlzRWxlY3Ryb25pY0ZlbmNlRGlhbG9nID0gZmFsc2U7CiAgICAgIHRoaXMuZWxlY3Ryb25pY0ZlbmNlSW5mbyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZGF0YSkpOwogICAgICB0aGlzLmVsZWN0cm9uaWNGZW5jZUluZm8udGltZSA9IFt0aGlzLmVsZWN0cm9uaWNGZW5jZUluZm8uYmVnaW5UaW1lLCB0aGlzLmVsZWN0cm9uaWNGZW5jZUluZm8uZW5kVGltZV07CiAgICAgIGNvbnN0IHJhaWwgPSBhd2FpdCBnZXRSYWlsRGV0YWlsQWNjZXNzKGRhdGEuaWQpOwogICAgICB0aGlzLmluZm8gPSB7IC4uLnJhaWwsIC4uLnRoaXMuZWxlY3Ryb25pY0ZlbmNlSW5mbyB9OyAvLyDlvLnmoYbkv6Hmga8KICAgICAgY29uc29sZS5sb2codGhpcy5pbmZvKTsKICAgICAgdGhpcy5pc0VsZWN0cm9uaWNGZW5jZUVkaXREaWFsb2cgPSB0cnVlOwogICAgICAvLyDmmL7npLrlj6/nvJbovpHlm7TmoI/ljLrln58KICAgICAgdGhpcy5zaG93TWFwRWRpdG9yKGRhdGEpOwogICAgfSwKICAgIGRlbEVsZWN0cm9uaWMoZGF0YSkgewogICAgICBjb25zb2xlLmxvZyhkYXRhKTsKICAgICAgbGV0IHBhcmFtcyA9IHsKICAgICAgICBpZDogZGF0YS5kYXRhLmlkLAogICAgICB9OwogICAgICBkZWxldGVSYWlsQWNjZXNzKHBhcmFtcykKICAgICAgICAudGhlbigocmVzKSA9PiB7CiAgICAgICAgICBjb25zb2xlLmxvZygiZGVsZXRlUmFpbEFjY2VzcyIsIHJlcyk7CiAgICAgICAgICB0aGlzLiRyZWZzWyJlbGVjdHJvbmljRmVuY2UiXS5nZXRSYWlscygpOwogICAgICAgICAgdGhpcy4kbWVzc2FnZSh7CiAgICAgICAgICAgIG1lc3NhZ2U6ICLliKDpmaTmiJDlip8iLAogICAgICAgICAgICB0eXBlOiAic3VjY2VzcyIsCiAgICAgICAgICB9KTsKICAgICAgICB9KQogICAgICAgIC5jYXRjaCgoZXJyKSA9PiB7CiAgICAgICAgICBjb25zb2xlLmxvZyhlcnIpOwogICAgICAgIH0pOwogICAgfSwKICAgIG9wZW5QZW9wbGVOdW1GbihpZCwgc3RhdGlvbk5hbWUpIHsKICAgICAgdGhpcy5lbGVjdHJvbmljRmVuY2VQZW9wbGVMaXN0ID0gW107CiAgICAgIHRoaXMuaXNFbGVjdHJvbmljRmVuY2VQZW9wbGUgPSB0cnVlOwogICAgICB0aGlzLnBlb3BsZVN0YXRpb25OYW1lID0gc3RhdGlvbk5hbWU7CiAgICAgIGdldEVtcGxveWVlcyh7CiAgICAgICAgcGFnZUluZGV4OiAxLAogICAgICAgIHBhZ2VTaXplOiAxMDAwLAogICAgICAgIHNlY3VyaXR5U3RhdGlvbklkOiBpZCwKICAgICAgICBzZWFyY2hNb2RlbDogInNlY3VyaXR5U3RhdGlvbiIsCiAgICAgIH0pLnRoZW4oKHJlcykgPT4gewogICAgICAgIHRoaXMuZWxlY3Ryb25pY0ZlbmNlUGVvcGxlTGlzdCA9IHJlczsKICAgICAgfSk7CiAgICB9LAogICAgLyoqCiAgICAgKiBA5YWz6IGU6am75Yuk54K5CiAgICAgKi8KICAgIHJlbGF0aW9uU3RhdGlvbkZuKGluZm8pIHsKICAgICAgdGhpcy5pc0VsZWN0cm9uaWNGZW5jZVN0YXRpb25EaWFsb2cgPSB0cnVlOwogICAgICB0aGlzLmluZm8gPSB7IC4uLnRoaXMuaW5mbywgLi4uaW5mbyB9OwogICAgfSwKICAgIGVsZWN0cm9uaWNGZW5jZUVkaXRDYW5jZWwoKSB7CiAgICAgIHRoaXMubGF5ZXJzLnJhaWxMYXllci5mZWF0dXJlcyA9IFtdOwogICAgICB0aGlzLmlzRWxlY3Ryb25pY0ZlbmNlRWRpdERpYWxvZyA9IGZhbHNlOwogICAgICB0aGlzLmNsZWFuRHJhd0ZpZ3VyZSgpOwogICAgICBzZWFyY2hSYWlsQWNjZXNzKHsKICAgICAgICBwYWdlSW5kZXg6IDEsCiAgICAgICAgcGFnZVNpemU6IDEwLAogICAgICAgIHNlYXJjaE1vZGVsOiAiU3RhdGlvbiIsCiAgICAgICAgc3RhdGlvbklkOiB0aGlzLnN0YXRpb25JZCwKICAgICAgfSkKICAgICAgICAudGhlbigocmVzKSA9PiB7CiAgICAgICAgICBjb25zb2xlLmxvZygic2VhcmNoUmFpbCIsIHJlcyk7CiAgICAgICAgICBpZiAocmVzKSB7CiAgICAgICAgICAgIHRoaXMuZWxlY3Ryb25pY0ZlbmNlRGF0YSA9IHJlczsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIE1lc3NhZ2UoewogICAgICAgICAgICAgIHR5cGU6ICJlcnJvciIsCiAgICAgICAgICAgICAgbWVzc2FnZTogIuafpeivoueUteWtkOWbtOagj+S/oeaBr+Wksei0pSIsCiAgICAgICAgICAgICAgb25DbG9zZTogKCkgPT4gewogICAgICAgICAgICAgICAgLy8gd2luZG93LmxvY2F0aW9uID0gImh0dHBzOi8vd3d3LmJhaWR1LmNvbSI7CiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9CiAgICAgICAgfSkKICAgICAgICAuY2F0Y2goKCkgPT4gewogICAgICAgICAgTWVzc2FnZSh7CiAgICAgICAgICAgIHR5cGU6ICJlcnJvciIsCiAgICAgICAgICAgIG1lc3NhZ2U6ICLmn6Xor6LnlLXlrZDlm7TmoI/kv6Hmga/lpLHotKUiLAogICAgICAgICAgICBvbkNsb3NlOiAoKSA9PiB7CiAgICAgICAgICAgICAgLy8gd2luZG93LmxvY2F0aW9uID0gImh0dHBzOi8vd3d3LmJhaWR1LmNvbSI7CiAgICAgICAgICAgIH0sCiAgICAgICAgICB9KTsKICAgICAgICB9KTsKICAgIH0sCiAgICBjbGVhbkRyYXdGaWd1cmUoKSB7CiAgICAgIHRoaXMuZHJhd1R5cGUgPSAiIjsKICAgIH0sCiAgICAvKioKICAgICAqIEDlhbPpl63pqbvli6TngrnkurrlkZgKICAgICAqLwogICAgZWxlY3Ryb25pY0ZlbmNlUGVvcGxlQ2FuY2VsKCkgewogICAgICB0aGlzLmlzRWxlY3Ryb25pY0ZlbmNlUGVvcGxlID0gZmFsc2U7CiAgICB9LAogICAgZWxlY3Ryb25pY0ZlbmNlU3RhdGlvbkNhbmNlbCgpIHsKICAgICAgdGhpcy5sYXllcnMucmFpbExheWVyLmZlYXR1cmVzID0gW107CiAgICAgIHRoaXMuaXNFbGVjdHJvbmljRmVuY2VTdGF0aW9uRGlhbG9nID0gZmFsc2U7CiAgICAgIHRoaXMuY2xlYW5EcmF3RmlndXJlKCk7CiAgICB9LAogICAgc2hvd01hcEVkaXRvcih7IHNoYXBlVHlwZSwgc2hhcGVkTG9jYXRpb24gfSkgewogICAgICBzd2l0Y2ggKHNoYXBlVHlwZSkgewogICAgICAgIGNhc2UgIkNpcmNsZSI6IC8vIOWchgogICAgICAgICAgdGhpcy5zaG93Q2lyY2xlRWRpdG9yKHNoYXBlZExvY2F0aW9uKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgIlBvbHlnb24iOgogICAgICAgICAgdGhpcy5zaG93UG9seWdvbkVkaXRvcihzaGFwZWRMb2NhdGlvbik7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJDcmliIjoKICAgICAgICAgIHRoaXMuc2hvd0NyaWJFZGl0b3Ioc2hhcGVkTG9jYXRpb24pOwogICAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0sCiAgICBzaG93UG9seWdvbkVkaXRvcih7IGdlb3MgfSkgewogICAgICBsZXQgbGlzdCA9IGdlb3MubWFwKChpdGVtKSA9PiBbaXRlbS5sb24sIGl0ZW0ubGF0XSk7CiAgICAgIGNvbnNvbGUubG9nKGxpc3QpOwogICAgICB0aGlzLmxheWVycy5yYWlsTGF5ZXIuZmVhdHVyZXMgPSBbCiAgICAgICAgewogICAgICAgICAgdHlwZTogInBvbHlnb24iLAogICAgICAgICAgY29vcmRpbmF0ZXM6IGxpc3QsCiAgICAgICAgICBzdHlsZTogdGhpcy5sYXllcnMucmFpbExheWVyLnN0eWxlLAogICAgICAgICAgY29udmVydDogImdkLTg0IiwKICAgICAgICB9LAogICAgICBdOwogICAgICB0aGlzLiRyZWZzLm1hcC5mbHlUbyh7CiAgICAgICAgem9vbTogMTMsCiAgICAgICAgZmx5Wm9vbTogOCwKICAgICAgICBjZW50ZXI6IGxpc3RbMF0sCiAgICAgIH0pOwogICAgICBjb25zb2xlLmxvZyh0aGlzLmxheWVycy5yYWlsTGF5ZXIuZmVhdHVyZXMpOwogICAgfSwKICAgIHNob3dDcmliRWRpdG9yKHsgZ2VvcyB9KSB7CiAgICAgIGxldCBsaXN0ID0gZ2Vvcy5tYXAoKGl0ZW0pID0+IFtpdGVtLmxvbiwgaXRlbS5sYXRdKTsKICAgICAgY29uc29sZS5sb2cobGlzdCk7CiAgICAgIHRoaXMubGF5ZXJzLnJhaWxMYXllci5mZWF0dXJlcyA9IFsKICAgICAgICB7CiAgICAgICAgICB0eXBlOiAicG9seWdvbiIsCiAgICAgICAgICBjb29yZGluYXRlczogbGlzdCwKICAgICAgICAgIHN0eWxlOiB0aGlzLmxheWVycy5yYWlsTGF5ZXIuc3R5bGUsCiAgICAgICAgICBjb252ZXJ0OiAiZ2QtODQiLAogICAgICAgIH0sCiAgICAgIF07CiAgICAgIHRoaXMuJHJlZnMubWFwLmZseVRvKHsKICAgICAgICB6b29tOiAxMywKICAgICAgICBmbHlab29tOiA4LAogICAgICAgIGNlbnRlcjogbGlzdFswXSwKICAgICAgfSk7CiAgICAgIGNvbnNvbGUubG9nKHRoaXMubGF5ZXJzLnJhaWxMYXllci5mZWF0dXJlcyk7CiAgICB9LAogICAgc2hvd0NpcmNsZUVkaXRvcih7IGdlb3MsIHJhZGl1cyB9KSB7CiAgICAgIGNvbnN0IFtjZW50ZXJdID0gZ2Vvcy5tYXAoKGl0ZW0pID0+IFtpdGVtLmxvbiwgaXRlbS5sYXRdKTsKICAgICAgY29uc29sZS5sb2coY2VudGVyKTsKICAgICAgdGhpcy5sYXllcnMucmFpbExheWVyLmZlYXR1cmVzID0gWwogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJDaXJjbGUiLAogICAgICAgICAgY2VudGVyLAogICAgICAgICAgcmFkaXVzLAogICAgICAgICAgc3R5bGU6IHRoaXMubGF5ZXJzLnJhaWxMYXllci5zdHlsZSwKICAgICAgICAgIGNvbnZlcnQ6ICJnZC04NCIsCiAgICAgICAgfSwKICAgICAgXTsKICAgICAgdGhpcy4kcmVmcy5tYXAuZmx5VG8oewogICAgICAgIHpvb206IDEzLAogICAgICAgIC8vIGZseVpvb206IDgsCiAgICAgICAgY2VudGVyLAogICAgICB9KTsKICAgIH0sCiAgICBkcmF3UmFpbCh0eXBlKSB7CiAgICAgIGNvbnNvbGUubG9nKCJkcmF3UmFpbCIsIHR5cGUpOwogICAgICAvLyB0aGlzLmxheWVycy5yYWlsTGF5ZXIuZmVhdHVyZXMgPSBbXQogICAgICB0aGlzLmRyYXdUeXBlID0gdHlwZTsKICAgIH0sCiAgICBkcmF3ZW5kKGV2dCwgbWFwKSB7CiAgICAgIGNvbnN0IHsgZmVhdHVyZSB9ID0gZXZ0OwogICAgICBjb25zb2xlLmxvZyh0aGlzLmRyYXdUeXBlKTsKICAgICAgdGhpcy5sYXllcnMucmFpbExheWVyLmZlYXR1cmVzID0gW107IC8vIOa4heepuuS4iuS4gOS4queUteWtkOWbtOagjwogICAgICBjb25zdCBnZW9tZXRyeSA9IGZlYXR1cmUuZ2V0R2VvbWV0cnkoKTsKICAgICAgaWYgKHRoaXMuZHJhd1R5cGUgPT09ICJSZWN0YW5nbGUiIHx8IHRoaXMuZHJhd1R5cGUgPT09ICJQb2x5Z29uIikgewogICAgICAgIGNvbnN0IFtjb29yZGluYXRlc10gPSBnZW9tZXRyeS5nZXRDb29yZGluYXRlcygpOwogICAgICAgIGNvbnN0IGNvbnZlcnRDb29yZGluYXRlcyA9IGNvb3JkaW5hdGVzLm1hcCgoY29vcmRpbmF0ZSkgPT4gewogICAgICAgICAgcmV0dXJuIHV0aWxzLmNvbnZlcnRDb29yZGluYXRlKGNvb3JkaW5hdGUsICI4NC1nZCIpOwogICAgICAgIH0pOwogICAgICAgIGNvbnNvbGUubG9nKGNvb3JkaW5hdGVzKTsKICAgICAgICBjb25zb2xlLmxvZyhjb252ZXJ0Q29vcmRpbmF0ZXMpOwogICAgICAgIGNvbnN0IHBhcmFtcyA9IHsKICAgICAgICAgIGdlb3M6IGNvbnZlcnRDb29yZGluYXRlcy5tYXAoKGl0ZW0pID0+IHsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICBsb246IGl0ZW1bMF0sCiAgICAgICAgICAgICAgbGF0OiBpdGVtWzFdLAogICAgICAgICAgICB9OwogICAgICAgICAgfSksCiAgICAgICAgfTsKICAgICAgICBjb25zb2xlLmxvZyhwYXJhbXMpOwogICAgICAgIHRoaXMuJHJlZnMuZWxlY3Ryb25pY0ZlbmNlRWRpdC51cGRhdGVHZW9tZXRyeShwYXJhbXMpOwogICAgICB9IGVsc2UgaWYgKHRoaXMuZHJhd1R5cGUgPT09ICJDaXJjbGUiKSB7CiAgICAgICAgY29uc3QgY2VudGVyID0gZ2VvbWV0cnkuZ2V0Q2VudGVyKCk7CiAgICAgICAgY29uc29sZS5sb2coY2VudGVyKTsKICAgICAgICBjb25zdCBnZW9SYWRpdXMgPSBnZW9tZXRyeS5nZXRSYWRpdXMoKTsgLy8g5Y2K5b6ECiAgICAgICAgY29uc3QgbWV0ZXJzUGVyVW5pdCA9IG1hcC5nZXRWaWV3KCkuZ2V0UHJvamVjdGlvbigpLmdldE1ldGVyc1BlclVuaXQoKTsgLy8g5Y2K5b6E5Lul57Gz5Li65Y2V5L2NCiAgICAgICAgY29uc3QgcmFkaXVzID0gKGdlb1JhZGl1cyAqIG1ldGVyc1BlclVuaXQpLnRvRml4ZWQoMik7CiAgICAgICAgY29uc29sZS5sb2cocmFkaXVzKTsKICAgICAgICBjb25zdCBjb252ZXJ0Q29vcmRpbmF0ZXMgPSB1dGlscy5jb252ZXJ0Q29vcmRpbmF0ZShjZW50ZXIsICI4NC1nZCIpOwogICAgICAgIGNvbnN0IHBhcmFtcyA9IHsKICAgICAgICAgIGdlb3M6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIGxvbjogY29udmVydENvb3JkaW5hdGVzWzBdLAogICAgICAgICAgICAgIGxhdDogY29udmVydENvb3JkaW5hdGVzWzFdLAogICAgICAgICAgICB9LAogICAgICAgICAgXSwKICAgICAgICAgIHJhZGl1cywKICAgICAgICB9OwogICAgICAgIGNvbnNvbGUubG9nKHBhcmFtcyk7CiAgICAgICAgdGhpcy4kcmVmcy5lbGVjdHJvbmljRmVuY2VFZGl0LnVwZGF0ZUdlb21ldHJ5KHBhcmFtcyk7CiAgICAgIH0KICAgIH0sCiAgfSwKICBiZWZvcmVSb3V0ZUVudGVyKHRvLCBmcm9tLCBuZXh0KSB7CiAgICAvLyBodHRwOi8vbG9jYWxob3N0OjgwODAvIy9yYWlsCiAgICAvLyA/c3RhdGlvbklkPVZHVWtUV3pKcUU3WWVPY2pWVXAtLV9fVzA1MmIxWE5vTG1QY2tGNmNoMQogICAgLy8gJmFjY2Vzc1Rva2VuPWV5SmhiR2NpT2lKSVV6STFOaUo5LmV5SnBjM01pT2lKaGRYUm9NQ0lzSW1WNGNDSTZNVGN3TWpVek56TXdPQ3dpZFhObGNtNWhiV1VpT2lKdmRVRnZjalpTY2toSlJuWjJTMmx0V1RSQ0luMC4wZHdCSC1vR0k2b3lEdDRiUUhFVzM1a1pfdnk1eTBYRS16RW1HNHZtNzBjCiAgICBjb25zdCBzdGF0aW9uSWQgPSB0by5xdWVyeS5zdGF0aW9uSWQ7CiAgICBpZiAoc3RhdGlvbklkKSB7CiAgICAgIC8vIOiOt+WPlueUteWtkOWbtOagj+S/oeaBrwogICAgICBzZWFyY2hSYWlsQWNjZXNzKHsKICAgICAgICBwYWdlSW5kZXg6IDEsCiAgICAgICAgcGFnZVNpemU6IDEwLAogICAgICAgIHNlYXJjaE1vZGVsOiAiU3RhdGlvbiIsCiAgICAgICAgc3RhdGlvbklkLAogICAgICB9KQogICAgICAgIC50aGVuKChyZXMpID0+IHsKICAgICAgICAgIGNvbnNvbGUubG9nKCJzZWFyY2hSYWlsIiwgcmVzKTsKICAgICAgICAgIGlmIChyZXMpIHsKICAgICAgICAgICAgbmV4dCgodm0pID0+IHsKICAgICAgICAgICAgICB2bS5zdGF0aW9uSWQgPSBzdGF0aW9uSWQ7CiAgICAgICAgICAgICAgdm0uZWxlY3Ryb25pY0ZlbmNlRGF0YSA9IHJlczsKICAgICAgICAgICAgICB2bS5pc0VsZWN0cm9uaWNGZW5jZURpYWxvZyA9IHRydWU7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgTWVzc2FnZSh7CiAgICAgICAgICAgICAgdHlwZTogImVycm9yIiwKICAgICAgICAgICAgICBtZXNzYWdlOiAi5p+l6K+i55S15a2Q5Zu05qCP5L+h5oGv5aSx6LSlIiwKICAgICAgICAgICAgICBvbkNsb3NlOiAoKSA9PiB7CiAgICAgICAgICAgICAgICAvLyB3aW5kb3cubG9jYXRpb24gPSAiaHR0cHM6Ly93d3cuYmFpZHUuY29tIjsKICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9KTsKICAgICAgICAgIH0KICAgICAgICB9KQogICAgICAgIC5jYXRjaCgoeyByZXNwb25zZSB9KSA9PiB7CiAgICAgICAgICBjb25zdCB7IGRhdGEgfSA9IHJlc3BvbnNlOwogICAgICAgICAgTWVzc2FnZSh7CiAgICAgICAgICAgIHR5cGU6ICJlcnJvciIsCiAgICAgICAgICAgIG1lc3NhZ2U6IGRhdGEubWVzc2FnZSwKICAgICAgICAgICAgb25DbG9zZTogKCkgPT4gewogICAgICAgICAgICAgIC8vIHdpbmRvdy5sb2NhdGlvbiA9ICJodHRwczovL3d3dy5iYWlkdS5jb20iOwogICAgICAgICAgICB9LAogICAgICAgICAgfSk7CiAgICAgICAgfSk7CiAgICB9IGVsc2UgewogICAgICBNZXNzYWdlKHsKICAgICAgICB0eXBlOiAiZXJyb3IiLAogICAgICAgIG1lc3NhZ2U6ICLmnKror4bliKvpqbvli6TngrlJRCIsCiAgICAgICAgb25DbG9zZTogKCkgPT4gewogICAgICAgICAgLy8gd2luZG93LmxvY2F0aW9uID0gImh0dHBzOi8vd3d3LmJhaWR1LmNvbSI7CiAgICAgICAgfSwKICAgICAgfSk7CiAgICB9CiAgfSwKICBtb3VudGVkKCkgewogICAgdGhpcy5ldmVudEJ1c0JpbmRpbmcoKTsKICB9LAp9Owo="},null]}