text:
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.Ads.GoogleAds.V11.Common {

  /// Holder for reflection information generated from google/ads/googleads/v11/common/keyword_plan_common.proto
  public static partial class KeywordPlanCommonReflection {

    #region Descriptor
    /// File descriptor for google/ads/googleads/v11/common/keyword_plan_common.proto
    public static pbr::FileDescriptor Descriptor {
      get { return descriptor; }
    }
    private static pbr::FileDescriptor descriptor;

    static KeywordPlanCommonReflection() {
      byte[] descriptorData = global::System.Convert.FromBase64String(
          string.Concat(
            "Cjlnb29nbGUvYWRzL2dvb2dsZWFkcy92MTEvY29tbW9uL2tleXdvcmRfcGxh",
            "bl9jb21tb24ucHJvdG8SH2dvb2dsZS5hZHMuZ29vZ2xlYWRzLnYxMS5jb21t",
            "b24aK2dvb2dsZS9hZHMvZ29vZ2xlYWRzL3YxMS9jb21tb24vZGF0ZXMucHJv",
            "dG8aK2dvb2dsZS9hZHMvZ29vZ2xlYWRzL3YxMS9lbnVtcy9kZXZpY2UucHJv",
            "dG8aR2dvb2dsZS9hZHMvZ29vZ2xlYWRzL3YxMS9lbnVtcy9rZXl3b3JkX3Bs",
            "YW5fYWdncmVnYXRlX21ldHJpY190eXBlLnByb3RvGkNnb29nbGUvYWRzL2dv",
            "b2dsZWFkcy92MTEvZW51bXMva2V5d29yZF9wbGFuX2NvbXBldGl0aW9uX2xl",
            "dmVsLnByb3RvGkRnb29nbGUvYWRzL2dvb2dsZWFkcy92MTEvZW51bXMva2V5",
            "d29yZF9wbGFuX2NvbmNlcHRfZ3JvdXBfdHlwZS5wcm90bxoyZ29vZ2xlL2Fk",
            "cy9nb29nbGVhZHMvdjExL2VudW1zL21vbnRoX29mX3llYXIucHJvdG8iogQK",
            "HEtleXdvcmRQbGFuSGlzdG9yaWNhbE1ldHJpY3MSIQoUYXZnX21vbnRobHlf",
            "c2VhcmNoZXMYByABKANIAIgBARJUChZtb250aGx5X3NlYXJjaF92b2x1bWVz",
            "GAYgAygLMjQuZ29vZ2xlLmFkcy5nb29nbGVhZHMudjExLmNvbW1vbi5Nb250",
            "aGx5U2VhcmNoVm9sdW1lEnAKC2NvbXBldGl0aW9uGAIgASgOMlsuZ29vZ2xl",
            "LmFkcy5nb29nbGVhZHMudjExLmVudW1zLktleXdvcmRQbGFuQ29tcGV0aXRp",
            "b25MZXZlbEVudW0uS2V5d29yZFBsYW5Db21wZXRpdGlvbkxldmVsEh4KEWNv",
            "bXBldGl0aW9uX2luZGV4GAggASgDSAGIAQESJwoabG93X3RvcF9vZl9wYWdl",
            "X2JpZF9taWNyb3MYCSABKANIAogBARIoChtoaWdoX3RvcF9vZl9wYWdlX2Jp",
            "ZF9taWNyb3MYCiABKANIA4gBARIfChJhdmVyYWdlX2NwY19taWNyb3MYCyAB",
            "KANIBIgBAUIXChVfYXZnX21vbnRobHlfc2VhcmNoZXNCFAoSX2NvbXBldGl0",
            "aW9uX2luZGV4Qh0KG19sb3dfdG9wX29mX3BhZ2VfYmlkX21pY3Jvc0IeChxf",
            "aGlnaF90b3Bfb2ZfcGFnZV9iaWRfbWljcm9zQhUKE19hdmVyYWdlX2NwY19t",
            "aWNyb3MinAEKGEhpc3RvcmljYWxNZXRyaWNzT3B0aW9ucxJOChB5ZWFyX21v",
            "bnRoX3JhbmdlGAEgASgLMi8uZ29vZ2xlLmFkcy5nb29nbGVhZHMudjExLmNv",
            "bW1vbi5ZZWFyTW9udGhSYW5nZUgAiAEBEhsKE2luY2x1ZGVfYXZlcmFnZV9j",
            "cGMYAiABKAhCEwoRX3llYXJfbW9udGhfcmFuZ2UisQEKE01vbnRobHlTZWFy",
            "Y2hWb2x1bWUSEQoEeWVhchgEIAEoA0gAiAEBEkoKBW1vbnRoGAIgASgOMjsu",
            "Z29vZ2xlLmFkcy5nb29nbGVhZHMudjExLmVudW1zLk1vbnRoT2ZZZWFyRW51",
            "bS5Nb250aE9mWWVhchIdChBtb250aGx5X3NlYXJjaGVzGAUgASgDSAGIAQFC",
            "BwoFX3llYXJCEwoRX21vbnRobHlfc2VhcmNoZXMioQEKG0tleXdvcmRQbGFu",
            "QWdncmVnYXRlTWV0cmljcxKBAQoWYWdncmVnYXRlX21ldHJpY190eXBlcxgB",
            "IAMoDjJhLmdvb2dsZS5hZHMuZ29vZ2xlYWRzLnYxMS5lbnVtcy5LZXl3b3Jk",
            "UGxhbkFnZ3JlZ2F0ZU1ldHJpY1R5cGVFbnVtLktleXdvcmRQbGFuQWdncmVn",
            "YXRlTWV0cmljVHlwZSJ4CiFLZXl3b3JkUGxhbkFnZ3JlZ2F0ZU1ldHJpY1Jl",
            "c3VsdHMSUwoPZGV2aWNlX3NlYXJjaGVzGAEgAygLMjouZ29vZ2xlLmFkcy5n",
            "b29nbGVhZHMudjExLmNvbW1vbi5LZXl3b3JkUGxhbkRldmljZVNlYXJjaGVz",
            "IooBChlLZXl3b3JkUGxhbkRldmljZVNlYXJjaGVzEkEKBmRldmljZRgBIAEo",
            "DjIxLmdvb2dsZS5hZHMuZ29vZ2xlYWRzLnYxMS5lbnVtcy5EZXZpY2VFbnVt",
            "LkRldmljZRIZCgxzZWFyY2hfY291bnQYAiABKANIAIgBAUIPCg1fc2VhcmNo",
            "X2NvdW50IlcKEktleXdvcmRBbm5vdGF0aW9ucxJBCghjb25jZXB0cxgBIAMo",
            "CzIvLmdvb2dsZS5hZHMuZ29vZ2xlYWRzLnYxMS5jb21tb24uS2V5d29yZENv",
            "bmNlcHQiZAoOS2V5d29yZENvbmNlcHQSDAoEbmFtZRgBIAEoCRJECg1jb25j",
            "ZXB0X2dyb3VwGAIgASgLMi0uZ29vZ2xlLmFkcy5nb29nbGVhZHMudjExLmNv",
            "bW1vbi5Db25jZXB0R3JvdXAihwEKDENvbmNlcHRHcm91cBIMCgRuYW1lGAEg",
            "ASgJEmkKBHR5cGUYAiABKA4yWy5nb29nbGUuYWRzLmdvb2dsZWFkcy52MTEu",
            "ZW51bXMuS2V5d29yZFBsYW5Db25jZXB0R3JvdXBUeXBlRW51bS5LZXl3b3Jk",
            "UGxhbkNvbmNlcHRHcm91cFR5cGVC9gEKI2NvbS5nb29nbGUuYWRzLmdvb2ds",
            "ZWFkcy52MTEuY29tbW9uQhZLZXl3b3JkUGxhbkNvbW1vblByb3RvUAFaRWdv",
            "b2dsZS5nb2xhbmcub3JnL2dlbnByb3RvL2dvb2dsZWFwaXMvYWRzL2dvb2ds",
            "ZWFkcy92MTEvY29tbW9uO2NvbW1vbqICA0dBQaoCH0dvb2dsZS5BZHMuR29v",
            "Z2xlQWRzLlYxMS5Db21tb27KAh9Hb29nbGVcQWRzXEdvb2dsZUFkc1xWMTFc",
            "Q29tbW9u6gIjR29vZ2xlOjpBZHM6Okdvb2dsZUFkczo6VjExOjpDb21tb25i",
            "BnByb3RvMw=="));
      descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
          new pbr::FileDescriptor[] { global::Google.Ads.GoogleAds.V11.Common.DatesReflection.Descriptor, global::Google.Ads.GoogleAds.V11.Enums.DeviceReflection.Descriptor, global::Google.Ads.GoogleAds.V11.Enums.KeywordPlanAggregateMetricTypeReflection.Descriptor, global::Google.Ads.GoogleAds.V11.Enums.KeywordPlanCompetitionLevelReflection.Descriptor, global::Google.Ads.GoogleAds.V11.Enums.KeywordPlanConceptGroupTypeReflection.Descriptor, global::Google.Ads.GoogleAds.V11.Enums.MonthOfYearReflection.Descriptor, },
          new pbr::GeneratedClrTypeInfo(null, null, new pbr::GeneratedClrTypeInfo[] {
            new pbr::GeneratedClrTypeInfo(typeof(global::Google.Ads.GoogleAds.V11.Common.KeywordPlanHistoricalMetrics), global::Google.Ads.GoogleAds.V11.Common.KeywordPlanHistoricalMetrics.Parser, new[]{ "AvgMonthlySearches", "MonthlySearchVolumes", "Competition", "CompetitionIndex", "LowTopOfPageBidMicros", "HighTopOfPageBidMicros", "AverageCpcMicros" }, new[]{ "AvgMonthlySearches", "CompetitionIndex", "LowTopOfPageBidMicros", "HighTopOfPageBidMicros", "AverageCpcMicros" }, null, null, null),
            new pbr::GeneratedClrTypeInfo(typeof(global::Google.Ads.GoogleAds.V11.Common.HistoricalMetricsOptions), global::Google.Ads.GoogleAds.V11.Common.HistoricalMetricsOptions.Parser, new[]{ "YearMonthRange", "IncludeAverageCpc" }, new[]{ "YearMonthRange" }, null, null, null),
            new pbr::GeneratedClrTypeInfo(typeof(global::Google.Ads.GoogleAds.V11.Common.MonthlySearchVolume), global::Google.Ads.GoogleAds.V11.Common.MonthlySearchVolume.Parser, new[]{ "Year", "Month", "MonthlySearches" }, new[]{ "Year", "MonthlySearches" }, null, null, null),
            new pbr::GeneratedClrTypeInfo(typeof(global::Google.Ads.GoogleAds.V11.Common.KeywordPlanAggregateMetrics), global::Google.Ads.GoogleAds.V11.Common.KeywordPlanAggregateMetrics.Parser, new[]{ "AggregateMetricTypes" }, null, null, null, null),
            new pbr::GeneratedClrTypeInfo(typeof(global::Google.Ads.GoogleAds.V11.Common.KeywordPlanAggregateMetricResults), global::Google.Ads.GoogleAds.V11.Common.KeywordPlanAggregateMetricResults.Parser, new[]{ "DeviceSearches" }, null, null, null, null),
            new pbr::GeneratedClrTypeInfo(typeof(global::Google.Ads.GoogleAds.V11.Common.KeywordPlanDeviceSearches), global::Google.Ads.GoogleAds.V11.Common.KeywordPlanDeviceSearches.Parser, new[]{ "Device", "SearchCount" }, new[]{ "SearchCount" }, null, null, null),
            new pbr::GeneratedClrTypeInfo(typeof(global::Google.Ads.GoogleAds.V11.Common.KeywordAnnotations), global::Google.Ads.GoogleAds.V11.Common.KeywordAnnotations.Parser, new[]{ "Concepts" }, null, null, null, null),
            new pbr::GeneratedClrTypeInfo(typeof(global::Google.Ads.GoogleAds.V11.Common.KeywordConcept), global::Google.Ads.GoogleAds.V11.Common.KeywordConcept.Parser, new[]{ "Name", "ConceptGroup" }, null, null, null, null),
            new pbr::GeneratedClrTypeInfo(typeof(global::Google.Ads.GoogleAds.V11.Common.ConceptGroup), global::Google.Ads.GoogleAds.V11.Common.ConceptGroup.Parser, new[]{ "Name", "Type" }, null, null, null, null)
          }));
    }
    #endregion

  }
  #region Messages
  ///
  /// Historical metrics specific to the targeting options selected.
  /// Targeting options include geographies, network, etc.
  /// Refer to https://support.google.com/google-ads/answer/3022575 for more
  /// details.
  ///
  public sealed partial class KeywordPlanHistoricalMetrics : pb::IMessage<KeywordPlanHistoricalMetrics>
  #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      , pb::IBufferMessage
  #endif
  {
    private static readonly pb::MessageParser<KeywordPlanHistoricalMetrics> _parser = new pb::MessageParser<KeywordPlanHistoricalMetrics>(() => new KeywordPlanHistoricalMetrics());
    private pb::UnknownFieldSet _unknownFields;
    private int _hasBits0;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static pb::MessageParser<KeywordPlanHistoricalMetrics> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Google.Ads.GoogleAds.V11.Common.KeywordPlanCommonReflection.Descriptor.MessageTypes[0]; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public KeywordPlanHistoricalMetrics() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public KeywordPlanHistoricalMetrics(KeywordPlanHistoricalMetrics other) : this() {
      _hasBits0 = other._hasBits0;
      avgMonthlySearches_ = other.avgMonthlySearches_;
      monthlySearchVolumes_ = other.monthlySearchVolumes_.Clone();
      competition_ = other.competition_;
      competitionIndex_ = other.competitionIndex_;
      lowTopOfPageBidMicros_ = other.lowTopOfPageBidMicros_;
      highTopOfPageBidMicros_ = other.highTopOfPageBidMicros_;
      averageCpcMicros_ = other.averageCpcMicros_;
      _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public KeywordPlanHistoricalMetrics Clone() {
      return new KeywordPlanHistoricalMetrics(this);
    }

    /// Field number for the "avg_monthly_searches" field.
    public const int AvgMonthlySearchesFieldNumber = 7;
    private long avgMonthlySearches_;
    ///
    /// Approximate number of monthly searches on this query averaged
    /// for the past 12 months.
    ///
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public long AvgMonthlySearches {
      get { if ((_hasBits0 & 1) != 0) { return avgMonthlySearches_; } else { return 0L; } }
      set {
        _hasBits0 |= 1;
        avgMonthlySearches_ = value;
      }
    }
    /// Gets whether the "avg_monthly_searches" field is set
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public bool HasAvgMonthlySearches {
      get { return (_hasBits0 & 1) != 0; }
    }
    /// Clears the value of the "avg_monthly_searches" field
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void ClearAvgMonthlySearches() {
      _hasBits0 &= ~1;
    }

    /// Field number for the "monthly_search_volumes" field.
    public const int MonthlySearchVolumesFieldNumber = 6;
    private static readonly pb::FieldCodec<global::Google.Ads.GoogleAds.V11.Common.MonthlySearchVolume> _repeated_monthlySearchVolumes_codec
        = pb::FieldCodec.ForMessage(50, global::Google.Ads.GoogleAds.V11.Common.MonthlySearchVolume.Parser);
    private readonly pbc::RepeatedField<global::Google.Ads.GoogleAds.V11.Common.MonthlySearchVolume> monthlySearchVolumes_ = new pbc::RepeatedField<global::Google.Ads.GoogleAds.V11.Common.MonthlySearchVolume>();
    ///
    /// Approximate number of searches on this query for the past twelve months.
    ///
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public pbc::RepeatedField<global::Google.Ads.GoogleAds.V11.Common.MonthlySearchVolume> MonthlySearchVolumes {
      get { return monthlySearchVolumes_; }
    }

    /// Field number for the "competition" field.
    public const int CompetitionFieldNumber = 2;
    private global::Google.Ads.GoogleAds.V11.Enums.KeywordPlanCompetitionLevelEnum.Types.KeywordPlanCompetitionLevel competition_ = global::Google.Ads.GoogleAds.V11.Enums.KeywordPlanCompetitionLevelEnum.Types.KeywordPlanCompetitionLevel.Unspecified;
    ///
    /// The competition level for the query.
    ///
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public global::Google.Ads.GoogleAds.V11.Enums.KeywordPlanCompetitionLevelEnum.Types.KeywordPlanCompetitionLevel Competition {
      get { return competition_; }
      set {
        competition_ = value;
      }
    }

    /// Field number for the "competition_index" field.
    public const int CompetitionIndexFieldNumber = 8;
    private long competitionIndex_;
    ///
    /// The competition index for the query in the range [0, 100].
    /// Shows how competitive ad placement is for a keyword.
    /// The level of competition from 0-100 is determined by the number of ad slots
    /// filled divided by the total number of ad slots available. If not enough
    /// data is available, null is returned.
    ///
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public long CompetitionIndex {
      get { if ((_hasBits0 & 2) != 0) { return competitionIndex_; } else { return 0L; } }
      set {
        _hasBits0 |= 2;
        competitionIndex_ = value;
      }
    }
    /// Gets whether the "competition_index" field is set
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public bool HasCompetitionIndex {
      get { return (_hasBits0 & 2) != 0; }
    }
    /// Clears the value of the "competition_index" field
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void ClearCompetitionIndex() {
      _hasBits0 &= ~2;
    }

    /// Field number for the "low_top_of_page_bid_micros" field.
    public const int LowTopOfPageBidMicrosFieldNumber = 9;
    private long lowTopOfPageBidMicros_;
    ///
    /// Top of page bid low range (20th percentile) in micros for the keyword.
    ///
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public long LowTopOfPageBidMicros {
      get { if ((_hasBits0 & 4) != 0) { return lowTopOfPageBidMicros_; } else { return 0L; } }
      set {
        _hasBits0 |= 4;
        lowTopOfPageBidMicros_ = value;
      }
    }
    /// Gets whether the "low_top_of_page_bid_micros" field is set
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public bool HasLowTopOfPageBidMicros {
      get { return (_hasBits0 & 4) != 0; }
    }
    /// Clears the value of the "low_top_of_page_bid_micros" field
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void ClearLowTopOfPageBidMicros() {
      _hasBits0 &= ~4;
    }

    /// Field number for the "high_top_of_page_bid_micros" field.
    public const int HighTopOfPageBidMicrosFieldNumber = 10;
    private long highTopOfPageBidMicros_;
    ///
    /// Top of page bid high range (80th percentile) in micros for the keyword.
    ///
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public long HighTopOfPageBidMicros {
      get { if ((_hasBits0 & 8) != 0) { return highTopOfPageBidMicros_; } else { return 0L; } }
      set {
        _hasBits0 |= 8;
        highTopOfPageBidMicros_ = value;
      }
    }
    /// Gets whether the "high_top_of_page_bid_micros" field is set
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public bool HasHighTopOfPageBidMicros {
      get { return (_hasBits0 & 8) != 0; }
    }
    /// Clears the value of the "high_top_of_page_bid_micros" field
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void ClearHighTopOfPageBidMicros() {
      _hasBits0 &= ~8;
    }

    /// Field number for the "average_cpc_micros" field.
    public const int AverageCpcMicrosFieldNumber = 11;
    private long averageCpcMicros_;
    ///
    /// Average Cost Per Click in micros for the keyword.
    ///
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public long AverageCpcMicros {
      get { if ((_hasBits0 & 16) != 0) { return averageCpcMicros_; } else { return 0L; } }
      set {
        _hasBits0 |= 16;
        averageCpcMicros_ = value;
      }
    }
    /// Gets whether the "average_cpc_micros" field is set
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public bool HasAverageCpcMicros {
      get { return (_hasBits0 & 16) != 0; }
    }
    /// Clears the value of the "average_cpc_micros" field
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void ClearAverageCpcMicros() {
      _hasBits0 &= ~16;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public override bool Equals(object other) {
      return Equals(other as KeywordPlanHistoricalMetrics);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public bool Equals(KeywordPlanHistoricalMetrics other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (AvgMonthlySearches != other.AvgMonthlySearches) return false;
      if(!monthlySearchVolumes_.Equals(other.monthlySearchVolumes_)) return false;
      if (Competition != other.Competition) return false;
      if (CompetitionIndex != other.CompetitionIndex) return false;
      if (LowTopOfPageBidMicros != other.LowTopOfPageBidMicros) return false;
      if (HighTopOfPageBidMicros != other.HighTopOfPageBidMicros) return false;
      if (AverageCpcMicros != other.AverageCpcMicros) return false;
      return Equals(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public override int GetHashCode() {
      int hash = 1;
      if (HasAvgMonthlySearches) hash ^= AvgMonthlySearches.GetHashCode();
      hash ^= monthlySearchVolumes_.GetHashCode();
      if (Competition != global::Google.Ads.GoogleAds.V11.Enums.KeywordPlanCompetitionLevelEnum.Types.KeywordPlanCompetitionLevel.Unspecified) hash ^= Competition.GetHashCode();
      if (HasCompetitionIndex) hash ^= CompetitionIndex.GetHashCode();
      if (HasLowTopOfPageBidMicros) hash ^= LowTopOfPageBidMicros.GetHashCode();
      if (HasHighTopOfPageBidMicros) hash ^= HighTopOfPageBidMicros.GetHashCode();
      if (HasAverageCpcMicros) hash ^= AverageCpcMicros.GetHashCode();
      if (_unknownFields != null) {
        hash ^= _unknownFields.GetHashCode();
      }
      return hash;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void WriteTo(pb::CodedOutputStream output) {
    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      output.WriteRawMessage(this);
    #else
      if (Competition != global::Google.Ads.GoogleAds.V11.Enums.KeywordPlanCompetitionLevelEnum.Types.KeywordPlanCompetitionLevel.Unspecified) {
        output.WriteRawTag(16);
        output.WriteEnum((int) Competition);
      }
      monthlySearchVolumes_.WriteTo(output, _repeated_monthlySearchVolumes_codec);
      if (HasAvgMonthlySearches) {
        output.WriteRawTag(56);
        output.WriteInt64(AvgMonthlySearches);
      }
      if (HasCompetitionIndex) {
        output.WriteRawTag(64);
        output.WriteInt64(CompetitionIndex);
      }
      if (HasLowTopOfPageBidMicros) {
        output.WriteRawTag(72);
        output.WriteInt64(LowTopOfPageBidMicros);
      }
      if (HasHighTopOfPageBidMicros) {
        output.WriteRawTag(80);
        output.WriteInt64(HighTopOfPageBidMicros);
      }
      if (HasAverageCpcMicros) {
        output.WriteRawTag(88);
        output.WriteInt64(AverageCpcMicros);
      }
      if (_unknownFields != null) {
        _unknownFields.WriteTo(output);
      }
    #endif
    }

    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) {
      if (Competition != global::Google.Ads.GoogleAds.V11.Enums.KeywordPlanCompetitionLevelEnum.Types.KeywordPlanCompetitionLevel.Unspecified) {
        output.WriteRawTag(16);
        output.WriteEnum((int) Competition);
      }
      monthlySearchVolumes_.WriteTo(ref output, _repeated_monthlySearchVolumes_codec);
      if (HasAvgMonthlySearches) {
        output.WriteRawTag(56);
        output.WriteInt64(AvgMonthlySearches);
      }
      if (HasCompetitionIndex) {
        output.WriteRawTag(64);
        output.WriteInt64(CompetitionIndex);
      }
      if (HasLowTopOfPageBidMicros) {
        output.WriteRawTag(72);
        output.WriteInt64(LowTopOfPageBidMicros);
      }
      if (HasHighTopOfPageBidMicros) {
        output.WriteRawTag(80);
        output.WriteInt64(HighTopOfPageBidMicros);
      }
      if (HasAverageCpcMicros) {
        output.WriteRawTag(88);
        output.WriteInt64(AverageCpcMicros);
      }
      if (_unknownFields != null) {
        _unknownFields.WriteTo(ref output);
      }
    }
    #endif

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public int CalculateSize() {
      int size = 0;
      if (HasAvgMonthlySearches) {
        size += 1 + pb::CodedOutputStream.ComputeInt64Size(AvgMonthlySearches);
      }
      size += monthlySearchVolumes_.CalculateSize(_repeated_monthlySearchVolumes_codec);
      if (Competition != global::Google.Ads.GoogleAds.V11.Enums.KeywordPlanCompetitionLevelEnum.Types.KeywordPlanCompetitionLevel.Unspecified) {
        size += 1 + pb::CodedOutputStream.ComputeEnumSize((int) Competition);
      }
      if (HasCompetitionIndex) {
        size += 1 + pb::CodedOutputStream.ComputeInt64Size(CompetitionIndex);
      }
      if (HasLowTopOfPageBidMicros) {
        size += 1 + pb::CodedOutputStream.ComputeInt64Size(LowTopOfPageBidMicros);
      }
      if (HasHighTopOfPageBidMicros) {
        size += 1 + pb::CodedOutputStream.ComputeInt64Size(HighTopOfPageBidMicros);
      }
      if (HasAverageCpcMicros) {
        size += 1 + pb::CodedOutputStream.ComputeInt64Size(AverageCpcMicros);
      }
      if (_unknownFields != null) {
        size += _unknownFields.CalculateSize();
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void MergeFrom(KeywordPlanHistoricalMetrics other) {
      if (other == null) {
        return;
      }
      if (other.HasAvgMonthlySearches) {
        AvgMonthlySearches = other.AvgMonthlySearches;
      }
      monthlySearchVolumes_.Add(other.monthlySearchVolumes_);
      if (other.Competition != global::Google.Ads.GoogleAds.V11.Enums.KeywordPlanCompetitionLevelEnum.Types.KeywordPlanCompetitionLevel.Unspecified) {
        Competition = other.Competition;
      }
      if (other.HasCompetitionIndex) {
        CompetitionIndex = other.CompetitionIndex;
      }
      if (other.HasLowTopOfPageBidMicros) {
        LowTopOfPageBidMicros = other.LowTopOfPageBidMicros;
      }
      if (other.HasHighTopOfPageBidMicros) {
        HighTopOfPageBidMicros = other.HighTopOfPageBidMicros;
      }
      if (other.HasAverageCpcMicros) {
        AverageCpcMicros = other.AverageCpcMicros;
      }
      _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void MergeFrom(pb::CodedInputStream input) {
    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      input.ReadRawMessage(this);
    #else
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
            break;
          case 16: {
            Competition = (global::Google.Ads.GoogleAds.V11.Enums.KeywordPlanCompetitionLevelEnum.Types.KeywordPlanCompetitionLevel) input.ReadEnum();
            break;
          }
          case 50: {
            monthlySearchVolumes_.AddEntriesFrom(input, _repeated_monthlySearchVolumes_codec);
            break;
          }
          case 56: {
            AvgMonthlySearches = input.ReadInt64();
            break;
          }
          case 64: {
            CompetitionIndex = input.ReadInt64();
            break;
          }
          case 72: {
            LowTopOfPageBidMicros = input.ReadInt64();
            break;
          }
          case 80: {
            HighTopOfPageBidMicros = input.ReadInt64();
            break;
          }
          case 88: {
            AverageCpcMicros = input.ReadInt64();
            break;
          }
        }
      }
    #endif
    }

    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input);
            break;
          case 16: {
            Competition = (global::Google.Ads.GoogleAds.V11.Enums.KeywordPlanCompetitionLevelEnum.Types.KeywordPlanCompetitionLevel) input.ReadEnum();
            break;
          }
          case 50: {
            monthlySearchVolumes_.AddEntriesFrom(ref input, _repeated_monthlySearchVolumes_codec);
            break;
          }
          case 56: {
            AvgMonthlySearches = input.ReadInt64();
            break;
          }
          case 64: {
            CompetitionIndex = input.ReadInt64();
            break;
          }
          case 72: {
            LowTopOfPageBidMicros = input.ReadInt64();
            break;
          }
          case 80: {
            HighTopOfPageBidMicros = input.ReadInt64();
            break;
          }
          case 88: {
            AverageCpcMicros = input.ReadInt64();
            break;
          }
        }
      }
    }
    #endif

  }

  ///
  /// Historical metrics options.
  ///
  public sealed partial class HistoricalMetricsOptions : pb::IMessage<HistoricalMetricsOptions>
  #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      , pb::IBufferMessage
  #endif
  {
    private static readonly pb::MessageParser<HistoricalMetricsOptions> _parser = new pb::MessageParser<HistoricalMetricsOptions>(() => new HistoricalMetricsOptions());
    private pb::UnknownFieldSet _unknownFields;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static pb::MessageParser<HistoricalMetricsOptions> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Google.Ads.GoogleAds.V11.Common.KeywordPlanCommonReflection.Descriptor.MessageTypes[1]; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public HistoricalMetricsOptions() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public HistoricalMetricsOptions(HistoricalMetricsOptions other) : this() {
      yearMonthRange_ = other.yearMonthRange_ != null ? other.yearMonthRange_.Clone() : null;
      includeAverageCpc_ = other.includeAverageCpc_;
      _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public HistoricalMetricsOptions Clone() {
      return new HistoricalMetricsOptions(this);
    }

    /// Field number for the "year_month_range" field.
    public const int YearMonthRangeFieldNumber = 1;
    private global::Google.Ads.GoogleAds.V11.Common.YearMonthRange yearMonthRange_;
    ///
    /// The year month range for historical metrics. If not specified the searches
    /// will be returned for past 12 months.
    /// Searches data is available for the past 4 years. If the search volume is
    /// not available for the entire year_month_range provided, the subset of the
    /// year month range for which search volume is available will be returned.
    ///
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public global::Google.Ads.GoogleAds.V11.Common.YearMonthRange YearMonthRange {
      get { return yearMonthRange_; }
      set {
        yearMonthRange_ = value;
      }
    }

    /// Field number for the "include_average_cpc" field.
    public const int IncludeAverageCpcFieldNumber = 2;
    private bool includeAverageCpc_;
    ///
    /// Indicates whether to include average cost per click value.
    /// Average CPC is a legacy value that will be removed and replaced in the
    /// future, and as such we are including it as an optioanl value so clients
    /// only use it when strictly necessary and to better track clients that use
    /// this value.
    ///
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public bool IncludeAverageCpc {
      get { return includeAverageCpc_; }
      set {
        includeAverageCpc_ = value;
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public override bool Equals(object other) {
      return Equals(other as HistoricalMetricsOptions);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public bool Equals(HistoricalMetricsOptions other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (!object.Equals(YearMonthRange, other.YearMonthRange)) return false;
      if (IncludeAverageCpc != other.IncludeAverageCpc) return false;
      return Equals(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public override int GetHashCode() {
      int hash = 1;
      if (yearMonthRange_ != null) hash ^= YearMonthRange.GetHashCode();
      if (IncludeAverageCpc != false) hash ^= IncludeAverageCpc.GetHashCode();
      if (_unknownFields != null) {
        hash ^= _unknownFields.GetHashCode();
      }
      return hash;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void WriteTo(pb::CodedOutputStream output) {
    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      output.WriteRawMessage(this);
    #else
      if (yearMonthRange_ != null) {
        output.WriteRawTag(10);
        output.WriteMessage(YearMonthRange);
      }
      if (IncludeAverageCpc != false) {
        output.WriteRawTag(16);
        output.WriteBool(IncludeAverageCpc);
      }
      if (_unknownFields != null) {
        _unknownFields.WriteTo(output);
      }
    #endif
    }

    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) {
      if (yearMonthRange_ != null) {
        output.WriteRawTag(10);
        output.WriteMessage(YearMonthRange);
      }
      if (IncludeAverageCpc != false) {
        output.WriteRawTag(16);
        output.WriteBool(IncludeAverageCpc);
      }
      if (_unknownFields != null) {
        _unknownFields.WriteTo(ref output);
      }
    }
    #endif

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public int CalculateSize() {
      int size = 0;
      if (yearMonthRange_ != null) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(YearMonthRange);
      }
      if (IncludeAverageCpc != false) {
        size += 1 + 1;
      }
      if (_unknownFields != null) {
        size += _unknownFields.CalculateSize();
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void MergeFrom(HistoricalMetricsOptions other) {
      if (other == null) {
        return;
      }
      if (other.yearMonthRange_ != null) {
        if (yearMonthRange_ == null) {
          YearMonthRange = new global::Google.Ads.GoogleAds.V11.Common.YearMonthRange();
        }
        YearMonthRange.MergeFrom(other.YearMonthRange);
      }
      if (other.IncludeAverageCpc != false) {
        IncludeAverageCpc = other.IncludeAverageCpc;
      }
      _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void MergeFrom(pb::CodedInputStream input) {
    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      input.ReadRawMessage(this);
    #else
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
            break;
          case 10: {
            if (yearMonthRange_ == null) {
              YearMonthRange = new global::Google.Ads.GoogleAds.V11.Common.YearMonthRange();
            }
            input.ReadMessage(YearMonthRange);
            break;
          }
          case 16: {
            IncludeAverageCpc = input.ReadBool();
            break;
          }
        }
      }
    #endif
    }

    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input);
            break;
          case 10: {
            if (yearMonthRange_ == null) {
              YearMonthRange = new global::Google.Ads.GoogleAds.V11.Common.YearMonthRange();
            }
            input.ReadMessage(YearMonthRange);
            break;
          }
          case 16: {
            IncludeAverageCpc = input.ReadBool();
            break;
          }
        }
      }
    }
    #endif

  }

  ///
  /// Monthly search volume.
  ///
  public sealed partial class MonthlySearchVolume : pb::IMessage<MonthlySearchVolume>
  #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      , pb::IBufferMessage
  #endif
  {
    private static readonly pb::MessageParser<MonthlySearchVolume> _parser = new pb::MessageParser<MonthlySearchVolume>(() => new MonthlySearchVolume());
    private pb::UnknownFieldSet _unknownFields;
    private int _hasBits0;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static pb::MessageParser<MonthlySearchVolume> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Google.Ads.GoogleAds.V11.Common.KeywordPlanCommonReflection.Descriptor.MessageTypes[2]; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public MonthlySearchVolume() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public MonthlySearchVolume(MonthlySearchVolume other) : this() {
      _hasBits0 = other._hasBits0;
      year_ = other.year_;
      month_ = other.month_;
      monthlySearches_ = other.monthlySearches_;
      _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public MonthlySearchVolume Clone() {
      return new MonthlySearchVolume(this);
    }

    /// Field number for the "year" field.
    public const int YearFieldNumber = 4;
    private long year_;
    ///
    /// The year of the search volume (for example, 2020).
    ///
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public long Year {
      get { if ((_hasBits0 & 1) != 0) { return year_; } else { return 0L; } }
      set {
        _hasBits0 |= 1;
        year_ = value;
      }
    }
    /// Gets whether the "year" field is set
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public bool HasYear {
      get { return (_hasBits0 & 1) != 0; }
    }
    /// Clears the value of the "year" field
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void ClearYear() {
      _hasBits0 &= ~1;
    }

    /// Field number for the "month" field.
    public const int MonthFieldNumber = 2;
    private global::Google.Ads.GoogleAds.V11.Enums.MonthOfYearEnum.Types.MonthOfYear month_ = global::Google.Ads.GoogleAds.V11.Enums.MonthOfYearEnum.Types.MonthOfYear.Unspecified;
    ///
    /// The month of the search volume.
    ///
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public global::Google.Ads.GoogleAds.V11.Enums.MonthOfYearEnum.Types.MonthOfYear Month {
      get { return month_; }
      set {
        month_ = value;
      }
    }

    /// Field number for the "monthly_searches" field.
    public const int MonthlySearchesFieldNumber = 5;
    private long monthlySearches_;
    ///
    /// Approximate number of searches for the month.
    /// A null value indicates the search volume is unavailable for
    /// that month.
    ///
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public long MonthlySearches {
      get { if ((_hasBits0 & 2) != 0) { return monthlySearches_; } else { return 0L; } }
      set {
        _hasBits0 |= 2;
        monthlySearches_ = value;
      }
    }
    /// Gets whether the "monthly_searches" field is set
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public bool HasMonthlySearches {
      get { return (_hasBits0 & 2) != 0; }
    }
    /// Clears the value of the "monthly_searches" field
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void ClearMonthlySearches() {
      _hasBits0 &= ~2;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public override bool Equals(object other) {
      return Equals(other as MonthlySearchVolume);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public bool Equals(MonthlySearchVolume other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (Year != other.Year) return false;
      if (Month != other.Month) return false;
      if (MonthlySearches != other.MonthlySearches) return false;
      return Equals(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public override int GetHashCode() {
      int hash = 1;
      if (HasYear) hash ^= Year.GetHashCode();
      if (Month != global::Google.Ads.GoogleAds.V11.Enums.MonthOfYearEnum.Types.MonthOfYear.Unspecified) hash ^= Month.GetHashCode();
      if (HasMonthlySearches) hash ^= MonthlySearches.GetHashCode();
      if (_unknownFields != null) {
        hash ^= _unknownFields.GetHashCode();
      }
      return hash;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void WriteTo(pb::CodedOutputStream output) {
    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      output.WriteRawMessage(this);
    #else
      if (Month != global::Google.Ads.GoogleAds.V11.Enums.MonthOfYearEnum.Types.MonthOfYear.Unspecified) {
        output.WriteRawTag(16);
        output.WriteEnum((int) Month);
      }
      if (HasYear) {
        output.WriteRawTag(32);
        output.WriteInt64(Year);
      }
      if (HasMonthlySearches) {
        output.WriteRawTag(40);
        output.WriteInt64(MonthlySearches);
      }
      if (_unknownFields != null) {
        _unknownFields.WriteTo(output);
      }
    #endif
    }

    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) {
      if (Month != global::Google.Ads.GoogleAds.V11.Enums.MonthOfYearEnum.Types.MonthOfYear.Unspecified) {
        output.WriteRawTag(16);
        output.WriteEnum((int) Month);
      }
      if (HasYear) {
        output.WriteRawTag(32);
        output.WriteInt64(Year);
      }
      if (HasMonthlySearches) {
        output.WriteRawTag(40);
        output.WriteInt64(MonthlySearches);
      }
      if (_unknownFields != null) {
        _unknownFields.WriteTo(ref output);
      }
    }
    #endif

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public int CalculateSize() {
      int size = 0;
      if (HasYear) {
        size += 1 + pb::CodedOutputStream.ComputeInt64Size(Year);
      }
      if (Month != global::Google.Ads.GoogleAds.V11.Enums.MonthOfYearEnum.Types.MonthOfYear.Unspecified) {
        size += 1 + pb::CodedOutputStream.ComputeEnumSize((int) Month);
      }
      if (HasMonthlySearches) {
        size += 1 + pb::CodedOutputStream.ComputeInt64Size(MonthlySearches);
      }
      if (_unknownFields != null) {
        size += _unknownFields.CalculateSize();
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void MergeFrom(MonthlySearchVolume other) {
      if (other == null) {
        return;
      }
      if (other.HasYear) {
        Year = other.Year;
      }
      if (other.Month != global::Google.Ads.GoogleAds.V11.Enums.MonthOfYearEnum.Types.MonthOfYear.Unspecified) {
        Month = other.Month;
      }
      if (other.HasMonthlySearches) {
        MonthlySearches = other.MonthlySearches;
      }
      _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void MergeFrom(pb::CodedInputStream input) {
    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      input.ReadRawMessage(this);
    #else
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
            break;
          case 16: {
            Month = (global::Google.Ads.GoogleAds.V11.Enums.MonthOfYearEnum.Types.MonthOfYear) input.ReadEnum();
            break;
          }
          case 32: {
            Year = input.ReadInt64();
            break;
          }
          case 40: {
            MonthlySearches = input.ReadInt64();
            break;
          }
        }
      }
    #endif
    }

    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input);
            break;
          case 16: {
            Month = (global::Google.Ads.GoogleAds.V11.Enums.MonthOfYearEnum.Types.MonthOfYear) input.ReadEnum();
            break;
          }
          case 32: {
            Year = input.ReadInt64();
            break;
          }
          case 40: {
            MonthlySearches = input.ReadInt64();
            break;
          }
        }
      }
    }
    #endif

  }

  ///
  /// The aggregate metrics specification of the request.
  ///
  public sealed partial class KeywordPlanAggregateMetrics : pb::IMessage<KeywordPlanAggregateMetrics>
  #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      , pb::IBufferMessage
  #endif
  {
    private static readonly pb::MessageParser<KeywordPlanAggregateMetrics> _parser = new pb::MessageParser<KeywordPlanAggregateMetrics>(() => new KeywordPlanAggregateMetrics());
    private pb::UnknownFieldSet _unknownFields;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static pb::MessageParser<KeywordPlanAggregateMetrics> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Google.Ads.GoogleAds.V11.Common.KeywordPlanCommonReflection.Descriptor.MessageTypes[3]; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public KeywordPlanAggregateMetrics() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public KeywordPlanAggregateMetrics(KeywordPlanAggregateMetrics other) : this() {
      aggregateMetricTypes_ = other.aggregateMetricTypes_.Clone();
      _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public KeywordPlanAggregateMetrics Clone() {
      return new KeywordPlanAggregateMetrics(this);
    }

    /// Field number for the "aggregate_metric_types" field.
    public const int AggregateMetricTypesFieldNumber = 1;
    private static readonly pb::FieldCodec<global::Google.Ads.GoogleAds.V11.Enums.KeywordPlanAggregateMetricTypeEnum.Types.KeywordPlanAggregateMetricType> _repeated_aggregateMetricTypes_codec
        = pb::FieldCodec.ForEnum(10, x => (int) x, x => (global::Google.Ads.GoogleAds.V11.Enums.KeywordPlanAggregateMetricTypeEnum.Types.KeywordPlanAggregateMetricType) x);
    private readonly pbc::RepeatedField<global::Google.Ads.GoogleAds.V11.Enums.KeywordPlanAggregateMetricTypeEnum.Types.KeywordPlanAggregateMetricType> aggregateMetricTypes_ = new pbc::RepeatedField<global::Google.Ads.GoogleAds.V11.Enums.KeywordPlanAggregateMetricTypeEnum.Types.KeywordPlanAggregateMetricType>();
    ///
    /// The list of aggregate metrics to fetch data.
    ///
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public pbc::RepeatedField<global::Google.Ads.GoogleAds.V11.Enums.KeywordPlanAggregateMetricTypeEnum.Types.KeywordPlanAggregateMetricType> AggregateMetricTypes {
      get { return aggregateMetricTypes_; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public override bool Equals(object other) {
      return Equals(other as KeywordPlanAggregateMetrics);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public bool Equals(KeywordPlanAggregateMetrics other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if(!aggregateMetricTypes_.Equals(other.aggregateMetricTypes_)) return false;
      return Equals(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public override int GetHashCode() {
      int hash = 1;
      hash ^= aggregateMetricTypes_.GetHashCode();
      if (_unknownFields != null) {
        hash ^= _unknownFields.GetHashCode();
      }
      return hash;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void WriteTo(pb::CodedOutputStream output) {
    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      output.WriteRawMessage(this);
    #else
      aggregateMetricTypes_.WriteTo(output, _repeated_aggregateMetricTypes_codec);
      if (_unknownFields != null) {
        _unknownFields.WriteTo(output);
      }
    #endif
    }

    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) {
      aggregateMetricTypes_.WriteTo(ref output, _repeated_aggregateMetricTypes_codec);
      if (_unknownFields != null) {
        _unknownFields.WriteTo(ref output);
      }
    }
    #endif

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public int CalculateSize() {
      int size = 0;
      size += aggregateMetricTypes_.CalculateSize(_repeated_aggregateMetricTypes_codec);
      if (_unknownFields != null) {
        size += _unknownFields.CalculateSize();
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void MergeFrom(KeywordPlanAggregateMetrics other) {
      if (other == null) {
        return;
      }
      aggregateMetricTypes_.Add(other.aggregateMetricTypes_);
      _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void MergeFrom(pb::CodedInputStream input) {
    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      input.ReadRawMessage(this);
    #else
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
            break;
          case 10:
          case 8: {
            aggregateMetricTypes_.AddEntriesFrom(input, _repeated_aggregateMetricTypes_codec);
            break;
          }
        }
      }
    #endif
    }

    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input);
            break;
          case 10:
          case 8: {
            aggregateMetricTypes_.AddEntriesFrom(ref input, _repeated_aggregateMetricTypes_codec);
            break;
          }
        }
      }
    }
    #endif

  }

  ///
  /// The aggregated historical metrics for keyword plan keywords.
  ///
  public sealed partial class KeywordPlanAggregateMetricResults : pb::IMessage<KeywordPlanAggregateMetricResults>
  #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      , pb::IBufferMessage
  #endif
  {
    private static readonly pb::MessageParser<KeywordPlanAggregateMetricResults> _parser = new pb::MessageParser<KeywordPlanAggregateMetricResults>(() => new KeywordPlanAggregateMetricResults());
    private pb::UnknownFieldSet _unknownFields;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static pb::MessageParser<KeywordPlanAggregateMetricResults> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Google.Ads.GoogleAds.V11.Common.KeywordPlanCommonReflection.Descriptor.MessageTypes[4]; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public KeywordPlanAggregateMetricResults() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public KeywordPlanAggregateMetricResults(KeywordPlanAggregateMetricResults other) : this() {
      deviceSearches_ = other.deviceSearches_.Clone();
      _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public KeywordPlanAggregateMetricResults Clone() {
      return new KeywordPlanAggregateMetricResults(this);
    }

    /// Field number for the "device_searches" field.
    public const int DeviceSearchesFieldNumber = 1;
    private static readonly pb::FieldCodec<global::Google.Ads.GoogleAds.V11.Common.KeywordPlanDeviceSearches> _repeated_deviceSearches_codec
        = pb::FieldCodec.ForMessage(10, global::Google.Ads.GoogleAds.V11.Common.KeywordPlanDeviceSearches.Parser);
    private readonly pbc::RepeatedField<global::Google.Ads.GoogleAds.V11.Common.KeywordPlanDeviceSearches> deviceSearches_ = new pbc::RepeatedField<global::Google.Ads.GoogleAds.V11.Common.KeywordPlanDeviceSearches>();
    ///
    /// The aggregate searches for all the keywords segmented by device
    /// for the specified time.
    /// Supports the following device types: MOBILE, TABLET, DESKTOP.
    ///
    /// This is only set when KeywordPlanAggregateMetricTypeEnum.DEVICE is set
    /// in the KeywordPlanAggregateMetrics field in the request.
    ///
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public pbc::RepeatedField<global::Google.Ads.GoogleAds.V11.Common.KeywordPlanDeviceSearches> DeviceSearches {
      get { return deviceSearches_; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public override bool Equals(object other) {
      return Equals(other as KeywordPlanAggregateMetricResults);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public bool Equals(KeywordPlanAggregateMetricResults other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if(!deviceSearches_.Equals(other.deviceSearches_)) return false;
      return Equals(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public override int GetHashCode() {
      int hash = 1;
      hash ^= deviceSearches_.GetHashCode();
      if (_unknownFields != null) {
        hash ^= _unknownFields.GetHashCode();
      }
      return hash;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void WriteTo(pb::CodedOutputStream output) {
    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      output.WriteRawMessage(this);
    #else
      deviceSearches_.WriteTo(output, _repeated_deviceSearches_codec);
      if (_unknownFields != null) {
        _unknownFields.WriteTo(output);
      }
    #endif
    }

    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) {
      deviceSearches_.WriteTo(ref output, _repeated_deviceSearches_codec);
      if (_unknownFields != null) {
        _unknownFields.WriteTo(ref output);
      }
    }
    #endif

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public int CalculateSize() {
      int size = 0;
      size += deviceSearches_.CalculateSize(_repeated_deviceSearches_codec);
      if (_unknownFields != null) {
        size += _unknownFields.CalculateSize();
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void MergeFrom(KeywordPlanAggregateMetricResults other) {
      if (other == null) {
        return;
      }
      deviceSearches_.Add(other.deviceSearches_);
      _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void MergeFrom(pb::CodedInputStream input) {
    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      input.ReadRawMessage(this);
    #else
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
            break;
          case 10: {
            deviceSearches_.AddEntriesFrom(input, _repeated_deviceSearches_codec);
            break;
          }
        }
      }
    #endif
    }

    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input);
            break;
          case 10: {
            deviceSearches_.AddEntriesFrom(ref input, _repeated_deviceSearches_codec);
            break;
          }
        }
      }
    }
    #endif

  }

  ///
  /// The total searches for the device type during the specified time period.
  ///
  public sealed partial class KeywordPlanDeviceSearches : pb::IMessage<KeywordPlanDeviceSearches>
  #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      , pb::IBufferMessage
  #endif
  {
    private static readonly pb::MessageParser<KeywordPlanDeviceSearches> _parser = new pb::MessageParser<KeywordPlanDeviceSearches>(() => new KeywordPlanDeviceSearches());
    private pb::UnknownFieldSet _unknownFields;
    private int _hasBits0;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static pb::MessageParser<KeywordPlanDeviceSearches> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Google.Ads.GoogleAds.V11.Common.KeywordPlanCommonReflection.Descriptor.MessageTypes[5]; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public KeywordPlanDeviceSearches() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public KeywordPlanDeviceSearches(KeywordPlanDeviceSearches other) : this() {
      _hasBits0 = other._hasBits0;
      device_ = other.device_;
      searchCount_ = other.searchCount_;
      _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public KeywordPlanDeviceSearches Clone() {
      return new KeywordPlanDeviceSearches(this);
    }

    /// Field number for the "device" field.
    public const int DeviceFieldNumber = 1;
    private global::Google.Ads.GoogleAds.V11.Enums.DeviceEnum.Types.Device device_ = global::Google.Ads.GoogleAds.V11.Enums.DeviceEnum.Types.Device.Unspecified;
    ///
    /// The device type.
    ///
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public global::Google.Ads.GoogleAds.V11.Enums.DeviceEnum.Types.Device Device {
      get { return device_; }
      set {
        device_ = value;
      }
    }

    /// Field number for the "search_count" field.
    public const int SearchCountFieldNumber = 2;
    private long searchCount_;
    ///
    /// The total searches for the device.
    ///
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public long SearchCount {
      get { if ((_hasBits0 & 1) != 0) { return searchCount_; } else { return 0L; } }
      set {
        _hasBits0 |= 1;
        searchCount_ = value;
      }
    }
    /// Gets whether the "search_count" field is set
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public bool HasSearchCount {
      get { return (_hasBits0 & 1) != 0; }
    }
    /// Clears the value of the "search_count" field
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void ClearSearchCount() {
      _hasBits0 &= ~1;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public override bool Equals(object other) {
      return Equals(other as KeywordPlanDeviceSearches);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public bool Equals(KeywordPlanDeviceSearches other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (Device != other.Device) return false;
      if (SearchCount != other.SearchCount) return false;
      return Equals(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public override int GetHashCode() {
      int hash = 1;
      if (Device != global::Google.Ads.GoogleAds.V11.Enums.DeviceEnum.Types.Device.Unspecified) hash ^= Device.GetHashCode();
      if (HasSearchCount) hash ^= SearchCount.GetHashCode();
      if (_unknownFields != null) {
        hash ^= _unknownFields.GetHashCode();
      }
      return hash;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void WriteTo(pb::CodedOutputStream output) {
    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      output.WriteRawMessage(this);
    #else
      if (Device != global::Google.Ads.GoogleAds.V11.Enums.DeviceEnum.Types.Device.Unspecified) {
        output.WriteRawTag(8);
        output.WriteEnum((int) Device);
      }
      if (HasSearchCount) {
        output.WriteRawTag(16);
        output.WriteInt64(SearchCount);
      }
      if (_unknownFields != null) {
        _unknownFields.WriteTo(output);
      }
    #endif
    }

    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) {
      if (Device != global::Google.Ads.GoogleAds.V11.Enums.DeviceEnum.Types.Device.Unspecified) {
        output.WriteRawTag(8);
        output.WriteEnum((int) Device);
      }
      if (HasSearchCount) {
        output.WriteRawTag(16);
        output.WriteInt64(SearchCount);
      }
      if (_unknownFields != null) {
        _unknownFields.WriteTo(ref output);
      }
    }
    #endif

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public int CalculateSize() {
      int size = 0;
      if (Device != global::Google.Ads.GoogleAds.V11.Enums.DeviceEnum.Types.Device.Unspecified) {
        size += 1 + pb::CodedOutputStream.ComputeEnumSize((int) Device);
      }
      if (HasSearchCount) {
        size += 1 + pb::CodedOutputStream.ComputeInt64Size(SearchCount);
      }
      if (_unknownFields != null) {
        size += _unknownFields.CalculateSize();
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void MergeFrom(KeywordPlanDeviceSearches other) {
      if (other == null) {
        return;
      }
      if (other.Device != global::Google.Ads.GoogleAds.V11.Enums.DeviceEnum.Types.Device.Unspecified) {
        Device = other.Device;
      }
      if (other.HasSearchCount) {
        SearchCount = other.SearchCount;
      }
      _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void MergeFrom(pb::CodedInputStream input) {
    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      input.ReadRawMessage(this);
    #else
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
            break;
          case 8: {
            Device = (global::Google.Ads.GoogleAds.V11.Enums.DeviceEnum.Types.Device) input.ReadEnum();
            break;
          }
          case 16: {
            SearchCount = input.ReadInt64();
            break;
          }
        }
      }
    #endif
    }

    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input);
            break;
          case 8: {
            Device = (global::Google.Ads.GoogleAds.V11.Enums.DeviceEnum.Types.Device) input.ReadEnum();
            break;
          }
          case 16: {
            SearchCount = input.ReadInt64();
            break;
          }
        }
      }
    }
    #endif

  }

  ///
  /// The Annotations for the Keyword plan keywords.
  ///
  public sealed partial class KeywordAnnotations : pb::IMessage<KeywordAnnotations>
  #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      , pb::IBufferMessage
  #endif
  {
    private static readonly pb::MessageParser<KeywordAnnotations> _parser = new pb::MessageParser<KeywordAnnotations>(() => new KeywordAnnotations());
    private pb::UnknownFieldSet _unknownFields;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static pb::MessageParser<KeywordAnnotations> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Google.Ads.GoogleAds.V11.Common.KeywordPlanCommonReflection.Descriptor.MessageTypes[6]; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public KeywordAnnotations() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public KeywordAnnotations(KeywordAnnotations other) : this() {
      concepts_ = other.concepts_.Clone();
      _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public KeywordAnnotations Clone() {
      return new KeywordAnnotations(this);
    }

    /// Field number for the "concepts" field.
    public const int ConceptsFieldNumber = 1;
    private static readonly pb::FieldCodec<global::Google.Ads.GoogleAds.V11.Common.KeywordConcept> _repeated_concepts_codec
        = pb::FieldCodec.ForMessage(10, global::Google.Ads.GoogleAds.V11.Common.KeywordConcept.Parser);
    private readonly pbc::RepeatedField<global::Google.Ads.GoogleAds.V11.Common.KeywordConcept> concepts_ = new pbc::RepeatedField<global::Google.Ads.GoogleAds.V11.Common.KeywordConcept>();
    ///
    /// The list of concepts for the keyword.
    ///
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public pbc::RepeatedField<global::Google.Ads.GoogleAds.V11.Common.KeywordConcept> Concepts {
      get { return concepts_; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public override bool Equals(object other) {
      return Equals(other as KeywordAnnotations);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public bool Equals(KeywordAnnotations other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if(!concepts_.Equals(other.concepts_)) return false;
      return Equals(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public override int GetHashCode() {
      int hash = 1;
      hash ^= concepts_.GetHashCode();
      if (_unknownFields != null) {
        hash ^= _unknownFields.GetHashCode();
      }
      return hash;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void WriteTo(pb::CodedOutputStream output) {
    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      output.WriteRawMessage(this);
    #else
      concepts_.WriteTo(output, _repeated_concepts_codec);
      if (_unknownFields != null) {
        _unknownFields.WriteTo(output);
      }
    #endif
    }

    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) {
      concepts_.WriteTo(ref output, _repeated_concepts_codec);
      if (_unknownFields != null) {
        _unknownFields.WriteTo(ref output);
      }
    }
    #endif

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public int CalculateSize() {
      int size = 0;
      size += concepts_.CalculateSize(_repeated_concepts_codec);
      if (_unknownFields != null) {
        size += _unknownFields.CalculateSize();
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void MergeFrom(KeywordAnnotations other) {
      if (other == null) {
        return;
      }
      concepts_.Add(other.concepts_);
      _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void MergeFrom(pb::CodedInputStream input) {
    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      input.ReadRawMessage(this);
    #else
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
            break;
          case 10: {
            concepts_.AddEntriesFrom(input, _repeated_concepts_codec);
            break;
          }
        }
      }
    #endif
    }

    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input);
            break;
          case 10: {
            concepts_.AddEntriesFrom(ref input, _repeated_concepts_codec);
            break;
          }
        }
      }
    }
    #endif

  }

  ///
  /// The concept for the keyword.
  ///
  public sealed partial class KeywordConcept : pb::IMessage<KeywordConcept>
  #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      , pb::IBufferMessage
  #endif
  {
    private static readonly pb::MessageParser<KeywordConcept> _parser = new pb::MessageParser<KeywordConcept>(() => new KeywordConcept());
    private pb::UnknownFieldSet _unknownFields;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static pb::MessageParser<KeywordConcept> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Google.Ads.GoogleAds.V11.Common.KeywordPlanCommonReflection.Descriptor.MessageTypes[7]; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public KeywordConcept() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public KeywordConcept(KeywordConcept other) : this() {
      name_ = other.name_;
      conceptGroup_ = other.conceptGroup_ != null ? other.conceptGroup_.Clone() : null;
      _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public KeywordConcept Clone() {
      return new KeywordConcept(this);
    }

    /// Field number for the "name" field.
    public const int NameFieldNumber = 1;
    private string name_ = "";
    ///
    /// The concept name for the keyword in the concept_group.
    ///
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public string Name {
      get { return name_; }
      set {
        name_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
      }
    }

    /// Field number for the "concept_group" field.
    public const int ConceptGroupFieldNumber = 2;
    private global::Google.Ads.GoogleAds.V11.Common.ConceptGroup conceptGroup_;
    ///
    /// The concept group of the concept details.
    ///
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public global::Google.Ads.GoogleAds.V11.Common.ConceptGroup ConceptGroup {
      get { return conceptGroup_; }
      set {
        conceptGroup_ = value;
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public override bool Equals(object other) {
      return Equals(other as KeywordConcept);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public bool Equals(KeywordConcept other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (Name != other.Name) return false;
      if (!object.Equals(ConceptGroup, other.ConceptGroup)) return false;
      return Equals(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public override int GetHashCode() {
      int hash = 1;
      if (Name.Length != 0) hash ^= Name.GetHashCode();
      if (conceptGroup_ != null) hash ^= ConceptGroup.GetHashCode();
      if (_unknownFields != null) {
        hash ^= _unknownFields.GetHashCode();
      }
      return hash;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void WriteTo(pb::CodedOutputStream output) {
    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      output.WriteRawMessage(this);
    #else
      if (Name.Length != 0) {
        output.WriteRawTag(10);
        output.WriteString(Name);
      }
      if (conceptGroup_ != null) {
        output.WriteRawTag(18);
        output.WriteMessage(ConceptGroup);
      }
      if (_unknownFields != null) {
        _unknownFields.WriteTo(output);
      }
    #endif
    }

    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) {
      if (Name.Length != 0) {
        output.WriteRawTag(10);
        output.WriteString(Name);
      }
      if (conceptGroup_ != null) {
        output.WriteRawTag(18);
        output.WriteMessage(ConceptGroup);
      }
      if (_unknownFields != null) {
        _unknownFields.WriteTo(ref output);
      }
    }
    #endif

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public int CalculateSize() {
      int size = 0;
      if (Name.Length != 0) {
        size += 1 + pb::CodedOutputStream.ComputeStringSize(Name);
      }
      if (conceptGroup_ != null) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(ConceptGroup);
      }
      if (_unknownFields != null) {
        size += _unknownFields.CalculateSize();
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void MergeFrom(KeywordConcept other) {
      if (other == null) {
        return;
      }
      if (other.Name.Length != 0) {
        Name = other.Name;
      }
      if (other.conceptGroup_ != null) {
        if (conceptGroup_ == null) {
          ConceptGroup = new global::Google.Ads.GoogleAds.V11.Common.ConceptGroup();
        }
        ConceptGroup.MergeFrom(other.ConceptGroup);
      }
      _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void MergeFrom(pb::CodedInputStream input) {
    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      input.ReadRawMessage(this);
    #else
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
            break;
          case 10: {
            Name = input.ReadString();
            break;
          }
          case 18: {
            if (conceptGroup_ == null) {
              ConceptGroup = new global::Google.Ads.GoogleAds.V11.Common.ConceptGroup();
            }
            input.ReadMessage(ConceptGroup);
            break;
          }
        }
      }
    #endif
    }

    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input);
            break;
          case 10: {
            Name = input.ReadString();
            break;
          }
          case 18: {
            if (conceptGroup_ == null) {
              ConceptGroup = new global::Google.Ads.GoogleAds.V11.Common.ConceptGroup();
            }
            input.ReadMessage(ConceptGroup);
            break;
          }
        }
      }
    }
    #endif

  }

  ///
  /// The concept group for the keyword concept.
  ///
  public sealed partial class ConceptGroup : pb::IMessage<ConceptGroup>
  #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      , pb::IBufferMessage
  #endif
  {
    private static readonly pb::MessageParser<ConceptGroup> _parser = new pb::MessageParser<ConceptGroup>(() => new ConceptGroup());
    private pb::UnknownFieldSet _unknownFields;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static pb::MessageParser<ConceptGroup> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Google.Ads.GoogleAds.V11.Common.KeywordPlanCommonReflection.Descriptor.MessageTypes[8]; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public ConceptGroup() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public ConceptGroup(ConceptGroup other) : this() {
      name_ = other.name_;
      type_ = other.type_;
      _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public ConceptGroup Clone() {
      return new ConceptGroup(this);
    }

    /// Field number for the "name" field.
    public const int NameFieldNumber = 1;
    private string name_ = "";
    ///
    /// The concept group name.
    ///
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public string Name {
      get { return name_; }
      set {
        name_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
      }
    }

    /// Field number for the "type" field.
    public const int TypeFieldNumber = 2;
    private global::Google.Ads.GoogleAds.V11.Enums.KeywordPlanConceptGroupTypeEnum.Types.KeywordPlanConceptGroupType type_ = global::Google.Ads.GoogleAds.V11.Enums.KeywordPlanConceptGroupTypeEnum.Types.KeywordPlanConceptGroupType.Unspecified;
    ///
    /// The concept group type.
    ///
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public global::Google.Ads.GoogleAds.V11.Enums.KeywordPlanConceptGroupTypeEnum.Types.KeywordPlanConceptGroupType Type {
      get { return type_; }
      set {
        type_ = value;
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public override bool Equals(object other) {
      return Equals(other as ConceptGroup);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public bool Equals(ConceptGroup other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (Name != other.Name) return false;
      if (Type != other.Type) return false;
      return Equals(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public override int GetHashCode() {
      int hash = 1;
      if (Name.Length != 0) hash ^= Name.GetHashCode();
      if (Type != global::Google.Ads.GoogleAds.V11.Enums.KeywordPlanConceptGroupTypeEnum.Types.KeywordPlanConceptGroupType.Unspecified) hash ^= Type.GetHashCode();
      if (_unknownFields != null) {
        hash ^= _unknownFields.GetHashCode();
      }
      return hash;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void WriteTo(pb::CodedOutputStream output) {
    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      output.WriteRawMessage(this);
    #else
      if (Name.Length != 0) {
        output.WriteRawTag(10);
        output.WriteString(Name);
      }
      if (Type != global::Google.Ads.GoogleAds.V11.Enums.KeywordPlanConceptGroupTypeEnum.Types.KeywordPlanConceptGroupType.Unspecified) {
        output.WriteRawTag(16);
        output.WriteEnum((int) Type);
      }
      if (_unknownFields != null) {
        _unknownFields.WriteTo(output);
      }
    #endif
    }

    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) {
      if (Name.Length != 0) {
        output.WriteRawTag(10);
        output.WriteString(Name);
      }
      if (Type != global::Google.Ads.GoogleAds.V11.Enums.KeywordPlanConceptGroupTypeEnum.Types.KeywordPlanConceptGroupType.Unspecified) {
        output.WriteRawTag(16);
        output.WriteEnum((int) Type);
      }
      if (_unknownFields != null) {
        _unknownFields.WriteTo(ref output);
      }
    }
    #endif

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public int CalculateSize() {
      int size = 0;
      if (Name.Length != 0) {
        size += 1 + pb::CodedOutputStream.ComputeStringSize(Name);
      }
      if (Type != global::Google.Ads.GoogleAds.V11.Enums.KeywordPlanConceptGroupTypeEnum.Types.KeywordPlanConceptGroupType.Unspecified) {
        size += 1 + pb::CodedOutputStream.ComputeEnumSize((int) Type);
      }
      if (_unknownFields != null) {
        size += _unknownFields.CalculateSize();
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void MergeFrom(ConceptGroup other) {
      if (other == null) {
        return;
      }
      if (other.Name.Length != 0) {
        Name = other.Name;
      }
      if (other.Type != global::Google.Ads.GoogleAds.V11.Enums.KeywordPlanConceptGroupTypeEnum.Types.KeywordPlanConceptGroupType.Unspecified) {
        Type = other.Type;
      }
      _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void MergeFrom(pb::CodedInputStream input) {
    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      input.ReadRawMessage(this);
    #else
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
            break;
          case 10: {
            Name = input.ReadString();
            break;
          }
          case 16: {
            Type = (global::Google.Ads.GoogleAds.V11.Enums.KeywordPlanConceptGroupTypeEnum.Types.KeywordPlanConceptGroupType) input.ReadEnum();
            break;
          }
        }
      }
    #endif
    }

    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input);
            break;
          case 10: {
            Name = input.ReadString();
            break;
          }
          case 16: {
            Type = (global::Google.Ads.GoogleAds.V11.Enums.KeywordPlanConceptGroupTypeEnum.Types.KeywordPlanConceptGroupType) input.ReadEnum();
            break;
          }
        }
      }
    }
    #endif

  }

  #endregion

}

#endregion Designer generated code


Private landlords have to wait more than five months on average to regain possession of a property when applying to the courts, according to figures from the Ministry of Justice.
The Residential Landlords Association said the delay in dealing with cases means that a landlord may go without any rent or suffer damage to the property before the tenant leaves.
The wait for a property to be repossessed is 25 weeks in London compared to 18 weeks in the South West.
The RLA is warning that the government's efforts to develop longer tenancies will fail without urgent court reforms to ensure landlords can swiftly regain possession of a property.
Foe example, in cases such as tenants failing to pay their rent, committing anti-social behaviour or damaging the property.
The RLA said that many landlords are using section 21, or 'no explanation' evictions, because the alternative process that requires applications to court are too long and cumbersome.
The government is currently consulting on speeding up justice in the private rented sector.
The RLA is calling for a fully-fledged and properly funded housing court to speed up access to justice for both tenants and landlords.
David Smith, policy director for the RLA, said that these figures show that the court system is failing to secure justice for landlords and tenants when things go wrong.
He added: "If ministers want to roll out longer tenancies landlords need the confidence that in cases where they legitimately want to repossess a property the system will respond swiftly. It is not good for either tenants or landlords to be left in a prolonged period of legal limbo.


This spezial shooting was made at the Wrack in Tabaiba Teneriffa in a deep of 35 Meters . Fotographer Andereas and the recue Team of the diving shool Atlantis have made a great job.
the shooting takes 40 minutes time inclouding video and pictures.