Merge pull request #2487 from jtattermusch/csharp_leading_whitespace

remove leading whitespace in C# xml comments
diff --git a/csharp/src/AddressBook/Addressbook.cs b/csharp/src/AddressBook/Addressbook.cs
index 8e691ad..75ed071 100644
--- a/csharp/src/AddressBook/Addressbook.cs
+++ b/csharp/src/AddressBook/Addressbook.cs
@@ -43,7 +43,7 @@
   }
   #region Messages
   /// <summary>
-  ///  [START messages]
+  /// [START messages]
   /// </summary>
   public sealed partial class Person : pb::IMessage<Person> {
     private static readonly pb::MessageParser<Person> _parser = new pb::MessageParser<Person>(() => new Person());
@@ -95,7 +95,7 @@
     public const int IdFieldNumber = 2;
     private int id_;
     /// <summary>
-    ///  Unique ID number for this person.
+    /// Unique ID number for this person.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public int Id {
@@ -400,7 +400,7 @@
   }
 
   /// <summary>
-  ///  Our address book file is just one of these.
+  /// Our address book file is just one of these.
   /// </summary>
   public sealed partial class AddressBook : pb::IMessage<AddressBook> {
     private static readonly pb::MessageParser<AddressBook> _parser = new pb::MessageParser<AddressBook>(() => new AddressBook());
diff --git a/csharp/src/Google.Protobuf.Conformance/Conformance.cs b/csharp/src/Google.Protobuf.Conformance/Conformance.cs
index a19f15e..1a835ae 100644
--- a/csharp/src/Google.Protobuf.Conformance/Conformance.cs
+++ b/csharp/src/Google.Protobuf.Conformance/Conformance.cs
@@ -54,11 +54,11 @@
 
   #region Messages
   /// <summary>
-  ///  Represents a single test case's input.  The testee should:
+  /// Represents a single test case's input.  The testee should:
   ///
-  ///    1. parse this proto (which should always succeed)
-  ///    2. parse the protobuf or JSON payload in "payload" (which may fail)
-  ///    3. if the parse succeeded, serialize the message in the requested format.
+  ///   1. parse this proto (which should always succeed)
+  ///   2. parse the protobuf or JSON payload in "payload" (which may fail)
+  ///   3. if the parse succeeded, serialize the message in the requested format.
   /// </summary>
   public sealed partial class ConformanceRequest : pb::IMessage<ConformanceRequest> {
     private static readonly pb::MessageParser<ConformanceRequest> _parser = new pb::MessageParser<ConformanceRequest>(() => new ConformanceRequest());
@@ -127,7 +127,7 @@
     public const int RequestedOutputFormatFieldNumber = 3;
     private global::Conformance.WireFormat requestedOutputFormat_ = 0;
     /// <summary>
-    ///  Which format should the testee serialize its message to?
+    /// Which format should the testee serialize its message to?
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public global::Conformance.WireFormat RequestedOutputFormat {
@@ -268,7 +268,7 @@
   }
 
   /// <summary>
-  ///  Represents a single test case's output.
+  /// Represents a single test case's output.
   /// </summary>
   public sealed partial class ConformanceResponse : pb::IMessage<ConformanceResponse> {
     private static readonly pb::MessageParser<ConformanceResponse> _parser = new pb::MessageParser<ConformanceResponse>(() => new ConformanceResponse());
@@ -325,11 +325,11 @@
     /// <summary>Field number for the "parse_error" field.</summary>
     public const int ParseErrorFieldNumber = 1;
     /// <summary>
-    ///  This string should be set to indicate parsing failed.  The string can
-    ///  provide more information about the parse error if it is available.
+    /// This string should be set to indicate parsing failed.  The string can
+    /// provide more information about the parse error if it is available.
     ///
-    ///  Setting this string does not necessarily mean the testee failed the
-    ///  test.  Some of the test cases are intentionally invalid input.
+    /// Setting this string does not necessarily mean the testee failed the
+    /// test.  Some of the test cases are intentionally invalid input.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public string ParseError {
@@ -343,9 +343,9 @@
     /// <summary>Field number for the "serialize_error" field.</summary>
     public const int SerializeErrorFieldNumber = 6;
     /// <summary>
-    ///  If the input was successfully parsed but errors occurred when
-    ///  serializing it to the requested output format, set the error message in
-    ///  this field.
+    /// If the input was successfully parsed but errors occurred when
+    /// serializing it to the requested output format, set the error message in
+    /// this field.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public string SerializeError {
@@ -359,9 +359,9 @@
     /// <summary>Field number for the "runtime_error" field.</summary>
     public const int RuntimeErrorFieldNumber = 2;
     /// <summary>
-    ///  This should be set if some other error occurred.  This will always
-    ///  indicate that the test failed.  The string can provide more information
-    ///  about the failure.
+    /// This should be set if some other error occurred.  This will always
+    /// indicate that the test failed.  The string can provide more information
+    /// about the failure.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public string RuntimeError {
@@ -375,8 +375,8 @@
     /// <summary>Field number for the "protobuf_payload" field.</summary>
     public const int ProtobufPayloadFieldNumber = 3;
     /// <summary>
-    ///  If the input was successfully parsed and the requested output was
-    ///  protobuf, serialize it to protobuf and set it in this field.
+    /// If the input was successfully parsed and the requested output was
+    /// protobuf, serialize it to protobuf and set it in this field.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public pb::ByteString ProtobufPayload {
@@ -390,8 +390,8 @@
     /// <summary>Field number for the "json_payload" field.</summary>
     public const int JsonPayloadFieldNumber = 4;
     /// <summary>
-    ///  If the input was successfully parsed and the requested output was JSON,
-    ///  serialize to JSON and set it in this field.
+    /// If the input was successfully parsed and the requested output was JSON,
+    /// serialize to JSON and set it in this field.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public string JsonPayload {
@@ -405,8 +405,8 @@
     /// <summary>Field number for the "skipped" field.</summary>
     public const int SkippedFieldNumber = 5;
     /// <summary>
-    ///  For when the testee skipped the test, likely because a certain feature
-    ///  wasn't supported, like JSON input/output.
+    /// For when the testee skipped the test, likely because a certain feature
+    /// wasn't supported, like JSON input/output.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public string Skipped {
diff --git a/csharp/src/Google.Protobuf.Test/TestProtos/MapUnittestProto3.cs b/csharp/src/Google.Protobuf.Test/TestProtos/MapUnittestProto3.cs
index 0a299fd..9c0518a 100644
--- a/csharp/src/Google.Protobuf.Test/TestProtos/MapUnittestProto3.cs
+++ b/csharp/src/Google.Protobuf.Test/TestProtos/MapUnittestProto3.cs
@@ -172,7 +172,7 @@
 
   #region Messages
   /// <summary>
-  ///  Tests maps.
+  /// Tests maps.
   /// </summary>
   public sealed partial class TestMap : pb::IMessage<TestMap> {
     private static readonly pb::MessageParser<TestMap> _parser = new pb::MessageParser<TestMap>(() => new TestMap());
@@ -836,7 +836,7 @@
   }
 
   /// <summary>
-  ///  Two map fields share the same entry default instance.
+  /// Two map fields share the same entry default instance.
   /// </summary>
   public sealed partial class TestSameTypeMap : pb::IMessage<TestSameTypeMap> {
     private static readonly pb::MessageParser<TestSameTypeMap> _parser = new pb::MessageParser<TestSameTypeMap>(() => new TestSameTypeMap());
@@ -1357,8 +1357,8 @@
   }
 
   /// <summary>
-  ///  Previously, message containing enum called Type cannot be used as value of
-  ///  map field.
+  /// Previously, message containing enum called Type cannot be used as value of
+  /// map field.
   /// </summary>
   public sealed partial class MessageContainingEnumCalledType : pb::IMessage<MessageContainingEnumCalledType> {
     private static readonly pb::MessageParser<MessageContainingEnumCalledType> _parser = new pb::MessageParser<MessageContainingEnumCalledType>(() => new MessageContainingEnumCalledType());
@@ -1481,7 +1481,7 @@
   }
 
   /// <summary>
-  ///  Previously, message cannot contain map field called "entry".
+  /// Previously, message cannot contain map field called "entry".
   /// </summary>
   public sealed partial class MessageContainingMapCalledEntry : pb::IMessage<MessageContainingMapCalledEntry> {
     private static readonly pb::MessageParser<MessageContainingMapCalledEntry> _parser = new pb::MessageParser<MessageContainingMapCalledEntry>(() => new MessageContainingMapCalledEntry());
diff --git a/csharp/src/Google.Protobuf.Test/TestProtos/TestMessagesProto3.cs b/csharp/src/Google.Protobuf.Test/TestProtos/TestMessagesProto3.cs
index f519ba2..fbeb512 100644
--- a/csharp/src/Google.Protobuf.Test/TestProtos/TestMessagesProto3.cs
+++ b/csharp/src/Google.Protobuf.Test/TestProtos/TestMessagesProto3.cs
@@ -219,13 +219,13 @@
 
   #region Messages
   /// <summary>
-  ///  This proto includes every type of field in both singular and repeated
-  ///  forms.
+  /// This proto includes every type of field in both singular and repeated
+  /// forms.
   ///
-  ///  Also, crucially, all messages and enums in this file are eventually
-  ///  submessages of this message.  So for example, a fuzz test of TestAllTypes
-  ///  could trigger bugs that occur in any message type in this file.  We verify
-  ///  this stays true in a unit test.
+  /// Also, crucially, all messages and enums in this file are eventually
+  /// submessages of this message.  So for example, a fuzz test of TestAllTypes
+  /// could trigger bugs that occur in any message type in this file.  We verify
+  /// this stays true in a unit test.
   /// </summary>
   public sealed partial class TestAllTypes : pb::IMessage<TestAllTypes> {
     private static readonly pb::MessageParser<TestAllTypes> _parser = new pb::MessageParser<TestAllTypes>(() => new TestAllTypes());
@@ -402,7 +402,7 @@
     public const int OptionalInt32FieldNumber = 1;
     private int optionalInt32_;
     /// <summary>
-    ///  Singular
+    /// Singular
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public int OptionalInt32 {
@@ -649,7 +649,7 @@
         = pb::FieldCodec.ForInt32(250);
     private readonly pbc::RepeatedField<int> repeatedInt32_ = new pbc::RepeatedField<int>();
     /// <summary>
-    ///  Repeated
+    /// Repeated
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public pbc::RepeatedField<int> RepeatedInt32 {
@@ -862,7 +862,7 @@
         = new pbc::MapField<int, int>.Codec(pb::FieldCodec.ForInt32(8), pb::FieldCodec.ForInt32(16), 450);
     private readonly pbc::MapField<int, int> mapInt32Int32_ = new pbc::MapField<int, int>();
     /// <summary>
-    ///  Map
+    /// Map
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public pbc::MapField<int, int> MapInt32Int32 {
@@ -1153,7 +1153,7 @@
     private static readonly pb::FieldCodec<bool?> _single_optionalBoolWrapper_codec = pb::FieldCodec.ForStructWrapper<bool>(1610);
     private bool? optionalBoolWrapper_;
     /// <summary>
-    ///  Well-known types
+    /// Well-known types
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public bool? OptionalBoolWrapper {
@@ -1479,8 +1479,8 @@
     public const int Fieldname1FieldNumber = 401;
     private int fieldname1_;
     /// <summary>
-    ///  Test field-name-to-JSON-name convention.
-    ///  (protobuf says names can be any valid C/C++ identifier.)
+    /// Test field-name-to-JSON-name convention.
+    /// (protobuf says names can be any valid C/C++ identifier.)
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public int Fieldname1 {
@@ -3403,7 +3403,7 @@
         [pbr::OriginalName("BAR")] Bar = 1,
         [pbr::OriginalName("BAZ")] Baz = 2,
         /// <summary>
-        ///  Intentionally negative.
+        /// Intentionally negative.
         /// </summary>
         [pbr::OriginalName("NEG")] Neg = -1,
       }
diff --git a/csharp/src/Google.Protobuf.Test/TestProtos/UnittestIssues.cs b/csharp/src/Google.Protobuf.Test/TestProtos/UnittestIssues.cs
index f2db6b4..7c0ba8a 100644
--- a/csharp/src/Google.Protobuf.Test/TestProtos/UnittestIssues.cs
+++ b/csharp/src/Google.Protobuf.Test/TestProtos/UnittestIssues.cs
@@ -79,8 +79,8 @@
 
   #region Messages
   /// <summary>
-  ///  Issue 307: when generating doubly-nested types, any references
-  ///  should be of the form A.Types.B.Types.C.
+  /// Issue 307: when generating doubly-nested types, any references
+  /// should be of the form A.Types.B.Types.C.
   /// </summary>
   public sealed partial class Issue307 : pb::IMessage<Issue307> {
     private static readonly pb::MessageParser<Issue307> _parser = new pb::MessageParser<Issue307>(() => new Issue307());
@@ -859,7 +859,7 @@
   }
 
   /// <summary>
-  ///  Issue 45: http://code.google.com/p/protobuf-csharp-port/issues/detail?id=45
+  /// Issue 45: http://code.google.com/p/protobuf-csharp-port/issues/detail?id=45
   /// </summary>
   public sealed partial class ItemField : pb::IMessage<ItemField> {
     private static readonly pb::MessageParser<ItemField> _parser = new pb::MessageParser<ItemField>(() => new ItemField());
@@ -1126,7 +1126,7 @@
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static partial class Types {
       /// <summary>
-      ///  Force a nested type called Types
+      /// Force a nested type called Types
       /// </summary>
       public sealed partial class SomeNestedType : pb::IMessage<SomeNestedType> {
         private static readonly pb::MessageParser<SomeNestedType> _parser = new pb::MessageParser<SomeNestedType>(() => new SomeNestedType());
@@ -1223,16 +1223,16 @@
   }
 
   /// <summary>
-  ///  These fields are deliberately not declared in numeric
-  ///  order, and the oneof fields aren't contiguous either.
-  ///  This allows for reasonably robust tests of JSON output
-  ///  ordering.
-  ///  TestFieldOrderings in unittest_proto3.proto is similar,
-  ///  but doesn't include oneofs.
-  ///  TODO: Consider adding oneofs to TestFieldOrderings, although
-  ///  that will require fixing other tests in multiple platforms.
-  ///  Alternatively, consider just adding this to
-  ///  unittest_proto3.proto if multiple platforms want it.
+  /// These fields are deliberately not declared in numeric
+  /// order, and the oneof fields aren't contiguous either.
+  /// This allows for reasonably robust tests of JSON output
+  /// ordering.
+  /// TestFieldOrderings in unittest_proto3.proto is similar,
+  /// but doesn't include oneofs.
+  /// TODO: Consider adding oneofs to TestFieldOrderings, although
+  /// that will require fixing other tests in multiple platforms.
+  /// Alternatively, consider just adding this to
+  /// unittest_proto3.proto if multiple platforms want it.
   /// </summary>
   public sealed partial class TestJsonFieldOrdering : pb::IMessage<TestJsonFieldOrdering> {
     private static readonly pb::MessageParser<TestJsonFieldOrdering> _parser = new pb::MessageParser<TestJsonFieldOrdering>(() => new TestJsonFieldOrdering());
@@ -1591,7 +1591,7 @@
     public const int NameFieldNumber = 1;
     private string name_ = "";
     /// <summary>
-    ///  Message for testing the effects for of the json_name option
+    /// Message for testing the effects for of the json_name option
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public string Name {
diff --git a/csharp/src/Google.Protobuf.Test/TestProtos/UnittestProto3.cs b/csharp/src/Google.Protobuf.Test/TestProtos/UnittestProto3.cs
index 7e71f94..d89bbbb 100644
--- a/csharp/src/Google.Protobuf.Test/TestProtos/UnittestProto3.cs
+++ b/csharp/src/Google.Protobuf.Test/TestProtos/UnittestProto3.cs
@@ -199,7 +199,7 @@
   }
 
   /// <summary>
-  ///  Test an enum that has multiple values with the same number.
+  /// Test an enum that has multiple values with the same number.
   /// </summary>
   public enum TestEnumWithDupValue {
     [pbr::OriginalName("TEST_ENUM_WITH_DUP_VALUE_UNSPECIFIED")] Unspecified = 0,
@@ -211,7 +211,7 @@
   }
 
   /// <summary>
-  ///  Test an enum with large, unordered values.
+  /// Test an enum with large, unordered values.
   /// </summary>
   public enum TestSparseEnum {
     [pbr::OriginalName("TEST_SPARSE_ENUM_UNSPECIFIED")] Unspecified = 0,
@@ -221,8 +221,8 @@
     [pbr::OriginalName("SPARSE_D")] SparseD = -15,
     [pbr::OriginalName("SPARSE_E")] SparseE = -53452,
     /// <summary>
-    ///  In proto3, value 0 must be the first one specified
-    ///  SPARSE_F = 0;
+    /// In proto3, value 0 must be the first one specified
+    /// SPARSE_F = 0;
     /// </summary>
     [pbr::OriginalName("SPARSE_G")] SparseG = 2,
   }
@@ -231,8 +231,8 @@
 
   #region Messages
   /// <summary>
-  ///  This proto includes every type of field in both singular and repeated
-  ///  forms.
+  /// This proto includes every type of field in both singular and repeated
+  /// forms.
   /// </summary>
   public sealed partial class TestAllTypes : pb::IMessage<TestAllTypes> {
     private static readonly pb::MessageParser<TestAllTypes> _parser = new pb::MessageParser<TestAllTypes>(() => new TestAllTypes());
@@ -328,7 +328,7 @@
     public const int SingleInt32FieldNumber = 1;
     private int singleInt32_;
     /// <summary>
-    ///  Singular
+    /// Singular
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public int SingleInt32 {
@@ -562,7 +562,7 @@
     public const int SinglePublicImportMessageFieldNumber = 26;
     private global::Google.Protobuf.TestProtos.PublicImportMessage singlePublicImportMessage_;
     /// <summary>
-    ///  Defined in unittest_import_public.proto
+    /// Defined in unittest_import_public.proto
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public global::Google.Protobuf.TestProtos.PublicImportMessage SinglePublicImportMessage {
@@ -578,7 +578,7 @@
         = pb::FieldCodec.ForInt32(250);
     private readonly pbc::RepeatedField<int> repeatedInt32_ = new pbc::RepeatedField<int>();
     /// <summary>
-    ///  Repeated
+    /// Repeated
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public pbc::RepeatedField<int> RepeatedInt32 {
@@ -791,7 +791,7 @@
         = pb::FieldCodec.ForMessage(434, global::Google.Protobuf.TestProtos.PublicImportMessage.Parser);
     private readonly pbc::RepeatedField<global::Google.Protobuf.TestProtos.PublicImportMessage> repeatedPublicImportMessage_ = new pbc::RepeatedField<global::Google.Protobuf.TestProtos.PublicImportMessage>();
     /// <summary>
-    ///  Defined in unittest_import_public.proto
+    /// Defined in unittest_import_public.proto
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public pbc::RepeatedField<global::Google.Protobuf.TestProtos.PublicImportMessage> RepeatedPublicImportMessage {
@@ -1593,7 +1593,7 @@
         [pbr::OriginalName("BAR")] Bar = 2,
         [pbr::OriginalName("BAZ")] Baz = 3,
         /// <summary>
-        ///  Intentionally negative.
+        /// Intentionally negative.
         /// </summary>
         [pbr::OriginalName("NEG")] Neg = -1,
       }
@@ -1634,9 +1634,9 @@
         public const int BbFieldNumber = 1;
         private int bb_;
         /// <summary>
-        ///  The field name "b" fails to compile in proto1 because it conflicts with
-        ///  a local variable named "b" in one of the generated methods.  Doh.
-        ///  This file needs to compile in proto1 to test backwards-compatibility.
+        /// The field name "b" fails to compile in proto1 because it conflicts with
+        /// a local variable named "b" in one of the generated methods.  Doh.
+        /// This file needs to compile in proto1 to test backwards-compatibility.
         /// </summary>
         [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
         public int Bb {
@@ -1726,7 +1726,7 @@
   }
 
   /// <summary>
-  ///  This proto includes a recusively nested message.
+  /// This proto includes a recusively nested message.
   /// </summary>
   public sealed partial class NestedTestAllTypes : pb::IMessage<NestedTestAllTypes> {
     private static readonly pb::MessageParser<NestedTestAllTypes> _parser = new pb::MessageParser<NestedTestAllTypes>(() => new NestedTestAllTypes());
@@ -2024,8 +2024,8 @@
   }
 
   /// <summary>
-  ///  Define these after TestAllTypes to make sure the compiler can handle
-  ///  that.
+  /// Define these after TestAllTypes to make sure the compiler can handle
+  /// that.
   /// </summary>
   public sealed partial class ForeignMessage : pb::IMessage<ForeignMessage> {
     private static readonly pb::MessageParser<ForeignMessage> _parser = new pb::MessageParser<ForeignMessage>(() => new ForeignMessage());
@@ -2234,7 +2234,7 @@
   }
 
   /// <summary>
-  ///  Test that we can use NestedMessage from outside TestAllTypes.
+  /// Test that we can use NestedMessage from outside TestAllTypes.
   /// </summary>
   public sealed partial class TestForeignNested : pb::IMessage<TestForeignNested> {
     private static readonly pb::MessageParser<TestForeignNested> _parser = new pb::MessageParser<TestForeignNested>(() => new TestForeignNested());
@@ -2360,7 +2360,7 @@
   }
 
   /// <summary>
-  ///  Test that really large tag numbers don't break anything.
+  /// Test that really large tag numbers don't break anything.
   /// </summary>
   public sealed partial class TestReallyLargeTagNumber : pb::IMessage<TestReallyLargeTagNumber> {
     private static readonly pb::MessageParser<TestReallyLargeTagNumber> _parser = new pb::MessageParser<TestReallyLargeTagNumber>(() => new TestReallyLargeTagNumber());
@@ -2399,8 +2399,8 @@
     public const int AFieldNumber = 1;
     private int a_;
     /// <summary>
-    ///  The largest possible tag number is 2^28 - 1, since the wire format uses
-    ///  three bits to communicate wire type.
+    /// The largest possible tag number is 2^28 - 1, since the wire format uses
+    /// three bits to communicate wire type.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public int A {
@@ -2663,7 +2663,7 @@
   }
 
   /// <summary>
-  ///  Test that mutual recursion works.
+  /// Test that mutual recursion works.
   /// </summary>
   public sealed partial class TestMutualRecursionA : pb::IMessage<TestMutualRecursionA> {
     private static readonly pb::MessageParser<TestMutualRecursionA> _parser = new pb::MessageParser<TestMutualRecursionA>(() => new TestMutualRecursionA());
@@ -2940,8 +2940,8 @@
   }
 
   /// <summary>
-  ///  Test message with CamelCase field names.  This violates Protocol Buffer
-  ///  standard style.
+  /// Test message with CamelCase field names.  This violates Protocol Buffer
+  /// standard style.
   /// </summary>
   public sealed partial class TestCamelCaseFieldNames : pb::IMessage<TestCamelCaseFieldNames> {
     private static readonly pb::MessageParser<TestCamelCaseFieldNames> _parser = new pb::MessageParser<TestCamelCaseFieldNames>(() => new TestCamelCaseFieldNames());
@@ -3233,8 +3233,8 @@
   }
 
   /// <summary>
-  ///  We list fields out of order, to ensure that we're using field number and not
-  ///  field index to determine serialization order.
+  /// We list fields out of order, to ensure that we're using field number and not
+  /// field index to determine serialization order.
   /// </summary>
   public sealed partial class TestFieldOrderings : pb::IMessage<TestFieldOrderings> {
     private static readonly pb::MessageParser<TestFieldOrderings> _parser = new pb::MessageParser<TestFieldOrderings>(() => new TestFieldOrderings());
@@ -3493,9 +3493,9 @@
         public const int BbFieldNumber = 1;
         private int bb_;
         /// <summary>
-        ///  The field name "b" fails to compile in proto1 because it conflicts with
-        ///  a local variable named "b" in one of the generated methods.  Doh.
-        ///  This file needs to compile in proto1 to test backwards-compatibility.
+        /// The field name "b" fails to compile in proto1 because it conflicts with
+        /// a local variable named "b" in one of the generated methods.  Doh.
+        /// This file needs to compile in proto1 to test backwards-compatibility.
         /// </summary>
         [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
         public int Bb {
@@ -3718,7 +3718,7 @@
   }
 
   /// <summary>
-  ///  Test String and Bytes: string is for valid UTF-8 strings
+  /// Test String and Bytes: string is for valid UTF-8 strings
   /// </summary>
   public sealed partial class OneString : pb::IMessage<OneString> {
     private static readonly pb::MessageParser<OneString> _parser = new pb::MessageParser<OneString>(() => new OneString());
@@ -4181,7 +4181,7 @@
   }
 
   /// <summary>
-  ///  Test int32, uint32, int64, uint64, and bool are all compatible
+  /// Test int32, uint32, int64, uint64, and bool are all compatible
   /// </summary>
   public sealed partial class Int32Message : pb::IMessage<Int32Message> {
     private static readonly pb::MessageParser<Int32Message> _parser = new pb::MessageParser<Int32Message>(() => new Int32Message());
@@ -4769,7 +4769,7 @@
   }
 
   /// <summary>
-  ///  Test oneofs.
+  /// Test oneofs.
   /// </summary>
   public sealed partial class TestOneof : pb::IMessage<TestOneof> {
     private static readonly pb::MessageParser<TestOneof> _parser = new pb::MessageParser<TestOneof>(() => new TestOneof());
@@ -5367,8 +5367,8 @@
   }
 
   /// <summary>
-  ///  A message with the same fields as TestPackedTypes, but without packing. Used
-  ///  to test packed &lt;-> unpacked wire compatibility.
+  /// A message with the same fields as TestPackedTypes, but without packing. Used
+  /// to test packed &lt;-> unpacked wire compatibility.
   /// </summary>
   public sealed partial class TestUnpackedTypes : pb::IMessage<TestUnpackedTypes> {
     private static readonly pb::MessageParser<TestUnpackedTypes> _parser = new pb::MessageParser<TestUnpackedTypes>(() => new TestUnpackedTypes());
@@ -5796,9 +5796,9 @@
         = pb::FieldCodec.ForFixed32(98);
     private readonly pbc::RepeatedField<uint> repeatedFixed32_ = new pbc::RepeatedField<uint>();
     /// <summary>
-    ///  Parsing repeated fixed size values used to fail. This message needs to be
-    ///  used in order to get a tag of the right size; all of the repeated fields
-    ///  in TestAllTypes didn't trigger the check.
+    /// Parsing repeated fixed size values used to fail. This message needs to be
+    /// used in order to get a tag of the right size; all of the repeated fields
+    /// in TestAllTypes didn't trigger the check.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public pbc::RepeatedField<uint> RepeatedFixed32 {
@@ -5811,7 +5811,7 @@
         = pb::FieldCodec.ForInt32(106);
     private readonly pbc::RepeatedField<int> repeatedInt32_ = new pbc::RepeatedField<int>();
     /// <summary>
-    ///  Check for a varint type, just for good measure.
+    /// Check for a varint type, just for good measure.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public pbc::RepeatedField<int> RepeatedInt32 {
@@ -5824,7 +5824,7 @@
         = pb::FieldCodec.ForFixed64(16370);
     private readonly pbc::RepeatedField<ulong> repeatedFixed64_ = new pbc::RepeatedField<ulong>();
     /// <summary>
-    ///  These have two-byte tags.
+    /// These have two-byte tags.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public pbc::RepeatedField<ulong> RepeatedFixed64 {
@@ -5847,7 +5847,7 @@
         = pb::FieldCodec.ForFloat(2097138);
     private readonly pbc::RepeatedField<float> repeatedFloat_ = new pbc::RepeatedField<float>();
     /// <summary>
-    ///  Three byte tags.
+    /// Three byte tags.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public pbc::RepeatedField<float> RepeatedFloat {
@@ -6018,7 +6018,7 @@
     public const int AFieldNumber = 1;
     private string a_ = "";
     /// <summary>
-    ///  */ &lt;- This should not close the generated doc comment
+    /// */ &lt;- This should not close the generated doc comment
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public string A {
@@ -6103,7 +6103,7 @@
   }
 
   /// <summary>
-  ///  Test that RPC services work.
+  /// Test that RPC services work.
   /// </summary>
   public sealed partial class FooRequest : pb::IMessage<FooRequest> {
     private static readonly pb::MessageParser<FooRequest> _parser = new pb::MessageParser<FooRequest>(() => new FooRequest());
diff --git a/csharp/src/Google.Protobuf.Test/TestProtos/UnittestWellKnownTypes.cs b/csharp/src/Google.Protobuf.Test/TestProtos/UnittestWellKnownTypes.cs
index 6e87fb5..2c7f0e0 100644
--- a/csharp/src/Google.Protobuf.Test/TestProtos/UnittestWellKnownTypes.cs
+++ b/csharp/src/Google.Protobuf.Test/TestProtos/UnittestWellKnownTypes.cs
@@ -173,9 +173,9 @@
   }
   #region Messages
   /// <summary>
-  ///  Test that we can include all well-known types.
-  ///  Each wrapper type is included separately, as languages
-  ///  map handle different wrappers in different ways.
+  /// Test that we can include all well-known types.
+  /// Each wrapper type is included separately, as languages
+  /// map handle different wrappers in different ways.
   /// </summary>
   public sealed partial class TestWellKnownTypes : pb::IMessage<TestWellKnownTypes> {
     private static readonly pb::MessageParser<TestWellKnownTypes> _parser = new pb::MessageParser<TestWellKnownTypes>(() => new TestWellKnownTypes());
@@ -438,7 +438,7 @@
     public const int ValueFieldFieldNumber = 19;
     private global::Google.Protobuf.WellKnownTypes.Value valueField_;
     /// <summary>
-    ///  Part of struct, but useful to be able to test separately
+    /// Part of struct, but useful to be able to test separately
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public global::Google.Protobuf.WellKnownTypes.Value ValueField {
@@ -907,7 +907,7 @@
   }
 
   /// <summary>
-  ///  A repeated field for each well-known type.
+  /// A repeated field for each well-known type.
   /// </summary>
   public sealed partial class RepeatedWellKnownTypes : pb::IMessage<RepeatedWellKnownTypes> {
     private static readonly pb::MessageParser<RepeatedWellKnownTypes> _parser = new pb::MessageParser<RepeatedWellKnownTypes>(() => new RepeatedWellKnownTypes());
@@ -1054,7 +1054,7 @@
         = pb::FieldCodec.ForStructWrapper<double>(82);
     private readonly pbc::RepeatedField<double?> doubleField_ = new pbc::RepeatedField<double?>();
     /// <summary>
-    ///  These don't actually make a lot of sense, but they're not prohibited...
+    /// These don't actually make a lot of sense, but they're not prohibited...
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public pbc::RepeatedField<double?> DoubleField {
@@ -2079,9 +2079,9 @@
   }
 
   /// <summary>
-  ///  A map field for each well-known type. We only
-  ///  need to worry about the value part of the map being the
-  ///  well-known types, as messages can't be map keys.
+  /// A map field for each well-known type. We only
+  /// need to worry about the value part of the map being the
+  /// well-known types, as messages can't be map keys.
   /// </summary>
   public sealed partial class MapWellKnownTypes : pb::IMessage<MapWellKnownTypes> {
     private static readonly pb::MessageParser<MapWellKnownTypes> _parser = new pb::MessageParser<MapWellKnownTypes>(() => new MapWellKnownTypes());
diff --git a/csharp/src/Google.Protobuf/Reflection/Descriptor.cs b/csharp/src/Google.Protobuf/Reflection/Descriptor.cs
index 52f97b9..d743e51 100644
--- a/csharp/src/Google.Protobuf/Reflection/Descriptor.cs
+++ b/csharp/src/Google.Protobuf/Reflection/Descriptor.cs
@@ -177,8 +177,8 @@
   }
   #region Messages
   /// <summary>
-  ///  The protocol compiler can output a FileDescriptorSet containing the .proto
-  ///  files it parses.
+  /// The protocol compiler can output a FileDescriptorSet containing the .proto
+  /// files it parses.
   /// </summary>
   internal sealed partial class FileDescriptorSet : pb::IMessage<FileDescriptorSet> {
     private static readonly pb::MessageParser<FileDescriptorSet> _parser = new pb::MessageParser<FileDescriptorSet>(() => new FileDescriptorSet());
@@ -290,7 +290,7 @@
   }
 
   /// <summary>
-  ///  Describes a complete .proto file.
+  /// Describes a complete .proto file.
   /// </summary>
   internal sealed partial class FileDescriptorProto : pb::IMessage<FileDescriptorProto> {
     private static readonly pb::MessageParser<FileDescriptorProto> _parser = new pb::MessageParser<FileDescriptorProto>(() => new FileDescriptorProto());
@@ -339,7 +339,7 @@
     public const int NameFieldNumber = 1;
     private string name_ = "";
     /// <summary>
-    ///  file name, relative to root of source tree
+    /// file name, relative to root of source tree
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public string Name {
@@ -353,7 +353,7 @@
     public const int PackageFieldNumber = 2;
     private string package_ = "";
     /// <summary>
-    ///  e.g. "foo", "foo.bar", etc.
+    /// e.g. "foo", "foo.bar", etc.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public string Package {
@@ -369,7 +369,7 @@
         = pb::FieldCodec.ForString(26);
     private readonly pbc::RepeatedField<string> dependency_ = new pbc::RepeatedField<string>();
     /// <summary>
-    ///  Names of files imported by this file.
+    /// Names of files imported by this file.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public pbc::RepeatedField<string> Dependency {
@@ -382,7 +382,7 @@
         = pb::FieldCodec.ForInt32(80);
     private readonly pbc::RepeatedField<int> publicDependency_ = new pbc::RepeatedField<int>();
     /// <summary>
-    ///  Indexes of the public imported files in the dependency list above.
+    /// Indexes of the public imported files in the dependency list above.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public pbc::RepeatedField<int> PublicDependency {
@@ -395,8 +395,8 @@
         = pb::FieldCodec.ForInt32(88);
     private readonly pbc::RepeatedField<int> weakDependency_ = new pbc::RepeatedField<int>();
     /// <summary>
-    ///  Indexes of the weak imported files in the dependency list.
-    ///  For Google-internal migration only. Do not use.
+    /// Indexes of the weak imported files in the dependency list.
+    /// For Google-internal migration only. Do not use.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public pbc::RepeatedField<int> WeakDependency {
@@ -409,7 +409,7 @@
         = pb::FieldCodec.ForMessage(34, global::Google.Protobuf.Reflection.DescriptorProto.Parser);
     private readonly pbc::RepeatedField<global::Google.Protobuf.Reflection.DescriptorProto> messageType_ = new pbc::RepeatedField<global::Google.Protobuf.Reflection.DescriptorProto>();
     /// <summary>
-    ///  All top-level definitions in this file.
+    /// All top-level definitions in this file.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public pbc::RepeatedField<global::Google.Protobuf.Reflection.DescriptorProto> MessageType {
@@ -461,10 +461,10 @@
     public const int SourceCodeInfoFieldNumber = 9;
     private global::Google.Protobuf.Reflection.SourceCodeInfo sourceCodeInfo_;
     /// <summary>
-    ///  This field contains optional information about the original source code.
-    ///  You may safely remove this entire field without harming runtime
-    ///  functionality of the descriptors -- the information is needed only by
-    ///  development tools.
+    /// This field contains optional information about the original source code.
+    /// You may safely remove this entire field without harming runtime
+    /// functionality of the descriptors -- the information is needed only by
+    /// development tools.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public global::Google.Protobuf.Reflection.SourceCodeInfo SourceCodeInfo {
@@ -478,8 +478,8 @@
     public const int SyntaxFieldNumber = 12;
     private string syntax_ = "";
     /// <summary>
-    ///  The syntax of the proto file.
-    ///  The supported values are "proto2" and "proto3".
+    /// The syntax of the proto file.
+    /// The supported values are "proto2" and "proto3".
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public string Syntax {
@@ -705,7 +705,7 @@
   }
 
   /// <summary>
-  ///  Describes a message type.
+  /// Describes a message type.
   /// </summary>
   internal sealed partial class DescriptorProto : pb::IMessage<DescriptorProto> {
     private static readonly pb::MessageParser<DescriptorProto> _parser = new pb::MessageParser<DescriptorProto>(() => new DescriptorProto());
@@ -846,8 +846,8 @@
         = pb::FieldCodec.ForString(82);
     private readonly pbc::RepeatedField<string> reservedName_ = new pbc::RepeatedField<string>();
     /// <summary>
-    ///  Reserved field names, which may not be used by fields in the same message.
-    ///  A given name may only be reserved once.
+    /// Reserved field names, which may not be used by fields in the same message.
+    /// A given name may only be reserved once.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public pbc::RepeatedField<string> ReservedName {
@@ -1170,9 +1170,9 @@
       }
 
       /// <summary>
-      ///  Range of reserved tag numbers. Reserved tag numbers may not be used by
-      ///  fields or extension ranges in the same message. Reserved ranges may
-      ///  not overlap.
+      /// Range of reserved tag numbers. Reserved tag numbers may not be used by
+      /// fields or extension ranges in the same message. Reserved ranges may
+      /// not overlap.
       /// </summary>
       internal sealed partial class ReservedRange : pb::IMessage<ReservedRange> {
         private static readonly pb::MessageParser<ReservedRange> _parser = new pb::MessageParser<ReservedRange>(() => new ReservedRange());
@@ -1211,7 +1211,7 @@
         public const int StartFieldNumber = 1;
         private int start_;
         /// <summary>
-        ///  Inclusive.
+        /// Inclusive.
         /// </summary>
         [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
         public int Start {
@@ -1225,7 +1225,7 @@
         public const int EndFieldNumber = 2;
         private int end_;
         /// <summary>
-        ///  Exclusive.
+        /// Exclusive.
         /// </summary>
         [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
         public int End {
@@ -1331,7 +1331,7 @@
   }
 
   /// <summary>
-  ///  Describes a field within a message.
+  /// Describes a field within a message.
   /// </summary>
   internal sealed partial class FieldDescriptorProto : pb::IMessage<FieldDescriptorProto> {
     private static readonly pb::MessageParser<FieldDescriptorProto> _parser = new pb::MessageParser<FieldDescriptorProto>(() => new FieldDescriptorProto());
@@ -1411,8 +1411,8 @@
     public const int TypeFieldNumber = 5;
     private global::Google.Protobuf.Reflection.FieldDescriptorProto.Types.Type type_ = 0;
     /// <summary>
-    ///  If type_name is set, this need not be set.  If both this and type_name
-    ///  are set, this must be one of TYPE_ENUM, TYPE_MESSAGE or TYPE_GROUP.
+    /// If type_name is set, this need not be set.  If both this and type_name
+    /// are set, this must be one of TYPE_ENUM, TYPE_MESSAGE or TYPE_GROUP.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public global::Google.Protobuf.Reflection.FieldDescriptorProto.Types.Type Type {
@@ -1426,11 +1426,11 @@
     public const int TypeNameFieldNumber = 6;
     private string typeName_ = "";
     /// <summary>
-    ///  For message and enum types, this is the name of the type.  If the name
-    ///  starts with a '.', it is fully-qualified.  Otherwise, C++-like scoping
-    ///  rules are used to find the type (i.e. first the nested types within this
-    ///  message are searched, then within the parent, on up to the root
-    ///  namespace).
+    /// For message and enum types, this is the name of the type.  If the name
+    /// starts with a '.', it is fully-qualified.  Otherwise, C++-like scoping
+    /// rules are used to find the type (i.e. first the nested types within this
+    /// message are searched, then within the parent, on up to the root
+    /// namespace).
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public string TypeName {
@@ -1444,8 +1444,8 @@
     public const int ExtendeeFieldNumber = 2;
     private string extendee_ = "";
     /// <summary>
-    ///  For extensions, this is the name of the type being extended.  It is
-    ///  resolved in the same manner as type_name.
+    /// For extensions, this is the name of the type being extended.  It is
+    /// resolved in the same manner as type_name.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public string Extendee {
@@ -1459,11 +1459,11 @@
     public const int DefaultValueFieldNumber = 7;
     private string defaultValue_ = "";
     /// <summary>
-    ///  For numeric types, contains the original text representation of the value.
-    ///  For booleans, "true" or "false".
-    ///  For strings, contains the default text contents (not escaped in any way).
-    ///  For bytes, contains the C escaped value.  All bytes >= 128 are escaped.
-    ///  TODO(kenton):  Base-64 encode?
+    /// For numeric types, contains the original text representation of the value.
+    /// For booleans, "true" or "false".
+    /// For strings, contains the default text contents (not escaped in any way).
+    /// For bytes, contains the C escaped value.  All bytes >= 128 are escaped.
+    /// TODO(kenton):  Base-64 encode?
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public string DefaultValue {
@@ -1477,8 +1477,8 @@
     public const int OneofIndexFieldNumber = 9;
     private int oneofIndex_;
     /// <summary>
-    ///  If set, gives the index of a oneof in the containing type's oneof_decl
-    ///  list.  This field is a member of that oneof.
+    /// If set, gives the index of a oneof in the containing type's oneof_decl
+    /// list.  This field is a member of that oneof.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public int OneofIndex {
@@ -1492,10 +1492,10 @@
     public const int JsonNameFieldNumber = 10;
     private string jsonName_ = "";
     /// <summary>
-    ///  JSON name of this field. The value is set by protocol compiler. If the
-    ///  user has set a "json_name" option on this field, that option's value
-    ///  will be used. Otherwise, it's deduced from the field's name by converting
-    ///  it to camelCase.
+    /// JSON name of this field. The value is set by protocol compiler. If the
+    /// user has set a "json_name" option on this field, that option's value
+    /// will be used. Otherwise, it's deduced from the field's name by converting
+    /// it to camelCase.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public string JsonName {
@@ -1744,20 +1744,20 @@
     public static partial class Types {
       internal enum Type {
         /// <summary>
-        ///  0 is reserved for errors.
-        ///  Order is weird for historical reasons.
+        /// 0 is reserved for errors.
+        /// Order is weird for historical reasons.
         /// </summary>
         [pbr::OriginalName("TYPE_DOUBLE")] Double = 1,
         [pbr::OriginalName("TYPE_FLOAT")] Float = 2,
         /// <summary>
-        ///  Not ZigZag encoded.  Negative numbers take 10 bytes.  Use TYPE_SINT64 if
-        ///  negative values are likely.
+        /// Not ZigZag encoded.  Negative numbers take 10 bytes.  Use TYPE_SINT64 if
+        /// negative values are likely.
         /// </summary>
         [pbr::OriginalName("TYPE_INT64")] Int64 = 3,
         [pbr::OriginalName("TYPE_UINT64")] Uint64 = 4,
         /// <summary>
-        ///  Not ZigZag encoded.  Negative numbers take 10 bytes.  Use TYPE_SINT32 if
-        ///  negative values are likely.
+        /// Not ZigZag encoded.  Negative numbers take 10 bytes.  Use TYPE_SINT32 if
+        /// negative values are likely.
         /// </summary>
         [pbr::OriginalName("TYPE_INT32")] Int32 = 5,
         [pbr::OriginalName("TYPE_FIXED64")] Fixed64 = 6,
@@ -1765,15 +1765,15 @@
         [pbr::OriginalName("TYPE_BOOL")] Bool = 8,
         [pbr::OriginalName("TYPE_STRING")] String = 9,
         /// <summary>
-        ///  Tag-delimited aggregate.
+        /// Tag-delimited aggregate.
         /// </summary>
         [pbr::OriginalName("TYPE_GROUP")] Group = 10,
         /// <summary>
-        ///  Length-delimited aggregate.
+        /// Length-delimited aggregate.
         /// </summary>
         [pbr::OriginalName("TYPE_MESSAGE")] Message = 11,
         /// <summary>
-        ///  New in version 2.
+        /// New in version 2.
         /// </summary>
         [pbr::OriginalName("TYPE_BYTES")] Bytes = 12,
         [pbr::OriginalName("TYPE_UINT32")] Uint32 = 13,
@@ -1781,18 +1781,18 @@
         [pbr::OriginalName("TYPE_SFIXED32")] Sfixed32 = 15,
         [pbr::OriginalName("TYPE_SFIXED64")] Sfixed64 = 16,
         /// <summary>
-        ///  Uses ZigZag encoding.
+        /// Uses ZigZag encoding.
         /// </summary>
         [pbr::OriginalName("TYPE_SINT32")] Sint32 = 17,
         /// <summary>
-        ///  Uses ZigZag encoding.
+        /// Uses ZigZag encoding.
         /// </summary>
         [pbr::OriginalName("TYPE_SINT64")] Sint64 = 18,
       }
 
       internal enum Label {
         /// <summary>
-        ///  0 is reserved for errors
+        /// 0 is reserved for errors
         /// </summary>
         [pbr::OriginalName("LABEL_OPTIONAL")] Optional = 1,
         [pbr::OriginalName("LABEL_REQUIRED")] Required = 2,
@@ -1805,7 +1805,7 @@
   }
 
   /// <summary>
-  ///  Describes a oneof.
+  /// Describes a oneof.
   /// </summary>
   internal sealed partial class OneofDescriptorProto : pb::IMessage<OneofDescriptorProto> {
     private static readonly pb::MessageParser<OneofDescriptorProto> _parser = new pb::MessageParser<OneofDescriptorProto>(() => new OneofDescriptorProto());
@@ -1959,7 +1959,7 @@
   }
 
   /// <summary>
-  ///  Describes an enum type.
+  /// Describes an enum type.
   /// </summary>
   internal sealed partial class EnumDescriptorProto : pb::IMessage<EnumDescriptorProto> {
     private static readonly pb::MessageParser<EnumDescriptorProto> _parser = new pb::MessageParser<EnumDescriptorProto>(() => new EnumDescriptorProto());
@@ -2133,7 +2133,7 @@
   }
 
   /// <summary>
-  ///  Describes a value within an enum.
+  /// Describes a value within an enum.
   /// </summary>
   internal sealed partial class EnumValueDescriptorProto : pb::IMessage<EnumValueDescriptorProto> {
     private static readonly pb::MessageParser<EnumValueDescriptorProto> _parser = new pb::MessageParser<EnumValueDescriptorProto>(() => new EnumValueDescriptorProto());
@@ -2315,7 +2315,7 @@
   }
 
   /// <summary>
-  ///  Describes a service.
+  /// Describes a service.
   /// </summary>
   internal sealed partial class ServiceDescriptorProto : pb::IMessage<ServiceDescriptorProto> {
     private static readonly pb::MessageParser<ServiceDescriptorProto> _parser = new pb::MessageParser<ServiceDescriptorProto>(() => new ServiceDescriptorProto());
@@ -2489,7 +2489,7 @@
   }
 
   /// <summary>
-  ///  Describes a method of a service.
+  /// Describes a method of a service.
   /// </summary>
   internal sealed partial class MethodDescriptorProto : pb::IMessage<MethodDescriptorProto> {
     private static readonly pb::MessageParser<MethodDescriptorProto> _parser = new pb::MessageParser<MethodDescriptorProto>(() => new MethodDescriptorProto());
@@ -2543,8 +2543,8 @@
     public const int InputTypeFieldNumber = 2;
     private string inputType_ = "";
     /// <summary>
-    ///  Input and output type names.  These are resolved in the same way as
-    ///  FieldDescriptorProto.type_name, but must refer to a message type.
+    /// Input and output type names.  These are resolved in the same way as
+    /// FieldDescriptorProto.type_name, but must refer to a message type.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public string InputType {
@@ -2580,7 +2580,7 @@
     public const int ClientStreamingFieldNumber = 5;
     private bool clientStreaming_;
     /// <summary>
-    ///  Identifies if client streams multiple client messages
+    /// Identifies if client streams multiple client messages
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public bool ClientStreaming {
@@ -2594,7 +2594,7 @@
     public const int ServerStreamingFieldNumber = 6;
     private bool serverStreaming_;
     /// <summary>
-    ///  Identifies if server streams multiple server messages
+    /// Identifies if server streams multiple server messages
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public bool ServerStreaming {
@@ -2815,10 +2815,10 @@
     public const int JavaPackageFieldNumber = 1;
     private string javaPackage_ = "";
     /// <summary>
-    ///  Sets the Java package where classes generated from this .proto will be
-    ///  placed.  By default, the proto package is used, but this is often
-    ///  inappropriate because proto packages do not normally start with backwards
-    ///  domain names.
+    /// Sets the Java package where classes generated from this .proto will be
+    /// placed.  By default, the proto package is used, but this is often
+    /// inappropriate because proto packages do not normally start with backwards
+    /// domain names.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public string JavaPackage {
@@ -2832,11 +2832,11 @@
     public const int JavaOuterClassnameFieldNumber = 8;
     private string javaOuterClassname_ = "";
     /// <summary>
-    ///  If set, all the classes from the .proto file are wrapped in a single
-    ///  outer class with the given name.  This applies to both Proto1
-    ///  (equivalent to the old "--one_java_file" option) and Proto2 (where
-    ///  a .proto always translates to a single class, but you may want to
-    ///  explicitly choose the class name).
+    /// If set, all the classes from the .proto file are wrapped in a single
+    /// outer class with the given name.  This applies to both Proto1
+    /// (equivalent to the old "--one_java_file" option) and Proto2 (where
+    /// a .proto always translates to a single class, but you may want to
+    /// explicitly choose the class name).
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public string JavaOuterClassname {
@@ -2850,12 +2850,12 @@
     public const int JavaMultipleFilesFieldNumber = 10;
     private bool javaMultipleFiles_;
     /// <summary>
-    ///  If set true, then the Java code generator will generate a separate .java
-    ///  file for each top-level message, enum, and service defined in the .proto
-    ///  file.  Thus, these types will *not* be nested inside the outer class
-    ///  named by java_outer_classname.  However, the outer class will still be
-    ///  generated to contain the file's getDescriptor() method as well as any
-    ///  top-level extensions defined in the file.
+    /// If set true, then the Java code generator will generate a separate .java
+    /// file for each top-level message, enum, and service defined in the .proto
+    /// file.  Thus, these types will *not* be nested inside the outer class
+    /// named by java_outer_classname.  However, the outer class will still be
+    /// generated to contain the file's getDescriptor() method as well as any
+    /// top-level extensions defined in the file.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public bool JavaMultipleFiles {
@@ -2869,7 +2869,7 @@
     public const int JavaGenerateEqualsAndHashFieldNumber = 20;
     private bool javaGenerateEqualsAndHash_;
     /// <summary>
-    ///  This option does nothing.
+    /// This option does nothing.
     /// </summary>
     [global::System.ObsoleteAttribute]
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
@@ -2884,12 +2884,12 @@
     public const int JavaStringCheckUtf8FieldNumber = 27;
     private bool javaStringCheckUtf8_;
     /// <summary>
-    ///  If set true, then the Java2 code generator will generate code that
-    ///  throws an exception whenever an attempt is made to assign a non-UTF-8
-    ///  byte sequence to a string field.
-    ///  Message reflection will do the same.
-    ///  However, an extension field still accepts non-UTF-8 byte sequences.
-    ///  This option has no effect on when used with the lite runtime.
+    /// If set true, then the Java2 code generator will generate code that
+    /// throws an exception whenever an attempt is made to assign a non-UTF-8
+    /// byte sequence to a string field.
+    /// Message reflection will do the same.
+    /// However, an extension field still accepts non-UTF-8 byte sequences.
+    /// This option has no effect on when used with the lite runtime.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public bool JavaStringCheckUtf8 {
@@ -2914,11 +2914,11 @@
     public const int GoPackageFieldNumber = 11;
     private string goPackage_ = "";
     /// <summary>
-    ///  Sets the Go package where structs generated from this .proto will be
-    ///  placed. If omitted, the Go package will be derived from the following:
-    ///    - The basename of the package import path, if provided.
-    ///    - Otherwise, the package statement in the .proto file, if present.
-    ///    - Otherwise, the basename of the .proto file, without extension.
+    /// Sets the Go package where structs generated from this .proto will be
+    /// placed. If omitted, the Go package will be derived from the following:
+    ///   - The basename of the package import path, if provided.
+    ///   - Otherwise, the package statement in the .proto file, if present.
+    ///   - Otherwise, the basename of the .proto file, without extension.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public string GoPackage {
@@ -2932,16 +2932,16 @@
     public const int CcGenericServicesFieldNumber = 16;
     private bool ccGenericServices_;
     /// <summary>
-    ///  Should generic services be generated in each language?  "Generic" services
-    ///  are not specific to any particular RPC system.  They are generated by the
-    ///  main code generators in each language (without additional plugins).
-    ///  Generic services were the only kind of service generation supported by
-    ///  early versions of google.protobuf.
+    /// Should generic services be generated in each language?  "Generic" services
+    /// are not specific to any particular RPC system.  They are generated by the
+    /// main code generators in each language (without additional plugins).
+    /// Generic services were the only kind of service generation supported by
+    /// early versions of google.protobuf.
     ///
-    ///  Generic services are now considered deprecated in favor of using plugins
-    ///  that generate code specific to your particular RPC system.  Therefore,
-    ///  these default to false.  Old code which depends on generic services should
-    ///  explicitly set them to true.
+    /// Generic services are now considered deprecated in favor of using plugins
+    /// that generate code specific to your particular RPC system.  Therefore,
+    /// these default to false.  Old code which depends on generic services should
+    /// explicitly set them to true.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public bool CcGenericServices {
@@ -2977,10 +2977,10 @@
     public const int DeprecatedFieldNumber = 23;
     private bool deprecated_;
     /// <summary>
-    ///  Is this file deprecated?
-    ///  Depending on the target platform, this can emit Deprecated annotations
-    ///  for everything in the file, or it will be completely ignored; in the very
-    ///  least, this is a formalization for deprecating files.
+    /// Is this file deprecated?
+    /// Depending on the target platform, this can emit Deprecated annotations
+    /// for everything in the file, or it will be completely ignored; in the very
+    /// least, this is a formalization for deprecating files.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public bool Deprecated {
@@ -2994,8 +2994,8 @@
     public const int CcEnableArenasFieldNumber = 31;
     private bool ccEnableArenas_;
     /// <summary>
-    ///  Enables the use of arenas for the proto messages in this file. This applies
-    ///  only to generated classes for C++.
+    /// Enables the use of arenas for the proto messages in this file. This applies
+    /// only to generated classes for C++.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public bool CcEnableArenas {
@@ -3009,8 +3009,8 @@
     public const int ObjcClassPrefixFieldNumber = 36;
     private string objcClassPrefix_ = "";
     /// <summary>
-    ///  Sets the objective c class prefix which is prepended to all objective c
-    ///  generated classes from this .proto. There is no default.
+    /// Sets the objective c class prefix which is prepended to all objective c
+    /// generated classes from this .proto. There is no default.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public string ObjcClassPrefix {
@@ -3024,7 +3024,7 @@
     public const int CsharpNamespaceFieldNumber = 37;
     private string csharpNamespace_ = "";
     /// <summary>
-    ///  Namespace for generated classes; defaults to the package.
+    /// Namespace for generated classes; defaults to the package.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public string CsharpNamespace {
@@ -3038,10 +3038,10 @@
     public const int SwiftPrefixFieldNumber = 39;
     private string swiftPrefix_ = "";
     /// <summary>
-    ///  By default Swift generators will take the proto package and CamelCase it
-    ///  replacing '.' with underscore and use that to prefix the types/symbols
-    ///  defined. When this options is provided, they will use this value instead
-    ///  to prefix the types/symbols defined.
+    /// By default Swift generators will take the proto package and CamelCase it
+    /// replacing '.' with underscore and use that to prefix the types/symbols
+    /// defined. When this options is provided, they will use this value instead
+    /// to prefix the types/symbols defined.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public string SwiftPrefix {
@@ -3057,7 +3057,7 @@
         = pb::FieldCodec.ForMessage(7994, global::Google.Protobuf.Reflection.UninterpretedOption.Parser);
     private readonly pbc::RepeatedField<global::Google.Protobuf.Reflection.UninterpretedOption> uninterpretedOption_ = new pbc::RepeatedField<global::Google.Protobuf.Reflection.UninterpretedOption>();
     /// <summary>
-    ///  The parser stores options it doesn't recognize here. See above.
+    /// The parser stores options it doesn't recognize here. See above.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public pbc::RepeatedField<global::Google.Protobuf.Reflection.UninterpretedOption> UninterpretedOption {
@@ -3374,19 +3374,19 @@
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static partial class Types {
       /// <summary>
-      ///  Generated classes can be optimized for speed or code size.
+      /// Generated classes can be optimized for speed or code size.
       /// </summary>
       internal enum OptimizeMode {
         /// <summary>
-        ///  Generate complete code for parsing, serialization,
+        /// Generate complete code for parsing, serialization,
         /// </summary>
         [pbr::OriginalName("SPEED")] Speed = 1,
         /// <summary>
-        ///  etc.
+        /// etc.
         /// </summary>
         [pbr::OriginalName("CODE_SIZE")] CodeSize = 2,
         /// <summary>
-        ///  Generate code using MessageLite and the lite runtime.
+        /// Generate code using MessageLite and the lite runtime.
         /// </summary>
         [pbr::OriginalName("LITE_RUNTIME")] LiteRuntime = 3,
       }
@@ -3436,24 +3436,24 @@
     public const int MessageSetWireFormatFieldNumber = 1;
     private bool messageSetWireFormat_;
     /// <summary>
-    ///  Set true to use the old proto1 MessageSet wire format for extensions.
-    ///  This is provided for backwards-compatibility with the MessageSet wire
-    ///  format.  You should not use this for any other reason:  It's less
-    ///  efficient, has fewer features, and is more complicated.
+    /// Set true to use the old proto1 MessageSet wire format for extensions.
+    /// This is provided for backwards-compatibility with the MessageSet wire
+    /// format.  You should not use this for any other reason:  It's less
+    /// efficient, has fewer features, and is more complicated.
     ///
-    ///  The message must be defined exactly as follows:
-    ///    message Foo {
-    ///      option message_set_wire_format = true;
-    ///      extensions 4 to max;
-    ///    }
-    ///  Note that the message cannot have any defined fields; MessageSets only
-    ///  have extensions.
+    /// The message must be defined exactly as follows:
+    ///   message Foo {
+    ///     option message_set_wire_format = true;
+    ///     extensions 4 to max;
+    ///   }
+    /// Note that the message cannot have any defined fields; MessageSets only
+    /// have extensions.
     ///
-    ///  All extensions of your type must be singular messages; e.g. they cannot
-    ///  be int32s, enums, or repeated messages.
+    /// All extensions of your type must be singular messages; e.g. they cannot
+    /// be int32s, enums, or repeated messages.
     ///
-    ///  Because this is an option, the above two restrictions are not enforced by
-    ///  the protocol compiler.
+    /// Because this is an option, the above two restrictions are not enforced by
+    /// the protocol compiler.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public bool MessageSetWireFormat {
@@ -3467,9 +3467,9 @@
     public const int NoStandardDescriptorAccessorFieldNumber = 2;
     private bool noStandardDescriptorAccessor_;
     /// <summary>
-    ///  Disables the generation of the standard "descriptor()" accessor, which can
-    ///  conflict with a field of the same name.  This is meant to make migration
-    ///  from proto1 easier; new code should avoid fields named "descriptor".
+    /// Disables the generation of the standard "descriptor()" accessor, which can
+    /// conflict with a field of the same name.  This is meant to make migration
+    /// from proto1 easier; new code should avoid fields named "descriptor".
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public bool NoStandardDescriptorAccessor {
@@ -3483,10 +3483,10 @@
     public const int DeprecatedFieldNumber = 3;
     private bool deprecated_;
     /// <summary>
-    ///  Is this message deprecated?
-    ///  Depending on the target platform, this can emit Deprecated annotations
-    ///  for the message, or it will be completely ignored; in the very least,
-    ///  this is a formalization for deprecating messages.
+    /// Is this message deprecated?
+    /// Depending on the target platform, this can emit Deprecated annotations
+    /// for the message, or it will be completely ignored; in the very least,
+    /// this is a formalization for deprecating messages.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public bool Deprecated {
@@ -3500,27 +3500,27 @@
     public const int MapEntryFieldNumber = 7;
     private bool mapEntry_;
     /// <summary>
-    ///  Whether the message is an automatically generated map entry type for the
-    ///  maps field.
+    /// Whether the message is an automatically generated map entry type for the
+    /// maps field.
     ///
-    ///  For maps fields:
-    ///      map&lt;KeyType, ValueType> map_field = 1;
-    ///  The parsed descriptor looks like:
-    ///      message MapFieldEntry {
-    ///          option map_entry = true;
-    ///          optional KeyType key = 1;
-    ///          optional ValueType value = 2;
-    ///      }
-    ///      repeated MapFieldEntry map_field = 1;
+    /// For maps fields:
+    ///     map&lt;KeyType, ValueType> map_field = 1;
+    /// The parsed descriptor looks like:
+    ///     message MapFieldEntry {
+    ///         option map_entry = true;
+    ///         optional KeyType key = 1;
+    ///         optional ValueType value = 2;
+    ///     }
+    ///     repeated MapFieldEntry map_field = 1;
     ///
-    ///  Implementations may choose not to generate the map_entry=true message, but
-    ///  use a native map in the target language to hold the keys and values.
-    ///  The reflection APIs in such implementions still need to work as
-    ///  if the field is a repeated message field.
+    /// Implementations may choose not to generate the map_entry=true message, but
+    /// use a native map in the target language to hold the keys and values.
+    /// The reflection APIs in such implementions still need to work as
+    /// if the field is a repeated message field.
     ///
-    ///  NOTE: Do not set the option in .proto files. Always use the maps syntax
-    ///  instead. The option should only be implicitly set by the proto compiler
-    ///  parser.
+    /// NOTE: Do not set the option in .proto files. Always use the maps syntax
+    /// instead. The option should only be implicitly set by the proto compiler
+    /// parser.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public bool MapEntry {
@@ -3536,7 +3536,7 @@
         = pb::FieldCodec.ForMessage(7994, global::Google.Protobuf.Reflection.UninterpretedOption.Parser);
     private readonly pbc::RepeatedField<global::Google.Protobuf.Reflection.UninterpretedOption> uninterpretedOption_ = new pbc::RepeatedField<global::Google.Protobuf.Reflection.UninterpretedOption>();
     /// <summary>
-    ///  The parser stores options it doesn't recognize here. See above.
+    /// The parser stores options it doesn't recognize here. See above.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public pbc::RepeatedField<global::Google.Protobuf.Reflection.UninterpretedOption> UninterpretedOption {
@@ -3716,10 +3716,10 @@
     public const int CtypeFieldNumber = 1;
     private global::Google.Protobuf.Reflection.FieldOptions.Types.CType ctype_ = 0;
     /// <summary>
-    ///  The ctype option instructs the C++ code generator to use a different
-    ///  representation of the field than it normally would.  See the specific
-    ///  options below.  This option is not yet implemented in the open source
-    ///  release -- sorry, we'll try to include it in a future version!
+    /// The ctype option instructs the C++ code generator to use a different
+    /// representation of the field than it normally would.  See the specific
+    /// options below.  This option is not yet implemented in the open source
+    /// release -- sorry, we'll try to include it in a future version!
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public global::Google.Protobuf.Reflection.FieldOptions.Types.CType Ctype {
@@ -3733,11 +3733,11 @@
     public const int PackedFieldNumber = 2;
     private bool packed_;
     /// <summary>
-    ///  The packed option can be enabled for repeated primitive fields to enable
-    ///  a more efficient representation on the wire. Rather than repeatedly
-    ///  writing the tag and type for each element, the entire array is encoded as
-    ///  a single length-delimited blob. In proto3, only explicit setting it to
-    ///  false will avoid using packed encoding.
+    /// The packed option can be enabled for repeated primitive fields to enable
+    /// a more efficient representation on the wire. Rather than repeatedly
+    /// writing the tag and type for each element, the entire array is encoded as
+    /// a single length-delimited blob. In proto3, only explicit setting it to
+    /// false will avoid using packed encoding.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public bool Packed {
@@ -3751,15 +3751,15 @@
     public const int JstypeFieldNumber = 6;
     private global::Google.Protobuf.Reflection.FieldOptions.Types.JSType jstype_ = 0;
     /// <summary>
-    ///  The jstype option determines the JavaScript type used for values of the
-    ///  field.  The option is permitted only for 64 bit integral and fixed types
-    ///  (int64, uint64, sint64, fixed64, sfixed64).  By default these types are
-    ///  represented as JavaScript strings.  This avoids loss of precision that can
-    ///  happen when a large value is converted to a floating point JavaScript
-    ///  numbers.  Specifying JS_NUMBER for the jstype causes the generated
-    ///  JavaScript code to use the JavaScript "number" type instead of strings.
-    ///  This option is an enum to permit additional types to be added,
-    ///  e.g. goog.math.Integer.
+    /// The jstype option determines the JavaScript type used for values of the
+    /// field.  The option is permitted only for 64 bit integral and fixed types
+    /// (int64, uint64, sint64, fixed64, sfixed64).  By default these types are
+    /// represented as JavaScript strings.  This avoids loss of precision that can
+    /// happen when a large value is converted to a floating point JavaScript
+    /// numbers.  Specifying JS_NUMBER for the jstype causes the generated
+    /// JavaScript code to use the JavaScript "number" type instead of strings.
+    /// This option is an enum to permit additional types to be added,
+    /// e.g. goog.math.Integer.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public global::Google.Protobuf.Reflection.FieldOptions.Types.JSType Jstype {
@@ -3773,33 +3773,33 @@
     public const int LazyFieldNumber = 5;
     private bool lazy_;
     /// <summary>
-    ///  Should this field be parsed lazily?  Lazy applies only to message-type
-    ///  fields.  It means that when the outer message is initially parsed, the
-    ///  inner message's contents will not be parsed but instead stored in encoded
-    ///  form.  The inner message will actually be parsed when it is first accessed.
+    /// Should this field be parsed lazily?  Lazy applies only to message-type
+    /// fields.  It means that when the outer message is initially parsed, the
+    /// inner message's contents will not be parsed but instead stored in encoded
+    /// form.  The inner message will actually be parsed when it is first accessed.
     ///
-    ///  This is only a hint.  Implementations are free to choose whether to use
-    ///  eager or lazy parsing regardless of the value of this option.  However,
-    ///  setting this option true suggests that the protocol author believes that
-    ///  using lazy parsing on this field is worth the additional bookkeeping
-    ///  overhead typically needed to implement it.
+    /// This is only a hint.  Implementations are free to choose whether to use
+    /// eager or lazy parsing regardless of the value of this option.  However,
+    /// setting this option true suggests that the protocol author believes that
+    /// using lazy parsing on this field is worth the additional bookkeeping
+    /// overhead typically needed to implement it.
     ///
-    ///  This option does not affect the public interface of any generated code;
-    ///  all method signatures remain the same.  Furthermore, thread-safety of the
-    ///  interface is not affected by this option; const methods remain safe to
-    ///  call from multiple threads concurrently, while non-const methods continue
-    ///  to require exclusive access.
+    /// This option does not affect the public interface of any generated code;
+    /// all method signatures remain the same.  Furthermore, thread-safety of the
+    /// interface is not affected by this option; const methods remain safe to
+    /// call from multiple threads concurrently, while non-const methods continue
+    /// to require exclusive access.
     ///
-    ///  Note that implementations may choose not to check required fields within
-    ///  a lazy sub-message.  That is, calling IsInitialized() on the outer message
-    ///  may return true even if the inner message has missing required fields.
-    ///  This is necessary because otherwise the inner message would have to be
-    ///  parsed in order to perform the check, defeating the purpose of lazy
-    ///  parsing.  An implementation which chooses not to check required fields
-    ///  must be consistent about it.  That is, for any particular sub-message, the
-    ///  implementation must either *always* check its required fields, or *never*
-    ///  check its required fields, regardless of whether or not the message has
-    ///  been parsed.
+    /// Note that implementations may choose not to check required fields within
+    /// a lazy sub-message.  That is, calling IsInitialized() on the outer message
+    /// may return true even if the inner message has missing required fields.
+    /// This is necessary because otherwise the inner message would have to be
+    /// parsed in order to perform the check, defeating the purpose of lazy
+    /// parsing.  An implementation which chooses not to check required fields
+    /// must be consistent about it.  That is, for any particular sub-message, the
+    /// implementation must either *always* check its required fields, or *never*
+    /// check its required fields, regardless of whether or not the message has
+    /// been parsed.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public bool Lazy {
@@ -3813,10 +3813,10 @@
     public const int DeprecatedFieldNumber = 3;
     private bool deprecated_;
     /// <summary>
-    ///  Is this field deprecated?
-    ///  Depending on the target platform, this can emit Deprecated annotations
-    ///  for accessors, or it will be completely ignored; in the very least, this
-    ///  is a formalization for deprecating fields.
+    /// Is this field deprecated?
+    /// Depending on the target platform, this can emit Deprecated annotations
+    /// for accessors, or it will be completely ignored; in the very least, this
+    /// is a formalization for deprecating fields.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public bool Deprecated {
@@ -3830,7 +3830,7 @@
     public const int WeakFieldNumber = 10;
     private bool weak_;
     /// <summary>
-    ///  For Google-internal migration only. Do not use.
+    /// For Google-internal migration only. Do not use.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public bool Weak {
@@ -3846,7 +3846,7 @@
         = pb::FieldCodec.ForMessage(7994, global::Google.Protobuf.Reflection.UninterpretedOption.Parser);
     private readonly pbc::RepeatedField<global::Google.Protobuf.Reflection.UninterpretedOption> uninterpretedOption_ = new pbc::RepeatedField<global::Google.Protobuf.Reflection.UninterpretedOption>();
     /// <summary>
-    ///  The parser stores options it doesn't recognize here. See above.
+    /// The parser stores options it doesn't recognize here. See above.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public pbc::RepeatedField<global::Google.Protobuf.Reflection.UninterpretedOption> UninterpretedOption {
@@ -4020,7 +4020,7 @@
     public static partial class Types {
       internal enum CType {
         /// <summary>
-        ///  Default mode.
+        /// Default mode.
         /// </summary>
         [pbr::OriginalName("STRING")] String = 0,
         [pbr::OriginalName("CORD")] Cord = 1,
@@ -4029,15 +4029,15 @@
 
       internal enum JSType {
         /// <summary>
-        ///  Use the default type.
+        /// Use the default type.
         /// </summary>
         [pbr::OriginalName("JS_NORMAL")] JsNormal = 0,
         /// <summary>
-        ///  Use JavaScript strings.
+        /// Use JavaScript strings.
         /// </summary>
         [pbr::OriginalName("JS_STRING")] JsString = 1,
         /// <summary>
-        ///  Use JavaScript numbers.
+        /// Use JavaScript numbers.
         /// </summary>
         [pbr::OriginalName("JS_NUMBER")] JsNumber = 2,
       }
@@ -4085,7 +4085,7 @@
         = pb::FieldCodec.ForMessage(7994, global::Google.Protobuf.Reflection.UninterpretedOption.Parser);
     private readonly pbc::RepeatedField<global::Google.Protobuf.Reflection.UninterpretedOption> uninterpretedOption_ = new pbc::RepeatedField<global::Google.Protobuf.Reflection.UninterpretedOption>();
     /// <summary>
-    ///  The parser stores options it doesn't recognize here. See above.
+    /// The parser stores options it doesn't recognize here. See above.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public pbc::RepeatedField<global::Google.Protobuf.Reflection.UninterpretedOption> UninterpretedOption {
@@ -4197,8 +4197,8 @@
     public const int AllowAliasFieldNumber = 2;
     private bool allowAlias_;
     /// <summary>
-    ///  Set this option to true to allow mapping different tag names to the same
-    ///  value.
+    /// Set this option to true to allow mapping different tag names to the same
+    /// value.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public bool AllowAlias {
@@ -4212,10 +4212,10 @@
     public const int DeprecatedFieldNumber = 3;
     private bool deprecated_;
     /// <summary>
-    ///  Is this enum deprecated?
-    ///  Depending on the target platform, this can emit Deprecated annotations
-    ///  for the enum, or it will be completely ignored; in the very least, this
-    ///  is a formalization for deprecating enums.
+    /// Is this enum deprecated?
+    /// Depending on the target platform, this can emit Deprecated annotations
+    /// for the enum, or it will be completely ignored; in the very least, this
+    /// is a formalization for deprecating enums.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public bool Deprecated {
@@ -4231,7 +4231,7 @@
         = pb::FieldCodec.ForMessage(7994, global::Google.Protobuf.Reflection.UninterpretedOption.Parser);
     private readonly pbc::RepeatedField<global::Google.Protobuf.Reflection.UninterpretedOption> uninterpretedOption_ = new pbc::RepeatedField<global::Google.Protobuf.Reflection.UninterpretedOption>();
     /// <summary>
-    ///  The parser stores options it doesn't recognize here. See above.
+    /// The parser stores options it doesn't recognize here. See above.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public pbc::RepeatedField<global::Google.Protobuf.Reflection.UninterpretedOption> UninterpretedOption {
@@ -4374,10 +4374,10 @@
     public const int DeprecatedFieldNumber = 1;
     private bool deprecated_;
     /// <summary>
-    ///  Is this enum value deprecated?
-    ///  Depending on the target platform, this can emit Deprecated annotations
-    ///  for the enum value, or it will be completely ignored; in the very least,
-    ///  this is a formalization for deprecating enum values.
+    /// Is this enum value deprecated?
+    /// Depending on the target platform, this can emit Deprecated annotations
+    /// for the enum value, or it will be completely ignored; in the very least,
+    /// this is a formalization for deprecating enum values.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public bool Deprecated {
@@ -4393,7 +4393,7 @@
         = pb::FieldCodec.ForMessage(7994, global::Google.Protobuf.Reflection.UninterpretedOption.Parser);
     private readonly pbc::RepeatedField<global::Google.Protobuf.Reflection.UninterpretedOption> uninterpretedOption_ = new pbc::RepeatedField<global::Google.Protobuf.Reflection.UninterpretedOption>();
     /// <summary>
-    ///  The parser stores options it doesn't recognize here. See above.
+    /// The parser stores options it doesn't recognize here. See above.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public pbc::RepeatedField<global::Google.Protobuf.Reflection.UninterpretedOption> UninterpretedOption {
@@ -4520,10 +4520,10 @@
     public const int DeprecatedFieldNumber = 33;
     private bool deprecated_;
     /// <summary>
-    ///  Is this service deprecated?
-    ///  Depending on the target platform, this can emit Deprecated annotations
-    ///  for the service, or it will be completely ignored; in the very least,
-    ///  this is a formalization for deprecating services.
+    /// Is this service deprecated?
+    /// Depending on the target platform, this can emit Deprecated annotations
+    /// for the service, or it will be completely ignored; in the very least,
+    /// this is a formalization for deprecating services.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public bool Deprecated {
@@ -4539,7 +4539,7 @@
         = pb::FieldCodec.ForMessage(7994, global::Google.Protobuf.Reflection.UninterpretedOption.Parser);
     private readonly pbc::RepeatedField<global::Google.Protobuf.Reflection.UninterpretedOption> uninterpretedOption_ = new pbc::RepeatedField<global::Google.Protobuf.Reflection.UninterpretedOption>();
     /// <summary>
-    ///  The parser stores options it doesn't recognize here. See above.
+    /// The parser stores options it doesn't recognize here. See above.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public pbc::RepeatedField<global::Google.Protobuf.Reflection.UninterpretedOption> UninterpretedOption {
@@ -4667,10 +4667,10 @@
     public const int DeprecatedFieldNumber = 33;
     private bool deprecated_;
     /// <summary>
-    ///  Is this method deprecated?
-    ///  Depending on the target platform, this can emit Deprecated annotations
-    ///  for the method, or it will be completely ignored; in the very least,
-    ///  this is a formalization for deprecating methods.
+    /// Is this method deprecated?
+    /// Depending on the target platform, this can emit Deprecated annotations
+    /// for the method, or it will be completely ignored; in the very least,
+    /// this is a formalization for deprecating methods.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public bool Deprecated {
@@ -4697,7 +4697,7 @@
         = pb::FieldCodec.ForMessage(7994, global::Google.Protobuf.Reflection.UninterpretedOption.Parser);
     private readonly pbc::RepeatedField<global::Google.Protobuf.Reflection.UninterpretedOption> uninterpretedOption_ = new pbc::RepeatedField<global::Google.Protobuf.Reflection.UninterpretedOption>();
     /// <summary>
-    ///  The parser stores options it doesn't recognize here. See above.
+    /// The parser stores options it doesn't recognize here. See above.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public pbc::RepeatedField<global::Google.Protobuf.Reflection.UninterpretedOption> UninterpretedOption {
@@ -4806,18 +4806,18 @@
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static partial class Types {
       /// <summary>
-      ///  Is this method side-effect-free (or safe in HTTP parlance), or idempotent,
-      ///  or neither? HTTP based RPC implementation may choose GET verb for safe
-      ///  methods, and PUT verb for idempotent methods instead of the default POST.
+      /// Is this method side-effect-free (or safe in HTTP parlance), or idempotent,
+      /// or neither? HTTP based RPC implementation may choose GET verb for safe
+      /// methods, and PUT verb for idempotent methods instead of the default POST.
       /// </summary>
       internal enum IdempotencyLevel {
         [pbr::OriginalName("IDEMPOTENCY_UNKNOWN")] IdempotencyUnknown = 0,
         /// <summary>
-        ///  implies idempotent
+        /// implies idempotent
         /// </summary>
         [pbr::OriginalName("NO_SIDE_EFFECTS")] NoSideEffects = 1,
         /// <summary>
-        ///  idempotent, but may have side effects
+        /// idempotent, but may have side effects
         /// </summary>
         [pbr::OriginalName("IDEMPOTENT")] Idempotent = 2,
       }
@@ -4828,12 +4828,12 @@
   }
 
   /// <summary>
-  ///  A message representing a option the parser does not recognize. This only
-  ///  appears in options protos created by the compiler::Parser class.
-  ///  DescriptorPool resolves these when building Descriptor objects. Therefore,
-  ///  options protos in descriptor objects (e.g. returned by Descriptor::options(),
-  ///  or produced by Descriptor::CopyTo()) will never have UninterpretedOptions
-  ///  in them.
+  /// A message representing a option the parser does not recognize. This only
+  /// appears in options protos created by the compiler::Parser class.
+  /// DescriptorPool resolves these when building Descriptor objects. Therefore,
+  /// options protos in descriptor objects (e.g. returned by Descriptor::options(),
+  /// or produced by Descriptor::CopyTo()) will never have UninterpretedOptions
+  /// in them.
   /// </summary>
   internal sealed partial class UninterpretedOption : pb::IMessage<UninterpretedOption> {
     private static readonly pb::MessageParser<UninterpretedOption> _parser = new pb::MessageParser<UninterpretedOption>(() => new UninterpretedOption());
@@ -4887,8 +4887,8 @@
     public const int IdentifierValueFieldNumber = 3;
     private string identifierValue_ = "";
     /// <summary>
-    ///  The value of the uninterpreted option, in whatever type the tokenizer
-    ///  identified it as during parsing. Exactly one of these should be set.
+    /// The value of the uninterpreted option, in whatever type the tokenizer
+    /// identified it as during parsing. Exactly one of these should be set.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public string IdentifierValue {
@@ -5119,11 +5119,11 @@
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static partial class Types {
       /// <summary>
-      ///  The name of the uninterpreted option.  Each string represents a segment in
-      ///  a dot-separated name.  is_extension is true iff a segment represents an
-      ///  extension (denoted with parentheses in options specs in .proto files).
-      ///  E.g.,{ ["foo", false], ["bar.baz", true], ["qux", false] } represents
-      ///  "foo.(bar.baz).qux".
+      /// The name of the uninterpreted option.  Each string represents a segment in
+      /// a dot-separated name.  is_extension is true iff a segment represents an
+      /// extension (denoted with parentheses in options specs in .proto files).
+      /// E.g.,{ ["foo", false], ["bar.baz", true], ["qux", false] } represents
+      /// "foo.(bar.baz).qux".
       /// </summary>
       internal sealed partial class NamePart : pb::IMessage<NamePart> {
         private static readonly pb::MessageParser<NamePart> _parser = new pb::MessageParser<NamePart>(() => new NamePart());
@@ -5276,8 +5276,8 @@
   }
 
   /// <summary>
-  ///  Encapsulates information about the original source file from which a
-  ///  FileDescriptorProto was generated.
+  /// Encapsulates information about the original source file from which a
+  /// FileDescriptorProto was generated.
   /// </summary>
   internal sealed partial class SourceCodeInfo : pb::IMessage<SourceCodeInfo> {
     private static readonly pb::MessageParser<SourceCodeInfo> _parser = new pb::MessageParser<SourceCodeInfo>(() => new SourceCodeInfo());
@@ -5317,49 +5317,49 @@
         = pb::FieldCodec.ForMessage(10, global::Google.Protobuf.Reflection.SourceCodeInfo.Types.Location.Parser);
     private readonly pbc::RepeatedField<global::Google.Protobuf.Reflection.SourceCodeInfo.Types.Location> location_ = new pbc::RepeatedField<global::Google.Protobuf.Reflection.SourceCodeInfo.Types.Location>();
     /// <summary>
-    ///  A Location identifies a piece of source code in a .proto file which
-    ///  corresponds to a particular definition.  This information is intended
-    ///  to be useful to IDEs, code indexers, documentation generators, and similar
-    ///  tools.
+    /// A Location identifies a piece of source code in a .proto file which
+    /// corresponds to a particular definition.  This information is intended
+    /// to be useful to IDEs, code indexers, documentation generators, and similar
+    /// tools.
     ///
-    ///  For example, say we have a file like:
-    ///    message Foo {
-    ///      optional string foo = 1;
-    ///    }
-    ///  Let's look at just the field definition:
-    ///    optional string foo = 1;
-    ///    ^       ^^     ^^  ^  ^^^
-    ///    a       bc     de  f  ghi
-    ///  We have the following locations:
-    ///    span   path               represents
-    ///    [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.
-    ///    [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).
-    ///    [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).
-    ///    [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).
-    ///    [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).
+    /// For example, say we have a file like:
+    ///   message Foo {
+    ///     optional string foo = 1;
+    ///   }
+    /// Let's look at just the field definition:
+    ///   optional string foo = 1;
+    ///   ^       ^^     ^^  ^  ^^^
+    ///   a       bc     de  f  ghi
+    /// We have the following locations:
+    ///   span   path               represents
+    ///   [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.
+    ///   [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).
+    ///   [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).
+    ///   [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).
+    ///   [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).
     ///
-    ///  Notes:
-    ///  - A location may refer to a repeated field itself (i.e. not to any
-    ///    particular index within it).  This is used whenever a set of elements are
-    ///    logically enclosed in a single code segment.  For example, an entire
-    ///    extend block (possibly containing multiple extension definitions) will
-    ///    have an outer location whose path refers to the "extensions" repeated
-    ///    field without an index.
-    ///  - Multiple locations may have the same path.  This happens when a single
-    ///    logical declaration is spread out across multiple places.  The most
-    ///    obvious example is the "extend" block again -- there may be multiple
-    ///    extend blocks in the same scope, each of which will have the same path.
-    ///  - A location's span is not always a subset of its parent's span.  For
-    ///    example, the "extendee" of an extension declaration appears at the
-    ///    beginning of the "extend" block and is shared by all extensions within
-    ///    the block.
-    ///  - Just because a location's span is a subset of some other location's span
-    ///    does not mean that it is a descendent.  For example, a "group" defines
-    ///    both a type and a field in a single declaration.  Thus, the locations
-    ///    corresponding to the type and field and their components will overlap.
-    ///  - Code which tries to interpret locations should probably be designed to
-    ///    ignore those that it doesn't understand, as more types of locations could
-    ///    be recorded in the future.
+    /// Notes:
+    /// - A location may refer to a repeated field itself (i.e. not to any
+    ///   particular index within it).  This is used whenever a set of elements are
+    ///   logically enclosed in a single code segment.  For example, an entire
+    ///   extend block (possibly containing multiple extension definitions) will
+    ///   have an outer location whose path refers to the "extensions" repeated
+    ///   field without an index.
+    /// - Multiple locations may have the same path.  This happens when a single
+    ///   logical declaration is spread out across multiple places.  The most
+    ///   obvious example is the "extend" block again -- there may be multiple
+    ///   extend blocks in the same scope, each of which will have the same path.
+    /// - A location's span is not always a subset of its parent's span.  For
+    ///   example, the "extendee" of an extension declaration appears at the
+    ///   beginning of the "extend" block and is shared by all extensions within
+    ///   the block.
+    /// - Just because a location's span is a subset of some other location's span
+    ///   does not mean that it is a descendent.  For example, a "group" defines
+    ///   both a type and a field in a single declaration.  Thus, the locations
+    ///   corresponding to the type and field and their components will overlap.
+    /// - Code which tries to interpret locations should probably be designed to
+    ///   ignore those that it doesn't understand, as more types of locations could
+    ///   be recorded in the future.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public pbc::RepeatedField<global::Google.Protobuf.Reflection.SourceCodeInfo.Types.Location> Location {
@@ -5477,29 +5477,29 @@
             = pb::FieldCodec.ForInt32(10);
         private readonly pbc::RepeatedField<int> path_ = new pbc::RepeatedField<int>();
         /// <summary>
-        ///  Identifies which part of the FileDescriptorProto was defined at this
-        ///  location.
+        /// Identifies which part of the FileDescriptorProto was defined at this
+        /// location.
         ///
-        ///  Each element is a field number or an index.  They form a path from
-        ///  the root FileDescriptorProto to the place where the definition.  For
-        ///  example, this path:
-        ///    [ 4, 3, 2, 7, 1 ]
-        ///  refers to:
-        ///    file.message_type(3)  // 4, 3
-        ///        .field(7)         // 2, 7
-        ///        .name()           // 1
-        ///  This is because FileDescriptorProto.message_type has field number 4:
-        ///    repeated DescriptorProto message_type = 4;
-        ///  and DescriptorProto.field has field number 2:
-        ///    repeated FieldDescriptorProto field = 2;
-        ///  and FieldDescriptorProto.name has field number 1:
-        ///    optional string name = 1;
+        /// Each element is a field number or an index.  They form a path from
+        /// the root FileDescriptorProto to the place where the definition.  For
+        /// example, this path:
+        ///   [ 4, 3, 2, 7, 1 ]
+        /// refers to:
+        ///   file.message_type(3)  // 4, 3
+        ///       .field(7)         // 2, 7
+        ///       .name()           // 1
+        /// This is because FileDescriptorProto.message_type has field number 4:
+        ///   repeated DescriptorProto message_type = 4;
+        /// and DescriptorProto.field has field number 2:
+        ///   repeated FieldDescriptorProto field = 2;
+        /// and FieldDescriptorProto.name has field number 1:
+        ///   optional string name = 1;
         ///
-        ///  Thus, the above path gives the location of a field name.  If we removed
-        ///  the last element:
-        ///    [ 4, 3, 2, 7 ]
-        ///  this path refers to the whole field declaration (from the beginning
-        ///  of the label to the terminating semicolon).
+        /// Thus, the above path gives the location of a field name.  If we removed
+        /// the last element:
+        ///   [ 4, 3, 2, 7 ]
+        /// this path refers to the whole field declaration (from the beginning
+        /// of the label to the terminating semicolon).
         /// </summary>
         [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
         public pbc::RepeatedField<int> Path {
@@ -5512,11 +5512,11 @@
             = pb::FieldCodec.ForInt32(18);
         private readonly pbc::RepeatedField<int> span_ = new pbc::RepeatedField<int>();
         /// <summary>
-        ///  Always has exactly three or four elements: start line, start column,
-        ///  end line (optional, otherwise assumed same as start line), end column.
-        ///  These are packed into a single field for efficiency.  Note that line
-        ///  and column numbers are zero-based -- typically you will want to add
-        ///  1 to each before displaying to a user.
+        /// Always has exactly three or four elements: start line, start column,
+        /// end line (optional, otherwise assumed same as start line), end column.
+        /// These are packed into a single field for efficiency.  Note that line
+        /// and column numbers are zero-based -- typically you will want to add
+        /// 1 to each before displaying to a user.
         /// </summary>
         [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
         public pbc::RepeatedField<int> Span {
@@ -5527,53 +5527,53 @@
         public const int LeadingCommentsFieldNumber = 3;
         private string leadingComments_ = "";
         /// <summary>
-        ///  If this SourceCodeInfo represents a complete declaration, these are any
-        ///  comments appearing before and after the declaration which appear to be
-        ///  attached to the declaration.
+        /// If this SourceCodeInfo represents a complete declaration, these are any
+        /// comments appearing before and after the declaration which appear to be
+        /// attached to the declaration.
         ///
-        ///  A series of line comments appearing on consecutive lines, with no other
-        ///  tokens appearing on those lines, will be treated as a single comment.
+        /// A series of line comments appearing on consecutive lines, with no other
+        /// tokens appearing on those lines, will be treated as a single comment.
         ///
-        ///  leading_detached_comments will keep paragraphs of comments that appear
-        ///  before (but not connected to) the current element. Each paragraph,
-        ///  separated by empty lines, will be one comment element in the repeated
-        ///  field.
+        /// leading_detached_comments will keep paragraphs of comments that appear
+        /// before (but not connected to) the current element. Each paragraph,
+        /// separated by empty lines, will be one comment element in the repeated
+        /// field.
         ///
-        ///  Only the comment content is provided; comment markers (e.g. //) are
-        ///  stripped out.  For block comments, leading whitespace and an asterisk
-        ///  will be stripped from the beginning of each line other than the first.
-        ///  Newlines are included in the output.
+        /// Only the comment content is provided; comment markers (e.g. //) are
+        /// stripped out.  For block comments, leading whitespace and an asterisk
+        /// will be stripped from the beginning of each line other than the first.
+        /// Newlines are included in the output.
         ///
-        ///  Examples:
+        /// Examples:
         ///
-        ///    optional int32 foo = 1;  // Comment attached to foo.
-        ///    // Comment attached to bar.
-        ///    optional int32 bar = 2;
+        ///   optional int32 foo = 1;  // Comment attached to foo.
+        ///   // Comment attached to bar.
+        ///   optional int32 bar = 2;
         ///
-        ///    optional string baz = 3;
-        ///    // Comment attached to baz.
-        ///    // Another line attached to baz.
+        ///   optional string baz = 3;
+        ///   // Comment attached to baz.
+        ///   // Another line attached to baz.
         ///
-        ///    // Comment attached to qux.
-        ///    //
-        ///    // Another line attached to qux.
-        ///    optional double qux = 4;
+        ///   // Comment attached to qux.
+        ///   //
+        ///   // Another line attached to qux.
+        ///   optional double qux = 4;
         ///
-        ///    // Detached comment for corge. This is not leading or trailing comments
-        ///    // to qux or corge because there are blank lines separating it from
-        ///    // both.
+        ///   // Detached comment for corge. This is not leading or trailing comments
+        ///   // to qux or corge because there are blank lines separating it from
+        ///   // both.
         ///
-        ///    // Detached comment for corge paragraph 2.
+        ///   // Detached comment for corge paragraph 2.
         ///
-        ///    optional string corge = 5;
-        ///    /* Block comment attached
-        ///     * to corge.  Leading asterisks
-        ///     * will be removed. */
-        ///    /* Block comment attached to
-        ///     * grault. */
-        ///    optional int32 grault = 6;
+        ///   optional string corge = 5;
+        ///   /* Block comment attached
+        ///    * to corge.  Leading asterisks
+        ///    * will be removed. */
+        ///   /* Block comment attached to
+        ///    * grault. */
+        ///   optional int32 grault = 6;
         ///
-        ///    // ignored detached comments.
+        ///   // ignored detached comments.
         /// </summary>
         [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
         public string LeadingComments {
@@ -5729,9 +5729,9 @@
   }
 
   /// <summary>
-  ///  Describes the relationship between generated code and its original source
-  ///  file. A GeneratedCodeInfo message is associated with only one generated
-  ///  source file, but may contain references to different source .proto files.
+  /// Describes the relationship between generated code and its original source
+  /// file. A GeneratedCodeInfo message is associated with only one generated
+  /// source file, but may contain references to different source .proto files.
   /// </summary>
   internal sealed partial class GeneratedCodeInfo : pb::IMessage<GeneratedCodeInfo> {
     private static readonly pb::MessageParser<GeneratedCodeInfo> _parser = new pb::MessageParser<GeneratedCodeInfo>(() => new GeneratedCodeInfo());
@@ -5771,8 +5771,8 @@
         = pb::FieldCodec.ForMessage(10, global::Google.Protobuf.Reflection.GeneratedCodeInfo.Types.Annotation.Parser);
     private readonly pbc::RepeatedField<global::Google.Protobuf.Reflection.GeneratedCodeInfo.Types.Annotation> annotation_ = new pbc::RepeatedField<global::Google.Protobuf.Reflection.GeneratedCodeInfo.Types.Annotation>();
     /// <summary>
-    ///  An Annotation connects some span of text in generated code to an element
-    ///  of its generating .proto file.
+    /// An Annotation connects some span of text in generated code to an element
+    /// of its generating .proto file.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public pbc::RepeatedField<global::Google.Protobuf.Reflection.GeneratedCodeInfo.Types.Annotation> Annotation {
@@ -5889,8 +5889,8 @@
             = pb::FieldCodec.ForInt32(10);
         private readonly pbc::RepeatedField<int> path_ = new pbc::RepeatedField<int>();
         /// <summary>
-        ///  Identifies the element in the original source .proto file. This field
-        ///  is formatted the same as SourceCodeInfo.Location.path.
+        /// Identifies the element in the original source .proto file. This field
+        /// is formatted the same as SourceCodeInfo.Location.path.
         /// </summary>
         [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
         public pbc::RepeatedField<int> Path {
@@ -5901,7 +5901,7 @@
         public const int SourceFileFieldNumber = 2;
         private string sourceFile_ = "";
         /// <summary>
-        ///  Identifies the filesystem path to the original source .proto.
+        /// Identifies the filesystem path to the original source .proto.
         /// </summary>
         [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
         public string SourceFile {
@@ -5915,8 +5915,8 @@
         public const int BeginFieldNumber = 3;
         private int begin_;
         /// <summary>
-        ///  Identifies the starting offset in bytes in the generated code
-        ///  that relates to the identified object.
+        /// Identifies the starting offset in bytes in the generated code
+        /// that relates to the identified object.
         /// </summary>
         [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
         public int Begin {
@@ -5930,9 +5930,9 @@
         public const int EndFieldNumber = 4;
         private int end_;
         /// <summary>
-        ///  Identifies the ending offset in bytes in the generated code that
-        ///  relates to the identified offset. The end offset should be one past
-        ///  the last relevant byte (so the length of the text = end - begin).
+        /// Identifies the ending offset in bytes in the generated code that
+        /// relates to the identified offset. The end offset should be one past
+        /// the last relevant byte (so the length of the text = end - begin).
         /// </summary>
         [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
         public int End {
diff --git a/csharp/src/Google.Protobuf/WellKnownTypes/Any.cs b/csharp/src/Google.Protobuf/WellKnownTypes/Any.cs
index e36fd5e..b90c9a2 100644
--- a/csharp/src/Google.Protobuf/WellKnownTypes/Any.cs
+++ b/csharp/src/Google.Protobuf/WellKnownTypes/Any.cs
@@ -38,74 +38,74 @@
   }
   #region Messages
   /// <summary>
-  ///  `Any` contains an arbitrary serialized protocol buffer message along with a
-  ///  URL that describes the type of the serialized message.
+  /// `Any` contains an arbitrary serialized protocol buffer message along with a
+  /// URL that describes the type of the serialized message.
   ///
-  ///  Protobuf library provides support to pack/unpack Any values in the form
-  ///  of utility functions or additional generated methods of the Any type.
+  /// Protobuf library provides support to pack/unpack Any values in the form
+  /// of utility functions or additional generated methods of the Any type.
   ///
-  ///  Example 1: Pack and unpack a message in C++.
+  /// Example 1: Pack and unpack a message in C++.
   ///
-  ///      Foo foo = ...;
-  ///      Any any;
-  ///      any.PackFrom(foo);
-  ///      ...
-  ///      if (any.UnpackTo(&amp;foo)) {
-  ///        ...
-  ///      }
+  ///     Foo foo = ...;
+  ///     Any any;
+  ///     any.PackFrom(foo);
+  ///     ...
+  ///     if (any.UnpackTo(&amp;foo)) {
+  ///       ...
+  ///     }
   ///
-  ///  Example 2: Pack and unpack a message in Java.
+  /// Example 2: Pack and unpack a message in Java.
   ///
-  ///      Foo foo = ...;
-  ///      Any any = Any.pack(foo);
-  ///      ...
-  ///      if (any.is(Foo.class)) {
-  ///        foo = any.unpack(Foo.class);
-  ///      }
+  ///     Foo foo = ...;
+  ///     Any any = Any.pack(foo);
+  ///     ...
+  ///     if (any.is(Foo.class)) {
+  ///       foo = any.unpack(Foo.class);
+  ///     }
   ///
-  ///   Example 3: Pack and unpack a message in Python.
+  ///  Example 3: Pack and unpack a message in Python.
   ///
-  ///      foo = Foo(...)
-  ///      any = Any()
-  ///      any.Pack(foo)
-  ///      ...
-  ///      if any.Is(Foo.DESCRIPTOR):
-  ///        any.Unpack(foo)
-  ///        ...
+  ///     foo = Foo(...)
+  ///     any = Any()
+  ///     any.Pack(foo)
+  ///     ...
+  ///     if any.Is(Foo.DESCRIPTOR):
+  ///       any.Unpack(foo)
+  ///       ...
   ///
-  ///  The pack methods provided by protobuf library will by default use
-  ///  'type.googleapis.com/full.type.name' as the type URL and the unpack
-  ///  methods only use the fully qualified type name after the last '/'
-  ///  in the type URL, for example "foo.bar.com/x/y.z" will yield type
-  ///  name "y.z".
+  /// The pack methods provided by protobuf library will by default use
+  /// 'type.googleapis.com/full.type.name' as the type URL and the unpack
+  /// methods only use the fully qualified type name after the last '/'
+  /// in the type URL, for example "foo.bar.com/x/y.z" will yield type
+  /// name "y.z".
   ///
-  ///  JSON
-  ///  ====
-  ///  The JSON representation of an `Any` value uses the regular
-  ///  representation of the deserialized, embedded message, with an
-  ///  additional field `@type` which contains the type URL. Example:
+  /// JSON
+  /// ====
+  /// The JSON representation of an `Any` value uses the regular
+  /// representation of the deserialized, embedded message, with an
+  /// additional field `@type` which contains the type URL. Example:
   ///
-  ///      package google.profile;
-  ///      message Person {
-  ///        string first_name = 1;
-  ///        string last_name = 2;
-  ///      }
+  ///     package google.profile;
+  ///     message Person {
+  ///       string first_name = 1;
+  ///       string last_name = 2;
+  ///     }
   ///
-  ///      {
-  ///        "@type": "type.googleapis.com/google.profile.Person",
-  ///        "firstName": &lt;string>,
-  ///        "lastName": &lt;string>
-  ///      }
+  ///     {
+  ///       "@type": "type.googleapis.com/google.profile.Person",
+  ///       "firstName": &lt;string>,
+  ///       "lastName": &lt;string>
+  ///     }
   ///
-  ///  If the embedded message type is well-known and has a custom JSON
-  ///  representation, that representation will be embedded adding a field
-  ///  `value` which holds the custom JSON in addition to the `@type`
-  ///  field. Example (for message [google.protobuf.Duration][]):
+  /// If the embedded message type is well-known and has a custom JSON
+  /// representation, that representation will be embedded adding a field
+  /// `value` which holds the custom JSON in addition to the `@type`
+  /// field. Example (for message [google.protobuf.Duration][]):
   ///
-  ///      {
-  ///        "@type": "type.googleapis.com/google.protobuf.Duration",
-  ///        "value": "1.212s"
-  ///      }
+  ///     {
+  ///       "@type": "type.googleapis.com/google.protobuf.Duration",
+  ///       "value": "1.212s"
+  ///     }
   /// </summary>
   public sealed partial class Any : pb::IMessage<Any> {
     private static readonly pb::MessageParser<Any> _parser = new pb::MessageParser<Any>(() => new Any());
@@ -144,27 +144,27 @@
     public const int TypeUrlFieldNumber = 1;
     private string typeUrl_ = "";
     /// <summary>
-    ///  A URL/resource name whose content describes the type of the
-    ///  serialized protocol buffer message.
+    /// A URL/resource name whose content describes the type of the
+    /// serialized protocol buffer message.
     ///
-    ///  For URLs which use the scheme `http`, `https`, or no scheme, the
-    ///  following restrictions and interpretations apply:
+    /// For URLs which use the scheme `http`, `https`, or no scheme, the
+    /// following restrictions and interpretations apply:
     ///
-    ///  * If no scheme is provided, `https` is assumed.
-    ///  * The last segment of the URL's path must represent the fully
-    ///    qualified name of the type (as in `path/google.protobuf.Duration`).
-    ///    The name should be in a canonical form (e.g., leading "." is
-    ///    not accepted).
-    ///  * An HTTP GET on the URL must yield a [google.protobuf.Type][]
-    ///    value in binary format, or produce an error.
-    ///  * Applications are allowed to cache lookup results based on the
-    ///    URL, or have them precompiled into a binary to avoid any
-    ///    lookup. Therefore, binary compatibility needs to be preserved
-    ///    on changes to types. (Use versioned type names to manage
-    ///    breaking changes.)
+    /// * If no scheme is provided, `https` is assumed.
+    /// * The last segment of the URL's path must represent the fully
+    ///   qualified name of the type (as in `path/google.protobuf.Duration`).
+    ///   The name should be in a canonical form (e.g., leading "." is
+    ///   not accepted).
+    /// * An HTTP GET on the URL must yield a [google.protobuf.Type][]
+    ///   value in binary format, or produce an error.
+    /// * Applications are allowed to cache lookup results based on the
+    ///   URL, or have them precompiled into a binary to avoid any
+    ///   lookup. Therefore, binary compatibility needs to be preserved
+    ///   on changes to types. (Use versioned type names to manage
+    ///   breaking changes.)
     ///
-    ///  Schemes other than `http`, `https` (or the empty scheme) might be
-    ///  used with implementation specific semantics.
+    /// Schemes other than `http`, `https` (or the empty scheme) might be
+    /// used with implementation specific semantics.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public string TypeUrl {
@@ -178,7 +178,7 @@
     public const int ValueFieldNumber = 2;
     private pb::ByteString value_ = pb::ByteString.Empty;
     /// <summary>
-    ///  Must be a valid serialized protocol buffer of the above specified type.
+    /// Must be a valid serialized protocol buffer of the above specified type.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public pb::ByteString Value {
diff --git a/csharp/src/Google.Protobuf/WellKnownTypes/Api.cs b/csharp/src/Google.Protobuf/WellKnownTypes/Api.cs
index f72571d..aeeb8e7 100644
--- a/csharp/src/Google.Protobuf/WellKnownTypes/Api.cs
+++ b/csharp/src/Google.Protobuf/WellKnownTypes/Api.cs
@@ -52,7 +52,7 @@
   }
   #region Messages
   /// <summary>
-  ///  Api is a light-weight descriptor for a protocol buffer service.
+  /// Api is a light-weight descriptor for a protocol buffer service.
   /// </summary>
   public sealed partial class Api : pb::IMessage<Api> {
     private static readonly pb::MessageParser<Api> _parser = new pb::MessageParser<Api>(() => new Api());
@@ -96,8 +96,8 @@
     public const int NameFieldNumber = 1;
     private string name_ = "";
     /// <summary>
-    ///  The fully qualified name of this api, including package name
-    ///  followed by the api's simple name.
+    /// The fully qualified name of this api, including package name
+    /// followed by the api's simple name.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public string Name {
@@ -113,7 +113,7 @@
         = pb::FieldCodec.ForMessage(18, global::Google.Protobuf.WellKnownTypes.Method.Parser);
     private readonly pbc::RepeatedField<global::Google.Protobuf.WellKnownTypes.Method> methods_ = new pbc::RepeatedField<global::Google.Protobuf.WellKnownTypes.Method>();
     /// <summary>
-    ///  The methods of this api, in unspecified order.
+    /// The methods of this api, in unspecified order.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public pbc::RepeatedField<global::Google.Protobuf.WellKnownTypes.Method> Methods {
@@ -126,7 +126,7 @@
         = pb::FieldCodec.ForMessage(26, global::Google.Protobuf.WellKnownTypes.Option.Parser);
     private readonly pbc::RepeatedField<global::Google.Protobuf.WellKnownTypes.Option> options_ = new pbc::RepeatedField<global::Google.Protobuf.WellKnownTypes.Option>();
     /// <summary>
-    ///  Any metadata attached to the API.
+    /// Any metadata attached to the API.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public pbc::RepeatedField<global::Google.Protobuf.WellKnownTypes.Option> Options {
@@ -137,26 +137,26 @@
     public const int VersionFieldNumber = 4;
     private string version_ = "";
     /// <summary>
-    ///  A version string for this api. If specified, must have the form
-    ///  `major-version.minor-version`, as in `1.10`. If the minor version
-    ///  is omitted, it defaults to zero. If the entire version field is
-    ///  empty, the major version is derived from the package name, as
-    ///  outlined below. If the field is not empty, the version in the
-    ///  package name will be verified to be consistent with what is
-    ///  provided here.
+    /// A version string for this api. If specified, must have the form
+    /// `major-version.minor-version`, as in `1.10`. If the minor version
+    /// is omitted, it defaults to zero. If the entire version field is
+    /// empty, the major version is derived from the package name, as
+    /// outlined below. If the field is not empty, the version in the
+    /// package name will be verified to be consistent with what is
+    /// provided here.
     ///
-    ///  The versioning schema uses [semantic
-    ///  versioning](http://semver.org) where the major version number
-    ///  indicates a breaking change and the minor version an additive,
-    ///  non-breaking change. Both version numbers are signals to users
-    ///  what to expect from different versions, and should be carefully
-    ///  chosen based on the product plan.
+    /// The versioning schema uses [semantic
+    /// versioning](http://semver.org) where the major version number
+    /// indicates a breaking change and the minor version an additive,
+    /// non-breaking change. Both version numbers are signals to users
+    /// what to expect from different versions, and should be carefully
+    /// chosen based on the product plan.
     ///
-    ///  The major version is also reflected in the package name of the
-    ///  API, which must end in `v&lt;major-version>`, as in
-    ///  `google.feature.v1`. For major versions 0 and 1, the suffix can
-    ///  be omitted. Zero major versions must only be used for
-    ///  experimental, none-GA apis.
+    /// The major version is also reflected in the package name of the
+    /// API, which must end in `v&lt;major-version>`, as in
+    /// `google.feature.v1`. For major versions 0 and 1, the suffix can
+    /// be omitted. Zero major versions must only be used for
+    /// experimental, none-GA apis.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public string Version {
@@ -170,8 +170,8 @@
     public const int SourceContextFieldNumber = 5;
     private global::Google.Protobuf.WellKnownTypes.SourceContext sourceContext_;
     /// <summary>
-    ///  Source context for the protocol buffer service represented by this
-    ///  message.
+    /// Source context for the protocol buffer service represented by this
+    /// message.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public global::Google.Protobuf.WellKnownTypes.SourceContext SourceContext {
@@ -187,7 +187,7 @@
         = pb::FieldCodec.ForMessage(50, global::Google.Protobuf.WellKnownTypes.Mixin.Parser);
     private readonly pbc::RepeatedField<global::Google.Protobuf.WellKnownTypes.Mixin> mixins_ = new pbc::RepeatedField<global::Google.Protobuf.WellKnownTypes.Mixin>();
     /// <summary>
-    ///  Included APIs. See [Mixin][].
+    /// Included APIs. See [Mixin][].
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public pbc::RepeatedField<global::Google.Protobuf.WellKnownTypes.Mixin> Mixins {
@@ -198,7 +198,7 @@
     public const int SyntaxFieldNumber = 7;
     private global::Google.Protobuf.WellKnownTypes.Syntax syntax_ = 0;
     /// <summary>
-    ///  The source syntax of the service.
+    /// The source syntax of the service.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public global::Google.Protobuf.WellKnownTypes.Syntax Syntax {
@@ -364,7 +364,7 @@
   }
 
   /// <summary>
-  ///  Method represents a method of an api.
+  /// Method represents a method of an api.
   /// </summary>
   public sealed partial class Method : pb::IMessage<Method> {
     private static readonly pb::MessageParser<Method> _parser = new pb::MessageParser<Method>(() => new Method());
@@ -408,7 +408,7 @@
     public const int NameFieldNumber = 1;
     private string name_ = "";
     /// <summary>
-    ///  The simple name of this method.
+    /// The simple name of this method.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public string Name {
@@ -422,7 +422,7 @@
     public const int RequestTypeUrlFieldNumber = 2;
     private string requestTypeUrl_ = "";
     /// <summary>
-    ///  A URL of the input message type.
+    /// A URL of the input message type.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public string RequestTypeUrl {
@@ -436,7 +436,7 @@
     public const int RequestStreamingFieldNumber = 3;
     private bool requestStreaming_;
     /// <summary>
-    ///  If true, the request is streamed.
+    /// If true, the request is streamed.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public bool RequestStreaming {
@@ -450,7 +450,7 @@
     public const int ResponseTypeUrlFieldNumber = 4;
     private string responseTypeUrl_ = "";
     /// <summary>
-    ///  The URL of the output message type.
+    /// The URL of the output message type.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public string ResponseTypeUrl {
@@ -464,7 +464,7 @@
     public const int ResponseStreamingFieldNumber = 5;
     private bool responseStreaming_;
     /// <summary>
-    ///  If true, the response is streamed.
+    /// If true, the response is streamed.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public bool ResponseStreaming {
@@ -480,7 +480,7 @@
         = pb::FieldCodec.ForMessage(50, global::Google.Protobuf.WellKnownTypes.Option.Parser);
     private readonly pbc::RepeatedField<global::Google.Protobuf.WellKnownTypes.Option> options_ = new pbc::RepeatedField<global::Google.Protobuf.WellKnownTypes.Option>();
     /// <summary>
-    ///  Any metadata attached to the method.
+    /// Any metadata attached to the method.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public pbc::RepeatedField<global::Google.Protobuf.WellKnownTypes.Option> Options {
@@ -491,7 +491,7 @@
     public const int SyntaxFieldNumber = 7;
     private global::Google.Protobuf.WellKnownTypes.Syntax syntax_ = 0;
     /// <summary>
-    ///  The source syntax of this method.
+    /// The source syntax of this method.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public global::Google.Protobuf.WellKnownTypes.Syntax Syntax {
@@ -665,83 +665,83 @@
   }
 
   /// <summary>
-  ///  Declares an API to be included in this API. The including API must
-  ///  redeclare all the methods from the included API, but documentation
-  ///  and options are inherited as follows:
+  /// Declares an API to be included in this API. The including API must
+  /// redeclare all the methods from the included API, but documentation
+  /// and options are inherited as follows:
   ///
-  ///  - If after comment and whitespace stripping, the documentation
-  ///    string of the redeclared method is empty, it will be inherited
-  ///    from the original method.
+  /// - If after comment and whitespace stripping, the documentation
+  ///   string of the redeclared method is empty, it will be inherited
+  ///   from the original method.
   ///
-  ///  - Each annotation belonging to the service config (http,
-  ///    visibility) which is not set in the redeclared method will be
-  ///    inherited.
+  /// - Each annotation belonging to the service config (http,
+  ///   visibility) which is not set in the redeclared method will be
+  ///   inherited.
   ///
-  ///  - If an http annotation is inherited, the path pattern will be
-  ///    modified as follows. Any version prefix will be replaced by the
-  ///    version of the including API plus the [root][] path if specified.
+  /// - If an http annotation is inherited, the path pattern will be
+  ///   modified as follows. Any version prefix will be replaced by the
+  ///   version of the including API plus the [root][] path if specified.
   ///
-  ///  Example of a simple mixin:
+  /// Example of a simple mixin:
   ///
-  ///      package google.acl.v1;
-  ///      service AccessControl {
-  ///        // Get the underlying ACL object.
-  ///        rpc GetAcl(GetAclRequest) returns (Acl) {
-  ///          option (google.api.http).get = "/v1/{resource=**}:getAcl";
-  ///        }
-  ///      }
+  ///     package google.acl.v1;
+  ///     service AccessControl {
+  ///       // Get the underlying ACL object.
+  ///       rpc GetAcl(GetAclRequest) returns (Acl) {
+  ///         option (google.api.http).get = "/v1/{resource=**}:getAcl";
+  ///       }
+  ///     }
   ///
-  ///      package google.storage.v2;
-  ///      service Storage {
-  ///        rpc GetAcl(GetAclRequest) returns (Acl);
+  ///     package google.storage.v2;
+  ///     service Storage {
+  ///       rpc GetAcl(GetAclRequest) returns (Acl);
   ///
-  ///        // Get a data record.
-  ///        rpc GetData(GetDataRequest) returns (Data) {
-  ///          option (google.api.http).get = "/v2/{resource=**}";
-  ///        }
-  ///      }
+  ///       // Get a data record.
+  ///       rpc GetData(GetDataRequest) returns (Data) {
+  ///         option (google.api.http).get = "/v2/{resource=**}";
+  ///       }
+  ///     }
   ///
-  ///  Example of a mixin configuration:
+  /// Example of a mixin configuration:
   ///
-  ///      apis:
-  ///      - name: google.storage.v2.Storage
-  ///        mixins:
-  ///        - name: google.acl.v1.AccessControl
+  ///     apis:
+  ///     - name: google.storage.v2.Storage
+  ///       mixins:
+  ///       - name: google.acl.v1.AccessControl
   ///
-  ///  The mixin construct implies that all methods in `AccessControl` are
-  ///  also declared with same name and request/response types in
-  ///  `Storage`. A documentation generator or annotation processor will
-  ///  see the effective `Storage.GetAcl` method after inherting
-  ///  documentation and annotations as follows:
+  /// The mixin construct implies that all methods in `AccessControl` are
+  /// also declared with same name and request/response types in
+  /// `Storage`. A documentation generator or annotation processor will
+  /// see the effective `Storage.GetAcl` method after inherting
+  /// documentation and annotations as follows:
   ///
-  ///      service Storage {
-  ///        // Get the underlying ACL object.
-  ///        rpc GetAcl(GetAclRequest) returns (Acl) {
-  ///          option (google.api.http).get = "/v2/{resource=**}:getAcl";
-  ///        }
-  ///        ...
-  ///      }
+  ///     service Storage {
+  ///       // Get the underlying ACL object.
+  ///       rpc GetAcl(GetAclRequest) returns (Acl) {
+  ///         option (google.api.http).get = "/v2/{resource=**}:getAcl";
+  ///       }
+  ///       ...
+  ///     }
   ///
-  ///  Note how the version in the path pattern changed from `v1` to `v2`.
+  /// Note how the version in the path pattern changed from `v1` to `v2`.
   ///
-  ///  If the `root` field in the mixin is specified, it should be a
-  ///  relative path under which inherited HTTP paths are placed. Example:
+  /// If the `root` field in the mixin is specified, it should be a
+  /// relative path under which inherited HTTP paths are placed. Example:
   ///
-  ///      apis:
-  ///      - name: google.storage.v2.Storage
-  ///        mixins:
-  ///        - name: google.acl.v1.AccessControl
-  ///          root: acls
+  ///     apis:
+  ///     - name: google.storage.v2.Storage
+  ///       mixins:
+  ///       - name: google.acl.v1.AccessControl
+  ///         root: acls
   ///
-  ///  This implies the following inherited HTTP annotation:
+  /// This implies the following inherited HTTP annotation:
   ///
-  ///      service Storage {
-  ///        // Get the underlying ACL object.
-  ///        rpc GetAcl(GetAclRequest) returns (Acl) {
-  ///          option (google.api.http).get = "/v2/acls/{resource=**}:getAcl";
-  ///        }
-  ///        ...
-  ///      }
+  ///     service Storage {
+  ///       // Get the underlying ACL object.
+  ///       rpc GetAcl(GetAclRequest) returns (Acl) {
+  ///         option (google.api.http).get = "/v2/acls/{resource=**}:getAcl";
+  ///       }
+  ///       ...
+  ///     }
   /// </summary>
   public sealed partial class Mixin : pb::IMessage<Mixin> {
     private static readonly pb::MessageParser<Mixin> _parser = new pb::MessageParser<Mixin>(() => new Mixin());
@@ -780,7 +780,7 @@
     public const int NameFieldNumber = 1;
     private string name_ = "";
     /// <summary>
-    ///  The fully qualified name of the API which is included.
+    /// The fully qualified name of the API which is included.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public string Name {
@@ -794,8 +794,8 @@
     public const int RootFieldNumber = 2;
     private string root_ = "";
     /// <summary>
-    ///  If non-empty specifies a path under which inherited HTTP paths
-    ///  are rooted.
+    /// If non-empty specifies a path under which inherited HTTP paths
+    /// are rooted.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public string Root {
diff --git a/csharp/src/Google.Protobuf/WellKnownTypes/Duration.cs b/csharp/src/Google.Protobuf/WellKnownTypes/Duration.cs
index 66ac715..03b19c7 100644
--- a/csharp/src/Google.Protobuf/WellKnownTypes/Duration.cs
+++ b/csharp/src/Google.Protobuf/WellKnownTypes/Duration.cs
@@ -39,52 +39,52 @@
   }
   #region Messages
   /// <summary>
-  ///  A Duration represents a signed, fixed-length span of time represented
-  ///  as a count of seconds and fractions of seconds at nanosecond
-  ///  resolution. It is independent of any calendar and concepts like "day"
-  ///  or "month". It is related to Timestamp in that the difference between
-  ///  two Timestamp values is a Duration and it can be added or subtracted
-  ///  from a Timestamp. Range is approximately +-10,000 years.
+  /// A Duration represents a signed, fixed-length span of time represented
+  /// as a count of seconds and fractions of seconds at nanosecond
+  /// resolution. It is independent of any calendar and concepts like "day"
+  /// or "month". It is related to Timestamp in that the difference between
+  /// two Timestamp values is a Duration and it can be added or subtracted
+  /// from a Timestamp. Range is approximately +-10,000 years.
   ///
-  ///  Example 1: Compute Duration from two Timestamps in pseudo code.
+  /// Example 1: Compute Duration from two Timestamps in pseudo code.
   ///
-  ///      Timestamp start = ...;
-  ///      Timestamp end = ...;
-  ///      Duration duration = ...;
+  ///     Timestamp start = ...;
+  ///     Timestamp end = ...;
+  ///     Duration duration = ...;
   ///
-  ///      duration.seconds = end.seconds - start.seconds;
-  ///      duration.nanos = end.nanos - start.nanos;
+  ///     duration.seconds = end.seconds - start.seconds;
+  ///     duration.nanos = end.nanos - start.nanos;
   ///
-  ///      if (duration.seconds &lt; 0 &amp;&amp; duration.nanos > 0) {
-  ///        duration.seconds += 1;
-  ///        duration.nanos -= 1000000000;
-  ///      } else if (durations.seconds > 0 &amp;&amp; duration.nanos &lt; 0) {
-  ///        duration.seconds -= 1;
-  ///        duration.nanos += 1000000000;
-  ///      }
+  ///     if (duration.seconds &lt; 0 &amp;&amp; duration.nanos > 0) {
+  ///       duration.seconds += 1;
+  ///       duration.nanos -= 1000000000;
+  ///     } else if (durations.seconds > 0 &amp;&amp; duration.nanos &lt; 0) {
+  ///       duration.seconds -= 1;
+  ///       duration.nanos += 1000000000;
+  ///     }
   ///
-  ///  Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.
+  /// Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.
   ///
-  ///      Timestamp start = ...;
-  ///      Duration duration = ...;
-  ///      Timestamp end = ...;
+  ///     Timestamp start = ...;
+  ///     Duration duration = ...;
+  ///     Timestamp end = ...;
   ///
-  ///      end.seconds = start.seconds + duration.seconds;
-  ///      end.nanos = start.nanos + duration.nanos;
+  ///     end.seconds = start.seconds + duration.seconds;
+  ///     end.nanos = start.nanos + duration.nanos;
   ///
-  ///      if (end.nanos &lt; 0) {
-  ///        end.seconds -= 1;
-  ///        end.nanos += 1000000000;
-  ///      } else if (end.nanos >= 1000000000) {
-  ///        end.seconds += 1;
-  ///        end.nanos -= 1000000000;
-  ///      }
+  ///     if (end.nanos &lt; 0) {
+  ///       end.seconds -= 1;
+  ///       end.nanos += 1000000000;
+  ///     } else if (end.nanos >= 1000000000) {
+  ///       end.seconds += 1;
+  ///       end.nanos -= 1000000000;
+  ///     }
   ///
-  ///  Example 3: Compute Duration from datetime.timedelta in Python.
+  /// Example 3: Compute Duration from datetime.timedelta in Python.
   ///
-  ///      td = datetime.timedelta(days=3, minutes=10)
-  ///      duration = Duration()
-  ///      duration.FromTimedelta(td)
+  ///     td = datetime.timedelta(days=3, minutes=10)
+  ///     duration = Duration()
+  ///     duration.FromTimedelta(td)
   /// </summary>
   public sealed partial class Duration : pb::IMessage<Duration> {
     private static readonly pb::MessageParser<Duration> _parser = new pb::MessageParser<Duration>(() => new Duration());
@@ -123,8 +123,8 @@
     public const int SecondsFieldNumber = 1;
     private long seconds_;
     /// <summary>
-    ///  Signed seconds of the span of time. Must be from -315,576,000,000
-    ///  to +315,576,000,000 inclusive.
+    /// Signed seconds of the span of time. Must be from -315,576,000,000
+    /// to +315,576,000,000 inclusive.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public long Seconds {
@@ -138,12 +138,12 @@
     public const int NanosFieldNumber = 2;
     private int nanos_;
     /// <summary>
-    ///  Signed fractions of a second at nanosecond resolution of the span
-    ///  of time. Durations less than one second are represented with a 0
-    ///  `seconds` field and a positive or negative `nanos` field. For durations
-    ///  of one second or more, a non-zero value for the `nanos` field must be
-    ///  of the same sign as the `seconds` field. Must be from -999,999,999
-    ///  to +999,999,999 inclusive.
+    /// Signed fractions of a second at nanosecond resolution of the span
+    /// of time. Durations less than one second are represented with a 0
+    /// `seconds` field and a positive or negative `nanos` field. For durations
+    /// of one second or more, a non-zero value for the `nanos` field must be
+    /// of the same sign as the `seconds` field. Must be from -999,999,999
+    /// to +999,999,999 inclusive.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public int Nanos {
diff --git a/csharp/src/Google.Protobuf/WellKnownTypes/Empty.cs b/csharp/src/Google.Protobuf/WellKnownTypes/Empty.cs
index 0e64133..aa89e08 100644
--- a/csharp/src/Google.Protobuf/WellKnownTypes/Empty.cs
+++ b/csharp/src/Google.Protobuf/WellKnownTypes/Empty.cs
@@ -38,15 +38,15 @@
   }
   #region Messages
   /// <summary>
-  ///  A generic empty message that you can re-use to avoid defining duplicated
-  ///  empty messages in your APIs. A typical example is to use it as the request
-  ///  or the response type of an API method. For instance:
+  /// A generic empty message that you can re-use to avoid defining duplicated
+  /// empty messages in your APIs. A typical example is to use it as the request
+  /// or the response type of an API method. For instance:
   ///
-  ///      service Foo {
-  ///        rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);
-  ///      }
+  ///     service Foo {
+  ///       rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);
+  ///     }
   ///
-  ///  The JSON representation for `Empty` is empty JSON object `{}`.
+  /// The JSON representation for `Empty` is empty JSON object `{}`.
   /// </summary>
   public sealed partial class Empty : pb::IMessage<Empty> {
     private static readonly pb::MessageParser<Empty> _parser = new pb::MessageParser<Empty>(() => new Empty());
diff --git a/csharp/src/Google.Protobuf/WellKnownTypes/FieldMask.cs b/csharp/src/Google.Protobuf/WellKnownTypes/FieldMask.cs
index 99a8011..ef3bc10 100644
--- a/csharp/src/Google.Protobuf/WellKnownTypes/FieldMask.cs
+++ b/csharp/src/Google.Protobuf/WellKnownTypes/FieldMask.cs
@@ -39,206 +39,206 @@
   }
   #region Messages
   /// <summary>
-  ///  `FieldMask` represents a set of symbolic field paths, for example:
+  /// `FieldMask` represents a set of symbolic field paths, for example:
   ///
-  ///      paths: "f.a"
-  ///      paths: "f.b.d"
+  ///     paths: "f.a"
+  ///     paths: "f.b.d"
   ///
-  ///  Here `f` represents a field in some root message, `a` and `b`
-  ///  fields in the message found in `f`, and `d` a field found in the
-  ///  message in `f.b`.
+  /// Here `f` represents a field in some root message, `a` and `b`
+  /// fields in the message found in `f`, and `d` a field found in the
+  /// message in `f.b`.
   ///
-  ///  Field masks are used to specify a subset of fields that should be
-  ///  returned by a get operation or modified by an update operation.
-  ///  Field masks also have a custom JSON encoding (see below).
+  /// Field masks are used to specify a subset of fields that should be
+  /// returned by a get operation or modified by an update operation.
+  /// Field masks also have a custom JSON encoding (see below).
   ///
-  ///  # Field Masks in Projections
+  /// # Field Masks in Projections
   ///
-  ///  When used in the context of a projection, a response message or
-  ///  sub-message is filtered by the API to only contain those fields as
-  ///  specified in the mask. For example, if the mask in the previous
-  ///  example is applied to a response message as follows:
+  /// When used in the context of a projection, a response message or
+  /// sub-message is filtered by the API to only contain those fields as
+  /// specified in the mask. For example, if the mask in the previous
+  /// example is applied to a response message as follows:
   ///
-  ///      f {
-  ///        a : 22
-  ///        b {
-  ///          d : 1
-  ///          x : 2
-  ///        }
-  ///        y : 13
-  ///      }
-  ///      z: 8
+  ///     f {
+  ///       a : 22
+  ///       b {
+  ///         d : 1
+  ///         x : 2
+  ///       }
+  ///       y : 13
+  ///     }
+  ///     z: 8
   ///
-  ///  The result will not contain specific values for fields x,y and z
-  ///  (their value will be set to the default, and omitted in proto text
-  ///  output):
+  /// The result will not contain specific values for fields x,y and z
+  /// (their value will be set to the default, and omitted in proto text
+  /// output):
   ///
-  ///      f {
-  ///        a : 22
-  ///        b {
-  ///          d : 1
-  ///        }
-  ///      }
+  ///     f {
+  ///       a : 22
+  ///       b {
+  ///         d : 1
+  ///       }
+  ///     }
   ///
-  ///  A repeated field is not allowed except at the last position of a
-  ///  paths string.
+  /// A repeated field is not allowed except at the last position of a
+  /// paths string.
   ///
-  ///  If a FieldMask object is not present in a get operation, the
-  ///  operation applies to all fields (as if a FieldMask of all fields
-  ///  had been specified).
+  /// If a FieldMask object is not present in a get operation, the
+  /// operation applies to all fields (as if a FieldMask of all fields
+  /// had been specified).
   ///
-  ///  Note that a field mask does not necessarily apply to the
-  ///  top-level response message. In case of a REST get operation, the
-  ///  field mask applies directly to the response, but in case of a REST
-  ///  list operation, the mask instead applies to each individual message
-  ///  in the returned resource list. In case of a REST custom method,
-  ///  other definitions may be used. Where the mask applies will be
-  ///  clearly documented together with its declaration in the API.  In
-  ///  any case, the effect on the returned resource/resources is required
-  ///  behavior for APIs.
+  /// Note that a field mask does not necessarily apply to the
+  /// top-level response message. In case of a REST get operation, the
+  /// field mask applies directly to the response, but in case of a REST
+  /// list operation, the mask instead applies to each individual message
+  /// in the returned resource list. In case of a REST custom method,
+  /// other definitions may be used. Where the mask applies will be
+  /// clearly documented together with its declaration in the API.  In
+  /// any case, the effect on the returned resource/resources is required
+  /// behavior for APIs.
   ///
-  ///  # Field Masks in Update Operations
+  /// # Field Masks in Update Operations
   ///
-  ///  A field mask in update operations specifies which fields of the
-  ///  targeted resource are going to be updated. The API is required
-  ///  to only change the values of the fields as specified in the mask
-  ///  and leave the others untouched. If a resource is passed in to
-  ///  describe the updated values, the API ignores the values of all
-  ///  fields not covered by the mask.
+  /// A field mask in update operations specifies which fields of the
+  /// targeted resource are going to be updated. The API is required
+  /// to only change the values of the fields as specified in the mask
+  /// and leave the others untouched. If a resource is passed in to
+  /// describe the updated values, the API ignores the values of all
+  /// fields not covered by the mask.
   ///
-  ///  If a repeated field is specified for an update operation, the existing
-  ///  repeated values in the target resource will be overwritten by the new values.
-  ///  Note that a repeated field is only allowed in the last position of a `paths`
-  ///  string.
+  /// If a repeated field is specified for an update operation, the existing
+  /// repeated values in the target resource will be overwritten by the new values.
+  /// Note that a repeated field is only allowed in the last position of a `paths`
+  /// string.
   ///
-  ///  If a sub-message is specified in the last position of the field mask for an
-  ///  update operation, then the existing sub-message in the target resource is
-  ///  overwritten. Given the target message:
+  /// If a sub-message is specified in the last position of the field mask for an
+  /// update operation, then the existing sub-message in the target resource is
+  /// overwritten. Given the target message:
   ///
-  ///      f {
-  ///        b {
-  ///          d : 1
-  ///          x : 2
-  ///        }
-  ///        c : 1
-  ///      }
+  ///     f {
+  ///       b {
+  ///         d : 1
+  ///         x : 2
+  ///       }
+  ///       c : 1
+  ///     }
   ///
-  ///  And an update message:
+  /// And an update message:
   ///
-  ///      f {
-  ///        b {
-  ///          d : 10
-  ///        }
-  ///      }
+  ///     f {
+  ///       b {
+  ///         d : 10
+  ///       }
+  ///     }
   ///
-  ///  then if the field mask is:
+  /// then if the field mask is:
   ///
-  ///   paths: "f.b"
+  ///  paths: "f.b"
   ///
-  ///  then the result will be:
+  /// then the result will be:
   ///
-  ///      f {
-  ///        b {
-  ///          d : 10
-  ///        }
-  ///        c : 1
-  ///      }
+  ///     f {
+  ///       b {
+  ///         d : 10
+  ///       }
+  ///       c : 1
+  ///     }
   ///
-  ///  However, if the update mask was:
+  /// However, if the update mask was:
   ///
-  ///   paths: "f.b.d"
+  ///  paths: "f.b.d"
   ///
-  ///  then the result would be:
+  /// then the result would be:
   ///
-  ///      f {
-  ///        b {
-  ///          d : 10
-  ///          x : 2
-  ///        }
-  ///        c : 1
-  ///      }
+  ///     f {
+  ///       b {
+  ///         d : 10
+  ///         x : 2
+  ///       }
+  ///       c : 1
+  ///     }
   ///
-  ///  In order to reset a field's value to the default, the field must
-  ///  be in the mask and set to the default value in the provided resource.
-  ///  Hence, in order to reset all fields of a resource, provide a default
-  ///  instance of the resource and set all fields in the mask, or do
-  ///  not provide a mask as described below.
+  /// In order to reset a field's value to the default, the field must
+  /// be in the mask and set to the default value in the provided resource.
+  /// Hence, in order to reset all fields of a resource, provide a default
+  /// instance of the resource and set all fields in the mask, or do
+  /// not provide a mask as described below.
   ///
-  ///  If a field mask is not present on update, the operation applies to
-  ///  all fields (as if a field mask of all fields has been specified).
-  ///  Note that in the presence of schema evolution, this may mean that
-  ///  fields the client does not know and has therefore not filled into
-  ///  the request will be reset to their default. If this is unwanted
-  ///  behavior, a specific service may require a client to always specify
-  ///  a field mask, producing an error if not.
+  /// If a field mask is not present on update, the operation applies to
+  /// all fields (as if a field mask of all fields has been specified).
+  /// Note that in the presence of schema evolution, this may mean that
+  /// fields the client does not know and has therefore not filled into
+  /// the request will be reset to their default. If this is unwanted
+  /// behavior, a specific service may require a client to always specify
+  /// a field mask, producing an error if not.
   ///
-  ///  As with get operations, the location of the resource which
-  ///  describes the updated values in the request message depends on the
-  ///  operation kind. In any case, the effect of the field mask is
-  ///  required to be honored by the API.
+  /// As with get operations, the location of the resource which
+  /// describes the updated values in the request message depends on the
+  /// operation kind. In any case, the effect of the field mask is
+  /// required to be honored by the API.
   ///
-  ///  ## Considerations for HTTP REST
+  /// ## Considerations for HTTP REST
   ///
-  ///  The HTTP kind of an update operation which uses a field mask must
-  ///  be set to PATCH instead of PUT in order to satisfy HTTP semantics
-  ///  (PUT must only be used for full updates).
+  /// The HTTP kind of an update operation which uses a field mask must
+  /// be set to PATCH instead of PUT in order to satisfy HTTP semantics
+  /// (PUT must only be used for full updates).
   ///
-  ///  # JSON Encoding of Field Masks
+  /// # JSON Encoding of Field Masks
   ///
-  ///  In JSON, a field mask is encoded as a single string where paths are
-  ///  separated by a comma. Fields name in each path are converted
-  ///  to/from lower-camel naming conventions.
+  /// In JSON, a field mask is encoded as a single string where paths are
+  /// separated by a comma. Fields name in each path are converted
+  /// to/from lower-camel naming conventions.
   ///
-  ///  As an example, consider the following message declarations:
+  /// As an example, consider the following message declarations:
   ///
-  ///      message Profile {
-  ///        User user = 1;
-  ///        Photo photo = 2;
-  ///      }
-  ///      message User {
-  ///        string display_name = 1;
-  ///        string address = 2;
-  ///      }
+  ///     message Profile {
+  ///       User user = 1;
+  ///       Photo photo = 2;
+  ///     }
+  ///     message User {
+  ///       string display_name = 1;
+  ///       string address = 2;
+  ///     }
   ///
-  ///  In proto a field mask for `Profile` may look as such:
+  /// In proto a field mask for `Profile` may look as such:
   ///
-  ///      mask {
-  ///        paths: "user.display_name"
-  ///        paths: "photo"
-  ///      }
+  ///     mask {
+  ///       paths: "user.display_name"
+  ///       paths: "photo"
+  ///     }
   ///
-  ///  In JSON, the same mask is represented as below:
+  /// In JSON, the same mask is represented as below:
   ///
-  ///      {
-  ///        mask: "user.displayName,photo"
-  ///      }
+  ///     {
+  ///       mask: "user.displayName,photo"
+  ///     }
   ///
-  ///  # Field Masks and Oneof Fields
+  /// # Field Masks and Oneof Fields
   ///
-  ///  Field masks treat fields in oneofs just as regular fields. Consider the
-  ///  following message:
+  /// Field masks treat fields in oneofs just as regular fields. Consider the
+  /// following message:
   ///
-  ///      message SampleMessage {
-  ///        oneof test_oneof {
-  ///          string name = 4;
-  ///          SubMessage sub_message = 9;
-  ///        }
-  ///      }
+  ///     message SampleMessage {
+  ///       oneof test_oneof {
+  ///         string name = 4;
+  ///         SubMessage sub_message = 9;
+  ///       }
+  ///     }
   ///
-  ///  The field mask can be:
+  /// The field mask can be:
   ///
-  ///      mask {
-  ///        paths: "name"
-  ///      }
+  ///     mask {
+  ///       paths: "name"
+  ///     }
   ///
-  ///  Or:
+  /// Or:
   ///
-  ///      mask {
-  ///        paths: "sub_message"
-  ///      }
+  ///     mask {
+  ///       paths: "sub_message"
+  ///     }
   ///
-  ///  Note that oneof type names ("test_oneof" in this case) cannot be used in
-  ///  paths.
+  /// Note that oneof type names ("test_oneof" in this case) cannot be used in
+  /// paths.
   /// </summary>
   public sealed partial class FieldMask : pb::IMessage<FieldMask> {
     private static readonly pb::MessageParser<FieldMask> _parser = new pb::MessageParser<FieldMask>(() => new FieldMask());
@@ -278,7 +278,7 @@
         = pb::FieldCodec.ForString(10);
     private readonly pbc::RepeatedField<string> paths_ = new pbc::RepeatedField<string>();
     /// <summary>
-    ///  The set of field mask paths.
+    /// The set of field mask paths.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public pbc::RepeatedField<string> Paths {
diff --git a/csharp/src/Google.Protobuf/WellKnownTypes/SourceContext.cs b/csharp/src/Google.Protobuf/WellKnownTypes/SourceContext.cs
index c571346..6ddadf1 100644
--- a/csharp/src/Google.Protobuf/WellKnownTypes/SourceContext.cs
+++ b/csharp/src/Google.Protobuf/WellKnownTypes/SourceContext.cs
@@ -39,8 +39,8 @@
   }
   #region Messages
   /// <summary>
-  ///  `SourceContext` represents information about the source of a
-  ///  protobuf element, like the file in which it is defined.
+  /// `SourceContext` represents information about the source of a
+  /// protobuf element, like the file in which it is defined.
   /// </summary>
   public sealed partial class SourceContext : pb::IMessage<SourceContext> {
     private static readonly pb::MessageParser<SourceContext> _parser = new pb::MessageParser<SourceContext>(() => new SourceContext());
@@ -78,8 +78,8 @@
     public const int FileNameFieldNumber = 1;
     private string fileName_ = "";
     /// <summary>
-    ///  The path-qualified name of the .proto file that contained the associated
-    ///  protobuf element.  For example: `"google/protobuf/source_context.proto"`.
+    /// The path-qualified name of the .proto file that contained the associated
+    /// protobuf element.  For example: `"google/protobuf/source_context.proto"`.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public string FileName {
diff --git a/csharp/src/Google.Protobuf/WellKnownTypes/Struct.cs b/csharp/src/Google.Protobuf/WellKnownTypes/Struct.cs
index d455605..1fa3552 100644
--- a/csharp/src/Google.Protobuf/WellKnownTypes/Struct.cs
+++ b/csharp/src/Google.Protobuf/WellKnownTypes/Struct.cs
@@ -50,14 +50,14 @@
   }
   #region Enums
   /// <summary>
-  ///  `NullValue` is a singleton enumeration to represent the null value for the
-  ///  `Value` type union.
+  /// `NullValue` is a singleton enumeration to represent the null value for the
+  /// `Value` type union.
   ///
-  ///   The JSON representation for `NullValue` is JSON `null`.
+  ///  The JSON representation for `NullValue` is JSON `null`.
   /// </summary>
   public enum NullValue {
     /// <summary>
-    ///  Null value.
+    /// Null value.
     /// </summary>
     [pbr::OriginalName("NULL_VALUE")] NullValue = 0,
   }
@@ -66,14 +66,14 @@
 
   #region Messages
   /// <summary>
-  ///  `Struct` represents a structured data value, consisting of fields
-  ///  which map to dynamically typed values. In some languages, `Struct`
-  ///  might be supported by a native representation. For example, in
-  ///  scripting languages like JS a struct is represented as an
-  ///  object. The details of that representation are described together
-  ///  with the proto support for the language.
+  /// `Struct` represents a structured data value, consisting of fields
+  /// which map to dynamically typed values. In some languages, `Struct`
+  /// might be supported by a native representation. For example, in
+  /// scripting languages like JS a struct is represented as an
+  /// object. The details of that representation are described together
+  /// with the proto support for the language.
   ///
-  ///  The JSON representation for `Struct` is JSON object.
+  /// The JSON representation for `Struct` is JSON object.
   /// </summary>
   public sealed partial class Struct : pb::IMessage<Struct> {
     private static readonly pb::MessageParser<Struct> _parser = new pb::MessageParser<Struct>(() => new Struct());
@@ -113,7 +113,7 @@
         = new pbc::MapField<string, global::Google.Protobuf.WellKnownTypes.Value>.Codec(pb::FieldCodec.ForString(10), pb::FieldCodec.ForMessage(18, global::Google.Protobuf.WellKnownTypes.Value.Parser), 10);
     private readonly pbc::MapField<string, global::Google.Protobuf.WellKnownTypes.Value> fields_ = new pbc::MapField<string, global::Google.Protobuf.WellKnownTypes.Value>();
     /// <summary>
-    ///  Unordered map of dynamically typed values.
+    /// Unordered map of dynamically typed values.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public pbc::MapField<string, global::Google.Protobuf.WellKnownTypes.Value> Fields {
@@ -188,12 +188,12 @@
   }
 
   /// <summary>
-  ///  `Value` represents a dynamically typed value which can be either
-  ///  null, a number, a string, a boolean, a recursive struct value, or a
-  ///  list of values. A producer of value is expected to set one of that
-  ///  variants, absence of any variant indicates an error.
+  /// `Value` represents a dynamically typed value which can be either
+  /// null, a number, a string, a boolean, a recursive struct value, or a
+  /// list of values. A producer of value is expected to set one of that
+  /// variants, absence of any variant indicates an error.
   ///
-  ///  The JSON representation for `Value` is JSON value.
+  /// The JSON representation for `Value` is JSON value.
   /// </summary>
   public sealed partial class Value : pb::IMessage<Value> {
     private static readonly pb::MessageParser<Value> _parser = new pb::MessageParser<Value>(() => new Value());
@@ -250,7 +250,7 @@
     /// <summary>Field number for the "null_value" field.</summary>
     public const int NullValueFieldNumber = 1;
     /// <summary>
-    ///  Represents a null value.
+    /// Represents a null value.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public global::Google.Protobuf.WellKnownTypes.NullValue NullValue {
@@ -264,7 +264,7 @@
     /// <summary>Field number for the "number_value" field.</summary>
     public const int NumberValueFieldNumber = 2;
     /// <summary>
-    ///  Represents a double value.
+    /// Represents a double value.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public double NumberValue {
@@ -278,7 +278,7 @@
     /// <summary>Field number for the "string_value" field.</summary>
     public const int StringValueFieldNumber = 3;
     /// <summary>
-    ///  Represents a string value.
+    /// Represents a string value.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public string StringValue {
@@ -292,7 +292,7 @@
     /// <summary>Field number for the "bool_value" field.</summary>
     public const int BoolValueFieldNumber = 4;
     /// <summary>
-    ///  Represents a boolean value.
+    /// Represents a boolean value.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public bool BoolValue {
@@ -306,7 +306,7 @@
     /// <summary>Field number for the "struct_value" field.</summary>
     public const int StructValueFieldNumber = 5;
     /// <summary>
-    ///  Represents a structured value.
+    /// Represents a structured value.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public global::Google.Protobuf.WellKnownTypes.Struct StructValue {
@@ -320,7 +320,7 @@
     /// <summary>Field number for the "list_value" field.</summary>
     public const int ListValueFieldNumber = 6;
     /// <summary>
-    ///  Represents a repeated `Value`.
+    /// Represents a repeated `Value`.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public global::Google.Protobuf.WellKnownTypes.ListValue ListValue {
@@ -525,9 +525,9 @@
   }
 
   /// <summary>
-  ///  `ListValue` is a wrapper around a repeated field of values.
+  /// `ListValue` is a wrapper around a repeated field of values.
   ///
-  ///  The JSON representation for `ListValue` is JSON array.
+  /// The JSON representation for `ListValue` is JSON array.
   /// </summary>
   public sealed partial class ListValue : pb::IMessage<ListValue> {
     private static readonly pb::MessageParser<ListValue> _parser = new pb::MessageParser<ListValue>(() => new ListValue());
@@ -567,7 +567,7 @@
         = pb::FieldCodec.ForMessage(10, global::Google.Protobuf.WellKnownTypes.Value.Parser);
     private readonly pbc::RepeatedField<global::Google.Protobuf.WellKnownTypes.Value> values_ = new pbc::RepeatedField<global::Google.Protobuf.WellKnownTypes.Value>();
     /// <summary>
-    ///  Repeated field of dynamically typed values.
+    /// Repeated field of dynamically typed values.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public pbc::RepeatedField<global::Google.Protobuf.WellKnownTypes.Value> Values {
diff --git a/csharp/src/Google.Protobuf/WellKnownTypes/Timestamp.cs b/csharp/src/Google.Protobuf/WellKnownTypes/Timestamp.cs
index 6c9a517..b789f6d 100644
--- a/csharp/src/Google.Protobuf/WellKnownTypes/Timestamp.cs
+++ b/csharp/src/Google.Protobuf/WellKnownTypes/Timestamp.cs
@@ -39,56 +39,56 @@
   }
   #region Messages
   /// <summary>
-  ///  A Timestamp represents a point in time independent of any time zone
-  ///  or calendar, represented as seconds and fractions of seconds at
-  ///  nanosecond resolution in UTC Epoch time. It is encoded using the
-  ///  Proleptic Gregorian Calendar which extends the Gregorian calendar
-  ///  backwards to year one. It is encoded assuming all minutes are 60
-  ///  seconds long, i.e. leap seconds are "smeared" so that no leap second
-  ///  table is needed for interpretation. Range is from
-  ///  0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z.
-  ///  By restricting to that range, we ensure that we can convert to
-  ///  and from  RFC 3339 date strings.
-  ///  See [https://www.ietf.org/rfc/rfc3339.txt](https://www.ietf.org/rfc/rfc3339.txt).
+  /// A Timestamp represents a point in time independent of any time zone
+  /// or calendar, represented as seconds and fractions of seconds at
+  /// nanosecond resolution in UTC Epoch time. It is encoded using the
+  /// Proleptic Gregorian Calendar which extends the Gregorian calendar
+  /// backwards to year one. It is encoded assuming all minutes are 60
+  /// seconds long, i.e. leap seconds are "smeared" so that no leap second
+  /// table is needed for interpretation. Range is from
+  /// 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z.
+  /// By restricting to that range, we ensure that we can convert to
+  /// and from  RFC 3339 date strings.
+  /// See [https://www.ietf.org/rfc/rfc3339.txt](https://www.ietf.org/rfc/rfc3339.txt).
   ///
-  ///  Example 1: Compute Timestamp from POSIX `time()`.
+  /// Example 1: Compute Timestamp from POSIX `time()`.
   ///
-  ///      Timestamp timestamp;
-  ///      timestamp.set_seconds(time(NULL));
-  ///      timestamp.set_nanos(0);
+  ///     Timestamp timestamp;
+  ///     timestamp.set_seconds(time(NULL));
+  ///     timestamp.set_nanos(0);
   ///
-  ///  Example 2: Compute Timestamp from POSIX `gettimeofday()`.
+  /// Example 2: Compute Timestamp from POSIX `gettimeofday()`.
   ///
-  ///      struct timeval tv;
-  ///      gettimeofday(&amp;tv, NULL);
+  ///     struct timeval tv;
+  ///     gettimeofday(&amp;tv, NULL);
   ///
-  ///      Timestamp timestamp;
-  ///      timestamp.set_seconds(tv.tv_sec);
-  ///      timestamp.set_nanos(tv.tv_usec * 1000);
+  ///     Timestamp timestamp;
+  ///     timestamp.set_seconds(tv.tv_sec);
+  ///     timestamp.set_nanos(tv.tv_usec * 1000);
   ///
-  ///  Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.
+  /// Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.
   ///
-  ///      FILETIME ft;
-  ///      GetSystemTimeAsFileTime(&amp;ft);
-  ///      UINT64 ticks = (((UINT64)ft.dwHighDateTime) &lt;&lt; 32) | ft.dwLowDateTime;
+  ///     FILETIME ft;
+  ///     GetSystemTimeAsFileTime(&amp;ft);
+  ///     UINT64 ticks = (((UINT64)ft.dwHighDateTime) &lt;&lt; 32) | ft.dwLowDateTime;
   ///
-  ///      // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z
-  ///      // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.
-  ///      Timestamp timestamp;
-  ///      timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));
-  ///      timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));
+  ///     // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z
+  ///     // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.
+  ///     Timestamp timestamp;
+  ///     timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));
+  ///     timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));
   ///
-  ///  Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.
+  /// Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.
   ///
-  ///      long millis = System.currentTimeMillis();
+  ///     long millis = System.currentTimeMillis();
   ///
-  ///      Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)
-  ///          .setNanos((int) ((millis % 1000) * 1000000)).build();
+  ///     Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)
+  ///         .setNanos((int) ((millis % 1000) * 1000000)).build();
   ///
-  ///  Example 5: Compute Timestamp from current time in Python.
+  /// Example 5: Compute Timestamp from current time in Python.
   ///
-  ///      timestamp = Timestamp()
-  ///      timestamp.GetCurrentTime()
+  ///     timestamp = Timestamp()
+  ///     timestamp.GetCurrentTime()
   /// </summary>
   public sealed partial class Timestamp : pb::IMessage<Timestamp> {
     private static readonly pb::MessageParser<Timestamp> _parser = new pb::MessageParser<Timestamp>(() => new Timestamp());
@@ -127,9 +127,9 @@
     public const int SecondsFieldNumber = 1;
     private long seconds_;
     /// <summary>
-    ///  Represents seconds of UTC time since Unix epoch
-    ///  1970-01-01T00:00:00Z. Must be from 0001-01-01T00:00:00Z to
-    ///  9999-12-31T23:59:59Z inclusive.
+    /// Represents seconds of UTC time since Unix epoch
+    /// 1970-01-01T00:00:00Z. Must be from 0001-01-01T00:00:00Z to
+    /// 9999-12-31T23:59:59Z inclusive.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public long Seconds {
@@ -143,10 +143,10 @@
     public const int NanosFieldNumber = 2;
     private int nanos_;
     /// <summary>
-    ///  Non-negative fractions of a second at nanosecond resolution. Negative
-    ///  second values with fractions must still have non-negative nanos values
-    ///  that count forward in time. Must be from 0 to 999,999,999
-    ///  inclusive.
+    /// Non-negative fractions of a second at nanosecond resolution. Negative
+    /// second values with fractions must still have non-negative nanos values
+    /// that count forward in time. Must be from 0 to 999,999,999
+    /// inclusive.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public int Nanos {
diff --git a/csharp/src/Google.Protobuf/WellKnownTypes/Type.cs b/csharp/src/Google.Protobuf/WellKnownTypes/Type.cs
index d80735f..9212ce8 100644
--- a/csharp/src/Google.Protobuf/WellKnownTypes/Type.cs
+++ b/csharp/src/Google.Protobuf/WellKnownTypes/Type.cs
@@ -73,15 +73,15 @@
   }
   #region Enums
   /// <summary>
-  ///  The syntax in which a protocol buffer element is defined.
+  /// The syntax in which a protocol buffer element is defined.
   /// </summary>
   public enum Syntax {
     /// <summary>
-    ///  Syntax `proto2`.
+    /// Syntax `proto2`.
     /// </summary>
     [pbr::OriginalName("SYNTAX_PROTO2")] Proto2 = 0,
     /// <summary>
-    ///  Syntax `proto3`.
+    /// Syntax `proto3`.
     /// </summary>
     [pbr::OriginalName("SYNTAX_PROTO3")] Proto3 = 1,
   }
@@ -90,7 +90,7 @@
 
   #region Messages
   /// <summary>
-  ///  A protocol buffer message type.
+  /// A protocol buffer message type.
   /// </summary>
   public sealed partial class Type : pb::IMessage<Type> {
     private static readonly pb::MessageParser<Type> _parser = new pb::MessageParser<Type>(() => new Type());
@@ -133,7 +133,7 @@
     public const int NameFieldNumber = 1;
     private string name_ = "";
     /// <summary>
-    ///  The fully qualified message name.
+    /// The fully qualified message name.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public string Name {
@@ -149,7 +149,7 @@
         = pb::FieldCodec.ForMessage(18, global::Google.Protobuf.WellKnownTypes.Field.Parser);
     private readonly pbc::RepeatedField<global::Google.Protobuf.WellKnownTypes.Field> fields_ = new pbc::RepeatedField<global::Google.Protobuf.WellKnownTypes.Field>();
     /// <summary>
-    ///  The list of fields.
+    /// The list of fields.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public pbc::RepeatedField<global::Google.Protobuf.WellKnownTypes.Field> Fields {
@@ -162,7 +162,7 @@
         = pb::FieldCodec.ForString(26);
     private readonly pbc::RepeatedField<string> oneofs_ = new pbc::RepeatedField<string>();
     /// <summary>
-    ///  The list of types appearing in `oneof` definitions in this type.
+    /// The list of types appearing in `oneof` definitions in this type.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public pbc::RepeatedField<string> Oneofs {
@@ -175,7 +175,7 @@
         = pb::FieldCodec.ForMessage(34, global::Google.Protobuf.WellKnownTypes.Option.Parser);
     private readonly pbc::RepeatedField<global::Google.Protobuf.WellKnownTypes.Option> options_ = new pbc::RepeatedField<global::Google.Protobuf.WellKnownTypes.Option>();
     /// <summary>
-    ///  The protocol buffer options.
+    /// The protocol buffer options.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public pbc::RepeatedField<global::Google.Protobuf.WellKnownTypes.Option> Options {
@@ -186,7 +186,7 @@
     public const int SourceContextFieldNumber = 5;
     private global::Google.Protobuf.WellKnownTypes.SourceContext sourceContext_;
     /// <summary>
-    ///  The source context.
+    /// The source context.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public global::Google.Protobuf.WellKnownTypes.SourceContext SourceContext {
@@ -200,7 +200,7 @@
     public const int SyntaxFieldNumber = 6;
     private global::Google.Protobuf.WellKnownTypes.Syntax syntax_ = 0;
     /// <summary>
-    ///  The source syntax.
+    /// The source syntax.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public global::Google.Protobuf.WellKnownTypes.Syntax Syntax {
@@ -350,7 +350,7 @@
   }
 
   /// <summary>
-  ///  A single field of a message type.
+  /// A single field of a message type.
   /// </summary>
   public sealed partial class Field : pb::IMessage<Field> {
     private static readonly pb::MessageParser<Field> _parser = new pb::MessageParser<Field>(() => new Field());
@@ -397,7 +397,7 @@
     public const int KindFieldNumber = 1;
     private global::Google.Protobuf.WellKnownTypes.Field.Types.Kind kind_ = 0;
     /// <summary>
-    ///  The field type.
+    /// The field type.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public global::Google.Protobuf.WellKnownTypes.Field.Types.Kind Kind {
@@ -411,7 +411,7 @@
     public const int CardinalityFieldNumber = 2;
     private global::Google.Protobuf.WellKnownTypes.Field.Types.Cardinality cardinality_ = 0;
     /// <summary>
-    ///  The field cardinality.
+    /// The field cardinality.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public global::Google.Protobuf.WellKnownTypes.Field.Types.Cardinality Cardinality {
@@ -425,7 +425,7 @@
     public const int NumberFieldNumber = 3;
     private int number_;
     /// <summary>
-    ///  The field number.
+    /// The field number.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public int Number {
@@ -439,7 +439,7 @@
     public const int NameFieldNumber = 4;
     private string name_ = "";
     /// <summary>
-    ///  The field name.
+    /// The field name.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public string Name {
@@ -453,8 +453,8 @@
     public const int TypeUrlFieldNumber = 6;
     private string typeUrl_ = "";
     /// <summary>
-    ///  The field type URL, without the scheme, for message or enumeration
-    ///  types. Example: `"type.googleapis.com/google.protobuf.Timestamp"`.
+    /// The field type URL, without the scheme, for message or enumeration
+    /// types. Example: `"type.googleapis.com/google.protobuf.Timestamp"`.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public string TypeUrl {
@@ -468,8 +468,8 @@
     public const int OneofIndexFieldNumber = 7;
     private int oneofIndex_;
     /// <summary>
-    ///  The index of the field type in `Type.oneofs`, for message or enumeration
-    ///  types. The first type has index 1; zero means the type is not in the list.
+    /// The index of the field type in `Type.oneofs`, for message or enumeration
+    /// types. The first type has index 1; zero means the type is not in the list.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public int OneofIndex {
@@ -483,7 +483,7 @@
     public const int PackedFieldNumber = 8;
     private bool packed_;
     /// <summary>
-    ///  Whether to use alternative packed wire representation.
+    /// Whether to use alternative packed wire representation.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public bool Packed {
@@ -499,7 +499,7 @@
         = pb::FieldCodec.ForMessage(74, global::Google.Protobuf.WellKnownTypes.Option.Parser);
     private readonly pbc::RepeatedField<global::Google.Protobuf.WellKnownTypes.Option> options_ = new pbc::RepeatedField<global::Google.Protobuf.WellKnownTypes.Option>();
     /// <summary>
-    ///  The protocol buffer options.
+    /// The protocol buffer options.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public pbc::RepeatedField<global::Google.Protobuf.WellKnownTypes.Option> Options {
@@ -510,7 +510,7 @@
     public const int JsonNameFieldNumber = 10;
     private string jsonName_ = "";
     /// <summary>
-    ///  The field JSON name.
+    /// The field JSON name.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public string JsonName {
@@ -524,7 +524,7 @@
     public const int DefaultValueFieldNumber = 11;
     private string defaultValue_ = "";
     /// <summary>
-    ///  The string value of the default value of this field. Proto2 syntax only.
+    /// The string value of the default value of this field. Proto2 syntax only.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public string DefaultValue {
@@ -748,105 +748,105 @@
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public static partial class Types {
       /// <summary>
-      ///  Basic field types.
+      /// Basic field types.
       /// </summary>
       public enum Kind {
         /// <summary>
-        ///  Field type unknown.
+        /// Field type unknown.
         /// </summary>
         [pbr::OriginalName("TYPE_UNKNOWN")] TypeUnknown = 0,
         /// <summary>
-        ///  Field type double.
+        /// Field type double.
         /// </summary>
         [pbr::OriginalName("TYPE_DOUBLE")] TypeDouble = 1,
         /// <summary>
-        ///  Field type float.
+        /// Field type float.
         /// </summary>
         [pbr::OriginalName("TYPE_FLOAT")] TypeFloat = 2,
         /// <summary>
-        ///  Field type int64.
+        /// Field type int64.
         /// </summary>
         [pbr::OriginalName("TYPE_INT64")] TypeInt64 = 3,
         /// <summary>
-        ///  Field type uint64.
+        /// Field type uint64.
         /// </summary>
         [pbr::OriginalName("TYPE_UINT64")] TypeUint64 = 4,
         /// <summary>
-        ///  Field type int32.
+        /// Field type int32.
         /// </summary>
         [pbr::OriginalName("TYPE_INT32")] TypeInt32 = 5,
         /// <summary>
-        ///  Field type fixed64.
+        /// Field type fixed64.
         /// </summary>
         [pbr::OriginalName("TYPE_FIXED64")] TypeFixed64 = 6,
         /// <summary>
-        ///  Field type fixed32.
+        /// Field type fixed32.
         /// </summary>
         [pbr::OriginalName("TYPE_FIXED32")] TypeFixed32 = 7,
         /// <summary>
-        ///  Field type bool.
+        /// Field type bool.
         /// </summary>
         [pbr::OriginalName("TYPE_BOOL")] TypeBool = 8,
         /// <summary>
-        ///  Field type string.
+        /// Field type string.
         /// </summary>
         [pbr::OriginalName("TYPE_STRING")] TypeString = 9,
         /// <summary>
-        ///  Field type group. Proto2 syntax only, and deprecated.
+        /// Field type group. Proto2 syntax only, and deprecated.
         /// </summary>
         [pbr::OriginalName("TYPE_GROUP")] TypeGroup = 10,
         /// <summary>
-        ///  Field type message.
+        /// Field type message.
         /// </summary>
         [pbr::OriginalName("TYPE_MESSAGE")] TypeMessage = 11,
         /// <summary>
-        ///  Field type bytes.
+        /// Field type bytes.
         /// </summary>
         [pbr::OriginalName("TYPE_BYTES")] TypeBytes = 12,
         /// <summary>
-        ///  Field type uint32.
+        /// Field type uint32.
         /// </summary>
         [pbr::OriginalName("TYPE_UINT32")] TypeUint32 = 13,
         /// <summary>
-        ///  Field type enum.
+        /// Field type enum.
         /// </summary>
         [pbr::OriginalName("TYPE_ENUM")] TypeEnum = 14,
         /// <summary>
-        ///  Field type sfixed32.
+        /// Field type sfixed32.
         /// </summary>
         [pbr::OriginalName("TYPE_SFIXED32")] TypeSfixed32 = 15,
         /// <summary>
-        ///  Field type sfixed64.
+        /// Field type sfixed64.
         /// </summary>
         [pbr::OriginalName("TYPE_SFIXED64")] TypeSfixed64 = 16,
         /// <summary>
-        ///  Field type sint32.
+        /// Field type sint32.
         /// </summary>
         [pbr::OriginalName("TYPE_SINT32")] TypeSint32 = 17,
         /// <summary>
-        ///  Field type sint64.
+        /// Field type sint64.
         /// </summary>
         [pbr::OriginalName("TYPE_SINT64")] TypeSint64 = 18,
       }
 
       /// <summary>
-      ///  Whether a field is optional, required, or repeated.
+      /// Whether a field is optional, required, or repeated.
       /// </summary>
       public enum Cardinality {
         /// <summary>
-        ///  For fields with unknown cardinality.
+        /// For fields with unknown cardinality.
         /// </summary>
         [pbr::OriginalName("CARDINALITY_UNKNOWN")] Unknown = 0,
         /// <summary>
-        ///  For optional fields.
+        /// For optional fields.
         /// </summary>
         [pbr::OriginalName("CARDINALITY_OPTIONAL")] Optional = 1,
         /// <summary>
-        ///  For required fields. Proto2 syntax only.
+        /// For required fields. Proto2 syntax only.
         /// </summary>
         [pbr::OriginalName("CARDINALITY_REQUIRED")] Required = 2,
         /// <summary>
-        ///  For repeated fields.
+        /// For repeated fields.
         /// </summary>
         [pbr::OriginalName("CARDINALITY_REPEATED")] Repeated = 3,
       }
@@ -857,7 +857,7 @@
   }
 
   /// <summary>
-  ///  Enum type definition.
+  /// Enum type definition.
   /// </summary>
   public sealed partial class Enum : pb::IMessage<Enum> {
     private static readonly pb::MessageParser<Enum> _parser = new pb::MessageParser<Enum>(() => new Enum());
@@ -899,7 +899,7 @@
     public const int NameFieldNumber = 1;
     private string name_ = "";
     /// <summary>
-    ///  Enum type name.
+    /// Enum type name.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public string Name {
@@ -915,7 +915,7 @@
         = pb::FieldCodec.ForMessage(18, global::Google.Protobuf.WellKnownTypes.EnumValue.Parser);
     private readonly pbc::RepeatedField<global::Google.Protobuf.WellKnownTypes.EnumValue> enumvalue_ = new pbc::RepeatedField<global::Google.Protobuf.WellKnownTypes.EnumValue>();
     /// <summary>
-    ///  Enum value definitions.
+    /// Enum value definitions.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public pbc::RepeatedField<global::Google.Protobuf.WellKnownTypes.EnumValue> Enumvalue {
@@ -928,7 +928,7 @@
         = pb::FieldCodec.ForMessage(26, global::Google.Protobuf.WellKnownTypes.Option.Parser);
     private readonly pbc::RepeatedField<global::Google.Protobuf.WellKnownTypes.Option> options_ = new pbc::RepeatedField<global::Google.Protobuf.WellKnownTypes.Option>();
     /// <summary>
-    ///  Protocol buffer options.
+    /// Protocol buffer options.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public pbc::RepeatedField<global::Google.Protobuf.WellKnownTypes.Option> Options {
@@ -939,7 +939,7 @@
     public const int SourceContextFieldNumber = 4;
     private global::Google.Protobuf.WellKnownTypes.SourceContext sourceContext_;
     /// <summary>
-    ///  The source context.
+    /// The source context.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public global::Google.Protobuf.WellKnownTypes.SourceContext SourceContext {
@@ -953,7 +953,7 @@
     public const int SyntaxFieldNumber = 5;
     private global::Google.Protobuf.WellKnownTypes.Syntax syntax_ = 0;
     /// <summary>
-    ///  The source syntax.
+    /// The source syntax.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public global::Google.Protobuf.WellKnownTypes.Syntax Syntax {
@@ -1094,7 +1094,7 @@
   }
 
   /// <summary>
-  ///  Enum value definition.
+  /// Enum value definition.
   /// </summary>
   public sealed partial class EnumValue : pb::IMessage<EnumValue> {
     private static readonly pb::MessageParser<EnumValue> _parser = new pb::MessageParser<EnumValue>(() => new EnumValue());
@@ -1134,7 +1134,7 @@
     public const int NameFieldNumber = 1;
     private string name_ = "";
     /// <summary>
-    ///  Enum value name.
+    /// Enum value name.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public string Name {
@@ -1148,7 +1148,7 @@
     public const int NumberFieldNumber = 2;
     private int number_;
     /// <summary>
-    ///  Enum value number.
+    /// Enum value number.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public int Number {
@@ -1164,7 +1164,7 @@
         = pb::FieldCodec.ForMessage(26, global::Google.Protobuf.WellKnownTypes.Option.Parser);
     private readonly pbc::RepeatedField<global::Google.Protobuf.WellKnownTypes.Option> options_ = new pbc::RepeatedField<global::Google.Protobuf.WellKnownTypes.Option>();
     /// <summary>
-    ///  Protocol buffer options.
+    /// Protocol buffer options.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public pbc::RepeatedField<global::Google.Protobuf.WellKnownTypes.Option> Options {
@@ -1271,8 +1271,8 @@
   }
 
   /// <summary>
-  ///  A protocol buffer option, which can be attached to a message, field,
-  ///  enumeration, etc.
+  /// A protocol buffer option, which can be attached to a message, field,
+  /// enumeration, etc.
   /// </summary>
   public sealed partial class Option : pb::IMessage<Option> {
     private static readonly pb::MessageParser<Option> _parser = new pb::MessageParser<Option>(() => new Option());
@@ -1311,7 +1311,7 @@
     public const int NameFieldNumber = 1;
     private string name_ = "";
     /// <summary>
-    ///  The option's name. For example, `"java_package"`.
+    /// The option's name. For example, `"java_package"`.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public string Name {
@@ -1325,7 +1325,7 @@
     public const int ValueFieldNumber = 2;
     private global::Google.Protobuf.WellKnownTypes.Any value_;
     /// <summary>
-    ///  The option's value. For example, `"com.google.protobuf"`.
+    /// The option's value. For example, `"com.google.protobuf"`.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public global::Google.Protobuf.WellKnownTypes.Any Value {
diff --git a/csharp/src/Google.Protobuf/WellKnownTypes/Wrappers.cs b/csharp/src/Google.Protobuf/WellKnownTypes/Wrappers.cs
index e97c3d1..9a5fb81 100644
--- a/csharp/src/Google.Protobuf/WellKnownTypes/Wrappers.cs
+++ b/csharp/src/Google.Protobuf/WellKnownTypes/Wrappers.cs
@@ -51,9 +51,9 @@
   }
   #region Messages
   /// <summary>
-  ///  Wrapper message for `double`.
+  /// Wrapper message for `double`.
   ///
-  ///  The JSON representation for `DoubleValue` is JSON number.
+  /// The JSON representation for `DoubleValue` is JSON number.
   /// </summary>
   public sealed partial class DoubleValue : pb::IMessage<DoubleValue> {
     private static readonly pb::MessageParser<DoubleValue> _parser = new pb::MessageParser<DoubleValue>(() => new DoubleValue());
@@ -91,7 +91,7 @@
     public const int ValueFieldNumber = 1;
     private double value_;
     /// <summary>
-    ///  The double value.
+    /// The double value.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public double Value {
@@ -176,9 +176,9 @@
   }
 
   /// <summary>
-  ///  Wrapper message for `float`.
+  /// Wrapper message for `float`.
   ///
-  ///  The JSON representation for `FloatValue` is JSON number.
+  /// The JSON representation for `FloatValue` is JSON number.
   /// </summary>
   public sealed partial class FloatValue : pb::IMessage<FloatValue> {
     private static readonly pb::MessageParser<FloatValue> _parser = new pb::MessageParser<FloatValue>(() => new FloatValue());
@@ -216,7 +216,7 @@
     public const int ValueFieldNumber = 1;
     private float value_;
     /// <summary>
-    ///  The float value.
+    /// The float value.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public float Value {
@@ -301,9 +301,9 @@
   }
 
   /// <summary>
-  ///  Wrapper message for `int64`.
+  /// Wrapper message for `int64`.
   ///
-  ///  The JSON representation for `Int64Value` is JSON string.
+  /// The JSON representation for `Int64Value` is JSON string.
   /// </summary>
   public sealed partial class Int64Value : pb::IMessage<Int64Value> {
     private static readonly pb::MessageParser<Int64Value> _parser = new pb::MessageParser<Int64Value>(() => new Int64Value());
@@ -341,7 +341,7 @@
     public const int ValueFieldNumber = 1;
     private long value_;
     /// <summary>
-    ///  The int64 value.
+    /// The int64 value.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public long Value {
@@ -426,9 +426,9 @@
   }
 
   /// <summary>
-  ///  Wrapper message for `uint64`.
+  /// Wrapper message for `uint64`.
   ///
-  ///  The JSON representation for `UInt64Value` is JSON string.
+  /// The JSON representation for `UInt64Value` is JSON string.
   /// </summary>
   public sealed partial class UInt64Value : pb::IMessage<UInt64Value> {
     private static readonly pb::MessageParser<UInt64Value> _parser = new pb::MessageParser<UInt64Value>(() => new UInt64Value());
@@ -466,7 +466,7 @@
     public const int ValueFieldNumber = 1;
     private ulong value_;
     /// <summary>
-    ///  The uint64 value.
+    /// The uint64 value.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public ulong Value {
@@ -551,9 +551,9 @@
   }
 
   /// <summary>
-  ///  Wrapper message for `int32`.
+  /// Wrapper message for `int32`.
   ///
-  ///  The JSON representation for `Int32Value` is JSON number.
+  /// The JSON representation for `Int32Value` is JSON number.
   /// </summary>
   public sealed partial class Int32Value : pb::IMessage<Int32Value> {
     private static readonly pb::MessageParser<Int32Value> _parser = new pb::MessageParser<Int32Value>(() => new Int32Value());
@@ -591,7 +591,7 @@
     public const int ValueFieldNumber = 1;
     private int value_;
     /// <summary>
-    ///  The int32 value.
+    /// The int32 value.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public int Value {
@@ -676,9 +676,9 @@
   }
 
   /// <summary>
-  ///  Wrapper message for `uint32`.
+  /// Wrapper message for `uint32`.
   ///
-  ///  The JSON representation for `UInt32Value` is JSON number.
+  /// The JSON representation for `UInt32Value` is JSON number.
   /// </summary>
   public sealed partial class UInt32Value : pb::IMessage<UInt32Value> {
     private static readonly pb::MessageParser<UInt32Value> _parser = new pb::MessageParser<UInt32Value>(() => new UInt32Value());
@@ -716,7 +716,7 @@
     public const int ValueFieldNumber = 1;
     private uint value_;
     /// <summary>
-    ///  The uint32 value.
+    /// The uint32 value.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public uint Value {
@@ -801,9 +801,9 @@
   }
 
   /// <summary>
-  ///  Wrapper message for `bool`.
+  /// Wrapper message for `bool`.
   ///
-  ///  The JSON representation for `BoolValue` is JSON `true` and `false`.
+  /// The JSON representation for `BoolValue` is JSON `true` and `false`.
   /// </summary>
   public sealed partial class BoolValue : pb::IMessage<BoolValue> {
     private static readonly pb::MessageParser<BoolValue> _parser = new pb::MessageParser<BoolValue>(() => new BoolValue());
@@ -841,7 +841,7 @@
     public const int ValueFieldNumber = 1;
     private bool value_;
     /// <summary>
-    ///  The bool value.
+    /// The bool value.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public bool Value {
@@ -926,9 +926,9 @@
   }
 
   /// <summary>
-  ///  Wrapper message for `string`.
+  /// Wrapper message for `string`.
   ///
-  ///  The JSON representation for `StringValue` is JSON string.
+  /// The JSON representation for `StringValue` is JSON string.
   /// </summary>
   public sealed partial class StringValue : pb::IMessage<StringValue> {
     private static readonly pb::MessageParser<StringValue> _parser = new pb::MessageParser<StringValue>(() => new StringValue());
@@ -966,7 +966,7 @@
     public const int ValueFieldNumber = 1;
     private string value_ = "";
     /// <summary>
-    ///  The string value.
+    /// The string value.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public string Value {
@@ -1051,9 +1051,9 @@
   }
 
   /// <summary>
-  ///  Wrapper message for `bytes`.
+  /// Wrapper message for `bytes`.
   ///
-  ///  The JSON representation for `BytesValue` is JSON string.
+  /// The JSON representation for `BytesValue` is JSON string.
   /// </summary>
   public sealed partial class BytesValue : pb::IMessage<BytesValue> {
     private static readonly pb::MessageParser<BytesValue> _parser = new pb::MessageParser<BytesValue>(() => new BytesValue());
@@ -1091,7 +1091,7 @@
     public const int ValueFieldNumber = 1;
     private pb::ByteString value_ = pb::ByteString.Empty;
     /// <summary>
-    ///  The bytes value.
+    /// The bytes value.
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public pb::ByteString Value {
diff --git a/src/google/protobuf/compiler/csharp/csharp_doc_comment.cc b/src/google/protobuf/compiler/csharp/csharp_doc_comment.cc
index 587e022..636a76a 100644
--- a/src/google/protobuf/compiler/csharp/csharp_doc_comment.cc
+++ b/src/google/protobuf/compiler/csharp/csharp_doc_comment.cc
@@ -74,7 +74,7 @@
                 printer->Print("///\n");
             }
             last_was_empty = false;
-            printer->Print("/// $line$\n", "line", *it);
+            printer->Print("///$line$\n", "line", *it);
         }
     }
     printer->Print("/// </summary>\n");