(cherry picked from commit 7a1a0a47fb49c6146ac0170e6b4e2b6d52788f33)
(cherry picked from commit e0195c08ae5195668660af0d8f20beb6407680f5)
(cherry picked from commit 0d6959e75f62c101fcf97124de3b7efe7493029e)