context: // Generated by ProtoGen, Version=2.4.1.473, Culture=neutral, PublicKeyToken=55f7125234beb589.  DO NOT EDIT!
  #pragma warning disable 1591, 0612
  #region Designer generated code
  
  using pb = global::Google.ProtocolBuffers;
  using pbc = global::Google.ProtocolBuffers.Collections;
  using pbd = global::Google.ProtocolBuffers.Descriptors;
  using scg = global::System.Collections.Generic;
  namespace D3.CS {
    
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
    public static partial class CS {
    
      #region Extension registration
      public static void RegisterAllExtensions(pb::ExtensionRegistry registry) {
      }
      #endregion
      #region Static variables
      internal static pbd::MessageDescriptor internal__static_D3_CS_ToolTip__Descriptor;
      internal static pb::FieldAccess.FieldAccessorTable<global::D3.CS.ToolTip, global::D3.CS.ToolTip.Builder> internal__static_D3_CS_ToolTip__FieldAccessorTable;
      internal static pbd::MessageDescriptor internal__static_D3_CS_TooltipList__Descriptor;
      internal static pb::FieldAccess.FieldAccessorTable<global::D3.CS.TooltipList, global::D3.CS.TooltipList.Builder> internal__static_D3_CS_TooltipList__FieldAccessorTable;
      internal static pbd::MessageDescriptor internal__static_D3_CS_FallenHero__Descriptor;
      internal static pb::FieldAccess.FieldAccessorTable<global::D3.CS.FallenHero, global::D3.CS.FallenHero.Builder> internal__static_D3_CS_FallenHero__FieldAccessorTable;
      internal static pbd::MessageDescriptor internal__static_D3_CS_Snapshot__Descriptor;
      internal static pb::FieldAccess.FieldAccessorTable<global::D3.CS.Snapshot, global::D3.CS.Snapshot.Builder> internal__static_D3_CS_Snapshot__FieldAccessorTable;
      internal static pbd::MessageDescriptor internal__static_D3_CS_SnapshotVersion__Descriptor;
      internal static pb::FieldAccess.FieldAccessorTable<global::D3.CS.SnapshotVersion, global::D3.CS.SnapshotVersion.Builder> internal__static_D3_CS_SnapshotVersion__FieldAccessorTable;
      internal static pbd::MessageDescriptor internal__static_D3_CS_SnapshotVersions__Descriptor;
      internal static pb::FieldAccess.FieldAccessorTable<global::D3.CS.SnapshotVersions, global::D3.CS.SnapshotVersions.Builder> internal__static_D3_CS_SnapshotVersions__FieldAccessorTable;
      #endregion
      #region Descriptor
      public static pbd::FileDescriptor Descriptor {
        get { return descriptor; }
      }
      private static pbd::FileDescriptor descriptor;
      
      static CS() {
        byte[] descriptorData = global::System.Convert.FromBase64String(
            "CghDUy5wcm90bxIFRDMuQ1MaGUF0dHJpYnV0ZVNlcmlhbGl6ZXIucHJvdG8a" + 
            "C0l0ZW1zLnByb3RvGhNPbmxpbmVTZXJ2aWNlLnByb3RvGhJJdGVtQ3JhZnRp" + 
            "bmcucHJvdG8aCkhlcm8ucHJvdG8aDUFjY291bnQucHJvdG8aDVByb2ZpbGUu" + 
            "cHJvdG8ivgIKB1Rvb2xUaXASKAoGaXRlbUlkGAEgAigLMhguRDMuT25saW5l" + 
            "U2VydmljZS5JdGVtSWQSGAoQSXRlbVF1YWxpdHlMZXZlbBgCIAIoDRIMCgRO" + 
            "YW1lGAMgAigJEgwKBFR5cGUYBCACKAkSDwoHU2V0SXRlbRgFIAIoBRIOCgZG" + 
            "bGF2b3IYBiACKAkSDAoEQ29zdBgHIAIoCRISCgpEdXJhYmlsaXR5GAggAigJ" + 
            "EhEKCUNsYXNzUmVxcxgJIAIoCRIUCgxSZXF1aXJlbWVudHMYCiACKAkSEwoL" + 
            "RW5oYW5jZW1lbnQYCyACKAkSEgoKU3RhY2tDb3VudBgMIAIoBBISCgpOdW1T" + 
            "b2NrZXRzGA0gAigNEhUKDUZpbGxlZFNvY2tldHMYDiACKA0SEwoLRGlzcGxh" + 
            "eU5hbWUYDyACKAkiLwoLVG9vbHRpcExpc3QSIAoIdG9vbHRpcHMYASADKAsy" + 
            "Di5EMy5DUy5Ub29sVGlwImUKCkZhbGxlbkhlcm8SKAoHcHJvZmlsZRgBIAIo" + 
            "CzIXLkQzLlByb2ZpbGUuSGVyb1Byb2ZpbGUSHwoGZGlnZXN0GAIgAigLMg8u" + 
            "RDMuSGVyby5EaWdlc3QSDAoEdGltZRgDIAIoCSKHAgoIU25hcHNob3QSDwoH" + 
            "dmVyc2lvbhgBIAIoBBIvCgpkZWZpbml0aW9uGAIgAigLMhsuRDMuQWNjb3Vu" + 
            "dC5TYXZlZERlZmluaXRpb24SJwoFaGVyb3MYAyADKAsyGC5EMy5IZXJvLlNh" + 
            "dmVkRGVmaW5pdGlvbhIzCg9hY2NvdW50X3Byb2ZpbGUYBCACKAsyGi5EMy5Q" + 
            "cm9maWxlLkFjY291bnRQcm9maWxlEjIKDWhlcm9fcHJvZmlsZXMYBSACKAsy" + 
            "Gy5EMy5Qcm9maWxlLkhlcm9Qcm9maWxlTGlzdBInCgxmYWxsZW5faGVyb3MY" + 
            "BiADKAsyES5EMy5DUy5GYWxsZW5IZXJvIkUKD1NuYXBzaG90VmVyc2lvbhIP" + 
            "Cgd2ZXJzaW9uGAEgAigEEiEKCHNuYXBzaG90GAIgAigLMg8uRDMuQ1MuU25h" + 
            "cHNob3QiPAoQU25hcHNob3RWZXJzaW9ucxIoCgh2ZXJzaW9ucxgBIAMoCzIW" + 
            "LkQzLkNTLlNuYXBzaG90VmVyc2lvbg==");
        pbd::FileDescriptor.InternalDescriptorAssigner assigner = delegate(pbd::FileDescriptor root) {
          descriptor = root;
          internal__static_D3_CS_ToolTip__Descriptor = Descriptor.MessageTypes[0];
          internal__static_D3_CS_ToolTip__FieldAccessorTable = 
              new pb::FieldAccess.FieldAccessorTable<global::D3.CS.ToolTip, global::D3.CS.ToolTip.Builder>(internal__static_D3_CS_ToolTip__Descriptor,
                  new string[] { "ItemId", "ItemQualityLevel", "Name", "Type", "SetItem", "Flavor", "Cost", "Durability", "ClassReqs", "Requirements", "Enhancement", "StackCount", "NumSockets", "FilledSockets", "DisplayName", });
          internal__static_D3_CS_TooltipList__Descriptor = Descriptor.MessageTypes[1];
          internal__static_D3_CS_TooltipList__FieldAccessorTable = 
              new pb::FieldAccess.FieldAccessorTable<global::D3.CS.TooltipList, global::D3.CS.TooltipList.Builder>(internal__static_D3_CS_TooltipList__Descriptor,
                  new string[] { "Tooltips", });
          internal__static_D3_CS_FallenHero__Descriptor = Descriptor.MessageTypes[2];
          internal__static_D3_CS_FallenHero__FieldAccessorTable = 
              new pb::FieldAccess.FieldAccessorTable<global::D3.CS.FallenHero, global::D3.CS.FallenHero.Builder>(internal__static_D3_CS_FallenHero__Descriptor,
                  new string[] { "Profile", "Digest", "Time", });
          internal__static_D3_CS_Snapshot__Descriptor = Descriptor.MessageTypes[3];
          internal__static_D3_CS_Snapshot__FieldAccessorTable = 
              new pb::FieldAccess.FieldAccessorTable<global::D3.CS.Snapshot, global::D3.CS.Snapshot.Builder>(internal__static_D3_CS_Snapshot__Descriptor,
                  new string[] { "Version", "Definition", "Heros", "AccountProfile", "HeroProfiles", "FallenHeros", });
          internal__static_D3_CS_SnapshotVersion__Descriptor = Descriptor.MessageTypes[4];
          internal__static_D3_CS_SnapshotVersion__FieldAccessorTable = 
              new pb::FieldAccess.FieldAccessorTable<global::D3.CS.SnapshotVersion, global::D3.CS.SnapshotVersion.Builder>(internal__static_D3_CS_SnapshotVersion__Descriptor,
                  new string[] { "Version", "Snapshot", });
          internal__static_D3_CS_SnapshotVersions__Descriptor = Descriptor.MessageTypes[5];
          internal__static_D3_CS_SnapshotVersions__FieldAccessorTable = 
              new pb::FieldAccess.FieldAccessorTable<global::D3.CS.SnapshotVersions, global::D3.CS.SnapshotVersions.Builder>(internal__static_D3_CS_SnapshotVersions__Descriptor,
                  new string[] { "Versions", });
          return null;
        };
        pbd::FileDescriptor.InternalBuildGeneratedFileFrom(descriptorData,
            new pbd::FileDescriptor[] {
            global::D3.AttributeSerializer.AttributeSerializer.Descriptor, 
            global::D3.Items.Items.Descriptor, 
            global::D3.OnlineService.OnlineService.Descriptor, 
            global::D3.ItemCrafting.ItemCrafting.Descriptor, 
            global::D3.Hero.Hero.Descriptor, 
            global::D3.Account.Account.Descriptor, 
            global::D3.Profile.Profile.Descriptor, 
            }, assigner);
      }
      #endregion
      
    }
    #region Messages
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
    public sealed partial class ToolTip : pb::GeneratedMessage<ToolTip, ToolTip.Builder> {
      private ToolTip() { }
      private static readonly ToolTip defaultInstance = new ToolTip().MakeReadOnly();
      private static readonly string[] _toolTipFieldNames = new string[] { "ClassReqs", "Cost", "DisplayName", "Durability", "Enhancement", "FilledSockets", "Flavor", "ItemQualityLevel", "Name", "NumSockets", "Requirements", "SetItem", "StackCount", "Type", "itemId" };
      private static readonly uint[] _toolTipFieldTags = new uint[] { 74, 58, 122, 66, 90, 112, 50, 16, 26, 104, 82, 40, 96, 34, 10 };
      public static ToolTip DefaultInstance {
        get { return defaultInstance; }
      }
      
      public override ToolTip DefaultInstanceForType {
        get { return DefaultInstance; }
      }
      
      protected override ToolTip ThisMessage {
        get { return this; }
      }
      
      public static pbd::MessageDescriptor Descriptor {
        get { return global::D3.CS.CS.internal__static_D3_CS_ToolTip__Descriptor; }
      }
      
      protected override pb::FieldAccess.FieldAccessorTable<ToolTip, ToolTip.Builder> InternalFieldAccessors {
        get { return global::D3.CS.CS.internal__static_D3_CS_ToolTip__FieldAccessorTable; }
      }
      
      public const int ItemIdFieldNumber = 1;
      private bool hasItemId;
      private global::D3.OnlineService.ItemId itemId_;
      public bool HasItemId {
        get { return hasItemId; }
      }
      public global::D3.OnlineService.ItemId ItemId {
        get { return itemId_ ?? global::D3.OnlineService.ItemId.DefaultInstance; }
      }
      
      public const int ItemQualityLevelFieldNumber = 2;
      private bool hasItemQualityLevel;
      private uint itemQualityLevel_;
      public bool HasItemQualityLevel {
        get { return hasItemQualityLevel; }
      }
      public uint ItemQualityLevel {
        get { return itemQualityLevel_; }
      }
      
      public const int NameFieldNumber = 3;
      private bool hasName;
      private string name_ = "";
      public bool HasName {
        get { return hasName; }
      }
      public string Name {
        get { return name_; }
      }
      
      public const int TypeFieldNumber = 4;
      private bool hasType;
      private string type_ = "";
      public bool HasType {
        get { return hasType; }
      }
      public string Type {
        get { return type_; }
      }
      
      public const int SetItemFieldNumber = 5;
      private bool hasSetItem;
      private int setItem_;
      public bool HasSetItem {
        get { return hasSetItem; }
      }
      public int SetItem {
        get { return setItem_; }
      }
      
      public const int FlavorFieldNumber = 6;
      private bool hasFlavor;
      private string flavor_ = "";
      public bool HasFlavor {
        get { return hasFlavor; }
      }
      public string Flavor {
        get { return flavor_; }
      }
      
      public const int CostFieldNumber = 7;
      private bool hasCost;
      private string cost_ = "";
      public bool HasCost {
        get { return hasCost; }
      }
      public string Cost {
        get { return cost_; }
      }
      
      public const int DurabilityFieldNumber = 8;
      private bool hasDurability;
      private string durability_ = "";
      public bool HasDurability {
        get { return hasDurability; }
      }
      public string Durability {
        get { return durability_; }
      }
      
      public const int ClassReqsFieldNumber = 9;
      private bool hasClassReqs;
      private string classReqs_ = "";
      public bool HasClassReqs {
        get { return hasClassReqs; }
      }
      public string ClassReqs {
        get { return classReqs_; }
      }
      
      public const int RequirementsFieldNumber = 10;
      private bool hasRequirements;
      private string requirements_ = "";
      public bool HasRequirements {
        get { return hasRequirements; }
      }
      public string Requirements {
        get { return requirements_; }
      }
      
      public const int EnhancementFieldNumber = 11;
      private bool hasEnhancement;
      private string enhancement_ = "";
      public bool HasEnhancement {
        get { return hasEnhancement; }
      }
      public string Enhancement {
        get { return enhancement_; }
      }
      
      public const int StackCountFieldNumber = 12;
      private bool hasStackCount;
      private ulong stackCount_;
      public bool HasStackCount {
        get { return hasStackCount; }
      }
      public ulong StackCount {
        get { return stackCount_; }
      }
      
      public const int NumSocketsFieldNumber = 13;
      private bool hasNumSockets;
      private uint numSockets_;
      public bool HasNumSockets {
        get { return hasNumSockets; }
      }
      public uint NumSockets {
        get { return numSockets_; }
      }
      
      public const int FilledSocketsFieldNumber = 14;
      private bool hasFilledSockets;
      private uint filledSockets_;
      public bool HasFilledSockets {
        get { return hasFilledSockets; }
      }
      public uint FilledSockets {
        get { return filledSockets_; }
      }
      
      public const int DisplayNameFieldNumber = 15;
      private bool hasDisplayName;
      private string displayName_ = "";
      public bool HasDisplayName {
        get { return hasDisplayName; }
      }
      public string DisplayName {
        get { return displayName_; }
      }
      
      public override bool IsInitialized {
        get {
          if (!hasItemId) return false;
          if (!hasItemQualityLevel) return false;
          if (!hasName) return false;
          if (!hasType) return false;
          if (!hasSetItem) return false;
          if (!hasFlavor) return false;
          if (!hasCost) return false;
          if (!hasDurability) return false;
          if (!hasClassReqs) return false;
          if (!hasRequirements) return false;
          if (!hasEnhancement) return false;
          if (!hasStackCount) return false;
          if (!hasNumSockets) return false;
          if (!hasFilledSockets) return false;
          if (!hasDisplayName) return false;
          if (!ItemId.IsInitialized) return false;
          return true;
        }
      }
      
      public override void WriteTo(pb::ICodedOutputStream output) {
        int size = SerializedSize;
        string[] field_names = _toolTipFieldNames;
        if (hasItemId) {
          output.WriteMessage(1, field_names[14], ItemId);
        }
        if (hasItemQualityLevel) {
          output.WriteUInt32(2, field_names[7], ItemQualityLevel);
        }
        if (hasName) {
          output.WriteString(3, field_names[8], Name);
        }
        if (hasType) {
          output.WriteString(4, field_names[13], Type);
        }
        if (hasSetItem) {
          output.WriteInt32(5, field_names[11], SetItem);
        }
        if (hasFlavor) {
          output.WriteString(6, field_names[6], Flavor);
        }
        if (hasCost) {
          output.WriteString(7, field_names[1], Cost);
        }
        if (hasDurability) {
          output.WriteString(8, field_names[3], Durability);
        }
        if (hasClassReqs) {
          output.WriteString(9, field_names[0], ClassReqs);
        }
        if (hasRequirements) {
          output.WriteString(10, field_names[10], Requirements);
        }
        if (hasEnhancement) {
          output.WriteString(11, field_names[4], Enhancement);
        }
        if (hasStackCount) {
          output.WriteUInt64(12, field_names[12], StackCount);
        }
        if (hasNumSockets) {
          output.WriteUInt32(13, field_names[9], NumSockets);
        }
        if (hasFilledSockets) {
          output.WriteUInt32(14, field_names[5], FilledSockets);
        }
        if (hasDisplayName) {
          output.WriteString(15, field_names[2], DisplayName);
        }
        UnknownFields.WriteTo(output);
      }
      
      private int memoizedSerializedSize = -1;
      public override int SerializedSize {
        get {
          int size = memoizedSerializedSize;
          if (size != -1) return size;
          
          size = 0;
          if (hasItemId) {
            size += pb::CodedOutputStream.ComputeMessageSize(1, ItemId);
          }
          if (hasItemQualityLevel) {
            size += pb::CodedOutputStream.ComputeUInt32Size(2, ItemQualityLevel);
          }
          if (hasName) {
            size += pb::CodedOutputStream.ComputeStringSize(3, Name);
          }
          if (hasType) {
            size += pb::CodedOutputStream.ComputeStringSize(4, Type);
          }
          if (hasSetItem) {
            size += pb::CodedOutputStream.ComputeInt32Size(5, SetItem);
          }
          if (hasFlavor) {
            size += pb::CodedOutputStream.ComputeStringSize(6, Flavor);
          }
          if (hasCost) {
            size += pb::CodedOutputStream.ComputeStringSize(7, Cost);
          }
          if (hasDurability) {
            size += pb::CodedOutputStream.ComputeStringSize(8, Durability);
          }
          if (hasClassReqs) {
            size += pb::CodedOutputStream.ComputeStringSize(9, ClassReqs);
          }
          if (hasRequirements) {
            size += pb::CodedOutputStream.ComputeStringSize(10, Requirements);
          }
          if (hasEnhancement) {
            size += pb::CodedOutputStream.ComputeStringSize(11, Enhancement);
          }
          if (hasStackCount) {
            size += pb::CodedOutputStream.ComputeUInt64Size(12, StackCount);
          }
          if (hasNumSockets) {
            size += pb::CodedOutputStream.ComputeUInt32Size(13, NumSockets);
          }
          if (hasFilledSockets) {
            size += pb::CodedOutputStream.ComputeUInt32Size(14, FilledSockets);
          }
          if (hasDisplayName) {
            size += pb::CodedOutputStream.ComputeStringSize(15, DisplayName);
          }
          size += UnknownFields.SerializedSize;
          memoizedSerializedSize = size;
          return size;
        }
      }
      
      public static ToolTip ParseFrom(pb::ByteString data) {
        return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
      }
      public static ToolTip ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
        return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
      }
      public static ToolTip ParseFrom(byte[] data) {
        return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
      }
      public static ToolTip ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
        return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
      }
      public static ToolTip ParseFrom(global::System.IO.Stream input) {
        return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
      }
      public static ToolTip ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
        return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
      }
      public static ToolTip ParseDelimitedFrom(global::System.IO.Stream input) {
        return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
      }
      public static ToolTip ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
        return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
      }
      public static ToolTip ParseFrom(pb::ICodedInputStream input) {
        return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
      }
      public static ToolTip ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
        return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
      }
      private ToolTip MakeReadOnly() {
        return this;
      }
      
      public static Builder CreateBuilder() { return new Builder(); }
      public override Builder ToBuilder() { return CreateBuilder(this); }
      public override Builder CreateBuilderForType() { return new Builder(); }
      public static Builder CreateBuilder(ToolTip prototype) {
        return new Builder(prototype);
      }
      
      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
      [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
      [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
      public sealed partial class Builder : pb::GeneratedBuilder<ToolTip, Builder> {
        protected override Builder ThisBuilder {
          get { return this; }
        }
        public Builder() {
          result = DefaultInstance;
          resultIsReadOnly = true;
        }
        internal Builder(ToolTip cloneFrom) {
          result = cloneFrom;
          resultIsReadOnly = true;
        }
        
        private bool resultIsReadOnly;
        private ToolTip result;
        
        private ToolTip PrepareBuilder() {
          if (resultIsReadOnly) {
            ToolTip original = result;
            result = new ToolTip();
            resultIsReadOnly = false;
            MergeFrom(original);
          }
          return result;
        }
        
        public override bool IsInitialized {
          get { return result.IsInitialized; }
        }
        
        protected override ToolTip MessageBeingBuilt {
          get { return PrepareBuilder(); }
        }
        
        public override Builder Clear() {
          result = DefaultInstance;
          resultIsReadOnly = true;
          return this;
        }
        
        public override Builder Clone() {
          if (resultIsReadOnly) {
            return new Builder(result);
          } else {
            return new Builder().MergeFrom(result);
          }
        }
        
        public override pbd::MessageDescriptor DescriptorForType {
          get { return global::D3.CS.ToolTip.Descriptor; }
        }
        
        public override ToolTip DefaultInstanceForType {
          get { return global::D3.CS.ToolTip.DefaultInstance; }
        }
        
        public override ToolTip BuildPartial() {
          if (resultIsReadOnly) {
            return result;
          }
          resultIsReadOnly = true;
          return result.MakeReadOnly();
        }
        
        public override Builder MergeFrom(pb::IMessage other) {
          if (other is ToolTip) {
            return MergeFrom((ToolTip) other);
          } else {
            base.MergeFrom(other);
            return this;
          }
        }
        
        public override Builder MergeFrom(ToolTip other) {
          if (other == global::D3.CS.ToolTip.DefaultInstance) return this;
          PrepareBuilder();
          if (other.HasItemId) {
            MergeItemId(other.ItemId);
          }
          if (other.HasItemQualityLevel) {
            ItemQualityLevel = other.ItemQualityLevel;
          }
          if (other.HasName) {
            Name = other.Name;
          }
          if (other.HasType) {
            Type = other.Type;
          }
          if (other.HasSetItem) {
            SetItem = other.SetItem;
          }
          if (other.HasFlavor) {
            Flavor = other.Flavor;
          }
          if (other.HasCost) {
            Cost = other.Cost;
          }
          if (other.HasDurability) {
            Durability = other.Durability;
          }
          if (other.HasClassReqs) {
            ClassReqs = other.ClassReqs;
          }
          if (other.HasRequirements) {
            Requirements = other.Requirements;
          }
          if (other.HasEnhancement) {
            Enhancement = other.Enhancement;
          }
          if (other.HasStackCount) {
            StackCount = other.StackCount;
          }
          if (other.HasNumSockets) {
            NumSockets = other.NumSockets;
          }
          if (other.HasFilledSockets) {
            FilledSockets = other.FilledSockets;
          }
          if (other.HasDisplayName) {
            DisplayName = other.DisplayName;
          }
          this.MergeUnknownFields(other.UnknownFields);
          return this;
        }
        
        public override Builder MergeFrom(pb::ICodedInputStream input) {
          return MergeFrom(input, pb::ExtensionRegistry.Empty);
        }
        
        public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
          PrepareBuilder();
          pb::UnknownFieldSet.Builder unknownFields = null;
          uint tag;
          string field_name;
          while (input.ReadTag(out tag, out field_name)) {
            if(tag == 0 && field_name != null) {
              int field_ordinal = global::System.Array.BinarySearch(_toolTipFieldNames, field_name, global::System.StringComparer.Ordinal);
              if(field_ordinal >= 0)
                tag = _toolTipFieldTags[field_ordinal];
              else {
                if (unknownFields == null) {
                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
                }
                ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
                continue;
              }
            }
            switch (tag) {
              case 0: {
                throw pb::InvalidProtocolBufferException.InvalidTag();
              }
              default: {
                if (pb::WireFormat.IsEndGroupTag(tag)) {
                  if (unknownFields != null) {
                    this.UnknownFields = unknownFields.Build();
                  }
                  return this;
                }
                if (unknownFields == null) {
                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
                }
                ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
                break;
              }
              case 10: {
                global::D3.OnlineService.ItemId.Builder subBuilder = global::D3.OnlineService.ItemId.CreateBuilder();
                if (result.hasItemId) {
                  subBuilder.MergeFrom(ItemId);
                }
                input.ReadMessage(subBuilder, extensionRegistry);
                ItemId = subBuilder.BuildPartial();
                break;
              }
              case 16: {
                result.hasItemQualityLevel = input.ReadUInt32(ref result.itemQualityLevel_);
                break;
              }
              case 26: {
                result.hasName = input.ReadString(ref result.name_);
                break;
              }
              case 34: {
                result.hasType = input.ReadString(ref result.type_);
                break;
              }
              case 40: {
                result.hasSetItem = input.ReadInt32(ref result.setItem_);
                break;
              }
              case 50: {
                result.hasFlavor = input.ReadString(ref result.flavor_);
                break;
              }
              case 58: {
                result.hasCost = input.ReadString(ref result.cost_);
                break;
              }
              case 66: {
                result.hasDurability = input.ReadString(ref result.durability_);
                break;
              }
              case 74: {
                result.hasClassReqs = input.ReadString(ref result.classReqs_);
                break;
              }
              case 82: {
                result.hasRequirements = input.ReadString(ref result.requirements_);
                break;
              }
              case 90: {
                result.hasEnhancement = input.ReadString(ref result.enhancement_);
                break;
              }
              case 96: {
                result.hasStackCount = input.ReadUInt64(ref result.stackCount_);
                break;
              }
              case 104: {
                result.hasNumSockets = input.ReadUInt32(ref result.numSockets_);
                break;
              }
              case 112: {
                result.hasFilledSockets = input.ReadUInt32(ref result.filledSockets_);
                break;
              }
              case 122: {
                result.hasDisplayName = input.ReadString(ref result.displayName_);
                break;
              }
            }
          }
          
          if (unknownFields != null) {
            this.UnknownFields = unknownFields.Build();
          }
          return this;
        }
        
        
        public bool HasItemId {
         get { return result.hasItemId; }
        }
        public global::D3.OnlineService.ItemId ItemId {
          get { return result.ItemId; }
          set { SetItemId(value); }
        }
        public Builder SetItemId(global::D3.OnlineService.ItemId value) {
          pb::ThrowHelper.ThrowIfNull(value, "value");
          PrepareBuilder();
          result.hasItemId = true;
          result.itemId_ = value;
          return this;
        }
        public Builder SetItemId(global::D3.OnlineService.ItemId.Builder builderForValue) {
          pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
          PrepareBuilder();
          result.hasItemId = true;
          result.itemId_ = builderForValue.Build();
          return this;
        }
        public Builder MergeItemId(global::D3.OnlineService.ItemId value) {
          pb::ThrowHelper.ThrowIfNull(value, "value");
          PrepareBuilder();
          if (result.hasItemId &&
              result.itemId_ != global::D3.OnlineService.ItemId.DefaultInstance) {
              result.itemId_ = global::D3.OnlineService.ItemId.CreateBuilder(result.itemId_).MergeFrom(value).BuildPartial();
          } else {
            result.itemId_ = value;
          }
          result.hasItemId = true;
          return this;
        }
        public Builder ClearItemId() {
          PrepareBuilder();
          result.hasItemId = false;
          result.itemId_ = null;
          return this;
        }
        
        public bool HasItemQualityLevel {
          get { return result.hasItemQualityLevel; }
        }
        public uint ItemQualityLevel {
          get { return result.ItemQualityLevel; }
          set { SetItemQualityLevel(value); }
        }
        public Builder SetItemQualityLevel(uint value) {
          PrepareBuilder();
          result.hasItemQualityLevel = true;
          result.itemQualityLevel_ = value;
          return this;
        }
        public Builder ClearItemQualityLevel() {
          PrepareBuilder();
          result.hasItemQualityLevel = false;
          result.itemQualityLevel_ = 0;
          return this;
        }
        
        public bool HasName {
          get { return result.hasName; }
        }
        public string Name {
          get { return result.Name; }
          set { SetName(value); }
        }
        public Builder SetName(string value) {
          pb::ThrowHelper.ThrowIfNull(value, "value");
          PrepareBuilder();
          result.hasName = true;
          result.name_ = value;
          return this;
        }
        public Builder ClearName() {
          PrepareBuilder();
          result.hasName = false;
          result.name_ = "";
          return this;
        }
        
        public bool HasType {
          get { return result.hasType; }
        }
        public string Type {
          get { return result.Type; }
          set { SetType(value); }
        }
        public Builder SetType(string value) {
          pb::ThrowHelper.ThrowIfNull(value, "value");
          PrepareBuilder();
          result.hasType = true;
          result.type_ = value;
          return this;
        }
        public Builder ClearType() {
          PrepareBuilder();
          result.hasType = false;
          result.type_ = "";
          return this;
        }
        
        public bool HasSetItem {
          get { return result.hasSetItem; }
        }
        public int SetItem {
          get { return result.SetItem; }
          set { SetSetItem(value); }
        }
        public Builder SetSetItem(int value) {
          PrepareBuilder();
          result.hasSetItem = true;
          result.setItem_ = value;
          return this;
        }
        public Builder ClearSetItem() {
          PrepareBuilder();
          result.hasSetItem = false;
          result.setItem_ = 0;
          return this;
        }
        
        public bool HasFlavor {
          get { return result.hasFlavor; }
        }
        public string Flavor {
          get { return result.Flavor; }
          set { SetFlavor(value); }
        }
        public Builder SetFlavor(string value) {
          pb::ThrowHelper.ThrowIfNull(value, "value");
          PrepareBuilder();
          result.hasFlavor = true;
          result.flavor_ = value;
          return this;
        }
        public Builder ClearFlavor() {
          PrepareBuilder();
          result.hasFlavor = false;
          result.flavor_ = "";
          return this;
        }
        
        public bool HasCost {
          get { return result.hasCost; }
        }
        public string Cost {
          get { return result.Cost; }
          set { SetCost(value); }
        }
        public Builder SetCost(string value) {
          pb::ThrowHelper.ThrowIfNull(value, "value");
          PrepareBuilder();
          result.hasCost = true;
          result.cost_ = value;
          return this;
        }
        public Builder ClearCost() {
          PrepareBuilder();
          result.hasCost = false;
          result.cost_ = "";
          return this;
        }
        
        public bool HasDurability {
          get { return result.hasDurability; }
        }
        public string Durability {
          get { return result.Durability; }
          set { SetDurability(value); }
        }
        public Builder SetDurability(string value) {
          pb::ThrowHelper.ThrowIfNull(value, "value");
          PrepareBuilder();
          result.hasDurability = true;
          result.durability_ = value;
          return this;
        }
        public Builder ClearDurability() {
          PrepareBuilder();
          result.hasDurability = false;
          result.durability_ = "";
          return this;
        }
        
        public bool HasClassReqs {
          get { return result.hasClassReqs; }
        }
        public string ClassReqs {
          get { return result.ClassReqs; }
          set { SetClassReqs(value); }
        }
        public Builder SetClassReqs(string value) {
          pb::ThrowHelper.ThrowIfNull(value, "value");
          PrepareBuilder();
          result.hasClassReqs = true;
          result.classReqs_ = value;
          return this;
        }
        public Builder ClearClassReqs() {
          PrepareBuilder();
          result.hasClassReqs = false;
          result.classReqs_ = "";
          return this;
        }
        
        public bool HasRequirements {
          get { return result.hasRequirements; }
        }
        public string Requirements {
          get { return result.Requirements; }
          set { SetRequirements(value); }
        }
        public Builder SetRequirements(string value) {
          pb::ThrowHelper.ThrowIfNull(value, "value");
          PrepareBuilder();
          result.hasRequirements = true;
          result.requirements_ = value;
          return this;
        }
        public Builder ClearRequirements() {
          PrepareBuilder();
          result.hasRequirements = false;
          result.requirements_ = "";
          return this;
        }
        
        public bool HasEnhancement {
          get { return result.hasEnhancement; }
        }
        public string Enhancement {
          get { return result.Enhancement; }
          set { SetEnhancement(value); }
        }
        public Builder SetEnhancement(string value) {
          pb::ThrowHelper.ThrowIfNull(value, "value");
          PrepareBuilder();
          result.hasEnhancement = true;
          result.enhancement_ = value;
          return this;
        }
        public Builder ClearEnhancement() {
          PrepareBuilder();
          result.hasEnhancement = false;
          result.enhancement_ = "";
          return this;
        }
        
        public bool HasStackCount {
          get { return result.hasStackCount; }
        }
        public ulong StackCount {
          get { return result.StackCount; }
          set { SetStackCount(value); }
        }
        public Builder SetStackCount(ulong value) {
          PrepareBuilder();
          result.hasStackCount = true;
          result.stackCount_ = value;
          return this;
        }
        public Builder ClearStackCount() {
          PrepareBuilder();
          result.hasStackCount = false;
          result.stackCount_ = 0UL;
          return this;
        }
        
        public bool HasNumSockets {
          get { return result.hasNumSockets; }
        }
        public uint NumSockets {
          get { return result.NumSockets; }
          set { SetNumSockets(value); }
        }
        public Builder SetNumSockets(uint value) {
          PrepareBuilder();
          result.hasNumSockets = true;
          result.numSockets_ = value;
          return this;
        }
        public Builder ClearNumSockets() {
          PrepareBuilder();
          result.hasNumSockets = false;
          result.numSockets_ = 0;
          return this;
        }
        
        public bool HasFilledSockets {
          get { return result.hasFilledSockets; }
        }
        public uint FilledSockets {
          get { return result.FilledSockets; }
          set { SetFilledSockets(value); }
        }
        public Builder SetFilledSockets(uint value) {
          PrepareBuilder();
          result.hasFilledSockets = true;
          result.filledSockets_ = value;
          return this;
        }
        public Builder ClearFilledSockets() {
          PrepareBuilder();
          result.hasFilledSockets = false;
          result.filledSockets_ = 0;
          return this;
        }
        
        public bool HasDisplayName {
          get { return result.hasDisplayName; }
        }
        public string DisplayName {
          get { return result.DisplayName; }
          set { SetDisplayName(value); }
        }
        public Builder SetDisplayName(string value) {
          pb::ThrowHelper.ThrowIfNull(value, "value");
          PrepareBuilder();
          result.hasDisplayName = true;
          result.displayName_ = value;
          return this;
        }
        public Builder ClearDisplayName() {
          PrepareBuilder();
          result.hasDisplayName = false;
          result.displayName_ = "";
          return this;
        }
      }
      static ToolTip() {
        object.ReferenceEquals(global::D3.CS.CS.Descriptor, null);
      }
    }
    
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
    public sealed partial class TooltipList : pb::GeneratedMessage<TooltipList, TooltipList.Builder> {
      private TooltipList() { }
      private static readonly TooltipList defaultInstance = new TooltipList().MakeReadOnly();
      private static readonly string[] _tooltipListFieldNames = new string[] { "tooltips" };
      private static readonly uint[] _tooltipListFieldTags = new uint[] { 10 };
      public static TooltipList DefaultInstance {
        get { return defaultInstance; }
      }
      
      public override TooltipList DefaultInstanceForType {
        get { return DefaultInstance; }
      }
      
      protected override TooltipList ThisMessage {
        get { return this; }
      }
      
      public static pbd::MessageDescriptor Descriptor {
        get { return global::D3.CS.CS.internal__static_D3_CS_TooltipList__Descriptor; }
      }
      
      protected override pb::FieldAccess.FieldAccessorTable<TooltipList, TooltipList.Builder> InternalFieldAccessors {
        get { return global::D3.CS.CS.internal__static_D3_CS_TooltipList__FieldAccessorTable; }
      }
      
      public const int TooltipsFieldNumber = 1;
      private pbc::PopsicleList<global::D3.CS.ToolTip> tooltips_ = new pbc::PopsicleList<global::D3.CS.ToolTip>();
      public scg::IList<global::D3.CS.ToolTip> TooltipsList {
        get { return tooltips_; }
      }
      public int TooltipsCount {
        get { return tooltips_.Count; }
      }
      public global::D3.CS.ToolTip GetTooltips(int index) {
        return tooltips_[index];
      }
      
      public override bool IsInitialized {
        get {
          foreach (global::D3.CS.ToolTip element in TooltipsList) {
            if (!element.IsInitialized) return false;
          }
          return true;
        }
      }
      
      public override void WriteTo(pb::ICodedOutputStream output) {
        int size = SerializedSize;
        string[] field_names = _tooltipListFieldNames;
        if (tooltips_.Count > 0) {
          output.WriteMessageArray(1, field_names[0], tooltips_);
        }
        UnknownFields.WriteTo(output);
      }
      
      private int memoizedSerializedSize = -1;
      public override int SerializedSize {
        get {
          int size = memoizedSerializedSize;
          if (size != -1) return size;
          
          size = 0;
          foreach (global::D3.CS.ToolTip element in TooltipsList) {
            size += pb::CodedOutputStream.ComputeMessageSize(1, element);
          }
          size += UnknownFields.SerializedSize;
          memoizedSerializedSize = size;
          return size;
        }
      }
      
      public static TooltipList ParseFrom(pb::ByteString data) {
        return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
      }
      public static TooltipList ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
        return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
      }
      public static TooltipList ParseFrom(byte[] data) {
        return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
      }
      public static TooltipList ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
        return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
      }
      public static TooltipList ParseFrom(global::System.IO.Stream input) {
        return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
      }
      public static TooltipList ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
        return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
      }
      public static TooltipList ParseDelimitedFrom(global::System.IO.Stream input) {
        return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
      }
      public static TooltipList ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
        return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
      }
      public static TooltipList ParseFrom(pb::ICodedInputStream input) {
        return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
      }
      public static TooltipList ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
        return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
      }
      private TooltipList MakeReadOnly() {
        tooltips_.MakeReadOnly();
        return this;
      }
      
      public static Builder CreateBuilder() { return new Builder(); }
      public override Builder ToBuilder() { return CreateBuilder(this); }
      public override Builder CreateBuilderForType() { return new Builder(); }
      public static Builder CreateBuilder(TooltipList prototype) {
        return new Builder(prototype);
      }
      
      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
      [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
      [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
      public sealed partial class Builder : pb::GeneratedBuilder<TooltipList, Builder> {
        protected override Builder ThisBuilder {
          get { return this; }
        }
        public Builder() {
          result = DefaultInstance;
          resultIsReadOnly = true;
        }
        internal Builder(TooltipList cloneFrom) {
          result = cloneFrom;
          resultIsReadOnly = true;
        }
        
        private bool resultIsReadOnly;
        private TooltipList result;
        
        private TooltipList PrepareBuilder() {
          if (resultIsReadOnly) {
            TooltipList original = result;
            result = new TooltipList();
            resultIsReadOnly = false;
            MergeFrom(original);
          }
          return result;
        }
        
        public override bool IsInitialized {
          get { return result.IsInitialized; }
        }
        
        protected override TooltipList MessageBeingBuilt {
          get { return PrepareBuilder(); }
        }
        
        public override Builder Clear() {
          result = DefaultInstance;
          resultIsReadOnly = true;
          return this;
        }
        
        public override Builder Clone() {
          if (resultIsReadOnly) {
            return new Builder(result);
          } else {
            return new Builder().MergeFrom(result);
          }
        }
        
        public override pbd::MessageDescriptor DescriptorForType {
          get { return global::D3.CS.TooltipList.Descriptor; }
        }
        
        public override TooltipList DefaultInstanceForType {
          get { return global::D3.CS.TooltipList.DefaultInstance; }
        }
        
        public override TooltipList BuildPartial() {
          if (resultIsReadOnly) {
            return result;
          }
          resultIsReadOnly = true;
          return result.MakeReadOnly();
        }
        
        public override Builder MergeFrom(pb::IMessage other) {
          if (other is TooltipList) {
            return MergeFrom((TooltipList) other);
          } else {
            base.MergeFrom(other);
            return this;
          }
        }
        
        public override Builder MergeFrom(TooltipList other) {
          if (other == global::D3.CS.TooltipList.DefaultInstance) return this;
          PrepareBuilder();
          if (other.tooltips_.Count != 0) {
            result.tooltips_.Add(other.tooltips_);
          }
          this.MergeUnknownFields(other.UnknownFields);
          return this;
        }
        
        public override Builder MergeFrom(pb::ICodedInputStream input) {
          return MergeFrom(input, pb::ExtensionRegistry.Empty);
        }
        
        public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
          PrepareBuilder();
          pb::UnknownFieldSet.Builder unknownFields = null;
          uint tag;
          string field_name;
          while (input.ReadTag(out tag, out field_name)) {
            if(tag == 0 && field_name != null) {
              int field_ordinal = global::System.Array.BinarySearch(_tooltipListFieldNames, field_name, global::System.StringComparer.Ordinal);
              if(field_ordinal >= 0)
                tag = _tooltipListFieldTags[field_ordinal];
              else {
                if (unknownFields == null) {
                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
                }
                ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
                continue;
              }
            }
            switch (tag) {
              case 0: {
                throw pb::InvalidProtocolBufferException.InvalidTag();
              }
              default: {
                if (pb::WireFormat.IsEndGroupTag(tag)) {
                  if (unknownFields != null) {
                    this.UnknownFields = unknownFields.Build();
                  }
                  return this;
                }
                if (unknownFields == null) {
                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
                }
                ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
                break;
              }
              case 10: {
                input.ReadMessageArray(tag, field_name, result.tooltips_, global::D3.CS.ToolTip.DefaultInstance, extensionRegistry);
                break;
              }
            }
          }
          
          if (unknownFields != null) {
            this.UnknownFields = unknownFields.Build();
          }
          return this;
        }
        
        
        public pbc::IPopsicleList<global::D3.CS.ToolTip> TooltipsList {
          get { return PrepareBuilder().tooltips_; }
        }
        public int TooltipsCount {
          get { return result.TooltipsCount; }
        }
        public global::D3.CS.ToolTip GetTooltips(int index) {
          return result.GetTooltips(index);
        }
        public Builder SetTooltips(int index, global::D3.CS.ToolTip value) {
          pb::ThrowHelper.ThrowIfNull(value, "value");
          PrepareBuilder();
          result.tooltips_[index] = value;
          return this;
        }
        public Builder SetTooltips(int index, global::D3.CS.ToolTip.Builder builderForValue) {
          pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
          PrepareBuilder();
          result.tooltips_[index] = builderForValue.Build();
          return this;
        }
        public Builder AddTooltips(global::D3.CS.ToolTip value) {
          pb::ThrowHelper.ThrowIfNull(value, "value");
          PrepareBuilder();
          result.tooltips_.Add(value);
          return this;
        }
        public Builder AddTooltips(global::D3.CS.ToolTip.Builder builderForValue) {
          pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
          PrepareBuilder();
          result.tooltips_.Add(builderForValue.Build());
          return this;
        }
        public Builder AddRangeTooltips(scg::IEnumerable<global::D3.CS.ToolTip> values) {
          PrepareBuilder();
          result.tooltips_.Add(values);
          return this;
        }
        public Builder ClearTooltips() {
          PrepareBuilder();
          result.tooltips_.Clear();
          return this;
        }
      }
      static TooltipList() {
        object.ReferenceEquals(global::D3.CS.CS.Descriptor, null);
      }
    }
    
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
    public sealed partial class FallenHero : pb::GeneratedMessage<FallenHero, FallenHero.Builder> {
      private FallenHero() { }
      private static readonly FallenHero defaultInstance = new FallenHero().MakeReadOnly();
      private static readonly string[] _fallenHeroFieldNames = new string[] { "digest", "profile", "time" };
      private static readonly uint[] _fallenHeroFieldTags = new uint[] { 18, 10, 26 };
      public static FallenHero DefaultInstance {
        get { return defaultInstance; }
      }
      
      public override FallenHero DefaultInstanceForType {
        get { return DefaultInstance; }
      }
      
      protected override FallenHero ThisMessage {
        get { return this; }
      }
      
      public static pbd::MessageDescriptor Descriptor {
        get { return global::D3.CS.CS.internal__static_D3_CS_FallenHero__Descriptor; }
      }
      
      protected override pb::FieldAccess.FieldAccessorTable<FallenHero, FallenHero.Builder> InternalFieldAccessors {
        get { return global::D3.CS.CS.internal__static_D3_CS_FallenHero__FieldAccessorTable; }
      }
      
      public const int ProfileFieldNumber = 1;
      private bool hasProfile;
      private global::D3.Profile.HeroProfile profile_;
      public bool HasProfile {
        get { return hasProfile; }
      }
      public global::D3.Profile.HeroProfile Profile {
        get { return profile_ ?? global::D3.Profile.HeroProfile.DefaultInstance; }
      }
      
      public const int DigestFieldNumber = 2;
      private bool hasDigest;
      private global::D3.Hero.Digest digest_;
      public bool HasDigest {
        get { return hasDigest; }
      }
      public global::D3.Hero.Digest Digest {
        get { return digest_ ?? global::D3.Hero.Digest.DefaultInstance; }
      }
      
      public const int TimeFieldNumber = 3;
      private bool hasTime;
      private string time_ = "";
      public bool HasTime {
        get { return hasTime; }
      }
      public string Time {
        get { return time_; }
      }
      
      public override bool IsInitialized {
        get {
          if (!hasProfile) return false;
          if (!hasDigest) return false;
          if (!hasTime) return false;
          if (!Profile.IsInitialized) return false;
          if (!Digest.IsInitialized) return false;
          return true;
        }
      }
      
      public override void WriteTo(pb::ICodedOutputStream output) {
        int size = SerializedSize;
        string[] field_names = _fallenHeroFieldNames;
        if (hasProfile) {
          output.WriteMessage(1, field_names[1], Profile);
        }
        if (hasDigest) {
          output.WriteMessage(2, field_names[0], Digest);
        }
        if (hasTime) {
          output.WriteString(3, field_names[2], Time);
        }
        UnknownFields.WriteTo(output);
      }
      
      private int memoizedSerializedSize = -1;
      public override int SerializedSize {
        get {
          int size = memoizedSerializedSize;
          if (size != -1) return size;
          
          size = 0;
          if (hasProfile) {
            size += pb::CodedOutputStream.ComputeMessageSize(1, Profile);
          }
          if (hasDigest) {
            size += pb::CodedOutputStream.ComputeMessageSize(2, Digest);
          }
          if (hasTime) {
            size += pb::CodedOutputStream.ComputeStringSize(3, Time);
          }
          size += UnknownFields.SerializedSize;
          memoizedSerializedSize = size;
          return size;
        }
      }
      
      public static FallenHero ParseFrom(pb::ByteString data) {
        return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
      }
      public static FallenHero ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
        return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
      }
      public static FallenHero ParseFrom(byte[] data) {
        return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
      }
      public static FallenHero ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
        return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
      }
      public static FallenHero ParseFrom(global::System.IO.Stream input) {
        return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
      }
      public static FallenHero ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
        return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
      }
      public static FallenHero ParseDelimitedFrom(global::System.IO.Stream input) {
        return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
      }
      public static FallenHero ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
        return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
      }
      public static FallenHero ParseFrom(pb::ICodedInputStream input) {
        return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
      }
      public static FallenHero ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
        return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
      }
      private FallenHero MakeReadOnly() {
        return this;
      }
      
      public static Builder CreateBuilder() { return new Builder(); }
      public override Builder ToBuilder() { return CreateBuilder(this); }
      public override Builder CreateBuilderForType() { return new Builder(); }
      public static Builder CreateBuilder(FallenHero prototype) {
        return new Builder(prototype);
      }
      
      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
      [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
      [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
      public sealed partial class Builder : pb::GeneratedBuilder<FallenHero, Builder> {
        protected override Builder ThisBuilder {
          get { return this; }
        }
        public Builder() {
          result = DefaultInstance;
          resultIsReadOnly = true;
        }
        internal Builder(FallenHero cloneFrom) {
          result = cloneFrom;
          resultIsReadOnly = true;
        }
        
        private bool resultIsReadOnly;
        private FallenHero result;
        
        private FallenHero PrepareBuilder() {
          if (resultIsReadOnly) {
            FallenHero original = result;
            result = new FallenHero();
            resultIsReadOnly = false;
            MergeFrom(original);
          }
          return result;
        }
        
        public override bool IsInitialized {
          get { return result.IsInitialized; }
        }
        
        protected override FallenHero MessageBeingBuilt {
          get { return PrepareBuilder(); }
        }
        
        public override Builder Clear() {
          result = DefaultInstance;
          resultIsReadOnly = true;
          return this;
        }
        
        public override Builder Clone() {
          if (resultIsReadOnly) {
            return new Builder(result);
          } else {
            return new Builder().MergeFrom(result);
          }
        }
        
        public override pbd::MessageDescriptor DescriptorForType {
          get { return global::D3.CS.FallenHero.Descriptor; }
        }
        
        public override FallenHero DefaultInstanceForType {
          get { return global::D3.CS.FallenHero.DefaultInstance; }
        }
        
        public override FallenHero BuildPartial() {
          if (resultIsReadOnly) {
            return result;
          }
          resultIsReadOnly = true;
          return result.MakeReadOnly();
        }
        
        public override Builder MergeFrom(pb::IMessage other) {
          if (other is FallenHero) {
            return MergeFrom((FallenHero) other);
          } else {
            base.MergeFrom(other);
            return this;
          }
        }
        
        public override Builder MergeFrom(FallenHero other) {
          if (other == global::D3.CS.FallenHero.DefaultInstance) return this;
          PrepareBuilder();
          if (other.HasProfile) {
            MergeProfile(other.Profile);
          }
          if (other.HasDigest) {
            MergeDigest(other.Digest);
          }
          if (other.HasTime) {
            Time = other.Time;
          }
          this.MergeUnknownFields(other.UnknownFields);
          return this;
        }
        
        public override Builder MergeFrom(pb::ICodedInputStream input) {
          return MergeFrom(input, pb::ExtensionRegistry.Empty);
        }
        
        public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
          PrepareBuilder();
          pb::UnknownFieldSet.Builder unknownFields = null;
          uint tag;
          string field_name;
          while (input.ReadTag(out tag, out field_name)) {
            if(tag == 0 && field_name != null) {
              int field_ordinal = global::System.Array.BinarySearch(_fallenHeroFieldNames, field_name, global::System.StringComparer.Ordinal);
              if(field_ordinal >= 0)
                tag = _fallenHeroFieldTags[field_ordinal];
              else {
                if (unknownFields == null) {
                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
                }
                ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
                continue;
              }
            }
            switch (tag) {
              case 0: {
                throw pb::InvalidProtocolBufferException.InvalidTag();
              }
              default: {
                if (pb::WireFormat.IsEndGroupTag(tag)) {
                  if (unknownFields != null) {
                    this.UnknownFields = unknownFields.Build();
                  }
                  return this;
                }
                if (unknownFields == null) {
                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
                }
                ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
                break;
              }
              case 10: {
                global::D3.Profile.HeroProfile.Builder subBuilder = global::D3.Profile.HeroProfile.CreateBuilder();
                if (result.hasProfile) {
                  subBuilder.MergeFrom(Profile);
                }
                input.ReadMessage(subBuilder, extensionRegistry);
                Profile = subBuilder.BuildPartial();
                break;
              }
              case 18: {
                global::D3.Hero.Digest.Builder subBuilder = global::D3.Hero.Digest.CreateBuilder();
                if (result.hasDigest) {
                  subBuilder.MergeFrom(Digest);
                }
                input.ReadMessage(subBuilder, extensionRegistry);
                Digest = subBuilder.BuildPartial();
                break;
              }
              case 26: {
                result.hasTime = input.ReadString(ref result.time_);
                break;
              }
            }
          }
          
          if (unknownFields != null) {
            this.UnknownFields = unknownFields.Build();
          }
          return this;
        }
        
        
        public bool HasProfile {
         get { return result.hasProfile; }
        }
        public global::D3.Profile.HeroProfile Profile {
          get { return result.Profile; }
          set { SetProfile(value); }
        }
        public Builder SetProfile(global::D3.Profile.HeroProfile value) {
          pb::ThrowHelper.ThrowIfNull(value, "value");
          PrepareBuilder();
          result.hasProfile = true;
          result.profile_ = value;
          return this;
        }
        public Builder SetProfile(global::D3.Profile.HeroProfile.Builder builderForValue) {
          pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
          PrepareBuilder();
          result.hasProfile = true;
          result.profile_ = builderForValue.Build();
          return this;
        }
        public Builder MergeProfile(global::D3.Profile.HeroProfile value) {
          pb::ThrowHelper.ThrowIfNull(value, "value");
          PrepareBuilder();
          if (result.hasProfile &&
              result.profile_ != global::D3.Profile.HeroProfile.DefaultInstance) {
              result.profile_ = global::D3.Profile.HeroProfile.CreateBuilder(result.profile_).MergeFrom(value).BuildPartial();
          } else {
            result.profile_ = value;
          }
          result.hasProfile = true;
          return this;
        }
        public Builder ClearProfile() {
          PrepareBuilder();
          result.hasProfile = false;
          result.profile_ = null;
          return this;
        }
        
        public bool HasDigest {
         get { return result.hasDigest; }
        }
        public global::D3.Hero.Digest Digest {
          get { return result.Digest; }
          set { SetDigest(value); }
        }
        public Builder SetDigest(global::D3.Hero.Digest value) {
          pb::ThrowHelper.ThrowIfNull(value, "value");
          PrepareBuilder();
          result.hasDigest = true;
          result.digest_ = value;
          return this;
        }
        public Builder SetDigest(global::D3.Hero.Digest.Builder builderForValue) {
          pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
          PrepareBuilder();
          result.hasDigest = true;
          result.digest_ = builderForValue.Build();
          return this;
        }
        public Builder MergeDigest(global::D3.Hero.Digest value) {
          pb::ThrowHelper.ThrowIfNull(value, "value");
          PrepareBuilder();
          if (result.hasDigest &&
              result.digest_ != global::D3.Hero.Digest.DefaultInstance) {
              result.digest_ = global::D3.Hero.Digest.CreateBuilder(result.digest_).MergeFrom(value).BuildPartial();
          } else {
            result.digest_ = value;
          }
          result.hasDigest = true;
          return this;
        }
        public Builder ClearDigest() {
          PrepareBuilder();
          result.hasDigest = false;
          result.digest_ = null;
          return this;
        }
        
        public bool HasTime {
          get { return result.hasTime; }
        }
        public string Time {
          get { return result.Time; }
          set { SetTime(value); }
        }
        public Builder SetTime(string value) {
          pb::ThrowHelper.ThrowIfNull(value, "value");
          PrepareBuilder();
          result.hasTime = true;
          result.time_ = value;
          return this;
        }
        public Builder ClearTime() {
          PrepareBuilder();
          result.hasTime = false;
          result.time_ = "";
          return this;
        }
      }
      static FallenHero() {
        object.ReferenceEquals(global::D3.CS.CS.Descriptor, null);
      }
    }
    
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
    public sealed partial class Snapshot : pb::GeneratedMessage<Snapshot, Snapshot.Builder> {
      private Snapshot() { }
      private static readonly Snapshot defaultInstance = new Snapshot().MakeReadOnly();
      private static readonly string[] _snapshotFieldNames = new string[] { "account_profile", "definition", "fallen_heros", "hero_profiles", "heros", "version" };
      private static readonly uint[] _snapshotFieldTags = new uint[] { 34, 18, 50, 42, 26, 8 };
      public static Snapshot DefaultInstance {
        get { return defaultInstance; }
      }
      
      public override Snapshot DefaultInstanceForType {
        get { return DefaultInstance; }
      }
      
      protected override Snapshot ThisMessage {
        get { return this; }
      }
      
      public static pbd::MessageDescriptor Descriptor {
        get { return global::D3.CS.CS.internal__static_D3_CS_Snapshot__Descriptor; }
      }
      
      protected override pb::FieldAccess.FieldAccessorTable<Snapshot, Snapshot.Builder> InternalFieldAccessors {
        get { return global::D3.CS.CS.internal__static_D3_CS_Snapshot__FieldAccessorTable; }
      }
      
      public const int VersionFieldNumber = 1;
      private bool hasVersion;
      private ulong version_;
      public bool HasVersion {
        get { return hasVersion; }
      }
      public ulong Version {
        get { return version_; }
      }
      
      public const int DefinitionFieldNumber = 2;
      private bool hasDefinition;
      private global::D3.Account.SavedDefinition definition_;
      public bool HasDefinition {
        get { return hasDefinition; }
      }
      public global::D3.Account.SavedDefinition Definition {
        get { return definition_ ?? global::D3.Account.SavedDefinition.DefaultInstance; }
      }
      
      public const int HerosFieldNumber = 3;
      private pbc::PopsicleList<global::D3.Hero.SavedDefinition> heros_ = new pbc::PopsicleList<global::D3.Hero.SavedDefinition>();
      public scg::IList<global::D3.Hero.SavedDefinition> HerosList {
        get { return heros_; }
      }
      public int HerosCount {
        get { return heros_.Count; }
      }
      public global::D3.Hero.SavedDefinition GetHeros(int index) {
        return heros_[index];
      }
      
      public const int AccountProfileFieldNumber = 4;
      private bool hasAccountProfile;
      private global::D3.Profile.AccountProfile accountProfile_;
      public bool HasAccountProfile {
        get { return hasAccountProfile; }
      }
      public global::D3.Profile.AccountProfile AccountProfile {
        get { return accountProfile_ ?? global::D3.Profile.AccountProfile.DefaultInstance; }
      }
      
      public const int HeroProfilesFieldNumber = 5;
      private bool hasHeroProfiles;
      private global::D3.Profile.HeroProfileList heroProfiles_;
      public bool HasHeroProfiles {
        get { return hasHeroProfiles; }
      }
      public global::D3.Profile.HeroProfileList HeroProfiles {
        get { return heroProfiles_ ?? global::D3.Profile.HeroProfileList.DefaultInstance; }
      }
      
      public const int FallenHerosFieldNumber = 6;
      private pbc::PopsicleList<global::D3.CS.FallenHero> fallenHeros_ = new pbc::PopsicleList<global::D3.CS.FallenHero>();
      public scg::IList<global::D3.CS.FallenHero> FallenHerosList {
        get { return fallenHeros_; }
      }
      public int FallenHerosCount {
        get { return fallenHeros_.Count; }
      }
      public global::D3.CS.FallenHero GetFallenHeros(int index) {
        return fallenHeros_[index];
      }
      
      public override bool IsInitialized {
        get {
          if (!hasVersion) return false;
          if (!hasDefinition) return false;
          if (!hasAccountProfile) return false;
          if (!hasHeroProfiles) return false;
          if (!Definition.IsInitialized) return false;
          foreach (global::D3.Hero.SavedDefinition element in HerosList) {
            if (!element.IsInitialized) return false;
          }
          if (!HeroProfiles.IsInitialized) return false;
          foreach (global::D3.CS.FallenHero element in FallenHerosList) {
            if (!element.IsInitialized) return false;
          }
          return true;
        }
      }
      
      public override void WriteTo(pb::ICodedOutputStream output) {
        int size = SerializedSize;
        string[] field_names = _snapshotFieldNames;
        if (hasVersion) {
          output.WriteUInt64(1, field_names[5], Version);
        }
        if (hasDefinition) {
          output.WriteMessage(2, field_names[1], Definition);
        }
        if (heros_.Count > 0) {
          output.WriteMessageArray(3, field_names[4], heros_);
        }
        if (hasAccountProfile) {
          output.WriteMessage(4, field_names[0], AccountProfile);
        }
        if (hasHeroProfiles) {
          output.WriteMessage(5, field_names[3], HeroProfiles);
        }
        if (fallenHeros_.Count > 0) {
          output.WriteMessageArray(6, field_names[2], fallenHeros_);
        }
        UnknownFields.WriteTo(output);
      }
      
      private int memoizedSerializedSize = -1;
      public override int SerializedSize {
        get {
          int size = memoizedSerializedSize;
          if (size != -1) return size;
          
          size = 0;
          if (hasVersion) {
            size += pb::CodedOutputStream.ComputeUInt64Size(1, Version);
          }
          if (hasDefinition) {
            size += pb::CodedOutputStream.ComputeMessageSize(2, Definition);
          }
          foreach (global::D3.Hero.SavedDefinition element in HerosList) {
            size += pb::CodedOutputStream.ComputeMessageSize(3, element);
          }
          if (hasAccountProfile) {
            size += pb::CodedOutputStream.ComputeMessageSize(4, AccountProfile);
          }
          if (hasHeroProfiles) {
            size += pb::CodedOutputStream.ComputeMessageSize(5, HeroProfiles);
          }
          foreach (global::D3.CS.FallenHero element in FallenHerosList) {
            size += pb::CodedOutputStream.ComputeMessageSize(6, element);
          }
          size += UnknownFields.SerializedSize;
          memoizedSerializedSize = size;
          return size;
        }
      }
      
      public static Snapshot ParseFrom(pb::ByteString data) {
        return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
      }
      public static Snapshot ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
        return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
      }
      public static Snapshot ParseFrom(byte[] data) {
        return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
      }
      public static Snapshot ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
        return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
      }
      public static Snapshot ParseFrom(global::System.IO.Stream input) {
        return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
      }
      public static Snapshot ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
        return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
      }
      public static Snapshot ParseDelimitedFrom(global::System.IO.Stream input) {
        return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
      }
      public static Snapshot ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
        return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
      }
      public static Snapshot ParseFrom(pb::ICodedInputStream input) {
        return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
      }
      public static Snapshot ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
        return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
      }
      private Snapshot MakeReadOnly() {
        heros_.MakeReadOnly();
        fallenHeros_.MakeReadOnly();
        return this;
      }
      
      public static Builder CreateBuilder() { return new Builder(); }
      public override Builder ToBuilder() { return CreateBuilder(this); }
      public override Builder CreateBuilderForType() { return new Builder(); }
      public static Builder CreateBuilder(Snapshot prototype) {
        return new Builder(prototype);
      }
      
      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
      [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
      [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.4.1.473")]
      public sealed partial class Builder : pb::GeneratedBuilder<Snapshot, Builder> {
        protected override Builder ThisBuilder {
          get { return this; }
        }
        public Builder() {
          result = DefaultInstance;
          resultIsReadOnly = true;
        }
        internal Builder(Snapshot cloneFrom) {
          result = cloneFrom;
          resultIsReadOnly = true;
        }
        
        private bool resultIsReadOnly;
        private Snapshot result;
        
        private Snapshot PrepareBuilder() {
          if (resultIsReadOnly) {
            Snapshot original = result;
            result = new Snapshot();
            resultIsReadOnly = false;
            MergeFrom(original);
          }
          return result;
        }
        
        public override bool IsInitialized {
          get { return result.IsInitialized; }
        }
        
        protected override Snapshot MessageBeingBuilt {
          get { return PrepareBuilder(); }
        }
        
        public override Builder Clear() {
          result = DefaultInstance;
          resultIsReadOnly = true;
          return this;
        }
        
        public override Builder Clone() {
          if (resultIsReadOnly) {
            return new Builder(result);
          } else {
            return new Builder().MergeFrom(result);
          }
        }
        
        public override pbd::MessageDescriptor DescriptorForType {
          get { return global::D3.CS.Snapshot.Descriptor; }
        }
        
        public override Snapshot DefaultInstanceForType {
  
gt:         get { return global::D3.CS.Snapshot.DefaultInstance; }