// <auto-generated>
//     Generated by the protocol buffer compiler.  DO NOT EDIT!
//     source: Protos/central_control.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 ZB.MOM.WW.ScadaBridge.Communication.Grpc {

  /// <summary>Holder for reflection information generated from Protos/central_control.proto</summary>
  public static partial class CentralControlReflection {

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

    static CentralControlReflection() {
      byte[] descriptorData = global::System.Convert.FromBase64String(
          string.Concat(
            "ChxQcm90b3MvY2VudHJhbF9jb250cm9sLnByb3RvEh1zY2FkYWJyaWRnZS5j",
            "ZW50cmFsY29udHJvbC52MRobZ29vZ2xlL3Byb3RvYnVmL2VtcHR5LnByb3Rv",
            "Gh9nb29nbGUvcHJvdG9idWYvdGltZXN0YW1wLnByb3RvGh5nb29nbGUvcHJv",
            "dG9idWYvd3JhcHBlcnMucHJvdG8aF1Byb3Rvcy9zaXRlc3RyZWFtLnByb3Rv",
            "IrkCChVOb3RpZmljYXRpb25TdWJtaXREdG8SFwoPbm90aWZpY2F0aW9uX2lk",
            "GAEgASgJEhEKCWxpc3RfbmFtZRgCIAEoCRIPCgdzdWJqZWN0GAMgASgJEgwK",
            "BGJvZHkYBCABKAkSFgoOc291cmNlX3NpdGVfaWQYBSABKAkSGgoSc291cmNl",
            "X2luc3RhbmNlX2lkGAYgASgJEhUKDXNvdXJjZV9zY3JpcHQYByABKAkSNAoQ",
            "c2l0ZV9lbnF1ZXVlZF9hdBgIIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1l",
            "c3RhbXASGwoTb3JpZ2luX2V4ZWN1dGlvbl9pZBgJIAEoCRIiChpvcmlnaW5f",
            "cGFyZW50X2V4ZWN1dGlvbl9pZBgKIAEoCRITCgtzb3VyY2Vfbm9kZRgLIAEo",
            "CSJUChhOb3RpZmljYXRpb25TdWJtaXRBY2tEdG8SFwoPbm90aWZpY2F0aW9u",
            "X2lkGAEgASgJEhAKCGFjY2VwdGVkGAIgASgIEg0KBWVycm9yGAMgASgJIk0K",
            "Gk5vdGlmaWNhdGlvblN0YXR1c1F1ZXJ5RHRvEhYKDmNvcnJlbGF0aW9uX2lk",
            "GAEgASgJEhcKD25vdGlmaWNhdGlvbl9pZBgCIAEoCSKxAQodTm90aWZpY2F0",
            "aW9uU3RhdHVzUmVzcG9uc2VEdG8SFgoOY29ycmVsYXRpb25faWQYASABKAkS",
            "DQoFZm91bmQYAiABKAgSDgoGc3RhdHVzGAMgASgJEhMKC3JldHJ5X2NvdW50",
            "GAQgASgFEhIKCmxhc3RfZXJyb3IYBSABKAkSMAoMZGVsaXZlcmVkX2F0GAYg",
            "ASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCL9AQoXUmVjb25jaWxl",
            "U2l0ZVJlcXVlc3REdG8SFwoPc2l0ZV9pZGVudGlmaWVyGAEgASgJEg8KB25v",
            "ZGVfaWQYAiABKAkSeAobbG9jYWxfbmFtZV90b19yZXZpc2lvbl9oYXNoGAMg",
            "AygLMlMuc2NhZGFicmlkZ2UuY2VudHJhbGNvbnRyb2wudjEuUmVjb25jaWxl",
            "U2l0ZVJlcXVlc3REdG8uTG9jYWxOYW1lVG9SZXZpc2lvbkhhc2hFbnRyeRo+",
            "ChxMb2NhbE5hbWVUb1JldmlzaW9uSGFzaEVudHJ5EgsKA2tleRgBIAEoCRIN",
            "CgV2YWx1ZRgCIAEoCToCOAEikQEKGFJlY29uY2lsZVNpdGVSZXNwb25zZUR0",
            "bxI/CgNnYXAYASADKAsyMi5zY2FkYWJyaWRnZS5jZW50cmFsY29udHJvbC52",
            "MS5SZWNvbmNpbGVHYXBJdGVtRHRvEhQKDG9ycGhhbl9uYW1lcxgCIAMoCRIe",
            "ChZjZW50cmFsX2ZldGNoX2Jhc2VfdXJsGAMgASgJIooBChNSZWNvbmNpbGVH",
            "YXBJdGVtRHRvEhwKFGluc3RhbmNlX3VuaXF1ZV9uYW1lGAEgASgJEhUKDWRl",
            "cGxveW1lbnRfaWQYAiABKAkSFQoNcmV2aXNpb25faGFzaBgDIAEoCRISCgpp",
            "c19lbmFibGVkGAQgASgIEhMKC2ZldGNoX3Rva2VuGAUgASgJIlEKFlRhZ1Jl",
            "c29sdXRpb25TdGF0dXNEdG8SGAoQdG90YWxfc3Vic2NyaWJlZBgBIAEoBRId",
            "ChVzdWNjZXNzZnVsbHlfcmVzb2x2ZWQYAiABKAUiQwoTVGFnUXVhbGl0eUNv",
            "dW50c0R0bxIMCgRnb29kGAEgASgFEgsKA2JhZBgCIAEoBRIRCgl1bmNlcnRh",
            "aW4YAyABKAUiQgoNTm9kZVN0YXR1c0R0bxIQCghob3N0bmFtZRgBIAEoCRIR",
            "Cglpc19vbmxpbmUYAiABKAgSDAoEcm9sZRgDIAEoCSKDAQobU2l0ZUF1ZGl0",
            "QmFja2xvZ1NuYXBzaG90RHRvEhUKDXBlbmRpbmdfY291bnQYASABKAUSNgoS",
            "b2xkZXN0X3BlbmRpbmdfdXRjGAIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRp",
            "bWVzdGFtcBIVCg1vbl9kaXNrX2J5dGVzGAMgASgDIqEBChhDb25uZWN0aW9u",
            "RW5kcG9pbnRNYXBEdG8SVQoHZW50cmllcxgBIAMoCzJELnNjYWRhYnJpZGdl",
            "LmNlbnRyYWxjb250cm9sLnYxLkNvbm5lY3Rpb25FbmRwb2ludE1hcER0by5F",
            "bnRyaWVzRW50cnkaLgoMRW50cmllc0VudHJ5EgsKA2tleRgBIAEoCRINCgV2",
            "YWx1ZRgCIAEoCToCOAEixQEKEFRhZ1F1YWxpdHlNYXBEdG8STQoHZW50cmll",
            "cxgBIAMoCzI8LnNjYWRhYnJpZGdlLmNlbnRyYWxjb250cm9sLnYxLlRhZ1F1",
            "YWxpdHlNYXBEdG8uRW50cmllc0VudHJ5GmIKDEVudHJpZXNFbnRyeRILCgNr",
            "ZXkYASABKAkSQQoFdmFsdWUYAiABKAsyMi5zY2FkYWJyaWRnZS5jZW50cmFs",
            "Y29udHJvbC52MS5UYWdRdWFsaXR5Q291bnRzRHRvOgI4ASJQChFOb2RlU3Rh",
            "dHVzTGlzdER0bxI7CgVub2RlcxgBIAMoCzIsLnNjYWRhYnJpZGdlLmNlbnRy",
            "YWxjb250cm9sLnYxLk5vZGVTdGF0dXNEdG8iig4KE1NpdGVIZWFsdGhSZXBv",
            "cnREdG8SDwoHc2l0ZV9pZBgBIAEoCRIXCg9zZXF1ZW5jZV9udW1iZXIYAiAB",
            "KAMSNAoQcmVwb3J0X3RpbWVzdGFtcBgDIAEoCzIaLmdvb2dsZS5wcm90b2J1",
            "Zi5UaW1lc3RhbXAScAoYZGF0YV9jb25uZWN0aW9uX3N0YXR1c2VzGAQgAygL",
            "Mk4uc2NhZGFicmlkZ2UuY2VudHJhbGNvbnRyb2wudjEuU2l0ZUhlYWx0aFJl",
            "cG9ydER0by5EYXRhQ29ubmVjdGlvblN0YXR1c2VzRW50cnkSagoVdGFnX3Jl",
            "c29sdXRpb25fY291bnRzGAUgAygLMksuc2NhZGFicmlkZ2UuY2VudHJhbGNv",
            "bnRyb2wudjEuU2l0ZUhlYWx0aFJlcG9ydER0by5UYWdSZXNvbHV0aW9uQ291",
            "bnRzRW50cnkSGgoSc2NyaXB0X2Vycm9yX2NvdW50GAYgASgFEiQKHGFsYXJt",
            "X2V2YWx1YXRpb25fZXJyb3JfY291bnQYByABKAUSfAofc3RvcmVfYW5kX2Zv",
            "cndhcmRfYnVmZmVyX2RlcHRocxgIIAMoCzJTLnNjYWRhYnJpZGdlLmNlbnRy",
            "YWxjb250cm9sLnYxLlNpdGVIZWFsdGhSZXBvcnREdG8uU3RvcmVBbmRGb3J3",
            "YXJkQnVmZmVyRGVwdGhzRW50cnkSGQoRZGVhZF9sZXR0ZXJfY291bnQYCSAB",
            "KAUSHwoXZGVwbG95ZWRfaW5zdGFuY2VfY291bnQYCiABKAUSHgoWZW5hYmxl",
            "ZF9pbnN0YW5jZV9jb3VudBgLIAEoBRIfChdkaXNhYmxlZF9pbnN0YW5jZV9j",
            "b3VudBgMIAEoBRIRCglub2RlX3JvbGUYDSABKAkSFQoNbm9kZV9ob3N0bmFt",
            "ZRgOIAEoCRJaChlkYXRhX2Nvbm5lY3Rpb25fZW5kcG9pbnRzGA8gASgLMjcu",
            "c2NhZGFicmlkZ2UuY2VudHJhbGNvbnRyb2wudjEuQ29ubmVjdGlvbkVuZHBv",
            "aW50TWFwRHRvElQKG2RhdGFfY29ubmVjdGlvbl90YWdfcXVhbGl0eRgQIAEo",
            "CzIvLnNjYWRhYnJpZGdlLmNlbnRyYWxjb250cm9sLnYxLlRhZ1F1YWxpdHlN",
            "YXBEdG8SHAoUcGFya2VkX21lc3NhZ2VfY291bnQYESABKAUSRwoNY2x1c3Rl",
            "cl9ub2RlcxgSIAEoCzIwLnNjYWRhYnJpZGdlLmNlbnRyYWxjb250cm9sLnYx",
            "Lk5vZGVTdGF0dXNMaXN0RHRvEiEKGXNpdGVfYXVkaXRfd3JpdGVfZmFpbHVy",
            "ZXMYEyABKAUSHwoXYXVkaXRfcmVkYWN0aW9uX2ZhaWx1cmUYFCABKAUSVgoS",
            "c2l0ZV9hdWRpdF9iYWNrbG9nGBUgASgLMjouc2NhZGFicmlkZ2UuY2VudHJh",
            "bGNvbnRyb2wudjEuU2l0ZUF1ZGl0QmFja2xvZ1NuYXBzaG90RHRvEiUKHXNp",
            "dGVfZXZlbnRfbG9nX3dyaXRlX2ZhaWx1cmVzGBYgASgDEkcKIW9sZGVzdF9w",
            "YXJrZWRfbWVzc2FnZV9hZ2Vfc2Vjb25kcxgXIAEoCzIcLmdvb2dsZS5wcm90",
            "b2J1Zi5Eb3VibGVWYWx1ZRIaChJzY3JpcHRfcXVldWVfZGVwdGgYGCABKAUS",
            "GwoTc2NyaXB0X2J1c3lfdGhyZWFkcxgZIAEoBRJECh5zY3JpcHRfb2xkZXN0",
            "X2J1c3lfYWdlX3NlY29uZHMYGiABKAsyHC5nb29nbGUucHJvdG9idWYuRG91",
            "YmxlVmFsdWUSQgoebG9jYWxfZGJfcmVwbGljYXRpb25fY29ubmVjdGVkGBsg",
            "ASgLMhouZ29vZ2xlLnByb3RvYnVmLkJvb2xWYWx1ZRI7ChZsb2NhbF9kYl9v",
            "cGxvZ19iYWNrbG9nGBwgASgLMhsuZ29vZ2xlLnByb3RvYnVmLkludDY0VmFs",
            "dWUacgobRGF0YUNvbm5lY3Rpb25TdGF0dXNlc0VudHJ5EgsKA2tleRgBIAEo",
            "CRJCCgV2YWx1ZRgCIAEoDjIzLnNjYWRhYnJpZGdlLmNlbnRyYWxjb250cm9s",
            "LnYxLkNvbm5lY3Rpb25IZWFsdGhFbnVtOgI4ARpxChhUYWdSZXNvbHV0aW9u",
            "Q291bnRzRW50cnkSCwoDa2V5GAEgASgJEkQKBXZhbHVlGAIgASgLMjUuc2Nh",
            "ZGFicmlkZ2UuY2VudHJhbGNvbnRyb2wudjEuVGFnUmVzb2x1dGlvblN0YXR1",
            "c0R0bzoCOAEaQgogU3RvcmVBbmRGb3J3YXJkQnVmZmVyRGVwdGhzRW50cnkS",
            "CwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgFOgI4ASJjChZTaXRlSGVhbHRo",
            "UmVwb3J0QWNrRHRvEg8KB3NpdGVfaWQYASABKAkSFwoPc2VxdWVuY2VfbnVt",
            "YmVyGAIgASgDEhAKCGFjY2VwdGVkGAMgASgIEg0KBWVycm9yGAQgASgJIosB",
            "CgxIZWFydGJlYXREdG8SDwoHc2l0ZV9pZBgBIAEoCRIVCg1ub2RlX2hvc3Ru",
            "YW1lGAIgASgJEhEKCWlzX2FjdGl2ZRgDIAEoCBItCgl0aW1lc3RhbXAYBCAB",
            "KAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEhEKCXN5bnRoZXRpYxgF",
            "IAEoCCq9AQoUQ29ubmVjdGlvbkhlYWx0aEVudW0SIQodQ09OTkVDVElPTl9I",
            "RUFMVEhfVU5TUEVDSUZJRUQQABIfChtDT05ORUNUSU9OX0hFQUxUSF9DT05O",
            "RUNURUQQARIiCh5DT05ORUNUSU9OX0hFQUxUSF9ESVNDT05ORUNURUQQAhIg",
            "ChxDT05ORUNUSU9OX0hFQUxUSF9DT05ORUNUSU5HEAMSGwoXQ09OTkVDVElP",
            "Tl9IRUFMVEhfRVJST1IQBDKhBgoVQ2VudHJhbENvbnRyb2xTZXJ2aWNlEoMB",
            "ChJTdWJtaXROb3RpZmljYXRpb24SNC5zY2FkYWJyaWRnZS5jZW50cmFsY29u",
            "dHJvbC52MS5Ob3RpZmljYXRpb25TdWJtaXREdG8aNy5zY2FkYWJyaWRnZS5j",
            "ZW50cmFsY29udHJvbC52MS5Ob3RpZmljYXRpb25TdWJtaXRBY2tEdG8SkgEK",
            "F1F1ZXJ5Tm90aWZpY2F0aW9uU3RhdHVzEjkuc2NhZGFicmlkZ2UuY2VudHJh",
            "bGNvbnRyb2wudjEuTm90aWZpY2F0aW9uU3RhdHVzUXVlcnlEdG8aPC5zY2Fk",
            "YWJyaWRnZS5jZW50cmFsY29udHJvbC52MS5Ob3RpZmljYXRpb25TdGF0dXNS",
            "ZXNwb25zZUR0bxJHChFJbmdlc3RBdWRpdEV2ZW50cxIbLnNpdGVzdHJlYW0u",
            "QXVkaXRFdmVudEJhdGNoGhUuc2l0ZXN0cmVhbS5Jbmdlc3RBY2sSUAoVSW5n",
            "ZXN0Q2FjaGVkVGVsZW1ldHJ5EiAuc2l0ZXN0cmVhbS5DYWNoZWRUZWxlbWV0",
            "cnlCYXRjaBoVLnNpdGVzdHJlYW0uSW5nZXN0QWNrEoABCg1SZWNvbmNpbGVT",
            "aXRlEjYuc2NhZGFicmlkZ2UuY2VudHJhbGNvbnRyb2wudjEuUmVjb25jaWxl",
            "U2l0ZVJlcXVlc3REdG8aNy5zY2FkYWJyaWRnZS5jZW50cmFsY29udHJvbC52",
            "MS5SZWNvbmNpbGVTaXRlUmVzcG9uc2VEdG8SfQoQUmVwb3J0U2l0ZUhlYWx0",
            "aBIyLnNjYWRhYnJpZGdlLmNlbnRyYWxjb250cm9sLnYxLlNpdGVIZWFsdGhS",
            "ZXBvcnREdG8aNS5zY2FkYWJyaWRnZS5jZW50cmFsY29udHJvbC52MS5TaXRl",
            "SGVhbHRoUmVwb3J0QWNrRHRvElAKCUhlYXJ0YmVhdBIrLnNjYWRhYnJpZGdl",
            "LmNlbnRyYWxjb250cm9sLnYxLkhlYXJ0YmVhdER0bxoWLmdvb2dsZS5wcm90",
            "b2J1Zi5FbXB0eUIrqgIoWkIuTU9NLldXLlNjYWRhQnJpZGdlLkNvbW11bmlj",
            "YXRpb24uR3JwY2IGcHJvdG8z"));
      descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
          new pbr::FileDescriptor[] { global::Google.Protobuf.WellKnownTypes.EmptyReflection.Descriptor, global::Google.Protobuf.WellKnownTypes.TimestampReflection.Descriptor, global::Google.Protobuf.WellKnownTypes.WrappersReflection.Descriptor, global::ZB.MOM.WW.ScadaBridge.Communication.Grpc.SitestreamReflection.Descriptor, },
          new pbr::GeneratedClrTypeInfo(new[] {typeof(global::ZB.MOM.WW.ScadaBridge.Communication.Grpc.ConnectionHealthEnum), }, null, new pbr::GeneratedClrTypeInfo[] {
            new pbr::GeneratedClrTypeInfo(typeof(global::ZB.MOM.WW.ScadaBridge.Communication.Grpc.NotificationSubmitDto), global::ZB.MOM.WW.ScadaBridge.Communication.Grpc.NotificationSubmitDto.Parser, new[]{ "NotificationId", "ListName", "Subject", "Body", "SourceSiteId", "SourceInstanceId", "SourceScript", "SiteEnqueuedAt", "OriginExecutionId", "OriginParentExecutionId", "SourceNode" }, null, null, null, null),
            new pbr::GeneratedClrTypeInfo(typeof(global::ZB.MOM.WW.ScadaBridge.Communication.Grpc.NotificationSubmitAckDto), global::ZB.MOM.WW.ScadaBridge.Communication.Grpc.NotificationSubmitAckDto.Parser, new[]{ "NotificationId", "Accepted", "Error" }, null, null, null, null),
            new pbr::GeneratedClrTypeInfo(typeof(global::ZB.MOM.WW.ScadaBridge.Communication.Grpc.NotificationStatusQueryDto), global::ZB.MOM.WW.ScadaBridge.Communication.Grpc.NotificationStatusQueryDto.Parser, new[]{ "CorrelationId", "NotificationId" }, null, null, null, null),
            new pbr::GeneratedClrTypeInfo(typeof(global::ZB.MOM.WW.ScadaBridge.Communication.Grpc.NotificationStatusResponseDto), global::ZB.MOM.WW.ScadaBridge.Communication.Grpc.NotificationStatusResponseDto.Parser, new[]{ "CorrelationId", "Found", "Status", "RetryCount", "LastError", "DeliveredAt" }, null, null, null, null),
            new pbr::GeneratedClrTypeInfo(typeof(global::ZB.MOM.WW.ScadaBridge.Communication.Grpc.ReconcileSiteRequestDto), global::ZB.MOM.WW.ScadaBridge.Communication.Grpc.ReconcileSiteRequestDto.Parser, new[]{ "SiteIdentifier", "NodeId", "LocalNameToRevisionHash" }, null, null, null, new pbr::GeneratedClrTypeInfo[] { null, }),
            new pbr::GeneratedClrTypeInfo(typeof(global::ZB.MOM.WW.ScadaBridge.Communication.Grpc.ReconcileSiteResponseDto), global::ZB.MOM.WW.ScadaBridge.Communication.Grpc.ReconcileSiteResponseDto.Parser, new[]{ "Gap", "OrphanNames", "CentralFetchBaseUrl" }, null, null, null, null),
            new pbr::GeneratedClrTypeInfo(typeof(global::ZB.MOM.WW.ScadaBridge.Communication.Grpc.ReconcileGapItemDto), global::ZB.MOM.WW.ScadaBridge.Communication.Grpc.ReconcileGapItemDto.Parser, new[]{ "InstanceUniqueName", "DeploymentId", "RevisionHash", "IsEnabled", "FetchToken" }, null, null, null, null),
            new pbr::GeneratedClrTypeInfo(typeof(global::ZB.MOM.WW.ScadaBridge.Communication.Grpc.TagResolutionStatusDto), global::ZB.MOM.WW.ScadaBridge.Communication.Grpc.TagResolutionStatusDto.Parser, new[]{ "TotalSubscribed", "SuccessfullyResolved" }, null, null, null, null),
            new pbr::GeneratedClrTypeInfo(typeof(global::ZB.MOM.WW.ScadaBridge.Communication.Grpc.TagQualityCountsDto), global::ZB.MOM.WW.ScadaBridge.Communication.Grpc.TagQualityCountsDto.Parser, new[]{ "Good", "Bad", "Uncertain" }, null, null, null, null),
            new pbr::GeneratedClrTypeInfo(typeof(global::ZB.MOM.WW.ScadaBridge.Communication.Grpc.NodeStatusDto), global::ZB.MOM.WW.ScadaBridge.Communication.Grpc.NodeStatusDto.Parser, new[]{ "Hostname", "IsOnline", "Role" }, null, null, null, null),
            new pbr::GeneratedClrTypeInfo(typeof(global::ZB.MOM.WW.ScadaBridge.Communication.Grpc.SiteAuditBacklogSnapshotDto), global::ZB.MOM.WW.ScadaBridge.Communication.Grpc.SiteAuditBacklogSnapshotDto.Parser, new[]{ "PendingCount", "OldestPendingUtc", "OnDiskBytes" }, null, null, null, null),
            new pbr::GeneratedClrTypeInfo(typeof(global::ZB.MOM.WW.ScadaBridge.Communication.Grpc.ConnectionEndpointMapDto), global::ZB.MOM.WW.ScadaBridge.Communication.Grpc.ConnectionEndpointMapDto.Parser, new[]{ "Entries" }, null, null, null, new pbr::GeneratedClrTypeInfo[] { null, }),
            new pbr::GeneratedClrTypeInfo(typeof(global::ZB.MOM.WW.ScadaBridge.Communication.Grpc.TagQualityMapDto), global::ZB.MOM.WW.ScadaBridge.Communication.Grpc.TagQualityMapDto.Parser, new[]{ "Entries" }, null, null, null, new pbr::GeneratedClrTypeInfo[] { null, }),
            new pbr::GeneratedClrTypeInfo(typeof(global::ZB.MOM.WW.ScadaBridge.Communication.Grpc.NodeStatusListDto), global::ZB.MOM.WW.ScadaBridge.Communication.Grpc.NodeStatusListDto.Parser, new[]{ "Nodes" }, null, null, null, null),
            new pbr::GeneratedClrTypeInfo(typeof(global::ZB.MOM.WW.ScadaBridge.Communication.Grpc.SiteHealthReportDto), global::ZB.MOM.WW.ScadaBridge.Communication.Grpc.SiteHealthReportDto.Parser, new[]{ "SiteId", "SequenceNumber", "ReportTimestamp", "DataConnectionStatuses", "TagResolutionCounts", "ScriptErrorCount", "AlarmEvaluationErrorCount", "StoreAndForwardBufferDepths", "DeadLetterCount", "DeployedInstanceCount", "EnabledInstanceCount", "DisabledInstanceCount", "NodeRole", "NodeHostname", "DataConnectionEndpoints", "DataConnectionTagQuality", "ParkedMessageCount", "ClusterNodes", "SiteAuditWriteFailures", "AuditRedactionFailure", "SiteAuditBacklog", "SiteEventLogWriteFailures", "OldestParkedMessageAgeSeconds", "ScriptQueueDepth", "ScriptBusyThreads", "ScriptOldestBusyAgeSeconds", "LocalDbReplicationConnected", "LocalDbOplogBacklog" }, null, null, null, new pbr::GeneratedClrTypeInfo[] { null, null, null, }),
            new pbr::GeneratedClrTypeInfo(typeof(global::ZB.MOM.WW.ScadaBridge.Communication.Grpc.SiteHealthReportAckDto), global::ZB.MOM.WW.ScadaBridge.Communication.Grpc.SiteHealthReportAckDto.Parser, new[]{ "SiteId", "SequenceNumber", "Accepted", "Error" }, null, null, null, null),
            new pbr::GeneratedClrTypeInfo(typeof(global::ZB.MOM.WW.ScadaBridge.Communication.Grpc.HeartbeatDto), global::ZB.MOM.WW.ScadaBridge.Communication.Grpc.HeartbeatDto.Parser, new[]{ "SiteId", "NodeHostname", "IsActive", "Timestamp", "Synthetic" }, null, null, null, null)
          }));
    }
    #endregion

  }
  #region Enums
  /// <summary>
  /// Wire form of the Commons ConnectionHealth enum.
  ///
  /// CONNECTION_HEALTH_UNSPECIFIED exists only to keep the proto3 zero value from
  /// meaning something. Mapping Connected onto 0 would make an absent/garbled
  /// value decode as "healthy", which is precisely the wrong direction to fail;
  /// the mapper decodes UNSPECIFIED as Error instead and never emits it.
  /// </summary>
  public enum ConnectionHealthEnum {
    [pbr::OriginalName("CONNECTION_HEALTH_UNSPECIFIED")] ConnectionHealthUnspecified = 0,
    [pbr::OriginalName("CONNECTION_HEALTH_CONNECTED")] ConnectionHealthConnected = 1,
    [pbr::OriginalName("CONNECTION_HEALTH_DISCONNECTED")] ConnectionHealthDisconnected = 2,
    [pbr::OriginalName("CONNECTION_HEALTH_CONNECTING")] ConnectionHealthConnecting = 3,
    [pbr::OriginalName("CONNECTION_HEALTH_ERROR")] ConnectionHealthError = 4,
  }

  #endregion

  #region Messages
  /// <summary>
  /// Site -> Central: submit a buffered notification for central delivery.
  /// Mirrors Commons NotificationSubmit.
  /// </summary>
  [global::System.Diagnostics.DebuggerDisplayAttribute("{ToString(),nq}")]
  public sealed partial class NotificationSubmitDto : pb::IMessage<NotificationSubmitDto>
  #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      , pb::IBufferMessage
  #endif
  {
    private static readonly pb::MessageParser<NotificationSubmitDto> _parser = new pb::MessageParser<NotificationSubmitDto>(() => new NotificationSubmitDto());
    private pb::UnknownFieldSet _unknownFields;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static pb::MessageParser<NotificationSubmitDto> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::ZB.MOM.WW.ScadaBridge.Communication.Grpc.CentralControlReflection.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 NotificationSubmitDto() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public NotificationSubmitDto(NotificationSubmitDto other) : this() {
      notificationId_ = other.notificationId_;
      listName_ = other.listName_;
      subject_ = other.subject_;
      body_ = other.body_;
      sourceSiteId_ = other.sourceSiteId_;
      sourceInstanceId_ = other.sourceInstanceId_;
      sourceScript_ = other.sourceScript_;
      siteEnqueuedAt_ = other.siteEnqueuedAt_ != null ? other.siteEnqueuedAt_.Clone() : null;
      originExecutionId_ = other.originExecutionId_;
      originParentExecutionId_ = other.originParentExecutionId_;
      sourceNode_ = other.sourceNode_;
      _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
    }

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

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

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

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

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

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

    /// <summary>Field number for the "source_instance_id" field.</summary>
    public const int SourceInstanceIdFieldNumber = 6;
    private string sourceInstanceId_ = "";
    /// <summary>
    /// empty string represents null
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public string SourceInstanceId {
      get { return sourceInstanceId_; }
      set {
        sourceInstanceId_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
      }
    }

    /// <summary>Field number for the "source_script" field.</summary>
    public const int SourceScriptFieldNumber = 7;
    private string sourceScript_ = "";
    /// <summary>
    /// empty string represents null
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public string SourceScript {
      get { return sourceScript_; }
      set {
        sourceScript_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
      }
    }

    /// <summary>Field number for the "site_enqueued_at" field.</summary>
    public const int SiteEnqueuedAtFieldNumber = 8;
    private global::Google.Protobuf.WellKnownTypes.Timestamp siteEnqueuedAt_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public global::Google.Protobuf.WellKnownTypes.Timestamp SiteEnqueuedAt {
      get { return siteEnqueuedAt_; }
      set {
        siteEnqueuedAt_ = value;
      }
    }

    /// <summary>Field number for the "origin_execution_id" field.</summary>
    public const int OriginExecutionIdFieldNumber = 9;
    private string originExecutionId_ = "";
    /// <summary>
    /// GUID string; empty represents null
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public string OriginExecutionId {
      get { return originExecutionId_; }
      set {
        originExecutionId_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
      }
    }

    /// <summary>Field number for the "origin_parent_execution_id" field.</summary>
    public const int OriginParentExecutionIdFieldNumber = 10;
    private string originParentExecutionId_ = "";
    /// <summary>
    /// GUID string; empty represents null
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public string OriginParentExecutionId {
      get { return originParentExecutionId_; }
      set {
        originParentExecutionId_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
      }
    }

    /// <summary>Field number for the "source_node" field.</summary>
    public const int SourceNodeFieldNumber = 11;
    private string sourceNode_ = "";
    /// <summary>
    /// empty string represents null
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public string SourceNode {
      get { return sourceNode_; }
      set {
        sourceNode_ = 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 NotificationSubmitDto);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public bool Equals(NotificationSubmitDto other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (NotificationId != other.NotificationId) return false;
      if (ListName != other.ListName) return false;
      if (Subject != other.Subject) return false;
      if (Body != other.Body) return false;
      if (SourceSiteId != other.SourceSiteId) return false;
      if (SourceInstanceId != other.SourceInstanceId) return false;
      if (SourceScript != other.SourceScript) return false;
      if (!object.Equals(SiteEnqueuedAt, other.SiteEnqueuedAt)) return false;
      if (OriginExecutionId != other.OriginExecutionId) return false;
      if (OriginParentExecutionId != other.OriginParentExecutionId) return false;
      if (SourceNode != other.SourceNode) 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 (NotificationId.Length != 0) hash ^= NotificationId.GetHashCode();
      if (ListName.Length != 0) hash ^= ListName.GetHashCode();
      if (Subject.Length != 0) hash ^= Subject.GetHashCode();
      if (Body.Length != 0) hash ^= Body.GetHashCode();
      if (SourceSiteId.Length != 0) hash ^= SourceSiteId.GetHashCode();
      if (SourceInstanceId.Length != 0) hash ^= SourceInstanceId.GetHashCode();
      if (SourceScript.Length != 0) hash ^= SourceScript.GetHashCode();
      if (siteEnqueuedAt_ != null) hash ^= SiteEnqueuedAt.GetHashCode();
      if (OriginExecutionId.Length != 0) hash ^= OriginExecutionId.GetHashCode();
      if (OriginParentExecutionId.Length != 0) hash ^= OriginParentExecutionId.GetHashCode();
      if (SourceNode.Length != 0) hash ^= SourceNode.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 (NotificationId.Length != 0) {
        output.WriteRawTag(10);
        output.WriteString(NotificationId);
      }
      if (ListName.Length != 0) {
        output.WriteRawTag(18);
        output.WriteString(ListName);
      }
      if (Subject.Length != 0) {
        output.WriteRawTag(26);
        output.WriteString(Subject);
      }
      if (Body.Length != 0) {
        output.WriteRawTag(34);
        output.WriteString(Body);
      }
      if (SourceSiteId.Length != 0) {
        output.WriteRawTag(42);
        output.WriteString(SourceSiteId);
      }
      if (SourceInstanceId.Length != 0) {
        output.WriteRawTag(50);
        output.WriteString(SourceInstanceId);
      }
      if (SourceScript.Length != 0) {
        output.WriteRawTag(58);
        output.WriteString(SourceScript);
      }
      if (siteEnqueuedAt_ != null) {
        output.WriteRawTag(66);
        output.WriteMessage(SiteEnqueuedAt);
      }
      if (OriginExecutionId.Length != 0) {
        output.WriteRawTag(74);
        output.WriteString(OriginExecutionId);
      }
      if (OriginParentExecutionId.Length != 0) {
        output.WriteRawTag(82);
        output.WriteString(OriginParentExecutionId);
      }
      if (SourceNode.Length != 0) {
        output.WriteRawTag(90);
        output.WriteString(SourceNode);
      }
      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 (NotificationId.Length != 0) {
        output.WriteRawTag(10);
        output.WriteString(NotificationId);
      }
      if (ListName.Length != 0) {
        output.WriteRawTag(18);
        output.WriteString(ListName);
      }
      if (Subject.Length != 0) {
        output.WriteRawTag(26);
        output.WriteString(Subject);
      }
      if (Body.Length != 0) {
        output.WriteRawTag(34);
        output.WriteString(Body);
      }
      if (SourceSiteId.Length != 0) {
        output.WriteRawTag(42);
        output.WriteString(SourceSiteId);
      }
      if (SourceInstanceId.Length != 0) {
        output.WriteRawTag(50);
        output.WriteString(SourceInstanceId);
      }
      if (SourceScript.Length != 0) {
        output.WriteRawTag(58);
        output.WriteString(SourceScript);
      }
      if (siteEnqueuedAt_ != null) {
        output.WriteRawTag(66);
        output.WriteMessage(SiteEnqueuedAt);
      }
      if (OriginExecutionId.Length != 0) {
        output.WriteRawTag(74);
        output.WriteString(OriginExecutionId);
      }
      if (OriginParentExecutionId.Length != 0) {
        output.WriteRawTag(82);
        output.WriteString(OriginParentExecutionId);
      }
      if (SourceNode.Length != 0) {
        output.WriteRawTag(90);
        output.WriteString(SourceNode);
      }
      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 (NotificationId.Length != 0) {
        size += 1 + pb::CodedOutputStream.ComputeStringSize(NotificationId);
      }
      if (ListName.Length != 0) {
        size += 1 + pb::CodedOutputStream.ComputeStringSize(ListName);
      }
      if (Subject.Length != 0) {
        size += 1 + pb::CodedOutputStream.ComputeStringSize(Subject);
      }
      if (Body.Length != 0) {
        size += 1 + pb::CodedOutputStream.ComputeStringSize(Body);
      }
      if (SourceSiteId.Length != 0) {
        size += 1 + pb::CodedOutputStream.ComputeStringSize(SourceSiteId);
      }
      if (SourceInstanceId.Length != 0) {
        size += 1 + pb::CodedOutputStream.ComputeStringSize(SourceInstanceId);
      }
      if (SourceScript.Length != 0) {
        size += 1 + pb::CodedOutputStream.ComputeStringSize(SourceScript);
      }
      if (siteEnqueuedAt_ != null) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(SiteEnqueuedAt);
      }
      if (OriginExecutionId.Length != 0) {
        size += 1 + pb::CodedOutputStream.ComputeStringSize(OriginExecutionId);
      }
      if (OriginParentExecutionId.Length != 0) {
        size += 1 + pb::CodedOutputStream.ComputeStringSize(OriginParentExecutionId);
      }
      if (SourceNode.Length != 0) {
        size += 1 + pb::CodedOutputStream.ComputeStringSize(SourceNode);
      }
      if (_unknownFields != null) {
        size += _unknownFields.CalculateSize();
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void MergeFrom(NotificationSubmitDto other) {
      if (other == null) {
        return;
      }
      if (other.NotificationId.Length != 0) {
        NotificationId = other.NotificationId;
      }
      if (other.ListName.Length != 0) {
        ListName = other.ListName;
      }
      if (other.Subject.Length != 0) {
        Subject = other.Subject;
      }
      if (other.Body.Length != 0) {
        Body = other.Body;
      }
      if (other.SourceSiteId.Length != 0) {
        SourceSiteId = other.SourceSiteId;
      }
      if (other.SourceInstanceId.Length != 0) {
        SourceInstanceId = other.SourceInstanceId;
      }
      if (other.SourceScript.Length != 0) {
        SourceScript = other.SourceScript;
      }
      if (other.siteEnqueuedAt_ != null) {
        if (siteEnqueuedAt_ == null) {
          SiteEnqueuedAt = new global::Google.Protobuf.WellKnownTypes.Timestamp();
        }
        SiteEnqueuedAt.MergeFrom(other.SiteEnqueuedAt);
      }
      if (other.OriginExecutionId.Length != 0) {
        OriginExecutionId = other.OriginExecutionId;
      }
      if (other.OriginParentExecutionId.Length != 0) {
        OriginParentExecutionId = other.OriginParentExecutionId;
      }
      if (other.SourceNode.Length != 0) {
        SourceNode = other.SourceNode;
      }
      _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: {
            NotificationId = input.ReadString();
            break;
          }
          case 18: {
            ListName = input.ReadString();
            break;
          }
          case 26: {
            Subject = input.ReadString();
            break;
          }
          case 34: {
            Body = input.ReadString();
            break;
          }
          case 42: {
            SourceSiteId = input.ReadString();
            break;
          }
          case 50: {
            SourceInstanceId = input.ReadString();
            break;
          }
          case 58: {
            SourceScript = input.ReadString();
            break;
          }
          case 66: {
            if (siteEnqueuedAt_ == null) {
              SiteEnqueuedAt = new global::Google.Protobuf.WellKnownTypes.Timestamp();
            }
            input.ReadMessage(SiteEnqueuedAt);
            break;
          }
          case 74: {
            OriginExecutionId = input.ReadString();
            break;
          }
          case 82: {
            OriginParentExecutionId = input.ReadString();
            break;
          }
          case 90: {
            SourceNode = 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: {
            NotificationId = input.ReadString();
            break;
          }
          case 18: {
            ListName = input.ReadString();
            break;
          }
          case 26: {
            Subject = input.ReadString();
            break;
          }
          case 34: {
            Body = input.ReadString();
            break;
          }
          case 42: {
            SourceSiteId = input.ReadString();
            break;
          }
          case 50: {
            SourceInstanceId = input.ReadString();
            break;
          }
          case 58: {
            SourceScript = input.ReadString();
            break;
          }
          case 66: {
            if (siteEnqueuedAt_ == null) {
              SiteEnqueuedAt = new global::Google.Protobuf.WellKnownTypes.Timestamp();
            }
            input.ReadMessage(SiteEnqueuedAt);
            break;
          }
          case 74: {
            OriginExecutionId = input.ReadString();
            break;
          }
          case 82: {
            OriginParentExecutionId = input.ReadString();
            break;
          }
          case 90: {
            SourceNode = input.ReadString();
            break;
          }
        }
      }
    }
    #endif

  }

  /// <summary>
  /// Central -> Site: ack sent after the Notifications row is persisted.
  /// </summary>
  [global::System.Diagnostics.DebuggerDisplayAttribute("{ToString(),nq}")]
  public sealed partial class NotificationSubmitAckDto : pb::IMessage<NotificationSubmitAckDto>
  #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      , pb::IBufferMessage
  #endif
  {
    private static readonly pb::MessageParser<NotificationSubmitAckDto> _parser = new pb::MessageParser<NotificationSubmitAckDto>(() => new NotificationSubmitAckDto());
    private pb::UnknownFieldSet _unknownFields;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static pb::MessageParser<NotificationSubmitAckDto> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::ZB.MOM.WW.ScadaBridge.Communication.Grpc.CentralControlReflection.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 NotificationSubmitAckDto() {
      OnConstruction();
    }

    partial void OnConstruction();

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

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

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

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

    /// <summary>Field number for the "error" field.</summary>
    public const int ErrorFieldNumber = 3;
    private string error_ = "";
    /// <summary>
    /// empty string represents null
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public string Error {
      get { return error_; }
      set {
        error_ = 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 NotificationSubmitAckDto);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public bool Equals(NotificationSubmitAckDto other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (NotificationId != other.NotificationId) return false;
      if (Accepted != other.Accepted) return false;
      if (Error != other.Error) 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 (NotificationId.Length != 0) hash ^= NotificationId.GetHashCode();
      if (Accepted != false) hash ^= Accepted.GetHashCode();
      if (Error.Length != 0) hash ^= Error.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 (NotificationId.Length != 0) {
        output.WriteRawTag(10);
        output.WriteString(NotificationId);
      }
      if (Accepted != false) {
        output.WriteRawTag(16);
        output.WriteBool(Accepted);
      }
      if (Error.Length != 0) {
        output.WriteRawTag(26);
        output.WriteString(Error);
      }
      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 (NotificationId.Length != 0) {
        output.WriteRawTag(10);
        output.WriteString(NotificationId);
      }
      if (Accepted != false) {
        output.WriteRawTag(16);
        output.WriteBool(Accepted);
      }
      if (Error.Length != 0) {
        output.WriteRawTag(26);
        output.WriteString(Error);
      }
      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 (NotificationId.Length != 0) {
        size += 1 + pb::CodedOutputStream.ComputeStringSize(NotificationId);
      }
      if (Accepted != false) {
        size += 1 + 1;
      }
      if (Error.Length != 0) {
        size += 1 + pb::CodedOutputStream.ComputeStringSize(Error);
      }
      if (_unknownFields != null) {
        size += _unknownFields.CalculateSize();
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void MergeFrom(NotificationSubmitAckDto other) {
      if (other == null) {
        return;
      }
      if (other.NotificationId.Length != 0) {
        NotificationId = other.NotificationId;
      }
      if (other.Accepted != false) {
        Accepted = other.Accepted;
      }
      if (other.Error.Length != 0) {
        Error = other.Error;
      }
      _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: {
            NotificationId = input.ReadString();
            break;
          }
          case 16: {
            Accepted = input.ReadBool();
            break;
          }
          case 26: {
            Error = 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: {
            NotificationId = input.ReadString();
            break;
          }
          case 16: {
            Accepted = input.ReadBool();
            break;
          }
          case 26: {
            Error = input.ReadString();
            break;
          }
        }
      }
    }
    #endif

  }

  /// <summary>
  /// Site -> Central: Notify.Status(id) lookup against the central outbox.
  /// </summary>
  [global::System.Diagnostics.DebuggerDisplayAttribute("{ToString(),nq}")]
  public sealed partial class NotificationStatusQueryDto : pb::IMessage<NotificationStatusQueryDto>
  #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      , pb::IBufferMessage
  #endif
  {
    private static readonly pb::MessageParser<NotificationStatusQueryDto> _parser = new pb::MessageParser<NotificationStatusQueryDto>(() => new NotificationStatusQueryDto());
    private pb::UnknownFieldSet _unknownFields;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static pb::MessageParser<NotificationStatusQueryDto> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::ZB.MOM.WW.ScadaBridge.Communication.Grpc.CentralControlReflection.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 NotificationStatusQueryDto() {
      OnConstruction();
    }

    partial void OnConstruction();

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

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

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

    /// <summary>Field number for the "notification_id" field.</summary>
    public const int NotificationIdFieldNumber = 2;
    private string notificationId_ = "";
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public string NotificationId {
      get { return notificationId_; }
      set {
        notificationId_ = 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 NotificationStatusQueryDto);
    }

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

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void MergeFrom(NotificationStatusQueryDto other) {
      if (other == null) {
        return;
      }
      if (other.CorrelationId.Length != 0) {
        CorrelationId = other.CorrelationId;
      }
      if (other.NotificationId.Length != 0) {
        NotificationId = other.NotificationId;
      }
      _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: {
            CorrelationId = input.ReadString();
            break;
          }
          case 18: {
            NotificationId = 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: {
            CorrelationId = input.ReadString();
            break;
          }
          case 18: {
            NotificationId = input.ReadString();
            break;
          }
        }
      }
    }
    #endif

  }

  /// <summary>
  /// Central -> Site: current central delivery state for a queried notification.
  /// </summary>
  [global::System.Diagnostics.DebuggerDisplayAttribute("{ToString(),nq}")]
  public sealed partial class NotificationStatusResponseDto : pb::IMessage<NotificationStatusResponseDto>
  #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      , pb::IBufferMessage
  #endif
  {
    private static readonly pb::MessageParser<NotificationStatusResponseDto> _parser = new pb::MessageParser<NotificationStatusResponseDto>(() => new NotificationStatusResponseDto());
    private pb::UnknownFieldSet _unknownFields;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static pb::MessageParser<NotificationStatusResponseDto> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::ZB.MOM.WW.ScadaBridge.Communication.Grpc.CentralControlReflection.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 NotificationStatusResponseDto() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public NotificationStatusResponseDto(NotificationStatusResponseDto other) : this() {
      correlationId_ = other.correlationId_;
      found_ = other.found_;
      status_ = other.status_;
      retryCount_ = other.retryCount_;
      lastError_ = other.lastError_;
      deliveredAt_ = other.deliveredAt_ != null ? other.deliveredAt_.Clone() : null;
      _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
    }

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

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

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

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

    /// <summary>Field number for the "retry_count" field.</summary>
    public const int RetryCountFieldNumber = 4;
    private int retryCount_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public int RetryCount {
      get { return retryCount_; }
      set {
        retryCount_ = value;
      }
    }

    /// <summary>Field number for the "last_error" field.</summary>
    public const int LastErrorFieldNumber = 5;
    private string lastError_ = "";
    /// <summary>
    /// empty string represents null
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public string LastError {
      get { return lastError_; }
      set {
        lastError_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
      }
    }

    /// <summary>Field number for the "delivered_at" field.</summary>
    public const int DeliveredAtFieldNumber = 6;
    private global::Google.Protobuf.WellKnownTypes.Timestamp deliveredAt_;
    /// <summary>
    /// absent when null
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public global::Google.Protobuf.WellKnownTypes.Timestamp DeliveredAt {
      get { return deliveredAt_; }
      set {
        deliveredAt_ = value;
      }
    }

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

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public bool Equals(NotificationStatusResponseDto other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (CorrelationId != other.CorrelationId) return false;
      if (Found != other.Found) return false;
      if (Status != other.Status) return false;
      if (RetryCount != other.RetryCount) return false;
      if (LastError != other.LastError) return false;
      if (!object.Equals(DeliveredAt, other.DeliveredAt)) 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 (CorrelationId.Length != 0) hash ^= CorrelationId.GetHashCode();
      if (Found != false) hash ^= Found.GetHashCode();
      if (Status.Length != 0) hash ^= Status.GetHashCode();
      if (RetryCount != 0) hash ^= RetryCount.GetHashCode();
      if (LastError.Length != 0) hash ^= LastError.GetHashCode();
      if (deliveredAt_ != null) hash ^= DeliveredAt.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 (CorrelationId.Length != 0) {
        output.WriteRawTag(10);
        output.WriteString(CorrelationId);
      }
      if (Found != false) {
        output.WriteRawTag(16);
        output.WriteBool(Found);
      }
      if (Status.Length != 0) {
        output.WriteRawTag(26);
        output.WriteString(Status);
      }
      if (RetryCount != 0) {
        output.WriteRawTag(32);
        output.WriteInt32(RetryCount);
      }
      if (LastError.Length != 0) {
        output.WriteRawTag(42);
        output.WriteString(LastError);
      }
      if (deliveredAt_ != null) {
        output.WriteRawTag(50);
        output.WriteMessage(DeliveredAt);
      }
      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 (CorrelationId.Length != 0) {
        output.WriteRawTag(10);
        output.WriteString(CorrelationId);
      }
      if (Found != false) {
        output.WriteRawTag(16);
        output.WriteBool(Found);
      }
      if (Status.Length != 0) {
        output.WriteRawTag(26);
        output.WriteString(Status);
      }
      if (RetryCount != 0) {
        output.WriteRawTag(32);
        output.WriteInt32(RetryCount);
      }
      if (LastError.Length != 0) {
        output.WriteRawTag(42);
        output.WriteString(LastError);
      }
      if (deliveredAt_ != null) {
        output.WriteRawTag(50);
        output.WriteMessage(DeliveredAt);
      }
      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 (CorrelationId.Length != 0) {
        size += 1 + pb::CodedOutputStream.ComputeStringSize(CorrelationId);
      }
      if (Found != false) {
        size += 1 + 1;
      }
      if (Status.Length != 0) {
        size += 1 + pb::CodedOutputStream.ComputeStringSize(Status);
      }
      if (RetryCount != 0) {
        size += 1 + pb::CodedOutputStream.ComputeInt32Size(RetryCount);
      }
      if (LastError.Length != 0) {
        size += 1 + pb::CodedOutputStream.ComputeStringSize(LastError);
      }
      if (deliveredAt_ != null) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(DeliveredAt);
      }
      if (_unknownFields != null) {
        size += _unknownFields.CalculateSize();
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void MergeFrom(NotificationStatusResponseDto other) {
      if (other == null) {
        return;
      }
      if (other.CorrelationId.Length != 0) {
        CorrelationId = other.CorrelationId;
      }
      if (other.Found != false) {
        Found = other.Found;
      }
      if (other.Status.Length != 0) {
        Status = other.Status;
      }
      if (other.RetryCount != 0) {
        RetryCount = other.RetryCount;
      }
      if (other.LastError.Length != 0) {
        LastError = other.LastError;
      }
      if (other.deliveredAt_ != null) {
        if (deliveredAt_ == null) {
          DeliveredAt = new global::Google.Protobuf.WellKnownTypes.Timestamp();
        }
        DeliveredAt.MergeFrom(other.DeliveredAt);
      }
      _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: {
            CorrelationId = input.ReadString();
            break;
          }
          case 16: {
            Found = input.ReadBool();
            break;
          }
          case 26: {
            Status = input.ReadString();
            break;
          }
          case 32: {
            RetryCount = input.ReadInt32();
            break;
          }
          case 42: {
            LastError = input.ReadString();
            break;
          }
          case 50: {
            if (deliveredAt_ == null) {
              DeliveredAt = new global::Google.Protobuf.WellKnownTypes.Timestamp();
            }
            input.ReadMessage(DeliveredAt);
            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: {
            CorrelationId = input.ReadString();
            break;
          }
          case 16: {
            Found = input.ReadBool();
            break;
          }
          case 26: {
            Status = input.ReadString();
            break;
          }
          case 32: {
            RetryCount = input.ReadInt32();
            break;
          }
          case 42: {
            LastError = input.ReadString();
            break;
          }
          case 50: {
            if (deliveredAt_ == null) {
              DeliveredAt = new global::Google.Protobuf.WellKnownTypes.Timestamp();
            }
            input.ReadMessage(DeliveredAt);
            break;
          }
        }
      }
    }
    #endif

  }

  /// <summary>
  /// Site -> Central: the node's local deployed inventory at startup.
  /// </summary>
  [global::System.Diagnostics.DebuggerDisplayAttribute("{ToString(),nq}")]
  public sealed partial class ReconcileSiteRequestDto : pb::IMessage<ReconcileSiteRequestDto>
  #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      , pb::IBufferMessage
  #endif
  {
    private static readonly pb::MessageParser<ReconcileSiteRequestDto> _parser = new pb::MessageParser<ReconcileSiteRequestDto>(() => new ReconcileSiteRequestDto());
    private pb::UnknownFieldSet _unknownFields;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static pb::MessageParser<ReconcileSiteRequestDto> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::ZB.MOM.WW.ScadaBridge.Communication.Grpc.CentralControlReflection.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 ReconcileSiteRequestDto() {
      OnConstruction();
    }

    partial void OnConstruction();

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

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

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

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

    /// <summary>Field number for the "local_name_to_revision_hash" field.</summary>
    public const int LocalNameToRevisionHashFieldNumber = 3;
    private static readonly pbc::MapField<string, string>.Codec _map_localNameToRevisionHash_codec
        = new pbc::MapField<string, string>.Codec(pb::FieldCodec.ForString(10, ""), pb::FieldCodec.ForString(18, ""), 26);
    private readonly pbc::MapField<string, string> localNameToRevisionHash_ = new pbc::MapField<string, string>();
    /// <summary>
    /// Instance unique name -> revision hash of the config the node currently holds.
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public pbc::MapField<string, string> LocalNameToRevisionHash {
      get { return localNameToRevisionHash_; }
    }

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

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public bool Equals(ReconcileSiteRequestDto other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (SiteIdentifier != other.SiteIdentifier) return false;
      if (NodeId != other.NodeId) return false;
      if (!LocalNameToRevisionHash.Equals(other.LocalNameToRevisionHash)) 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 (SiteIdentifier.Length != 0) hash ^= SiteIdentifier.GetHashCode();
      if (NodeId.Length != 0) hash ^= NodeId.GetHashCode();
      hash ^= LocalNameToRevisionHash.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 (SiteIdentifier.Length != 0) {
        output.WriteRawTag(10);
        output.WriteString(SiteIdentifier);
      }
      if (NodeId.Length != 0) {
        output.WriteRawTag(18);
        output.WriteString(NodeId);
      }
      localNameToRevisionHash_.WriteTo(output, _map_localNameToRevisionHash_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 (SiteIdentifier.Length != 0) {
        output.WriteRawTag(10);
        output.WriteString(SiteIdentifier);
      }
      if (NodeId.Length != 0) {
        output.WriteRawTag(18);
        output.WriteString(NodeId);
      }
      localNameToRevisionHash_.WriteTo(ref output, _map_localNameToRevisionHash_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 (SiteIdentifier.Length != 0) {
        size += 1 + pb::CodedOutputStream.ComputeStringSize(SiteIdentifier);
      }
      if (NodeId.Length != 0) {
        size += 1 + pb::CodedOutputStream.ComputeStringSize(NodeId);
      }
      size += localNameToRevisionHash_.CalculateSize(_map_localNameToRevisionHash_codec);
      if (_unknownFields != null) {
        size += _unknownFields.CalculateSize();
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void MergeFrom(ReconcileSiteRequestDto other) {
      if (other == null) {
        return;
      }
      if (other.SiteIdentifier.Length != 0) {
        SiteIdentifier = other.SiteIdentifier;
      }
      if (other.NodeId.Length != 0) {
        NodeId = other.NodeId;
      }
      localNameToRevisionHash_.MergeFrom(other.localNameToRevisionHash_);
      _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: {
            SiteIdentifier = input.ReadString();
            break;
          }
          case 18: {
            NodeId = input.ReadString();
            break;
          }
          case 26: {
            localNameToRevisionHash_.AddEntriesFrom(input, _map_localNameToRevisionHash_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: {
            SiteIdentifier = input.ReadString();
            break;
          }
          case 18: {
            NodeId = input.ReadString();
            break;
          }
          case 26: {
            localNameToRevisionHash_.AddEntriesFrom(ref input, _map_localNameToRevisionHash_codec);
            break;
          }
        }
      }
    }
    #endif

  }

  /// <summary>
  /// Central -> Site: the gap the node must (re)fetch, plus orphans to log.
  /// </summary>
  [global::System.Diagnostics.DebuggerDisplayAttribute("{ToString(),nq}")]
  public sealed partial class ReconcileSiteResponseDto : pb::IMessage<ReconcileSiteResponseDto>
  #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      , pb::IBufferMessage
  #endif
  {
    private static readonly pb::MessageParser<ReconcileSiteResponseDto> _parser = new pb::MessageParser<ReconcileSiteResponseDto>(() => new ReconcileSiteResponseDto());
    private pb::UnknownFieldSet _unknownFields;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static pb::MessageParser<ReconcileSiteResponseDto> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::ZB.MOM.WW.ScadaBridge.Communication.Grpc.CentralControlReflection.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 ReconcileSiteResponseDto() {
      OnConstruction();
    }

    partial void OnConstruction();

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

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

    /// <summary>Field number for the "gap" field.</summary>
    public const int GapFieldNumber = 1;
    private static readonly pb::FieldCodec<global::ZB.MOM.WW.ScadaBridge.Communication.Grpc.ReconcileGapItemDto> _repeated_gap_codec
        = pb::FieldCodec.ForMessage(10, global::ZB.MOM.WW.ScadaBridge.Communication.Grpc.ReconcileGapItemDto.Parser);
    private readonly pbc::RepeatedField<global::ZB.MOM.WW.ScadaBridge.Communication.Grpc.ReconcileGapItemDto> gap_ = new pbc::RepeatedField<global::ZB.MOM.WW.ScadaBridge.Communication.Grpc.ReconcileGapItemDto>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public pbc::RepeatedField<global::ZB.MOM.WW.ScadaBridge.Communication.Grpc.ReconcileGapItemDto> Gap {
      get { return gap_; }
    }

    /// <summary>Field number for the "orphan_names" field.</summary>
    public const int OrphanNamesFieldNumber = 2;
    private static readonly pb::FieldCodec<string> _repeated_orphanNames_codec
        = pb::FieldCodec.ForString(18);
    private readonly pbc::RepeatedField<string> orphanNames_ = new pbc::RepeatedField<string>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public pbc::RepeatedField<string> OrphanNames {
      get { return orphanNames_; }
    }

    /// <summary>Field number for the "central_fetch_base_url" field.</summary>
    public const int CentralFetchBaseUrlFieldNumber = 3;
    private string centralFetchBaseUrl_ = "";
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public string CentralFetchBaseUrl {
      get { return centralFetchBaseUrl_; }
      set {
        centralFetchBaseUrl_ = 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 ReconcileSiteResponseDto);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public bool Equals(ReconcileSiteResponseDto other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if(!gap_.Equals(other.gap_)) return false;
      if(!orphanNames_.Equals(other.orphanNames_)) return false;
      if (CentralFetchBaseUrl != other.CentralFetchBaseUrl) 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 ^= gap_.GetHashCode();
      hash ^= orphanNames_.GetHashCode();
      if (CentralFetchBaseUrl.Length != 0) hash ^= CentralFetchBaseUrl.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
      gap_.WriteTo(output, _repeated_gap_codec);
      orphanNames_.WriteTo(output, _repeated_orphanNames_codec);
      if (CentralFetchBaseUrl.Length != 0) {
        output.WriteRawTag(26);
        output.WriteString(CentralFetchBaseUrl);
      }
      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) {
      gap_.WriteTo(ref output, _repeated_gap_codec);
      orphanNames_.WriteTo(ref output, _repeated_orphanNames_codec);
      if (CentralFetchBaseUrl.Length != 0) {
        output.WriteRawTag(26);
        output.WriteString(CentralFetchBaseUrl);
      }
      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 += gap_.CalculateSize(_repeated_gap_codec);
      size += orphanNames_.CalculateSize(_repeated_orphanNames_codec);
      if (CentralFetchBaseUrl.Length != 0) {
        size += 1 + pb::CodedOutputStream.ComputeStringSize(CentralFetchBaseUrl);
      }
      if (_unknownFields != null) {
        size += _unknownFields.CalculateSize();
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void MergeFrom(ReconcileSiteResponseDto other) {
      if (other == null) {
        return;
      }
      gap_.Add(other.gap_);
      orphanNames_.Add(other.orphanNames_);
      if (other.CentralFetchBaseUrl.Length != 0) {
        CentralFetchBaseUrl = other.CentralFetchBaseUrl;
      }
      _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: {
            gap_.AddEntriesFrom(input, _repeated_gap_codec);
            break;
          }
          case 18: {
            orphanNames_.AddEntriesFrom(input, _repeated_orphanNames_codec);
            break;
          }
          case 26: {
            CentralFetchBaseUrl = 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: {
            gap_.AddEntriesFrom(ref input, _repeated_gap_codec);
            break;
          }
          case 18: {
            orphanNames_.AddEntriesFrom(ref input, _repeated_orphanNames_codec);
            break;
          }
          case 26: {
            CentralFetchBaseUrl = input.ReadString();
            break;
          }
        }
      }
    }
    #endif

  }

  /// <summary>
  /// One instance the node must (re)fetch, with a freshly-minted short-TTL token.
  /// </summary>
  [global::System.Diagnostics.DebuggerDisplayAttribute("{ToString(),nq}")]
  public sealed partial class ReconcileGapItemDto : pb::IMessage<ReconcileGapItemDto>
  #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      , pb::IBufferMessage
  #endif
  {
    private static readonly pb::MessageParser<ReconcileGapItemDto> _parser = new pb::MessageParser<ReconcileGapItemDto>(() => new ReconcileGapItemDto());
    private pb::UnknownFieldSet _unknownFields;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static pb::MessageParser<ReconcileGapItemDto> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::ZB.MOM.WW.ScadaBridge.Communication.Grpc.CentralControlReflection.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 ReconcileGapItemDto() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public ReconcileGapItemDto(ReconcileGapItemDto other) : this() {
      instanceUniqueName_ = other.instanceUniqueName_;
      deploymentId_ = other.deploymentId_;
      revisionHash_ = other.revisionHash_;
      isEnabled_ = other.isEnabled_;
      fetchToken_ = other.fetchToken_;
      _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
    }

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

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

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

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

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

    /// <summary>Field number for the "fetch_token" field.</summary>
    public const int FetchTokenFieldNumber = 5;
    private string fetchToken_ = "";
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public string FetchToken {
      get { return fetchToken_; }
      set {
        fetchToken_ = 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 ReconcileGapItemDto);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public bool Equals(ReconcileGapItemDto other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (InstanceUniqueName != other.InstanceUniqueName) return false;
      if (DeploymentId != other.DeploymentId) return false;
      if (RevisionHash != other.RevisionHash) return false;
      if (IsEnabled != other.IsEnabled) return false;
      if (FetchToken != other.FetchToken) 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 (InstanceUniqueName.Length != 0) hash ^= InstanceUniqueName.GetHashCode();
      if (DeploymentId.Length != 0) hash ^= DeploymentId.GetHashCode();
      if (RevisionHash.Length != 0) hash ^= RevisionHash.GetHashCode();
      if (IsEnabled != false) hash ^= IsEnabled.GetHashCode();
      if (FetchToken.Length != 0) hash ^= FetchToken.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 (InstanceUniqueName.Length != 0) {
        output.WriteRawTag(10);
        output.WriteString(InstanceUniqueName);
      }
      if (DeploymentId.Length != 0) {
        output.WriteRawTag(18);
        output.WriteString(DeploymentId);
      }
      if (RevisionHash.Length != 0) {
        output.WriteRawTag(26);
        output.WriteString(RevisionHash);
      }
      if (IsEnabled != false) {
        output.WriteRawTag(32);
        output.WriteBool(IsEnabled);
      }
      if (FetchToken.Length != 0) {
        output.WriteRawTag(42);
        output.WriteString(FetchToken);
      }
      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 (InstanceUniqueName.Length != 0) {
        output.WriteRawTag(10);
        output.WriteString(InstanceUniqueName);
      }
      if (DeploymentId.Length != 0) {
        output.WriteRawTag(18);
        output.WriteString(DeploymentId);
      }
      if (RevisionHash.Length != 0) {
        output.WriteRawTag(26);
        output.WriteString(RevisionHash);
      }
      if (IsEnabled != false) {
        output.WriteRawTag(32);
        output.WriteBool(IsEnabled);
      }
      if (FetchToken.Length != 0) {
        output.WriteRawTag(42);
        output.WriteString(FetchToken);
      }
      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 (InstanceUniqueName.Length != 0) {
        size += 1 + pb::CodedOutputStream.ComputeStringSize(InstanceUniqueName);
      }
      if (DeploymentId.Length != 0) {
        size += 1 + pb::CodedOutputStream.ComputeStringSize(DeploymentId);
      }
      if (RevisionHash.Length != 0) {
        size += 1 + pb::CodedOutputStream.ComputeStringSize(RevisionHash);
      }
      if (IsEnabled != false) {
        size += 1 + 1;
      }
      if (FetchToken.Length != 0) {
        size += 1 + pb::CodedOutputStream.ComputeStringSize(FetchToken);
      }
      if (_unknownFields != null) {
        size += _unknownFields.CalculateSize();
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void MergeFrom(ReconcileGapItemDto other) {
      if (other == null) {
        return;
      }
      if (other.InstanceUniqueName.Length != 0) {
        InstanceUniqueName = other.InstanceUniqueName;
      }
      if (other.DeploymentId.Length != 0) {
        DeploymentId = other.DeploymentId;
      }
      if (other.RevisionHash.Length != 0) {
        RevisionHash = other.RevisionHash;
      }
      if (other.IsEnabled != false) {
        IsEnabled = other.IsEnabled;
      }
      if (other.FetchToken.Length != 0) {
        FetchToken = other.FetchToken;
      }
      _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: {
            InstanceUniqueName = input.ReadString();
            break;
          }
          case 18: {
            DeploymentId = input.ReadString();
            break;
          }
          case 26: {
            RevisionHash = input.ReadString();
            break;
          }
          case 32: {
            IsEnabled = input.ReadBool();
            break;
          }
          case 42: {
            FetchToken = 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: {
            InstanceUniqueName = input.ReadString();
            break;
          }
          case 18: {
            DeploymentId = input.ReadString();
            break;
          }
          case 26: {
            RevisionHash = input.ReadString();
            break;
          }
          case 32: {
            IsEnabled = input.ReadBool();
            break;
          }
          case 42: {
            FetchToken = input.ReadString();
            break;
          }
        }
      }
    }
    #endif

  }

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

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::ZB.MOM.WW.ScadaBridge.Communication.Grpc.CentralControlReflection.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 TagResolutionStatusDto() {
      OnConstruction();
    }

    partial void OnConstruction();

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

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

    /// <summary>Field number for the "total_subscribed" field.</summary>
    public const int TotalSubscribedFieldNumber = 1;
    private int totalSubscribed_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public int TotalSubscribed {
      get { return totalSubscribed_; }
      set {
        totalSubscribed_ = value;
      }
    }

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

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

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public bool Equals(TagResolutionStatusDto other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (TotalSubscribed != other.TotalSubscribed) return false;
      if (SuccessfullyResolved != other.SuccessfullyResolved) 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 (TotalSubscribed != 0) hash ^= TotalSubscribed.GetHashCode();
      if (SuccessfullyResolved != 0) hash ^= SuccessfullyResolved.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 (TotalSubscribed != 0) {
        output.WriteRawTag(8);
        output.WriteInt32(TotalSubscribed);
      }
      if (SuccessfullyResolved != 0) {
        output.WriteRawTag(16);
        output.WriteInt32(SuccessfullyResolved);
      }
      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 (TotalSubscribed != 0) {
        output.WriteRawTag(8);
        output.WriteInt32(TotalSubscribed);
      }
      if (SuccessfullyResolved != 0) {
        output.WriteRawTag(16);
        output.WriteInt32(SuccessfullyResolved);
      }
      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 (TotalSubscribed != 0) {
        size += 1 + pb::CodedOutputStream.ComputeInt32Size(TotalSubscribed);
      }
      if (SuccessfullyResolved != 0) {
        size += 1 + pb::CodedOutputStream.ComputeInt32Size(SuccessfullyResolved);
      }
      if (_unknownFields != null) {
        size += _unknownFields.CalculateSize();
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void MergeFrom(TagResolutionStatusDto other) {
      if (other == null) {
        return;
      }
      if (other.TotalSubscribed != 0) {
        TotalSubscribed = other.TotalSubscribed;
      }
      if (other.SuccessfullyResolved != 0) {
        SuccessfullyResolved = other.SuccessfullyResolved;
      }
      _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: {
            TotalSubscribed = input.ReadInt32();
            break;
          }
          case 16: {
            SuccessfullyResolved = input.ReadInt32();
            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: {
            TotalSubscribed = input.ReadInt32();
            break;
          }
          case 16: {
            SuccessfullyResolved = input.ReadInt32();
            break;
          }
        }
      }
    }
    #endif

  }

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

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::ZB.MOM.WW.ScadaBridge.Communication.Grpc.CentralControlReflection.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 TagQualityCountsDto() {
      OnConstruction();
    }

    partial void OnConstruction();

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

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

    /// <summary>Field number for the "good" field.</summary>
    public const int GoodFieldNumber = 1;
    private int good_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public int Good {
      get { return good_; }
      set {
        good_ = value;
      }
    }

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

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

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

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public bool Equals(TagQualityCountsDto other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (Good != other.Good) return false;
      if (Bad != other.Bad) return false;
      if (Uncertain != other.Uncertain) 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 (Good != 0) hash ^= Good.GetHashCode();
      if (Bad != 0) hash ^= Bad.GetHashCode();
      if (Uncertain != 0) hash ^= Uncertain.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 (Good != 0) {
        output.WriteRawTag(8);
        output.WriteInt32(Good);
      }
      if (Bad != 0) {
        output.WriteRawTag(16);
        output.WriteInt32(Bad);
      }
      if (Uncertain != 0) {
        output.WriteRawTag(24);
        output.WriteInt32(Uncertain);
      }
      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 (Good != 0) {
        output.WriteRawTag(8);
        output.WriteInt32(Good);
      }
      if (Bad != 0) {
        output.WriteRawTag(16);
        output.WriteInt32(Bad);
      }
      if (Uncertain != 0) {
        output.WriteRawTag(24);
        output.WriteInt32(Uncertain);
      }
      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 (Good != 0) {
        size += 1 + pb::CodedOutputStream.ComputeInt32Size(Good);
      }
      if (Bad != 0) {
        size += 1 + pb::CodedOutputStream.ComputeInt32Size(Bad);
      }
      if (Uncertain != 0) {
        size += 1 + pb::CodedOutputStream.ComputeInt32Size(Uncertain);
      }
      if (_unknownFields != null) {
        size += _unknownFields.CalculateSize();
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void MergeFrom(TagQualityCountsDto other) {
      if (other == null) {
        return;
      }
      if (other.Good != 0) {
        Good = other.Good;
      }
      if (other.Bad != 0) {
        Bad = other.Bad;
      }
      if (other.Uncertain != 0) {
        Uncertain = other.Uncertain;
      }
      _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: {
            Good = input.ReadInt32();
            break;
          }
          case 16: {
            Bad = input.ReadInt32();
            break;
          }
          case 24: {
            Uncertain = input.ReadInt32();
            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: {
            Good = input.ReadInt32();
            break;
          }
          case 16: {
            Bad = input.ReadInt32();
            break;
          }
          case 24: {
            Uncertain = input.ReadInt32();
            break;
          }
        }
      }
    }
    #endif

  }

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

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::ZB.MOM.WW.ScadaBridge.Communication.Grpc.CentralControlReflection.Descriptor.MessageTypes[9]; }
    }

    [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 NodeStatusDto() {
      OnConstruction();
    }

    partial void OnConstruction();

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

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

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

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

    /// <summary>Field number for the "role" field.</summary>
    public const int RoleFieldNumber = 3;
    private string role_ = "";
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public string Role {
      get { return role_; }
      set {
        role_ = 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 NodeStatusDto);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public bool Equals(NodeStatusDto other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (Hostname != other.Hostname) return false;
      if (IsOnline != other.IsOnline) return false;
      if (Role != other.Role) 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 (Hostname.Length != 0) hash ^= Hostname.GetHashCode();
      if (IsOnline != false) hash ^= IsOnline.GetHashCode();
      if (Role.Length != 0) hash ^= Role.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 (Hostname.Length != 0) {
        output.WriteRawTag(10);
        output.WriteString(Hostname);
      }
      if (IsOnline != false) {
        output.WriteRawTag(16);
        output.WriteBool(IsOnline);
      }
      if (Role.Length != 0) {
        output.WriteRawTag(26);
        output.WriteString(Role);
      }
      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 (Hostname.Length != 0) {
        output.WriteRawTag(10);
        output.WriteString(Hostname);
      }
      if (IsOnline != false) {
        output.WriteRawTag(16);
        output.WriteBool(IsOnline);
      }
      if (Role.Length != 0) {
        output.WriteRawTag(26);
        output.WriteString(Role);
      }
      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 (Hostname.Length != 0) {
        size += 1 + pb::CodedOutputStream.ComputeStringSize(Hostname);
      }
      if (IsOnline != false) {
        size += 1 + 1;
      }
      if (Role.Length != 0) {
        size += 1 + pb::CodedOutputStream.ComputeStringSize(Role);
      }
      if (_unknownFields != null) {
        size += _unknownFields.CalculateSize();
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void MergeFrom(NodeStatusDto other) {
      if (other == null) {
        return;
      }
      if (other.Hostname.Length != 0) {
        Hostname = other.Hostname;
      }
      if (other.IsOnline != false) {
        IsOnline = other.IsOnline;
      }
      if (other.Role.Length != 0) {
        Role = other.Role;
      }
      _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: {
            Hostname = input.ReadString();
            break;
          }
          case 16: {
            IsOnline = input.ReadBool();
            break;
          }
          case 26: {
            Role = 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: {
            Hostname = input.ReadString();
            break;
          }
          case 16: {
            IsOnline = input.ReadBool();
            break;
          }
          case 26: {
            Role = input.ReadString();
            break;
          }
        }
      }
    }
    #endif

  }

  /// <summary>
  /// Point-in-time snapshot of the site-local SQLite audit queue.
  /// </summary>
  [global::System.Diagnostics.DebuggerDisplayAttribute("{ToString(),nq}")]
  public sealed partial class SiteAuditBacklogSnapshotDto : pb::IMessage<SiteAuditBacklogSnapshotDto>
  #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      , pb::IBufferMessage
  #endif
  {
    private static readonly pb::MessageParser<SiteAuditBacklogSnapshotDto> _parser = new pb::MessageParser<SiteAuditBacklogSnapshotDto>(() => new SiteAuditBacklogSnapshotDto());
    private pb::UnknownFieldSet _unknownFields;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static pb::MessageParser<SiteAuditBacklogSnapshotDto> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::ZB.MOM.WW.ScadaBridge.Communication.Grpc.CentralControlReflection.Descriptor.MessageTypes[10]; }
    }

    [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 SiteAuditBacklogSnapshotDto() {
      OnConstruction();
    }

    partial void OnConstruction();

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

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

    /// <summary>Field number for the "pending_count" field.</summary>
    public const int PendingCountFieldNumber = 1;
    private int pendingCount_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public int PendingCount {
      get { return pendingCount_; }
      set {
        pendingCount_ = value;
      }
    }

    /// <summary>Field number for the "oldest_pending_utc" field.</summary>
    public const int OldestPendingUtcFieldNumber = 2;
    private global::Google.Protobuf.WellKnownTypes.Timestamp oldestPendingUtc_;
    /// <summary>
    /// absent when the queue is empty
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public global::Google.Protobuf.WellKnownTypes.Timestamp OldestPendingUtc {
      get { return oldestPendingUtc_; }
      set {
        oldestPendingUtc_ = value;
      }
    }

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

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

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public bool Equals(SiteAuditBacklogSnapshotDto other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (PendingCount != other.PendingCount) return false;
      if (!object.Equals(OldestPendingUtc, other.OldestPendingUtc)) return false;
      if (OnDiskBytes != other.OnDiskBytes) 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 (PendingCount != 0) hash ^= PendingCount.GetHashCode();
      if (oldestPendingUtc_ != null) hash ^= OldestPendingUtc.GetHashCode();
      if (OnDiskBytes != 0L) hash ^= OnDiskBytes.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 (PendingCount != 0) {
        output.WriteRawTag(8);
        output.WriteInt32(PendingCount);
      }
      if (oldestPendingUtc_ != null) {
        output.WriteRawTag(18);
        output.WriteMessage(OldestPendingUtc);
      }
      if (OnDiskBytes != 0L) {
        output.WriteRawTag(24);
        output.WriteInt64(OnDiskBytes);
      }
      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 (PendingCount != 0) {
        output.WriteRawTag(8);
        output.WriteInt32(PendingCount);
      }
      if (oldestPendingUtc_ != null) {
        output.WriteRawTag(18);
        output.WriteMessage(OldestPendingUtc);
      }
      if (OnDiskBytes != 0L) {
        output.WriteRawTag(24);
        output.WriteInt64(OnDiskBytes);
      }
      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 (PendingCount != 0) {
        size += 1 + pb::CodedOutputStream.ComputeInt32Size(PendingCount);
      }
      if (oldestPendingUtc_ != null) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(OldestPendingUtc);
      }
      if (OnDiskBytes != 0L) {
        size += 1 + pb::CodedOutputStream.ComputeInt64Size(OnDiskBytes);
      }
      if (_unknownFields != null) {
        size += _unknownFields.CalculateSize();
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void MergeFrom(SiteAuditBacklogSnapshotDto other) {
      if (other == null) {
        return;
      }
      if (other.PendingCount != 0) {
        PendingCount = other.PendingCount;
      }
      if (other.oldestPendingUtc_ != null) {
        if (oldestPendingUtc_ == null) {
          OldestPendingUtc = new global::Google.Protobuf.WellKnownTypes.Timestamp();
        }
        OldestPendingUtc.MergeFrom(other.OldestPendingUtc);
      }
      if (other.OnDiskBytes != 0L) {
        OnDiskBytes = other.OnDiskBytes;
      }
      _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: {
            PendingCount = input.ReadInt32();
            break;
          }
          case 18: {
            if (oldestPendingUtc_ == null) {
              OldestPendingUtc = new global::Google.Protobuf.WellKnownTypes.Timestamp();
            }
            input.ReadMessage(OldestPendingUtc);
            break;
          }
          case 24: {
            OnDiskBytes = input.ReadInt64();
            break;
          }
        }
      }
    #endif
    }

    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
      if ((tag & 7) == 4) {
        // Abort on any end group tag.
        return;
      }
      switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input);
            break;
          case 8: {
            PendingCount = input.ReadInt32();
            break;
          }
          case 18: {
            if (oldestPendingUtc_ == null) {
              OldestPendingUtc = new global::Google.Protobuf.WellKnownTypes.Timestamp();
            }
            input.ReadMessage(OldestPendingUtc);
            break;
          }
          case 24: {
            OnDiskBytes = input.ReadInt64();
            break;
          }
        }
      }
    }
    #endif

  }

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

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::ZB.MOM.WW.ScadaBridge.Communication.Grpc.CentralControlReflection.Descriptor.MessageTypes[11]; }
    }

    [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 ConnectionEndpointMapDto() {
      OnConstruction();
    }

    partial void OnConstruction();

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

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

    /// <summary>Field number for the "entries" field.</summary>
    public const int EntriesFieldNumber = 1;
    private static readonly pbc::MapField<string, string>.Codec _map_entries_codec
        = new pbc::MapField<string, string>.Codec(pb::FieldCodec.ForString(10, ""), pb::FieldCodec.ForString(18, ""), 10);
    private readonly pbc::MapField<string, string> entries_ = new pbc::MapField<string, string>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public pbc::MapField<string, string> Entries {
      get { return entries_; }
    }

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

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public bool Equals(ConnectionEndpointMapDto other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (!Entries.Equals(other.Entries)) 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 ^= Entries.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
      entries_.WriteTo(output, _map_entries_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) {
      entries_.WriteTo(ref output, _map_entries_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 += entries_.CalculateSize(_map_entries_codec);
      if (_unknownFields != null) {
        size += _unknownFields.CalculateSize();
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void MergeFrom(ConnectionEndpointMapDto other) {
      if (other == null) {
        return;
      }
      entries_.MergeFrom(other.entries_);
      _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: {
            entries_.AddEntriesFrom(input, _map_entries_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: {
            entries_.AddEntriesFrom(ref input, _map_entries_codec);
            break;
          }
        }
      }
    }
    #endif

  }

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

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::ZB.MOM.WW.ScadaBridge.Communication.Grpc.CentralControlReflection.Descriptor.MessageTypes[12]; }
    }

    [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 TagQualityMapDto() {
      OnConstruction();
    }

    partial void OnConstruction();

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

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

    /// <summary>Field number for the "entries" field.</summary>
    public const int EntriesFieldNumber = 1;
    private static readonly pbc::MapField<string, global::ZB.MOM.WW.ScadaBridge.Communication.Grpc.TagQualityCountsDto>.Codec _map_entries_codec
        = new pbc::MapField<string, global::ZB.MOM.WW.ScadaBridge.Communication.Grpc.TagQualityCountsDto>.Codec(pb::FieldCodec.ForString(10, ""), pb::FieldCodec.ForMessage(18, global::ZB.MOM.WW.ScadaBridge.Communication.Grpc.TagQualityCountsDto.Parser), 10);
    private readonly pbc::MapField<string, global::ZB.MOM.WW.ScadaBridge.Communication.Grpc.TagQualityCountsDto> entries_ = new pbc::MapField<string, global::ZB.MOM.WW.ScadaBridge.Communication.Grpc.TagQualityCountsDto>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public pbc::MapField<string, global::ZB.MOM.WW.ScadaBridge.Communication.Grpc.TagQualityCountsDto> Entries {
      get { return entries_; }
    }

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

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public bool Equals(TagQualityMapDto other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (!Entries.Equals(other.Entries)) 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 ^= Entries.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
      entries_.WriteTo(output, _map_entries_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) {
      entries_.WriteTo(ref output, _map_entries_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 += entries_.CalculateSize(_map_entries_codec);
      if (_unknownFields != null) {
        size += _unknownFields.CalculateSize();
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void MergeFrom(TagQualityMapDto other) {
      if (other == null) {
        return;
      }
      entries_.MergeFrom(other.entries_);
      _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: {
            entries_.AddEntriesFrom(input, _map_entries_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: {
            entries_.AddEntriesFrom(ref input, _map_entries_codec);
            break;
          }
        }
      }
    }
    #endif

  }

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

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::ZB.MOM.WW.ScadaBridge.Communication.Grpc.CentralControlReflection.Descriptor.MessageTypes[13]; }
    }

    [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 NodeStatusListDto() {
      OnConstruction();
    }

    partial void OnConstruction();

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

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

    /// <summary>Field number for the "nodes" field.</summary>
    public const int NodesFieldNumber = 1;
    private static readonly pb::FieldCodec<global::ZB.MOM.WW.ScadaBridge.Communication.Grpc.NodeStatusDto> _repeated_nodes_codec
        = pb::FieldCodec.ForMessage(10, global::ZB.MOM.WW.ScadaBridge.Communication.Grpc.NodeStatusDto.Parser);
    private readonly pbc::RepeatedField<global::ZB.MOM.WW.ScadaBridge.Communication.Grpc.NodeStatusDto> nodes_ = new pbc::RepeatedField<global::ZB.MOM.WW.ScadaBridge.Communication.Grpc.NodeStatusDto>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public pbc::RepeatedField<global::ZB.MOM.WW.ScadaBridge.Communication.Grpc.NodeStatusDto> Nodes {
      get { return nodes_; }
    }

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

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

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void MergeFrom(NodeStatusListDto other) {
      if (other == null) {
        return;
      }
      nodes_.Add(other.nodes_);
      _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: {
            nodes_.AddEntriesFrom(input, _repeated_nodes_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: {
            nodes_.AddEntriesFrom(ref input, _repeated_nodes_codec);
            break;
          }
        }
      }
    }
    #endif

  }

  /// <summary>
  /// Site -> Central: periodic site health report. Mirrors Commons SiteHealthReport.
  /// Additive-only evolution: field numbers are never reused.
  /// </summary>
  [global::System.Diagnostics.DebuggerDisplayAttribute("{ToString(),nq}")]
  public sealed partial class SiteHealthReportDto : pb::IMessage<SiteHealthReportDto>
  #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      , pb::IBufferMessage
  #endif
  {
    private static readonly pb::MessageParser<SiteHealthReportDto> _parser = new pb::MessageParser<SiteHealthReportDto>(() => new SiteHealthReportDto());
    private pb::UnknownFieldSet _unknownFields;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static pb::MessageParser<SiteHealthReportDto> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::ZB.MOM.WW.ScadaBridge.Communication.Grpc.CentralControlReflection.Descriptor.MessageTypes[14]; }
    }

    [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 SiteHealthReportDto() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public SiteHealthReportDto(SiteHealthReportDto other) : this() {
      siteId_ = other.siteId_;
      sequenceNumber_ = other.sequenceNumber_;
      reportTimestamp_ = other.reportTimestamp_ != null ? other.reportTimestamp_.Clone() : null;
      dataConnectionStatuses_ = other.dataConnectionStatuses_.Clone();
      tagResolutionCounts_ = other.tagResolutionCounts_.Clone();
      scriptErrorCount_ = other.scriptErrorCount_;
      alarmEvaluationErrorCount_ = other.alarmEvaluationErrorCount_;
      storeAndForwardBufferDepths_ = other.storeAndForwardBufferDepths_.Clone();
      deadLetterCount_ = other.deadLetterCount_;
      deployedInstanceCount_ = other.deployedInstanceCount_;
      enabledInstanceCount_ = other.enabledInstanceCount_;
      disabledInstanceCount_ = other.disabledInstanceCount_;
      nodeRole_ = other.nodeRole_;
      nodeHostname_ = other.nodeHostname_;
      dataConnectionEndpoints_ = other.dataConnectionEndpoints_ != null ? other.dataConnectionEndpoints_.Clone() : null;
      dataConnectionTagQuality_ = other.dataConnectionTagQuality_ != null ? other.dataConnectionTagQuality_.Clone() : null;
      parkedMessageCount_ = other.parkedMessageCount_;
      clusterNodes_ = other.clusterNodes_ != null ? other.clusterNodes_.Clone() : null;
      siteAuditWriteFailures_ = other.siteAuditWriteFailures_;
      auditRedactionFailure_ = other.auditRedactionFailure_;
      siteAuditBacklog_ = other.siteAuditBacklog_ != null ? other.siteAuditBacklog_.Clone() : null;
      siteEventLogWriteFailures_ = other.siteEventLogWriteFailures_;
      OldestParkedMessageAgeSeconds = other.OldestParkedMessageAgeSeconds;
      scriptQueueDepth_ = other.scriptQueueDepth_;
      scriptBusyThreads_ = other.scriptBusyThreads_;
      ScriptOldestBusyAgeSeconds = other.ScriptOldestBusyAgeSeconds;
      LocalDbReplicationConnected = other.LocalDbReplicationConnected;
      LocalDbOplogBacklog = other.LocalDbOplogBacklog;
      _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
    }

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

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

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

    /// <summary>Field number for the "report_timestamp" field.</summary>
    public const int ReportTimestampFieldNumber = 3;
    private global::Google.Protobuf.WellKnownTypes.Timestamp reportTimestamp_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public global::Google.Protobuf.WellKnownTypes.Timestamp ReportTimestamp {
      get { return reportTimestamp_; }
      set {
        reportTimestamp_ = value;
      }
    }

    /// <summary>Field number for the "data_connection_statuses" field.</summary>
    public const int DataConnectionStatusesFieldNumber = 4;
    private static readonly pbc::MapField<string, global::ZB.MOM.WW.ScadaBridge.Communication.Grpc.ConnectionHealthEnum>.Codec _map_dataConnectionStatuses_codec
        = new pbc::MapField<string, global::ZB.MOM.WW.ScadaBridge.Communication.Grpc.ConnectionHealthEnum>.Codec(pb::FieldCodec.ForString(10, ""), pb::FieldCodec.ForEnum(16, x => (int) x, x => (global::ZB.MOM.WW.ScadaBridge.Communication.Grpc.ConnectionHealthEnum) x, global::ZB.MOM.WW.ScadaBridge.Communication.Grpc.ConnectionHealthEnum.ConnectionHealthUnspecified), 34);
    private readonly pbc::MapField<string, global::ZB.MOM.WW.ScadaBridge.Communication.Grpc.ConnectionHealthEnum> dataConnectionStatuses_ = new pbc::MapField<string, global::ZB.MOM.WW.ScadaBridge.Communication.Grpc.ConnectionHealthEnum>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public pbc::MapField<string, global::ZB.MOM.WW.ScadaBridge.Communication.Grpc.ConnectionHealthEnum> DataConnectionStatuses {
      get { return dataConnectionStatuses_; }
    }

    /// <summary>Field number for the "tag_resolution_counts" field.</summary>
    public const int TagResolutionCountsFieldNumber = 5;
    private static readonly pbc::MapField<string, global::ZB.MOM.WW.ScadaBridge.Communication.Grpc.TagResolutionStatusDto>.Codec _map_tagResolutionCounts_codec
        = new pbc::MapField<string, global::ZB.MOM.WW.ScadaBridge.Communication.Grpc.TagResolutionStatusDto>.Codec(pb::FieldCodec.ForString(10, ""), pb::FieldCodec.ForMessage(18, global::ZB.MOM.WW.ScadaBridge.Communication.Grpc.TagResolutionStatusDto.Parser), 42);
    private readonly pbc::MapField<string, global::ZB.MOM.WW.ScadaBridge.Communication.Grpc.TagResolutionStatusDto> tagResolutionCounts_ = new pbc::MapField<string, global::ZB.MOM.WW.ScadaBridge.Communication.Grpc.TagResolutionStatusDto>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public pbc::MapField<string, global::ZB.MOM.WW.ScadaBridge.Communication.Grpc.TagResolutionStatusDto> TagResolutionCounts {
      get { return tagResolutionCounts_; }
    }

    /// <summary>Field number for the "script_error_count" field.</summary>
    public const int ScriptErrorCountFieldNumber = 6;
    private int scriptErrorCount_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public int ScriptErrorCount {
      get { return scriptErrorCount_; }
      set {
        scriptErrorCount_ = value;
      }
    }

    /// <summary>Field number for the "alarm_evaluation_error_count" field.</summary>
    public const int AlarmEvaluationErrorCountFieldNumber = 7;
    private int alarmEvaluationErrorCount_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public int AlarmEvaluationErrorCount {
      get { return alarmEvaluationErrorCount_; }
      set {
        alarmEvaluationErrorCount_ = value;
      }
    }

    /// <summary>Field number for the "store_and_forward_buffer_depths" field.</summary>
    public const int StoreAndForwardBufferDepthsFieldNumber = 8;
    private static readonly pbc::MapField<string, int>.Codec _map_storeAndForwardBufferDepths_codec
        = new pbc::MapField<string, int>.Codec(pb::FieldCodec.ForString(10, ""), pb::FieldCodec.ForInt32(16, 0), 66);
    private readonly pbc::MapField<string, int> storeAndForwardBufferDepths_ = new pbc::MapField<string, int>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public pbc::MapField<string, int> StoreAndForwardBufferDepths {
      get { return storeAndForwardBufferDepths_; }
    }

    /// <summary>Field number for the "dead_letter_count" field.</summary>
    public const int DeadLetterCountFieldNumber = 9;
    private int deadLetterCount_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public int DeadLetterCount {
      get { return deadLetterCount_; }
      set {
        deadLetterCount_ = value;
      }
    }

    /// <summary>Field number for the "deployed_instance_count" field.</summary>
    public const int DeployedInstanceCountFieldNumber = 10;
    private int deployedInstanceCount_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public int DeployedInstanceCount {
      get { return deployedInstanceCount_; }
      set {
        deployedInstanceCount_ = value;
      }
    }

    /// <summary>Field number for the "enabled_instance_count" field.</summary>
    public const int EnabledInstanceCountFieldNumber = 11;
    private int enabledInstanceCount_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public int EnabledInstanceCount {
      get { return enabledInstanceCount_; }
      set {
        enabledInstanceCount_ = value;
      }
    }

    /// <summary>Field number for the "disabled_instance_count" field.</summary>
    public const int DisabledInstanceCountFieldNumber = 12;
    private int disabledInstanceCount_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public int DisabledInstanceCount {
      get { return disabledInstanceCount_; }
      set {
        disabledInstanceCount_ = value;
      }
    }

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

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

    /// <summary>Field number for the "data_connection_endpoints" field.</summary>
    public const int DataConnectionEndpointsFieldNumber = 15;
    private global::ZB.MOM.WW.ScadaBridge.Communication.Grpc.ConnectionEndpointMapDto dataConnectionEndpoints_;
    /// <summary>
    /// absent when null
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public global::ZB.MOM.WW.ScadaBridge.Communication.Grpc.ConnectionEndpointMapDto DataConnectionEndpoints {
      get { return dataConnectionEndpoints_; }
      set {
        dataConnectionEndpoints_ = value;
      }
    }

    /// <summary>Field number for the "data_connection_tag_quality" field.</summary>
    public const int DataConnectionTagQualityFieldNumber = 16;
    private global::ZB.MOM.WW.ScadaBridge.Communication.Grpc.TagQualityMapDto dataConnectionTagQuality_;
    /// <summary>
    /// absent when null
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public global::ZB.MOM.WW.ScadaBridge.Communication.Grpc.TagQualityMapDto DataConnectionTagQuality {
      get { return dataConnectionTagQuality_; }
      set {
        dataConnectionTagQuality_ = value;
      }
    }

    /// <summary>Field number for the "parked_message_count" field.</summary>
    public const int ParkedMessageCountFieldNumber = 17;
    private int parkedMessageCount_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public int ParkedMessageCount {
      get { return parkedMessageCount_; }
      set {
        parkedMessageCount_ = value;
      }
    }

    /// <summary>Field number for the "cluster_nodes" field.</summary>
    public const int ClusterNodesFieldNumber = 18;
    private global::ZB.MOM.WW.ScadaBridge.Communication.Grpc.NodeStatusListDto clusterNodes_;
    /// <summary>
    /// absent when null
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public global::ZB.MOM.WW.ScadaBridge.Communication.Grpc.NodeStatusListDto ClusterNodes {
      get { return clusterNodes_; }
      set {
        clusterNodes_ = value;
      }
    }

    /// <summary>Field number for the "site_audit_write_failures" field.</summary>
    public const int SiteAuditWriteFailuresFieldNumber = 19;
    private int siteAuditWriteFailures_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public int SiteAuditWriteFailures {
      get { return siteAuditWriteFailures_; }
      set {
        siteAuditWriteFailures_ = value;
      }
    }

    /// <summary>Field number for the "audit_redaction_failure" field.</summary>
    public const int AuditRedactionFailureFieldNumber = 20;
    private int auditRedactionFailure_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public int AuditRedactionFailure {
      get { return auditRedactionFailure_; }
      set {
        auditRedactionFailure_ = value;
      }
    }

    /// <summary>Field number for the "site_audit_backlog" field.</summary>
    public const int SiteAuditBacklogFieldNumber = 21;
    private global::ZB.MOM.WW.ScadaBridge.Communication.Grpc.SiteAuditBacklogSnapshotDto siteAuditBacklog_;
    /// <summary>
    /// absent when no data yet
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public global::ZB.MOM.WW.ScadaBridge.Communication.Grpc.SiteAuditBacklogSnapshotDto SiteAuditBacklog {
      get { return siteAuditBacklog_; }
      set {
        siteAuditBacklog_ = value;
      }
    }

    /// <summary>Field number for the "site_event_log_write_failures" field.</summary>
    public const int SiteEventLogWriteFailuresFieldNumber = 22;
    private long siteEventLogWriteFailures_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public long SiteEventLogWriteFailures {
      get { return siteEventLogWriteFailures_; }
      set {
        siteEventLogWriteFailures_ = value;
      }
    }

    /// <summary>Field number for the "oldest_parked_message_age_seconds" field.</summary>
    public const int OldestParkedMessageAgeSecondsFieldNumber = 23;
    private static readonly pb::FieldCodec<double?> _single_oldestParkedMessageAgeSeconds_codec = pb::FieldCodec.ForStructWrapper<double>(186);
    private double? oldestParkedMessageAgeSeconds_;
    /// <summary>
    /// absent when nothing parked
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public double? OldestParkedMessageAgeSeconds {
      get { return oldestParkedMessageAgeSeconds_; }
      set {
        oldestParkedMessageAgeSeconds_ = value;
      }
    }


    /// <summary>Field number for the "script_queue_depth" field.</summary>
    public const int ScriptQueueDepthFieldNumber = 24;
    private int scriptQueueDepth_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public int ScriptQueueDepth {
      get { return scriptQueueDepth_; }
      set {
        scriptQueueDepth_ = value;
      }
    }

    /// <summary>Field number for the "script_busy_threads" field.</summary>
    public const int ScriptBusyThreadsFieldNumber = 25;
    private int scriptBusyThreads_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public int ScriptBusyThreads {
      get { return scriptBusyThreads_; }
      set {
        scriptBusyThreads_ = value;
      }
    }

    /// <summary>Field number for the "script_oldest_busy_age_seconds" field.</summary>
    public const int ScriptOldestBusyAgeSecondsFieldNumber = 26;
    private static readonly pb::FieldCodec<double?> _single_scriptOldestBusyAgeSeconds_codec = pb::FieldCodec.ForStructWrapper<double>(210);
    private double? scriptOldestBusyAgeSeconds_;
    /// <summary>
    /// absent when the pool is idle
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public double? ScriptOldestBusyAgeSeconds {
      get { return scriptOldestBusyAgeSeconds_; }
      set {
        scriptOldestBusyAgeSeconds_ = value;
      }
    }


    /// <summary>Field number for the "local_db_replication_connected" field.</summary>
    public const int LocalDbReplicationConnectedFieldNumber = 27;
    private static readonly pb::FieldCodec<bool?> _single_localDbReplicationConnected_codec = pb::FieldCodec.ForStructWrapper<bool>(218);
    private bool? localDbReplicationConnected_;
    /// <summary>
    /// Nullable on purpose: absent means "replication not wired on this node",
    /// which is NOT the same as false ("wired but currently disconnected").
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public bool? LocalDbReplicationConnected {
      get { return localDbReplicationConnected_; }
      set {
        localDbReplicationConnected_ = value;
      }
    }


    /// <summary>Field number for the "local_db_oplog_backlog" field.</summary>
    public const int LocalDbOplogBacklogFieldNumber = 28;
    private static readonly pb::FieldCodec<long?> _single_localDbOplogBacklog_codec = pb::FieldCodec.ForStructWrapper<long>(226);
    private long? localDbOplogBacklog_;
    /// <summary>
    /// Absent means UNKNOWN, never zero — a failed backlog read rendered as 0
    /// would report a broken replication pair as perfectly healthy.
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public long? LocalDbOplogBacklog {
      get { return localDbOplogBacklog_; }
      set {
        localDbOplogBacklog_ = value;
      }
    }


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

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public bool Equals(SiteHealthReportDto other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (SiteId != other.SiteId) return false;
      if (SequenceNumber != other.SequenceNumber) return false;
      if (!object.Equals(ReportTimestamp, other.ReportTimestamp)) return false;
      if (!DataConnectionStatuses.Equals(other.DataConnectionStatuses)) return false;
      if (!TagResolutionCounts.Equals(other.TagResolutionCounts)) return false;
      if (ScriptErrorCount != other.ScriptErrorCount) return false;
      if (AlarmEvaluationErrorCount != other.AlarmEvaluationErrorCount) return false;
      if (!StoreAndForwardBufferDepths.Equals(other.StoreAndForwardBufferDepths)) return false;
      if (DeadLetterCount != other.DeadLetterCount) return false;
      if (DeployedInstanceCount != other.DeployedInstanceCount) return false;
      if (EnabledInstanceCount != other.EnabledInstanceCount) return false;
      if (DisabledInstanceCount != other.DisabledInstanceCount) return false;
      if (NodeRole != other.NodeRole) return false;
      if (NodeHostname != other.NodeHostname) return false;
      if (!object.Equals(DataConnectionEndpoints, other.DataConnectionEndpoints)) return false;
      if (!object.Equals(DataConnectionTagQuality, other.DataConnectionTagQuality)) return false;
      if (ParkedMessageCount != other.ParkedMessageCount) return false;
      if (!object.Equals(ClusterNodes, other.ClusterNodes)) return false;
      if (SiteAuditWriteFailures != other.SiteAuditWriteFailures) return false;
      if (AuditRedactionFailure != other.AuditRedactionFailure) return false;
      if (!object.Equals(SiteAuditBacklog, other.SiteAuditBacklog)) return false;
      if (SiteEventLogWriteFailures != other.SiteEventLogWriteFailures) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(OldestParkedMessageAgeSeconds, other.OldestParkedMessageAgeSeconds)) return false;
      if (ScriptQueueDepth != other.ScriptQueueDepth) return false;
      if (ScriptBusyThreads != other.ScriptBusyThreads) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(ScriptOldestBusyAgeSeconds, other.ScriptOldestBusyAgeSeconds)) return false;
      if (LocalDbReplicationConnected != other.LocalDbReplicationConnected) return false;
      if (LocalDbOplogBacklog != other.LocalDbOplogBacklog) 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 (SiteId.Length != 0) hash ^= SiteId.GetHashCode();
      if (SequenceNumber != 0L) hash ^= SequenceNumber.GetHashCode();
      if (reportTimestamp_ != null) hash ^= ReportTimestamp.GetHashCode();
      hash ^= DataConnectionStatuses.GetHashCode();
      hash ^= TagResolutionCounts.GetHashCode();
      if (ScriptErrorCount != 0) hash ^= ScriptErrorCount.GetHashCode();
      if (AlarmEvaluationErrorCount != 0) hash ^= AlarmEvaluationErrorCount.GetHashCode();
      hash ^= StoreAndForwardBufferDepths.GetHashCode();
      if (DeadLetterCount != 0) hash ^= DeadLetterCount.GetHashCode();
      if (DeployedInstanceCount != 0) hash ^= DeployedInstanceCount.GetHashCode();
      if (EnabledInstanceCount != 0) hash ^= EnabledInstanceCount.GetHashCode();
      if (DisabledInstanceCount != 0) hash ^= DisabledInstanceCount.GetHashCode();
      if (NodeRole.Length != 0) hash ^= NodeRole.GetHashCode();
      if (NodeHostname.Length != 0) hash ^= NodeHostname.GetHashCode();
      if (dataConnectionEndpoints_ != null) hash ^= DataConnectionEndpoints.GetHashCode();
      if (dataConnectionTagQuality_ != null) hash ^= DataConnectionTagQuality.GetHashCode();
      if (ParkedMessageCount != 0) hash ^= ParkedMessageCount.GetHashCode();
      if (clusterNodes_ != null) hash ^= ClusterNodes.GetHashCode();
      if (SiteAuditWriteFailures != 0) hash ^= SiteAuditWriteFailures.GetHashCode();
      if (AuditRedactionFailure != 0) hash ^= AuditRedactionFailure.GetHashCode();
      if (siteAuditBacklog_ != null) hash ^= SiteAuditBacklog.GetHashCode();
      if (SiteEventLogWriteFailures != 0L) hash ^= SiteEventLogWriteFailures.GetHashCode();
      if (oldestParkedMessageAgeSeconds_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(OldestParkedMessageAgeSeconds);
      if (ScriptQueueDepth != 0) hash ^= ScriptQueueDepth.GetHashCode();
      if (ScriptBusyThreads != 0) hash ^= ScriptBusyThreads.GetHashCode();
      if (scriptOldestBusyAgeSeconds_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(ScriptOldestBusyAgeSeconds);
      if (localDbReplicationConnected_ != null) hash ^= LocalDbReplicationConnected.GetHashCode();
      if (localDbOplogBacklog_ != null) hash ^= LocalDbOplogBacklog.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 (SiteId.Length != 0) {
        output.WriteRawTag(10);
        output.WriteString(SiteId);
      }
      if (SequenceNumber != 0L) {
        output.WriteRawTag(16);
        output.WriteInt64(SequenceNumber);
      }
      if (reportTimestamp_ != null) {
        output.WriteRawTag(26);
        output.WriteMessage(ReportTimestamp);
      }
      dataConnectionStatuses_.WriteTo(output, _map_dataConnectionStatuses_codec);
      tagResolutionCounts_.WriteTo(output, _map_tagResolutionCounts_codec);
      if (ScriptErrorCount != 0) {
        output.WriteRawTag(48);
        output.WriteInt32(ScriptErrorCount);
      }
      if (AlarmEvaluationErrorCount != 0) {
        output.WriteRawTag(56);
        output.WriteInt32(AlarmEvaluationErrorCount);
      }
      storeAndForwardBufferDepths_.WriteTo(output, _map_storeAndForwardBufferDepths_codec);
      if (DeadLetterCount != 0) {
        output.WriteRawTag(72);
        output.WriteInt32(DeadLetterCount);
      }
      if (DeployedInstanceCount != 0) {
        output.WriteRawTag(80);
        output.WriteInt32(DeployedInstanceCount);
      }
      if (EnabledInstanceCount != 0) {
        output.WriteRawTag(88);
        output.WriteInt32(EnabledInstanceCount);
      }
      if (DisabledInstanceCount != 0) {
        output.WriteRawTag(96);
        output.WriteInt32(DisabledInstanceCount);
      }
      if (NodeRole.Length != 0) {
        output.WriteRawTag(106);
        output.WriteString(NodeRole);
      }
      if (NodeHostname.Length != 0) {
        output.WriteRawTag(114);
        output.WriteString(NodeHostname);
      }
      if (dataConnectionEndpoints_ != null) {
        output.WriteRawTag(122);
        output.WriteMessage(DataConnectionEndpoints);
      }
      if (dataConnectionTagQuality_ != null) {
        output.WriteRawTag(130, 1);
        output.WriteMessage(DataConnectionTagQuality);
      }
      if (ParkedMessageCount != 0) {
        output.WriteRawTag(136, 1);
        output.WriteInt32(ParkedMessageCount);
      }
      if (clusterNodes_ != null) {
        output.WriteRawTag(146, 1);
        output.WriteMessage(ClusterNodes);
      }
      if (SiteAuditWriteFailures != 0) {
        output.WriteRawTag(152, 1);
        output.WriteInt32(SiteAuditWriteFailures);
      }
      if (AuditRedactionFailure != 0) {
        output.WriteRawTag(160, 1);
        output.WriteInt32(AuditRedactionFailure);
      }
      if (siteAuditBacklog_ != null) {
        output.WriteRawTag(170, 1);
        output.WriteMessage(SiteAuditBacklog);
      }
      if (SiteEventLogWriteFailures != 0L) {
        output.WriteRawTag(176, 1);
        output.WriteInt64(SiteEventLogWriteFailures);
      }
      if (oldestParkedMessageAgeSeconds_ != null) {
        _single_oldestParkedMessageAgeSeconds_codec.WriteTagAndValue(output, OldestParkedMessageAgeSeconds);
      }
      if (ScriptQueueDepth != 0) {
        output.WriteRawTag(192, 1);
        output.WriteInt32(ScriptQueueDepth);
      }
      if (ScriptBusyThreads != 0) {
        output.WriteRawTag(200, 1);
        output.WriteInt32(ScriptBusyThreads);
      }
      if (scriptOldestBusyAgeSeconds_ != null) {
        _single_scriptOldestBusyAgeSeconds_codec.WriteTagAndValue(output, ScriptOldestBusyAgeSeconds);
      }
      if (localDbReplicationConnected_ != null) {
        _single_localDbReplicationConnected_codec.WriteTagAndValue(output, LocalDbReplicationConnected);
      }
      if (localDbOplogBacklog_ != null) {
        _single_localDbOplogBacklog_codec.WriteTagAndValue(output, LocalDbOplogBacklog);
      }
      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 (SiteId.Length != 0) {
        output.WriteRawTag(10);
        output.WriteString(SiteId);
      }
      if (SequenceNumber != 0L) {
        output.WriteRawTag(16);
        output.WriteInt64(SequenceNumber);
      }
      if (reportTimestamp_ != null) {
        output.WriteRawTag(26);
        output.WriteMessage(ReportTimestamp);
      }
      dataConnectionStatuses_.WriteTo(ref output, _map_dataConnectionStatuses_codec);
      tagResolutionCounts_.WriteTo(ref output, _map_tagResolutionCounts_codec);
      if (ScriptErrorCount != 0) {
        output.WriteRawTag(48);
        output.WriteInt32(ScriptErrorCount);
      }
      if (AlarmEvaluationErrorCount != 0) {
        output.WriteRawTag(56);
        output.WriteInt32(AlarmEvaluationErrorCount);
      }
      storeAndForwardBufferDepths_.WriteTo(ref output, _map_storeAndForwardBufferDepths_codec);
      if (DeadLetterCount != 0) {
        output.WriteRawTag(72);
        output.WriteInt32(DeadLetterCount);
      }
      if (DeployedInstanceCount != 0) {
        output.WriteRawTag(80);
        output.WriteInt32(DeployedInstanceCount);
      }
      if (EnabledInstanceCount != 0) {
        output.WriteRawTag(88);
        output.WriteInt32(EnabledInstanceCount);
      }
      if (DisabledInstanceCount != 0) {
        output.WriteRawTag(96);
        output.WriteInt32(DisabledInstanceCount);
      }
      if (NodeRole.Length != 0) {
        output.WriteRawTag(106);
        output.WriteString(NodeRole);
      }
      if (NodeHostname.Length != 0) {
        output.WriteRawTag(114);
        output.WriteString(NodeHostname);
      }
      if (dataConnectionEndpoints_ != null) {
        output.WriteRawTag(122);
        output.WriteMessage(DataConnectionEndpoints);
      }
      if (dataConnectionTagQuality_ != null) {
        output.WriteRawTag(130, 1);
        output.WriteMessage(DataConnectionTagQuality);
      }
      if (ParkedMessageCount != 0) {
        output.WriteRawTag(136, 1);
        output.WriteInt32(ParkedMessageCount);
      }
      if (clusterNodes_ != null) {
        output.WriteRawTag(146, 1);
        output.WriteMessage(ClusterNodes);
      }
      if (SiteAuditWriteFailures != 0) {
        output.WriteRawTag(152, 1);
        output.WriteInt32(SiteAuditWriteFailures);
      }
      if (AuditRedactionFailure != 0) {
        output.WriteRawTag(160, 1);
        output.WriteInt32(AuditRedactionFailure);
      }
      if (siteAuditBacklog_ != null) {
        output.WriteRawTag(170, 1);
        output.WriteMessage(SiteAuditBacklog);
      }
      if (SiteEventLogWriteFailures != 0L) {
        output.WriteRawTag(176, 1);
        output.WriteInt64(SiteEventLogWriteFailures);
      }
      if (oldestParkedMessageAgeSeconds_ != null) {
        _single_oldestParkedMessageAgeSeconds_codec.WriteTagAndValue(ref output, OldestParkedMessageAgeSeconds);
      }
      if (ScriptQueueDepth != 0) {
        output.WriteRawTag(192, 1);
        output.WriteInt32(ScriptQueueDepth);
      }
      if (ScriptBusyThreads != 0) {
        output.WriteRawTag(200, 1);
        output.WriteInt32(ScriptBusyThreads);
      }
      if (scriptOldestBusyAgeSeconds_ != null) {
        _single_scriptOldestBusyAgeSeconds_codec.WriteTagAndValue(ref output, ScriptOldestBusyAgeSeconds);
      }
      if (localDbReplicationConnected_ != null) {
        _single_localDbReplicationConnected_codec.WriteTagAndValue(ref output, LocalDbReplicationConnected);
      }
      if (localDbOplogBacklog_ != null) {
        _single_localDbOplogBacklog_codec.WriteTagAndValue(ref output, LocalDbOplogBacklog);
      }
      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 (SiteId.Length != 0) {
        size += 1 + pb::CodedOutputStream.ComputeStringSize(SiteId);
      }
      if (SequenceNumber != 0L) {
        size += 1 + pb::CodedOutputStream.ComputeInt64Size(SequenceNumber);
      }
      if (reportTimestamp_ != null) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(ReportTimestamp);
      }
      size += dataConnectionStatuses_.CalculateSize(_map_dataConnectionStatuses_codec);
      size += tagResolutionCounts_.CalculateSize(_map_tagResolutionCounts_codec);
      if (ScriptErrorCount != 0) {
        size += 1 + pb::CodedOutputStream.ComputeInt32Size(ScriptErrorCount);
      }
      if (AlarmEvaluationErrorCount != 0) {
        size += 1 + pb::CodedOutputStream.ComputeInt32Size(AlarmEvaluationErrorCount);
      }
      size += storeAndForwardBufferDepths_.CalculateSize(_map_storeAndForwardBufferDepths_codec);
      if (DeadLetterCount != 0) {
        size += 1 + pb::CodedOutputStream.ComputeInt32Size(DeadLetterCount);
      }
      if (DeployedInstanceCount != 0) {
        size += 1 + pb::CodedOutputStream.ComputeInt32Size(DeployedInstanceCount);
      }
      if (EnabledInstanceCount != 0) {
        size += 1 + pb::CodedOutputStream.ComputeInt32Size(EnabledInstanceCount);
      }
      if (DisabledInstanceCount != 0) {
        size += 1 + pb::CodedOutputStream.ComputeInt32Size(DisabledInstanceCount);
      }
      if (NodeRole.Length != 0) {
        size += 1 + pb::CodedOutputStream.ComputeStringSize(NodeRole);
      }
      if (NodeHostname.Length != 0) {
        size += 1 + pb::CodedOutputStream.ComputeStringSize(NodeHostname);
      }
      if (dataConnectionEndpoints_ != null) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(DataConnectionEndpoints);
      }
      if (dataConnectionTagQuality_ != null) {
        size += 2 + pb::CodedOutputStream.ComputeMessageSize(DataConnectionTagQuality);
      }
      if (ParkedMessageCount != 0) {
        size += 2 + pb::CodedOutputStream.ComputeInt32Size(ParkedMessageCount);
      }
      if (clusterNodes_ != null) {
        size += 2 + pb::CodedOutputStream.ComputeMessageSize(ClusterNodes);
      }
      if (SiteAuditWriteFailures != 0) {
        size += 2 + pb::CodedOutputStream.ComputeInt32Size(SiteAuditWriteFailures);
      }
      if (AuditRedactionFailure != 0) {
        size += 2 + pb::CodedOutputStream.ComputeInt32Size(AuditRedactionFailure);
      }
      if (siteAuditBacklog_ != null) {
        size += 2 + pb::CodedOutputStream.ComputeMessageSize(SiteAuditBacklog);
      }
      if (SiteEventLogWriteFailures != 0L) {
        size += 2 + pb::CodedOutputStream.ComputeInt64Size(SiteEventLogWriteFailures);
      }
      if (oldestParkedMessageAgeSeconds_ != null) {
        size += _single_oldestParkedMessageAgeSeconds_codec.CalculateSizeWithTag(OldestParkedMessageAgeSeconds);
      }
      if (ScriptQueueDepth != 0) {
        size += 2 + pb::CodedOutputStream.ComputeInt32Size(ScriptQueueDepth);
      }
      if (ScriptBusyThreads != 0) {
        size += 2 + pb::CodedOutputStream.ComputeInt32Size(ScriptBusyThreads);
      }
      if (scriptOldestBusyAgeSeconds_ != null) {
        size += _single_scriptOldestBusyAgeSeconds_codec.CalculateSizeWithTag(ScriptOldestBusyAgeSeconds);
      }
      if (localDbReplicationConnected_ != null) {
        size += _single_localDbReplicationConnected_codec.CalculateSizeWithTag(LocalDbReplicationConnected);
      }
      if (localDbOplogBacklog_ != null) {
        size += _single_localDbOplogBacklog_codec.CalculateSizeWithTag(LocalDbOplogBacklog);
      }
      if (_unknownFields != null) {
        size += _unknownFields.CalculateSize();
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void MergeFrom(SiteHealthReportDto other) {
      if (other == null) {
        return;
      }
      if (other.SiteId.Length != 0) {
        SiteId = other.SiteId;
      }
      if (other.SequenceNumber != 0L) {
        SequenceNumber = other.SequenceNumber;
      }
      if (other.reportTimestamp_ != null) {
        if (reportTimestamp_ == null) {
          ReportTimestamp = new global::Google.Protobuf.WellKnownTypes.Timestamp();
        }
        ReportTimestamp.MergeFrom(other.ReportTimestamp);
      }
      dataConnectionStatuses_.MergeFrom(other.dataConnectionStatuses_);
      tagResolutionCounts_.MergeFrom(other.tagResolutionCounts_);
      if (other.ScriptErrorCount != 0) {
        ScriptErrorCount = other.ScriptErrorCount;
      }
      if (other.AlarmEvaluationErrorCount != 0) {
        AlarmEvaluationErrorCount = other.AlarmEvaluationErrorCount;
      }
      storeAndForwardBufferDepths_.MergeFrom(other.storeAndForwardBufferDepths_);
      if (other.DeadLetterCount != 0) {
        DeadLetterCount = other.DeadLetterCount;
      }
      if (other.DeployedInstanceCount != 0) {
        DeployedInstanceCount = other.DeployedInstanceCount;
      }
      if (other.EnabledInstanceCount != 0) {
        EnabledInstanceCount = other.EnabledInstanceCount;
      }
      if (other.DisabledInstanceCount != 0) {
        DisabledInstanceCount = other.DisabledInstanceCount;
      }
      if (other.NodeRole.Length != 0) {
        NodeRole = other.NodeRole;
      }
      if (other.NodeHostname.Length != 0) {
        NodeHostname = other.NodeHostname;
      }
      if (other.dataConnectionEndpoints_ != null) {
        if (dataConnectionEndpoints_ == null) {
          DataConnectionEndpoints = new global::ZB.MOM.WW.ScadaBridge.Communication.Grpc.ConnectionEndpointMapDto();
        }
        DataConnectionEndpoints.MergeFrom(other.DataConnectionEndpoints);
      }
      if (other.dataConnectionTagQuality_ != null) {
        if (dataConnectionTagQuality_ == null) {
          DataConnectionTagQuality = new global::ZB.MOM.WW.ScadaBridge.Communication.Grpc.TagQualityMapDto();
        }
        DataConnectionTagQuality.MergeFrom(other.DataConnectionTagQuality);
      }
      if (other.ParkedMessageCount != 0) {
        ParkedMessageCount = other.ParkedMessageCount;
      }
      if (other.clusterNodes_ != null) {
        if (clusterNodes_ == null) {
          ClusterNodes = new global::ZB.MOM.WW.ScadaBridge.Communication.Grpc.NodeStatusListDto();
        }
        ClusterNodes.MergeFrom(other.ClusterNodes);
      }
      if (other.SiteAuditWriteFailures != 0) {
        SiteAuditWriteFailures = other.SiteAuditWriteFailures;
      }
      if (other.AuditRedactionFailure != 0) {
        AuditRedactionFailure = other.AuditRedactionFailure;
      }
      if (other.siteAuditBacklog_ != null) {
        if (siteAuditBacklog_ == null) {
          SiteAuditBacklog = new global::ZB.MOM.WW.ScadaBridge.Communication.Grpc.SiteAuditBacklogSnapshotDto();
        }
        SiteAuditBacklog.MergeFrom(other.SiteAuditBacklog);
      }
      if (other.SiteEventLogWriteFailures != 0L) {
        SiteEventLogWriteFailures = other.SiteEventLogWriteFailures;
      }
      if (other.oldestParkedMessageAgeSeconds_ != null) {
        if (oldestParkedMessageAgeSeconds_ == null || other.OldestParkedMessageAgeSeconds != 0D) {
          OldestParkedMessageAgeSeconds = other.OldestParkedMessageAgeSeconds;
        }
      }
      if (other.ScriptQueueDepth != 0) {
        ScriptQueueDepth = other.ScriptQueueDepth;
      }
      if (other.ScriptBusyThreads != 0) {
        ScriptBusyThreads = other.ScriptBusyThreads;
      }
      if (other.scriptOldestBusyAgeSeconds_ != null) {
        if (scriptOldestBusyAgeSeconds_ == null || other.ScriptOldestBusyAgeSeconds != 0D) {
          ScriptOldestBusyAgeSeconds = other.ScriptOldestBusyAgeSeconds;
        }
      }
      if (other.localDbReplicationConnected_ != null) {
        if (localDbReplicationConnected_ == null || other.LocalDbReplicationConnected != false) {
          LocalDbReplicationConnected = other.LocalDbReplicationConnected;
        }
      }
      if (other.localDbOplogBacklog_ != null) {
        if (localDbOplogBacklog_ == null || other.LocalDbOplogBacklog != 0L) {
          LocalDbOplogBacklog = other.LocalDbOplogBacklog;
        }
      }
      _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: {
            SiteId = input.ReadString();
            break;
          }
          case 16: {
            SequenceNumber = input.ReadInt64();
            break;
          }
          case 26: {
            if (reportTimestamp_ == null) {
              ReportTimestamp = new global::Google.Protobuf.WellKnownTypes.Timestamp();
            }
            input.ReadMessage(ReportTimestamp);
            break;
          }
          case 34: {
            dataConnectionStatuses_.AddEntriesFrom(input, _map_dataConnectionStatuses_codec);
            break;
          }
          case 42: {
            tagResolutionCounts_.AddEntriesFrom(input, _map_tagResolutionCounts_codec);
            break;
          }
          case 48: {
            ScriptErrorCount = input.ReadInt32();
            break;
          }
          case 56: {
            AlarmEvaluationErrorCount = input.ReadInt32();
            break;
          }
          case 66: {
            storeAndForwardBufferDepths_.AddEntriesFrom(input, _map_storeAndForwardBufferDepths_codec);
            break;
          }
          case 72: {
            DeadLetterCount = input.ReadInt32();
            break;
          }
          case 80: {
            DeployedInstanceCount = input.ReadInt32();
            break;
          }
          case 88: {
            EnabledInstanceCount = input.ReadInt32();
            break;
          }
          case 96: {
            DisabledInstanceCount = input.ReadInt32();
            break;
          }
          case 106: {
            NodeRole = input.ReadString();
            break;
          }
          case 114: {
            NodeHostname = input.ReadString();
            break;
          }
          case 122: {
            if (dataConnectionEndpoints_ == null) {
              DataConnectionEndpoints = new global::ZB.MOM.WW.ScadaBridge.Communication.Grpc.ConnectionEndpointMapDto();
            }
            input.ReadMessage(DataConnectionEndpoints);
            break;
          }
          case 130: {
            if (dataConnectionTagQuality_ == null) {
              DataConnectionTagQuality = new global::ZB.MOM.WW.ScadaBridge.Communication.Grpc.TagQualityMapDto();
            }
            input.ReadMessage(DataConnectionTagQuality);
            break;
          }
          case 136: {
            ParkedMessageCount = input.ReadInt32();
            break;
          }
          case 146: {
            if (clusterNodes_ == null) {
              ClusterNodes = new global::ZB.MOM.WW.ScadaBridge.Communication.Grpc.NodeStatusListDto();
            }
            input.ReadMessage(ClusterNodes);
            break;
          }
          case 152: {
            SiteAuditWriteFailures = input.ReadInt32();
            break;
          }
          case 160: {
            AuditRedactionFailure = input.ReadInt32();
            break;
          }
          case 170: {
            if (siteAuditBacklog_ == null) {
              SiteAuditBacklog = new global::ZB.MOM.WW.ScadaBridge.Communication.Grpc.SiteAuditBacklogSnapshotDto();
            }
            input.ReadMessage(SiteAuditBacklog);
            break;
          }
          case 176: {
            SiteEventLogWriteFailures = input.ReadInt64();
            break;
          }
          case 186: {
            double? value = _single_oldestParkedMessageAgeSeconds_codec.Read(input);
            if (oldestParkedMessageAgeSeconds_ == null || value != 0D) {
              OldestParkedMessageAgeSeconds = value;
            }
            break;
          }
          case 192: {
            ScriptQueueDepth = input.ReadInt32();
            break;
          }
          case 200: {
            ScriptBusyThreads = input.ReadInt32();
            break;
          }
          case 210: {
            double? value = _single_scriptOldestBusyAgeSeconds_codec.Read(input);
            if (scriptOldestBusyAgeSeconds_ == null || value != 0D) {
              ScriptOldestBusyAgeSeconds = value;
            }
            break;
          }
          case 218: {
            bool? value = _single_localDbReplicationConnected_codec.Read(input);
            if (localDbReplicationConnected_ == null || value != false) {
              LocalDbReplicationConnected = value;
            }
            break;
          }
          case 226: {
            long? value = _single_localDbOplogBacklog_codec.Read(input);
            if (localDbOplogBacklog_ == null || value != 0L) {
              LocalDbOplogBacklog = 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: {
            SiteId = input.ReadString();
            break;
          }
          case 16: {
            SequenceNumber = input.ReadInt64();
            break;
          }
          case 26: {
            if (reportTimestamp_ == null) {
              ReportTimestamp = new global::Google.Protobuf.WellKnownTypes.Timestamp();
            }
            input.ReadMessage(ReportTimestamp);
            break;
          }
          case 34: {
            dataConnectionStatuses_.AddEntriesFrom(ref input, _map_dataConnectionStatuses_codec);
            break;
          }
          case 42: {
            tagResolutionCounts_.AddEntriesFrom(ref input, _map_tagResolutionCounts_codec);
            break;
          }
          case 48: {
            ScriptErrorCount = input.ReadInt32();
            break;
          }
          case 56: {
            AlarmEvaluationErrorCount = input.ReadInt32();
            break;
          }
          case 66: {
            storeAndForwardBufferDepths_.AddEntriesFrom(ref input, _map_storeAndForwardBufferDepths_codec);
            break;
          }
          case 72: {
            DeadLetterCount = input.ReadInt32();
            break;
          }
          case 80: {
            DeployedInstanceCount = input.ReadInt32();
            break;
          }
          case 88: {
            EnabledInstanceCount = input.ReadInt32();
            break;
          }
          case 96: {
            DisabledInstanceCount = input.ReadInt32();
            break;
          }
          case 106: {
            NodeRole = input.ReadString();
            break;
          }
          case 114: {
            NodeHostname = input.ReadString();
            break;
          }
          case 122: {
            if (dataConnectionEndpoints_ == null) {
              DataConnectionEndpoints = new global::ZB.MOM.WW.ScadaBridge.Communication.Grpc.ConnectionEndpointMapDto();
            }
            input.ReadMessage(DataConnectionEndpoints);
            break;
          }
          case 130: {
            if (dataConnectionTagQuality_ == null) {
              DataConnectionTagQuality = new global::ZB.MOM.WW.ScadaBridge.Communication.Grpc.TagQualityMapDto();
            }
            input.ReadMessage(DataConnectionTagQuality);
            break;
          }
          case 136: {
            ParkedMessageCount = input.ReadInt32();
            break;
          }
          case 146: {
            if (clusterNodes_ == null) {
              ClusterNodes = new global::ZB.MOM.WW.ScadaBridge.Communication.Grpc.NodeStatusListDto();
            }
            input.ReadMessage(ClusterNodes);
            break;
          }
          case 152: {
            SiteAuditWriteFailures = input.ReadInt32();
            break;
          }
          case 160: {
            AuditRedactionFailure = input.ReadInt32();
            break;
          }
          case 170: {
            if (siteAuditBacklog_ == null) {
              SiteAuditBacklog = new global::ZB.MOM.WW.ScadaBridge.Communication.Grpc.SiteAuditBacklogSnapshotDto();
            }
            input.ReadMessage(SiteAuditBacklog);
            break;
          }
          case 176: {
            SiteEventLogWriteFailures = input.ReadInt64();
            break;
          }
          case 186: {
            double? value = _single_oldestParkedMessageAgeSeconds_codec.Read(ref input);
            if (oldestParkedMessageAgeSeconds_ == null || value != 0D) {
              OldestParkedMessageAgeSeconds = value;
            }
            break;
          }
          case 192: {
            ScriptQueueDepth = input.ReadInt32();
            break;
          }
          case 200: {
            ScriptBusyThreads = input.ReadInt32();
            break;
          }
          case 210: {
            double? value = _single_scriptOldestBusyAgeSeconds_codec.Read(ref input);
            if (scriptOldestBusyAgeSeconds_ == null || value != 0D) {
              ScriptOldestBusyAgeSeconds = value;
            }
            break;
          }
          case 218: {
            bool? value = _single_localDbReplicationConnected_codec.Read(ref input);
            if (localDbReplicationConnected_ == null || value != false) {
              LocalDbReplicationConnected = value;
            }
            break;
          }
          case 226: {
            long? value = _single_localDbOplogBacklog_codec.Read(ref input);
            if (localDbOplogBacklog_ == null || value != 0L) {
              LocalDbOplogBacklog = value;
            }
            break;
          }
        }
      }
    }
    #endif

  }

  /// <summary>
  /// Central -> Site: health report ack, so a lost report is observable.
  /// </summary>
  [global::System.Diagnostics.DebuggerDisplayAttribute("{ToString(),nq}")]
  public sealed partial class SiteHealthReportAckDto : pb::IMessage<SiteHealthReportAckDto>
  #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      , pb::IBufferMessage
  #endif
  {
    private static readonly pb::MessageParser<SiteHealthReportAckDto> _parser = new pb::MessageParser<SiteHealthReportAckDto>(() => new SiteHealthReportAckDto());
    private pb::UnknownFieldSet _unknownFields;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static pb::MessageParser<SiteHealthReportAckDto> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::ZB.MOM.WW.ScadaBridge.Communication.Grpc.CentralControlReflection.Descriptor.MessageTypes[15]; }
    }

    [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 SiteHealthReportAckDto() {
      OnConstruction();
    }

    partial void OnConstruction();

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

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

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

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

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

    /// <summary>Field number for the "error" field.</summary>
    public const int ErrorFieldNumber = 4;
    private string error_ = "";
    /// <summary>
    /// empty string represents null
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public string Error {
      get { return error_; }
      set {
        error_ = 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 SiteHealthReportAckDto);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public bool Equals(SiteHealthReportAckDto other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (SiteId != other.SiteId) return false;
      if (SequenceNumber != other.SequenceNumber) return false;
      if (Accepted != other.Accepted) return false;
      if (Error != other.Error) 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 (SiteId.Length != 0) hash ^= SiteId.GetHashCode();
      if (SequenceNumber != 0L) hash ^= SequenceNumber.GetHashCode();
      if (Accepted != false) hash ^= Accepted.GetHashCode();
      if (Error.Length != 0) hash ^= Error.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 (SiteId.Length != 0) {
        output.WriteRawTag(10);
        output.WriteString(SiteId);
      }
      if (SequenceNumber != 0L) {
        output.WriteRawTag(16);
        output.WriteInt64(SequenceNumber);
      }
      if (Accepted != false) {
        output.WriteRawTag(24);
        output.WriteBool(Accepted);
      }
      if (Error.Length != 0) {
        output.WriteRawTag(34);
        output.WriteString(Error);
      }
      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 (SiteId.Length != 0) {
        output.WriteRawTag(10);
        output.WriteString(SiteId);
      }
      if (SequenceNumber != 0L) {
        output.WriteRawTag(16);
        output.WriteInt64(SequenceNumber);
      }
      if (Accepted != false) {
        output.WriteRawTag(24);
        output.WriteBool(Accepted);
      }
      if (Error.Length != 0) {
        output.WriteRawTag(34);
        output.WriteString(Error);
      }
      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 (SiteId.Length != 0) {
        size += 1 + pb::CodedOutputStream.ComputeStringSize(SiteId);
      }
      if (SequenceNumber != 0L) {
        size += 1 + pb::CodedOutputStream.ComputeInt64Size(SequenceNumber);
      }
      if (Accepted != false) {
        size += 1 + 1;
      }
      if (Error.Length != 0) {
        size += 1 + pb::CodedOutputStream.ComputeStringSize(Error);
      }
      if (_unknownFields != null) {
        size += _unknownFields.CalculateSize();
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void MergeFrom(SiteHealthReportAckDto other) {
      if (other == null) {
        return;
      }
      if (other.SiteId.Length != 0) {
        SiteId = other.SiteId;
      }
      if (other.SequenceNumber != 0L) {
        SequenceNumber = other.SequenceNumber;
      }
      if (other.Accepted != false) {
        Accepted = other.Accepted;
      }
      if (other.Error.Length != 0) {
        Error = other.Error;
      }
      _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: {
            SiteId = input.ReadString();
            break;
          }
          case 16: {
            SequenceNumber = input.ReadInt64();
            break;
          }
          case 24: {
            Accepted = input.ReadBool();
            break;
          }
          case 34: {
            Error = 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: {
            SiteId = input.ReadString();
            break;
          }
          case 16: {
            SequenceNumber = input.ReadInt64();
            break;
          }
          case 24: {
            Accepted = input.ReadBool();
            break;
          }
          case 34: {
            Error = input.ReadString();
            break;
          }
        }
      }
    }
    #endif

  }

  /// <summary>
  /// Site -> Central: application heartbeat (fire-and-forget; reply is Empty).
  /// </summary>
  [global::System.Diagnostics.DebuggerDisplayAttribute("{ToString(),nq}")]
  public sealed partial class HeartbeatDto : pb::IMessage<HeartbeatDto>
  #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      , pb::IBufferMessage
  #endif
  {
    private static readonly pb::MessageParser<HeartbeatDto> _parser = new pb::MessageParser<HeartbeatDto>(() => new HeartbeatDto());
    private pb::UnknownFieldSet _unknownFields;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static pb::MessageParser<HeartbeatDto> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::ZB.MOM.WW.ScadaBridge.Communication.Grpc.CentralControlReflection.Descriptor.MessageTypes[16]; }
    }

    [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 HeartbeatDto() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public HeartbeatDto(HeartbeatDto other) : this() {
      siteId_ = other.siteId_;
      nodeHostname_ = other.nodeHostname_;
      isActive_ = other.isActive_;
      timestamp_ = other.timestamp_ != null ? other.timestamp_.Clone() : null;
      synthetic_ = other.synthetic_;
      _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
    }

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

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

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

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

    /// <summary>Field number for the "timestamp" field.</summary>
    public const int TimestampFieldNumber = 4;
    private global::Google.Protobuf.WellKnownTypes.Timestamp timestamp_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public global::Google.Protobuf.WellKnownTypes.Timestamp Timestamp {
      get { return timestamp_; }
      set {
        timestamp_ = value;
      }
    }

    /// <summary>Field number for the "synthetic" field.</summary>
    public const int SyntheticFieldNumber = 5;
    private bool synthetic_;
    /// <summary>
    /// Additive (field 5): true marks a SYNTHETIC heartbeat that carries no liveness
    /// meaning — today only CentralChannelProvider's failback probe, which reuses this
    /// RPC purely to test whether the preferred central endpoint answers again. Central
    /// must skip ALL liveness/health bookkeeping for such a heartbeat: it does not come
    /// from a site node's heartbeat timer, and treating it as one would keep a site
    /// looking alive on the health dashboard from the probe alone. proto3 defaults it to
    /// false, so a pre-existing site's heartbeat is a real one, as before.
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public bool Synthetic {
      get { return synthetic_; }
      set {
        synthetic_ = value;
      }
    }

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

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public bool Equals(HeartbeatDto other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (SiteId != other.SiteId) return false;
      if (NodeHostname != other.NodeHostname) return false;
      if (IsActive != other.IsActive) return false;
      if (!object.Equals(Timestamp, other.Timestamp)) return false;
      if (Synthetic != other.Synthetic) 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 (SiteId.Length != 0) hash ^= SiteId.GetHashCode();
      if (NodeHostname.Length != 0) hash ^= NodeHostname.GetHashCode();
      if (IsActive != false) hash ^= IsActive.GetHashCode();
      if (timestamp_ != null) hash ^= Timestamp.GetHashCode();
      if (Synthetic != false) hash ^= Synthetic.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 (SiteId.Length != 0) {
        output.WriteRawTag(10);
        output.WriteString(SiteId);
      }
      if (NodeHostname.Length != 0) {
        output.WriteRawTag(18);
        output.WriteString(NodeHostname);
      }
      if (IsActive != false) {
        output.WriteRawTag(24);
        output.WriteBool(IsActive);
      }
      if (timestamp_ != null) {
        output.WriteRawTag(34);
        output.WriteMessage(Timestamp);
      }
      if (Synthetic != false) {
        output.WriteRawTag(40);
        output.WriteBool(Synthetic);
      }
      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 (SiteId.Length != 0) {
        output.WriteRawTag(10);
        output.WriteString(SiteId);
      }
      if (NodeHostname.Length != 0) {
        output.WriteRawTag(18);
        output.WriteString(NodeHostname);
      }
      if (IsActive != false) {
        output.WriteRawTag(24);
        output.WriteBool(IsActive);
      }
      if (timestamp_ != null) {
        output.WriteRawTag(34);
        output.WriteMessage(Timestamp);
      }
      if (Synthetic != false) {
        output.WriteRawTag(40);
        output.WriteBool(Synthetic);
      }
      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 (SiteId.Length != 0) {
        size += 1 + pb::CodedOutputStream.ComputeStringSize(SiteId);
      }
      if (NodeHostname.Length != 0) {
        size += 1 + pb::CodedOutputStream.ComputeStringSize(NodeHostname);
      }
      if (IsActive != false) {
        size += 1 + 1;
      }
      if (timestamp_ != null) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(Timestamp);
      }
      if (Synthetic != 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(HeartbeatDto other) {
      if (other == null) {
        return;
      }
      if (other.SiteId.Length != 0) {
        SiteId = other.SiteId;
      }
      if (other.NodeHostname.Length != 0) {
        NodeHostname = other.NodeHostname;
      }
      if (other.IsActive != false) {
        IsActive = other.IsActive;
      }
      if (other.timestamp_ != null) {
        if (timestamp_ == null) {
          Timestamp = new global::Google.Protobuf.WellKnownTypes.Timestamp();
        }
        Timestamp.MergeFrom(other.Timestamp);
      }
      if (other.Synthetic != false) {
        Synthetic = other.Synthetic;
      }
      _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: {
            SiteId = input.ReadString();
            break;
          }
          case 18: {
            NodeHostname = input.ReadString();
            break;
          }
          case 24: {
            IsActive = input.ReadBool();
            break;
          }
          case 34: {
            if (timestamp_ == null) {
              Timestamp = new global::Google.Protobuf.WellKnownTypes.Timestamp();
            }
            input.ReadMessage(Timestamp);
            break;
          }
          case 40: {
            Synthetic = 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: {
            SiteId = input.ReadString();
            break;
          }
          case 18: {
            NodeHostname = input.ReadString();
            break;
          }
          case 24: {
            IsActive = input.ReadBool();
            break;
          }
          case 34: {
            if (timestamp_ == null) {
              Timestamp = new global::Google.Protobuf.WellKnownTypes.Timestamp();
            }
            input.ReadMessage(Timestamp);
            break;
          }
          case 40: {
            Synthetic = input.ReadBool();
            break;
          }
        }
      }
    }
    #endif

  }

  #endregion

}

#endregion Designer generated code
