// <auto-generated>
//     Generated by the protocol buffer compiler.  DO NOT EDIT!
//     source: circuits/static/ev/circuit_type_data.proto
// </auto-generated>
#pragma warning disable 1591, 0612, 3021, 8981
#region Designer generated code

using pb = global::Google.Protobuf;
using pbc = global::Google.Protobuf.Collections;
using pbr = global::Google.Protobuf.Reflection;
using scg = global::System.Collections.Generic;
namespace Circuits.Static.EV.Protobuf {

  /// <summary>Holder for reflection information generated from circuits/static/ev/circuit_type_data.proto</summary>
  public static partial class CircuitTypeDataReflection {

    #region Descriptor
    /// <summary>File descriptor for circuits/static/ev/circuit_type_data.proto</summary>
    public static pbr::FileDescriptor Descriptor {
      get { return descriptor; }
    }
    private static pbr::FileDescriptor descriptor;

    static CircuitTypeDataReflection() {
      byte[] descriptorData = global::System.Convert.FromBase64String(
          string.Concat(
            "CipjaXJjdWl0cy9zdGF0aWMvZXYvY2lyY3VpdF90eXBlX2RhdGEucHJvdG8S",
            "CGNpcmN1aXRzGhRjb3JlL2d1aWRfZGF0YS5wcm90byKJAQoWQXBwbGllZEdl",
            "bmVyaWNUeXBlRGF0YRIwCg1vcmlnaW5hbF90eXBlGAEgASgLMhkuY2lyY3Vp",
            "dHMuQ2lyY3VpdFR5cGVEYXRhEj0KGnR5cGVfcGFyYW1ldGVyX2Fzc2lnbm1l",
            "bnRzGAIgAygLMhkuY2lyY3VpdHMuQ2lyY3VpdFR5cGVEYXRhIuICCg9DaXJj",
            "dWl0VHlwZURhdGESIAoEa2luZBgBIAEoDjISLmNpcmN1aXRzLlR5cGVLaW5k",
            "Ej4KFGFwcGxpZWRfZ2VuZXJpY190eXBlGAIgASgLMiAuY2lyY3VpdHMuQXBw",
            "bGllZEdlbmVyaWNUeXBlRGF0YRIxCg1mdW5jdGlvbl90eXBlGAMgASgLMhou",
            "Y2lyY3VpdHMuRnVuY3Rpb25UeXBlRGF0YRJPCh10eXBlX3BhcmFtZXRlcl9y",
            "ZWZlcmVuY2VfdHlwZRgEIAEoCzIoLmNpcmN1aXRzLlR5cGVQYXJhbWV0ZXJS",
            "ZWZlcmVuY2VUeXBlRGF0YRI8ChN0eXBlX3BhcmFtZXRlcl90eXBlGAUgASgL",
            "Mh8uY2lyY3VpdHMuVHlwZVBhcmFtZXRlclR5cGVEYXRhEisKCmNsYXNzX3R5",
            "cGUYBiABKAsyFy5jaXJjdWl0cy5DbGFzc1R5cGVEYXRhIpcDCg1DbGFzc1R5",
            "cGVEYXRhEhoKAmlkGAEgASgLMg4uY29yZS5HdWlkRGF0YRIyCg90eXBlX3Bh",
            "cmFtZXRlcnMYAiADKAsyGS5jaXJjdWl0cy5DaXJjdWl0VHlwZURhdGESOwoK",
            "cHJvcGVydGllcxgDIAMoCzInLmNpcmN1aXRzLkNsYXNzVHlwZURhdGEuUHJv",
            "cGVydGllc0VudHJ5EjkKCWZ1bmN0aW9ucxgEIAMoCzImLmNpcmN1aXRzLkNs",
            "YXNzVHlwZURhdGEuRnVuY3Rpb25zRW50cnkSLgoLYmFzZUNsYXNzZXMYBSAD",
            "KAsyGS5jaXJjdWl0cy5DaXJjdWl0VHlwZURhdGEaRQoPUHJvcGVydGllc0Vu",
            "dHJ5EgsKA2tleRgBIAEoCRIlCgV2YWx1ZRgCIAEoCzIWLmNpcmN1aXRzLlBy",
            "b3BlcnR5RGF0YRpHCg5GdW5jdGlvbnNFbnRyeRILCgNrZXkYASABKAkSKAoF",
            "dmFsdWUYAiABKAsyGS5jaXJjdWl0cy5DaXJjdWl0VHlwZURhdGEiygIKEEZ1",
            "bmN0aW9uVHlwZURhdGESMgoPdHlwZV9wYXJhbWV0ZXJzGAEgAygLMhkuY2ly",
            "Y3VpdHMuQ2lyY3VpdFR5cGVEYXRhEjYKBmlucHV0cxgCIAMoCzImLmNpcmN1",
            "aXRzLkZ1bmN0aW9uVHlwZURhdGEuSW5wdXRzRW50cnkSOAoHb3V0cHV0cxgD",
            "IAMoCzInLmNpcmN1aXRzLkZ1bmN0aW9uVHlwZURhdGEuT3V0cHV0c0VudHJ5",
            "GkYKC0lucHV0c0VudHJ5EgsKA2tleRgBIAEoCRIqCgV2YWx1ZRgCIAEoCzIb",
            "LmNpcmN1aXRzLkZ1bmN0aW9uSW5wdXREYXRhGkgKDE91dHB1dHNFbnRyeRIL",
            "CgNrZXkYASABKAkSKwoFdmFsdWUYAiABKAsyHC5jaXJjdWl0cy5GdW5jdGlv",
            "bk91dHB1dERhdGEiPAoRRnVuY3Rpb25JbnB1dERhdGESJwoEdHlwZRgBIAEo",
            "CzIZLmNpcmN1aXRzLkNpcmN1aXRUeXBlRGF0YSJRCgxQcm9wZXJ0eURhdGES",
            "JwoEdHlwZRgBIAEoCzIZLmNpcmN1aXRzLkNpcmN1aXRUeXBlRGF0YRILCgNn",
            "ZXQYAiABKAgSCwoDc2V0GAMgASgIIj0KEkZ1bmN0aW9uT3V0cHV0RGF0YRIn",
            "CgR0eXBlGAEgASgLMhkuY2lyY3VpdHMuQ2lyY3VpdFR5cGVEYXRhIi4KHlR5",
            "cGVQYXJhbWV0ZXJSZWZlcmVuY2VUeXBlRGF0YRIMCgRuYW1lGAEgASgJIlQK",
            "FVR5cGVQYXJhbWV0ZXJUeXBlRGF0YRIMCgRuYW1lGAEgASgJEi0KCmNvbnN0",
            "cmFpbnQYAiABKAsyGS5jaXJjdWl0cy5DaXJjdWl0VHlwZURhdGEq5wEKCFR5",
            "cGVLaW5kEgcKA0FueRAAEgsKB0Jvb2xlYW4QARIJCgVJbnQzMhACEgoKBlNp",
            "bmdsZRADEgoKBlN0cmluZxAEEggKBEV4ZWMQBRIJCgVFcnJvchAGEgkKBUFy",
            "cmF5EAcSCQoFVHVwbGUQCBIJCgVVbmlvbhAJEgkKBUNsYXNzEAoSDAoIRnVu",
            "Y3Rpb24QCxIRCg1UeXBlUGFyYW1ldGVyEAwSGgoWVHlwZVBhcmFtZXRlclJl",
            "ZmVyZW5jZRANEhIKDkFwcGxpZWRHZW5lcmljEA4SEAoMSW50ZXJzZWN0aW9u",
            "EA9CHqoCG0NpcmN1aXRzLlN0YXRpYy5FVi5Qcm90b2J1ZmIGcHJvdG8z"));
      descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
          new pbr::FileDescriptor[] { global::RecRoom.Protobuf.Core.GuidDataReflection.Descriptor, },
          new pbr::GeneratedClrTypeInfo(new[] {typeof(global::Circuits.Static.EV.Protobuf.TypeKind), }, null, new pbr::GeneratedClrTypeInfo[] {
            new pbr::GeneratedClrTypeInfo(typeof(global::Circuits.Static.EV.Protobuf.AppliedGenericTypeData), global::Circuits.Static.EV.Protobuf.AppliedGenericTypeData.Parser, new[]{ "OriginalType", "TypeParameterAssignments" }, null, null, null, null),
            new pbr::GeneratedClrTypeInfo(typeof(global::Circuits.Static.EV.Protobuf.CircuitTypeData), global::Circuits.Static.EV.Protobuf.CircuitTypeData.Parser, new[]{ "Kind", "AppliedGenericType", "FunctionType", "TypeParameterReferenceType", "TypeParameterType", "ClassType" }, null, null, null, null),
            new pbr::GeneratedClrTypeInfo(typeof(global::Circuits.Static.EV.Protobuf.ClassTypeData), global::Circuits.Static.EV.Protobuf.ClassTypeData.Parser, new[]{ "Id", "TypeParameters", "Properties", "Functions", "BaseClasses" }, null, null, null, new pbr::GeneratedClrTypeInfo[] { new pbr::GeneratedClrTypeInfo(typeof(global::Circuits.Static.EV.Protobuf.ClassTypeData.Types.PropertiesEntry), global::Circuits.Static.EV.Protobuf.ClassTypeData.Types.PropertiesEntry.Parser, new[]{ "Key", "Value" }, null, null, null, null),
            new pbr::GeneratedClrTypeInfo(typeof(global::Circuits.Static.EV.Protobuf.ClassTypeData.Types.FunctionsEntry), global::Circuits.Static.EV.Protobuf.ClassTypeData.Types.FunctionsEntry.Parser, new[]{ "Key", "Value" }, null, null, null, null)}),
            new pbr::GeneratedClrTypeInfo(typeof(global::Circuits.Static.EV.Protobuf.FunctionTypeData), global::Circuits.Static.EV.Protobuf.FunctionTypeData.Parser, new[]{ "TypeParameters", "Inputs", "Outputs" }, null, null, null, new pbr::GeneratedClrTypeInfo[] { new pbr::GeneratedClrTypeInfo(typeof(global::Circuits.Static.EV.Protobuf.FunctionTypeData.Types.InputsEntry), global::Circuits.Static.EV.Protobuf.FunctionTypeData.Types.InputsEntry.Parser, new[]{ "Key", "Value" }, null, null, null, null),
            new pbr::GeneratedClrTypeInfo(typeof(global::Circuits.Static.EV.Protobuf.FunctionTypeData.Types.OutputsEntry), global::Circuits.Static.EV.Protobuf.FunctionTypeData.Types.OutputsEntry.Parser, new[]{ "Key", "Value" }, null, null, null, null)}),
            new pbr::GeneratedClrTypeInfo(typeof(global::Circuits.Static.EV.Protobuf.FunctionInputData), global::Circuits.Static.EV.Protobuf.FunctionInputData.Parser, new[]{ "Type" }, null, null, null, null),
            new pbr::GeneratedClrTypeInfo(typeof(global::Circuits.Static.EV.Protobuf.PropertyData), global::Circuits.Static.EV.Protobuf.PropertyData.Parser, new[]{ "Type", "Get", "Set" }, null, null, null, null),
            new pbr::GeneratedClrTypeInfo(typeof(global::Circuits.Static.EV.Protobuf.FunctionOutputData), global::Circuits.Static.EV.Protobuf.FunctionOutputData.Parser, new[]{ "Type" }, null, null, null, null),
            new pbr::GeneratedClrTypeInfo(typeof(global::Circuits.Static.EV.Protobuf.TypeParameterReferenceTypeData), global::Circuits.Static.EV.Protobuf.TypeParameterReferenceTypeData.Parser, new[]{ "Name" }, null, null, null, null),
            new pbr::GeneratedClrTypeInfo(typeof(global::Circuits.Static.EV.Protobuf.TypeParameterTypeData), global::Circuits.Static.EV.Protobuf.TypeParameterTypeData.Parser, new[]{ "Name", "Constraint" }, null, null, null, null)
          }));
    }
    #endregion

  }
  #region Enums
  public enum TypeKind {
    [pbr::OriginalName("Any")] Any = 0,
    [pbr::OriginalName("Boolean")] Boolean = 1,
    [pbr::OriginalName("Int32")] Int32 = 2,
    [pbr::OriginalName("Single")] Single = 3,
    [pbr::OriginalName("String")] String = 4,
    [pbr::OriginalName("Exec")] Exec = 5,
    [pbr::OriginalName("Error")] Error = 6,
    [pbr::OriginalName("Array")] Array = 7,
    [pbr::OriginalName("Tuple")] Tuple = 8,
    [pbr::OriginalName("Union")] Union = 9,
    [pbr::OriginalName("Class")] Class = 10,
    [pbr::OriginalName("Function")] Function = 11,
    [pbr::OriginalName("TypeParameter")] TypeParameter = 12,
    [pbr::OriginalName("TypeParameterReference")] TypeParameterReference = 13,
    [pbr::OriginalName("AppliedGeneric")] AppliedGeneric = 14,
    [pbr::OriginalName("Intersection")] Intersection = 15,
  }

  #endregion

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

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Circuits.Static.EV.Protobuf.CircuitTypeDataReflection.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 AppliedGenericTypeData() {
      OnConstruction();
    }

    partial void OnConstruction();

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

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

    /// <summary>Field number for the "original_type" field.</summary>
    public const int OriginalTypeFieldNumber = 1;
    private global::Circuits.Static.EV.Protobuf.CircuitTypeData originalType_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public global::Circuits.Static.EV.Protobuf.CircuitTypeData OriginalType {
      get { return originalType_; }
      set {
        originalType_ = value;
      }
    }

    /// <summary>Field number for the "type_parameter_assignments" field.</summary>
    public const int TypeParameterAssignmentsFieldNumber = 2;
    private static readonly pb::FieldCodec<global::Circuits.Static.EV.Protobuf.CircuitTypeData> _repeated_typeParameterAssignments_codec
        = pb::FieldCodec.ForMessage(18, global::Circuits.Static.EV.Protobuf.CircuitTypeData.Parser);
    private readonly pbc::RepeatedField<global::Circuits.Static.EV.Protobuf.CircuitTypeData> typeParameterAssignments_ = new pbc::RepeatedField<global::Circuits.Static.EV.Protobuf.CircuitTypeData>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public pbc::RepeatedField<global::Circuits.Static.EV.Protobuf.CircuitTypeData> TypeParameterAssignments {
      get { return typeParameterAssignments_; }
    }

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

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public bool Equals(AppliedGenericTypeData other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (!object.Equals(OriginalType, other.OriginalType)) return false;
      if(!typeParameterAssignments_.Equals(other.typeParameterAssignments_)) 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 (originalType_ != null) hash ^= OriginalType.GetHashCode();
      hash ^= typeParameterAssignments_.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 (originalType_ != null) {
        output.WriteRawTag(10);
        output.WriteMessage(OriginalType);
      }
      typeParameterAssignments_.WriteTo(output, _repeated_typeParameterAssignments_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) {
      if (originalType_ != null) {
        output.WriteRawTag(10);
        output.WriteMessage(OriginalType);
      }
      typeParameterAssignments_.WriteTo(ref output, _repeated_typeParameterAssignments_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;
      if (originalType_ != null) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(OriginalType);
      }
      size += typeParameterAssignments_.CalculateSize(_repeated_typeParameterAssignments_codec);
      if (_unknownFields != null) {
        size += _unknownFields.CalculateSize();
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void MergeFrom(AppliedGenericTypeData other) {
      if (other == null) {
        return;
      }
      if (other.originalType_ != null) {
        if (originalType_ == null) {
          OriginalType = new global::Circuits.Static.EV.Protobuf.CircuitTypeData();
        }
        OriginalType.MergeFrom(other.OriginalType);
      }
      typeParameterAssignments_.Add(other.typeParameterAssignments_);
      _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) {
      if ((tag & 7) == 4) {
        // Abort on any end group tag.
        return;
      }
      switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
            break;
          case 10: {
            if (originalType_ == null) {
              OriginalType = new global::Circuits.Static.EV.Protobuf.CircuitTypeData();
            }
            input.ReadMessage(OriginalType);
            break;
          }
          case 18: {
            typeParameterAssignments_.AddEntriesFrom(input, _repeated_typeParameterAssignments_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) {
      if ((tag & 7) == 4) {
        // Abort on any end group tag.
        return;
      }
      switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input);
            break;
          case 10: {
            if (originalType_ == null) {
              OriginalType = new global::Circuits.Static.EV.Protobuf.CircuitTypeData();
            }
            input.ReadMessage(OriginalType);
            break;
          }
          case 18: {
            typeParameterAssignments_.AddEntriesFrom(ref input, _repeated_typeParameterAssignments_codec);
            break;
          }
        }
      }
    }
    #endif

  }

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

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Circuits.Static.EV.Protobuf.CircuitTypeDataReflection.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 CircuitTypeData() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public CircuitTypeData(CircuitTypeData other) : this() {
      kind_ = other.kind_;
      appliedGenericType_ = other.appliedGenericType_ != null ? other.appliedGenericType_.Clone() : null;
      functionType_ = other.functionType_ != null ? other.functionType_.Clone() : null;
      typeParameterReferenceType_ = other.typeParameterReferenceType_ != null ? other.typeParameterReferenceType_.Clone() : null;
      typeParameterType_ = other.typeParameterType_ != null ? other.typeParameterType_.Clone() : null;
      classType_ = other.classType_ != null ? other.classType_.Clone() : null;
      _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
    }

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

    /// <summary>Field number for the "kind" field.</summary>
    public const int KindFieldNumber = 1;
    private global::Circuits.Static.EV.Protobuf.TypeKind kind_ = global::Circuits.Static.EV.Protobuf.TypeKind.Any;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public global::Circuits.Static.EV.Protobuf.TypeKind Kind {
      get { return kind_; }
      set {
        kind_ = value;
      }
    }

    /// <summary>Field number for the "applied_generic_type" field.</summary>
    public const int AppliedGenericTypeFieldNumber = 2;
    private global::Circuits.Static.EV.Protobuf.AppliedGenericTypeData appliedGenericType_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public global::Circuits.Static.EV.Protobuf.AppliedGenericTypeData AppliedGenericType {
      get { return appliedGenericType_; }
      set {
        appliedGenericType_ = value;
      }
    }

    /// <summary>Field number for the "function_type" field.</summary>
    public const int FunctionTypeFieldNumber = 3;
    private global::Circuits.Static.EV.Protobuf.FunctionTypeData functionType_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public global::Circuits.Static.EV.Protobuf.FunctionTypeData FunctionType {
      get { return functionType_; }
      set {
        functionType_ = value;
      }
    }

    /// <summary>Field number for the "type_parameter_reference_type" field.</summary>
    public const int TypeParameterReferenceTypeFieldNumber = 4;
    private global::Circuits.Static.EV.Protobuf.TypeParameterReferenceTypeData typeParameterReferenceType_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public global::Circuits.Static.EV.Protobuf.TypeParameterReferenceTypeData TypeParameterReferenceType {
      get { return typeParameterReferenceType_; }
      set {
        typeParameterReferenceType_ = value;
      }
    }

    /// <summary>Field number for the "type_parameter_type" field.</summary>
    public const int TypeParameterTypeFieldNumber = 5;
    private global::Circuits.Static.EV.Protobuf.TypeParameterTypeData typeParameterType_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public global::Circuits.Static.EV.Protobuf.TypeParameterTypeData TypeParameterType {
      get { return typeParameterType_; }
      set {
        typeParameterType_ = value;
      }
    }

    /// <summary>Field number for the "class_type" field.</summary>
    public const int ClassTypeFieldNumber = 6;
    private global::Circuits.Static.EV.Protobuf.ClassTypeData classType_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public global::Circuits.Static.EV.Protobuf.ClassTypeData ClassType {
      get { return classType_; }
      set {
        classType_ = value;
      }
    }

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

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public bool Equals(CircuitTypeData other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (Kind != other.Kind) return false;
      if (!object.Equals(AppliedGenericType, other.AppliedGenericType)) return false;
      if (!object.Equals(FunctionType, other.FunctionType)) return false;
      if (!object.Equals(TypeParameterReferenceType, other.TypeParameterReferenceType)) return false;
      if (!object.Equals(TypeParameterType, other.TypeParameterType)) return false;
      if (!object.Equals(ClassType, other.ClassType)) 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 (Kind != global::Circuits.Static.EV.Protobuf.TypeKind.Any) hash ^= Kind.GetHashCode();
      if (appliedGenericType_ != null) hash ^= AppliedGenericType.GetHashCode();
      if (functionType_ != null) hash ^= FunctionType.GetHashCode();
      if (typeParameterReferenceType_ != null) hash ^= TypeParameterReferenceType.GetHashCode();
      if (typeParameterType_ != null) hash ^= TypeParameterType.GetHashCode();
      if (classType_ != null) hash ^= ClassType.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 (Kind != global::Circuits.Static.EV.Protobuf.TypeKind.Any) {
        output.WriteRawTag(8);
        output.WriteEnum((int) Kind);
      }
      if (appliedGenericType_ != null) {
        output.WriteRawTag(18);
        output.WriteMessage(AppliedGenericType);
      }
      if (functionType_ != null) {
        output.WriteRawTag(26);
        output.WriteMessage(FunctionType);
      }
      if (typeParameterReferenceType_ != null) {
        output.WriteRawTag(34);
        output.WriteMessage(TypeParameterReferenceType);
      }
      if (typeParameterType_ != null) {
        output.WriteRawTag(42);
        output.WriteMessage(TypeParameterType);
      }
      if (classType_ != null) {
        output.WriteRawTag(50);
        output.WriteMessage(ClassType);
      }
      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 (Kind != global::Circuits.Static.EV.Protobuf.TypeKind.Any) {
        output.WriteRawTag(8);
        output.WriteEnum((int) Kind);
      }
      if (appliedGenericType_ != null) {
        output.WriteRawTag(18);
        output.WriteMessage(AppliedGenericType);
      }
      if (functionType_ != null) {
        output.WriteRawTag(26);
        output.WriteMessage(FunctionType);
      }
      if (typeParameterReferenceType_ != null) {
        output.WriteRawTag(34);
        output.WriteMessage(TypeParameterReferenceType);
      }
      if (typeParameterType_ != null) {
        output.WriteRawTag(42);
        output.WriteMessage(TypeParameterType);
      }
      if (classType_ != null) {
        output.WriteRawTag(50);
        output.WriteMessage(ClassType);
      }
      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 (Kind != global::Circuits.Static.EV.Protobuf.TypeKind.Any) {
        size += 1 + pb::CodedOutputStream.ComputeEnumSize((int) Kind);
      }
      if (appliedGenericType_ != null) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(AppliedGenericType);
      }
      if (functionType_ != null) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(FunctionType);
      }
      if (typeParameterReferenceType_ != null) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(TypeParameterReferenceType);
      }
      if (typeParameterType_ != null) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(TypeParameterType);
      }
      if (classType_ != null) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(ClassType);
      }
      if (_unknownFields != null) {
        size += _unknownFields.CalculateSize();
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void MergeFrom(CircuitTypeData other) {
      if (other == null) {
        return;
      }
      if (other.Kind != global::Circuits.Static.EV.Protobuf.TypeKind.Any) {
        Kind = other.Kind;
      }
      if (other.appliedGenericType_ != null) {
        if (appliedGenericType_ == null) {
          AppliedGenericType = new global::Circuits.Static.EV.Protobuf.AppliedGenericTypeData();
        }
        AppliedGenericType.MergeFrom(other.AppliedGenericType);
      }
      if (other.functionType_ != null) {
        if (functionType_ == null) {
          FunctionType = new global::Circuits.Static.EV.Protobuf.FunctionTypeData();
        }
        FunctionType.MergeFrom(other.FunctionType);
      }
      if (other.typeParameterReferenceType_ != null) {
        if (typeParameterReferenceType_ == null) {
          TypeParameterReferenceType = new global::Circuits.Static.EV.Protobuf.TypeParameterReferenceTypeData();
        }
        TypeParameterReferenceType.MergeFrom(other.TypeParameterReferenceType);
      }
      if (other.typeParameterType_ != null) {
        if (typeParameterType_ == null) {
          TypeParameterType = new global::Circuits.Static.EV.Protobuf.TypeParameterTypeData();
        }
        TypeParameterType.MergeFrom(other.TypeParameterType);
      }
      if (other.classType_ != null) {
        if (classType_ == null) {
          ClassType = new global::Circuits.Static.EV.Protobuf.ClassTypeData();
        }
        ClassType.MergeFrom(other.ClassType);
      }
      _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) {
      if ((tag & 7) == 4) {
        // Abort on any end group tag.
        return;
      }
      switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
            break;
          case 8: {
            Kind = (global::Circuits.Static.EV.Protobuf.TypeKind) input.ReadEnum();
            break;
          }
          case 18: {
            if (appliedGenericType_ == null) {
              AppliedGenericType = new global::Circuits.Static.EV.Protobuf.AppliedGenericTypeData();
            }
            input.ReadMessage(AppliedGenericType);
            break;
          }
          case 26: {
            if (functionType_ == null) {
              FunctionType = new global::Circuits.Static.EV.Protobuf.FunctionTypeData();
            }
            input.ReadMessage(FunctionType);
            break;
          }
          case 34: {
            if (typeParameterReferenceType_ == null) {
              TypeParameterReferenceType = new global::Circuits.Static.EV.Protobuf.TypeParameterReferenceTypeData();
            }
            input.ReadMessage(TypeParameterReferenceType);
            break;
          }
          case 42: {
            if (typeParameterType_ == null) {
              TypeParameterType = new global::Circuits.Static.EV.Protobuf.TypeParameterTypeData();
            }
            input.ReadMessage(TypeParameterType);
            break;
          }
          case 50: {
            if (classType_ == null) {
              ClassType = new global::Circuits.Static.EV.Protobuf.ClassTypeData();
            }
            input.ReadMessage(ClassType);
            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) {
      if ((tag & 7) == 4) {
        // Abort on any end group tag.
        return;
      }
      switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input);
            break;
          case 8: {
            Kind = (global::Circuits.Static.EV.Protobuf.TypeKind) input.ReadEnum();
            break;
          }
          case 18: {
            if (appliedGenericType_ == null) {
              AppliedGenericType = new global::Circuits.Static.EV.Protobuf.AppliedGenericTypeData();
            }
            input.ReadMessage(AppliedGenericType);
            break;
          }
          case 26: {
            if (functionType_ == null) {
              FunctionType = new global::Circuits.Static.EV.Protobuf.FunctionTypeData();
            }
            input.ReadMessage(FunctionType);
            break;
          }
          case 34: {
            if (typeParameterReferenceType_ == null) {
              TypeParameterReferenceType = new global::Circuits.Static.EV.Protobuf.TypeParameterReferenceTypeData();
            }
            input.ReadMessage(TypeParameterReferenceType);
            break;
          }
          case 42: {
            if (typeParameterType_ == null) {
              TypeParameterType = new global::Circuits.Static.EV.Protobuf.TypeParameterTypeData();
            }
            input.ReadMessage(TypeParameterType);
            break;
          }
          case 50: {
            if (classType_ == null) {
              ClassType = new global::Circuits.Static.EV.Protobuf.ClassTypeData();
            }
            input.ReadMessage(ClassType);
            break;
          }
        }
      }
    }
    #endif

  }

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

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Circuits.Static.EV.Protobuf.CircuitTypeDataReflection.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 ClassTypeData() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public ClassTypeData(ClassTypeData other) : this() {
      id_ = other.id_ != null ? other.id_.Clone() : null;
      typeParameters_ = other.typeParameters_.Clone();
      properties_ = other.properties_.Clone();
      functions_ = other.functions_.Clone();
      baseClasses_ = other.baseClasses_.Clone();
      _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
    }

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

    /// <summary>Field number for the "id" field.</summary>
    public const int IdFieldNumber = 1;
    private global::RecRoom.Protobuf.Core.GuidData id_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public global::RecRoom.Protobuf.Core.GuidData Id {
      get { return id_; }
      set {
        id_ = value;
      }
    }

    /// <summary>Field number for the "type_parameters" field.</summary>
    public const int TypeParametersFieldNumber = 2;
    private static readonly pb::FieldCodec<global::Circuits.Static.EV.Protobuf.CircuitTypeData> _repeated_typeParameters_codec
        = pb::FieldCodec.ForMessage(18, global::Circuits.Static.EV.Protobuf.CircuitTypeData.Parser);
    private readonly pbc::RepeatedField<global::Circuits.Static.EV.Protobuf.CircuitTypeData> typeParameters_ = new pbc::RepeatedField<global::Circuits.Static.EV.Protobuf.CircuitTypeData>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public pbc::RepeatedField<global::Circuits.Static.EV.Protobuf.CircuitTypeData> TypeParameters {
      get { return typeParameters_; }
    }

    /// <summary>Field number for the "properties" field.</summary>
    public const int PropertiesFieldNumber = 3;
    private static readonly pb::FieldCodec<global::Circuits.Static.EV.Protobuf.ClassTypeData.Types.PropertiesEntry> _repeated_properties_codec
        = pb::FieldCodec.ForMessage(26, global::Circuits.Static.EV.Protobuf.ClassTypeData.Types.PropertiesEntry.Parser);
    private readonly pbc::RepeatedField<global::Circuits.Static.EV.Protobuf.ClassTypeData.Types.PropertiesEntry> properties_ = new pbc::RepeatedField<global::Circuits.Static.EV.Protobuf.ClassTypeData.Types.PropertiesEntry>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public pbc::RepeatedField<global::Circuits.Static.EV.Protobuf.ClassTypeData.Types.PropertiesEntry> Properties {
      get { return properties_; }
    }

    /// <summary>Field number for the "functions" field.</summary>
    public const int FunctionsFieldNumber = 4;
    private static readonly pb::FieldCodec<global::Circuits.Static.EV.Protobuf.ClassTypeData.Types.FunctionsEntry> _repeated_functions_codec
        = pb::FieldCodec.ForMessage(34, global::Circuits.Static.EV.Protobuf.ClassTypeData.Types.FunctionsEntry.Parser);
    private readonly pbc::RepeatedField<global::Circuits.Static.EV.Protobuf.ClassTypeData.Types.FunctionsEntry> functions_ = new pbc::RepeatedField<global::Circuits.Static.EV.Protobuf.ClassTypeData.Types.FunctionsEntry>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public pbc::RepeatedField<global::Circuits.Static.EV.Protobuf.ClassTypeData.Types.FunctionsEntry> Functions {
      get { return functions_; }
    }

    /// <summary>Field number for the "baseClasses" field.</summary>
    public const int BaseClassesFieldNumber = 5;
    private static readonly pb::FieldCodec<global::Circuits.Static.EV.Protobuf.CircuitTypeData> _repeated_baseClasses_codec
        = pb::FieldCodec.ForMessage(42, global::Circuits.Static.EV.Protobuf.CircuitTypeData.Parser);
    private readonly pbc::RepeatedField<global::Circuits.Static.EV.Protobuf.CircuitTypeData> baseClasses_ = new pbc::RepeatedField<global::Circuits.Static.EV.Protobuf.CircuitTypeData>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public pbc::RepeatedField<global::Circuits.Static.EV.Protobuf.CircuitTypeData> BaseClasses {
      get { return baseClasses_; }
    }

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

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public bool Equals(ClassTypeData other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (!object.Equals(Id, other.Id)) return false;
      if(!typeParameters_.Equals(other.typeParameters_)) return false;
      if(!properties_.Equals(other.properties_)) return false;
      if(!functions_.Equals(other.functions_)) return false;
      if(!baseClasses_.Equals(other.baseClasses_)) 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 (id_ != null) hash ^= Id.GetHashCode();
      hash ^= typeParameters_.GetHashCode();
      hash ^= properties_.GetHashCode();
      hash ^= functions_.GetHashCode();
      hash ^= baseClasses_.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 (id_ != null) {
        output.WriteRawTag(10);
        output.WriteMessage(Id);
      }
      typeParameters_.WriteTo(output, _repeated_typeParameters_codec);
      properties_.WriteTo(output, _repeated_properties_codec);
      functions_.WriteTo(output, _repeated_functions_codec);
      baseClasses_.WriteTo(output, _repeated_baseClasses_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) {
      if (id_ != null) {
        output.WriteRawTag(10);
        output.WriteMessage(Id);
      }
      typeParameters_.WriteTo(ref output, _repeated_typeParameters_codec);
      properties_.WriteTo(ref output, _repeated_properties_codec);
      functions_.WriteTo(ref output, _repeated_functions_codec);
      baseClasses_.WriteTo(ref output, _repeated_baseClasses_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;
      if (id_ != null) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(Id);
      }
      size += typeParameters_.CalculateSize(_repeated_typeParameters_codec);
      size += properties_.CalculateSize(_repeated_properties_codec);
      size += functions_.CalculateSize(_repeated_functions_codec);
      size += baseClasses_.CalculateSize(_repeated_baseClasses_codec);
      if (_unknownFields != null) {
        size += _unknownFields.CalculateSize();
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void MergeFrom(ClassTypeData other) {
      if (other == null) {
        return;
      }
      if (other.id_ != null) {
        if (id_ == null) {
          Id = new global::RecRoom.Protobuf.Core.GuidData();
        }
        Id.MergeFrom(other.Id);
      }
      typeParameters_.Add(other.typeParameters_);
      properties_.Add(other.properties_);
      functions_.Add(other.functions_);
      baseClasses_.Add(other.baseClasses_);
      _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) {
      if ((tag & 7) == 4) {
        // Abort on any end group tag.
        return;
      }
      switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
            break;
          case 10: {
            if (id_ == null) {
              Id = new global::RecRoom.Protobuf.Core.GuidData();
            }
            input.ReadMessage(Id);
            break;
          }
          case 18: {
            typeParameters_.AddEntriesFrom(input, _repeated_typeParameters_codec);
            break;
          }
          case 26: {
            properties_.AddEntriesFrom(input, _repeated_properties_codec);
            break;
          }
          case 34: {
            functions_.AddEntriesFrom(input, _repeated_functions_codec);
            break;
          }
          case 42: {
            baseClasses_.AddEntriesFrom(input, _repeated_baseClasses_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) {
      if ((tag & 7) == 4) {
        // Abort on any end group tag.
        return;
      }
      switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input);
            break;
          case 10: {
            if (id_ == null) {
              Id = new global::RecRoom.Protobuf.Core.GuidData();
            }
            input.ReadMessage(Id);
            break;
          }
          case 18: {
            typeParameters_.AddEntriesFrom(ref input, _repeated_typeParameters_codec);
            break;
          }
          case 26: {
            properties_.AddEntriesFrom(ref input, _repeated_properties_codec);
            break;
          }
          case 34: {
            functions_.AddEntriesFrom(ref input, _repeated_functions_codec);
            break;
          }
          case 42: {
            baseClasses_.AddEntriesFrom(ref input, _repeated_baseClasses_codec);
            break;
          }
        }
      }
    }
    #endif

    #region Nested types
    /// <summary>Container for nested types declared in the ClassTypeData message type.</summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static partial class Types {
      [global::System.Diagnostics.DebuggerDisplayAttribute("{ToString(),nq}")]
      public sealed partial class PropertiesEntry : pb::IMessage<PropertiesEntry>
      #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
          , pb::IBufferMessage
      #endif
      {
        private static readonly pb::MessageParser<PropertiesEntry> _parser = new pb::MessageParser<PropertiesEntry>(() => new PropertiesEntry());
        private pb::UnknownFieldSet _unknownFields;
        [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
        public static pb::MessageParser<PropertiesEntry> Parser { get { return _parser; } }

        [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
        public static pbr::MessageDescriptor Descriptor {
          get { return global::Circuits.Static.EV.Protobuf.ClassTypeData.Descriptor.NestedTypes[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 PropertiesEntry() {
          OnConstruction();
        }

        partial void OnConstruction();

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

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

        /// <summary>Field number for the "key" field.</summary>
        public const int KeyFieldNumber = 1;
        private string key_ = "";
        [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
        public string Key {
          get { return key_; }
          set {
            key_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
          }
        }

        /// <summary>Field number for the "value" field.</summary>
        public const int ValueFieldNumber = 2;
        private global::Circuits.Static.EV.Protobuf.PropertyData value_;
        [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
        public global::Circuits.Static.EV.Protobuf.PropertyData Value {
          get { return value_; }
          set {
            value_ = value;
          }
        }

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

        [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
        public bool Equals(PropertiesEntry other) {
          if (ReferenceEquals(other, null)) {
            return false;
          }
          if (ReferenceEquals(other, this)) {
            return true;
          }
          if (Key != other.Key) return false;
          if (!object.Equals(Value, other.Value)) 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 (Key.Length != 0) hash ^= Key.GetHashCode();
          if (value_ != null) hash ^= Value.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 (Key.Length != 0) {
            output.WriteRawTag(10);
            output.WriteString(Key);
          }
          if (value_ != null) {
            output.WriteRawTag(18);
            output.WriteMessage(Value);
          }
          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 (Key.Length != 0) {
            output.WriteRawTag(10);
            output.WriteString(Key);
          }
          if (value_ != null) {
            output.WriteRawTag(18);
            output.WriteMessage(Value);
          }
          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 (Key.Length != 0) {
            size += 1 + pb::CodedOutputStream.ComputeStringSize(Key);
          }
          if (value_ != null) {
            size += 1 + pb::CodedOutputStream.ComputeMessageSize(Value);
          }
          if (_unknownFields != null) {
            size += _unknownFields.CalculateSize();
          }
          return size;
        }

        [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
        public void MergeFrom(PropertiesEntry other) {
          if (other == null) {
            return;
          }
          if (other.Key.Length != 0) {
            Key = other.Key;
          }
          if (other.value_ != null) {
            if (value_ == null) {
              Value = new global::Circuits.Static.EV.Protobuf.PropertyData();
            }
            Value.MergeFrom(other.Value);
          }
          _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) {
          if ((tag & 7) == 4) {
            // Abort on any end group tag.
            return;
          }
          switch(tag) {
              default:
                _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
                break;
              case 10: {
                Key = input.ReadString();
                break;
              }
              case 18: {
                if (value_ == null) {
                  Value = new global::Circuits.Static.EV.Protobuf.PropertyData();
                }
                input.ReadMessage(Value);
                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) {
          if ((tag & 7) == 4) {
            // Abort on any end group tag.
            return;
          }
          switch(tag) {
              default:
                _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input);
                break;
              case 10: {
                Key = input.ReadString();
                break;
              }
              case 18: {
                if (value_ == null) {
                  Value = new global::Circuits.Static.EV.Protobuf.PropertyData();
                }
                input.ReadMessage(Value);
                break;
              }
            }
          }
        }
        #endif

      }

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

        [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
        public static pbr::MessageDescriptor Descriptor {
          get { return global::Circuits.Static.EV.Protobuf.ClassTypeData.Descriptor.NestedTypes[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 FunctionsEntry() {
          OnConstruction();
        }

        partial void OnConstruction();

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

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

        /// <summary>Field number for the "key" field.</summary>
        public const int KeyFieldNumber = 1;
        private string key_ = "";
        [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
        public string Key {
          get { return key_; }
          set {
            key_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
          }
        }

        /// <summary>Field number for the "value" field.</summary>
        public const int ValueFieldNumber = 2;
        private global::Circuits.Static.EV.Protobuf.CircuitTypeData value_;
        [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
        public global::Circuits.Static.EV.Protobuf.CircuitTypeData Value {
          get { return value_; }
          set {
            value_ = value;
          }
        }

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

        [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
        public bool Equals(FunctionsEntry other) {
          if (ReferenceEquals(other, null)) {
            return false;
          }
          if (ReferenceEquals(other, this)) {
            return true;
          }
          if (Key != other.Key) return false;
          if (!object.Equals(Value, other.Value)) 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 (Key.Length != 0) hash ^= Key.GetHashCode();
          if (value_ != null) hash ^= Value.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 (Key.Length != 0) {
            output.WriteRawTag(10);
            output.WriteString(Key);
          }
          if (value_ != null) {
            output.WriteRawTag(18);
            output.WriteMessage(Value);
          }
          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 (Key.Length != 0) {
            output.WriteRawTag(10);
            output.WriteString(Key);
          }
          if (value_ != null) {
            output.WriteRawTag(18);
            output.WriteMessage(Value);
          }
          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 (Key.Length != 0) {
            size += 1 + pb::CodedOutputStream.ComputeStringSize(Key);
          }
          if (value_ != null) {
            size += 1 + pb::CodedOutputStream.ComputeMessageSize(Value);
          }
          if (_unknownFields != null) {
            size += _unknownFields.CalculateSize();
          }
          return size;
        }

        [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
        public void MergeFrom(FunctionsEntry other) {
          if (other == null) {
            return;
          }
          if (other.Key.Length != 0) {
            Key = other.Key;
          }
          if (other.value_ != null) {
            if (value_ == null) {
              Value = new global::Circuits.Static.EV.Protobuf.CircuitTypeData();
            }
            Value.MergeFrom(other.Value);
          }
          _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) {
          if ((tag & 7) == 4) {
            // Abort on any end group tag.
            return;
          }
          switch(tag) {
              default:
                _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
                break;
              case 10: {
                Key = input.ReadString();
                break;
              }
              case 18: {
                if (value_ == null) {
                  Value = new global::Circuits.Static.EV.Protobuf.CircuitTypeData();
                }
                input.ReadMessage(Value);
                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) {
          if ((tag & 7) == 4) {
            // Abort on any end group tag.
            return;
          }
          switch(tag) {
              default:
                _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input);
                break;
              case 10: {
                Key = input.ReadString();
                break;
              }
              case 18: {
                if (value_ == null) {
                  Value = new global::Circuits.Static.EV.Protobuf.CircuitTypeData();
                }
                input.ReadMessage(Value);
                break;
              }
            }
          }
        }
        #endif

      }

    }
    #endregion

  }

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

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Circuits.Static.EV.Protobuf.CircuitTypeDataReflection.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 FunctionTypeData() {
      OnConstruction();
    }

    partial void OnConstruction();

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

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

    /// <summary>Field number for the "type_parameters" field.</summary>
    public const int TypeParametersFieldNumber = 1;
    private static readonly pb::FieldCodec<global::Circuits.Static.EV.Protobuf.CircuitTypeData> _repeated_typeParameters_codec
        = pb::FieldCodec.ForMessage(10, global::Circuits.Static.EV.Protobuf.CircuitTypeData.Parser);
    private readonly pbc::RepeatedField<global::Circuits.Static.EV.Protobuf.CircuitTypeData> typeParameters_ = new pbc::RepeatedField<global::Circuits.Static.EV.Protobuf.CircuitTypeData>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public pbc::RepeatedField<global::Circuits.Static.EV.Protobuf.CircuitTypeData> TypeParameters {
      get { return typeParameters_; }
    }

    /// <summary>Field number for the "inputs" field.</summary>
    public const int InputsFieldNumber = 2;
    private static readonly pb::FieldCodec<global::Circuits.Static.EV.Protobuf.FunctionTypeData.Types.InputsEntry> _repeated_inputs_codec
        = pb::FieldCodec.ForMessage(18, global::Circuits.Static.EV.Protobuf.FunctionTypeData.Types.InputsEntry.Parser);
    private readonly pbc::RepeatedField<global::Circuits.Static.EV.Protobuf.FunctionTypeData.Types.InputsEntry> inputs_ = new pbc::RepeatedField<global::Circuits.Static.EV.Protobuf.FunctionTypeData.Types.InputsEntry>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public pbc::RepeatedField<global::Circuits.Static.EV.Protobuf.FunctionTypeData.Types.InputsEntry> Inputs {
      get { return inputs_; }
    }

    /// <summary>Field number for the "outputs" field.</summary>
    public const int OutputsFieldNumber = 3;
    private static readonly pb::FieldCodec<global::Circuits.Static.EV.Protobuf.FunctionTypeData.Types.OutputsEntry> _repeated_outputs_codec
        = pb::FieldCodec.ForMessage(26, global::Circuits.Static.EV.Protobuf.FunctionTypeData.Types.OutputsEntry.Parser);
    private readonly pbc::RepeatedField<global::Circuits.Static.EV.Protobuf.FunctionTypeData.Types.OutputsEntry> outputs_ = new pbc::RepeatedField<global::Circuits.Static.EV.Protobuf.FunctionTypeData.Types.OutputsEntry>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public pbc::RepeatedField<global::Circuits.Static.EV.Protobuf.FunctionTypeData.Types.OutputsEntry> Outputs {
      get { return outputs_; }
    }

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

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public bool Equals(FunctionTypeData other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if(!typeParameters_.Equals(other.typeParameters_)) return false;
      if(!inputs_.Equals(other.inputs_)) return false;
      if(!outputs_.Equals(other.outputs_)) 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 ^= typeParameters_.GetHashCode();
      hash ^= inputs_.GetHashCode();
      hash ^= outputs_.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
      typeParameters_.WriteTo(output, _repeated_typeParameters_codec);
      inputs_.WriteTo(output, _repeated_inputs_codec);
      outputs_.WriteTo(output, _repeated_outputs_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) {
      typeParameters_.WriteTo(ref output, _repeated_typeParameters_codec);
      inputs_.WriteTo(ref output, _repeated_inputs_codec);
      outputs_.WriteTo(ref output, _repeated_outputs_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 += typeParameters_.CalculateSize(_repeated_typeParameters_codec);
      size += inputs_.CalculateSize(_repeated_inputs_codec);
      size += outputs_.CalculateSize(_repeated_outputs_codec);
      if (_unknownFields != null) {
        size += _unknownFields.CalculateSize();
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void MergeFrom(FunctionTypeData other) {
      if (other == null) {
        return;
      }
      typeParameters_.Add(other.typeParameters_);
      inputs_.Add(other.inputs_);
      outputs_.Add(other.outputs_);
      _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) {
      if ((tag & 7) == 4) {
        // Abort on any end group tag.
        return;
      }
      switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
            break;
          case 10: {
            typeParameters_.AddEntriesFrom(input, _repeated_typeParameters_codec);
            break;
          }
          case 18: {
            inputs_.AddEntriesFrom(input, _repeated_inputs_codec);
            break;
          }
          case 26: {
            outputs_.AddEntriesFrom(input, _repeated_outputs_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) {
      if ((tag & 7) == 4) {
        // Abort on any end group tag.
        return;
      }
      switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input);
            break;
          case 10: {
            typeParameters_.AddEntriesFrom(ref input, _repeated_typeParameters_codec);
            break;
          }
          case 18: {
            inputs_.AddEntriesFrom(ref input, _repeated_inputs_codec);
            break;
          }
          case 26: {
            outputs_.AddEntriesFrom(ref input, _repeated_outputs_codec);
            break;
          }
        }
      }
    }
    #endif

    #region Nested types
    /// <summary>Container for nested types declared in the FunctionTypeData message type.</summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static partial class Types {
      [global::System.Diagnostics.DebuggerDisplayAttribute("{ToString(),nq}")]
      public sealed partial class InputsEntry : pb::IMessage<InputsEntry>
      #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
          , pb::IBufferMessage
      #endif
      {
        private static readonly pb::MessageParser<InputsEntry> _parser = new pb::MessageParser<InputsEntry>(() => new InputsEntry());
        private pb::UnknownFieldSet _unknownFields;
        [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
        public static pb::MessageParser<InputsEntry> Parser { get { return _parser; } }

        [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
        public static pbr::MessageDescriptor Descriptor {
          get { return global::Circuits.Static.EV.Protobuf.FunctionTypeData.Descriptor.NestedTypes[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 InputsEntry() {
          OnConstruction();
        }

        partial void OnConstruction();

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

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

        /// <summary>Field number for the "key" field.</summary>
        public const int KeyFieldNumber = 1;
        private string key_ = "";
        [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
        public string Key {
          get { return key_; }
          set {
            key_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
          }
        }

        /// <summary>Field number for the "value" field.</summary>
        public const int ValueFieldNumber = 2;
        private global::Circuits.Static.EV.Protobuf.FunctionInputData value_;
        [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
        public global::Circuits.Static.EV.Protobuf.FunctionInputData Value {
          get { return value_; }
          set {
            value_ = value;
          }
        }

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

        [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
        public bool Equals(InputsEntry other) {
          if (ReferenceEquals(other, null)) {
            return false;
          }
          if (ReferenceEquals(other, this)) {
            return true;
          }
          if (Key != other.Key) return false;
          if (!object.Equals(Value, other.Value)) 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 (Key.Length != 0) hash ^= Key.GetHashCode();
          if (value_ != null) hash ^= Value.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 (Key.Length != 0) {
            output.WriteRawTag(10);
            output.WriteString(Key);
          }
          if (value_ != null) {
            output.WriteRawTag(18);
            output.WriteMessage(Value);
          }
          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 (Key.Length != 0) {
            output.WriteRawTag(10);
            output.WriteString(Key);
          }
          if (value_ != null) {
            output.WriteRawTag(18);
            output.WriteMessage(Value);
          }
          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 (Key.Length != 0) {
            size += 1 + pb::CodedOutputStream.ComputeStringSize(Key);
          }
          if (value_ != null) {
            size += 1 + pb::CodedOutputStream.ComputeMessageSize(Value);
          }
          if (_unknownFields != null) {
            size += _unknownFields.CalculateSize();
          }
          return size;
        }

        [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
        public void MergeFrom(InputsEntry other) {
          if (other == null) {
            return;
          }
          if (other.Key.Length != 0) {
            Key = other.Key;
          }
          if (other.value_ != null) {
            if (value_ == null) {
              Value = new global::Circuits.Static.EV.Protobuf.FunctionInputData();
            }
            Value.MergeFrom(other.Value);
          }
          _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) {
          if ((tag & 7) == 4) {
            // Abort on any end group tag.
            return;
          }
          switch(tag) {
              default:
                _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
                break;
              case 10: {
                Key = input.ReadString();
                break;
              }
              case 18: {
                if (value_ == null) {
                  Value = new global::Circuits.Static.EV.Protobuf.FunctionInputData();
                }
                input.ReadMessage(Value);
                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) {
          if ((tag & 7) == 4) {
            // Abort on any end group tag.
            return;
          }
          switch(tag) {
              default:
                _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input);
                break;
              case 10: {
                Key = input.ReadString();
                break;
              }
              case 18: {
                if (value_ == null) {
                  Value = new global::Circuits.Static.EV.Protobuf.FunctionInputData();
                }
                input.ReadMessage(Value);
                break;
              }
            }
          }
        }
        #endif

      }

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

        [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
        public static pbr::MessageDescriptor Descriptor {
          get { return global::Circuits.Static.EV.Protobuf.FunctionTypeData.Descriptor.NestedTypes[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 OutputsEntry() {
          OnConstruction();
        }

        partial void OnConstruction();

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

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

        /// <summary>Field number for the "key" field.</summary>
        public const int KeyFieldNumber = 1;
        private string key_ = "";
        [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
        public string Key {
          get { return key_; }
          set {
            key_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
          }
        }

        /// <summary>Field number for the "value" field.</summary>
        public const int ValueFieldNumber = 2;
        private global::Circuits.Static.EV.Protobuf.FunctionOutputData value_;
        [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
        public global::Circuits.Static.EV.Protobuf.FunctionOutputData Value {
          get { return value_; }
          set {
            value_ = value;
          }
        }

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

        [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
        public bool Equals(OutputsEntry other) {
          if (ReferenceEquals(other, null)) {
            return false;
          }
          if (ReferenceEquals(other, this)) {
            return true;
          }
          if (Key != other.Key) return false;
          if (!object.Equals(Value, other.Value)) 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 (Key.Length != 0) hash ^= Key.GetHashCode();
          if (value_ != null) hash ^= Value.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 (Key.Length != 0) {
            output.WriteRawTag(10);
            output.WriteString(Key);
          }
          if (value_ != null) {
            output.WriteRawTag(18);
            output.WriteMessage(Value);
          }
          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 (Key.Length != 0) {
            output.WriteRawTag(10);
            output.WriteString(Key);
          }
          if (value_ != null) {
            output.WriteRawTag(18);
            output.WriteMessage(Value);
          }
          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 (Key.Length != 0) {
            size += 1 + pb::CodedOutputStream.ComputeStringSize(Key);
          }
          if (value_ != null) {
            size += 1 + pb::CodedOutputStream.ComputeMessageSize(Value);
          }
          if (_unknownFields != null) {
            size += _unknownFields.CalculateSize();
          }
          return size;
        }

        [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
        public void MergeFrom(OutputsEntry other) {
          if (other == null) {
            return;
          }
          if (other.Key.Length != 0) {
            Key = other.Key;
          }
          if (other.value_ != null) {
            if (value_ == null) {
              Value = new global::Circuits.Static.EV.Protobuf.FunctionOutputData();
            }
            Value.MergeFrom(other.Value);
          }
          _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) {
          if ((tag & 7) == 4) {
            // Abort on any end group tag.
            return;
          }
          switch(tag) {
              default:
                _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
                break;
              case 10: {
                Key = input.ReadString();
                break;
              }
              case 18: {
                if (value_ == null) {
                  Value = new global::Circuits.Static.EV.Protobuf.FunctionOutputData();
                }
                input.ReadMessage(Value);
                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) {
          if ((tag & 7) == 4) {
            // Abort on any end group tag.
            return;
          }
          switch(tag) {
              default:
                _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input);
                break;
              case 10: {
                Key = input.ReadString();
                break;
              }
              case 18: {
                if (value_ == null) {
                  Value = new global::Circuits.Static.EV.Protobuf.FunctionOutputData();
                }
                input.ReadMessage(Value);
                break;
              }
            }
          }
        }
        #endif

      }

    }
    #endregion

  }

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

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Circuits.Static.EV.Protobuf.CircuitTypeDataReflection.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 FunctionInputData() {
      OnConstruction();
    }

    partial void OnConstruction();

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

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

    /// <summary>Field number for the "type" field.</summary>
    public const int TypeFieldNumber = 1;
    private global::Circuits.Static.EV.Protobuf.CircuitTypeData type_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public global::Circuits.Static.EV.Protobuf.CircuitTypeData 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 FunctionInputData);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public bool Equals(FunctionInputData other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (!object.Equals(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 (type_ != null) 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 (type_ != null) {
        output.WriteRawTag(10);
        output.WriteMessage(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 (type_ != null) {
        output.WriteRawTag(10);
        output.WriteMessage(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 (type_ != null) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(Type);
      }
      if (_unknownFields != null) {
        size += _unknownFields.CalculateSize();
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void MergeFrom(FunctionInputData other) {
      if (other == null) {
        return;
      }
      if (other.type_ != null) {
        if (type_ == null) {
          Type = new global::Circuits.Static.EV.Protobuf.CircuitTypeData();
        }
        Type.MergeFrom(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) {
      if ((tag & 7) == 4) {
        // Abort on any end group tag.
        return;
      }
      switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
            break;
          case 10: {
            if (type_ == null) {
              Type = new global::Circuits.Static.EV.Protobuf.CircuitTypeData();
            }
            input.ReadMessage(Type);
            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) {
      if ((tag & 7) == 4) {
        // Abort on any end group tag.
        return;
      }
      switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input);
            break;
          case 10: {
            if (type_ == null) {
              Type = new global::Circuits.Static.EV.Protobuf.CircuitTypeData();
            }
            input.ReadMessage(Type);
            break;
          }
        }
      }
    }
    #endif

  }

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

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Circuits.Static.EV.Protobuf.CircuitTypeDataReflection.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 PropertyData() {
      OnConstruction();
    }

    partial void OnConstruction();

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

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

    /// <summary>Field number for the "type" field.</summary>
    public const int TypeFieldNumber = 1;
    private global::Circuits.Static.EV.Protobuf.CircuitTypeData type_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public global::Circuits.Static.EV.Protobuf.CircuitTypeData Type {
      get { return type_; }
      set {
        type_ = value;
      }
    }

    /// <summary>Field number for the "get" field.</summary>
    public const int GetFieldNumber = 2;
    private bool get_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public bool Get {
      get { return get_; }
      set {
        get_ = value;
      }
    }

    /// <summary>Field number for the "set" field.</summary>
    public const int SetFieldNumber = 3;
    private bool set_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public bool Set {
      get { return set_; }
      set {
        set_ = value;
      }
    }

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

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public bool Equals(PropertyData other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (!object.Equals(Type, other.Type)) return false;
      if (Get != other.Get) return false;
      if (Set != other.Set) 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 (type_ != null) hash ^= Type.GetHashCode();
      if (Get != false) hash ^= Get.GetHashCode();
      if (Set != false) hash ^= Set.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 (type_ != null) {
        output.WriteRawTag(10);
        output.WriteMessage(Type);
      }
      if (Get != false) {
        output.WriteRawTag(16);
        output.WriteBool(Get);
      }
      if (Set != false) {
        output.WriteRawTag(24);
        output.WriteBool(Set);
      }
      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 (type_ != null) {
        output.WriteRawTag(10);
        output.WriteMessage(Type);
      }
      if (Get != false) {
        output.WriteRawTag(16);
        output.WriteBool(Get);
      }
      if (Set != false) {
        output.WriteRawTag(24);
        output.WriteBool(Set);
      }
      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 (type_ != null) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(Type);
      }
      if (Get != false) {
        size += 1 + 1;
      }
      if (Set != 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(PropertyData other) {
      if (other == null) {
        return;
      }
      if (other.type_ != null) {
        if (type_ == null) {
          Type = new global::Circuits.Static.EV.Protobuf.CircuitTypeData();
        }
        Type.MergeFrom(other.Type);
      }
      if (other.Get != false) {
        Get = other.Get;
      }
      if (other.Set != false) {
        Set = other.Set;
      }
      _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) {
      if ((tag & 7) == 4) {
        // Abort on any end group tag.
        return;
      }
      switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
            break;
          case 10: {
            if (type_ == null) {
              Type = new global::Circuits.Static.EV.Protobuf.CircuitTypeData();
            }
            input.ReadMessage(Type);
            break;
          }
          case 16: {
            Get = input.ReadBool();
            break;
          }
          case 24: {
            Set = 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) {
      if ((tag & 7) == 4) {
        // Abort on any end group tag.
        return;
      }
      switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input);
            break;
          case 10: {
            if (type_ == null) {
              Type = new global::Circuits.Static.EV.Protobuf.CircuitTypeData();
            }
            input.ReadMessage(Type);
            break;
          }
          case 16: {
            Get = input.ReadBool();
            break;
          }
          case 24: {
            Set = input.ReadBool();
            break;
          }
        }
      }
    }
    #endif

  }

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

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Circuits.Static.EV.Protobuf.CircuitTypeDataReflection.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 FunctionOutputData() {
      OnConstruction();
    }

    partial void OnConstruction();

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

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

    /// <summary>Field number for the "type" field.</summary>
    public const int TypeFieldNumber = 1;
    private global::Circuits.Static.EV.Protobuf.CircuitTypeData type_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public global::Circuits.Static.EV.Protobuf.CircuitTypeData 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 FunctionOutputData);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public bool Equals(FunctionOutputData other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (!object.Equals(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 (type_ != null) 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 (type_ != null) {
        output.WriteRawTag(10);
        output.WriteMessage(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 (type_ != null) {
        output.WriteRawTag(10);
        output.WriteMessage(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 (type_ != null) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(Type);
      }
      if (_unknownFields != null) {
        size += _unknownFields.CalculateSize();
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void MergeFrom(FunctionOutputData other) {
      if (other == null) {
        return;
      }
      if (other.type_ != null) {
        if (type_ == null) {
          Type = new global::Circuits.Static.EV.Protobuf.CircuitTypeData();
        }
        Type.MergeFrom(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) {
      if ((tag & 7) == 4) {
        // Abort on any end group tag.
        return;
      }
      switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
            break;
          case 10: {
            if (type_ == null) {
              Type = new global::Circuits.Static.EV.Protobuf.CircuitTypeData();
            }
            input.ReadMessage(Type);
            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) {
      if ((tag & 7) == 4) {
        // Abort on any end group tag.
        return;
      }
      switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input);
            break;
          case 10: {
            if (type_ == null) {
              Type = new global::Circuits.Static.EV.Protobuf.CircuitTypeData();
            }
            input.ReadMessage(Type);
            break;
          }
        }
      }
    }
    #endif

  }

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

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Circuits.Static.EV.Protobuf.CircuitTypeDataReflection.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 TypeParameterReferenceTypeData() {
      OnConstruction();
    }

    partial void OnConstruction();

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

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

    /// <summary>Field number for the "name" field.</summary>
    public const int NameFieldNumber = 1;
    private string 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");
      }
    }

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

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public bool Equals(TypeParameterReferenceTypeData other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (Name != other.Name) 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 (_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 (_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 (_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 (_unknownFields != null) {
        size += _unknownFields.CalculateSize();
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void MergeFrom(TypeParameterReferenceTypeData other) {
      if (other == null) {
        return;
      }
      if (other.Name.Length != 0) {
        Name = other.Name;
      }
      _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) {
      if ((tag & 7) == 4) {
        // Abort on any end group tag.
        return;
      }
      switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
            break;
          case 10: {
            Name = input.ReadString();
            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) {
      if ((tag & 7) == 4) {
        // Abort on any end group tag.
        return;
      }
      switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input);
            break;
          case 10: {
            Name = input.ReadString();
            break;
          }
        }
      }
    }
    #endif

  }

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

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Circuits.Static.EV.Protobuf.CircuitTypeDataReflection.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 TypeParameterTypeData() {
      OnConstruction();
    }

    partial void OnConstruction();

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

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

    /// <summary>Field number for the "name" field.</summary>
    public const int NameFieldNumber = 1;
    private string 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");
      }
    }

    /// <summary>Field number for the "constraint" field.</summary>
    public const int ConstraintFieldNumber = 2;
    private global::Circuits.Static.EV.Protobuf.CircuitTypeData constraint_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public global::Circuits.Static.EV.Protobuf.CircuitTypeData Constraint {
      get { return constraint_; }
      set {
        constraint_ = value;
      }
    }

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

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public bool Equals(TypeParameterTypeData other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (Name != other.Name) return false;
      if (!object.Equals(Constraint, other.Constraint)) 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 (constraint_ != null) hash ^= Constraint.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 (constraint_ != null) {
        output.WriteRawTag(18);
        output.WriteMessage(Constraint);
      }
      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 (constraint_ != null) {
        output.WriteRawTag(18);
        output.WriteMessage(Constraint);
      }
      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 (constraint_ != null) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(Constraint);
      }
      if (_unknownFields != null) {
        size += _unknownFields.CalculateSize();
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void MergeFrom(TypeParameterTypeData other) {
      if (other == null) {
        return;
      }
      if (other.Name.Length != 0) {
        Name = other.Name;
      }
      if (other.constraint_ != null) {
        if (constraint_ == null) {
          Constraint = new global::Circuits.Static.EV.Protobuf.CircuitTypeData();
        }
        Constraint.MergeFrom(other.Constraint);
      }
      _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) {
      if ((tag & 7) == 4) {
        // Abort on any end group tag.
        return;
      }
      switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
            break;
          case 10: {
            Name = input.ReadString();
            break;
          }
          case 18: {
            if (constraint_ == null) {
              Constraint = new global::Circuits.Static.EV.Protobuf.CircuitTypeData();
            }
            input.ReadMessage(Constraint);
            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) {
      if ((tag & 7) == 4) {
        // Abort on any end group tag.
        return;
      }
      switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input);
            break;
          case 10: {
            Name = input.ReadString();
            break;
          }
          case 18: {
            if (constraint_ == null) {
              Constraint = new global::Circuits.Static.EV.Protobuf.CircuitTypeData();
            }
            input.ReadMessage(Constraint);
            break;
          }
        }
      }
    }
    #endif

  }

  #endregion

}

#endregion Designer generated code
