(cherry picked from commit d718593156cc7310105007f37645948c17637e0a)
(cherry picked from commit 53904e72f7c3b96e6ae5e24196d0e551fa8aebce)
(cherry picked from commit 06b6ae2bb2f90bd7cc1d6a8404a82aff507e6821)