context: // Generated by the protocol buffer compiler.  DO NOT EDIT!
  // source: google/protobuf/unittest_well_known_types.proto
  #pragma warning disable 1591, 0612, 3021
  #region Designer generated code
  
  using pb = global::Google.Protobuf;
  using pbc = global::Google.Protobuf.Collections;
  using pbr = global::Google.Protobuf.Reflection;
  using scg = global::System.Collections.Generic;
  namespace Google.Protobuf.TestProtos {
  
    /// <summary>Holder for reflection information generated from google/protobuf/unittest_well_known_types.proto</summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
    public static partial class UnittestWellKnownTypesReflection {
  
      #region Descriptor
      /// <summary>File descriptor for google/protobuf/unittest_well_known_types.proto</summary>
      public static pbr::FileDescriptor Descriptor {
        get { return descriptor; }
      }
      private static pbr::FileDescriptor descriptor;
  
      static UnittestWellKnownTypesReflection() {
        byte[] descriptorData = global::System.Convert.FromBase64String(
            string.Concat(
              "Ci9nb29nbGUvcHJvdG9idWYvdW5pdHRlc3Rfd2VsbF9rbm93bl90eXBlcy5w",
              "cm90bxIRcHJvdG9idWZfdW5pdHRlc3QaGWdvb2dsZS9wcm90b2J1Zi9hbnku",
              "cHJvdG8aGWdvb2dsZS9wcm90b2J1Zi9hcGkucHJvdG8aHmdvb2dsZS9wcm90",
              "b2J1Zi9kdXJhdGlvbi5wcm90bxobZ29vZ2xlL3Byb3RvYnVmL2VtcHR5LnBy",
              "b3RvGiBnb29nbGUvcHJvdG9idWYvZmllbGRfbWFzay5wcm90bxokZ29vZ2xl",
              "L3Byb3RvYnVmL3NvdXJjZV9jb250ZXh0LnByb3RvGhxnb29nbGUvcHJvdG9i",
              "dWYvc3RydWN0LnByb3RvGh9nb29nbGUvcHJvdG9idWYvdGltZXN0YW1wLnBy",
              "b3RvGhpnb29nbGUvcHJvdG9idWYvdHlwZS5wcm90bxoeZ29vZ2xlL3Byb3Rv",
              "YnVmL3dyYXBwZXJzLnByb3RvIr4HChJUZXN0V2VsbEtub3duVHlwZXMSJwoJ",
              "YW55X2ZpZWxkGAEgASgLMhQuZ29vZ2xlLnByb3RvYnVmLkFueRInCglhcGlf",
              "ZmllbGQYAiABKAsyFC5nb29nbGUucHJvdG9idWYuQXBpEjEKDmR1cmF0aW9u",
              "X2ZpZWxkGAMgASgLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uEisKC2Vt",
              "cHR5X2ZpZWxkGAQgASgLMhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5EjQKEGZp",
              "ZWxkX21hc2tfZmllbGQYBSABKAsyGi5nb29nbGUucHJvdG9idWYuRmllbGRN",
              "YXNrEjwKFHNvdXJjZV9jb250ZXh0X2ZpZWxkGAYgASgLMh4uZ29vZ2xlLnBy",
              "b3RvYnVmLlNvdXJjZUNvbnRleHQSLQoMc3RydWN0X2ZpZWxkGAcgASgLMhcu",
              "Z29vZ2xlLnByb3RvYnVmLlN0cnVjdBIzCg90aW1lc3RhbXBfZmllbGQYCCAB",
              "KAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEikKCnR5cGVfZmllbGQY",
              "CSABKAsyFS5nb29nbGUucHJvdG9idWYuVHlwZRIyCgxkb3VibGVfZmllbGQY",
              "CiABKAsyHC5nb29nbGUucHJvdG9idWYuRG91YmxlVmFsdWUSMAoLZmxvYXRf",
              "ZmllbGQYCyABKAsyGy5nb29nbGUucHJvdG9idWYuRmxvYXRWYWx1ZRIwCgtp",
              "bnQ2NF9maWVsZBgMIAEoCzIbLmdvb2dsZS5wcm90b2J1Zi5JbnQ2NFZhbHVl",
              "EjIKDHVpbnQ2NF9maWVsZBgNIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5VSW50",
              "NjRWYWx1ZRIwCgtpbnQzMl9maWVsZBgOIAEoCzIbLmdvb2dsZS5wcm90b2J1",
              "Zi5JbnQzMlZhbHVlEjIKDHVpbnQzMl9maWVsZBgPIAEoCzIcLmdvb2dsZS5w",
              "cm90b2J1Zi5VSW50MzJWYWx1ZRIuCgpib29sX2ZpZWxkGBAgASgLMhouZ29v",
              "Z2xlLnByb3RvYnVmLkJvb2xWYWx1ZRIyCgxzdHJpbmdfZmllbGQYESABKAsy",
              "HC5nb29nbGUucHJvdG9idWYuU3RyaW5nVmFsdWUSMAoLYnl0ZXNfZmllbGQY",
              "EiABKAsyGy5nb29nbGUucHJvdG9idWYuQnl0ZXNWYWx1ZRIrCgt2YWx1ZV9m",
              "aWVsZBgTIAEoCzIWLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZSKVBwoWUmVwZWF0",
              "ZWRXZWxsS25vd25UeXBlcxInCglhbnlfZmllbGQYASADKAsyFC5nb29nbGUu",
              "cHJvdG9idWYuQW55EicKCWFwaV9maWVsZBgCIAMoCzIULmdvb2dsZS5wcm90",
              "b2J1Zi5BcGkSMQoOZHVyYXRpb25fZmllbGQYAyADKAsyGS5nb29nbGUucHJv",
              "dG9idWYuRHVyYXRpb24SKwoLZW1wdHlfZmllbGQYBCADKAsyFi5nb29nbGUu",
              "cHJvdG9idWYuRW1wdHkSNAoQZmllbGRfbWFza19maWVsZBgFIAMoCzIaLmdv",
              "b2dsZS5wcm90b2J1Zi5GaWVsZE1hc2sSPAoUc291cmNlX2NvbnRleHRfZmll",
              "bGQYBiADKAsyHi5nb29nbGUucHJvdG9idWYuU291cmNlQ29udGV4dBItCgxz",
              "dHJ1Y3RfZmllbGQYByADKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0EjMK",
              "D3RpbWVzdGFtcF9maWVsZBgIIAMoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1l",
              "c3RhbXASKQoKdHlwZV9maWVsZBgJIAMoCzIVLmdvb2dsZS5wcm90b2J1Zi5U",
              "eXBlEjIKDGRvdWJsZV9maWVsZBgKIAMoCzIcLmdvb2dsZS5wcm90b2J1Zi5E",
              "b3VibGVWYWx1ZRIwCgtmbG9hdF9maWVsZBgLIAMoCzIbLmdvb2dsZS5wcm90",
              "b2J1Zi5GbG9hdFZhbHVlEjAKC2ludDY0X2ZpZWxkGAwgAygLMhsuZ29vZ2xl",
              "LnByb3RvYnVmLkludDY0VmFsdWUSMgoMdWludDY0X2ZpZWxkGA0gAygLMhwu",
              "Z29vZ2xlLnByb3RvYnVmLlVJbnQ2NFZhbHVlEjAKC2ludDMyX2ZpZWxkGA4g",
              "AygLMhsuZ29vZ2xlLnByb3RvYnVmLkludDMyVmFsdWUSMgoMdWludDMyX2Zp",
              "ZWxkGA8gAygLMhwuZ29vZ2xlLnByb3RvYnVmLlVJbnQzMlZhbHVlEi4KCmJv",
              "b2xfZmllbGQYECADKAsyGi5nb29nbGUucHJvdG9idWYuQm9vbFZhbHVlEjIK",
              "DHN0cmluZ19maWVsZBgRIAMoCzIcLmdvb2dsZS5wcm90b2J1Zi5TdHJpbmdW",
              "YWx1ZRIwCgtieXRlc19maWVsZBgSIAMoCzIbLmdvb2dsZS5wcm90b2J1Zi5C",
              "eXRlc1ZhbHVlIsUHChNPbmVvZldlbGxLbm93blR5cGVzEikKCWFueV9maWVs",
              "ZBgBIAEoCzIULmdvb2dsZS5wcm90b2J1Zi5BbnlIABIpCglhcGlfZmllbGQY",
              "AiABKAsyFC5nb29nbGUucHJvdG9idWYuQXBpSAASMwoOZHVyYXRpb25fZmll",
              "bGQYAyABKAsyGS5nb29nbGUucHJvdG9idWYuRHVyYXRpb25IABItCgtlbXB0",
              "eV9maWVsZBgEIAEoCzIWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eUgAEjYKEGZp",
              "ZWxkX21hc2tfZmllbGQYBSABKAsyGi5nb29nbGUucHJvdG9idWYuRmllbGRN",
              "YXNrSAASPgoUc291cmNlX2NvbnRleHRfZmllbGQYBiABKAsyHi5nb29nbGUu",
              "cHJvdG9idWYuU291cmNlQ29udGV4dEgAEi8KDHN0cnVjdF9maWVsZBgHIAEo",
              "CzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3RIABI1Cg90aW1lc3RhbXBfZmll",
              "bGQYCCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wSAASKwoKdHlw",
              "ZV9maWVsZBgJIAEoCzIVLmdvb2dsZS5wcm90b2J1Zi5UeXBlSAASNAoMZG91",
              "YmxlX2ZpZWxkGAogASgLMhwuZ29vZ2xlLnByb3RvYnVmLkRvdWJsZVZhbHVl",
              "SAASMgoLZmxvYXRfZmllbGQYCyABKAsyGy5nb29nbGUucHJvdG9idWYuRmxv",
              "YXRWYWx1ZUgAEjIKC2ludDY0X2ZpZWxkGAwgASgLMhsuZ29vZ2xlLnByb3Rv",
              "YnVmLkludDY0VmFsdWVIABI0Cgx1aW50NjRfZmllbGQYDSABKAsyHC5nb29n",
              "bGUucHJvdG9idWYuVUludDY0VmFsdWVIABIyCgtpbnQzMl9maWVsZBgOIAEo",
              "CzIbLmdvb2dsZS5wcm90b2J1Zi5JbnQzMlZhbHVlSAASNAoMdWludDMyX2Zp",
              "ZWxkGA8gASgLMhwuZ29vZ2xlLnByb3RvYnVmLlVJbnQzMlZhbHVlSAASMAoK",
              "Ym9vbF9maWVsZBgQIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5Cb29sVmFsdWVI",
              "ABI0CgxzdHJpbmdfZmllbGQYESABKAsyHC5nb29nbGUucHJvdG9idWYuU3Ry",
              "aW5nVmFsdWVIABIyCgtieXRlc19maWVsZBgSIAEoCzIbLmdvb2dsZS5wcm90",
              "b2J1Zi5CeXRlc1ZhbHVlSABCDQoLb25lb2ZfZmllbGQilhYKEU1hcFdlbGxL",
              "bm93blR5cGVzEkUKCWFueV9maWVsZBgBIAMoCzIyLnByb3RvYnVmX3VuaXR0",
              "ZXN0Lk1hcFdlbGxLbm93blR5cGVzLkFueUZpZWxkRW50cnkSRQoJYXBpX2Zp",
              "ZWxkGAIgAygLMjIucHJvdG9idWZfdW5pdHRlc3QuTWFwV2VsbEtub3duVHlw",
              "ZXMuQXBpRmllbGRFbnRyeRJPCg5kdXJhdGlvbl9maWVsZBgDIAMoCzI3LnBy",
              "b3RvYnVmX3VuaXR0ZXN0Lk1hcFdlbGxLbm93blR5cGVzLkR1cmF0aW9uRmll",
              "bGRFbnRyeRJJCgtlbXB0eV9maWVsZBgEIAMoCzI0LnByb3RvYnVmX3VuaXR0",
              "ZXN0Lk1hcFdlbGxLbm93blR5cGVzLkVtcHR5RmllbGRFbnRyeRJSChBmaWVs",
              "ZF9tYXNrX2ZpZWxkGAUgAygLMjgucHJvdG9idWZfdW5pdHRlc3QuTWFwV2Vs",
              "bEtub3duVHlwZXMuRmllbGRNYXNrRmllbGRFbnRyeRJaChRzb3VyY2VfY29u",
              "dGV4dF9maWVsZBgGIAMoCzI8LnByb3RvYnVmX3VuaXR0ZXN0Lk1hcFdlbGxL",
              "bm93blR5cGVzLlNvdXJjZUNvbnRleHRGaWVsZEVudHJ5EksKDHN0cnVjdF9m",
              "aWVsZBgHIAMoCzI1LnByb3RvYnVmX3VuaXR0ZXN0Lk1hcFdlbGxLbm93blR5",
              "cGVzLlN0cnVjdEZpZWxkRW50cnkSUQoPdGltZXN0YW1wX2ZpZWxkGAggAygL",
              "MjgucHJvdG9idWZfdW5pdHRlc3QuTWFwV2VsbEtub3duVHlwZXMuVGltZXN0",
              "YW1wRmllbGRFbnRyeRJHCgp0eXBlX2ZpZWxkGAkgAygLMjMucHJvdG9idWZf",
              "dW5pdHRlc3QuTWFwV2VsbEtub3duVHlwZXMuVHlwZUZpZWxkRW50cnkSSwoM",
              "ZG91YmxlX2ZpZWxkGAogAygLMjUucHJvdG9idWZfdW5pdHRlc3QuTWFwV2Vs",
              "bEtub3duVHlwZXMuRG91YmxlRmllbGRFbnRyeRJJCgtmbG9hdF9maWVsZBgL",
              "IAMoCzI0LnByb3RvYnVmX3VuaXR0ZXN0Lk1hcFdlbGxLbm93blR5cGVzLkZs",
              "b2F0RmllbGRFbnRyeRJJCgtpbnQ2NF9maWVsZBgMIAMoCzI0LnByb3RvYnVm",
              "X3VuaXR0ZXN0Lk1hcFdlbGxLbm93blR5cGVzLkludDY0RmllbGRFbnRyeRJL",
              "Cgx1aW50NjRfZmllbGQYDSADKAsyNS5wcm90b2J1Zl91bml0dGVzdC5NYXBX",
              "ZWxsS25vd25UeXBlcy5VaW50NjRGaWVsZEVudHJ5EkkKC2ludDMyX2ZpZWxk",
              "GA4gAygLMjQucHJvdG9idWZfdW5pdHRlc3QuTWFwV2VsbEtub3duVHlwZXMu",
              "SW50MzJGaWVsZEVudHJ5EksKDHVpbnQzMl9maWVsZBgPIAMoCzI1LnByb3Rv",
              "YnVmX3VuaXR0ZXN0Lk1hcFdlbGxLbm93blR5cGVzLlVpbnQzMkZpZWxkRW50",
              "cnkSRwoKYm9vbF9maWVsZBgQIAMoCzIzLnByb3RvYnVmX3VuaXR0ZXN0Lk1h",
              "cFdlbGxLbm93blR5cGVzLkJvb2xGaWVsZEVudHJ5EksKDHN0cmluZ19maWVs",
              "ZBgRIAMoCzI1LnByb3RvYnVmX3VuaXR0ZXN0Lk1hcFdlbGxLbm93blR5cGVz",
              "LlN0cmluZ0ZpZWxkRW50cnkSSQoLYnl0ZXNfZmllbGQYEiADKAsyNC5wcm90",
              "b2J1Zl91bml0dGVzdC5NYXBXZWxsS25vd25UeXBlcy5CeXRlc0ZpZWxkRW50",
              "cnkaRQoNQW55RmllbGRFbnRyeRILCgNrZXkYASABKAUSIwoFdmFsdWUYAiAB",
              "KAsyFC5nb29nbGUucHJvdG9idWYuQW55OgI4ARpFCg1BcGlGaWVsZEVudHJ5",
              "EgsKA2tleRgBIAEoBRIjCgV2YWx1ZRgCIAEoCzIULmdvb2dsZS5wcm90b2J1",
              "Zi5BcGk6AjgBGk8KEkR1cmF0aW9uRmllbGRFbnRyeRILCgNrZXkYASABKAUS",
              "KAoFdmFsdWUYAiABKAsyGS5nb29nbGUucHJvdG9idWYuRHVyYXRpb246AjgB",
              "GkkKD0VtcHR5RmllbGRFbnRyeRILCgNrZXkYASABKAUSJQoFdmFsdWUYAiAB",
              "KAsyFi5nb29nbGUucHJvdG9idWYuRW1wdHk6AjgBGlEKE0ZpZWxkTWFza0Zp",
              "ZWxkRW50cnkSCwoDa2V5GAEgASgFEikKBXZhbHVlGAIgASgLMhouZ29vZ2xl",
              "LnByb3RvYnVmLkZpZWxkTWFzazoCOAEaWQoXU291cmNlQ29udGV4dEZpZWxk",
              "RW50cnkSCwoDa2V5GAEgASgFEi0KBXZhbHVlGAIgASgLMh4uZ29vZ2xlLnBy",
              "b3RvYnVmLlNvdXJjZUNvbnRleHQ6AjgBGksKEFN0cnVjdEZpZWxkRW50cnkS",
              "CwoDa2V5GAEgASgFEiYKBXZhbHVlGAIgASgLMhcuZ29vZ2xlLnByb3RvYnVm",
              "LlN0cnVjdDoCOAEaUQoTVGltZXN0YW1wRmllbGRFbnRyeRILCgNrZXkYASAB",
              "KAUSKQoFdmFsdWUYAiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1w",
              "OgI4ARpHCg5UeXBlRmllbGRFbnRyeRILCgNrZXkYASABKAUSJAoFdmFsdWUY",
              "AiABKAsyFS5nb29nbGUucHJvdG9idWYuVHlwZToCOAEaUAoQRG91YmxlRmll",
              "bGRFbnRyeRILCgNrZXkYASABKAUSKwoFdmFsdWUYAiABKAsyHC5nb29nbGUu",
              "cHJvdG9idWYuRG91YmxlVmFsdWU6AjgBGk4KD0Zsb2F0RmllbGRFbnRyeRIL",
              "CgNrZXkYASABKAUSKgoFdmFsdWUYAiABKAsyGy5nb29nbGUucHJvdG9idWYu",
              "RmxvYXRWYWx1ZToCOAEaTgoPSW50NjRGaWVsZEVudHJ5EgsKA2tleRgBIAEo",
              "BRIqCgV2YWx1ZRgCIAEoCzIbLmdvb2dsZS5wcm90b2J1Zi5JbnQ2NFZhbHVl",
              "OgI4ARpQChBVaW50NjRGaWVsZEVudHJ5EgsKA2tleRgBIAEoBRIrCgV2YWx1",
              "ZRgCIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5VSW50NjRWYWx1ZToCOAEaTgoP",
              "SW50MzJGaWVsZEVudHJ5EgsKA2tleRgBIAEoBRIqCgV2YWx1ZRgCIAEoCzIb",
              "Lmdvb2dsZS5wcm90b2J1Zi5JbnQzMlZhbHVlOgI4ARpQChBVaW50MzJGaWVs",
              "ZEVudHJ5EgsKA2tleRgBIAEoBRIrCgV2YWx1ZRgCIAEoCzIcLmdvb2dsZS5w",
              "cm90b2J1Zi5VSW50MzJWYWx1ZToCOAEaTAoOQm9vbEZpZWxkRW50cnkSCwoD",
              "a2V5GAEgASgFEikKBXZhbHVlGAIgASgLMhouZ29vZ2xlLnByb3RvYnVmLkJv",
              "b2xWYWx1ZToCOAEaUAoQU3RyaW5nRmllbGRFbnRyeRILCgNrZXkYASABKAUS",
              "KwoFdmFsdWUYAiABKAsyHC5nb29nbGUucHJvdG9idWYuU3RyaW5nVmFsdWU6",
              "AjgBGk4KD0J5dGVzRmllbGRFbnRyeRILCgNrZXkYASABKAUSKgoFdmFsdWUY",
              "AiABKAsyGy5nb29nbGUucHJvdG9idWYuQnl0ZXNWYWx1ZToCOAFCOQoYY29t",
              "Lmdvb2dsZS5wcm90b2J1Zi50ZXN0UAGqAhpHb29nbGUuUHJvdG9idWYuVGVz",
              "dFByb3Rvc2IGcHJvdG8z"));
        descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
            new pbr::FileDescriptor[] { global::Google.Protobuf.WellKnownTypes.AnyReflection.Descriptor, global::Google.Protobuf.WellKnownTypes.ApiReflection.Descriptor, global::Google.Protobuf.WellKnownTypes.DurationReflection.Descriptor, global::Google.Protobuf.WellKnownTypes.EmptyReflection.Descriptor, global::Google.Protobuf.WellKnownTypes.FieldMaskReflection.Descriptor, global::Google.Protobuf.WellKnownTypes.SourceContextReflection.Descriptor, global::Google.Protobuf.WellKnownTypes.StructReflection.Descriptor, global::Google.Protobuf.WellKnownTypes.TimestampReflection.Descriptor, global::Google.Protobuf.WellKnownTypes.TypeReflection.Descriptor, global::Google.Protobuf.WellKnownTypes.WrappersReflection.Descriptor, },
            new pbr::GeneratedClrTypeInfo(null, new pbr::GeneratedClrTypeInfo[] {
              new pbr::GeneratedClrTypeInfo(typeof(global::Google.Protobuf.TestProtos.TestWellKnownTypes), global::Google.Protobuf.TestProtos.TestWellKnownTypes.Parser, new[]{ "AnyField", "ApiField", "DurationField", "EmptyField", "FieldMaskField", "SourceContextField", "StructField", "TimestampField", "TypeField", "DoubleField", "FloatField", "Int64Field", "Uint64Field", "Int32Field", "Uint32Field", "BoolField", "StringField", "BytesField", "ValueField" }, null, null, null),
              new pbr::GeneratedClrTypeInfo(typeof(global::Google.Protobuf.TestProtos.RepeatedWellKnownTypes), global::Google.Protobuf.TestProtos.RepeatedWellKnownTypes.Parser, new[]{ "AnyField", "ApiField", "DurationField", "EmptyField", "FieldMaskField", "SourceContextField", "StructField", "TimestampField", "TypeField", "DoubleField", "FloatField", "Int64Field", "Uint64Field", "Int32Field", "Uint32Field", "BoolField", "StringField", "BytesField" }, null, null, null),
              new pbr::GeneratedClrTypeInfo(typeof(global::Google.Protobuf.TestProtos.OneofWellKnownTypes), global::Google.Protobuf.TestProtos.OneofWellKnownTypes.Parser, new[]{ "AnyField", "ApiField", "DurationField", "EmptyField", "FieldMaskField", "SourceContextField", "StructField", "TimestampField", "TypeField", "DoubleField", "FloatField", "Int64Field", "Uint64Field", "Int32Field", "Uint32Field", "BoolField", "StringField", "BytesField" }, new[]{ "OneofField" }, null, null),
              new pbr::GeneratedClrTypeInfo(typeof(global::Google.Protobuf.TestProtos.MapWellKnownTypes), global::Google.Protobuf.TestProtos.MapWellKnownTypes.Parser, new[]{ "AnyField", "ApiField", "DurationField", "EmptyField", "FieldMaskField", "SourceContextField", "StructField", "TimestampField", "TypeField", "DoubleField", "FloatField", "Int64Field", "Uint64Field", "Int32Field", "Uint32Field", "BoolField", "StringField", "BytesField" }, null, null, new pbr::GeneratedClrTypeInfo[] { null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, })
            }));
      }
      #endregion
  
    }
    #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.
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
    public sealed partial class TestWellKnownTypes : pb::IMessage<TestWellKnownTypes> {
      private static readonly pb::MessageParser<TestWellKnownTypes> _parser = new pb::MessageParser<TestWellKnownTypes>(() => new TestWellKnownTypes());
      public static pb::MessageParser<TestWellKnownTypes> Parser { get { return _parser; } }
  
      public static pbr::MessageDescriptor Descriptor {
        get { return global::Google.Protobuf.TestProtos.UnittestWellKnownTypesReflection.Descriptor.MessageTypes[0]; }
      }
  
      pbr::MessageDescriptor pb::IMessage.Descriptor {
        get { return Descriptor; }
      }
  
      public TestWellKnownTypes() {
        OnConstruction();
      }
  
      partial void OnConstruction();
  
      public TestWellKnownTypes(TestWellKnownTypes other) : this() {
        AnyField = other.anyField_ != null ? other.AnyField.Clone() : null;
        ApiField = other.apiField_ != null ? other.ApiField.Clone() : null;
        DurationField = other.durationField_ != null ? other.DurationField.Clone() : null;
        EmptyField = other.emptyField_ != null ? other.EmptyField.Clone() : null;
        FieldMaskField = other.fieldMaskField_ != null ? other.FieldMaskField.Clone() : null;
        SourceContextField = other.sourceContextField_ != null ? other.SourceContextField.Clone() : null;
        StructField = other.structField_ != null ? other.StructField.Clone() : null;
        TimestampField = other.timestampField_ != null ? other.TimestampField.Clone() : null;
        TypeField = other.typeField_ != null ? other.TypeField.Clone() : null;
        DoubleField = other.DoubleField;
        FloatField = other.FloatField;
        Int64Field = other.Int64Field;
        Uint64Field = other.Uint64Field;
        Int32Field = other.Int32Field;
        Uint32Field = other.Uint32Field;
        BoolField = other.BoolField;
        StringField = other.StringField;
        BytesField = other.BytesField;
        ValueField = other.valueField_ != null ? other.ValueField.Clone() : null;
      }
  
      public TestWellKnownTypes Clone() {
        return new TestWellKnownTypes(this);
      }
  
      /// <summary>Field number for the "any_field" field.</summary>
      public const int AnyFieldFieldNumber = 1;
      private global::Google.Protobuf.WellKnownTypes.Any anyField_;
      public global::Google.Protobuf.WellKnownTypes.Any AnyField {
        get { return anyField_; }
        set {
          anyField_ = value;
        }
      }
  
      /// <summary>Field number for the "api_field" field.</summary>
      public const int ApiFieldFieldNumber = 2;
      private global::Google.Protobuf.WellKnownTypes.Api apiField_;
      public global::Google.Protobuf.WellKnownTypes.Api ApiField {
        get { return apiField_; }
        set {
          apiField_ = value;
        }
      }
  
      /// <summary>Field number for the "duration_field" field.</summary>
      public const int DurationFieldFieldNumber = 3;
      private global::Google.Protobuf.WellKnownTypes.Duration durationField_;
      public global::Google.Protobuf.WellKnownTypes.Duration DurationField {
        get { return durationField_; }
        set {
          durationField_ = value;
        }
      }
  
      /// <summary>Field number for the "empty_field" field.</summary>
      public const int EmptyFieldFieldNumber = 4;
      private global::Google.Protobuf.WellKnownTypes.Empty emptyField_;
      public global::Google.Protobuf.WellKnownTypes.Empty EmptyField {
        get { return emptyField_; }
        set {
          emptyField_ = value;
        }
      }
  
      /// <summary>Field number for the "field_mask_field" field.</summary>
      public const int FieldMaskFieldFieldNumber = 5;
      private global::Google.Protobuf.WellKnownTypes.FieldMask fieldMaskField_;
      public global::Google.Protobuf.WellKnownTypes.FieldMask FieldMaskField {
        get { return fieldMaskField_; }
        set {
          fieldMaskField_ = value;
        }
      }
  
      /// <summary>Field number for the "source_context_field" field.</summary>
      public const int SourceContextFieldFieldNumber = 6;
      private global::Google.Protobuf.WellKnownTypes.SourceContext sourceContextField_;
      public global::Google.Protobuf.WellKnownTypes.SourceContext SourceContextField {
        get { return sourceContextField_; }
        set {
          sourceContextField_ = value;
        }
      }
  
      /// <summary>Field number for the "struct_field" field.</summary>
      public const int StructFieldFieldNumber = 7;
      private global::Google.Protobuf.WellKnownTypes.Struct structField_;
      public global::Google.Protobuf.WellKnownTypes.Struct StructField {
        get { return structField_; }
        set {
          structField_ = value;
        }
      }
  
      /// <summary>Field number for the "timestamp_field" field.</summary>
      public const int TimestampFieldFieldNumber = 8;
      private global::Google.Protobuf.WellKnownTypes.Timestamp timestampField_;
      public global::Google.Protobuf.WellKnownTypes.Timestamp TimestampField {
        get { return timestampField_; }
        set {
          timestampField_ = value;
        }
      }
  
      /// <summary>Field number for the "type_field" field.</summary>
      public const int TypeFieldFieldNumber = 9;
      private global::Google.Protobuf.WellKnownTypes.Type typeField_;
      public global::Google.Protobuf.WellKnownTypes.Type TypeField {
        get { return typeField_; }
        set {
          typeField_ = value;
        }
      }
  
      /// <summary>Field number for the "double_field" field.</summary>
      public const int DoubleFieldFieldNumber = 10;
      private static readonly pb::FieldCodec<double?> _single_doubleField_codec = pb::FieldCodec.ForStructWrapper<double>(82);
      private double? doubleField_;
      public double? DoubleField {
        get { return doubleField_; }
        set {
          doubleField_ = value;
        }
      }
  
      /// <summary>Field number for the "float_field" field.</summary>
      public const int FloatFieldFieldNumber = 11;
      private static readonly pb::FieldCodec<float?> _single_floatField_codec = pb::FieldCodec.ForStructWrapper<float>(90);
      private float? floatField_;
      public float? FloatField {
        get { return floatField_; }
        set {
          floatField_ = value;
        }
      }
  
      /// <summary>Field number for the "int64_field" field.</summary>
      public const int Int64FieldFieldNumber = 12;
      private static readonly pb::FieldCodec<long?> _single_int64Field_codec = pb::FieldCodec.ForStructWrapper<long>(98);
      private long? int64Field_;
      public long? Int64Field {
        get { return int64Field_; }
        set {
          int64Field_ = value;
        }
      }
  
      /// <summary>Field number for the "uint64_field" field.</summary>
      public const int Uint64FieldFieldNumber = 13;
      private static readonly pb::FieldCodec<ulong?> _single_uint64Field_codec = pb::FieldCodec.ForStructWrapper<ulong>(106);
      private ulong? uint64Field_;
      public ulong? Uint64Field {
        get { return uint64Field_; }
        set {
          uint64Field_ = value;
        }
      }
  
      /// <summary>Field number for the "int32_field" field.</summary>
      public const int Int32FieldFieldNumber = 14;
      private static readonly pb::FieldCodec<int?> _single_int32Field_codec = pb::FieldCodec.ForStructWrapper<int>(114);
      private int? int32Field_;
      public int? Int32Field {
        get { return int32Field_; }
        set {
          int32Field_ = value;
        }
      }
  
      /// <summary>Field number for the "uint32_field" field.</summary>
      public const int Uint32FieldFieldNumber = 15;
      private static readonly pb::FieldCodec<uint?> _single_uint32Field_codec = pb::FieldCodec.ForStructWrapper<uint>(122);
      private uint? uint32Field_;
      public uint? Uint32Field {
        get { return uint32Field_; }
        set {
          uint32Field_ = value;
        }
      }
  
      /// <summary>Field number for the "bool_field" field.</summary>
      public const int BoolFieldFieldNumber = 16;
      private static readonly pb::FieldCodec<bool?> _single_boolField_codec = pb::FieldCodec.ForStructWrapper<bool>(130);
      private bool? boolField_;
      public bool? BoolField {
        get { return boolField_; }
        set {
          boolField_ = value;
        }
      }
  
      /// <summary>Field number for the "string_field" field.</summary>
      public const int StringFieldFieldNumber = 17;
      private static readonly pb::FieldCodec<string> _single_stringField_codec = pb::FieldCodec.ForClassWrapper<string>(138);
      private string stringField_;
      public string StringField {
        get { return stringField_; }
        set {
          stringField_ = value;
        }
      }
  
      /// <summary>Field number for the "bytes_field" field.</summary>
      public const int BytesFieldFieldNumber = 18;
      private static readonly pb::FieldCodec<pb::ByteString> _single_bytesField_codec = pb::FieldCodec.ForClassWrapper<pb::ByteString>(146);
      private pb::ByteString bytesField_;
      public pb::ByteString BytesField {
        get { return bytesField_; }
        set {
          bytesField_ = value;
        }
      }
  
      /// <summary>Field number for the "value_field" field.</summary>
      public const int ValueFieldFieldNumber = 19;
      private global::Google.Protobuf.WellKnownTypes.Value valueField_;
      /// <summary>
      ///  Part of struct, but useful to be able to test separately
      /// </summary>
      public global::Google.Protobuf.WellKnownTypes.Value ValueField {
        get { return valueField_; }
        set {
          valueField_ = value;
        }
      }
  
      public override bool Equals(object other) {
        return Equals(other as TestWellKnownTypes);
      }
  
      public bool Equals(TestWellKnownTypes other) {
        if (ReferenceEquals(other, null)) {
          return false;
        }
        if (ReferenceEquals(other, this)) {
          return true;
        }
        if (!object.Equals(AnyField, other.AnyField)) return false;
        if (!object.Equals(ApiField, other.ApiField)) return false;
        if (!object.Equals(DurationField, other.DurationField)) return false;
        if (!object.Equals(EmptyField, other.EmptyField)) return false;
        if (!object.Equals(FieldMaskField, other.FieldMaskField)) return false;
        if (!object.Equals(SourceContextField, other.SourceContextField)) return false;
        if (!object.Equals(StructField, other.StructField)) return false;
        if (!object.Equals(TimestampField, other.TimestampField)) return false;
        if (!object.Equals(TypeField, other.TypeField)) return false;
        if (DoubleField != other.DoubleField) return false;
        if (FloatField != other.FloatField) return false;
        if (Int64Field != other.Int64Field) return false;
        if (Uint64Field != other.Uint64Field) return false;
        if (Int32Field != other.Int32Field) return false;
        if (Uint32Field != other.Uint32Field) return false;
        if (BoolField != other.BoolField) return false;
        if (StringField != other.StringField) return false;
        if (BytesField != other.BytesField) return false;
        if (!object.Equals(ValueField, other.ValueField)) return false;
        return true;
      }
  
      public override int GetHashCode() {
        int hash = 1;
        if (anyField_ != null) hash ^= AnyField.GetHashCode();
        if (apiField_ != null) hash ^= ApiField.GetHashCode();
        if (durationField_ != null) hash ^= DurationField.GetHashCode();
        if (emptyField_ != null) hash ^= EmptyField.GetHashCode();
        if (fieldMaskField_ != null) hash ^= FieldMaskField.GetHashCode();
        if (sourceContextField_ != null) hash ^= SourceContextField.GetHashCode();
        if (structField_ != null) hash ^= StructField.GetHashCode();
        if (timestampField_ != null) hash ^= TimestampField.GetHashCode();
        if (typeField_ != null) hash ^= TypeField.GetHashCode();
        if (doubleField_ != null) hash ^= DoubleField.GetHashCode();
        if (floatField_ != null) hash ^= FloatField.GetHashCode();
        if (int64Field_ != null) hash ^= Int64Field.GetHashCode();
        if (uint64Field_ != null) hash ^= Uint64Field.GetHashCode();
        if (int32Field_ != null) hash ^= Int32Field.GetHashCode();
        if (uint32Field_ != null) hash ^= Uint32Field.GetHashCode();
        if (boolField_ != null) hash ^= BoolField.GetHashCode();
        if (stringField_ != null) hash ^= StringField.GetHashCode();
        if (bytesField_ != null) hash ^= BytesField.GetHashCode();
        if (valueField_ != null) hash ^= ValueField.GetHashCode();
        return hash;
      }
  
      public override string ToString() {
        return pb::JsonFormatter.ToDiagnosticString(this);
      }
  
      public void WriteTo(pb::CodedOutputStream output) {
        if (anyField_ != null) {
          output.WriteRawTag(10);
          output.WriteMessage(AnyField);
        }
        if (apiField_ != null) {
          output.WriteRawTag(18);
          output.WriteMessage(ApiField);
        }
        if (durationField_ != null) {
          output.WriteRawTag(26);
          output.WriteMessage(DurationField);
        }
        if (emptyField_ != null) {
          output.WriteRawTag(34);
          output.WriteMessage(EmptyField);
        }
        if (fieldMaskField_ != null) {
          output.WriteRawTag(42);
          output.WriteMessage(FieldMaskField);
        }
        if (sourceContextField_ != null) {
          output.WriteRawTag(50);
          output.WriteMessage(SourceContextField);
        }
        if (structField_ != null) {
          output.WriteRawTag(58);
          output.WriteMessage(StructField);
        }
        if (timestampField_ != null) {
          output.WriteRawTag(66);
          output.WriteMessage(TimestampField);
        }
        if (typeField_ != null) {
          output.WriteRawTag(74);
          output.WriteMessage(TypeField);
        }
        if (doubleField_ != null) {
          _single_doubleField_codec.WriteTagAndValue(output, DoubleField);
        }
        if (floatField_ != null) {
          _single_floatField_codec.WriteTagAndValue(output, FloatField);
        }
        if (int64Field_ != null) {
          _single_int64Field_codec.WriteTagAndValue(output, Int64Field);
        }
        if (uint64Field_ != null) {
          _single_uint64Field_codec.WriteTagAndValue(output, Uint64Field);
        }
        if (int32Field_ != null) {
          _single_int32Field_codec.WriteTagAndValue(output, Int32Field);
        }
        if (uint32Field_ != null) {
          _single_uint32Field_codec.WriteTagAndValue(output, Uint32Field);
        }
        if (boolField_ != null) {
          _single_boolField_codec.WriteTagAndValue(output, BoolField);
        }
        if (stringField_ != null) {
          _single_stringField_codec.WriteTagAndValue(output, StringField);
        }
        if (bytesField_ != null) {
          _single_bytesField_codec.WriteTagAndValue(output, BytesField);
        }
        if (valueField_ != null) {
          output.WriteRawTag(154, 1);
          output.WriteMessage(ValueField);
        }
      }
  
      public int CalculateSize() {
        int size = 0;
        if (anyField_ != null) {
          size += 1 + pb::CodedOutputStream.ComputeMessageSize(AnyField);
        }
        if (apiField_ != null) {
          size += 1 + pb::CodedOutputStream.ComputeMessageSize(ApiField);
        }
        if (durationField_ != null) {
          size += 1 + pb::CodedOutputStream.ComputeMessageSize(DurationField);
        }
        if (emptyField_ != null) {
          size += 1 + pb::CodedOutputStream.ComputeMessageSize(EmptyField);
        }
        if (fieldMaskField_ != null) {
          size += 1 + pb::CodedOutputStream.ComputeMessageSize(FieldMaskField);
        }
        if (sourceContextField_ != null) {
          size += 1 + pb::CodedOutputStream.ComputeMessageSize(SourceContextField);
        }
        if (structField_ != null) {
          size += 1 + pb::CodedOutputStream.ComputeMessageSize(StructField);
        }
        if (timestampField_ != null) {
          size += 1 + pb::CodedOutputStream.ComputeMessageSize(TimestampField);
        }
        if (typeField_ != null) {
          size += 1 + pb::CodedOutputStream.ComputeMessageSize(TypeField);
        }
        if (doubleField_ != null) {
          size += _single_doubleField_codec.CalculateSizeWithTag(DoubleField);
        }
        if (floatField_ != null) {
          size += _single_floatField_codec.CalculateSizeWithTag(FloatField);
        }
        if (int64Field_ != null) {
          size += _single_int64Field_codec.CalculateSizeWithTag(Int64Field);
        }
        if (uint64Field_ != null) {
          size += _single_uint64Field_codec.CalculateSizeWithTag(Uint64Field);
        }
        if (int32Field_ != null) {
          size += _single_int32Field_codec.CalculateSizeWithTag(Int32Field);
        }
        if (uint32Field_ != null) {
          size += _single_uint32Field_codec.CalculateSizeWithTag(Uint32Field);
        }
        if (boolField_ != null) {
          size += _single_boolField_codec.CalculateSizeWithTag(BoolField);
        }
        if (stringField_ != null) {
          size += _single_stringField_codec.CalculateSizeWithTag(StringField);
        }
        if (bytesField_ != null) {
          size += _single_bytesField_codec.CalculateSizeWithTag(BytesField);
        }
        if (valueField_ != null) {
          size += 2 + pb::CodedOutputStream.ComputeMessageSize(ValueField);
        }
        return size;
      }
  
      public void MergeFrom(TestWellKnownTypes other) {
        if (other == null) {
          return;
        }
        if (other.anyField_ != null) {
          if (anyField_ == null) {
            anyField_ = new global::Google.Protobuf.WellKnownTypes.Any();
          }
          AnyField.MergeFrom(other.AnyField);
        }
        if (other.apiField_ != null) {
          if (apiField_ == null) {
            apiField_ = new global::Google.Protobuf.WellKnownTypes.Api();
          }
          ApiField.MergeFrom(other.ApiField);
        }
        if (other.durationField_ != null) {
          if (durationField_ == null) {
            durationField_ = new global::Google.Protobuf.WellKnownTypes.Duration();
          }
          DurationField.MergeFrom(other.DurationField);
        }
        if (other.emptyField_ != null) {
          if (emptyField_ == null) {
            emptyField_ = new global::Google.Protobuf.WellKnownTypes.Empty();
          }
          EmptyField.MergeFrom(other.EmptyField);
        }
        if (other.fieldMaskField_ != null) {
          if (fieldMaskField_ == null) {
            fieldMaskField_ = new global::Google.Protobuf.WellKnownTypes.FieldMask();
          }
          FieldMaskField.MergeFrom(other.FieldMaskField);
        }
        if (other.sourceContextField_ != null) {
          if (sourceContextField_ == null) {
            sourceContextField_ = new global::Google.Protobuf.WellKnownTypes.SourceContext();
          }
          SourceContextField.MergeFrom(other.SourceContextField);
        }
        if (other.structField_ != null) {
          if (structField_ == null) {
            structField_ = new global::Google.Protobuf.WellKnownTypes.Struct();
          }
          StructField.MergeFrom(other.StructField);
        }
        if (other.timestampField_ != null) {
          if (timestampField_ == null) {
            timestampField_ = new global::Google.Protobuf.WellKnownTypes.Timestamp();
          }
          TimestampField.MergeFrom(other.TimestampField);
        }
        if (other.typeField_ != null) {
          if (typeField_ == null) {
            typeField_ = new global::Google.Protobuf.WellKnownTypes.Type();
          }
          TypeField.MergeFrom(other.TypeField);
        }
        if (other.doubleField_ != null) {
          if (doubleField_ == null || other.DoubleField != 0D) {
            DoubleField = other.DoubleField;
          }
        }
        if (other.floatField_ != null) {
          if (floatField_ == null || other.FloatField != 0F) {
            FloatField = other.FloatField;
          }
        }
        if (other.int64Field_ != null) {
          if (int64Field_ == null || other.Int64Field != 0L) {
            Int64Field = other.Int64Field;
          }
        }
        if (other.uint64Field_ != null) {
          if (uint64Field_ == null || other.Uint64Field != 0UL) {
            Uint64Field = other.Uint64Field;
          }
        }
        if (other.int32Field_ != null) {
          if (int32Field_ == null || other.Int32Field != 0) {
            Int32Field = other.Int32Field;
          }
        }
        if (other.uint32Field_ != null) {
          if (uint32Field_ == null || other.Uint32Field != 0) {
            Uint32Field = other.Uint32Field;
          }
        }
        if (other.boolField_ != null) {
          if (boolField_ == null || other.BoolField != false) {
            BoolField = other.BoolField;
          }
        }
        if (other.stringField_ != null) {
          if (stringField_ == null || other.StringField != "") {
            StringField = other.StringField;
          }
        }
        if (other.bytesField_ != null) {
          if (bytesField_ == null || other.BytesField != pb::ByteString.Empty) {
            BytesField = other.BytesField;
          }
        }
        if (other.valueField_ != null) {
          if (valueField_ == null) {
            valueField_ = new global::Google.Protobuf.WellKnownTypes.Value();
          }
          ValueField.MergeFrom(other.ValueField);
        }
      }
  
      public void MergeFrom(pb::CodedInputStream input) {
        uint tag;
        while ((tag = input.ReadTag()) != 0) {
          switch(tag) {
            default:
              input.SkipLastField();
              break;
            case 10: {
              if (anyField_ == null) {
                anyField_ = new global::Google.Protobuf.WellKnownTypes.Any();
              }
              input.ReadMessage(anyField_);
              break;
            }
            case 18: {
              if (apiField_ == null) {
  
gt:               apiField_ = new global::Google.Protobuf.WellKnownTypes.Api();