(cherry picked from commit 3918fab1ec69793f7e3a6e1b3cc86fa5f30d987e)
(cherry picked from commit 1e0f613449ed0073caf8a9dc55bd8eb37bf6f115)
(cherry picked from commit ef4f6bda5c7d64c77ba21a0b8362db47a5bb178a)