merged 905b3fdd57166c2b2d2433790109b2c41ecdbdda from golang/protobuf