From 3df6f3c3224ea89a2c65fbdc655f7df074acd1fa Mon Sep 17 00:00:00 2001 From: Manuel Kieweg <manuel.kieweg@h-da.de> Date: Fri, 15 Jan 2021 12:12:27 +0000 Subject: [PATCH] Revert "Merge branch '68-burntsushi-toml-is-unmaintained' into 'v.0.1.0-codename-threadbare'" This reverts merge request !85 --- .../cocsn/gosdn/enums.pb.go | 151 - .../cocsn/gosdn/openconfig.pb.go | 177 -- .../cocsn/gosdn/openconfig_interfaces.pb.go | 2622 ----------------- api/proto/openconfig/enums/enums.pb.go | 149 - api/proto/openconfig/enums/enums.proto | 19 - api/proto/openconfig/openconfig.pb.go | 175 -- api/proto/openconfig/openconfig.proto | 20 - .../openconfig_interfaces.pb.go | 2620 ---------------- .../openconfig_interfaces.proto | 163 - cmd/gnmi/gnmi.go | 43 - cmd/gosdn-cli/main.go | 6 +- cmd/gosdn-tview/grpc/commands.go | 6 +- cmd/gosdn/main.go | 14 +- configs/gosdn.toml | 9 +- database/client.go | 9 +- forks/goarista/gnmi/arbitration.go | 58 - forks/goarista/gnmi/arbitration_test.go | 73 - forks/goarista/gnmi/client.go | 330 --- forks/goarista/gnmi/json.go | 35 - forks/goarista/gnmi/operation.go | 541 ---- forks/goarista/gnmi/operation_test.go | 423 --- forks/goarista/gnmi/path.go | 251 -- forks/goarista/gnmi/path_test.go | 308 -- forks/goarista/openconfig/client/client.go | 132 - forks/goarista/openconfig/client/flags.go | 113 - forks/goarista/openconfig/json.go | 237 -- forks/goarista/openconfig/json_test.go | 143 - go.mod | 15 +- go.sum | 385 +-- gosdn.png | Bin 135420 -> 0 bytes gosdn.puml | 118 - nucleus/cli-handling.go | 23 +- nucleus/controller.go | 104 +- nucleus/device.go | 49 - nucleus/gnmi_transport.go | 81 - nucleus/interfaces/client.go | 7 + nucleus/{ => interfaces}/clientConfig.go | 4 +- nucleus/nucleus-core.go | 8 +- nucleus/principalNetworkDomain.go | 78 - nucleus/restconf_transport.go | 18 - nucleus/southbound.go | 26 - plugins/sbi-general.go | 40 - .../restconf/client/ciena/client.go | 57 +- .../restconf/util/unmarshal.go | 12 +- 44 files changed, 188 insertions(+), 9664 deletions(-) delete mode 100644 api/proto/gitlab.fbi.h-da.de/cocsn/gosdn/enums.pb.go delete mode 100644 api/proto/gitlab.fbi.h-da.de/cocsn/gosdn/openconfig.pb.go delete mode 100644 api/proto/gitlab.fbi.h-da.de/cocsn/gosdn/openconfig_interfaces.pb.go delete mode 100644 api/proto/openconfig/enums/enums.pb.go delete mode 100644 api/proto/openconfig/enums/enums.proto delete mode 100644 api/proto/openconfig/openconfig.pb.go delete mode 100644 api/proto/openconfig/openconfig.proto delete mode 100644 api/proto/openconfig/openconfig_interfaces/openconfig_interfaces.pb.go delete mode 100644 api/proto/openconfig/openconfig_interfaces/openconfig_interfaces.proto delete mode 100644 cmd/gnmi/gnmi.go delete mode 100644 forks/goarista/gnmi/arbitration.go delete mode 100644 forks/goarista/gnmi/arbitration_test.go delete mode 100644 forks/goarista/gnmi/client.go delete mode 100644 forks/goarista/gnmi/json.go delete mode 100644 forks/goarista/gnmi/operation.go delete mode 100644 forks/goarista/gnmi/operation_test.go delete mode 100644 forks/goarista/gnmi/path.go delete mode 100644 forks/goarista/gnmi/path_test.go delete mode 100644 forks/goarista/openconfig/client/client.go delete mode 100644 forks/goarista/openconfig/client/flags.go delete mode 100644 forks/goarista/openconfig/json.go delete mode 100644 forks/goarista/openconfig/json_test.go delete mode 100644 gosdn.png delete mode 100644 gosdn.puml delete mode 100644 nucleus/device.go delete mode 100644 nucleus/gnmi_transport.go create mode 100644 nucleus/interfaces/client.go rename nucleus/{ => interfaces}/clientConfig.go (86%) delete mode 100644 nucleus/principalNetworkDomain.go delete mode 100644 nucleus/restconf_transport.go delete mode 100644 nucleus/southbound.go delete mode 100644 plugins/sbi-general.go rename plugins/ciena/mcp.go => sbi/restconf/client/ciena/client.go (81%) rename nucleus/transport.go => sbi/restconf/util/unmarshal.go (52%) diff --git a/api/proto/gitlab.fbi.h-da.de/cocsn/gosdn/enums.pb.go b/api/proto/gitlab.fbi.h-da.de/cocsn/gosdn/enums.pb.go deleted file mode 100644 index 251396653..000000000 --- a/api/proto/gitlab.fbi.h-da.de/cocsn/gosdn/enums.pb.go +++ /dev/null @@ -1,151 +0,0 @@ -// openconfig.enums is generated by proto_generator as a protobuf -// representation of a YANG schema. -// -// Input schema modules: -// - ../yang-models/models/openconfig/release/models/interfaces/openconfig-interfaces.yang -// Include paths: -// - ../yang-models/models/... - -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.25.0-devel -// protoc v3.13.0 -// source: openconfig/enums/enums.proto - -package gosdn - -import ( - proto "github.com/golang/protobuf/proto" - _ "github.com/openconfig/ygot/proto/yext" - _ "github.com/openconfig/ygot/proto/ywrapper" - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -// This is a compile-time assertion that a sufficiently up-to-date version -// of the legacy proto package is being used. -const _ = proto.ProtoPackageIsVersion4 - -// IETFInterfacesInterfaceType represents an enumerated type generated for the YANG identity interface-type. -type IETFInterfacesInterfaceType int32 - -const ( - IETFInterfacesInterfaceType_IETFINTERFACESINTERFACETYPE_UNSET IETFInterfacesInterfaceType = 0 -) - -// Enum value maps for IETFInterfacesInterfaceType. -var ( - IETFInterfacesInterfaceType_name = map[int32]string{ - 0: "IETFINTERFACESINTERFACETYPE_UNSET", - } - IETFInterfacesInterfaceType_value = map[string]int32{ - "IETFINTERFACESINTERFACETYPE_UNSET": 0, - } -) - -func (x IETFInterfacesInterfaceType) Enum() *IETFInterfacesInterfaceType { - p := new(IETFInterfacesInterfaceType) - *p = x - return p -} - -func (x IETFInterfacesInterfaceType) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (IETFInterfacesInterfaceType) Descriptor() protoreflect.EnumDescriptor { - return file_openconfig_enums_enums_proto_enumTypes[0].Descriptor() -} - -func (IETFInterfacesInterfaceType) Type() protoreflect.EnumType { - return &file_openconfig_enums_enums_proto_enumTypes[0] -} - -func (x IETFInterfacesInterfaceType) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use IETFInterfacesInterfaceType.Descriptor instead. -func (IETFInterfacesInterfaceType) EnumDescriptor() ([]byte, []int) { - return file_openconfig_enums_enums_proto_rawDescGZIP(), []int{0} -} - -var File_openconfig_enums_enums_proto protoreflect.FileDescriptor - -var file_openconfig_enums_enums_proto_rawDesc = []byte{ - 0x0a, 0x1c, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x65, 0x6e, 0x75, - 0x6d, 0x73, 0x2f, 0x65, 0x6e, 0x75, 0x6d, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x10, - 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x65, 0x6e, 0x75, 0x6d, 0x73, - 0x1a, 0x38, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, - 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x79, 0x67, 0x6f, 0x74, 0x2f, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2f, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2f, 0x79, 0x77, 0x72, 0x61, - 0x70, 0x70, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x30, 0x67, 0x69, 0x74, 0x68, - 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x2f, 0x79, 0x67, 0x6f, 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x79, 0x65, 0x78, - 0x74, 0x2f, 0x79, 0x65, 0x78, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2a, 0x44, 0x0a, 0x1b, - 0x49, 0x45, 0x54, 0x46, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x49, 0x6e, - 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x25, 0x0a, 0x21, 0x49, - 0x45, 0x54, 0x46, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x46, 0x41, 0x43, 0x45, 0x53, 0x49, 0x4e, 0x54, - 0x45, 0x52, 0x46, 0x41, 0x43, 0x45, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x45, 0x54, - 0x10, 0x00, 0x42, 0x20, 0x5a, 0x1e, 0x67, 0x69, 0x74, 0x6c, 0x61, 0x62, 0x2e, 0x66, 0x62, 0x69, - 0x2e, 0x68, 0x2d, 0x64, 0x61, 0x2e, 0x64, 0x65, 0x2f, 0x63, 0x6f, 0x63, 0x73, 0x6e, 0x2f, 0x67, - 0x6f, 0x73, 0x64, 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_openconfig_enums_enums_proto_rawDescOnce sync.Once - file_openconfig_enums_enums_proto_rawDescData = file_openconfig_enums_enums_proto_rawDesc -) - -func file_openconfig_enums_enums_proto_rawDescGZIP() []byte { - file_openconfig_enums_enums_proto_rawDescOnce.Do(func() { - file_openconfig_enums_enums_proto_rawDescData = protoimpl.X.CompressGZIP(file_openconfig_enums_enums_proto_rawDescData) - }) - return file_openconfig_enums_enums_proto_rawDescData -} - -var file_openconfig_enums_enums_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_openconfig_enums_enums_proto_goTypes = []interface{}{ - (IETFInterfacesInterfaceType)(0), // 0: openconfig.enums.IETFInterfacesInterfaceType -} -var file_openconfig_enums_enums_proto_depIdxs = []int32{ - 0, // [0:0] is the sub-list for method output_type - 0, // [0:0] is the sub-list for method input_type - 0, // [0:0] is the sub-list for extension type_name - 0, // [0:0] is the sub-list for extension extendee - 0, // [0:0] is the sub-list for field type_name -} - -func init() { file_openconfig_enums_enums_proto_init() } -func file_openconfig_enums_enums_proto_init() { - if File_openconfig_enums_enums_proto != nil { - return - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_openconfig_enums_enums_proto_rawDesc, - NumEnums: 1, - NumMessages: 0, - NumExtensions: 0, - NumServices: 0, - }, - GoTypes: file_openconfig_enums_enums_proto_goTypes, - DependencyIndexes: file_openconfig_enums_enums_proto_depIdxs, - EnumInfos: file_openconfig_enums_enums_proto_enumTypes, - }.Build() - File_openconfig_enums_enums_proto = out.File - file_openconfig_enums_enums_proto_rawDesc = nil - file_openconfig_enums_enums_proto_goTypes = nil - file_openconfig_enums_enums_proto_depIdxs = nil -} diff --git a/api/proto/gitlab.fbi.h-da.de/cocsn/gosdn/openconfig.pb.go b/api/proto/gitlab.fbi.h-da.de/cocsn/gosdn/openconfig.pb.go deleted file mode 100644 index fda5833bb..000000000 --- a/api/proto/gitlab.fbi.h-da.de/cocsn/gosdn/openconfig.pb.go +++ /dev/null @@ -1,177 +0,0 @@ -// openconfig is generated by proto_generator as a protobuf -// representation of a YANG schema. -// -// Input schema modules: -// - ../yang-models/models/openconfig/release/models/interfaces/openconfig-interfaces.yang -// Include paths: -// - ../yang-models/models/... - -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.25.0-devel -// protoc v3.13.0 -// source: openconfig/openconfig.proto - -package gosdn - -import ( - proto "github.com/golang/protobuf/proto" - _ "github.com/openconfig/ygot/proto/yext" - _ "github.com/openconfig/ygot/proto/ywrapper" - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -// This is a compile-time assertion that a sufficiently up-to-date version -// of the legacy proto package is being used. -const _ = proto.ProtoPackageIsVersion4 - -type Device struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Interfaces *Interfaces `protobuf:"bytes,85031486,opt,name=interfaces,proto3" json:"interfaces,omitempty"` -} - -func (x *Device) Reset() { - *x = Device{} - if protoimpl.UnsafeEnabled { - mi := &file_openconfig_openconfig_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Device) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Device) ProtoMessage() {} - -func (x *Device) ProtoReflect() protoreflect.Message { - mi := &file_openconfig_openconfig_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Device.ProtoReflect.Descriptor instead. -func (*Device) Descriptor() ([]byte, []int) { - return file_openconfig_openconfig_proto_rawDescGZIP(), []int{0} -} - -func (x *Device) GetInterfaces() *Interfaces { - if x != nil { - return x.Interfaces - } - return nil -} - -var File_openconfig_openconfig_proto protoreflect.FileDescriptor - -var file_openconfig_openconfig_proto_rawDesc = []byte{ - 0x0a, 0x1b, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x6f, 0x70, 0x65, - 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0a, 0x6f, - 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x1a, 0x38, 0x67, 0x69, 0x74, 0x68, 0x75, - 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x2f, 0x79, 0x67, 0x6f, 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x79, 0x77, 0x72, 0x61, - 0x70, 0x70, 0x65, 0x72, 0x2f, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x1a, 0x30, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, - 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x79, 0x67, 0x6f, 0x74, 0x2f, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x79, 0x65, 0x78, 0x74, 0x2f, 0x79, 0x65, 0x78, 0x74, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x3c, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x22, 0x69, 0x0a, 0x06, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x12, 0x5f, 0x0a, - 0x0a, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x18, 0xbe, 0xf4, 0xc5, 0x28, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, - 0x65, 0x73, 0x42, 0x0e, 0x82, 0x41, 0x0b, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, - 0x65, 0x73, 0x52, 0x0a, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x42, 0x20, - 0x5a, 0x1e, 0x67, 0x69, 0x74, 0x6c, 0x61, 0x62, 0x2e, 0x66, 0x62, 0x69, 0x2e, 0x68, 0x2d, 0x64, - 0x61, 0x2e, 0x64, 0x65, 0x2f, 0x63, 0x6f, 0x63, 0x73, 0x6e, 0x2f, 0x67, 0x6f, 0x73, 0x64, 0x6e, - 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_openconfig_openconfig_proto_rawDescOnce sync.Once - file_openconfig_openconfig_proto_rawDescData = file_openconfig_openconfig_proto_rawDesc -) - -func file_openconfig_openconfig_proto_rawDescGZIP() []byte { - file_openconfig_openconfig_proto_rawDescOnce.Do(func() { - file_openconfig_openconfig_proto_rawDescData = protoimpl.X.CompressGZIP(file_openconfig_openconfig_proto_rawDescData) - }) - return file_openconfig_openconfig_proto_rawDescData -} - -var file_openconfig_openconfig_proto_msgTypes = make([]protoimpl.MessageInfo, 1) -var file_openconfig_openconfig_proto_goTypes = []interface{}{ - (*Device)(nil), // 0: openconfig.Device - (*Interfaces)(nil), // 1: openconfig.openconfig_interfaces.Interfaces -} -var file_openconfig_openconfig_proto_depIdxs = []int32{ - 1, // 0: openconfig.Device.interfaces:type_name -> openconfig.openconfig_interfaces.Interfaces - 1, // [1:1] is the sub-list for method output_type - 1, // [1:1] is the sub-list for method input_type - 1, // [1:1] is the sub-list for extension type_name - 1, // [1:1] is the sub-list for extension extendee - 0, // [0:1] is the sub-list for field type_name -} - -func init() { file_openconfig_openconfig_proto_init() } -func file_openconfig_openconfig_proto_init() { - if File_openconfig_openconfig_proto != nil { - return - } - file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_init() - if !protoimpl.UnsafeEnabled { - file_openconfig_openconfig_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Device); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_openconfig_openconfig_proto_rawDesc, - NumEnums: 0, - NumMessages: 1, - NumExtensions: 0, - NumServices: 0, - }, - GoTypes: file_openconfig_openconfig_proto_goTypes, - DependencyIndexes: file_openconfig_openconfig_proto_depIdxs, - MessageInfos: file_openconfig_openconfig_proto_msgTypes, - }.Build() - File_openconfig_openconfig_proto = out.File - file_openconfig_openconfig_proto_rawDesc = nil - file_openconfig_openconfig_proto_goTypes = nil - file_openconfig_openconfig_proto_depIdxs = nil -} diff --git a/api/proto/gitlab.fbi.h-da.de/cocsn/gosdn/openconfig_interfaces.pb.go b/api/proto/gitlab.fbi.h-da.de/cocsn/gosdn/openconfig_interfaces.pb.go deleted file mode 100644 index 9802a14b7..000000000 --- a/api/proto/gitlab.fbi.h-da.de/cocsn/gosdn/openconfig_interfaces.pb.go +++ /dev/null @@ -1,2622 +0,0 @@ -// openconfig.openconfig_interfaces is generated by proto_generator as a protobuf -// representation of a YANG schema. -// -// Input schema modules: -// - ../yang-models/models/openconfig/release/models/interfaces/openconfig-interfaces.yang -// Include paths: -// - ../yang-models/models/... - -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.25.0-devel -// protoc v3.13.0 -// source: openconfig/openconfig_interfaces/openconfig_interfaces.proto - -package gosdn - -import ( - proto "github.com/golang/protobuf/proto" - _ "github.com/openconfig/ygot/proto/yext" - ywrapper "github.com/openconfig/ygot/proto/ywrapper" - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -// This is a compile-time assertion that a sufficiently up-to-date version -// of the legacy proto package is being used. -const _ = proto.ProtoPackageIsVersion4 - -type Interfaces_Interface_State_AdminStatus int32 - -const ( - Interfaces_Interface_State_ADMINSTATUS_UNSET Interfaces_Interface_State_AdminStatus = 0 - Interfaces_Interface_State_ADMINSTATUS_UP Interfaces_Interface_State_AdminStatus = 1 - Interfaces_Interface_State_ADMINSTATUS_DOWN Interfaces_Interface_State_AdminStatus = 2 - Interfaces_Interface_State_ADMINSTATUS_TESTING Interfaces_Interface_State_AdminStatus = 3 -) - -// Enum value maps for Interfaces_Interface_State_AdminStatus. -var ( - Interfaces_Interface_State_AdminStatus_name = map[int32]string{ - 0: "ADMINSTATUS_UNSET", - 1: "ADMINSTATUS_UP", - 2: "ADMINSTATUS_DOWN", - 3: "ADMINSTATUS_TESTING", - } - Interfaces_Interface_State_AdminStatus_value = map[string]int32{ - "ADMINSTATUS_UNSET": 0, - "ADMINSTATUS_UP": 1, - "ADMINSTATUS_DOWN": 2, - "ADMINSTATUS_TESTING": 3, - } -) - -func (x Interfaces_Interface_State_AdminStatus) Enum() *Interfaces_Interface_State_AdminStatus { - p := new(Interfaces_Interface_State_AdminStatus) - *p = x - return p -} - -func (x Interfaces_Interface_State_AdminStatus) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (Interfaces_Interface_State_AdminStatus) Descriptor() protoreflect.EnumDescriptor { - return file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_enumTypes[0].Descriptor() -} - -func (Interfaces_Interface_State_AdminStatus) Type() protoreflect.EnumType { - return &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_enumTypes[0] -} - -func (x Interfaces_Interface_State_AdminStatus) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use Interfaces_Interface_State_AdminStatus.Descriptor instead. -func (Interfaces_Interface_State_AdminStatus) EnumDescriptor() ([]byte, []int) { - return file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescGZIP(), []int{0, 0, 2, 0} -} - -type Interfaces_Interface_State_OperStatus int32 - -const ( - Interfaces_Interface_State_OPERSTATUS_UNSET Interfaces_Interface_State_OperStatus = 0 - Interfaces_Interface_State_OPERSTATUS_UP Interfaces_Interface_State_OperStatus = 2 - Interfaces_Interface_State_OPERSTATUS_DOWN Interfaces_Interface_State_OperStatus = 3 - Interfaces_Interface_State_OPERSTATUS_TESTING Interfaces_Interface_State_OperStatus = 4 - Interfaces_Interface_State_OPERSTATUS_UNKNOWN Interfaces_Interface_State_OperStatus = 5 - Interfaces_Interface_State_OPERSTATUS_DORMANT Interfaces_Interface_State_OperStatus = 6 - Interfaces_Interface_State_OPERSTATUS_NOT_PRESENT Interfaces_Interface_State_OperStatus = 7 - Interfaces_Interface_State_OPERSTATUS_LOWER_LAYER_DOWN Interfaces_Interface_State_OperStatus = 8 -) - -// Enum value maps for Interfaces_Interface_State_OperStatus. -var ( - Interfaces_Interface_State_OperStatus_name = map[int32]string{ - 0: "OPERSTATUS_UNSET", - 2: "OPERSTATUS_UP", - 3: "OPERSTATUS_DOWN", - 4: "OPERSTATUS_TESTING", - 5: "OPERSTATUS_UNKNOWN", - 6: "OPERSTATUS_DORMANT", - 7: "OPERSTATUS_NOT_PRESENT", - 8: "OPERSTATUS_LOWER_LAYER_DOWN", - } - Interfaces_Interface_State_OperStatus_value = map[string]int32{ - "OPERSTATUS_UNSET": 0, - "OPERSTATUS_UP": 2, - "OPERSTATUS_DOWN": 3, - "OPERSTATUS_TESTING": 4, - "OPERSTATUS_UNKNOWN": 5, - "OPERSTATUS_DORMANT": 6, - "OPERSTATUS_NOT_PRESENT": 7, - "OPERSTATUS_LOWER_LAYER_DOWN": 8, - } -) - -func (x Interfaces_Interface_State_OperStatus) Enum() *Interfaces_Interface_State_OperStatus { - p := new(Interfaces_Interface_State_OperStatus) - *p = x - return p -} - -func (x Interfaces_Interface_State_OperStatus) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (Interfaces_Interface_State_OperStatus) Descriptor() protoreflect.EnumDescriptor { - return file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_enumTypes[1].Descriptor() -} - -func (Interfaces_Interface_State_OperStatus) Type() protoreflect.EnumType { - return &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_enumTypes[1] -} - -func (x Interfaces_Interface_State_OperStatus) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use Interfaces_Interface_State_OperStatus.Descriptor instead. -func (Interfaces_Interface_State_OperStatus) EnumDescriptor() ([]byte, []int) { - return file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescGZIP(), []int{0, 0, 2, 1} -} - -type Interfaces_Interface_Subinterfaces_Subinterface_State_AdminStatus int32 - -const ( - Interfaces_Interface_Subinterfaces_Subinterface_State_ADMINSTATUS_UNSET Interfaces_Interface_Subinterfaces_Subinterface_State_AdminStatus = 0 - Interfaces_Interface_Subinterfaces_Subinterface_State_ADMINSTATUS_UP Interfaces_Interface_Subinterfaces_Subinterface_State_AdminStatus = 1 - Interfaces_Interface_Subinterfaces_Subinterface_State_ADMINSTATUS_DOWN Interfaces_Interface_Subinterfaces_Subinterface_State_AdminStatus = 2 - Interfaces_Interface_Subinterfaces_Subinterface_State_ADMINSTATUS_TESTING Interfaces_Interface_Subinterfaces_Subinterface_State_AdminStatus = 3 -) - -// Enum value maps for Interfaces_Interface_Subinterfaces_Subinterface_State_AdminStatus. -var ( - Interfaces_Interface_Subinterfaces_Subinterface_State_AdminStatus_name = map[int32]string{ - 0: "ADMINSTATUS_UNSET", - 1: "ADMINSTATUS_UP", - 2: "ADMINSTATUS_DOWN", - 3: "ADMINSTATUS_TESTING", - } - Interfaces_Interface_Subinterfaces_Subinterface_State_AdminStatus_value = map[string]int32{ - "ADMINSTATUS_UNSET": 0, - "ADMINSTATUS_UP": 1, - "ADMINSTATUS_DOWN": 2, - "ADMINSTATUS_TESTING": 3, - } -) - -func (x Interfaces_Interface_Subinterfaces_Subinterface_State_AdminStatus) Enum() *Interfaces_Interface_Subinterfaces_Subinterface_State_AdminStatus { - p := new(Interfaces_Interface_Subinterfaces_Subinterface_State_AdminStatus) - *p = x - return p -} - -func (x Interfaces_Interface_Subinterfaces_Subinterface_State_AdminStatus) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (Interfaces_Interface_Subinterfaces_Subinterface_State_AdminStatus) Descriptor() protoreflect.EnumDescriptor { - return file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_enumTypes[2].Descriptor() -} - -func (Interfaces_Interface_Subinterfaces_Subinterface_State_AdminStatus) Type() protoreflect.EnumType { - return &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_enumTypes[2] -} - -func (x Interfaces_Interface_Subinterfaces_Subinterface_State_AdminStatus) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use Interfaces_Interface_Subinterfaces_Subinterface_State_AdminStatus.Descriptor instead. -func (Interfaces_Interface_Subinterfaces_Subinterface_State_AdminStatus) EnumDescriptor() ([]byte, []int) { - return file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescGZIP(), []int{0, 0, 3, 0, 1, 0} -} - -type Interfaces_Interface_Subinterfaces_Subinterface_State_OperStatus int32 - -const ( - Interfaces_Interface_Subinterfaces_Subinterface_State_OPERSTATUS_UNSET Interfaces_Interface_Subinterfaces_Subinterface_State_OperStatus = 0 - Interfaces_Interface_Subinterfaces_Subinterface_State_OPERSTATUS_UP Interfaces_Interface_Subinterfaces_Subinterface_State_OperStatus = 2 - Interfaces_Interface_Subinterfaces_Subinterface_State_OPERSTATUS_DOWN Interfaces_Interface_Subinterfaces_Subinterface_State_OperStatus = 3 - Interfaces_Interface_Subinterfaces_Subinterface_State_OPERSTATUS_TESTING Interfaces_Interface_Subinterfaces_Subinterface_State_OperStatus = 4 - Interfaces_Interface_Subinterfaces_Subinterface_State_OPERSTATUS_UNKNOWN Interfaces_Interface_Subinterfaces_Subinterface_State_OperStatus = 5 - Interfaces_Interface_Subinterfaces_Subinterface_State_OPERSTATUS_DORMANT Interfaces_Interface_Subinterfaces_Subinterface_State_OperStatus = 6 - Interfaces_Interface_Subinterfaces_Subinterface_State_OPERSTATUS_NOT_PRESENT Interfaces_Interface_Subinterfaces_Subinterface_State_OperStatus = 7 - Interfaces_Interface_Subinterfaces_Subinterface_State_OPERSTATUS_LOWER_LAYER_DOWN Interfaces_Interface_Subinterfaces_Subinterface_State_OperStatus = 8 -) - -// Enum value maps for Interfaces_Interface_Subinterfaces_Subinterface_State_OperStatus. -var ( - Interfaces_Interface_Subinterfaces_Subinterface_State_OperStatus_name = map[int32]string{ - 0: "OPERSTATUS_UNSET", - 2: "OPERSTATUS_UP", - 3: "OPERSTATUS_DOWN", - 4: "OPERSTATUS_TESTING", - 5: "OPERSTATUS_UNKNOWN", - 6: "OPERSTATUS_DORMANT", - 7: "OPERSTATUS_NOT_PRESENT", - 8: "OPERSTATUS_LOWER_LAYER_DOWN", - } - Interfaces_Interface_Subinterfaces_Subinterface_State_OperStatus_value = map[string]int32{ - "OPERSTATUS_UNSET": 0, - "OPERSTATUS_UP": 2, - "OPERSTATUS_DOWN": 3, - "OPERSTATUS_TESTING": 4, - "OPERSTATUS_UNKNOWN": 5, - "OPERSTATUS_DORMANT": 6, - "OPERSTATUS_NOT_PRESENT": 7, - "OPERSTATUS_LOWER_LAYER_DOWN": 8, - } -) - -func (x Interfaces_Interface_Subinterfaces_Subinterface_State_OperStatus) Enum() *Interfaces_Interface_Subinterfaces_Subinterface_State_OperStatus { - p := new(Interfaces_Interface_Subinterfaces_Subinterface_State_OperStatus) - *p = x - return p -} - -func (x Interfaces_Interface_Subinterfaces_Subinterface_State_OperStatus) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (Interfaces_Interface_Subinterfaces_Subinterface_State_OperStatus) Descriptor() protoreflect.EnumDescriptor { - return file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_enumTypes[3].Descriptor() -} - -func (Interfaces_Interface_Subinterfaces_Subinterface_State_OperStatus) Type() protoreflect.EnumType { - return &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_enumTypes[3] -} - -func (x Interfaces_Interface_Subinterfaces_Subinterface_State_OperStatus) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use Interfaces_Interface_Subinterfaces_Subinterface_State_OperStatus.Descriptor instead. -func (Interfaces_Interface_Subinterfaces_Subinterface_State_OperStatus) EnumDescriptor() ([]byte, []int) { - return file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescGZIP(), []int{0, 0, 3, 0, 1, 1} -} - -type Interfaces struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Interface []*Interfaces_InterfaceKey `protobuf:"bytes,422482938,rep,name=interface,proto3" json:"interface,omitempty"` -} - -func (x *Interfaces) Reset() { - *x = Interfaces{} - if protoimpl.UnsafeEnabled { - mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Interfaces) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Interfaces) ProtoMessage() {} - -func (x *Interfaces) ProtoReflect() protoreflect.Message { - mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Interfaces.ProtoReflect.Descriptor instead. -func (*Interfaces) Descriptor() ([]byte, []int) { - return file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescGZIP(), []int{0} -} - -func (x *Interfaces) GetInterface() []*Interfaces_InterfaceKey { - if x != nil { - return x.Interface - } - return nil -} - -type Interfaces_Interface struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Config *Interfaces_Interface_Config `protobuf:"bytes,334174827,opt,name=config,proto3" json:"config,omitempty"` - HoldTime *Interfaces_Interface_HoldTime `protobuf:"bytes,175931092,opt,name=hold_time,json=holdTime,proto3" json:"hold_time,omitempty"` - State *Interfaces_Interface_State `protobuf:"bytes,387556140,opt,name=state,proto3" json:"state,omitempty"` - Subinterfaces *Interfaces_Interface_Subinterfaces `protobuf:"bytes,327798165,opt,name=subinterfaces,proto3" json:"subinterfaces,omitempty"` -} - -func (x *Interfaces_Interface) Reset() { - *x = Interfaces_Interface{} - if protoimpl.UnsafeEnabled { - mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Interfaces_Interface) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Interfaces_Interface) ProtoMessage() {} - -func (x *Interfaces_Interface) ProtoReflect() protoreflect.Message { - mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Interfaces_Interface.ProtoReflect.Descriptor instead. -func (*Interfaces_Interface) Descriptor() ([]byte, []int) { - return file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescGZIP(), []int{0, 0} -} - -func (x *Interfaces_Interface) GetConfig() *Interfaces_Interface_Config { - if x != nil { - return x.Config - } - return nil -} - -func (x *Interfaces_Interface) GetHoldTime() *Interfaces_Interface_HoldTime { - if x != nil { - return x.HoldTime - } - return nil -} - -func (x *Interfaces_Interface) GetState() *Interfaces_Interface_State { - if x != nil { - return x.State - } - return nil -} - -func (x *Interfaces_Interface) GetSubinterfaces() *Interfaces_Interface_Subinterfaces { - if x != nil { - return x.Subinterfaces - } - return nil -} - -type Interfaces_InterfaceKey struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Interface *Interfaces_Interface `protobuf:"bytes,2,opt,name=interface,proto3" json:"interface,omitempty"` -} - -func (x *Interfaces_InterfaceKey) Reset() { - *x = Interfaces_InterfaceKey{} - if protoimpl.UnsafeEnabled { - mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Interfaces_InterfaceKey) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Interfaces_InterfaceKey) ProtoMessage() {} - -func (x *Interfaces_InterfaceKey) ProtoReflect() protoreflect.Message { - mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Interfaces_InterfaceKey.ProtoReflect.Descriptor instead. -func (*Interfaces_InterfaceKey) Descriptor() ([]byte, []int) { - return file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescGZIP(), []int{0, 1} -} - -func (x *Interfaces_InterfaceKey) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *Interfaces_InterfaceKey) GetInterface() *Interfaces_Interface { - if x != nil { - return x.Interface - } - return nil -} - -type Interfaces_Interface_Config struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Description *ywrapper.StringValue `protobuf:"bytes,418535860,opt,name=description,proto3" json:"description,omitempty"` - Enabled *ywrapper.BoolValue `protobuf:"bytes,37224301,opt,name=enabled,proto3" json:"enabled,omitempty"` - LoopbackMode *ywrapper.BoolValue `protobuf:"bytes,253516347,opt,name=loopback_mode,json=loopbackMode,proto3" json:"loopback_mode,omitempty"` - Mtu *ywrapper.UintValue `protobuf:"bytes,376210342,opt,name=mtu,proto3" json:"mtu,omitempty"` - Name *ywrapper.StringValue `protobuf:"bytes,51804187,opt,name=name,proto3" json:"name,omitempty"` - Type IETFInterfacesInterfaceType `protobuf:"varint,144596894,opt,name=type,proto3,enum=openconfig.enums.IETFInterfacesInterfaceType" json:"type,omitempty"` -} - -func (x *Interfaces_Interface_Config) Reset() { - *x = Interfaces_Interface_Config{} - if protoimpl.UnsafeEnabled { - mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Interfaces_Interface_Config) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Interfaces_Interface_Config) ProtoMessage() {} - -func (x *Interfaces_Interface_Config) ProtoReflect() protoreflect.Message { - mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Interfaces_Interface_Config.ProtoReflect.Descriptor instead. -func (*Interfaces_Interface_Config) Descriptor() ([]byte, []int) { - return file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescGZIP(), []int{0, 0, 0} -} - -func (x *Interfaces_Interface_Config) GetDescription() *ywrapper.StringValue { - if x != nil { - return x.Description - } - return nil -} - -func (x *Interfaces_Interface_Config) GetEnabled() *ywrapper.BoolValue { - if x != nil { - return x.Enabled - } - return nil -} - -func (x *Interfaces_Interface_Config) GetLoopbackMode() *ywrapper.BoolValue { - if x != nil { - return x.LoopbackMode - } - return nil -} - -func (x *Interfaces_Interface_Config) GetMtu() *ywrapper.UintValue { - if x != nil { - return x.Mtu - } - return nil -} - -func (x *Interfaces_Interface_Config) GetName() *ywrapper.StringValue { - if x != nil { - return x.Name - } - return nil -} - -func (x *Interfaces_Interface_Config) GetType() IETFInterfacesInterfaceType { - if x != nil { - return x.Type - } - return IETFInterfacesInterfaceType_IETFINTERFACESINTERFACETYPE_UNSET -} - -type Interfaces_Interface_HoldTime struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Config *Interfaces_Interface_HoldTime_Config `protobuf:"bytes,316512729,opt,name=config,proto3" json:"config,omitempty"` - State *Interfaces_Interface_HoldTime_State `protobuf:"bytes,483010990,opt,name=state,proto3" json:"state,omitempty"` -} - -func (x *Interfaces_Interface_HoldTime) Reset() { - *x = Interfaces_Interface_HoldTime{} - if protoimpl.UnsafeEnabled { - mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Interfaces_Interface_HoldTime) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Interfaces_Interface_HoldTime) ProtoMessage() {} - -func (x *Interfaces_Interface_HoldTime) ProtoReflect() protoreflect.Message { - mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Interfaces_Interface_HoldTime.ProtoReflect.Descriptor instead. -func (*Interfaces_Interface_HoldTime) Descriptor() ([]byte, []int) { - return file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescGZIP(), []int{0, 0, 1} -} - -func (x *Interfaces_Interface_HoldTime) GetConfig() *Interfaces_Interface_HoldTime_Config { - if x != nil { - return x.Config - } - return nil -} - -func (x *Interfaces_Interface_HoldTime) GetState() *Interfaces_Interface_HoldTime_State { - if x != nil { - return x.State - } - return nil -} - -type Interfaces_Interface_State struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - AdminStatus Interfaces_Interface_State_AdminStatus `protobuf:"varint,474494763,opt,name=admin_status,json=adminStatus,proto3,enum=openconfig.openconfig_interfaces.Interfaces_Interface_State_AdminStatus" json:"admin_status,omitempty"` - Counters *Interfaces_Interface_State_Counters `protobuf:"bytes,83645964,opt,name=counters,proto3" json:"counters,omitempty"` - Description *ywrapper.StringValue `protobuf:"bytes,389435287,opt,name=description,proto3" json:"description,omitempty"` - Enabled *ywrapper.BoolValue `protobuf:"bytes,330927518,opt,name=enabled,proto3" json:"enabled,omitempty"` - Ifindex *ywrapper.UintValue `protobuf:"bytes,116108202,opt,name=ifindex,proto3" json:"ifindex,omitempty"` - LastChange *ywrapper.UintValue `protobuf:"bytes,127348880,opt,name=last_change,json=lastChange,proto3" json:"last_change,omitempty"` - Logical *ywrapper.BoolValue `protobuf:"bytes,440460216,opt,name=logical,proto3" json:"logical,omitempty"` - LoopbackMode *ywrapper.BoolValue `protobuf:"bytes,372935512,opt,name=loopback_mode,json=loopbackMode,proto3" json:"loopback_mode,omitempty"` - Mtu *ywrapper.UintValue `protobuf:"bytes,96390485,opt,name=mtu,proto3" json:"mtu,omitempty"` - Name *ywrapper.StringValue `protobuf:"bytes,503495278,opt,name=name,proto3" json:"name,omitempty"` - OperStatus Interfaces_Interface_State_OperStatus `protobuf:"varint,470394226,opt,name=oper_status,json=operStatus,proto3,enum=openconfig.openconfig_interfaces.Interfaces_Interface_State_OperStatus" json:"oper_status,omitempty"` - Type IETFInterfacesInterfaceType `protobuf:"varint,358148579,opt,name=type,proto3,enum=openconfig.enums.IETFInterfacesInterfaceType" json:"type,omitempty"` -} - -func (x *Interfaces_Interface_State) Reset() { - *x = Interfaces_Interface_State{} - if protoimpl.UnsafeEnabled { - mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Interfaces_Interface_State) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Interfaces_Interface_State) ProtoMessage() {} - -func (x *Interfaces_Interface_State) ProtoReflect() protoreflect.Message { - mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Interfaces_Interface_State.ProtoReflect.Descriptor instead. -func (*Interfaces_Interface_State) Descriptor() ([]byte, []int) { - return file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescGZIP(), []int{0, 0, 2} -} - -func (x *Interfaces_Interface_State) GetAdminStatus() Interfaces_Interface_State_AdminStatus { - if x != nil { - return x.AdminStatus - } - return Interfaces_Interface_State_ADMINSTATUS_UNSET -} - -func (x *Interfaces_Interface_State) GetCounters() *Interfaces_Interface_State_Counters { - if x != nil { - return x.Counters - } - return nil -} - -func (x *Interfaces_Interface_State) GetDescription() *ywrapper.StringValue { - if x != nil { - return x.Description - } - return nil -} - -func (x *Interfaces_Interface_State) GetEnabled() *ywrapper.BoolValue { - if x != nil { - return x.Enabled - } - return nil -} - -func (x *Interfaces_Interface_State) GetIfindex() *ywrapper.UintValue { - if x != nil { - return x.Ifindex - } - return nil -} - -func (x *Interfaces_Interface_State) GetLastChange() *ywrapper.UintValue { - if x != nil { - return x.LastChange - } - return nil -} - -func (x *Interfaces_Interface_State) GetLogical() *ywrapper.BoolValue { - if x != nil { - return x.Logical - } - return nil -} - -func (x *Interfaces_Interface_State) GetLoopbackMode() *ywrapper.BoolValue { - if x != nil { - return x.LoopbackMode - } - return nil -} - -func (x *Interfaces_Interface_State) GetMtu() *ywrapper.UintValue { - if x != nil { - return x.Mtu - } - return nil -} - -func (x *Interfaces_Interface_State) GetName() *ywrapper.StringValue { - if x != nil { - return x.Name - } - return nil -} - -func (x *Interfaces_Interface_State) GetOperStatus() Interfaces_Interface_State_OperStatus { - if x != nil { - return x.OperStatus - } - return Interfaces_Interface_State_OPERSTATUS_UNSET -} - -func (x *Interfaces_Interface_State) GetType() IETFInterfacesInterfaceType { - if x != nil { - return x.Type - } - return IETFInterfacesInterfaceType_IETFINTERFACESINTERFACETYPE_UNSET -} - -type Interfaces_Interface_Subinterfaces struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Subinterface []*Interfaces_Interface_Subinterfaces_SubinterfaceKey `protobuf:"bytes,464802819,rep,name=subinterface,proto3" json:"subinterface,omitempty"` -} - -func (x *Interfaces_Interface_Subinterfaces) Reset() { - *x = Interfaces_Interface_Subinterfaces{} - if protoimpl.UnsafeEnabled { - mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Interfaces_Interface_Subinterfaces) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Interfaces_Interface_Subinterfaces) ProtoMessage() {} - -func (x *Interfaces_Interface_Subinterfaces) ProtoReflect() protoreflect.Message { - mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Interfaces_Interface_Subinterfaces.ProtoReflect.Descriptor instead. -func (*Interfaces_Interface_Subinterfaces) Descriptor() ([]byte, []int) { - return file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescGZIP(), []int{0, 0, 3} -} - -func (x *Interfaces_Interface_Subinterfaces) GetSubinterface() []*Interfaces_Interface_Subinterfaces_SubinterfaceKey { - if x != nil { - return x.Subinterface - } - return nil -} - -type Interfaces_Interface_HoldTime_Config struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Down *ywrapper.UintValue `protobuf:"bytes,171181656,opt,name=down,proto3" json:"down,omitempty"` - Up *ywrapper.UintValue `protobuf:"bytes,62026235,opt,name=up,proto3" json:"up,omitempty"` -} - -func (x *Interfaces_Interface_HoldTime_Config) Reset() { - *x = Interfaces_Interface_HoldTime_Config{} - if protoimpl.UnsafeEnabled { - mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Interfaces_Interface_HoldTime_Config) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Interfaces_Interface_HoldTime_Config) ProtoMessage() {} - -func (x *Interfaces_Interface_HoldTime_Config) ProtoReflect() protoreflect.Message { - mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[7] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Interfaces_Interface_HoldTime_Config.ProtoReflect.Descriptor instead. -func (*Interfaces_Interface_HoldTime_Config) Descriptor() ([]byte, []int) { - return file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescGZIP(), []int{0, 0, 1, 0} -} - -func (x *Interfaces_Interface_HoldTime_Config) GetDown() *ywrapper.UintValue { - if x != nil { - return x.Down - } - return nil -} - -func (x *Interfaces_Interface_HoldTime_Config) GetUp() *ywrapper.UintValue { - if x != nil { - return x.Up - } - return nil -} - -type Interfaces_Interface_HoldTime_State struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Down *ywrapper.UintValue `protobuf:"bytes,167887721,opt,name=down,proto3" json:"down,omitempty"` - Up *ywrapper.UintValue `protobuf:"bytes,223847598,opt,name=up,proto3" json:"up,omitempty"` -} - -func (x *Interfaces_Interface_HoldTime_State) Reset() { - *x = Interfaces_Interface_HoldTime_State{} - if protoimpl.UnsafeEnabled { - mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[8] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Interfaces_Interface_HoldTime_State) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Interfaces_Interface_HoldTime_State) ProtoMessage() {} - -func (x *Interfaces_Interface_HoldTime_State) ProtoReflect() protoreflect.Message { - mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[8] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Interfaces_Interface_HoldTime_State.ProtoReflect.Descriptor instead. -func (*Interfaces_Interface_HoldTime_State) Descriptor() ([]byte, []int) { - return file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescGZIP(), []int{0, 0, 1, 1} -} - -func (x *Interfaces_Interface_HoldTime_State) GetDown() *ywrapper.UintValue { - if x != nil { - return x.Down - } - return nil -} - -func (x *Interfaces_Interface_HoldTime_State) GetUp() *ywrapper.UintValue { - if x != nil { - return x.Up - } - return nil -} - -type Interfaces_Interface_State_Counters struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - CarrierTransitions *ywrapper.UintValue `protobuf:"bytes,270803130,opt,name=carrier_transitions,json=carrierTransitions,proto3" json:"carrier_transitions,omitempty"` - InBroadcastPkts *ywrapper.UintValue `protobuf:"bytes,280201989,opt,name=in_broadcast_pkts,json=inBroadcastPkts,proto3" json:"in_broadcast_pkts,omitempty"` - InDiscards *ywrapper.UintValue `protobuf:"bytes,11979514,opt,name=in_discards,json=inDiscards,proto3" json:"in_discards,omitempty"` - InErrors *ywrapper.UintValue `protobuf:"bytes,456697578,opt,name=in_errors,json=inErrors,proto3" json:"in_errors,omitempty"` - InFcsErrors *ywrapper.UintValue `protobuf:"bytes,501559027,opt,name=in_fcs_errors,json=inFcsErrors,proto3" json:"in_fcs_errors,omitempty"` - InMulticastPkts *ywrapper.UintValue `protobuf:"bytes,113269128,opt,name=in_multicast_pkts,json=inMulticastPkts,proto3" json:"in_multicast_pkts,omitempty"` - InOctets *ywrapper.UintValue `protobuf:"bytes,333138891,opt,name=in_octets,json=inOctets,proto3" json:"in_octets,omitempty"` - InPkts *ywrapper.UintValue `protobuf:"bytes,412843491,opt,name=in_pkts,json=inPkts,proto3" json:"in_pkts,omitempty"` - InUnicastPkts *ywrapper.UintValue `protobuf:"bytes,272792307,opt,name=in_unicast_pkts,json=inUnicastPkts,proto3" json:"in_unicast_pkts,omitempty"` - InUnknownProtos *ywrapper.UintValue `protobuf:"bytes,241475497,opt,name=in_unknown_protos,json=inUnknownProtos,proto3" json:"in_unknown_protos,omitempty"` - LastClear *ywrapper.UintValue `protobuf:"bytes,186014919,opt,name=last_clear,json=lastClear,proto3" json:"last_clear,omitempty"` - OutBroadcastPkts *ywrapper.UintValue `protobuf:"bytes,338589668,opt,name=out_broadcast_pkts,json=outBroadcastPkts,proto3" json:"out_broadcast_pkts,omitempty"` - OutDiscards *ywrapper.UintValue `protobuf:"bytes,254055111,opt,name=out_discards,json=outDiscards,proto3" json:"out_discards,omitempty"` - OutErrors *ywrapper.UintValue `protobuf:"bytes,471103047,opt,name=out_errors,json=outErrors,proto3" json:"out_errors,omitempty"` - OutMulticastPkts *ywrapper.UintValue `protobuf:"bytes,457840757,opt,name=out_multicast_pkts,json=outMulticastPkts,proto3" json:"out_multicast_pkts,omitempty"` - OutOctets *ywrapper.UintValue `protobuf:"bytes,201005514,opt,name=out_octets,json=outOctets,proto3" json:"out_octets,omitempty"` - OutPkts *ywrapper.UintValue `protobuf:"bytes,437582090,opt,name=out_pkts,json=outPkts,proto3" json:"out_pkts,omitempty"` - OutUnicastPkts *ywrapper.UintValue `protobuf:"bytes,36542246,opt,name=out_unicast_pkts,json=outUnicastPkts,proto3" json:"out_unicast_pkts,omitempty"` -} - -func (x *Interfaces_Interface_State_Counters) Reset() { - *x = Interfaces_Interface_State_Counters{} - if protoimpl.UnsafeEnabled { - mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[9] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Interfaces_Interface_State_Counters) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Interfaces_Interface_State_Counters) ProtoMessage() {} - -func (x *Interfaces_Interface_State_Counters) ProtoReflect() protoreflect.Message { - mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[9] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Interfaces_Interface_State_Counters.ProtoReflect.Descriptor instead. -func (*Interfaces_Interface_State_Counters) Descriptor() ([]byte, []int) { - return file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescGZIP(), []int{0, 0, 2, 0} -} - -func (x *Interfaces_Interface_State_Counters) GetCarrierTransitions() *ywrapper.UintValue { - if x != nil { - return x.CarrierTransitions - } - return nil -} - -func (x *Interfaces_Interface_State_Counters) GetInBroadcastPkts() *ywrapper.UintValue { - if x != nil { - return x.InBroadcastPkts - } - return nil -} - -func (x *Interfaces_Interface_State_Counters) GetInDiscards() *ywrapper.UintValue { - if x != nil { - return x.InDiscards - } - return nil -} - -func (x *Interfaces_Interface_State_Counters) GetInErrors() *ywrapper.UintValue { - if x != nil { - return x.InErrors - } - return nil -} - -func (x *Interfaces_Interface_State_Counters) GetInFcsErrors() *ywrapper.UintValue { - if x != nil { - return x.InFcsErrors - } - return nil -} - -func (x *Interfaces_Interface_State_Counters) GetInMulticastPkts() *ywrapper.UintValue { - if x != nil { - return x.InMulticastPkts - } - return nil -} - -func (x *Interfaces_Interface_State_Counters) GetInOctets() *ywrapper.UintValue { - if x != nil { - return x.InOctets - } - return nil -} - -func (x *Interfaces_Interface_State_Counters) GetInPkts() *ywrapper.UintValue { - if x != nil { - return x.InPkts - } - return nil -} - -func (x *Interfaces_Interface_State_Counters) GetInUnicastPkts() *ywrapper.UintValue { - if x != nil { - return x.InUnicastPkts - } - return nil -} - -func (x *Interfaces_Interface_State_Counters) GetInUnknownProtos() *ywrapper.UintValue { - if x != nil { - return x.InUnknownProtos - } - return nil -} - -func (x *Interfaces_Interface_State_Counters) GetLastClear() *ywrapper.UintValue { - if x != nil { - return x.LastClear - } - return nil -} - -func (x *Interfaces_Interface_State_Counters) GetOutBroadcastPkts() *ywrapper.UintValue { - if x != nil { - return x.OutBroadcastPkts - } - return nil -} - -func (x *Interfaces_Interface_State_Counters) GetOutDiscards() *ywrapper.UintValue { - if x != nil { - return x.OutDiscards - } - return nil -} - -func (x *Interfaces_Interface_State_Counters) GetOutErrors() *ywrapper.UintValue { - if x != nil { - return x.OutErrors - } - return nil -} - -func (x *Interfaces_Interface_State_Counters) GetOutMulticastPkts() *ywrapper.UintValue { - if x != nil { - return x.OutMulticastPkts - } - return nil -} - -func (x *Interfaces_Interface_State_Counters) GetOutOctets() *ywrapper.UintValue { - if x != nil { - return x.OutOctets - } - return nil -} - -func (x *Interfaces_Interface_State_Counters) GetOutPkts() *ywrapper.UintValue { - if x != nil { - return x.OutPkts - } - return nil -} - -func (x *Interfaces_Interface_State_Counters) GetOutUnicastPkts() *ywrapper.UintValue { - if x != nil { - return x.OutUnicastPkts - } - return nil -} - -type Interfaces_Interface_Subinterfaces_Subinterface struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Config *Interfaces_Interface_Subinterfaces_Subinterface_Config `protobuf:"bytes,175001476,opt,name=config,proto3" json:"config,omitempty"` - State *Interfaces_Interface_Subinterfaces_Subinterface_State `protobuf:"bytes,501974173,opt,name=state,proto3" json:"state,omitempty"` -} - -func (x *Interfaces_Interface_Subinterfaces_Subinterface) Reset() { - *x = Interfaces_Interface_Subinterfaces_Subinterface{} - if protoimpl.UnsafeEnabled { - mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[10] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Interfaces_Interface_Subinterfaces_Subinterface) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Interfaces_Interface_Subinterfaces_Subinterface) ProtoMessage() {} - -func (x *Interfaces_Interface_Subinterfaces_Subinterface) ProtoReflect() protoreflect.Message { - mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[10] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Interfaces_Interface_Subinterfaces_Subinterface.ProtoReflect.Descriptor instead. -func (*Interfaces_Interface_Subinterfaces_Subinterface) Descriptor() ([]byte, []int) { - return file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescGZIP(), []int{0, 0, 3, 0} -} - -func (x *Interfaces_Interface_Subinterfaces_Subinterface) GetConfig() *Interfaces_Interface_Subinterfaces_Subinterface_Config { - if x != nil { - return x.Config - } - return nil -} - -func (x *Interfaces_Interface_Subinterfaces_Subinterface) GetState() *Interfaces_Interface_Subinterfaces_Subinterface_State { - if x != nil { - return x.State - } - return nil -} - -type Interfaces_Interface_Subinterfaces_SubinterfaceKey struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Index uint64 `protobuf:"varint,1,opt,name=index,proto3" json:"index,omitempty"` - Subinterface *Interfaces_Interface_Subinterfaces_Subinterface `protobuf:"bytes,2,opt,name=subinterface,proto3" json:"subinterface,omitempty"` -} - -func (x *Interfaces_Interface_Subinterfaces_SubinterfaceKey) Reset() { - *x = Interfaces_Interface_Subinterfaces_SubinterfaceKey{} - if protoimpl.UnsafeEnabled { - mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[11] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Interfaces_Interface_Subinterfaces_SubinterfaceKey) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Interfaces_Interface_Subinterfaces_SubinterfaceKey) ProtoMessage() {} - -func (x *Interfaces_Interface_Subinterfaces_SubinterfaceKey) ProtoReflect() protoreflect.Message { - mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[11] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Interfaces_Interface_Subinterfaces_SubinterfaceKey.ProtoReflect.Descriptor instead. -func (*Interfaces_Interface_Subinterfaces_SubinterfaceKey) Descriptor() ([]byte, []int) { - return file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescGZIP(), []int{0, 0, 3, 1} -} - -func (x *Interfaces_Interface_Subinterfaces_SubinterfaceKey) GetIndex() uint64 { - if x != nil { - return x.Index - } - return 0 -} - -func (x *Interfaces_Interface_Subinterfaces_SubinterfaceKey) GetSubinterface() *Interfaces_Interface_Subinterfaces_Subinterface { - if x != nil { - return x.Subinterface - } - return nil -} - -type Interfaces_Interface_Subinterfaces_Subinterface_Config struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Description *ywrapper.StringValue `protobuf:"bytes,280671199,opt,name=description,proto3" json:"description,omitempty"` - Enabled *ywrapper.BoolValue `protobuf:"bytes,297236390,opt,name=enabled,proto3" json:"enabled,omitempty"` - Index *ywrapper.UintValue `protobuf:"bytes,279269781,opt,name=index,proto3" json:"index,omitempty"` -} - -func (x *Interfaces_Interface_Subinterfaces_Subinterface_Config) Reset() { - *x = Interfaces_Interface_Subinterfaces_Subinterface_Config{} - if protoimpl.UnsafeEnabled { - mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[12] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Interfaces_Interface_Subinterfaces_Subinterface_Config) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Interfaces_Interface_Subinterfaces_Subinterface_Config) ProtoMessage() {} - -func (x *Interfaces_Interface_Subinterfaces_Subinterface_Config) ProtoReflect() protoreflect.Message { - mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[12] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Interfaces_Interface_Subinterfaces_Subinterface_Config.ProtoReflect.Descriptor instead. -func (*Interfaces_Interface_Subinterfaces_Subinterface_Config) Descriptor() ([]byte, []int) { - return file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescGZIP(), []int{0, 0, 3, 0, 0} -} - -func (x *Interfaces_Interface_Subinterfaces_Subinterface_Config) GetDescription() *ywrapper.StringValue { - if x != nil { - return x.Description - } - return nil -} - -func (x *Interfaces_Interface_Subinterfaces_Subinterface_Config) GetEnabled() *ywrapper.BoolValue { - if x != nil { - return x.Enabled - } - return nil -} - -func (x *Interfaces_Interface_Subinterfaces_Subinterface_Config) GetIndex() *ywrapper.UintValue { - if x != nil { - return x.Index - } - return nil -} - -type Interfaces_Interface_Subinterfaces_Subinterface_State struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - AdminStatus Interfaces_Interface_Subinterfaces_Subinterface_State_AdminStatus `protobuf:"varint,250658952,opt,name=admin_status,json=adminStatus,proto3,enum=openconfig.openconfig_interfaces.Interfaces_Interface_Subinterfaces_Subinterface_State_AdminStatus" json:"admin_status,omitempty"` - Counters *Interfaces_Interface_Subinterfaces_Subinterface_State_Counters `protobuf:"bytes,483442783,opt,name=counters,proto3" json:"counters,omitempty"` - Description *ywrapper.StringValue `protobuf:"bytes,49943526,opt,name=description,proto3" json:"description,omitempty"` - Enabled *ywrapper.BoolValue `protobuf:"bytes,468513843,opt,name=enabled,proto3" json:"enabled,omitempty"` - Ifindex *ywrapper.UintValue `protobuf:"bytes,511987815,opt,name=ifindex,proto3" json:"ifindex,omitempty"` - Index *ywrapper.UintValue `protobuf:"bytes,80745756,opt,name=index,proto3" json:"index,omitempty"` - LastChange *ywrapper.UintValue `protobuf:"bytes,29904521,opt,name=last_change,json=lastChange,proto3" json:"last_change,omitempty"` - Logical *ywrapper.BoolValue `protobuf:"bytes,294124401,opt,name=logical,proto3" json:"logical,omitempty"` - Name *ywrapper.StringValue `protobuf:"bytes,279346681,opt,name=name,proto3" json:"name,omitempty"` - OperStatus Interfaces_Interface_Subinterfaces_Subinterface_State_OperStatus `protobuf:"varint,401969247,opt,name=oper_status,json=operStatus,proto3,enum=openconfig.openconfig_interfaces.Interfaces_Interface_Subinterfaces_Subinterface_State_OperStatus" json:"oper_status,omitempty"` -} - -func (x *Interfaces_Interface_Subinterfaces_Subinterface_State) Reset() { - *x = Interfaces_Interface_Subinterfaces_Subinterface_State{} - if protoimpl.UnsafeEnabled { - mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[13] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Interfaces_Interface_Subinterfaces_Subinterface_State) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Interfaces_Interface_Subinterfaces_Subinterface_State) ProtoMessage() {} - -func (x *Interfaces_Interface_Subinterfaces_Subinterface_State) ProtoReflect() protoreflect.Message { - mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[13] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Interfaces_Interface_Subinterfaces_Subinterface_State.ProtoReflect.Descriptor instead. -func (*Interfaces_Interface_Subinterfaces_Subinterface_State) Descriptor() ([]byte, []int) { - return file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescGZIP(), []int{0, 0, 3, 0, 1} -} - -func (x *Interfaces_Interface_Subinterfaces_Subinterface_State) GetAdminStatus() Interfaces_Interface_Subinterfaces_Subinterface_State_AdminStatus { - if x != nil { - return x.AdminStatus - } - return Interfaces_Interface_Subinterfaces_Subinterface_State_ADMINSTATUS_UNSET -} - -func (x *Interfaces_Interface_Subinterfaces_Subinterface_State) GetCounters() *Interfaces_Interface_Subinterfaces_Subinterface_State_Counters { - if x != nil { - return x.Counters - } - return nil -} - -func (x *Interfaces_Interface_Subinterfaces_Subinterface_State) GetDescription() *ywrapper.StringValue { - if x != nil { - return x.Description - } - return nil -} - -func (x *Interfaces_Interface_Subinterfaces_Subinterface_State) GetEnabled() *ywrapper.BoolValue { - if x != nil { - return x.Enabled - } - return nil -} - -func (x *Interfaces_Interface_Subinterfaces_Subinterface_State) GetIfindex() *ywrapper.UintValue { - if x != nil { - return x.Ifindex - } - return nil -} - -func (x *Interfaces_Interface_Subinterfaces_Subinterface_State) GetIndex() *ywrapper.UintValue { - if x != nil { - return x.Index - } - return nil -} - -func (x *Interfaces_Interface_Subinterfaces_Subinterface_State) GetLastChange() *ywrapper.UintValue { - if x != nil { - return x.LastChange - } - return nil -} - -func (x *Interfaces_Interface_Subinterfaces_Subinterface_State) GetLogical() *ywrapper.BoolValue { - if x != nil { - return x.Logical - } - return nil -} - -func (x *Interfaces_Interface_Subinterfaces_Subinterface_State) GetName() *ywrapper.StringValue { - if x != nil { - return x.Name - } - return nil -} - -func (x *Interfaces_Interface_Subinterfaces_Subinterface_State) GetOperStatus() Interfaces_Interface_Subinterfaces_Subinterface_State_OperStatus { - if x != nil { - return x.OperStatus - } - return Interfaces_Interface_Subinterfaces_Subinterface_State_OPERSTATUS_UNSET -} - -type Interfaces_Interface_Subinterfaces_Subinterface_State_Counters struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - CarrierTransitions *ywrapper.UintValue `protobuf:"bytes,141120277,opt,name=carrier_transitions,json=carrierTransitions,proto3" json:"carrier_transitions,omitempty"` - InBroadcastPkts *ywrapper.UintValue `protobuf:"bytes,120244022,opt,name=in_broadcast_pkts,json=inBroadcastPkts,proto3" json:"in_broadcast_pkts,omitempty"` - InDiscards *ywrapper.UintValue `protobuf:"bytes,307490461,opt,name=in_discards,json=inDiscards,proto3" json:"in_discards,omitempty"` - InErrors *ywrapper.UintValue `protobuf:"bytes,319720873,opt,name=in_errors,json=inErrors,proto3" json:"in_errors,omitempty"` - InFcsErrors *ywrapper.UintValue `protobuf:"bytes,169858424,opt,name=in_fcs_errors,json=inFcsErrors,proto3" json:"in_fcs_errors,omitempty"` - InMulticastPkts *ywrapper.UintValue `protobuf:"bytes,320618859,opt,name=in_multicast_pkts,json=inMulticastPkts,proto3" json:"in_multicast_pkts,omitempty"` - InOctets *ywrapper.UintValue `protobuf:"bytes,530205868,opt,name=in_octets,json=inOctets,proto3" json:"in_octets,omitempty"` - InPkts *ywrapper.UintValue `protobuf:"bytes,441153352,opt,name=in_pkts,json=inPkts,proto3" json:"in_pkts,omitempty"` - InUnicastPkts *ywrapper.UintValue `protobuf:"bytes,177838880,opt,name=in_unicast_pkts,json=inUnicastPkts,proto3" json:"in_unicast_pkts,omitempty"` - InUnknownProtos *ywrapper.UintValue `protobuf:"bytes,146059814,opt,name=in_unknown_protos,json=inUnknownProtos,proto3" json:"in_unknown_protos,omitempty"` - LastClear *ywrapper.UintValue `protobuf:"bytes,518046966,opt,name=last_clear,json=lastClear,proto3" json:"last_clear,omitempty"` - OutBroadcastPkts *ywrapper.UintValue `protobuf:"bytes,501221245,opt,name=out_broadcast_pkts,json=outBroadcastPkts,proto3" json:"out_broadcast_pkts,omitempty"` - OutDiscards *ywrapper.UintValue `protobuf:"bytes,159539762,opt,name=out_discards,json=outDiscards,proto3" json:"out_discards,omitempty"` - OutErrors *ywrapper.UintValue `protobuf:"bytes,466636898,opt,name=out_errors,json=outErrors,proto3" json:"out_errors,omitempty"` - OutMulticastPkts *ywrapper.UintValue `protobuf:"bytes,326155776,opt,name=out_multicast_pkts,json=outMulticastPkts,proto3" json:"out_multicast_pkts,omitempty"` - OutOctets *ywrapper.UintValue `protobuf:"bytes,50579235,opt,name=out_octets,json=outOctets,proto3" json:"out_octets,omitempty"` - OutPkts *ywrapper.UintValue `protobuf:"bytes,29497115,opt,name=out_pkts,json=outPkts,proto3" json:"out_pkts,omitempty"` - OutUnicastPkts *ywrapper.UintValue `protobuf:"bytes,297910971,opt,name=out_unicast_pkts,json=outUnicastPkts,proto3" json:"out_unicast_pkts,omitempty"` -} - -func (x *Interfaces_Interface_Subinterfaces_Subinterface_State_Counters) Reset() { - *x = Interfaces_Interface_Subinterfaces_Subinterface_State_Counters{} - if protoimpl.UnsafeEnabled { - mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[14] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Interfaces_Interface_Subinterfaces_Subinterface_State_Counters) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Interfaces_Interface_Subinterfaces_Subinterface_State_Counters) ProtoMessage() {} - -func (x *Interfaces_Interface_Subinterfaces_Subinterface_State_Counters) ProtoReflect() protoreflect.Message { - mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[14] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Interfaces_Interface_Subinterfaces_Subinterface_State_Counters.ProtoReflect.Descriptor instead. -func (*Interfaces_Interface_Subinterfaces_Subinterface_State_Counters) Descriptor() ([]byte, []int) { - return file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescGZIP(), []int{0, 0, 3, 0, 1, 0} -} - -func (x *Interfaces_Interface_Subinterfaces_Subinterface_State_Counters) GetCarrierTransitions() *ywrapper.UintValue { - if x != nil { - return x.CarrierTransitions - } - return nil -} - -func (x *Interfaces_Interface_Subinterfaces_Subinterface_State_Counters) GetInBroadcastPkts() *ywrapper.UintValue { - if x != nil { - return x.InBroadcastPkts - } - return nil -} - -func (x *Interfaces_Interface_Subinterfaces_Subinterface_State_Counters) GetInDiscards() *ywrapper.UintValue { - if x != nil { - return x.InDiscards - } - return nil -} - -func (x *Interfaces_Interface_Subinterfaces_Subinterface_State_Counters) GetInErrors() *ywrapper.UintValue { - if x != nil { - return x.InErrors - } - return nil -} - -func (x *Interfaces_Interface_Subinterfaces_Subinterface_State_Counters) GetInFcsErrors() *ywrapper.UintValue { - if x != nil { - return x.InFcsErrors - } - return nil -} - -func (x *Interfaces_Interface_Subinterfaces_Subinterface_State_Counters) GetInMulticastPkts() *ywrapper.UintValue { - if x != nil { - return x.InMulticastPkts - } - return nil -} - -func (x *Interfaces_Interface_Subinterfaces_Subinterface_State_Counters) GetInOctets() *ywrapper.UintValue { - if x != nil { - return x.InOctets - } - return nil -} - -func (x *Interfaces_Interface_Subinterfaces_Subinterface_State_Counters) GetInPkts() *ywrapper.UintValue { - if x != nil { - return x.InPkts - } - return nil -} - -func (x *Interfaces_Interface_Subinterfaces_Subinterface_State_Counters) GetInUnicastPkts() *ywrapper.UintValue { - if x != nil { - return x.InUnicastPkts - } - return nil -} - -func (x *Interfaces_Interface_Subinterfaces_Subinterface_State_Counters) GetInUnknownProtos() *ywrapper.UintValue { - if x != nil { - return x.InUnknownProtos - } - return nil -} - -func (x *Interfaces_Interface_Subinterfaces_Subinterface_State_Counters) GetLastClear() *ywrapper.UintValue { - if x != nil { - return x.LastClear - } - return nil -} - -func (x *Interfaces_Interface_Subinterfaces_Subinterface_State_Counters) GetOutBroadcastPkts() *ywrapper.UintValue { - if x != nil { - return x.OutBroadcastPkts - } - return nil -} - -func (x *Interfaces_Interface_Subinterfaces_Subinterface_State_Counters) GetOutDiscards() *ywrapper.UintValue { - if x != nil { - return x.OutDiscards - } - return nil -} - -func (x *Interfaces_Interface_Subinterfaces_Subinterface_State_Counters) GetOutErrors() *ywrapper.UintValue { - if x != nil { - return x.OutErrors - } - return nil -} - -func (x *Interfaces_Interface_Subinterfaces_Subinterface_State_Counters) GetOutMulticastPkts() *ywrapper.UintValue { - if x != nil { - return x.OutMulticastPkts - } - return nil -} - -func (x *Interfaces_Interface_Subinterfaces_Subinterface_State_Counters) GetOutOctets() *ywrapper.UintValue { - if x != nil { - return x.OutOctets - } - return nil -} - -func (x *Interfaces_Interface_Subinterfaces_Subinterface_State_Counters) GetOutPkts() *ywrapper.UintValue { - if x != nil { - return x.OutPkts - } - return nil -} - -func (x *Interfaces_Interface_Subinterfaces_Subinterface_State_Counters) GetOutUnicastPkts() *ywrapper.UintValue { - if x != nil { - return x.OutUnicastPkts - } - return nil -} - -var File_openconfig_openconfig_interfaces_openconfig_interfaces_proto protoreflect.FileDescriptor - -var file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDesc = []byte{ - 0x0a, 0x3c, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x6f, 0x70, 0x65, - 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, - 0x65, 0x73, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x20, - 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, - 0x1a, 0x38, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, - 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x79, 0x67, 0x6f, 0x74, 0x2f, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2f, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2f, 0x79, 0x77, 0x72, 0x61, - 0x70, 0x70, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x30, 0x67, 0x69, 0x74, 0x68, - 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x2f, 0x79, 0x67, 0x6f, 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x79, 0x65, 0x78, - 0x74, 0x2f, 0x79, 0x65, 0x78, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x6f, 0x70, - 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x65, 0x6e, 0x75, 0x6d, 0x73, 0x2f, 0x65, - 0x6e, 0x75, 0x6d, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xf3, 0x5a, 0x0a, 0x0a, 0x49, - 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x12, 0x75, 0x0a, 0x09, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x18, 0xfa, 0xa7, 0xba, 0xc9, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x39, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x6f, 0x70, - 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, - 0x63, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x49, - 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x4b, 0x65, 0x79, 0x42, 0x18, 0x82, 0x41, 0x15, - 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x66, 0x61, 0x63, 0x65, 0x52, 0x09, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, - 0x1a, 0xd3, 0x58, 0x0a, 0x09, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x12, 0x7a, - 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0xeb, 0xb4, 0xac, 0x9f, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, - 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, - 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x42, 0x1f, 0x82, 0x41, 0x1c, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, - 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x83, 0x01, 0x0a, 0x09, 0x68, - 0x6f, 0x6c, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0xd4, 0xfd, 0xf1, 0x53, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x3f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x6f, - 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, - 0x61, 0x63, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, - 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2e, 0x48, 0x6f, 0x6c, 0x64, 0x54, 0x69, - 0x6d, 0x65, 0x42, 0x22, 0x82, 0x41, 0x1f, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, - 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x68, 0x6f, 0x6c, - 0x64, 0x2d, 0x74, 0x69, 0x6d, 0x65, 0x52, 0x08, 0x68, 0x6f, 0x6c, 0x64, 0x54, 0x69, 0x6d, 0x65, - 0x12, 0x76, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0xac, 0xc6, 0xe6, 0xb8, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, - 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x42, 0x1e, 0x82, 0x41, 0x1b, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, - 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, - 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x96, 0x01, 0x0a, 0x0d, 0x73, 0x75, 0x62, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x18, 0x95, 0x9b, 0xa7, 0x9c, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x44, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, - 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2e, 0x53, 0x75, 0x62, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x42, 0x26, 0x82, 0x41, 0x23, 0x2f, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, - 0x65, 0x73, 0x52, 0x0d, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, - 0x73, 0x1a, 0xc9, 0x04, 0x0a, 0x06, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x68, 0x0a, 0x0b, - 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xb4, 0xb3, 0xc9, 0xc7, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, - 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x2b, 0x82, 0x41, - 0x28, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x64, 0x65, - 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x59, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, - 0x64, 0x18, 0xed, 0xfe, 0xdf, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, - 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, - 0x27, 0x82, 0x41, 0x24, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x2f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, - 0x64, 0x12, 0x6a, 0x0a, 0x0d, 0x6c, 0x6f, 0x6f, 0x70, 0x62, 0x61, 0x63, 0x6b, 0x5f, 0x6d, 0x6f, - 0x64, 0x65, 0x18, 0xbb, 0xb4, 0xf1, 0x78, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, - 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x42, 0x2d, 0x82, 0x41, 0x2a, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, - 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x2f, 0x6c, 0x6f, 0x6f, 0x70, 0x62, 0x61, 0x63, 0x6b, 0x2d, 0x6d, 0x6f, 0x64, 0x65, 0x52, - 0x0c, 0x6c, 0x6f, 0x6f, 0x70, 0x62, 0x61, 0x63, 0x6b, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x4e, 0x0a, - 0x03, 0x6d, 0x74, 0x75, 0x18, 0xa6, 0x87, 0xb2, 0xb3, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, - 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x42, 0x23, 0x82, 0x41, 0x20, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, - 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x6d, 0x74, 0x75, 0x52, 0x03, 0x6d, 0x74, 0x75, 0x12, 0x52, 0x0a, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x9b, 0xf0, 0xd9, 0x18, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, - 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x24, 0x82, 0x41, 0x21, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x52, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x12, 0x6a, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x9e, 0xbf, 0xf9, 0x44, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x2d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, - 0x65, 0x6e, 0x75, 0x6d, 0x73, 0x2e, 0x49, 0x45, 0x54, 0x46, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, - 0x61, 0x63, 0x65, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x54, 0x79, 0x70, - 0x65, 0x42, 0x24, 0x82, 0x41, 0x21, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, - 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x1a, 0x9d, 0x05, - 0x0a, 0x08, 0x48, 0x6f, 0x6c, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x8d, 0x01, 0x0a, 0x06, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0xd9, 0xb3, 0xf6, 0x96, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x46, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x6f, 0x70, 0x65, - 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, - 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x49, 0x6e, - 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2e, 0x48, 0x6f, 0x6c, 0x64, 0x54, 0x69, 0x6d, 0x65, - 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x42, 0x29, 0x82, 0x41, 0x26, 0x2f, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, - 0x65, 0x2f, 0x68, 0x6f, 0x6c, 0x64, 0x2d, 0x74, 0x69, 0x6d, 0x65, 0x2f, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x89, 0x01, 0x0a, 0x05, 0x73, - 0x74, 0x61, 0x74, 0x65, 0x18, 0xae, 0xd3, 0xa8, 0xe6, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x45, - 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x6f, 0x70, 0x65, 0x6e, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, - 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, - 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2e, 0x48, 0x6f, 0x6c, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x2e, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x42, 0x28, 0x82, 0x41, 0x25, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, - 0x68, 0x6f, 0x6c, 0x64, 0x2d, 0x74, 0x69, 0x6d, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x52, - 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x1a, 0xba, 0x01, 0x0a, 0x06, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x12, 0x5a, 0x0a, 0x04, 0x64, 0x6f, 0x77, 0x6e, 0x18, 0xd8, 0x8c, 0xd0, 0x51, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, - 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x2e, 0x82, 0x41, 0x2b, 0x2f, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, - 0x65, 0x2f, 0x68, 0x6f, 0x6c, 0x64, 0x2d, 0x74, 0x69, 0x6d, 0x65, 0x2f, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x2f, 0x64, 0x6f, 0x77, 0x6e, 0x52, 0x04, 0x64, 0x6f, 0x77, 0x6e, 0x12, 0x54, 0x0a, - 0x02, 0x75, 0x70, 0x18, 0xfb, 0xe3, 0xc9, 0x1d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, - 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x42, 0x2c, 0x82, 0x41, 0x29, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, - 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x68, 0x6f, 0x6c, 0x64, - 0x2d, 0x74, 0x69, 0x6d, 0x65, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x75, 0x70, 0x52, - 0x02, 0x75, 0x70, 0x1a, 0xb7, 0x01, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x59, 0x0a, - 0x04, 0x64, 0x6f, 0x77, 0x6e, 0x18, 0xe9, 0x86, 0x87, 0x50, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, - 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x42, 0x2d, 0x82, 0x41, 0x2a, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, - 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x68, 0x6f, - 0x6c, 0x64, 0x2d, 0x74, 0x69, 0x6d, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x64, 0x6f, - 0x77, 0x6e, 0x52, 0x04, 0x64, 0x6f, 0x77, 0x6e, 0x12, 0x53, 0x0a, 0x02, 0x75, 0x70, 0x18, 0xae, - 0xc9, 0xde, 0x6a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, - 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x2b, 0x82, 0x41, - 0x28, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x68, 0x6f, 0x6c, 0x64, 0x2d, 0x74, 0x69, 0x6d, 0x65, - 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x75, 0x70, 0x52, 0x02, 0x75, 0x70, 0x1a, 0x9b, 0x1e, - 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x9c, 0x01, 0x0a, 0x0c, 0x61, 0x64, 0x6d, 0x69, - 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0xab, 0xee, 0xa0, 0xe2, 0x01, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x48, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, - 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, - 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x2e, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x2b, 0x82, 0x41, - 0x28, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x61, 0x64, 0x6d, - 0x69, 0x6e, 0x2d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x0b, 0x61, 0x64, 0x6d, 0x69, 0x6e, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x8d, 0x01, 0x0a, 0x08, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x65, 0x72, 0x73, 0x18, 0x8c, 0xac, 0xf1, 0x27, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x6f, - 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, - 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, - 0x66, 0x61, 0x63, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x43, 0x6f, 0x75, 0x6e, 0x74, - 0x65, 0x72, 0x73, 0x42, 0x27, 0x82, 0x41, 0x24, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, - 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, - 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x52, 0x08, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x12, 0x67, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x97, 0x9f, 0xd9, 0xb9, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x15, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, - 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x2a, 0x82, 0x41, 0x27, 0x2f, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, - 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x59, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x9e, 0x9b, 0xe6, 0x9d, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, - 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x26, 0x82, 0x41, 0x23, 0x2f, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, - 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, - 0x64, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x58, 0x0a, 0x07, 0x69, 0x66, - 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0xaa, 0xd7, 0xae, 0x37, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, - 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x42, 0x26, 0x82, 0x41, 0x23, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, - 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, - 0x61, 0x74, 0x65, 0x2f, 0x69, 0x66, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x07, 0x69, 0x66, 0x69, - 0x6e, 0x64, 0x65, 0x78, 0x12, 0x63, 0x0a, 0x0b, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x63, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x18, 0x90, 0xe1, 0xdc, 0x3c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, - 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x42, 0x2a, 0x82, 0x41, 0x27, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, - 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, - 0x65, 0x2f, 0x6c, 0x61, 0x73, 0x74, 0x2d, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x0a, 0x6c, - 0x61, 0x73, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x59, 0x0a, 0x07, 0x6c, 0x6f, 0x67, - 0x69, 0x63, 0x61, 0x6c, 0x18, 0xb8, 0xc7, 0x83, 0xd2, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, - 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x42, 0x26, 0x82, 0x41, 0x23, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, - 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, - 0x61, 0x74, 0x65, 0x2f, 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x52, 0x07, 0x6c, 0x6f, 0x67, - 0x69, 0x63, 0x61, 0x6c, 0x12, 0x6a, 0x0a, 0x0d, 0x6c, 0x6f, 0x6f, 0x70, 0x62, 0x61, 0x63, 0x6b, - 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0xd8, 0x96, 0xea, 0xb1, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x42, 0x2c, 0x82, 0x41, 0x29, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, - 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, - 0x74, 0x61, 0x74, 0x65, 0x2f, 0x6c, 0x6f, 0x6f, 0x70, 0x62, 0x61, 0x63, 0x6b, 0x2d, 0x6d, 0x6f, - 0x64, 0x65, 0x52, 0x0c, 0x6c, 0x6f, 0x6f, 0x70, 0x62, 0x61, 0x63, 0x6b, 0x4d, 0x6f, 0x64, 0x65, - 0x12, 0x4c, 0x0a, 0x03, 0x6d, 0x74, 0x75, 0x18, 0xd5, 0x9a, 0xfb, 0x2d, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x22, 0x82, 0x41, 0x1f, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, - 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x6d, 0x74, 0x75, 0x52, 0x03, 0x6d, 0x74, 0x75, 0x12, 0x52, - 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0xee, 0xf4, 0x8a, 0xf0, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x15, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x72, 0x69, - 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x23, 0x82, 0x41, 0x20, 0x2f, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, - 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x52, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x12, 0x98, 0x01, 0x0a, 0x0b, 0x6f, 0x70, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x18, 0xf2, 0xca, 0xa6, 0xe0, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x47, 0x2e, 0x6f, - 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, - 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, - 0x66, 0x61, 0x63, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x2a, 0x82, 0x41, 0x27, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, - 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x6f, 0x70, 0x65, 0x72, 0x2d, 0x73, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x52, 0x0a, 0x6f, 0x70, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x6a, 0x0a, - 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0xe3, 0xd3, 0xe3, 0xaa, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x2d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x65, 0x6e, 0x75, - 0x6d, 0x73, 0x2e, 0x49, 0x45, 0x54, 0x46, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, - 0x73, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x42, 0x23, - 0x82, 0x41, 0x20, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x74, - 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x1a, 0xbe, 0x10, 0x0a, 0x08, 0x43, 0x6f, - 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x12, 0x85, 0x01, 0x0a, 0x13, 0x63, 0x61, 0x72, 0x72, 0x69, - 0x65, 0x72, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0xba, - 0xc1, 0x90, 0x81, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, - 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x3b, 0x82, - 0x41, 0x38, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x63, 0x61, 0x72, 0x72, 0x69, 0x65, 0x72, 0x2d, 0x74, - 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x12, 0x63, 0x61, 0x72, 0x72, - 0x69, 0x65, 0x72, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x7e, - 0x0a, 0x11, 0x69, 0x6e, 0x5f, 0x62, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x5f, 0x70, - 0x6b, 0x74, 0x73, 0x18, 0x85, 0x96, 0xce, 0x85, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, - 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x42, 0x39, 0x82, 0x41, 0x36, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, - 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, - 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x69, 0x6e, 0x2d, 0x62, - 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x2d, 0x70, 0x6b, 0x74, 0x73, 0x52, 0x0f, 0x69, - 0x6e, 0x42, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x50, 0x6b, 0x74, 0x73, 0x12, 0x6c, - 0x0a, 0x0b, 0x69, 0x6e, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x73, 0x18, 0xfa, 0x95, - 0xdb, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, - 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x33, 0x82, 0x41, 0x30, - 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x65, 0x72, 0x73, 0x2f, 0x69, 0x6e, 0x2d, 0x64, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x73, - 0x52, 0x0a, 0x69, 0x6e, 0x44, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x73, 0x12, 0x67, 0x0a, 0x09, - 0x69, 0x6e, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x18, 0xea, 0xcd, 0xe2, 0xd9, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, - 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x31, 0x82, 0x41, 0x2e, 0x2f, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, - 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, - 0x73, 0x2f, 0x69, 0x6e, 0x2d, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x52, 0x08, 0x69, 0x6e, 0x45, - 0x72, 0x72, 0x6f, 0x72, 0x73, 0x12, 0x72, 0x0a, 0x0d, 0x69, 0x6e, 0x5f, 0x66, 0x63, 0x73, 0x5f, - 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x18, 0xf3, 0xdd, 0x94, 0xef, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x35, 0x82, 0x41, 0x32, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, - 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x69, - 0x6e, 0x2d, 0x66, 0x63, 0x73, 0x2d, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x52, 0x0b, 0x69, 0x6e, - 0x46, 0x63, 0x73, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x12, 0x7d, 0x0a, 0x11, 0x69, 0x6e, 0x5f, - 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x5f, 0x70, 0x6b, 0x74, 0x73, 0x18, 0x88, - 0xb3, 0x81, 0x36, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, - 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x39, 0x82, 0x41, - 0x36, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x69, 0x6e, 0x2d, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, - 0x73, 0x74, 0x2d, 0x70, 0x6b, 0x74, 0x73, 0x52, 0x0f, 0x69, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, - 0x63, 0x61, 0x73, 0x74, 0x50, 0x6b, 0x74, 0x73, 0x12, 0x67, 0x0a, 0x09, 0x69, 0x6e, 0x5f, 0x6f, - 0x63, 0x74, 0x65, 0x74, 0x73, 0x18, 0xcb, 0x97, 0xed, 0x9e, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x42, 0x31, 0x82, 0x41, 0x2e, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, - 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, - 0x74, 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x69, 0x6e, - 0x2d, 0x6f, 0x63, 0x74, 0x65, 0x74, 0x73, 0x52, 0x08, 0x69, 0x6e, 0x4f, 0x63, 0x74, 0x65, 0x74, - 0x73, 0x12, 0x61, 0x0a, 0x07, 0x69, 0x6e, 0x5f, 0x70, 0x6b, 0x74, 0x73, 0x18, 0xe3, 0xfb, 0xed, - 0xc4, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, - 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x2f, 0x82, 0x41, 0x2c, - 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x65, 0x72, 0x73, 0x2f, 0x69, 0x6e, 0x2d, 0x70, 0x6b, 0x74, 0x73, 0x52, 0x06, 0x69, 0x6e, - 0x50, 0x6b, 0x74, 0x73, 0x12, 0x78, 0x0a, 0x0f, 0x69, 0x6e, 0x5f, 0x75, 0x6e, 0x69, 0x63, 0x61, - 0x73, 0x74, 0x5f, 0x70, 0x6b, 0x74, 0x73, 0x18, 0xf3, 0xf5, 0x89, 0x82, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, - 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x37, 0x82, 0x41, 0x34, 0x2f, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, - 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x2f, - 0x69, 0x6e, 0x2d, 0x75, 0x6e, 0x69, 0x63, 0x61, 0x73, 0x74, 0x2d, 0x70, 0x6b, 0x74, 0x73, 0x52, - 0x0d, 0x69, 0x6e, 0x55, 0x6e, 0x69, 0x63, 0x61, 0x73, 0x74, 0x50, 0x6b, 0x74, 0x73, 0x12, 0x7d, - 0x0a, 0x11, 0x69, 0x6e, 0x5f, 0x75, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x5f, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x73, 0x18, 0xa9, 0xbf, 0x92, 0x73, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, - 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x42, 0x39, 0x82, 0x41, 0x36, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, - 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, - 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x69, 0x6e, 0x2d, 0x75, 0x6e, - 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x2d, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x52, 0x0f, 0x69, 0x6e, - 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x12, 0x69, 0x0a, - 0x0a, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x18, 0xc7, 0xb9, 0xd9, 0x58, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, - 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x32, 0x82, 0x41, 0x2f, 0x2f, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, - 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, - 0x72, 0x73, 0x2f, 0x6c, 0x61, 0x73, 0x74, 0x2d, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x52, 0x09, 0x6c, - 0x61, 0x73, 0x74, 0x43, 0x6c, 0x65, 0x61, 0x72, 0x12, 0x81, 0x01, 0x0a, 0x12, 0x6f, 0x75, 0x74, - 0x5f, 0x62, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x5f, 0x70, 0x6b, 0x74, 0x73, 0x18, - 0xe4, 0xef, 0xb9, 0xa1, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, - 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x3a, - 0x82, 0x41, 0x37, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x6f, 0x75, 0x74, 0x2d, 0x62, 0x72, 0x6f, 0x61, - 0x64, 0x63, 0x61, 0x73, 0x74, 0x2d, 0x70, 0x6b, 0x74, 0x73, 0x52, 0x10, 0x6f, 0x75, 0x74, 0x42, - 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x50, 0x6b, 0x74, 0x73, 0x12, 0x6f, 0x0a, 0x0c, - 0x6f, 0x75, 0x74, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x73, 0x18, 0xc7, 0xa5, 0x92, - 0x79, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, - 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x34, 0x82, 0x41, 0x31, 0x2f, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x65, 0x72, 0x73, 0x2f, 0x6f, 0x75, 0x74, 0x2d, 0x64, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x73, - 0x52, 0x0b, 0x6f, 0x75, 0x74, 0x44, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x73, 0x12, 0x6a, 0x0a, - 0x0a, 0x6f, 0x75, 0x74, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x18, 0xc7, 0xec, 0xd1, 0xe0, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, - 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x32, 0x82, 0x41, 0x2f, 0x2f, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x65, 0x72, 0x73, 0x2f, 0x6f, 0x75, 0x74, 0x2d, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x52, 0x09, - 0x6f, 0x75, 0x74, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x12, 0x81, 0x01, 0x0a, 0x12, 0x6f, 0x75, - 0x74, 0x5f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x5f, 0x70, 0x6b, 0x74, 0x73, - 0x18, 0xf5, 0xb0, 0xa8, 0xda, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, - 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, - 0x3a, 0x82, 0x41, 0x37, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x6f, 0x75, 0x74, 0x2d, 0x6d, 0x75, 0x6c, - 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x2d, 0x70, 0x6b, 0x74, 0x73, 0x52, 0x10, 0x6f, 0x75, 0x74, - 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x50, 0x6b, 0x74, 0x73, 0x12, 0x69, 0x0a, - 0x0a, 0x6f, 0x75, 0x74, 0x5f, 0x6f, 0x63, 0x74, 0x65, 0x74, 0x73, 0x18, 0xca, 0xb3, 0xec, 0x5f, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, - 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x32, 0x82, 0x41, 0x2f, 0x2f, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, - 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, - 0x72, 0x73, 0x2f, 0x6f, 0x75, 0x74, 0x2d, 0x6f, 0x63, 0x74, 0x65, 0x74, 0x73, 0x52, 0x09, 0x6f, - 0x75, 0x74, 0x4f, 0x63, 0x74, 0x65, 0x74, 0x73, 0x12, 0x64, 0x0a, 0x08, 0x6f, 0x75, 0x74, 0x5f, - 0x70, 0x6b, 0x74, 0x73, 0x18, 0x8a, 0xf2, 0xd3, 0xd0, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, - 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x42, 0x30, 0x82, 0x41, 0x2d, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, - 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, - 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x6f, 0x75, 0x74, - 0x2d, 0x70, 0x6b, 0x74, 0x73, 0x52, 0x07, 0x6f, 0x75, 0x74, 0x50, 0x6b, 0x74, 0x73, 0x12, 0x7a, - 0x0a, 0x10, 0x6f, 0x75, 0x74, 0x5f, 0x75, 0x6e, 0x69, 0x63, 0x61, 0x73, 0x74, 0x5f, 0x70, 0x6b, - 0x74, 0x73, 0x18, 0xa6, 0xae, 0xb6, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, - 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x42, 0x38, 0x82, 0x41, 0x35, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, - 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, - 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x6f, 0x75, 0x74, 0x2d, 0x75, 0x6e, - 0x69, 0x63, 0x61, 0x73, 0x74, 0x2d, 0x70, 0x6b, 0x74, 0x73, 0x52, 0x0e, 0x6f, 0x75, 0x74, 0x55, - 0x6e, 0x69, 0x63, 0x61, 0x73, 0x74, 0x50, 0x6b, 0x74, 0x73, 0x22, 0x83, 0x01, 0x0a, 0x0b, 0x41, - 0x64, 0x6d, 0x69, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x15, 0x0a, 0x11, 0x41, 0x44, - 0x4d, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x45, 0x54, 0x10, - 0x00, 0x12, 0x19, 0x0a, 0x0e, 0x41, 0x44, 0x4d, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, - 0x5f, 0x55, 0x50, 0x10, 0x01, 0x1a, 0x05, 0x82, 0x41, 0x02, 0x55, 0x50, 0x12, 0x1d, 0x0a, 0x10, - 0x41, 0x44, 0x4d, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x44, 0x4f, 0x57, 0x4e, - 0x10, 0x02, 0x1a, 0x07, 0x82, 0x41, 0x04, 0x44, 0x4f, 0x57, 0x4e, 0x12, 0x23, 0x0a, 0x13, 0x41, - 0x44, 0x4d, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x54, 0x45, 0x53, 0x54, 0x49, - 0x4e, 0x47, 0x10, 0x03, 0x1a, 0x0a, 0x82, 0x41, 0x07, 0x54, 0x45, 0x53, 0x54, 0x49, 0x4e, 0x47, - 0x22, 0xa8, 0x02, 0x0a, 0x0a, 0x4f, 0x70, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, - 0x14, 0x0a, 0x10, 0x4f, 0x50, 0x45, 0x52, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, - 0x53, 0x45, 0x54, 0x10, 0x00, 0x12, 0x18, 0x0a, 0x0d, 0x4f, 0x50, 0x45, 0x52, 0x53, 0x54, 0x41, - 0x54, 0x55, 0x53, 0x5f, 0x55, 0x50, 0x10, 0x02, 0x1a, 0x05, 0x82, 0x41, 0x02, 0x55, 0x50, 0x12, - 0x1c, 0x0a, 0x0f, 0x4f, 0x50, 0x45, 0x52, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x44, 0x4f, - 0x57, 0x4e, 0x10, 0x03, 0x1a, 0x07, 0x82, 0x41, 0x04, 0x44, 0x4f, 0x57, 0x4e, 0x12, 0x22, 0x0a, - 0x12, 0x4f, 0x50, 0x45, 0x52, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x54, 0x45, 0x53, 0x54, - 0x49, 0x4e, 0x47, 0x10, 0x04, 0x1a, 0x0a, 0x82, 0x41, 0x07, 0x54, 0x45, 0x53, 0x54, 0x49, 0x4e, - 0x47, 0x12, 0x22, 0x0a, 0x12, 0x4f, 0x50, 0x45, 0x52, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, - 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x05, 0x1a, 0x0a, 0x82, 0x41, 0x07, 0x55, 0x4e, - 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x12, 0x22, 0x0a, 0x12, 0x4f, 0x50, 0x45, 0x52, 0x53, 0x54, 0x41, - 0x54, 0x55, 0x53, 0x5f, 0x44, 0x4f, 0x52, 0x4d, 0x41, 0x4e, 0x54, 0x10, 0x06, 0x1a, 0x0a, 0x82, - 0x41, 0x07, 0x44, 0x4f, 0x52, 0x4d, 0x41, 0x4e, 0x54, 0x12, 0x2a, 0x0a, 0x16, 0x4f, 0x50, 0x45, - 0x52, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x50, 0x52, 0x45, 0x53, - 0x45, 0x4e, 0x54, 0x10, 0x07, 0x1a, 0x0e, 0x82, 0x41, 0x0b, 0x4e, 0x4f, 0x54, 0x5f, 0x50, 0x52, - 0x45, 0x53, 0x45, 0x4e, 0x54, 0x12, 0x34, 0x0a, 0x1b, 0x4f, 0x50, 0x45, 0x52, 0x53, 0x54, 0x41, - 0x54, 0x55, 0x53, 0x5f, 0x4c, 0x4f, 0x57, 0x45, 0x52, 0x5f, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x5f, - 0x44, 0x4f, 0x57, 0x4e, 0x10, 0x08, 0x1a, 0x13, 0x82, 0x41, 0x10, 0x4c, 0x4f, 0x57, 0x45, 0x52, - 0x5f, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x5f, 0x44, 0x4f, 0x57, 0x4e, 0x1a, 0xa8, 0x2c, 0x0a, 0x0d, - 0x53, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x12, 0xb1, 0x01, - 0x0a, 0x0c, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x18, 0x83, - 0xa8, 0xd1, 0xdd, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x54, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, - 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, - 0x2e, 0x53, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x53, - 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x4b, 0x65, 0x79, 0x42, 0x33, - 0x82, 0x41, 0x30, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, - 0x61, 0x63, 0x65, 0x52, 0x0c, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, - 0x65, 0x1a, 0x86, 0x29, 0x0a, 0x0c, 0x53, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, - 0x63, 0x65, 0x12, 0xaf, 0x01, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x84, 0x9f, - 0xb9, 0x53, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x58, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, - 0x61, 0x63, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2e, 0x53, - 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x53, 0x75, 0x62, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x42, 0x3a, 0x82, 0x41, 0x37, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, - 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x12, 0xac, 0x01, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x9d, - 0x89, 0xae, 0xef, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x57, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, - 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, - 0x2e, 0x53, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x53, - 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x42, 0x39, 0x82, 0x41, 0x36, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, - 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, - 0x61, 0x74, 0x65, 0x1a, 0xf6, 0x02, 0x0a, 0x06, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x83, - 0x01, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xdf, - 0xe7, 0xea, 0x85, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, - 0x70, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, - 0x46, 0x82, 0x41, 0x43, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x66, 0x61, 0x63, 0x65, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x64, 0x65, 0x73, 0x63, - 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x75, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, - 0xa6, 0xef, 0xdd, 0x8d, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, - 0x70, 0x70, 0x65, 0x72, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x42, - 0x82, 0x41, 0x3f, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, - 0x61, 0x63, 0x65, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x65, 0x6e, 0x61, 0x62, 0x6c, - 0x65, 0x64, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x6f, 0x0a, 0x05, 0x69, - 0x6e, 0x64, 0x65, 0x78, 0x18, 0x95, 0xa3, 0x95, 0x85, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, - 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x42, 0x40, 0x82, 0x41, 0x3d, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, - 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, - 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, - 0x69, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x1a, 0x9b, 0x23, 0x0a, - 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0xd1, 0x01, 0x0a, 0x0c, 0x61, 0x64, 0x6d, 0x69, 0x6e, - 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x88, 0x81, 0xc3, 0x77, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x63, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x6f, 0x70, - 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, - 0x63, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x49, - 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2e, 0x53, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x53, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, - 0x61, 0x63, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x46, 0x82, 0x41, 0x43, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, - 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, - 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, - 0x2f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x0b, 0x61, - 0x64, 0x6d, 0x69, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0xc4, 0x01, 0x0a, 0x08, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x18, 0xdf, 0x80, 0xc3, 0xe6, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x60, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x6f, - 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, - 0x61, 0x63, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, - 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2e, 0x53, 0x75, 0x62, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x53, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x66, 0x61, 0x63, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x43, 0x6f, 0x75, 0x6e, 0x74, - 0x65, 0x72, 0x73, 0x42, 0x42, 0x82, 0x41, 0x3f, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, - 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, - 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x52, 0x08, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, - 0x73, 0x12, 0x81, 0x01, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x18, 0xe6, 0xa7, 0xe8, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x79, 0x77, 0x72, - 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x42, 0x45, 0x82, 0x41, 0x42, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, - 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x64, 0x65, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x74, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, - 0x18, 0xb3, 0xe8, 0xb3, 0xdf, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, - 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, - 0x41, 0x82, 0x41, 0x3e, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x65, 0x6e, 0x61, 0x62, 0x6c, - 0x65, 0x64, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x74, 0x0a, 0x07, 0x69, - 0x66, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0xe7, 0xa0, 0x91, 0xf4, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x41, 0x82, 0x41, 0x3e, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, - 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, - 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, - 0x2f, 0x69, 0x66, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x07, 0x69, 0x66, 0x69, 0x6e, 0x64, 0x65, - 0x78, 0x12, 0x6d, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x9c, 0xaa, 0xc0, 0x26, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, - 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x3f, 0x82, 0x41, 0x3c, 0x2f, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, - 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, - 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, - 0x61, 0x74, 0x65, 0x2f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, - 0x12, 0x7e, 0x0a, 0x0b, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x18, - 0x89, 0x9d, 0xa1, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, - 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x45, 0x82, - 0x41, 0x42, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, - 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x6c, 0x61, 0x73, 0x74, 0x2d, 0x63, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x52, 0x0a, 0x6c, 0x61, 0x73, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, - 0x12, 0x74, 0x0a, 0x07, 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x18, 0xf1, 0xf6, 0x9f, 0x8c, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, - 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x41, 0x82, 0x41, 0x3e, 0x2f, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, - 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, - 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x52, 0x07, 0x6c, - 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x12, 0x6d, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0xf9, - 0xfb, 0x99, 0x85, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, - 0x70, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, - 0x3e, 0x82, 0x41, 0x3b, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x52, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0xce, 0x01, 0x0a, 0x0b, 0x6f, 0x70, 0x65, 0x72, 0x5f, 0x73, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0xdf, 0xa0, 0xd6, 0xbf, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x62, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x6f, 0x70, 0x65, - 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, - 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x49, 0x6e, - 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2e, 0x53, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x53, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, - 0x63, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x42, 0x45, 0x82, 0x41, 0x42, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, - 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, - 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x6f, - 0x70, 0x65, 0x72, 0x2d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x0a, 0x6f, 0x70, 0x65, 0x72, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x1a, 0xb0, 0x14, 0x0a, 0x08, 0x43, 0x6f, 0x75, 0x6e, 0x74, - 0x65, 0x72, 0x73, 0x12, 0x9f, 0x01, 0x0a, 0x13, 0x63, 0x61, 0x72, 0x72, 0x69, 0x65, 0x72, 0x5f, - 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x95, 0xa6, 0xa5, 0x43, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, - 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x56, 0x82, 0x41, 0x53, 0x2f, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, - 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, - 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, - 0x74, 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x63, 0x61, - 0x72, 0x72, 0x69, 0x65, 0x72, 0x2d, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x52, 0x12, 0x63, 0x61, 0x72, 0x72, 0x69, 0x65, 0x72, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x98, 0x01, 0x0a, 0x11, 0x69, 0x6e, 0x5f, 0x62, 0x72, 0x6f, - 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x5f, 0x70, 0x6b, 0x74, 0x73, 0x18, 0xb6, 0x8e, 0xab, 0x39, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, - 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x54, 0x82, 0x41, 0x51, 0x2f, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, - 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, - 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, - 0x74, 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x69, 0x6e, - 0x2d, 0x62, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x2d, 0x70, 0x6b, 0x74, 0x73, 0x52, - 0x0f, 0x69, 0x6e, 0x42, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x50, 0x6b, 0x74, 0x73, - 0x12, 0x88, 0x01, 0x0a, 0x0b, 0x69, 0x6e, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x73, - 0x18, 0x9d, 0xdd, 0xcf, 0x92, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, - 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, - 0x4e, 0x82, 0x41, 0x4b, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x65, 0x72, 0x73, 0x2f, 0x69, 0x6e, 0x2d, 0x64, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x73, 0x52, - 0x0a, 0x69, 0x6e, 0x44, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x73, 0x12, 0x82, 0x01, 0x0a, 0x09, - 0x69, 0x6e, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x18, 0xa9, 0x9b, 0xba, 0x98, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, - 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x4c, 0x82, 0x41, 0x49, 0x2f, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, - 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, - 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, - 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x69, 0x6e, 0x2d, - 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x52, 0x08, 0x69, 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x73, - 0x12, 0x8c, 0x01, 0x0a, 0x0d, 0x69, 0x6e, 0x5f, 0x66, 0x63, 0x73, 0x5f, 0x65, 0x72, 0x72, 0x6f, - 0x72, 0x73, 0x18, 0xf8, 0xaa, 0xff, 0x50, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, - 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x42, 0x50, 0x82, 0x41, 0x4d, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, - 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x65, 0x72, 0x73, 0x2f, 0x69, 0x6e, 0x2d, 0x66, 0x63, 0x73, 0x2d, 0x65, 0x72, 0x72, 0x6f, - 0x72, 0x73, 0x52, 0x0b, 0x69, 0x6e, 0x46, 0x63, 0x73, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x12, - 0x99, 0x01, 0x0a, 0x11, 0x69, 0x6e, 0x5f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, - 0x5f, 0x70, 0x6b, 0x74, 0x73, 0x18, 0xeb, 0x82, 0xf1, 0x98, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x42, 0x54, 0x82, 0x41, 0x51, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, - 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, - 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x69, 0x6e, 0x2d, 0x6d, 0x75, 0x6c, 0x74, - 0x69, 0x63, 0x61, 0x73, 0x74, 0x2d, 0x70, 0x6b, 0x74, 0x73, 0x52, 0x0f, 0x69, 0x6e, 0x4d, 0x75, - 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x50, 0x6b, 0x74, 0x73, 0x12, 0x82, 0x01, 0x0a, 0x09, - 0x69, 0x6e, 0x5f, 0x6f, 0x63, 0x74, 0x65, 0x74, 0x73, 0x18, 0xac, 0x99, 0xe9, 0xfc, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, - 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x4c, 0x82, 0x41, 0x49, 0x2f, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, - 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, - 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, - 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x69, 0x6e, 0x2d, - 0x6f, 0x63, 0x74, 0x65, 0x74, 0x73, 0x52, 0x08, 0x69, 0x6e, 0x4f, 0x63, 0x74, 0x65, 0x74, 0x73, - 0x12, 0x7c, 0x0a, 0x07, 0x69, 0x6e, 0x5f, 0x70, 0x6b, 0x74, 0x73, 0x18, 0xc8, 0xee, 0xad, 0xd2, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, - 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x4a, 0x82, 0x41, 0x47, 0x2f, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, - 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, - 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x69, - 0x6e, 0x2d, 0x70, 0x6b, 0x74, 0x73, 0x52, 0x06, 0x69, 0x6e, 0x50, 0x6b, 0x74, 0x73, 0x12, 0x92, - 0x01, 0x0a, 0x0f, 0x69, 0x6e, 0x5f, 0x75, 0x6e, 0x69, 0x63, 0x61, 0x73, 0x74, 0x5f, 0x70, 0x6b, - 0x74, 0x73, 0x18, 0xa0, 0xb6, 0xe6, 0x54, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, - 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x42, 0x52, 0x82, 0x41, 0x4f, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, - 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x65, 0x72, 0x73, 0x2f, 0x69, 0x6e, 0x2d, 0x75, 0x6e, 0x69, 0x63, 0x61, 0x73, 0x74, 0x2d, - 0x70, 0x6b, 0x74, 0x73, 0x52, 0x0d, 0x69, 0x6e, 0x55, 0x6e, 0x69, 0x63, 0x61, 0x73, 0x74, 0x50, - 0x6b, 0x74, 0x73, 0x12, 0x98, 0x01, 0x0a, 0x11, 0x69, 0x6e, 0x5f, 0x75, 0x6e, 0x6b, 0x6e, 0x6f, - 0x77, 0x6e, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x18, 0xa6, 0xe4, 0xd2, 0x45, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, - 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x54, 0x82, 0x41, 0x51, 0x2f, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, - 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, - 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, - 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x69, 0x6e, 0x2d, 0x75, - 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x2d, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x52, 0x0f, 0x69, - 0x6e, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x12, 0x85, - 0x01, 0x0a, 0x0a, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x18, 0xf6, 0x89, - 0x83, 0xf7, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, - 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x4d, 0x82, 0x41, - 0x4a, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, - 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, - 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, - 0x2f, 0x6c, 0x61, 0x73, 0x74, 0x2d, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x52, 0x09, 0x6c, 0x61, 0x73, - 0x74, 0x43, 0x6c, 0x65, 0x61, 0x72, 0x12, 0x9c, 0x01, 0x0a, 0x12, 0x6f, 0x75, 0x74, 0x5f, 0x62, - 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x5f, 0x70, 0x6b, 0x74, 0x73, 0x18, 0xfd, 0x8e, - 0x80, 0xef, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, - 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x55, 0x82, 0x41, - 0x52, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, - 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, - 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, - 0x2f, 0x6f, 0x75, 0x74, 0x2d, 0x62, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x2d, 0x70, - 0x6b, 0x74, 0x73, 0x52, 0x10, 0x6f, 0x75, 0x74, 0x42, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, - 0x74, 0x50, 0x6b, 0x74, 0x73, 0x12, 0x8a, 0x01, 0x0a, 0x0c, 0x6f, 0x75, 0x74, 0x5f, 0x64, 0x69, - 0x73, 0x63, 0x61, 0x72, 0x64, 0x73, 0x18, 0xb2, 0xc4, 0x89, 0x4c, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x42, 0x4f, 0x82, 0x41, 0x4c, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, - 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, - 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x6f, 0x75, 0x74, 0x2d, 0x64, 0x69, 0x73, - 0x63, 0x61, 0x72, 0x64, 0x73, 0x52, 0x0b, 0x6f, 0x75, 0x74, 0x44, 0x69, 0x73, 0x63, 0x61, 0x72, - 0x64, 0x73, 0x12, 0x85, 0x01, 0x0a, 0x0a, 0x6f, 0x75, 0x74, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, - 0x73, 0x18, 0xe2, 0xa0, 0xc1, 0xde, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, - 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x42, 0x4d, 0x82, 0x41, 0x4a, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, - 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x65, 0x72, 0x73, 0x2f, 0x6f, 0x75, 0x74, 0x2d, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x52, - 0x09, 0x6f, 0x75, 0x74, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x12, 0x9c, 0x01, 0x0a, 0x12, 0x6f, - 0x75, 0x74, 0x5f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x5f, 0x70, 0x6b, 0x74, - 0x73, 0x18, 0x80, 0xfc, 0xc2, 0x9b, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, - 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x42, 0x55, 0x82, 0x41, 0x52, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, - 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x65, 0x72, 0x73, 0x2f, 0x6f, 0x75, 0x74, 0x2d, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, - 0x73, 0x74, 0x2d, 0x70, 0x6b, 0x74, 0x73, 0x52, 0x10, 0x6f, 0x75, 0x74, 0x4d, 0x75, 0x6c, 0x74, - 0x69, 0x63, 0x61, 0x73, 0x74, 0x50, 0x6b, 0x74, 0x73, 0x12, 0x84, 0x01, 0x0a, 0x0a, 0x6f, 0x75, - 0x74, 0x5f, 0x6f, 0x63, 0x74, 0x65, 0x74, 0x73, 0x18, 0xa3, 0x8e, 0x8f, 0x18, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, - 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x4d, 0x82, 0x41, 0x4a, 0x2f, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, - 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, - 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, - 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x6f, 0x75, 0x74, 0x2d, 0x6f, - 0x63, 0x74, 0x65, 0x74, 0x73, 0x52, 0x09, 0x6f, 0x75, 0x74, 0x4f, 0x63, 0x74, 0x65, 0x74, 0x73, - 0x12, 0x7e, 0x0a, 0x08, 0x6f, 0x75, 0x74, 0x5f, 0x70, 0x6b, 0x74, 0x73, 0x18, 0x9b, 0xae, 0x88, - 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, - 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x4b, 0x82, 0x41, 0x48, 0x2f, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, - 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, - 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x6f, - 0x75, 0x74, 0x2d, 0x70, 0x6b, 0x74, 0x73, 0x52, 0x07, 0x6f, 0x75, 0x74, 0x50, 0x6b, 0x74, 0x73, - 0x12, 0x96, 0x01, 0x0a, 0x10, 0x6f, 0x75, 0x74, 0x5f, 0x75, 0x6e, 0x69, 0x63, 0x61, 0x73, 0x74, - 0x5f, 0x70, 0x6b, 0x74, 0x73, 0x18, 0xbb, 0x85, 0x87, 0x8e, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x42, 0x53, 0x82, 0x41, 0x50, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, - 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, - 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x6f, 0x75, 0x74, 0x2d, 0x75, 0x6e, 0x69, - 0x63, 0x61, 0x73, 0x74, 0x2d, 0x70, 0x6b, 0x74, 0x73, 0x52, 0x0e, 0x6f, 0x75, 0x74, 0x55, 0x6e, - 0x69, 0x63, 0x61, 0x73, 0x74, 0x50, 0x6b, 0x74, 0x73, 0x22, 0x83, 0x01, 0x0a, 0x0b, 0x41, 0x64, - 0x6d, 0x69, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x15, 0x0a, 0x11, 0x41, 0x44, 0x4d, - 0x49, 0x4e, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x45, 0x54, 0x10, 0x00, - 0x12, 0x19, 0x0a, 0x0e, 0x41, 0x44, 0x4d, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, - 0x55, 0x50, 0x10, 0x01, 0x1a, 0x05, 0x82, 0x41, 0x02, 0x55, 0x50, 0x12, 0x1d, 0x0a, 0x10, 0x41, - 0x44, 0x4d, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x44, 0x4f, 0x57, 0x4e, 0x10, - 0x02, 0x1a, 0x07, 0x82, 0x41, 0x04, 0x44, 0x4f, 0x57, 0x4e, 0x12, 0x23, 0x0a, 0x13, 0x41, 0x44, - 0x4d, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x54, 0x45, 0x53, 0x54, 0x49, 0x4e, - 0x47, 0x10, 0x03, 0x1a, 0x0a, 0x82, 0x41, 0x07, 0x54, 0x45, 0x53, 0x54, 0x49, 0x4e, 0x47, 0x22, - 0xa8, 0x02, 0x0a, 0x0a, 0x4f, 0x70, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x14, - 0x0a, 0x10, 0x4f, 0x50, 0x45, 0x52, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, - 0x45, 0x54, 0x10, 0x00, 0x12, 0x18, 0x0a, 0x0d, 0x4f, 0x50, 0x45, 0x52, 0x53, 0x54, 0x41, 0x54, - 0x55, 0x53, 0x5f, 0x55, 0x50, 0x10, 0x02, 0x1a, 0x05, 0x82, 0x41, 0x02, 0x55, 0x50, 0x12, 0x1c, - 0x0a, 0x0f, 0x4f, 0x50, 0x45, 0x52, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x44, 0x4f, 0x57, - 0x4e, 0x10, 0x03, 0x1a, 0x07, 0x82, 0x41, 0x04, 0x44, 0x4f, 0x57, 0x4e, 0x12, 0x22, 0x0a, 0x12, - 0x4f, 0x50, 0x45, 0x52, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x54, 0x45, 0x53, 0x54, 0x49, - 0x4e, 0x47, 0x10, 0x04, 0x1a, 0x0a, 0x82, 0x41, 0x07, 0x54, 0x45, 0x53, 0x54, 0x49, 0x4e, 0x47, - 0x12, 0x22, 0x0a, 0x12, 0x4f, 0x50, 0x45, 0x52, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, - 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x05, 0x1a, 0x0a, 0x82, 0x41, 0x07, 0x55, 0x4e, 0x4b, - 0x4e, 0x4f, 0x57, 0x4e, 0x12, 0x22, 0x0a, 0x12, 0x4f, 0x50, 0x45, 0x52, 0x53, 0x54, 0x41, 0x54, - 0x55, 0x53, 0x5f, 0x44, 0x4f, 0x52, 0x4d, 0x41, 0x4e, 0x54, 0x10, 0x06, 0x1a, 0x0a, 0x82, 0x41, - 0x07, 0x44, 0x4f, 0x52, 0x4d, 0x41, 0x4e, 0x54, 0x12, 0x2a, 0x0a, 0x16, 0x4f, 0x50, 0x45, 0x52, - 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x50, 0x52, 0x45, 0x53, 0x45, - 0x4e, 0x54, 0x10, 0x07, 0x1a, 0x0e, 0x82, 0x41, 0x0b, 0x4e, 0x4f, 0x54, 0x5f, 0x50, 0x52, 0x45, - 0x53, 0x45, 0x4e, 0x54, 0x12, 0x34, 0x0a, 0x1b, 0x4f, 0x50, 0x45, 0x52, 0x53, 0x54, 0x41, 0x54, - 0x55, 0x53, 0x5f, 0x4c, 0x4f, 0x57, 0x45, 0x52, 0x5f, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x5f, 0x44, - 0x4f, 0x57, 0x4e, 0x10, 0x08, 0x1a, 0x13, 0x82, 0x41, 0x10, 0x4c, 0x4f, 0x57, 0x45, 0x52, 0x5f, - 0x4c, 0x41, 0x59, 0x45, 0x52, 0x5f, 0x44, 0x4f, 0x57, 0x4e, 0x1a, 0xd9, 0x01, 0x0a, 0x0f, 0x53, - 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x4f, - 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x42, 0x39, 0x82, - 0x41, 0x36, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, - 0x63, 0x65, 0x2f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, - 0x75, 0x0a, 0x0c, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x51, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, - 0x63, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2e, 0x53, 0x75, - 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x53, 0x75, 0x62, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x52, 0x0c, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x1a, 0x97, 0x01, 0x0a, 0x0c, 0x49, 0x6e, 0x74, 0x65, 0x72, - 0x66, 0x61, 0x63, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x31, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1d, 0x82, 0x41, 0x1a, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, - 0x6e, 0x61, 0x6d, 0x65, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x54, 0x0a, 0x09, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, - 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, - 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, - 0x72, 0x66, 0x61, 0x63, 0x65, 0x52, 0x09, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, - 0x42, 0x20, 0x5a, 0x1e, 0x67, 0x69, 0x74, 0x6c, 0x61, 0x62, 0x2e, 0x66, 0x62, 0x69, 0x2e, 0x68, - 0x2d, 0x64, 0x61, 0x2e, 0x64, 0x65, 0x2f, 0x63, 0x6f, 0x63, 0x73, 0x6e, 0x2f, 0x67, 0x6f, 0x73, - 0x64, 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescOnce sync.Once - file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescData = file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDesc -) - -func file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescGZIP() []byte { - file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescOnce.Do(func() { - file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescData = protoimpl.X.CompressGZIP(file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescData) - }) - return file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescData -} - -var file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_enumTypes = make([]protoimpl.EnumInfo, 4) -var file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes = make([]protoimpl.MessageInfo, 15) -var file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_goTypes = []interface{}{ - (Interfaces_Interface_State_AdminStatus)(0), // 0: openconfig.openconfig_interfaces.Interfaces.Interface.State.AdminStatus - (Interfaces_Interface_State_OperStatus)(0), // 1: openconfig.openconfig_interfaces.Interfaces.Interface.State.OperStatus - (Interfaces_Interface_Subinterfaces_Subinterface_State_AdminStatus)(0), // 2: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.AdminStatus - (Interfaces_Interface_Subinterfaces_Subinterface_State_OperStatus)(0), // 3: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.OperStatus - (*Interfaces)(nil), // 4: openconfig.openconfig_interfaces.Interfaces - (*Interfaces_Interface)(nil), // 5: openconfig.openconfig_interfaces.Interfaces.Interface - (*Interfaces_InterfaceKey)(nil), // 6: openconfig.openconfig_interfaces.Interfaces.InterfaceKey - (*Interfaces_Interface_Config)(nil), // 7: openconfig.openconfig_interfaces.Interfaces.Interface.Config - (*Interfaces_Interface_HoldTime)(nil), // 8: openconfig.openconfig_interfaces.Interfaces.Interface.HoldTime - (*Interfaces_Interface_State)(nil), // 9: openconfig.openconfig_interfaces.Interfaces.Interface.State - (*Interfaces_Interface_Subinterfaces)(nil), // 10: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces - (*Interfaces_Interface_HoldTime_Config)(nil), // 11: openconfig.openconfig_interfaces.Interfaces.Interface.HoldTime.Config - (*Interfaces_Interface_HoldTime_State)(nil), // 12: openconfig.openconfig_interfaces.Interfaces.Interface.HoldTime.State - (*Interfaces_Interface_State_Counters)(nil), // 13: openconfig.openconfig_interfaces.Interfaces.Interface.State.Counters - (*Interfaces_Interface_Subinterfaces_Subinterface)(nil), // 14: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface - (*Interfaces_Interface_Subinterfaces_SubinterfaceKey)(nil), // 15: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.SubinterfaceKey - (*Interfaces_Interface_Subinterfaces_Subinterface_Config)(nil), // 16: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.Config - (*Interfaces_Interface_Subinterfaces_Subinterface_State)(nil), // 17: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State - (*Interfaces_Interface_Subinterfaces_Subinterface_State_Counters)(nil), // 18: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.Counters - (*ywrapper.StringValue)(nil), // 19: ywrapper.StringValue - (*ywrapper.BoolValue)(nil), // 20: ywrapper.BoolValue - (*ywrapper.UintValue)(nil), // 21: ywrapper.UintValue - (IETFInterfacesInterfaceType)(0), // 22: openconfig.enums.IETFInterfacesInterfaceType -} -var file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_depIdxs = []int32{ - 6, // 0: openconfig.openconfig_interfaces.Interfaces.interface:type_name -> openconfig.openconfig_interfaces.Interfaces.InterfaceKey - 7, // 1: openconfig.openconfig_interfaces.Interfaces.Interface.config:type_name -> openconfig.openconfig_interfaces.Interfaces.Interface.Config - 8, // 2: openconfig.openconfig_interfaces.Interfaces.Interface.hold_time:type_name -> openconfig.openconfig_interfaces.Interfaces.Interface.HoldTime - 9, // 3: openconfig.openconfig_interfaces.Interfaces.Interface.state:type_name -> openconfig.openconfig_interfaces.Interfaces.Interface.State - 10, // 4: openconfig.openconfig_interfaces.Interfaces.Interface.subinterfaces:type_name -> openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces - 5, // 5: openconfig.openconfig_interfaces.Interfaces.InterfaceKey.interface:type_name -> openconfig.openconfig_interfaces.Interfaces.Interface - 19, // 6: openconfig.openconfig_interfaces.Interfaces.Interface.Config.description:type_name -> ywrapper.StringValue - 20, // 7: openconfig.openconfig_interfaces.Interfaces.Interface.Config.enabled:type_name -> ywrapper.BoolValue - 20, // 8: openconfig.openconfig_interfaces.Interfaces.Interface.Config.loopback_mode:type_name -> ywrapper.BoolValue - 21, // 9: openconfig.openconfig_interfaces.Interfaces.Interface.Config.mtu:type_name -> ywrapper.UintValue - 19, // 10: openconfig.openconfig_interfaces.Interfaces.Interface.Config.name:type_name -> ywrapper.StringValue - 22, // 11: openconfig.openconfig_interfaces.Interfaces.Interface.Config.type:type_name -> openconfig.enums.IETFInterfacesInterfaceType - 11, // 12: openconfig.openconfig_interfaces.Interfaces.Interface.HoldTime.config:type_name -> openconfig.openconfig_interfaces.Interfaces.Interface.HoldTime.Config - 12, // 13: openconfig.openconfig_interfaces.Interfaces.Interface.HoldTime.state:type_name -> openconfig.openconfig_interfaces.Interfaces.Interface.HoldTime.State - 0, // 14: openconfig.openconfig_interfaces.Interfaces.Interface.State.admin_status:type_name -> openconfig.openconfig_interfaces.Interfaces.Interface.State.AdminStatus - 13, // 15: openconfig.openconfig_interfaces.Interfaces.Interface.State.counters:type_name -> openconfig.openconfig_interfaces.Interfaces.Interface.State.Counters - 19, // 16: openconfig.openconfig_interfaces.Interfaces.Interface.State.description:type_name -> ywrapper.StringValue - 20, // 17: openconfig.openconfig_interfaces.Interfaces.Interface.State.enabled:type_name -> ywrapper.BoolValue - 21, // 18: openconfig.openconfig_interfaces.Interfaces.Interface.State.ifindex:type_name -> ywrapper.UintValue - 21, // 19: openconfig.openconfig_interfaces.Interfaces.Interface.State.last_change:type_name -> ywrapper.UintValue - 20, // 20: openconfig.openconfig_interfaces.Interfaces.Interface.State.logical:type_name -> ywrapper.BoolValue - 20, // 21: openconfig.openconfig_interfaces.Interfaces.Interface.State.loopback_mode:type_name -> ywrapper.BoolValue - 21, // 22: openconfig.openconfig_interfaces.Interfaces.Interface.State.mtu:type_name -> ywrapper.UintValue - 19, // 23: openconfig.openconfig_interfaces.Interfaces.Interface.State.name:type_name -> ywrapper.StringValue - 1, // 24: openconfig.openconfig_interfaces.Interfaces.Interface.State.oper_status:type_name -> openconfig.openconfig_interfaces.Interfaces.Interface.State.OperStatus - 22, // 25: openconfig.openconfig_interfaces.Interfaces.Interface.State.type:type_name -> openconfig.enums.IETFInterfacesInterfaceType - 15, // 26: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.subinterface:type_name -> openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.SubinterfaceKey - 21, // 27: openconfig.openconfig_interfaces.Interfaces.Interface.HoldTime.Config.down:type_name -> ywrapper.UintValue - 21, // 28: openconfig.openconfig_interfaces.Interfaces.Interface.HoldTime.Config.up:type_name -> ywrapper.UintValue - 21, // 29: openconfig.openconfig_interfaces.Interfaces.Interface.HoldTime.State.down:type_name -> ywrapper.UintValue - 21, // 30: openconfig.openconfig_interfaces.Interfaces.Interface.HoldTime.State.up:type_name -> ywrapper.UintValue - 21, // 31: openconfig.openconfig_interfaces.Interfaces.Interface.State.Counters.carrier_transitions:type_name -> ywrapper.UintValue - 21, // 32: openconfig.openconfig_interfaces.Interfaces.Interface.State.Counters.in_broadcast_pkts:type_name -> ywrapper.UintValue - 21, // 33: openconfig.openconfig_interfaces.Interfaces.Interface.State.Counters.in_discards:type_name -> ywrapper.UintValue - 21, // 34: openconfig.openconfig_interfaces.Interfaces.Interface.State.Counters.in_errors:type_name -> ywrapper.UintValue - 21, // 35: openconfig.openconfig_interfaces.Interfaces.Interface.State.Counters.in_fcs_errors:type_name -> ywrapper.UintValue - 21, // 36: openconfig.openconfig_interfaces.Interfaces.Interface.State.Counters.in_multicast_pkts:type_name -> ywrapper.UintValue - 21, // 37: openconfig.openconfig_interfaces.Interfaces.Interface.State.Counters.in_octets:type_name -> ywrapper.UintValue - 21, // 38: openconfig.openconfig_interfaces.Interfaces.Interface.State.Counters.in_pkts:type_name -> ywrapper.UintValue - 21, // 39: openconfig.openconfig_interfaces.Interfaces.Interface.State.Counters.in_unicast_pkts:type_name -> ywrapper.UintValue - 21, // 40: openconfig.openconfig_interfaces.Interfaces.Interface.State.Counters.in_unknown_protos:type_name -> ywrapper.UintValue - 21, // 41: openconfig.openconfig_interfaces.Interfaces.Interface.State.Counters.last_clear:type_name -> ywrapper.UintValue - 21, // 42: openconfig.openconfig_interfaces.Interfaces.Interface.State.Counters.out_broadcast_pkts:type_name -> ywrapper.UintValue - 21, // 43: openconfig.openconfig_interfaces.Interfaces.Interface.State.Counters.out_discards:type_name -> ywrapper.UintValue - 21, // 44: openconfig.openconfig_interfaces.Interfaces.Interface.State.Counters.out_errors:type_name -> ywrapper.UintValue - 21, // 45: openconfig.openconfig_interfaces.Interfaces.Interface.State.Counters.out_multicast_pkts:type_name -> ywrapper.UintValue - 21, // 46: openconfig.openconfig_interfaces.Interfaces.Interface.State.Counters.out_octets:type_name -> ywrapper.UintValue - 21, // 47: openconfig.openconfig_interfaces.Interfaces.Interface.State.Counters.out_pkts:type_name -> ywrapper.UintValue - 21, // 48: openconfig.openconfig_interfaces.Interfaces.Interface.State.Counters.out_unicast_pkts:type_name -> ywrapper.UintValue - 16, // 49: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.config:type_name -> openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.Config - 17, // 50: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.state:type_name -> openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State - 14, // 51: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.SubinterfaceKey.subinterface:type_name -> openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface - 19, // 52: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.Config.description:type_name -> ywrapper.StringValue - 20, // 53: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.Config.enabled:type_name -> ywrapper.BoolValue - 21, // 54: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.Config.index:type_name -> ywrapper.UintValue - 2, // 55: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.admin_status:type_name -> openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.AdminStatus - 18, // 56: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.counters:type_name -> openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.Counters - 19, // 57: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.description:type_name -> ywrapper.StringValue - 20, // 58: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.enabled:type_name -> ywrapper.BoolValue - 21, // 59: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.ifindex:type_name -> ywrapper.UintValue - 21, // 60: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.index:type_name -> ywrapper.UintValue - 21, // 61: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.last_change:type_name -> ywrapper.UintValue - 20, // 62: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.logical:type_name -> ywrapper.BoolValue - 19, // 63: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.name:type_name -> ywrapper.StringValue - 3, // 64: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.oper_status:type_name -> openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.OperStatus - 21, // 65: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.Counters.carrier_transitions:type_name -> ywrapper.UintValue - 21, // 66: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.Counters.in_broadcast_pkts:type_name -> ywrapper.UintValue - 21, // 67: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.Counters.in_discards:type_name -> ywrapper.UintValue - 21, // 68: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.Counters.in_errors:type_name -> ywrapper.UintValue - 21, // 69: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.Counters.in_fcs_errors:type_name -> ywrapper.UintValue - 21, // 70: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.Counters.in_multicast_pkts:type_name -> ywrapper.UintValue - 21, // 71: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.Counters.in_octets:type_name -> ywrapper.UintValue - 21, // 72: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.Counters.in_pkts:type_name -> ywrapper.UintValue - 21, // 73: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.Counters.in_unicast_pkts:type_name -> ywrapper.UintValue - 21, // 74: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.Counters.in_unknown_protos:type_name -> ywrapper.UintValue - 21, // 75: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.Counters.last_clear:type_name -> ywrapper.UintValue - 21, // 76: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.Counters.out_broadcast_pkts:type_name -> ywrapper.UintValue - 21, // 77: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.Counters.out_discards:type_name -> ywrapper.UintValue - 21, // 78: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.Counters.out_errors:type_name -> ywrapper.UintValue - 21, // 79: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.Counters.out_multicast_pkts:type_name -> ywrapper.UintValue - 21, // 80: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.Counters.out_octets:type_name -> ywrapper.UintValue - 21, // 81: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.Counters.out_pkts:type_name -> ywrapper.UintValue - 21, // 82: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.Counters.out_unicast_pkts:type_name -> ywrapper.UintValue - 83, // [83:83] is the sub-list for method output_type - 83, // [83:83] is the sub-list for method input_type - 83, // [83:83] is the sub-list for extension type_name - 83, // [83:83] is the sub-list for extension extendee - 0, // [0:83] is the sub-list for field type_name -} - -func init() { file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_init() } -func file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_init() { - if File_openconfig_openconfig_interfaces_openconfig_interfaces_proto != nil { - return - } - file_openconfig_enums_enums_proto_init() - if !protoimpl.UnsafeEnabled { - file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Interfaces); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Interfaces_Interface); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Interfaces_InterfaceKey); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Interfaces_Interface_Config); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Interfaces_Interface_HoldTime); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Interfaces_Interface_State); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Interfaces_Interface_Subinterfaces); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Interfaces_Interface_HoldTime_Config); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Interfaces_Interface_HoldTime_State); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Interfaces_Interface_State_Counters); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Interfaces_Interface_Subinterfaces_Subinterface); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Interfaces_Interface_Subinterfaces_SubinterfaceKey); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Interfaces_Interface_Subinterfaces_Subinterface_Config); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Interfaces_Interface_Subinterfaces_Subinterface_State); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Interfaces_Interface_Subinterfaces_Subinterface_State_Counters); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDesc, - NumEnums: 4, - NumMessages: 15, - NumExtensions: 0, - NumServices: 0, - }, - GoTypes: file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_goTypes, - DependencyIndexes: file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_depIdxs, - EnumInfos: file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_enumTypes, - MessageInfos: file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes, - }.Build() - File_openconfig_openconfig_interfaces_openconfig_interfaces_proto = out.File - file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDesc = nil - file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_goTypes = nil - file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_depIdxs = nil -} diff --git a/api/proto/openconfig/enums/enums.pb.go b/api/proto/openconfig/enums/enums.pb.go deleted file mode 100644 index 3ebe5d22c..000000000 --- a/api/proto/openconfig/enums/enums.pb.go +++ /dev/null @@ -1,149 +0,0 @@ -// openconfig.enums is generated by proto_generator as a protobuf -// representation of a YANG schema. -// -// Input schema modules: -// - ../yang-models/models/openconfig/release/models/interfaces/openconfig-interfaces.yang -// Include paths: -// - ../yang-models/models/... - -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.25.0-devel -// protoc v3.13.0 -// source: openconfig/enums/enums.proto - -package openconfig_enums - -import ( - proto "github.com/golang/protobuf/proto" - _ "github.com/openconfig/ygot/proto/yext" - _ "github.com/openconfig/ygot/proto/ywrapper" - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -// This is a compile-time assertion that a sufficiently up-to-date version -// of the legacy proto package is being used. -const _ = proto.ProtoPackageIsVersion4 - -// IETFInterfacesInterfaceType represents an enumerated type generated for the YANG identity interface-type. -type IETFInterfacesInterfaceType int32 - -const ( - IETFInterfacesInterfaceType_IETFINTERFACESINTERFACETYPE_UNSET IETFInterfacesInterfaceType = 0 -) - -// Enum value maps for IETFInterfacesInterfaceType. -var ( - IETFInterfacesInterfaceType_name = map[int32]string{ - 0: "IETFINTERFACESINTERFACETYPE_UNSET", - } - IETFInterfacesInterfaceType_value = map[string]int32{ - "IETFINTERFACESINTERFACETYPE_UNSET": 0, - } -) - -func (x IETFInterfacesInterfaceType) Enum() *IETFInterfacesInterfaceType { - p := new(IETFInterfacesInterfaceType) - *p = x - return p -} - -func (x IETFInterfacesInterfaceType) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (IETFInterfacesInterfaceType) Descriptor() protoreflect.EnumDescriptor { - return file_openconfig_enums_enums_proto_enumTypes[0].Descriptor() -} - -func (IETFInterfacesInterfaceType) Type() protoreflect.EnumType { - return &file_openconfig_enums_enums_proto_enumTypes[0] -} - -func (x IETFInterfacesInterfaceType) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use IETFInterfacesInterfaceType.Descriptor instead. -func (IETFInterfacesInterfaceType) EnumDescriptor() ([]byte, []int) { - return file_openconfig_enums_enums_proto_rawDescGZIP(), []int{0} -} - -var File_openconfig_enums_enums_proto protoreflect.FileDescriptor - -var file_openconfig_enums_enums_proto_rawDesc = []byte{ - 0x0a, 0x1c, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x65, 0x6e, 0x75, - 0x6d, 0x73, 0x2f, 0x65, 0x6e, 0x75, 0x6d, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x10, - 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x65, 0x6e, 0x75, 0x6d, 0x73, - 0x1a, 0x38, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, - 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x79, 0x67, 0x6f, 0x74, 0x2f, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2f, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2f, 0x79, 0x77, 0x72, 0x61, - 0x70, 0x70, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x30, 0x67, 0x69, 0x74, 0x68, - 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x2f, 0x79, 0x67, 0x6f, 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x79, 0x65, 0x78, - 0x74, 0x2f, 0x79, 0x65, 0x78, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2a, 0x44, 0x0a, 0x1b, - 0x49, 0x45, 0x54, 0x46, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x49, 0x6e, - 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x25, 0x0a, 0x21, 0x49, - 0x45, 0x54, 0x46, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x46, 0x41, 0x43, 0x45, 0x53, 0x49, 0x4e, 0x54, - 0x45, 0x52, 0x46, 0x41, 0x43, 0x45, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x45, 0x54, - 0x10, 0x00, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_openconfig_enums_enums_proto_rawDescOnce sync.Once - file_openconfig_enums_enums_proto_rawDescData = file_openconfig_enums_enums_proto_rawDesc -) - -func file_openconfig_enums_enums_proto_rawDescGZIP() []byte { - file_openconfig_enums_enums_proto_rawDescOnce.Do(func() { - file_openconfig_enums_enums_proto_rawDescData = protoimpl.X.CompressGZIP(file_openconfig_enums_enums_proto_rawDescData) - }) - return file_openconfig_enums_enums_proto_rawDescData -} - -var file_openconfig_enums_enums_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_openconfig_enums_enums_proto_goTypes = []interface{}{ - (IETFInterfacesInterfaceType)(0), // 0: openconfig.enums.IETFInterfacesInterfaceType -} -var file_openconfig_enums_enums_proto_depIdxs = []int32{ - 0, // [0:0] is the sub-list for method output_type - 0, // [0:0] is the sub-list for method input_type - 0, // [0:0] is the sub-list for extension type_name - 0, // [0:0] is the sub-list for extension extendee - 0, // [0:0] is the sub-list for field type_name -} - -func init() { file_openconfig_enums_enums_proto_init() } -func file_openconfig_enums_enums_proto_init() { - if File_openconfig_enums_enums_proto != nil { - return - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_openconfig_enums_enums_proto_rawDesc, - NumEnums: 1, - NumMessages: 0, - NumExtensions: 0, - NumServices: 0, - }, - GoTypes: file_openconfig_enums_enums_proto_goTypes, - DependencyIndexes: file_openconfig_enums_enums_proto_depIdxs, - EnumInfos: file_openconfig_enums_enums_proto_enumTypes, - }.Build() - File_openconfig_enums_enums_proto = out.File - file_openconfig_enums_enums_proto_rawDesc = nil - file_openconfig_enums_enums_proto_goTypes = nil - file_openconfig_enums_enums_proto_depIdxs = nil -} diff --git a/api/proto/openconfig/enums/enums.proto b/api/proto/openconfig/enums/enums.proto deleted file mode 100644 index 9e536252c..000000000 --- a/api/proto/openconfig/enums/enums.proto +++ /dev/null @@ -1,19 +0,0 @@ -// openconfig.enums is generated by proto_generator as a protobuf -// representation of a YANG schema. -// -// Input schema modules: -// - ../yang-models/models/openconfig/release/models/interfaces/openconfig-interfaces.yang -// Include paths: -// - ../yang-models/models/... -syntax = "proto3"; - -package openconfig.enums; -option go_package = "code.fbi.h-da.de/cocsn/gosdn"; - -import "github.com/openconfig/ygot/proto/ywrapper/ywrapper.proto"; -import "github.com/openconfig/ygot/proto/yext/yext.proto"; - -// IETFInterfacesInterfaceType represents an enumerated type generated for the YANG identity interface-type. -enum IETFInterfacesInterfaceType { - IETFINTERFACESINTERFACETYPE_UNSET = 0; -} diff --git a/api/proto/openconfig/openconfig.pb.go b/api/proto/openconfig/openconfig.pb.go deleted file mode 100644 index e52dc2141..000000000 --- a/api/proto/openconfig/openconfig.pb.go +++ /dev/null @@ -1,175 +0,0 @@ -// openconfig is generated by proto_generator as a protobuf -// representation of a YANG schema. -// -// Input schema modules: -// - ../yang-models/models/openconfig/release/models/interfaces/openconfig-interfaces.yang -// Include paths: -// - ../yang-models/models/... - -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.25.0-devel -// protoc v3.13.0 -// source: openconfig/openconfig.proto - -package openconfig - -import ( - openconfig_interfaces "code.fbi.h-da.de/cocsn/gosdn/api/proto/openconfig/openconfig_interfaces" - proto "github.com/golang/protobuf/proto" - _ "github.com/openconfig/ygot/proto/yext" - _ "github.com/openconfig/ygot/proto/ywrapper" - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -// This is a compile-time assertion that a sufficiently up-to-date version -// of the legacy proto package is being used. -const _ = proto.ProtoPackageIsVersion4 - -type Device struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Interfaces *openconfig_interfaces.Interfaces `protobuf:"bytes,85031486,opt,name=interfaces,proto3" json:"interfaces,omitempty"` -} - -func (x *Device) Reset() { - *x = Device{} - if protoimpl.UnsafeEnabled { - mi := &file_openconfig_openconfig_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Device) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Device) ProtoMessage() {} - -func (x *Device) ProtoReflect() protoreflect.Message { - mi := &file_openconfig_openconfig_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Device.ProtoReflect.Descriptor instead. -func (*Device) Descriptor() ([]byte, []int) { - return file_openconfig_openconfig_proto_rawDescGZIP(), []int{0} -} - -func (x *Device) GetInterfaces() *openconfig_interfaces.Interfaces { - if x != nil { - return x.Interfaces - } - return nil -} - -var File_openconfig_openconfig_proto protoreflect.FileDescriptor - -var file_openconfig_openconfig_proto_rawDesc = []byte{ - 0x0a, 0x1b, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x6f, 0x70, 0x65, - 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0a, 0x6f, - 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x1a, 0x38, 0x67, 0x69, 0x74, 0x68, 0x75, - 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x2f, 0x79, 0x67, 0x6f, 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x79, 0x77, 0x72, 0x61, - 0x70, 0x70, 0x65, 0x72, 0x2f, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x1a, 0x30, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, - 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x79, 0x67, 0x6f, 0x74, 0x2f, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x79, 0x65, 0x78, 0x74, 0x2f, 0x79, 0x65, 0x78, 0x74, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x3c, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x22, 0x69, 0x0a, 0x06, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x12, 0x5f, 0x0a, - 0x0a, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x18, 0xbe, 0xf4, 0xc5, 0x28, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, - 0x65, 0x73, 0x42, 0x0e, 0x82, 0x41, 0x0b, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, - 0x65, 0x73, 0x52, 0x0a, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x62, 0x06, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_openconfig_openconfig_proto_rawDescOnce sync.Once - file_openconfig_openconfig_proto_rawDescData = file_openconfig_openconfig_proto_rawDesc -) - -func file_openconfig_openconfig_proto_rawDescGZIP() []byte { - file_openconfig_openconfig_proto_rawDescOnce.Do(func() { - file_openconfig_openconfig_proto_rawDescData = protoimpl.X.CompressGZIP(file_openconfig_openconfig_proto_rawDescData) - }) - return file_openconfig_openconfig_proto_rawDescData -} - -var file_openconfig_openconfig_proto_msgTypes = make([]protoimpl.MessageInfo, 1) -var file_openconfig_openconfig_proto_goTypes = []interface{}{ - (*Device)(nil), // 0: openconfig.Device - (*openconfig_interfaces.Interfaces)(nil), // 1: openconfig.openconfig_interfaces.Interfaces -} -var file_openconfig_openconfig_proto_depIdxs = []int32{ - 1, // 0: openconfig.Device.interfaces:type_name -> openconfig.openconfig_interfaces.Interfaces - 1, // [1:1] is the sub-list for method output_type - 1, // [1:1] is the sub-list for method input_type - 1, // [1:1] is the sub-list for extension type_name - 1, // [1:1] is the sub-list for extension extendee - 0, // [0:1] is the sub-list for field type_name -} - -func init() { file_openconfig_openconfig_proto_init() } -func file_openconfig_openconfig_proto_init() { - if File_openconfig_openconfig_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_openconfig_openconfig_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Device); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_openconfig_openconfig_proto_rawDesc, - NumEnums: 0, - NumMessages: 1, - NumExtensions: 0, - NumServices: 0, - }, - GoTypes: file_openconfig_openconfig_proto_goTypes, - DependencyIndexes: file_openconfig_openconfig_proto_depIdxs, - MessageInfos: file_openconfig_openconfig_proto_msgTypes, - }.Build() - File_openconfig_openconfig_proto = out.File - file_openconfig_openconfig_proto_rawDesc = nil - file_openconfig_openconfig_proto_goTypes = nil - file_openconfig_openconfig_proto_depIdxs = nil -} diff --git a/api/proto/openconfig/openconfig.proto b/api/proto/openconfig/openconfig.proto deleted file mode 100644 index c2b37bb03..000000000 --- a/api/proto/openconfig/openconfig.proto +++ /dev/null @@ -1,20 +0,0 @@ -// openconfig is generated by proto_generator as a protobuf -// representation of a YANG schema. -// -// Input schema modules: -// - ../yang-models/models/openconfig/release/models/interfaces/openconfig-interfaces.yang -// Include paths: -// - ../yang-models/models/... -syntax = "proto3"; - -package openconfig; -option go_package = "code.fbi.h-da.de/cocsn/gosdn"; - - -import "github.com/openconfig/ygot/proto/ywrapper/ywrapper.proto"; -import "github.com/openconfig/ygot/proto/yext/yext.proto"; -import "openconfig/openconfig_interfaces/openconfig_interfaces.proto"; - -message Device { - openconfig_interfaces.Interfaces interfaces = 85031486 [(yext.schemapath) = "/interfaces"]; -} diff --git a/api/proto/openconfig/openconfig_interfaces/openconfig_interfaces.pb.go b/api/proto/openconfig/openconfig_interfaces/openconfig_interfaces.pb.go deleted file mode 100644 index 26ca33432..000000000 --- a/api/proto/openconfig/openconfig_interfaces/openconfig_interfaces.pb.go +++ /dev/null @@ -1,2620 +0,0 @@ -// openconfig.openconfig_interfaces is generated by proto_generator as a protobuf -// representation of a YANG schema. -// -// Input schema modules: -// - ../yang-models/models/openconfig/release/models/interfaces/openconfig-interfaces.yang -// Include paths: -// - ../yang-models/models/... - -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.25.0-devel -// protoc v3.13.0 -// source: openconfig/openconfig_interfaces/openconfig_interfaces.proto - -package openconfig_openconfig_interfaces - -import ( - enums "code.fbi.h-da.de/cocsn/gosdn/api/proto/openconfig/enums" - proto "github.com/golang/protobuf/proto" - _ "github.com/openconfig/ygot/proto/yext" - ywrapper "github.com/openconfig/ygot/proto/ywrapper" - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -// This is a compile-time assertion that a sufficiently up-to-date version -// of the legacy proto package is being used. -const _ = proto.ProtoPackageIsVersion4 - -type Interfaces_Interface_State_AdminStatus int32 - -const ( - Interfaces_Interface_State_ADMINSTATUS_UNSET Interfaces_Interface_State_AdminStatus = 0 - Interfaces_Interface_State_ADMINSTATUS_UP Interfaces_Interface_State_AdminStatus = 1 - Interfaces_Interface_State_ADMINSTATUS_DOWN Interfaces_Interface_State_AdminStatus = 2 - Interfaces_Interface_State_ADMINSTATUS_TESTING Interfaces_Interface_State_AdminStatus = 3 -) - -// Enum value maps for Interfaces_Interface_State_AdminStatus. -var ( - Interfaces_Interface_State_AdminStatus_name = map[int32]string{ - 0: "ADMINSTATUS_UNSET", - 1: "ADMINSTATUS_UP", - 2: "ADMINSTATUS_DOWN", - 3: "ADMINSTATUS_TESTING", - } - Interfaces_Interface_State_AdminStatus_value = map[string]int32{ - "ADMINSTATUS_UNSET": 0, - "ADMINSTATUS_UP": 1, - "ADMINSTATUS_DOWN": 2, - "ADMINSTATUS_TESTING": 3, - } -) - -func (x Interfaces_Interface_State_AdminStatus) Enum() *Interfaces_Interface_State_AdminStatus { - p := new(Interfaces_Interface_State_AdminStatus) - *p = x - return p -} - -func (x Interfaces_Interface_State_AdminStatus) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (Interfaces_Interface_State_AdminStatus) Descriptor() protoreflect.EnumDescriptor { - return file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_enumTypes[0].Descriptor() -} - -func (Interfaces_Interface_State_AdminStatus) Type() protoreflect.EnumType { - return &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_enumTypes[0] -} - -func (x Interfaces_Interface_State_AdminStatus) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use Interfaces_Interface_State_AdminStatus.Descriptor instead. -func (Interfaces_Interface_State_AdminStatus) EnumDescriptor() ([]byte, []int) { - return file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescGZIP(), []int{0, 0, 2, 0} -} - -type Interfaces_Interface_State_OperStatus int32 - -const ( - Interfaces_Interface_State_OPERSTATUS_UNSET Interfaces_Interface_State_OperStatus = 0 - Interfaces_Interface_State_OPERSTATUS_UP Interfaces_Interface_State_OperStatus = 2 - Interfaces_Interface_State_OPERSTATUS_DOWN Interfaces_Interface_State_OperStatus = 3 - Interfaces_Interface_State_OPERSTATUS_TESTING Interfaces_Interface_State_OperStatus = 4 - Interfaces_Interface_State_OPERSTATUS_UNKNOWN Interfaces_Interface_State_OperStatus = 5 - Interfaces_Interface_State_OPERSTATUS_DORMANT Interfaces_Interface_State_OperStatus = 6 - Interfaces_Interface_State_OPERSTATUS_NOT_PRESENT Interfaces_Interface_State_OperStatus = 7 - Interfaces_Interface_State_OPERSTATUS_LOWER_LAYER_DOWN Interfaces_Interface_State_OperStatus = 8 -) - -// Enum value maps for Interfaces_Interface_State_OperStatus. -var ( - Interfaces_Interface_State_OperStatus_name = map[int32]string{ - 0: "OPERSTATUS_UNSET", - 2: "OPERSTATUS_UP", - 3: "OPERSTATUS_DOWN", - 4: "OPERSTATUS_TESTING", - 5: "OPERSTATUS_UNKNOWN", - 6: "OPERSTATUS_DORMANT", - 7: "OPERSTATUS_NOT_PRESENT", - 8: "OPERSTATUS_LOWER_LAYER_DOWN", - } - Interfaces_Interface_State_OperStatus_value = map[string]int32{ - "OPERSTATUS_UNSET": 0, - "OPERSTATUS_UP": 2, - "OPERSTATUS_DOWN": 3, - "OPERSTATUS_TESTING": 4, - "OPERSTATUS_UNKNOWN": 5, - "OPERSTATUS_DORMANT": 6, - "OPERSTATUS_NOT_PRESENT": 7, - "OPERSTATUS_LOWER_LAYER_DOWN": 8, - } -) - -func (x Interfaces_Interface_State_OperStatus) Enum() *Interfaces_Interface_State_OperStatus { - p := new(Interfaces_Interface_State_OperStatus) - *p = x - return p -} - -func (x Interfaces_Interface_State_OperStatus) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (Interfaces_Interface_State_OperStatus) Descriptor() protoreflect.EnumDescriptor { - return file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_enumTypes[1].Descriptor() -} - -func (Interfaces_Interface_State_OperStatus) Type() protoreflect.EnumType { - return &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_enumTypes[1] -} - -func (x Interfaces_Interface_State_OperStatus) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use Interfaces_Interface_State_OperStatus.Descriptor instead. -func (Interfaces_Interface_State_OperStatus) EnumDescriptor() ([]byte, []int) { - return file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescGZIP(), []int{0, 0, 2, 1} -} - -type Interfaces_Interface_Subinterfaces_Subinterface_State_AdminStatus int32 - -const ( - Interfaces_Interface_Subinterfaces_Subinterface_State_ADMINSTATUS_UNSET Interfaces_Interface_Subinterfaces_Subinterface_State_AdminStatus = 0 - Interfaces_Interface_Subinterfaces_Subinterface_State_ADMINSTATUS_UP Interfaces_Interface_Subinterfaces_Subinterface_State_AdminStatus = 1 - Interfaces_Interface_Subinterfaces_Subinterface_State_ADMINSTATUS_DOWN Interfaces_Interface_Subinterfaces_Subinterface_State_AdminStatus = 2 - Interfaces_Interface_Subinterfaces_Subinterface_State_ADMINSTATUS_TESTING Interfaces_Interface_Subinterfaces_Subinterface_State_AdminStatus = 3 -) - -// Enum value maps for Interfaces_Interface_Subinterfaces_Subinterface_State_AdminStatus. -var ( - Interfaces_Interface_Subinterfaces_Subinterface_State_AdminStatus_name = map[int32]string{ - 0: "ADMINSTATUS_UNSET", - 1: "ADMINSTATUS_UP", - 2: "ADMINSTATUS_DOWN", - 3: "ADMINSTATUS_TESTING", - } - Interfaces_Interface_Subinterfaces_Subinterface_State_AdminStatus_value = map[string]int32{ - "ADMINSTATUS_UNSET": 0, - "ADMINSTATUS_UP": 1, - "ADMINSTATUS_DOWN": 2, - "ADMINSTATUS_TESTING": 3, - } -) - -func (x Interfaces_Interface_Subinterfaces_Subinterface_State_AdminStatus) Enum() *Interfaces_Interface_Subinterfaces_Subinterface_State_AdminStatus { - p := new(Interfaces_Interface_Subinterfaces_Subinterface_State_AdminStatus) - *p = x - return p -} - -func (x Interfaces_Interface_Subinterfaces_Subinterface_State_AdminStatus) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (Interfaces_Interface_Subinterfaces_Subinterface_State_AdminStatus) Descriptor() protoreflect.EnumDescriptor { - return file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_enumTypes[2].Descriptor() -} - -func (Interfaces_Interface_Subinterfaces_Subinterface_State_AdminStatus) Type() protoreflect.EnumType { - return &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_enumTypes[2] -} - -func (x Interfaces_Interface_Subinterfaces_Subinterface_State_AdminStatus) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use Interfaces_Interface_Subinterfaces_Subinterface_State_AdminStatus.Descriptor instead. -func (Interfaces_Interface_Subinterfaces_Subinterface_State_AdminStatus) EnumDescriptor() ([]byte, []int) { - return file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescGZIP(), []int{0, 0, 3, 0, 1, 0} -} - -type Interfaces_Interface_Subinterfaces_Subinterface_State_OperStatus int32 - -const ( - Interfaces_Interface_Subinterfaces_Subinterface_State_OPERSTATUS_UNSET Interfaces_Interface_Subinterfaces_Subinterface_State_OperStatus = 0 - Interfaces_Interface_Subinterfaces_Subinterface_State_OPERSTATUS_UP Interfaces_Interface_Subinterfaces_Subinterface_State_OperStatus = 2 - Interfaces_Interface_Subinterfaces_Subinterface_State_OPERSTATUS_DOWN Interfaces_Interface_Subinterfaces_Subinterface_State_OperStatus = 3 - Interfaces_Interface_Subinterfaces_Subinterface_State_OPERSTATUS_TESTING Interfaces_Interface_Subinterfaces_Subinterface_State_OperStatus = 4 - Interfaces_Interface_Subinterfaces_Subinterface_State_OPERSTATUS_UNKNOWN Interfaces_Interface_Subinterfaces_Subinterface_State_OperStatus = 5 - Interfaces_Interface_Subinterfaces_Subinterface_State_OPERSTATUS_DORMANT Interfaces_Interface_Subinterfaces_Subinterface_State_OperStatus = 6 - Interfaces_Interface_Subinterfaces_Subinterface_State_OPERSTATUS_NOT_PRESENT Interfaces_Interface_Subinterfaces_Subinterface_State_OperStatus = 7 - Interfaces_Interface_Subinterfaces_Subinterface_State_OPERSTATUS_LOWER_LAYER_DOWN Interfaces_Interface_Subinterfaces_Subinterface_State_OperStatus = 8 -) - -// Enum value maps for Interfaces_Interface_Subinterfaces_Subinterface_State_OperStatus. -var ( - Interfaces_Interface_Subinterfaces_Subinterface_State_OperStatus_name = map[int32]string{ - 0: "OPERSTATUS_UNSET", - 2: "OPERSTATUS_UP", - 3: "OPERSTATUS_DOWN", - 4: "OPERSTATUS_TESTING", - 5: "OPERSTATUS_UNKNOWN", - 6: "OPERSTATUS_DORMANT", - 7: "OPERSTATUS_NOT_PRESENT", - 8: "OPERSTATUS_LOWER_LAYER_DOWN", - } - Interfaces_Interface_Subinterfaces_Subinterface_State_OperStatus_value = map[string]int32{ - "OPERSTATUS_UNSET": 0, - "OPERSTATUS_UP": 2, - "OPERSTATUS_DOWN": 3, - "OPERSTATUS_TESTING": 4, - "OPERSTATUS_UNKNOWN": 5, - "OPERSTATUS_DORMANT": 6, - "OPERSTATUS_NOT_PRESENT": 7, - "OPERSTATUS_LOWER_LAYER_DOWN": 8, - } -) - -func (x Interfaces_Interface_Subinterfaces_Subinterface_State_OperStatus) Enum() *Interfaces_Interface_Subinterfaces_Subinterface_State_OperStatus { - p := new(Interfaces_Interface_Subinterfaces_Subinterface_State_OperStatus) - *p = x - return p -} - -func (x Interfaces_Interface_Subinterfaces_Subinterface_State_OperStatus) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (Interfaces_Interface_Subinterfaces_Subinterface_State_OperStatus) Descriptor() protoreflect.EnumDescriptor { - return file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_enumTypes[3].Descriptor() -} - -func (Interfaces_Interface_Subinterfaces_Subinterface_State_OperStatus) Type() protoreflect.EnumType { - return &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_enumTypes[3] -} - -func (x Interfaces_Interface_Subinterfaces_Subinterface_State_OperStatus) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use Interfaces_Interface_Subinterfaces_Subinterface_State_OperStatus.Descriptor instead. -func (Interfaces_Interface_Subinterfaces_Subinterface_State_OperStatus) EnumDescriptor() ([]byte, []int) { - return file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescGZIP(), []int{0, 0, 3, 0, 1, 1} -} - -type Interfaces struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Interface []*Interfaces_InterfaceKey `protobuf:"bytes,422482938,rep,name=interface,proto3" json:"interface,omitempty"` -} - -func (x *Interfaces) Reset() { - *x = Interfaces{} - if protoimpl.UnsafeEnabled { - mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Interfaces) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Interfaces) ProtoMessage() {} - -func (x *Interfaces) ProtoReflect() protoreflect.Message { - mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Interfaces.ProtoReflect.Descriptor instead. -func (*Interfaces) Descriptor() ([]byte, []int) { - return file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescGZIP(), []int{0} -} - -func (x *Interfaces) GetInterface() []*Interfaces_InterfaceKey { - if x != nil { - return x.Interface - } - return nil -} - -type Interfaces_Interface struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Config *Interfaces_Interface_Config `protobuf:"bytes,334174827,opt,name=config,proto3" json:"config,omitempty"` - HoldTime *Interfaces_Interface_HoldTime `protobuf:"bytes,175931092,opt,name=hold_time,json=holdTime,proto3" json:"hold_time,omitempty"` - State *Interfaces_Interface_State `protobuf:"bytes,387556140,opt,name=state,proto3" json:"state,omitempty"` - Subinterfaces *Interfaces_Interface_Subinterfaces `protobuf:"bytes,327798165,opt,name=subinterfaces,proto3" json:"subinterfaces,omitempty"` -} - -func (x *Interfaces_Interface) Reset() { - *x = Interfaces_Interface{} - if protoimpl.UnsafeEnabled { - mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Interfaces_Interface) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Interfaces_Interface) ProtoMessage() {} - -func (x *Interfaces_Interface) ProtoReflect() protoreflect.Message { - mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Interfaces_Interface.ProtoReflect.Descriptor instead. -func (*Interfaces_Interface) Descriptor() ([]byte, []int) { - return file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescGZIP(), []int{0, 0} -} - -func (x *Interfaces_Interface) GetConfig() *Interfaces_Interface_Config { - if x != nil { - return x.Config - } - return nil -} - -func (x *Interfaces_Interface) GetHoldTime() *Interfaces_Interface_HoldTime { - if x != nil { - return x.HoldTime - } - return nil -} - -func (x *Interfaces_Interface) GetState() *Interfaces_Interface_State { - if x != nil { - return x.State - } - return nil -} - -func (x *Interfaces_Interface) GetSubinterfaces() *Interfaces_Interface_Subinterfaces { - if x != nil { - return x.Subinterfaces - } - return nil -} - -type Interfaces_InterfaceKey struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Interface *Interfaces_Interface `protobuf:"bytes,2,opt,name=interface,proto3" json:"interface,omitempty"` -} - -func (x *Interfaces_InterfaceKey) Reset() { - *x = Interfaces_InterfaceKey{} - if protoimpl.UnsafeEnabled { - mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Interfaces_InterfaceKey) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Interfaces_InterfaceKey) ProtoMessage() {} - -func (x *Interfaces_InterfaceKey) ProtoReflect() protoreflect.Message { - mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Interfaces_InterfaceKey.ProtoReflect.Descriptor instead. -func (*Interfaces_InterfaceKey) Descriptor() ([]byte, []int) { - return file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescGZIP(), []int{0, 1} -} - -func (x *Interfaces_InterfaceKey) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *Interfaces_InterfaceKey) GetInterface() *Interfaces_Interface { - if x != nil { - return x.Interface - } - return nil -} - -type Interfaces_Interface_Config struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Description *ywrapper.StringValue `protobuf:"bytes,418535860,opt,name=description,proto3" json:"description,omitempty"` - Enabled *ywrapper.BoolValue `protobuf:"bytes,37224301,opt,name=enabled,proto3" json:"enabled,omitempty"` - LoopbackMode *ywrapper.BoolValue `protobuf:"bytes,253516347,opt,name=loopback_mode,json=loopbackMode,proto3" json:"loopback_mode,omitempty"` - Mtu *ywrapper.UintValue `protobuf:"bytes,376210342,opt,name=mtu,proto3" json:"mtu,omitempty"` - Name *ywrapper.StringValue `protobuf:"bytes,51804187,opt,name=name,proto3" json:"name,omitempty"` - Type enums.IETFInterfacesInterfaceType `protobuf:"varint,144596894,opt,name=type,proto3,enum=openconfig.enums.IETFInterfacesInterfaceType" json:"type,omitempty"` -} - -func (x *Interfaces_Interface_Config) Reset() { - *x = Interfaces_Interface_Config{} - if protoimpl.UnsafeEnabled { - mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Interfaces_Interface_Config) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Interfaces_Interface_Config) ProtoMessage() {} - -func (x *Interfaces_Interface_Config) ProtoReflect() protoreflect.Message { - mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Interfaces_Interface_Config.ProtoReflect.Descriptor instead. -func (*Interfaces_Interface_Config) Descriptor() ([]byte, []int) { - return file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescGZIP(), []int{0, 0, 0} -} - -func (x *Interfaces_Interface_Config) GetDescription() *ywrapper.StringValue { - if x != nil { - return x.Description - } - return nil -} - -func (x *Interfaces_Interface_Config) GetEnabled() *ywrapper.BoolValue { - if x != nil { - return x.Enabled - } - return nil -} - -func (x *Interfaces_Interface_Config) GetLoopbackMode() *ywrapper.BoolValue { - if x != nil { - return x.LoopbackMode - } - return nil -} - -func (x *Interfaces_Interface_Config) GetMtu() *ywrapper.UintValue { - if x != nil { - return x.Mtu - } - return nil -} - -func (x *Interfaces_Interface_Config) GetName() *ywrapper.StringValue { - if x != nil { - return x.Name - } - return nil -} - -func (x *Interfaces_Interface_Config) GetType() enums.IETFInterfacesInterfaceType { - if x != nil { - return x.Type - } - return enums.IETFInterfacesInterfaceType_IETFINTERFACESINTERFACETYPE_UNSET -} - -type Interfaces_Interface_HoldTime struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Config *Interfaces_Interface_HoldTime_Config `protobuf:"bytes,316512729,opt,name=config,proto3" json:"config,omitempty"` - State *Interfaces_Interface_HoldTime_State `protobuf:"bytes,483010990,opt,name=state,proto3" json:"state,omitempty"` -} - -func (x *Interfaces_Interface_HoldTime) Reset() { - *x = Interfaces_Interface_HoldTime{} - if protoimpl.UnsafeEnabled { - mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Interfaces_Interface_HoldTime) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Interfaces_Interface_HoldTime) ProtoMessage() {} - -func (x *Interfaces_Interface_HoldTime) ProtoReflect() protoreflect.Message { - mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Interfaces_Interface_HoldTime.ProtoReflect.Descriptor instead. -func (*Interfaces_Interface_HoldTime) Descriptor() ([]byte, []int) { - return file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescGZIP(), []int{0, 0, 1} -} - -func (x *Interfaces_Interface_HoldTime) GetConfig() *Interfaces_Interface_HoldTime_Config { - if x != nil { - return x.Config - } - return nil -} - -func (x *Interfaces_Interface_HoldTime) GetState() *Interfaces_Interface_HoldTime_State { - if x != nil { - return x.State - } - return nil -} - -type Interfaces_Interface_State struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - AdminStatus Interfaces_Interface_State_AdminStatus `protobuf:"varint,474494763,opt,name=admin_status,json=adminStatus,proto3,enum=openconfig.openconfig_interfaces.Interfaces_Interface_State_AdminStatus" json:"admin_status,omitempty"` - Counters *Interfaces_Interface_State_Counters `protobuf:"bytes,83645964,opt,name=counters,proto3" json:"counters,omitempty"` - Description *ywrapper.StringValue `protobuf:"bytes,389435287,opt,name=description,proto3" json:"description,omitempty"` - Enabled *ywrapper.BoolValue `protobuf:"bytes,330927518,opt,name=enabled,proto3" json:"enabled,omitempty"` - Ifindex *ywrapper.UintValue `protobuf:"bytes,116108202,opt,name=ifindex,proto3" json:"ifindex,omitempty"` - LastChange *ywrapper.UintValue `protobuf:"bytes,127348880,opt,name=last_change,json=lastChange,proto3" json:"last_change,omitempty"` - Logical *ywrapper.BoolValue `protobuf:"bytes,440460216,opt,name=logical,proto3" json:"logical,omitempty"` - LoopbackMode *ywrapper.BoolValue `protobuf:"bytes,372935512,opt,name=loopback_mode,json=loopbackMode,proto3" json:"loopback_mode,omitempty"` - Mtu *ywrapper.UintValue `protobuf:"bytes,96390485,opt,name=mtu,proto3" json:"mtu,omitempty"` - Name *ywrapper.StringValue `protobuf:"bytes,503495278,opt,name=name,proto3" json:"name,omitempty"` - OperStatus Interfaces_Interface_State_OperStatus `protobuf:"varint,470394226,opt,name=oper_status,json=operStatus,proto3,enum=openconfig.openconfig_interfaces.Interfaces_Interface_State_OperStatus" json:"oper_status,omitempty"` - Type enums.IETFInterfacesInterfaceType `protobuf:"varint,358148579,opt,name=type,proto3,enum=openconfig.enums.IETFInterfacesInterfaceType" json:"type,omitempty"` -} - -func (x *Interfaces_Interface_State) Reset() { - *x = Interfaces_Interface_State{} - if protoimpl.UnsafeEnabled { - mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Interfaces_Interface_State) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Interfaces_Interface_State) ProtoMessage() {} - -func (x *Interfaces_Interface_State) ProtoReflect() protoreflect.Message { - mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Interfaces_Interface_State.ProtoReflect.Descriptor instead. -func (*Interfaces_Interface_State) Descriptor() ([]byte, []int) { - return file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescGZIP(), []int{0, 0, 2} -} - -func (x *Interfaces_Interface_State) GetAdminStatus() Interfaces_Interface_State_AdminStatus { - if x != nil { - return x.AdminStatus - } - return Interfaces_Interface_State_ADMINSTATUS_UNSET -} - -func (x *Interfaces_Interface_State) GetCounters() *Interfaces_Interface_State_Counters { - if x != nil { - return x.Counters - } - return nil -} - -func (x *Interfaces_Interface_State) GetDescription() *ywrapper.StringValue { - if x != nil { - return x.Description - } - return nil -} - -func (x *Interfaces_Interface_State) GetEnabled() *ywrapper.BoolValue { - if x != nil { - return x.Enabled - } - return nil -} - -func (x *Interfaces_Interface_State) GetIfindex() *ywrapper.UintValue { - if x != nil { - return x.Ifindex - } - return nil -} - -func (x *Interfaces_Interface_State) GetLastChange() *ywrapper.UintValue { - if x != nil { - return x.LastChange - } - return nil -} - -func (x *Interfaces_Interface_State) GetLogical() *ywrapper.BoolValue { - if x != nil { - return x.Logical - } - return nil -} - -func (x *Interfaces_Interface_State) GetLoopbackMode() *ywrapper.BoolValue { - if x != nil { - return x.LoopbackMode - } - return nil -} - -func (x *Interfaces_Interface_State) GetMtu() *ywrapper.UintValue { - if x != nil { - return x.Mtu - } - return nil -} - -func (x *Interfaces_Interface_State) GetName() *ywrapper.StringValue { - if x != nil { - return x.Name - } - return nil -} - -func (x *Interfaces_Interface_State) GetOperStatus() Interfaces_Interface_State_OperStatus { - if x != nil { - return x.OperStatus - } - return Interfaces_Interface_State_OPERSTATUS_UNSET -} - -func (x *Interfaces_Interface_State) GetType() enums.IETFInterfacesInterfaceType { - if x != nil { - return x.Type - } - return enums.IETFInterfacesInterfaceType_IETFINTERFACESINTERFACETYPE_UNSET -} - -type Interfaces_Interface_Subinterfaces struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Subinterface []*Interfaces_Interface_Subinterfaces_SubinterfaceKey `protobuf:"bytes,464802819,rep,name=subinterface,proto3" json:"subinterface,omitempty"` -} - -func (x *Interfaces_Interface_Subinterfaces) Reset() { - *x = Interfaces_Interface_Subinterfaces{} - if protoimpl.UnsafeEnabled { - mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Interfaces_Interface_Subinterfaces) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Interfaces_Interface_Subinterfaces) ProtoMessage() {} - -func (x *Interfaces_Interface_Subinterfaces) ProtoReflect() protoreflect.Message { - mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Interfaces_Interface_Subinterfaces.ProtoReflect.Descriptor instead. -func (*Interfaces_Interface_Subinterfaces) Descriptor() ([]byte, []int) { - return file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescGZIP(), []int{0, 0, 3} -} - -func (x *Interfaces_Interface_Subinterfaces) GetSubinterface() []*Interfaces_Interface_Subinterfaces_SubinterfaceKey { - if x != nil { - return x.Subinterface - } - return nil -} - -type Interfaces_Interface_HoldTime_Config struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Down *ywrapper.UintValue `protobuf:"bytes,171181656,opt,name=down,proto3" json:"down,omitempty"` - Up *ywrapper.UintValue `protobuf:"bytes,62026235,opt,name=up,proto3" json:"up,omitempty"` -} - -func (x *Interfaces_Interface_HoldTime_Config) Reset() { - *x = Interfaces_Interface_HoldTime_Config{} - if protoimpl.UnsafeEnabled { - mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Interfaces_Interface_HoldTime_Config) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Interfaces_Interface_HoldTime_Config) ProtoMessage() {} - -func (x *Interfaces_Interface_HoldTime_Config) ProtoReflect() protoreflect.Message { - mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[7] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Interfaces_Interface_HoldTime_Config.ProtoReflect.Descriptor instead. -func (*Interfaces_Interface_HoldTime_Config) Descriptor() ([]byte, []int) { - return file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescGZIP(), []int{0, 0, 1, 0} -} - -func (x *Interfaces_Interface_HoldTime_Config) GetDown() *ywrapper.UintValue { - if x != nil { - return x.Down - } - return nil -} - -func (x *Interfaces_Interface_HoldTime_Config) GetUp() *ywrapper.UintValue { - if x != nil { - return x.Up - } - return nil -} - -type Interfaces_Interface_HoldTime_State struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Down *ywrapper.UintValue `protobuf:"bytes,167887721,opt,name=down,proto3" json:"down,omitempty"` - Up *ywrapper.UintValue `protobuf:"bytes,223847598,opt,name=up,proto3" json:"up,omitempty"` -} - -func (x *Interfaces_Interface_HoldTime_State) Reset() { - *x = Interfaces_Interface_HoldTime_State{} - if protoimpl.UnsafeEnabled { - mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[8] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Interfaces_Interface_HoldTime_State) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Interfaces_Interface_HoldTime_State) ProtoMessage() {} - -func (x *Interfaces_Interface_HoldTime_State) ProtoReflect() protoreflect.Message { - mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[8] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Interfaces_Interface_HoldTime_State.ProtoReflect.Descriptor instead. -func (*Interfaces_Interface_HoldTime_State) Descriptor() ([]byte, []int) { - return file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescGZIP(), []int{0, 0, 1, 1} -} - -func (x *Interfaces_Interface_HoldTime_State) GetDown() *ywrapper.UintValue { - if x != nil { - return x.Down - } - return nil -} - -func (x *Interfaces_Interface_HoldTime_State) GetUp() *ywrapper.UintValue { - if x != nil { - return x.Up - } - return nil -} - -type Interfaces_Interface_State_Counters struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - CarrierTransitions *ywrapper.UintValue `protobuf:"bytes,270803130,opt,name=carrier_transitions,json=carrierTransitions,proto3" json:"carrier_transitions,omitempty"` - InBroadcastPkts *ywrapper.UintValue `protobuf:"bytes,280201989,opt,name=in_broadcast_pkts,json=inBroadcastPkts,proto3" json:"in_broadcast_pkts,omitempty"` - InDiscards *ywrapper.UintValue `protobuf:"bytes,11979514,opt,name=in_discards,json=inDiscards,proto3" json:"in_discards,omitempty"` - InErrors *ywrapper.UintValue `protobuf:"bytes,456697578,opt,name=in_errors,json=inErrors,proto3" json:"in_errors,omitempty"` - InFcsErrors *ywrapper.UintValue `protobuf:"bytes,501559027,opt,name=in_fcs_errors,json=inFcsErrors,proto3" json:"in_fcs_errors,omitempty"` - InMulticastPkts *ywrapper.UintValue `protobuf:"bytes,113269128,opt,name=in_multicast_pkts,json=inMulticastPkts,proto3" json:"in_multicast_pkts,omitempty"` - InOctets *ywrapper.UintValue `protobuf:"bytes,333138891,opt,name=in_octets,json=inOctets,proto3" json:"in_octets,omitempty"` - InPkts *ywrapper.UintValue `protobuf:"bytes,412843491,opt,name=in_pkts,json=inPkts,proto3" json:"in_pkts,omitempty"` - InUnicastPkts *ywrapper.UintValue `protobuf:"bytes,272792307,opt,name=in_unicast_pkts,json=inUnicastPkts,proto3" json:"in_unicast_pkts,omitempty"` - InUnknownProtos *ywrapper.UintValue `protobuf:"bytes,241475497,opt,name=in_unknown_protos,json=inUnknownProtos,proto3" json:"in_unknown_protos,omitempty"` - LastClear *ywrapper.UintValue `protobuf:"bytes,186014919,opt,name=last_clear,json=lastClear,proto3" json:"last_clear,omitempty"` - OutBroadcastPkts *ywrapper.UintValue `protobuf:"bytes,338589668,opt,name=out_broadcast_pkts,json=outBroadcastPkts,proto3" json:"out_broadcast_pkts,omitempty"` - OutDiscards *ywrapper.UintValue `protobuf:"bytes,254055111,opt,name=out_discards,json=outDiscards,proto3" json:"out_discards,omitempty"` - OutErrors *ywrapper.UintValue `protobuf:"bytes,471103047,opt,name=out_errors,json=outErrors,proto3" json:"out_errors,omitempty"` - OutMulticastPkts *ywrapper.UintValue `protobuf:"bytes,457840757,opt,name=out_multicast_pkts,json=outMulticastPkts,proto3" json:"out_multicast_pkts,omitempty"` - OutOctets *ywrapper.UintValue `protobuf:"bytes,201005514,opt,name=out_octets,json=outOctets,proto3" json:"out_octets,omitempty"` - OutPkts *ywrapper.UintValue `protobuf:"bytes,437582090,opt,name=out_pkts,json=outPkts,proto3" json:"out_pkts,omitempty"` - OutUnicastPkts *ywrapper.UintValue `protobuf:"bytes,36542246,opt,name=out_unicast_pkts,json=outUnicastPkts,proto3" json:"out_unicast_pkts,omitempty"` -} - -func (x *Interfaces_Interface_State_Counters) Reset() { - *x = Interfaces_Interface_State_Counters{} - if protoimpl.UnsafeEnabled { - mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[9] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Interfaces_Interface_State_Counters) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Interfaces_Interface_State_Counters) ProtoMessage() {} - -func (x *Interfaces_Interface_State_Counters) ProtoReflect() protoreflect.Message { - mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[9] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Interfaces_Interface_State_Counters.ProtoReflect.Descriptor instead. -func (*Interfaces_Interface_State_Counters) Descriptor() ([]byte, []int) { - return file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescGZIP(), []int{0, 0, 2, 0} -} - -func (x *Interfaces_Interface_State_Counters) GetCarrierTransitions() *ywrapper.UintValue { - if x != nil { - return x.CarrierTransitions - } - return nil -} - -func (x *Interfaces_Interface_State_Counters) GetInBroadcastPkts() *ywrapper.UintValue { - if x != nil { - return x.InBroadcastPkts - } - return nil -} - -func (x *Interfaces_Interface_State_Counters) GetInDiscards() *ywrapper.UintValue { - if x != nil { - return x.InDiscards - } - return nil -} - -func (x *Interfaces_Interface_State_Counters) GetInErrors() *ywrapper.UintValue { - if x != nil { - return x.InErrors - } - return nil -} - -func (x *Interfaces_Interface_State_Counters) GetInFcsErrors() *ywrapper.UintValue { - if x != nil { - return x.InFcsErrors - } - return nil -} - -func (x *Interfaces_Interface_State_Counters) GetInMulticastPkts() *ywrapper.UintValue { - if x != nil { - return x.InMulticastPkts - } - return nil -} - -func (x *Interfaces_Interface_State_Counters) GetInOctets() *ywrapper.UintValue { - if x != nil { - return x.InOctets - } - return nil -} - -func (x *Interfaces_Interface_State_Counters) GetInPkts() *ywrapper.UintValue { - if x != nil { - return x.InPkts - } - return nil -} - -func (x *Interfaces_Interface_State_Counters) GetInUnicastPkts() *ywrapper.UintValue { - if x != nil { - return x.InUnicastPkts - } - return nil -} - -func (x *Interfaces_Interface_State_Counters) GetInUnknownProtos() *ywrapper.UintValue { - if x != nil { - return x.InUnknownProtos - } - return nil -} - -func (x *Interfaces_Interface_State_Counters) GetLastClear() *ywrapper.UintValue { - if x != nil { - return x.LastClear - } - return nil -} - -func (x *Interfaces_Interface_State_Counters) GetOutBroadcastPkts() *ywrapper.UintValue { - if x != nil { - return x.OutBroadcastPkts - } - return nil -} - -func (x *Interfaces_Interface_State_Counters) GetOutDiscards() *ywrapper.UintValue { - if x != nil { - return x.OutDiscards - } - return nil -} - -func (x *Interfaces_Interface_State_Counters) GetOutErrors() *ywrapper.UintValue { - if x != nil { - return x.OutErrors - } - return nil -} - -func (x *Interfaces_Interface_State_Counters) GetOutMulticastPkts() *ywrapper.UintValue { - if x != nil { - return x.OutMulticastPkts - } - return nil -} - -func (x *Interfaces_Interface_State_Counters) GetOutOctets() *ywrapper.UintValue { - if x != nil { - return x.OutOctets - } - return nil -} - -func (x *Interfaces_Interface_State_Counters) GetOutPkts() *ywrapper.UintValue { - if x != nil { - return x.OutPkts - } - return nil -} - -func (x *Interfaces_Interface_State_Counters) GetOutUnicastPkts() *ywrapper.UintValue { - if x != nil { - return x.OutUnicastPkts - } - return nil -} - -type Interfaces_Interface_Subinterfaces_Subinterface struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Config *Interfaces_Interface_Subinterfaces_Subinterface_Config `protobuf:"bytes,175001476,opt,name=config,proto3" json:"config,omitempty"` - State *Interfaces_Interface_Subinterfaces_Subinterface_State `protobuf:"bytes,501974173,opt,name=state,proto3" json:"state,omitempty"` -} - -func (x *Interfaces_Interface_Subinterfaces_Subinterface) Reset() { - *x = Interfaces_Interface_Subinterfaces_Subinterface{} - if protoimpl.UnsafeEnabled { - mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[10] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Interfaces_Interface_Subinterfaces_Subinterface) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Interfaces_Interface_Subinterfaces_Subinterface) ProtoMessage() {} - -func (x *Interfaces_Interface_Subinterfaces_Subinterface) ProtoReflect() protoreflect.Message { - mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[10] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Interfaces_Interface_Subinterfaces_Subinterface.ProtoReflect.Descriptor instead. -func (*Interfaces_Interface_Subinterfaces_Subinterface) Descriptor() ([]byte, []int) { - return file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescGZIP(), []int{0, 0, 3, 0} -} - -func (x *Interfaces_Interface_Subinterfaces_Subinterface) GetConfig() *Interfaces_Interface_Subinterfaces_Subinterface_Config { - if x != nil { - return x.Config - } - return nil -} - -func (x *Interfaces_Interface_Subinterfaces_Subinterface) GetState() *Interfaces_Interface_Subinterfaces_Subinterface_State { - if x != nil { - return x.State - } - return nil -} - -type Interfaces_Interface_Subinterfaces_SubinterfaceKey struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Index uint64 `protobuf:"varint,1,opt,name=index,proto3" json:"index,omitempty"` - Subinterface *Interfaces_Interface_Subinterfaces_Subinterface `protobuf:"bytes,2,opt,name=subinterface,proto3" json:"subinterface,omitempty"` -} - -func (x *Interfaces_Interface_Subinterfaces_SubinterfaceKey) Reset() { - *x = Interfaces_Interface_Subinterfaces_SubinterfaceKey{} - if protoimpl.UnsafeEnabled { - mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[11] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Interfaces_Interface_Subinterfaces_SubinterfaceKey) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Interfaces_Interface_Subinterfaces_SubinterfaceKey) ProtoMessage() {} - -func (x *Interfaces_Interface_Subinterfaces_SubinterfaceKey) ProtoReflect() protoreflect.Message { - mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[11] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Interfaces_Interface_Subinterfaces_SubinterfaceKey.ProtoReflect.Descriptor instead. -func (*Interfaces_Interface_Subinterfaces_SubinterfaceKey) Descriptor() ([]byte, []int) { - return file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescGZIP(), []int{0, 0, 3, 1} -} - -func (x *Interfaces_Interface_Subinterfaces_SubinterfaceKey) GetIndex() uint64 { - if x != nil { - return x.Index - } - return 0 -} - -func (x *Interfaces_Interface_Subinterfaces_SubinterfaceKey) GetSubinterface() *Interfaces_Interface_Subinterfaces_Subinterface { - if x != nil { - return x.Subinterface - } - return nil -} - -type Interfaces_Interface_Subinterfaces_Subinterface_Config struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Description *ywrapper.StringValue `protobuf:"bytes,280671199,opt,name=description,proto3" json:"description,omitempty"` - Enabled *ywrapper.BoolValue `protobuf:"bytes,297236390,opt,name=enabled,proto3" json:"enabled,omitempty"` - Index *ywrapper.UintValue `protobuf:"bytes,279269781,opt,name=index,proto3" json:"index,omitempty"` -} - -func (x *Interfaces_Interface_Subinterfaces_Subinterface_Config) Reset() { - *x = Interfaces_Interface_Subinterfaces_Subinterface_Config{} - if protoimpl.UnsafeEnabled { - mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[12] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Interfaces_Interface_Subinterfaces_Subinterface_Config) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Interfaces_Interface_Subinterfaces_Subinterface_Config) ProtoMessage() {} - -func (x *Interfaces_Interface_Subinterfaces_Subinterface_Config) ProtoReflect() protoreflect.Message { - mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[12] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Interfaces_Interface_Subinterfaces_Subinterface_Config.ProtoReflect.Descriptor instead. -func (*Interfaces_Interface_Subinterfaces_Subinterface_Config) Descriptor() ([]byte, []int) { - return file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescGZIP(), []int{0, 0, 3, 0, 0} -} - -func (x *Interfaces_Interface_Subinterfaces_Subinterface_Config) GetDescription() *ywrapper.StringValue { - if x != nil { - return x.Description - } - return nil -} - -func (x *Interfaces_Interface_Subinterfaces_Subinterface_Config) GetEnabled() *ywrapper.BoolValue { - if x != nil { - return x.Enabled - } - return nil -} - -func (x *Interfaces_Interface_Subinterfaces_Subinterface_Config) GetIndex() *ywrapper.UintValue { - if x != nil { - return x.Index - } - return nil -} - -type Interfaces_Interface_Subinterfaces_Subinterface_State struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - AdminStatus Interfaces_Interface_Subinterfaces_Subinterface_State_AdminStatus `protobuf:"varint,250658952,opt,name=admin_status,json=adminStatus,proto3,enum=openconfig.openconfig_interfaces.Interfaces_Interface_Subinterfaces_Subinterface_State_AdminStatus" json:"admin_status,omitempty"` - Counters *Interfaces_Interface_Subinterfaces_Subinterface_State_Counters `protobuf:"bytes,483442783,opt,name=counters,proto3" json:"counters,omitempty"` - Description *ywrapper.StringValue `protobuf:"bytes,49943526,opt,name=description,proto3" json:"description,omitempty"` - Enabled *ywrapper.BoolValue `protobuf:"bytes,468513843,opt,name=enabled,proto3" json:"enabled,omitempty"` - Ifindex *ywrapper.UintValue `protobuf:"bytes,511987815,opt,name=ifindex,proto3" json:"ifindex,omitempty"` - Index *ywrapper.UintValue `protobuf:"bytes,80745756,opt,name=index,proto3" json:"index,omitempty"` - LastChange *ywrapper.UintValue `protobuf:"bytes,29904521,opt,name=last_change,json=lastChange,proto3" json:"last_change,omitempty"` - Logical *ywrapper.BoolValue `protobuf:"bytes,294124401,opt,name=logical,proto3" json:"logical,omitempty"` - Name *ywrapper.StringValue `protobuf:"bytes,279346681,opt,name=name,proto3" json:"name,omitempty"` - OperStatus Interfaces_Interface_Subinterfaces_Subinterface_State_OperStatus `protobuf:"varint,401969247,opt,name=oper_status,json=operStatus,proto3,enum=openconfig.openconfig_interfaces.Interfaces_Interface_Subinterfaces_Subinterface_State_OperStatus" json:"oper_status,omitempty"` -} - -func (x *Interfaces_Interface_Subinterfaces_Subinterface_State) Reset() { - *x = Interfaces_Interface_Subinterfaces_Subinterface_State{} - if protoimpl.UnsafeEnabled { - mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[13] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Interfaces_Interface_Subinterfaces_Subinterface_State) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Interfaces_Interface_Subinterfaces_Subinterface_State) ProtoMessage() {} - -func (x *Interfaces_Interface_Subinterfaces_Subinterface_State) ProtoReflect() protoreflect.Message { - mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[13] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Interfaces_Interface_Subinterfaces_Subinterface_State.ProtoReflect.Descriptor instead. -func (*Interfaces_Interface_Subinterfaces_Subinterface_State) Descriptor() ([]byte, []int) { - return file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescGZIP(), []int{0, 0, 3, 0, 1} -} - -func (x *Interfaces_Interface_Subinterfaces_Subinterface_State) GetAdminStatus() Interfaces_Interface_Subinterfaces_Subinterface_State_AdminStatus { - if x != nil { - return x.AdminStatus - } - return Interfaces_Interface_Subinterfaces_Subinterface_State_ADMINSTATUS_UNSET -} - -func (x *Interfaces_Interface_Subinterfaces_Subinterface_State) GetCounters() *Interfaces_Interface_Subinterfaces_Subinterface_State_Counters { - if x != nil { - return x.Counters - } - return nil -} - -func (x *Interfaces_Interface_Subinterfaces_Subinterface_State) GetDescription() *ywrapper.StringValue { - if x != nil { - return x.Description - } - return nil -} - -func (x *Interfaces_Interface_Subinterfaces_Subinterface_State) GetEnabled() *ywrapper.BoolValue { - if x != nil { - return x.Enabled - } - return nil -} - -func (x *Interfaces_Interface_Subinterfaces_Subinterface_State) GetIfindex() *ywrapper.UintValue { - if x != nil { - return x.Ifindex - } - return nil -} - -func (x *Interfaces_Interface_Subinterfaces_Subinterface_State) GetIndex() *ywrapper.UintValue { - if x != nil { - return x.Index - } - return nil -} - -func (x *Interfaces_Interface_Subinterfaces_Subinterface_State) GetLastChange() *ywrapper.UintValue { - if x != nil { - return x.LastChange - } - return nil -} - -func (x *Interfaces_Interface_Subinterfaces_Subinterface_State) GetLogical() *ywrapper.BoolValue { - if x != nil { - return x.Logical - } - return nil -} - -func (x *Interfaces_Interface_Subinterfaces_Subinterface_State) GetName() *ywrapper.StringValue { - if x != nil { - return x.Name - } - return nil -} - -func (x *Interfaces_Interface_Subinterfaces_Subinterface_State) GetOperStatus() Interfaces_Interface_Subinterfaces_Subinterface_State_OperStatus { - if x != nil { - return x.OperStatus - } - return Interfaces_Interface_Subinterfaces_Subinterface_State_OPERSTATUS_UNSET -} - -type Interfaces_Interface_Subinterfaces_Subinterface_State_Counters struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - CarrierTransitions *ywrapper.UintValue `protobuf:"bytes,141120277,opt,name=carrier_transitions,json=carrierTransitions,proto3" json:"carrier_transitions,omitempty"` - InBroadcastPkts *ywrapper.UintValue `protobuf:"bytes,120244022,opt,name=in_broadcast_pkts,json=inBroadcastPkts,proto3" json:"in_broadcast_pkts,omitempty"` - InDiscards *ywrapper.UintValue `protobuf:"bytes,307490461,opt,name=in_discards,json=inDiscards,proto3" json:"in_discards,omitempty"` - InErrors *ywrapper.UintValue `protobuf:"bytes,319720873,opt,name=in_errors,json=inErrors,proto3" json:"in_errors,omitempty"` - InFcsErrors *ywrapper.UintValue `protobuf:"bytes,169858424,opt,name=in_fcs_errors,json=inFcsErrors,proto3" json:"in_fcs_errors,omitempty"` - InMulticastPkts *ywrapper.UintValue `protobuf:"bytes,320618859,opt,name=in_multicast_pkts,json=inMulticastPkts,proto3" json:"in_multicast_pkts,omitempty"` - InOctets *ywrapper.UintValue `protobuf:"bytes,530205868,opt,name=in_octets,json=inOctets,proto3" json:"in_octets,omitempty"` - InPkts *ywrapper.UintValue `protobuf:"bytes,441153352,opt,name=in_pkts,json=inPkts,proto3" json:"in_pkts,omitempty"` - InUnicastPkts *ywrapper.UintValue `protobuf:"bytes,177838880,opt,name=in_unicast_pkts,json=inUnicastPkts,proto3" json:"in_unicast_pkts,omitempty"` - InUnknownProtos *ywrapper.UintValue `protobuf:"bytes,146059814,opt,name=in_unknown_protos,json=inUnknownProtos,proto3" json:"in_unknown_protos,omitempty"` - LastClear *ywrapper.UintValue `protobuf:"bytes,518046966,opt,name=last_clear,json=lastClear,proto3" json:"last_clear,omitempty"` - OutBroadcastPkts *ywrapper.UintValue `protobuf:"bytes,501221245,opt,name=out_broadcast_pkts,json=outBroadcastPkts,proto3" json:"out_broadcast_pkts,omitempty"` - OutDiscards *ywrapper.UintValue `protobuf:"bytes,159539762,opt,name=out_discards,json=outDiscards,proto3" json:"out_discards,omitempty"` - OutErrors *ywrapper.UintValue `protobuf:"bytes,466636898,opt,name=out_errors,json=outErrors,proto3" json:"out_errors,omitempty"` - OutMulticastPkts *ywrapper.UintValue `protobuf:"bytes,326155776,opt,name=out_multicast_pkts,json=outMulticastPkts,proto3" json:"out_multicast_pkts,omitempty"` - OutOctets *ywrapper.UintValue `protobuf:"bytes,50579235,opt,name=out_octets,json=outOctets,proto3" json:"out_octets,omitempty"` - OutPkts *ywrapper.UintValue `protobuf:"bytes,29497115,opt,name=out_pkts,json=outPkts,proto3" json:"out_pkts,omitempty"` - OutUnicastPkts *ywrapper.UintValue `protobuf:"bytes,297910971,opt,name=out_unicast_pkts,json=outUnicastPkts,proto3" json:"out_unicast_pkts,omitempty"` -} - -func (x *Interfaces_Interface_Subinterfaces_Subinterface_State_Counters) Reset() { - *x = Interfaces_Interface_Subinterfaces_Subinterface_State_Counters{} - if protoimpl.UnsafeEnabled { - mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[14] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Interfaces_Interface_Subinterfaces_Subinterface_State_Counters) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Interfaces_Interface_Subinterfaces_Subinterface_State_Counters) ProtoMessage() {} - -func (x *Interfaces_Interface_Subinterfaces_Subinterface_State_Counters) ProtoReflect() protoreflect.Message { - mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[14] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Interfaces_Interface_Subinterfaces_Subinterface_State_Counters.ProtoReflect.Descriptor instead. -func (*Interfaces_Interface_Subinterfaces_Subinterface_State_Counters) Descriptor() ([]byte, []int) { - return file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescGZIP(), []int{0, 0, 3, 0, 1, 0} -} - -func (x *Interfaces_Interface_Subinterfaces_Subinterface_State_Counters) GetCarrierTransitions() *ywrapper.UintValue { - if x != nil { - return x.CarrierTransitions - } - return nil -} - -func (x *Interfaces_Interface_Subinterfaces_Subinterface_State_Counters) GetInBroadcastPkts() *ywrapper.UintValue { - if x != nil { - return x.InBroadcastPkts - } - return nil -} - -func (x *Interfaces_Interface_Subinterfaces_Subinterface_State_Counters) GetInDiscards() *ywrapper.UintValue { - if x != nil { - return x.InDiscards - } - return nil -} - -func (x *Interfaces_Interface_Subinterfaces_Subinterface_State_Counters) GetInErrors() *ywrapper.UintValue { - if x != nil { - return x.InErrors - } - return nil -} - -func (x *Interfaces_Interface_Subinterfaces_Subinterface_State_Counters) GetInFcsErrors() *ywrapper.UintValue { - if x != nil { - return x.InFcsErrors - } - return nil -} - -func (x *Interfaces_Interface_Subinterfaces_Subinterface_State_Counters) GetInMulticastPkts() *ywrapper.UintValue { - if x != nil { - return x.InMulticastPkts - } - return nil -} - -func (x *Interfaces_Interface_Subinterfaces_Subinterface_State_Counters) GetInOctets() *ywrapper.UintValue { - if x != nil { - return x.InOctets - } - return nil -} - -func (x *Interfaces_Interface_Subinterfaces_Subinterface_State_Counters) GetInPkts() *ywrapper.UintValue { - if x != nil { - return x.InPkts - } - return nil -} - -func (x *Interfaces_Interface_Subinterfaces_Subinterface_State_Counters) GetInUnicastPkts() *ywrapper.UintValue { - if x != nil { - return x.InUnicastPkts - } - return nil -} - -func (x *Interfaces_Interface_Subinterfaces_Subinterface_State_Counters) GetInUnknownProtos() *ywrapper.UintValue { - if x != nil { - return x.InUnknownProtos - } - return nil -} - -func (x *Interfaces_Interface_Subinterfaces_Subinterface_State_Counters) GetLastClear() *ywrapper.UintValue { - if x != nil { - return x.LastClear - } - return nil -} - -func (x *Interfaces_Interface_Subinterfaces_Subinterface_State_Counters) GetOutBroadcastPkts() *ywrapper.UintValue { - if x != nil { - return x.OutBroadcastPkts - } - return nil -} - -func (x *Interfaces_Interface_Subinterfaces_Subinterface_State_Counters) GetOutDiscards() *ywrapper.UintValue { - if x != nil { - return x.OutDiscards - } - return nil -} - -func (x *Interfaces_Interface_Subinterfaces_Subinterface_State_Counters) GetOutErrors() *ywrapper.UintValue { - if x != nil { - return x.OutErrors - } - return nil -} - -func (x *Interfaces_Interface_Subinterfaces_Subinterface_State_Counters) GetOutMulticastPkts() *ywrapper.UintValue { - if x != nil { - return x.OutMulticastPkts - } - return nil -} - -func (x *Interfaces_Interface_Subinterfaces_Subinterface_State_Counters) GetOutOctets() *ywrapper.UintValue { - if x != nil { - return x.OutOctets - } - return nil -} - -func (x *Interfaces_Interface_Subinterfaces_Subinterface_State_Counters) GetOutPkts() *ywrapper.UintValue { - if x != nil { - return x.OutPkts - } - return nil -} - -func (x *Interfaces_Interface_Subinterfaces_Subinterface_State_Counters) GetOutUnicastPkts() *ywrapper.UintValue { - if x != nil { - return x.OutUnicastPkts - } - return nil -} - -var File_openconfig_openconfig_interfaces_openconfig_interfaces_proto protoreflect.FileDescriptor - -var file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDesc = []byte{ - 0x0a, 0x3c, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x6f, 0x70, 0x65, - 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, - 0x65, 0x73, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x20, - 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, - 0x1a, 0x38, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, - 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x79, 0x67, 0x6f, 0x74, 0x2f, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2f, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2f, 0x79, 0x77, 0x72, 0x61, - 0x70, 0x70, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x30, 0x67, 0x69, 0x74, 0x68, - 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x2f, 0x79, 0x67, 0x6f, 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x79, 0x65, 0x78, - 0x74, 0x2f, 0x79, 0x65, 0x78, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x6f, 0x70, - 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x65, 0x6e, 0x75, 0x6d, 0x73, 0x2f, 0x65, - 0x6e, 0x75, 0x6d, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xf3, 0x5a, 0x0a, 0x0a, 0x49, - 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x12, 0x75, 0x0a, 0x09, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x18, 0xfa, 0xa7, 0xba, 0xc9, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x39, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x6f, 0x70, - 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, - 0x63, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x49, - 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x4b, 0x65, 0x79, 0x42, 0x18, 0x82, 0x41, 0x15, - 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x66, 0x61, 0x63, 0x65, 0x52, 0x09, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, - 0x1a, 0xd3, 0x58, 0x0a, 0x09, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x12, 0x7a, - 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0xeb, 0xb4, 0xac, 0x9f, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, - 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, - 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x42, 0x1f, 0x82, 0x41, 0x1c, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, - 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x83, 0x01, 0x0a, 0x09, 0x68, - 0x6f, 0x6c, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0xd4, 0xfd, 0xf1, 0x53, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x3f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x6f, - 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, - 0x61, 0x63, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, - 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2e, 0x48, 0x6f, 0x6c, 0x64, 0x54, 0x69, - 0x6d, 0x65, 0x42, 0x22, 0x82, 0x41, 0x1f, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, - 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x68, 0x6f, 0x6c, - 0x64, 0x2d, 0x74, 0x69, 0x6d, 0x65, 0x52, 0x08, 0x68, 0x6f, 0x6c, 0x64, 0x54, 0x69, 0x6d, 0x65, - 0x12, 0x76, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0xac, 0xc6, 0xe6, 0xb8, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, - 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x42, 0x1e, 0x82, 0x41, 0x1b, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, - 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, - 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x96, 0x01, 0x0a, 0x0d, 0x73, 0x75, 0x62, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x18, 0x95, 0x9b, 0xa7, 0x9c, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x44, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, - 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2e, 0x53, 0x75, 0x62, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x42, 0x26, 0x82, 0x41, 0x23, 0x2f, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, - 0x65, 0x73, 0x52, 0x0d, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, - 0x73, 0x1a, 0xc9, 0x04, 0x0a, 0x06, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x68, 0x0a, 0x0b, - 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xb4, 0xb3, 0xc9, 0xc7, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, - 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x2b, 0x82, 0x41, - 0x28, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x64, 0x65, - 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x59, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, - 0x64, 0x18, 0xed, 0xfe, 0xdf, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, - 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, - 0x27, 0x82, 0x41, 0x24, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x2f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, - 0x64, 0x12, 0x6a, 0x0a, 0x0d, 0x6c, 0x6f, 0x6f, 0x70, 0x62, 0x61, 0x63, 0x6b, 0x5f, 0x6d, 0x6f, - 0x64, 0x65, 0x18, 0xbb, 0xb4, 0xf1, 0x78, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, - 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x42, 0x2d, 0x82, 0x41, 0x2a, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, - 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x2f, 0x6c, 0x6f, 0x6f, 0x70, 0x62, 0x61, 0x63, 0x6b, 0x2d, 0x6d, 0x6f, 0x64, 0x65, 0x52, - 0x0c, 0x6c, 0x6f, 0x6f, 0x70, 0x62, 0x61, 0x63, 0x6b, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x4e, 0x0a, - 0x03, 0x6d, 0x74, 0x75, 0x18, 0xa6, 0x87, 0xb2, 0xb3, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, - 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x42, 0x23, 0x82, 0x41, 0x20, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, - 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x6d, 0x74, 0x75, 0x52, 0x03, 0x6d, 0x74, 0x75, 0x12, 0x52, 0x0a, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x9b, 0xf0, 0xd9, 0x18, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, - 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x24, 0x82, 0x41, 0x21, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x52, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x12, 0x6a, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x9e, 0xbf, 0xf9, 0x44, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x2d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, - 0x65, 0x6e, 0x75, 0x6d, 0x73, 0x2e, 0x49, 0x45, 0x54, 0x46, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, - 0x61, 0x63, 0x65, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x54, 0x79, 0x70, - 0x65, 0x42, 0x24, 0x82, 0x41, 0x21, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, - 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x1a, 0x9d, 0x05, - 0x0a, 0x08, 0x48, 0x6f, 0x6c, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x8d, 0x01, 0x0a, 0x06, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0xd9, 0xb3, 0xf6, 0x96, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x46, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x6f, 0x70, 0x65, - 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, - 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x49, 0x6e, - 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2e, 0x48, 0x6f, 0x6c, 0x64, 0x54, 0x69, 0x6d, 0x65, - 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x42, 0x29, 0x82, 0x41, 0x26, 0x2f, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, - 0x65, 0x2f, 0x68, 0x6f, 0x6c, 0x64, 0x2d, 0x74, 0x69, 0x6d, 0x65, 0x2f, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x89, 0x01, 0x0a, 0x05, 0x73, - 0x74, 0x61, 0x74, 0x65, 0x18, 0xae, 0xd3, 0xa8, 0xe6, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x45, - 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x6f, 0x70, 0x65, 0x6e, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, - 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, - 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2e, 0x48, 0x6f, 0x6c, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x2e, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x42, 0x28, 0x82, 0x41, 0x25, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, - 0x68, 0x6f, 0x6c, 0x64, 0x2d, 0x74, 0x69, 0x6d, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x52, - 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x1a, 0xba, 0x01, 0x0a, 0x06, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x12, 0x5a, 0x0a, 0x04, 0x64, 0x6f, 0x77, 0x6e, 0x18, 0xd8, 0x8c, 0xd0, 0x51, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, - 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x2e, 0x82, 0x41, 0x2b, 0x2f, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, - 0x65, 0x2f, 0x68, 0x6f, 0x6c, 0x64, 0x2d, 0x74, 0x69, 0x6d, 0x65, 0x2f, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x2f, 0x64, 0x6f, 0x77, 0x6e, 0x52, 0x04, 0x64, 0x6f, 0x77, 0x6e, 0x12, 0x54, 0x0a, - 0x02, 0x75, 0x70, 0x18, 0xfb, 0xe3, 0xc9, 0x1d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, - 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x42, 0x2c, 0x82, 0x41, 0x29, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, - 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x68, 0x6f, 0x6c, 0x64, - 0x2d, 0x74, 0x69, 0x6d, 0x65, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x75, 0x70, 0x52, - 0x02, 0x75, 0x70, 0x1a, 0xb7, 0x01, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x59, 0x0a, - 0x04, 0x64, 0x6f, 0x77, 0x6e, 0x18, 0xe9, 0x86, 0x87, 0x50, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, - 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x42, 0x2d, 0x82, 0x41, 0x2a, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, - 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x68, 0x6f, - 0x6c, 0x64, 0x2d, 0x74, 0x69, 0x6d, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x64, 0x6f, - 0x77, 0x6e, 0x52, 0x04, 0x64, 0x6f, 0x77, 0x6e, 0x12, 0x53, 0x0a, 0x02, 0x75, 0x70, 0x18, 0xae, - 0xc9, 0xde, 0x6a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, - 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x2b, 0x82, 0x41, - 0x28, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x68, 0x6f, 0x6c, 0x64, 0x2d, 0x74, 0x69, 0x6d, 0x65, - 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x75, 0x70, 0x52, 0x02, 0x75, 0x70, 0x1a, 0x9b, 0x1e, - 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x9c, 0x01, 0x0a, 0x0c, 0x61, 0x64, 0x6d, 0x69, - 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0xab, 0xee, 0xa0, 0xe2, 0x01, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x48, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, - 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, - 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x2e, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x2b, 0x82, 0x41, - 0x28, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x61, 0x64, 0x6d, - 0x69, 0x6e, 0x2d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x0b, 0x61, 0x64, 0x6d, 0x69, 0x6e, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x8d, 0x01, 0x0a, 0x08, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x65, 0x72, 0x73, 0x18, 0x8c, 0xac, 0xf1, 0x27, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x6f, - 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, - 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, - 0x66, 0x61, 0x63, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x43, 0x6f, 0x75, 0x6e, 0x74, - 0x65, 0x72, 0x73, 0x42, 0x27, 0x82, 0x41, 0x24, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, - 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, - 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x52, 0x08, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x12, 0x67, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x97, 0x9f, 0xd9, 0xb9, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x15, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, - 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x2a, 0x82, 0x41, 0x27, 0x2f, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, - 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x59, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x9e, 0x9b, 0xe6, 0x9d, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, - 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x26, 0x82, 0x41, 0x23, 0x2f, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, - 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, - 0x64, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x58, 0x0a, 0x07, 0x69, 0x66, - 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0xaa, 0xd7, 0xae, 0x37, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, - 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x42, 0x26, 0x82, 0x41, 0x23, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, - 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, - 0x61, 0x74, 0x65, 0x2f, 0x69, 0x66, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x07, 0x69, 0x66, 0x69, - 0x6e, 0x64, 0x65, 0x78, 0x12, 0x63, 0x0a, 0x0b, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x63, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x18, 0x90, 0xe1, 0xdc, 0x3c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, - 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x42, 0x2a, 0x82, 0x41, 0x27, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, - 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, - 0x65, 0x2f, 0x6c, 0x61, 0x73, 0x74, 0x2d, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x0a, 0x6c, - 0x61, 0x73, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x59, 0x0a, 0x07, 0x6c, 0x6f, 0x67, - 0x69, 0x63, 0x61, 0x6c, 0x18, 0xb8, 0xc7, 0x83, 0xd2, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, - 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x42, 0x26, 0x82, 0x41, 0x23, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, - 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, - 0x61, 0x74, 0x65, 0x2f, 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x52, 0x07, 0x6c, 0x6f, 0x67, - 0x69, 0x63, 0x61, 0x6c, 0x12, 0x6a, 0x0a, 0x0d, 0x6c, 0x6f, 0x6f, 0x70, 0x62, 0x61, 0x63, 0x6b, - 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0xd8, 0x96, 0xea, 0xb1, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x42, 0x2c, 0x82, 0x41, 0x29, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, - 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, - 0x74, 0x61, 0x74, 0x65, 0x2f, 0x6c, 0x6f, 0x6f, 0x70, 0x62, 0x61, 0x63, 0x6b, 0x2d, 0x6d, 0x6f, - 0x64, 0x65, 0x52, 0x0c, 0x6c, 0x6f, 0x6f, 0x70, 0x62, 0x61, 0x63, 0x6b, 0x4d, 0x6f, 0x64, 0x65, - 0x12, 0x4c, 0x0a, 0x03, 0x6d, 0x74, 0x75, 0x18, 0xd5, 0x9a, 0xfb, 0x2d, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x22, 0x82, 0x41, 0x1f, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, - 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x6d, 0x74, 0x75, 0x52, 0x03, 0x6d, 0x74, 0x75, 0x12, 0x52, - 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0xee, 0xf4, 0x8a, 0xf0, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x15, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x72, 0x69, - 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x23, 0x82, 0x41, 0x20, 0x2f, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, - 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x52, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x12, 0x98, 0x01, 0x0a, 0x0b, 0x6f, 0x70, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x18, 0xf2, 0xca, 0xa6, 0xe0, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x47, 0x2e, 0x6f, - 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, - 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, - 0x66, 0x61, 0x63, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x2a, 0x82, 0x41, 0x27, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, - 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x6f, 0x70, 0x65, 0x72, 0x2d, 0x73, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x52, 0x0a, 0x6f, 0x70, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x6a, 0x0a, - 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0xe3, 0xd3, 0xe3, 0xaa, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x2d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x65, 0x6e, 0x75, - 0x6d, 0x73, 0x2e, 0x49, 0x45, 0x54, 0x46, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, - 0x73, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x42, 0x23, - 0x82, 0x41, 0x20, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x74, - 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x1a, 0xbe, 0x10, 0x0a, 0x08, 0x43, 0x6f, - 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x12, 0x85, 0x01, 0x0a, 0x13, 0x63, 0x61, 0x72, 0x72, 0x69, - 0x65, 0x72, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0xba, - 0xc1, 0x90, 0x81, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, - 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x3b, 0x82, - 0x41, 0x38, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x63, 0x61, 0x72, 0x72, 0x69, 0x65, 0x72, 0x2d, 0x74, - 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x12, 0x63, 0x61, 0x72, 0x72, - 0x69, 0x65, 0x72, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x7e, - 0x0a, 0x11, 0x69, 0x6e, 0x5f, 0x62, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x5f, 0x70, - 0x6b, 0x74, 0x73, 0x18, 0x85, 0x96, 0xce, 0x85, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, - 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x42, 0x39, 0x82, 0x41, 0x36, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, - 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, - 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x69, 0x6e, 0x2d, 0x62, - 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x2d, 0x70, 0x6b, 0x74, 0x73, 0x52, 0x0f, 0x69, - 0x6e, 0x42, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x50, 0x6b, 0x74, 0x73, 0x12, 0x6c, - 0x0a, 0x0b, 0x69, 0x6e, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x73, 0x18, 0xfa, 0x95, - 0xdb, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, - 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x33, 0x82, 0x41, 0x30, - 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x65, 0x72, 0x73, 0x2f, 0x69, 0x6e, 0x2d, 0x64, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x73, - 0x52, 0x0a, 0x69, 0x6e, 0x44, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x73, 0x12, 0x67, 0x0a, 0x09, - 0x69, 0x6e, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x18, 0xea, 0xcd, 0xe2, 0xd9, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, - 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x31, 0x82, 0x41, 0x2e, 0x2f, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, - 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, - 0x73, 0x2f, 0x69, 0x6e, 0x2d, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x52, 0x08, 0x69, 0x6e, 0x45, - 0x72, 0x72, 0x6f, 0x72, 0x73, 0x12, 0x72, 0x0a, 0x0d, 0x69, 0x6e, 0x5f, 0x66, 0x63, 0x73, 0x5f, - 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x18, 0xf3, 0xdd, 0x94, 0xef, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x35, 0x82, 0x41, 0x32, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, - 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x69, - 0x6e, 0x2d, 0x66, 0x63, 0x73, 0x2d, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x52, 0x0b, 0x69, 0x6e, - 0x46, 0x63, 0x73, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x12, 0x7d, 0x0a, 0x11, 0x69, 0x6e, 0x5f, - 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x5f, 0x70, 0x6b, 0x74, 0x73, 0x18, 0x88, - 0xb3, 0x81, 0x36, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, - 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x39, 0x82, 0x41, - 0x36, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x69, 0x6e, 0x2d, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, - 0x73, 0x74, 0x2d, 0x70, 0x6b, 0x74, 0x73, 0x52, 0x0f, 0x69, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, - 0x63, 0x61, 0x73, 0x74, 0x50, 0x6b, 0x74, 0x73, 0x12, 0x67, 0x0a, 0x09, 0x69, 0x6e, 0x5f, 0x6f, - 0x63, 0x74, 0x65, 0x74, 0x73, 0x18, 0xcb, 0x97, 0xed, 0x9e, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x42, 0x31, 0x82, 0x41, 0x2e, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, - 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, - 0x74, 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x69, 0x6e, - 0x2d, 0x6f, 0x63, 0x74, 0x65, 0x74, 0x73, 0x52, 0x08, 0x69, 0x6e, 0x4f, 0x63, 0x74, 0x65, 0x74, - 0x73, 0x12, 0x61, 0x0a, 0x07, 0x69, 0x6e, 0x5f, 0x70, 0x6b, 0x74, 0x73, 0x18, 0xe3, 0xfb, 0xed, - 0xc4, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, - 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x2f, 0x82, 0x41, 0x2c, - 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x65, 0x72, 0x73, 0x2f, 0x69, 0x6e, 0x2d, 0x70, 0x6b, 0x74, 0x73, 0x52, 0x06, 0x69, 0x6e, - 0x50, 0x6b, 0x74, 0x73, 0x12, 0x78, 0x0a, 0x0f, 0x69, 0x6e, 0x5f, 0x75, 0x6e, 0x69, 0x63, 0x61, - 0x73, 0x74, 0x5f, 0x70, 0x6b, 0x74, 0x73, 0x18, 0xf3, 0xf5, 0x89, 0x82, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, - 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x37, 0x82, 0x41, 0x34, 0x2f, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, - 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x2f, - 0x69, 0x6e, 0x2d, 0x75, 0x6e, 0x69, 0x63, 0x61, 0x73, 0x74, 0x2d, 0x70, 0x6b, 0x74, 0x73, 0x52, - 0x0d, 0x69, 0x6e, 0x55, 0x6e, 0x69, 0x63, 0x61, 0x73, 0x74, 0x50, 0x6b, 0x74, 0x73, 0x12, 0x7d, - 0x0a, 0x11, 0x69, 0x6e, 0x5f, 0x75, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x5f, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x73, 0x18, 0xa9, 0xbf, 0x92, 0x73, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, - 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x42, 0x39, 0x82, 0x41, 0x36, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, - 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, - 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x69, 0x6e, 0x2d, 0x75, 0x6e, - 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x2d, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x52, 0x0f, 0x69, 0x6e, - 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x12, 0x69, 0x0a, - 0x0a, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x18, 0xc7, 0xb9, 0xd9, 0x58, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, - 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x32, 0x82, 0x41, 0x2f, 0x2f, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, - 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, - 0x72, 0x73, 0x2f, 0x6c, 0x61, 0x73, 0x74, 0x2d, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x52, 0x09, 0x6c, - 0x61, 0x73, 0x74, 0x43, 0x6c, 0x65, 0x61, 0x72, 0x12, 0x81, 0x01, 0x0a, 0x12, 0x6f, 0x75, 0x74, - 0x5f, 0x62, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x5f, 0x70, 0x6b, 0x74, 0x73, 0x18, - 0xe4, 0xef, 0xb9, 0xa1, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, - 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x3a, - 0x82, 0x41, 0x37, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x6f, 0x75, 0x74, 0x2d, 0x62, 0x72, 0x6f, 0x61, - 0x64, 0x63, 0x61, 0x73, 0x74, 0x2d, 0x70, 0x6b, 0x74, 0x73, 0x52, 0x10, 0x6f, 0x75, 0x74, 0x42, - 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x50, 0x6b, 0x74, 0x73, 0x12, 0x6f, 0x0a, 0x0c, - 0x6f, 0x75, 0x74, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x73, 0x18, 0xc7, 0xa5, 0x92, - 0x79, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, - 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x34, 0x82, 0x41, 0x31, 0x2f, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x65, 0x72, 0x73, 0x2f, 0x6f, 0x75, 0x74, 0x2d, 0x64, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x73, - 0x52, 0x0b, 0x6f, 0x75, 0x74, 0x44, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x73, 0x12, 0x6a, 0x0a, - 0x0a, 0x6f, 0x75, 0x74, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x18, 0xc7, 0xec, 0xd1, 0xe0, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, - 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x32, 0x82, 0x41, 0x2f, 0x2f, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x65, 0x72, 0x73, 0x2f, 0x6f, 0x75, 0x74, 0x2d, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x52, 0x09, - 0x6f, 0x75, 0x74, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x12, 0x81, 0x01, 0x0a, 0x12, 0x6f, 0x75, - 0x74, 0x5f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x5f, 0x70, 0x6b, 0x74, 0x73, - 0x18, 0xf5, 0xb0, 0xa8, 0xda, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, - 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, - 0x3a, 0x82, 0x41, 0x37, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x6f, 0x75, 0x74, 0x2d, 0x6d, 0x75, 0x6c, - 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x2d, 0x70, 0x6b, 0x74, 0x73, 0x52, 0x10, 0x6f, 0x75, 0x74, - 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x50, 0x6b, 0x74, 0x73, 0x12, 0x69, 0x0a, - 0x0a, 0x6f, 0x75, 0x74, 0x5f, 0x6f, 0x63, 0x74, 0x65, 0x74, 0x73, 0x18, 0xca, 0xb3, 0xec, 0x5f, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, - 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x32, 0x82, 0x41, 0x2f, 0x2f, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, - 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, - 0x72, 0x73, 0x2f, 0x6f, 0x75, 0x74, 0x2d, 0x6f, 0x63, 0x74, 0x65, 0x74, 0x73, 0x52, 0x09, 0x6f, - 0x75, 0x74, 0x4f, 0x63, 0x74, 0x65, 0x74, 0x73, 0x12, 0x64, 0x0a, 0x08, 0x6f, 0x75, 0x74, 0x5f, - 0x70, 0x6b, 0x74, 0x73, 0x18, 0x8a, 0xf2, 0xd3, 0xd0, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, - 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x42, 0x30, 0x82, 0x41, 0x2d, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, - 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, - 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x6f, 0x75, 0x74, - 0x2d, 0x70, 0x6b, 0x74, 0x73, 0x52, 0x07, 0x6f, 0x75, 0x74, 0x50, 0x6b, 0x74, 0x73, 0x12, 0x7a, - 0x0a, 0x10, 0x6f, 0x75, 0x74, 0x5f, 0x75, 0x6e, 0x69, 0x63, 0x61, 0x73, 0x74, 0x5f, 0x70, 0x6b, - 0x74, 0x73, 0x18, 0xa6, 0xae, 0xb6, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, - 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x42, 0x38, 0x82, 0x41, 0x35, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, - 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, - 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x6f, 0x75, 0x74, 0x2d, 0x75, 0x6e, - 0x69, 0x63, 0x61, 0x73, 0x74, 0x2d, 0x70, 0x6b, 0x74, 0x73, 0x52, 0x0e, 0x6f, 0x75, 0x74, 0x55, - 0x6e, 0x69, 0x63, 0x61, 0x73, 0x74, 0x50, 0x6b, 0x74, 0x73, 0x22, 0x83, 0x01, 0x0a, 0x0b, 0x41, - 0x64, 0x6d, 0x69, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x15, 0x0a, 0x11, 0x41, 0x44, - 0x4d, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x45, 0x54, 0x10, - 0x00, 0x12, 0x19, 0x0a, 0x0e, 0x41, 0x44, 0x4d, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, - 0x5f, 0x55, 0x50, 0x10, 0x01, 0x1a, 0x05, 0x82, 0x41, 0x02, 0x55, 0x50, 0x12, 0x1d, 0x0a, 0x10, - 0x41, 0x44, 0x4d, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x44, 0x4f, 0x57, 0x4e, - 0x10, 0x02, 0x1a, 0x07, 0x82, 0x41, 0x04, 0x44, 0x4f, 0x57, 0x4e, 0x12, 0x23, 0x0a, 0x13, 0x41, - 0x44, 0x4d, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x54, 0x45, 0x53, 0x54, 0x49, - 0x4e, 0x47, 0x10, 0x03, 0x1a, 0x0a, 0x82, 0x41, 0x07, 0x54, 0x45, 0x53, 0x54, 0x49, 0x4e, 0x47, - 0x22, 0xa8, 0x02, 0x0a, 0x0a, 0x4f, 0x70, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, - 0x14, 0x0a, 0x10, 0x4f, 0x50, 0x45, 0x52, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, - 0x53, 0x45, 0x54, 0x10, 0x00, 0x12, 0x18, 0x0a, 0x0d, 0x4f, 0x50, 0x45, 0x52, 0x53, 0x54, 0x41, - 0x54, 0x55, 0x53, 0x5f, 0x55, 0x50, 0x10, 0x02, 0x1a, 0x05, 0x82, 0x41, 0x02, 0x55, 0x50, 0x12, - 0x1c, 0x0a, 0x0f, 0x4f, 0x50, 0x45, 0x52, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x44, 0x4f, - 0x57, 0x4e, 0x10, 0x03, 0x1a, 0x07, 0x82, 0x41, 0x04, 0x44, 0x4f, 0x57, 0x4e, 0x12, 0x22, 0x0a, - 0x12, 0x4f, 0x50, 0x45, 0x52, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x54, 0x45, 0x53, 0x54, - 0x49, 0x4e, 0x47, 0x10, 0x04, 0x1a, 0x0a, 0x82, 0x41, 0x07, 0x54, 0x45, 0x53, 0x54, 0x49, 0x4e, - 0x47, 0x12, 0x22, 0x0a, 0x12, 0x4f, 0x50, 0x45, 0x52, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, - 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x05, 0x1a, 0x0a, 0x82, 0x41, 0x07, 0x55, 0x4e, - 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x12, 0x22, 0x0a, 0x12, 0x4f, 0x50, 0x45, 0x52, 0x53, 0x54, 0x41, - 0x54, 0x55, 0x53, 0x5f, 0x44, 0x4f, 0x52, 0x4d, 0x41, 0x4e, 0x54, 0x10, 0x06, 0x1a, 0x0a, 0x82, - 0x41, 0x07, 0x44, 0x4f, 0x52, 0x4d, 0x41, 0x4e, 0x54, 0x12, 0x2a, 0x0a, 0x16, 0x4f, 0x50, 0x45, - 0x52, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x50, 0x52, 0x45, 0x53, - 0x45, 0x4e, 0x54, 0x10, 0x07, 0x1a, 0x0e, 0x82, 0x41, 0x0b, 0x4e, 0x4f, 0x54, 0x5f, 0x50, 0x52, - 0x45, 0x53, 0x45, 0x4e, 0x54, 0x12, 0x34, 0x0a, 0x1b, 0x4f, 0x50, 0x45, 0x52, 0x53, 0x54, 0x41, - 0x54, 0x55, 0x53, 0x5f, 0x4c, 0x4f, 0x57, 0x45, 0x52, 0x5f, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x5f, - 0x44, 0x4f, 0x57, 0x4e, 0x10, 0x08, 0x1a, 0x13, 0x82, 0x41, 0x10, 0x4c, 0x4f, 0x57, 0x45, 0x52, - 0x5f, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x5f, 0x44, 0x4f, 0x57, 0x4e, 0x1a, 0xa8, 0x2c, 0x0a, 0x0d, - 0x53, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x12, 0xb1, 0x01, - 0x0a, 0x0c, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x18, 0x83, - 0xa8, 0xd1, 0xdd, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x54, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, - 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, - 0x2e, 0x53, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x53, - 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x4b, 0x65, 0x79, 0x42, 0x33, - 0x82, 0x41, 0x30, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, - 0x61, 0x63, 0x65, 0x52, 0x0c, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, - 0x65, 0x1a, 0x86, 0x29, 0x0a, 0x0c, 0x53, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, - 0x63, 0x65, 0x12, 0xaf, 0x01, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x84, 0x9f, - 0xb9, 0x53, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x58, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, - 0x61, 0x63, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2e, 0x53, - 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x53, 0x75, 0x62, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x42, 0x3a, 0x82, 0x41, 0x37, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, - 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x12, 0xac, 0x01, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x9d, - 0x89, 0xae, 0xef, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x57, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, - 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, - 0x2e, 0x53, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x53, - 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x42, 0x39, 0x82, 0x41, 0x36, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, - 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, - 0x61, 0x74, 0x65, 0x1a, 0xf6, 0x02, 0x0a, 0x06, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x83, - 0x01, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xdf, - 0xe7, 0xea, 0x85, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, - 0x70, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, - 0x46, 0x82, 0x41, 0x43, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x66, 0x61, 0x63, 0x65, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x64, 0x65, 0x73, 0x63, - 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x75, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, - 0xa6, 0xef, 0xdd, 0x8d, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, - 0x70, 0x70, 0x65, 0x72, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x42, - 0x82, 0x41, 0x3f, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, - 0x61, 0x63, 0x65, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x65, 0x6e, 0x61, 0x62, 0x6c, - 0x65, 0x64, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x6f, 0x0a, 0x05, 0x69, - 0x6e, 0x64, 0x65, 0x78, 0x18, 0x95, 0xa3, 0x95, 0x85, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, - 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x42, 0x40, 0x82, 0x41, 0x3d, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, - 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, - 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, - 0x69, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x1a, 0x9b, 0x23, 0x0a, - 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0xd1, 0x01, 0x0a, 0x0c, 0x61, 0x64, 0x6d, 0x69, 0x6e, - 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x88, 0x81, 0xc3, 0x77, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x63, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x6f, 0x70, - 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, - 0x63, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x49, - 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2e, 0x53, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x53, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, - 0x61, 0x63, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x46, 0x82, 0x41, 0x43, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, - 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, - 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, - 0x2f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x0b, 0x61, - 0x64, 0x6d, 0x69, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0xc4, 0x01, 0x0a, 0x08, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x18, 0xdf, 0x80, 0xc3, 0xe6, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x60, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x6f, - 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, - 0x61, 0x63, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, - 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2e, 0x53, 0x75, 0x62, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x53, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x66, 0x61, 0x63, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x43, 0x6f, 0x75, 0x6e, 0x74, - 0x65, 0x72, 0x73, 0x42, 0x42, 0x82, 0x41, 0x3f, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, - 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, - 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x52, 0x08, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, - 0x73, 0x12, 0x81, 0x01, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x18, 0xe6, 0xa7, 0xe8, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x79, 0x77, 0x72, - 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x42, 0x45, 0x82, 0x41, 0x42, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, - 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x64, 0x65, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x74, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, - 0x18, 0xb3, 0xe8, 0xb3, 0xdf, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, - 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, - 0x41, 0x82, 0x41, 0x3e, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x65, 0x6e, 0x61, 0x62, 0x6c, - 0x65, 0x64, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x74, 0x0a, 0x07, 0x69, - 0x66, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0xe7, 0xa0, 0x91, 0xf4, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x41, 0x82, 0x41, 0x3e, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, - 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, - 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, - 0x2f, 0x69, 0x66, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x07, 0x69, 0x66, 0x69, 0x6e, 0x64, 0x65, - 0x78, 0x12, 0x6d, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x9c, 0xaa, 0xc0, 0x26, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, - 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x3f, 0x82, 0x41, 0x3c, 0x2f, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, - 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, - 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, - 0x61, 0x74, 0x65, 0x2f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, - 0x12, 0x7e, 0x0a, 0x0b, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x18, - 0x89, 0x9d, 0xa1, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, - 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x45, 0x82, - 0x41, 0x42, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, - 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x6c, 0x61, 0x73, 0x74, 0x2d, 0x63, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x52, 0x0a, 0x6c, 0x61, 0x73, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, - 0x12, 0x74, 0x0a, 0x07, 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x18, 0xf1, 0xf6, 0x9f, 0x8c, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, - 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x41, 0x82, 0x41, 0x3e, 0x2f, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, - 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, - 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x52, 0x07, 0x6c, - 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x12, 0x6d, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0xf9, - 0xfb, 0x99, 0x85, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, - 0x70, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, - 0x3e, 0x82, 0x41, 0x3b, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x52, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0xce, 0x01, 0x0a, 0x0b, 0x6f, 0x70, 0x65, 0x72, 0x5f, 0x73, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0xdf, 0xa0, 0xd6, 0xbf, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x62, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x6f, 0x70, 0x65, - 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, - 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x49, 0x6e, - 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2e, 0x53, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x53, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, - 0x63, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x42, 0x45, 0x82, 0x41, 0x42, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, - 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, - 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x6f, - 0x70, 0x65, 0x72, 0x2d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x0a, 0x6f, 0x70, 0x65, 0x72, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x1a, 0xb0, 0x14, 0x0a, 0x08, 0x43, 0x6f, 0x75, 0x6e, 0x74, - 0x65, 0x72, 0x73, 0x12, 0x9f, 0x01, 0x0a, 0x13, 0x63, 0x61, 0x72, 0x72, 0x69, 0x65, 0x72, 0x5f, - 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x95, 0xa6, 0xa5, 0x43, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, - 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x56, 0x82, 0x41, 0x53, 0x2f, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, - 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, - 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, - 0x74, 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x63, 0x61, - 0x72, 0x72, 0x69, 0x65, 0x72, 0x2d, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x52, 0x12, 0x63, 0x61, 0x72, 0x72, 0x69, 0x65, 0x72, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x98, 0x01, 0x0a, 0x11, 0x69, 0x6e, 0x5f, 0x62, 0x72, 0x6f, - 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x5f, 0x70, 0x6b, 0x74, 0x73, 0x18, 0xb6, 0x8e, 0xab, 0x39, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, - 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x54, 0x82, 0x41, 0x51, 0x2f, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, - 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, - 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, - 0x74, 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x69, 0x6e, - 0x2d, 0x62, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x2d, 0x70, 0x6b, 0x74, 0x73, 0x52, - 0x0f, 0x69, 0x6e, 0x42, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x50, 0x6b, 0x74, 0x73, - 0x12, 0x88, 0x01, 0x0a, 0x0b, 0x69, 0x6e, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x73, - 0x18, 0x9d, 0xdd, 0xcf, 0x92, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, - 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, - 0x4e, 0x82, 0x41, 0x4b, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x65, 0x72, 0x73, 0x2f, 0x69, 0x6e, 0x2d, 0x64, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x73, 0x52, - 0x0a, 0x69, 0x6e, 0x44, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x73, 0x12, 0x82, 0x01, 0x0a, 0x09, - 0x69, 0x6e, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x18, 0xa9, 0x9b, 0xba, 0x98, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, - 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x4c, 0x82, 0x41, 0x49, 0x2f, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, - 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, - 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, - 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x69, 0x6e, 0x2d, - 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x52, 0x08, 0x69, 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x73, - 0x12, 0x8c, 0x01, 0x0a, 0x0d, 0x69, 0x6e, 0x5f, 0x66, 0x63, 0x73, 0x5f, 0x65, 0x72, 0x72, 0x6f, - 0x72, 0x73, 0x18, 0xf8, 0xaa, 0xff, 0x50, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, - 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x42, 0x50, 0x82, 0x41, 0x4d, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, - 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x65, 0x72, 0x73, 0x2f, 0x69, 0x6e, 0x2d, 0x66, 0x63, 0x73, 0x2d, 0x65, 0x72, 0x72, 0x6f, - 0x72, 0x73, 0x52, 0x0b, 0x69, 0x6e, 0x46, 0x63, 0x73, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x12, - 0x99, 0x01, 0x0a, 0x11, 0x69, 0x6e, 0x5f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, - 0x5f, 0x70, 0x6b, 0x74, 0x73, 0x18, 0xeb, 0x82, 0xf1, 0x98, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x42, 0x54, 0x82, 0x41, 0x51, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, - 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, - 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x69, 0x6e, 0x2d, 0x6d, 0x75, 0x6c, 0x74, - 0x69, 0x63, 0x61, 0x73, 0x74, 0x2d, 0x70, 0x6b, 0x74, 0x73, 0x52, 0x0f, 0x69, 0x6e, 0x4d, 0x75, - 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x50, 0x6b, 0x74, 0x73, 0x12, 0x82, 0x01, 0x0a, 0x09, - 0x69, 0x6e, 0x5f, 0x6f, 0x63, 0x74, 0x65, 0x74, 0x73, 0x18, 0xac, 0x99, 0xe9, 0xfc, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, - 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x4c, 0x82, 0x41, 0x49, 0x2f, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, - 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, - 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, - 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x69, 0x6e, 0x2d, - 0x6f, 0x63, 0x74, 0x65, 0x74, 0x73, 0x52, 0x08, 0x69, 0x6e, 0x4f, 0x63, 0x74, 0x65, 0x74, 0x73, - 0x12, 0x7c, 0x0a, 0x07, 0x69, 0x6e, 0x5f, 0x70, 0x6b, 0x74, 0x73, 0x18, 0xc8, 0xee, 0xad, 0xd2, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, - 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x4a, 0x82, 0x41, 0x47, 0x2f, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, - 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, - 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x69, - 0x6e, 0x2d, 0x70, 0x6b, 0x74, 0x73, 0x52, 0x06, 0x69, 0x6e, 0x50, 0x6b, 0x74, 0x73, 0x12, 0x92, - 0x01, 0x0a, 0x0f, 0x69, 0x6e, 0x5f, 0x75, 0x6e, 0x69, 0x63, 0x61, 0x73, 0x74, 0x5f, 0x70, 0x6b, - 0x74, 0x73, 0x18, 0xa0, 0xb6, 0xe6, 0x54, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, - 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x42, 0x52, 0x82, 0x41, 0x4f, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, - 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x65, 0x72, 0x73, 0x2f, 0x69, 0x6e, 0x2d, 0x75, 0x6e, 0x69, 0x63, 0x61, 0x73, 0x74, 0x2d, - 0x70, 0x6b, 0x74, 0x73, 0x52, 0x0d, 0x69, 0x6e, 0x55, 0x6e, 0x69, 0x63, 0x61, 0x73, 0x74, 0x50, - 0x6b, 0x74, 0x73, 0x12, 0x98, 0x01, 0x0a, 0x11, 0x69, 0x6e, 0x5f, 0x75, 0x6e, 0x6b, 0x6e, 0x6f, - 0x77, 0x6e, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x18, 0xa6, 0xe4, 0xd2, 0x45, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, - 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x54, 0x82, 0x41, 0x51, 0x2f, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, - 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, - 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, - 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x69, 0x6e, 0x2d, 0x75, - 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x2d, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x52, 0x0f, 0x69, - 0x6e, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x12, 0x85, - 0x01, 0x0a, 0x0a, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x18, 0xf6, 0x89, - 0x83, 0xf7, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, - 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x4d, 0x82, 0x41, - 0x4a, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, - 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, - 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, - 0x2f, 0x6c, 0x61, 0x73, 0x74, 0x2d, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x52, 0x09, 0x6c, 0x61, 0x73, - 0x74, 0x43, 0x6c, 0x65, 0x61, 0x72, 0x12, 0x9c, 0x01, 0x0a, 0x12, 0x6f, 0x75, 0x74, 0x5f, 0x62, - 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x5f, 0x70, 0x6b, 0x74, 0x73, 0x18, 0xfd, 0x8e, - 0x80, 0xef, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, - 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x55, 0x82, 0x41, - 0x52, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, - 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, - 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, - 0x2f, 0x6f, 0x75, 0x74, 0x2d, 0x62, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x2d, 0x70, - 0x6b, 0x74, 0x73, 0x52, 0x10, 0x6f, 0x75, 0x74, 0x42, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, - 0x74, 0x50, 0x6b, 0x74, 0x73, 0x12, 0x8a, 0x01, 0x0a, 0x0c, 0x6f, 0x75, 0x74, 0x5f, 0x64, 0x69, - 0x73, 0x63, 0x61, 0x72, 0x64, 0x73, 0x18, 0xb2, 0xc4, 0x89, 0x4c, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x42, 0x4f, 0x82, 0x41, 0x4c, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, - 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, - 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x6f, 0x75, 0x74, 0x2d, 0x64, 0x69, 0x73, - 0x63, 0x61, 0x72, 0x64, 0x73, 0x52, 0x0b, 0x6f, 0x75, 0x74, 0x44, 0x69, 0x73, 0x63, 0x61, 0x72, - 0x64, 0x73, 0x12, 0x85, 0x01, 0x0a, 0x0a, 0x6f, 0x75, 0x74, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, - 0x73, 0x18, 0xe2, 0xa0, 0xc1, 0xde, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, - 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x42, 0x4d, 0x82, 0x41, 0x4a, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, - 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x65, 0x72, 0x73, 0x2f, 0x6f, 0x75, 0x74, 0x2d, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x52, - 0x09, 0x6f, 0x75, 0x74, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x12, 0x9c, 0x01, 0x0a, 0x12, 0x6f, - 0x75, 0x74, 0x5f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x5f, 0x70, 0x6b, 0x74, - 0x73, 0x18, 0x80, 0xfc, 0xc2, 0x9b, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, - 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x42, 0x55, 0x82, 0x41, 0x52, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, - 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x65, 0x72, 0x73, 0x2f, 0x6f, 0x75, 0x74, 0x2d, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, - 0x73, 0x74, 0x2d, 0x70, 0x6b, 0x74, 0x73, 0x52, 0x10, 0x6f, 0x75, 0x74, 0x4d, 0x75, 0x6c, 0x74, - 0x69, 0x63, 0x61, 0x73, 0x74, 0x50, 0x6b, 0x74, 0x73, 0x12, 0x84, 0x01, 0x0a, 0x0a, 0x6f, 0x75, - 0x74, 0x5f, 0x6f, 0x63, 0x74, 0x65, 0x74, 0x73, 0x18, 0xa3, 0x8e, 0x8f, 0x18, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, - 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x4d, 0x82, 0x41, 0x4a, 0x2f, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, - 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, - 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, - 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x6f, 0x75, 0x74, 0x2d, 0x6f, - 0x63, 0x74, 0x65, 0x74, 0x73, 0x52, 0x09, 0x6f, 0x75, 0x74, 0x4f, 0x63, 0x74, 0x65, 0x74, 0x73, - 0x12, 0x7e, 0x0a, 0x08, 0x6f, 0x75, 0x74, 0x5f, 0x70, 0x6b, 0x74, 0x73, 0x18, 0x9b, 0xae, 0x88, - 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, - 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x4b, 0x82, 0x41, 0x48, 0x2f, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, - 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, - 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x6f, - 0x75, 0x74, 0x2d, 0x70, 0x6b, 0x74, 0x73, 0x52, 0x07, 0x6f, 0x75, 0x74, 0x50, 0x6b, 0x74, 0x73, - 0x12, 0x96, 0x01, 0x0a, 0x10, 0x6f, 0x75, 0x74, 0x5f, 0x75, 0x6e, 0x69, 0x63, 0x61, 0x73, 0x74, - 0x5f, 0x70, 0x6b, 0x74, 0x73, 0x18, 0xbb, 0x85, 0x87, 0x8e, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x42, 0x53, 0x82, 0x41, 0x50, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, - 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, - 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x6f, 0x75, 0x74, 0x2d, 0x75, 0x6e, 0x69, - 0x63, 0x61, 0x73, 0x74, 0x2d, 0x70, 0x6b, 0x74, 0x73, 0x52, 0x0e, 0x6f, 0x75, 0x74, 0x55, 0x6e, - 0x69, 0x63, 0x61, 0x73, 0x74, 0x50, 0x6b, 0x74, 0x73, 0x22, 0x83, 0x01, 0x0a, 0x0b, 0x41, 0x64, - 0x6d, 0x69, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x15, 0x0a, 0x11, 0x41, 0x44, 0x4d, - 0x49, 0x4e, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x45, 0x54, 0x10, 0x00, - 0x12, 0x19, 0x0a, 0x0e, 0x41, 0x44, 0x4d, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, - 0x55, 0x50, 0x10, 0x01, 0x1a, 0x05, 0x82, 0x41, 0x02, 0x55, 0x50, 0x12, 0x1d, 0x0a, 0x10, 0x41, - 0x44, 0x4d, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x44, 0x4f, 0x57, 0x4e, 0x10, - 0x02, 0x1a, 0x07, 0x82, 0x41, 0x04, 0x44, 0x4f, 0x57, 0x4e, 0x12, 0x23, 0x0a, 0x13, 0x41, 0x44, - 0x4d, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x54, 0x45, 0x53, 0x54, 0x49, 0x4e, - 0x47, 0x10, 0x03, 0x1a, 0x0a, 0x82, 0x41, 0x07, 0x54, 0x45, 0x53, 0x54, 0x49, 0x4e, 0x47, 0x22, - 0xa8, 0x02, 0x0a, 0x0a, 0x4f, 0x70, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x14, - 0x0a, 0x10, 0x4f, 0x50, 0x45, 0x52, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, - 0x45, 0x54, 0x10, 0x00, 0x12, 0x18, 0x0a, 0x0d, 0x4f, 0x50, 0x45, 0x52, 0x53, 0x54, 0x41, 0x54, - 0x55, 0x53, 0x5f, 0x55, 0x50, 0x10, 0x02, 0x1a, 0x05, 0x82, 0x41, 0x02, 0x55, 0x50, 0x12, 0x1c, - 0x0a, 0x0f, 0x4f, 0x50, 0x45, 0x52, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x44, 0x4f, 0x57, - 0x4e, 0x10, 0x03, 0x1a, 0x07, 0x82, 0x41, 0x04, 0x44, 0x4f, 0x57, 0x4e, 0x12, 0x22, 0x0a, 0x12, - 0x4f, 0x50, 0x45, 0x52, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x54, 0x45, 0x53, 0x54, 0x49, - 0x4e, 0x47, 0x10, 0x04, 0x1a, 0x0a, 0x82, 0x41, 0x07, 0x54, 0x45, 0x53, 0x54, 0x49, 0x4e, 0x47, - 0x12, 0x22, 0x0a, 0x12, 0x4f, 0x50, 0x45, 0x52, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, - 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x05, 0x1a, 0x0a, 0x82, 0x41, 0x07, 0x55, 0x4e, 0x4b, - 0x4e, 0x4f, 0x57, 0x4e, 0x12, 0x22, 0x0a, 0x12, 0x4f, 0x50, 0x45, 0x52, 0x53, 0x54, 0x41, 0x54, - 0x55, 0x53, 0x5f, 0x44, 0x4f, 0x52, 0x4d, 0x41, 0x4e, 0x54, 0x10, 0x06, 0x1a, 0x0a, 0x82, 0x41, - 0x07, 0x44, 0x4f, 0x52, 0x4d, 0x41, 0x4e, 0x54, 0x12, 0x2a, 0x0a, 0x16, 0x4f, 0x50, 0x45, 0x52, - 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x50, 0x52, 0x45, 0x53, 0x45, - 0x4e, 0x54, 0x10, 0x07, 0x1a, 0x0e, 0x82, 0x41, 0x0b, 0x4e, 0x4f, 0x54, 0x5f, 0x50, 0x52, 0x45, - 0x53, 0x45, 0x4e, 0x54, 0x12, 0x34, 0x0a, 0x1b, 0x4f, 0x50, 0x45, 0x52, 0x53, 0x54, 0x41, 0x54, - 0x55, 0x53, 0x5f, 0x4c, 0x4f, 0x57, 0x45, 0x52, 0x5f, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x5f, 0x44, - 0x4f, 0x57, 0x4e, 0x10, 0x08, 0x1a, 0x13, 0x82, 0x41, 0x10, 0x4c, 0x4f, 0x57, 0x45, 0x52, 0x5f, - 0x4c, 0x41, 0x59, 0x45, 0x52, 0x5f, 0x44, 0x4f, 0x57, 0x4e, 0x1a, 0xd9, 0x01, 0x0a, 0x0f, 0x53, - 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x4f, - 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x42, 0x39, 0x82, - 0x41, 0x36, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, - 0x63, 0x65, 0x2f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, - 0x75, 0x0a, 0x0c, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x51, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, - 0x63, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2e, 0x53, 0x75, - 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x53, 0x75, 0x62, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x52, 0x0c, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x1a, 0x97, 0x01, 0x0a, 0x0c, 0x49, 0x6e, 0x74, 0x65, 0x72, - 0x66, 0x61, 0x63, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x31, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1d, 0x82, 0x41, 0x1a, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, - 0x6e, 0x61, 0x6d, 0x65, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x54, 0x0a, 0x09, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, - 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, - 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, - 0x72, 0x66, 0x61, 0x63, 0x65, 0x52, 0x09, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, - 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescOnce sync.Once - file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescData = file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDesc -) - -func file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescGZIP() []byte { - file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescOnce.Do(func() { - file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescData = protoimpl.X.CompressGZIP(file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescData) - }) - return file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescData -} - -var file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_enumTypes = make([]protoimpl.EnumInfo, 4) -var file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes = make([]protoimpl.MessageInfo, 15) -var file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_goTypes = []interface{}{ - (Interfaces_Interface_State_AdminStatus)(0), // 0: openconfig.openconfig_interfaces.Interfaces.Interface.State.AdminStatus - (Interfaces_Interface_State_OperStatus)(0), // 1: openconfig.openconfig_interfaces.Interfaces.Interface.State.OperStatus - (Interfaces_Interface_Subinterfaces_Subinterface_State_AdminStatus)(0), // 2: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.AdminStatus - (Interfaces_Interface_Subinterfaces_Subinterface_State_OperStatus)(0), // 3: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.OperStatus - (*Interfaces)(nil), // 4: openconfig.openconfig_interfaces.Interfaces - (*Interfaces_Interface)(nil), // 5: openconfig.openconfig_interfaces.Interfaces.Interface - (*Interfaces_InterfaceKey)(nil), // 6: openconfig.openconfig_interfaces.Interfaces.InterfaceKey - (*Interfaces_Interface_Config)(nil), // 7: openconfig.openconfig_interfaces.Interfaces.Interface.Config - (*Interfaces_Interface_HoldTime)(nil), // 8: openconfig.openconfig_interfaces.Interfaces.Interface.HoldTime - (*Interfaces_Interface_State)(nil), // 9: openconfig.openconfig_interfaces.Interfaces.Interface.State - (*Interfaces_Interface_Subinterfaces)(nil), // 10: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces - (*Interfaces_Interface_HoldTime_Config)(nil), // 11: openconfig.openconfig_interfaces.Interfaces.Interface.HoldTime.Config - (*Interfaces_Interface_HoldTime_State)(nil), // 12: openconfig.openconfig_interfaces.Interfaces.Interface.HoldTime.State - (*Interfaces_Interface_State_Counters)(nil), // 13: openconfig.openconfig_interfaces.Interfaces.Interface.State.Counters - (*Interfaces_Interface_Subinterfaces_Subinterface)(nil), // 14: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface - (*Interfaces_Interface_Subinterfaces_SubinterfaceKey)(nil), // 15: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.SubinterfaceKey - (*Interfaces_Interface_Subinterfaces_Subinterface_Config)(nil), // 16: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.Config - (*Interfaces_Interface_Subinterfaces_Subinterface_State)(nil), // 17: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State - (*Interfaces_Interface_Subinterfaces_Subinterface_State_Counters)(nil), // 18: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.Counters - (*ywrapper.StringValue)(nil), // 19: ywrapper.StringValue - (*ywrapper.BoolValue)(nil), // 20: ywrapper.BoolValue - (*ywrapper.UintValue)(nil), // 21: ywrapper.UintValue - (enums.IETFInterfacesInterfaceType)(0), // 22: openconfig.enums.IETFInterfacesInterfaceType -} -var file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_depIdxs = []int32{ - 6, // 0: openconfig.openconfig_interfaces.Interfaces.interface:type_name -> openconfig.openconfig_interfaces.Interfaces.InterfaceKey - 7, // 1: openconfig.openconfig_interfaces.Interfaces.Interface.config:type_name -> openconfig.openconfig_interfaces.Interfaces.Interface.Config - 8, // 2: openconfig.openconfig_interfaces.Interfaces.Interface.hold_time:type_name -> openconfig.openconfig_interfaces.Interfaces.Interface.HoldTime - 9, // 3: openconfig.openconfig_interfaces.Interfaces.Interface.state:type_name -> openconfig.openconfig_interfaces.Interfaces.Interface.State - 10, // 4: openconfig.openconfig_interfaces.Interfaces.Interface.subinterfaces:type_name -> openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces - 5, // 5: openconfig.openconfig_interfaces.Interfaces.InterfaceKey.interface:type_name -> openconfig.openconfig_interfaces.Interfaces.Interface - 19, // 6: openconfig.openconfig_interfaces.Interfaces.Interface.Config.description:type_name -> ywrapper.StringValue - 20, // 7: openconfig.openconfig_interfaces.Interfaces.Interface.Config.enabled:type_name -> ywrapper.BoolValue - 20, // 8: openconfig.openconfig_interfaces.Interfaces.Interface.Config.loopback_mode:type_name -> ywrapper.BoolValue - 21, // 9: openconfig.openconfig_interfaces.Interfaces.Interface.Config.mtu:type_name -> ywrapper.UintValue - 19, // 10: openconfig.openconfig_interfaces.Interfaces.Interface.Config.name:type_name -> ywrapper.StringValue - 22, // 11: openconfig.openconfig_interfaces.Interfaces.Interface.Config.type:type_name -> openconfig.enums.IETFInterfacesInterfaceType - 11, // 12: openconfig.openconfig_interfaces.Interfaces.Interface.HoldTime.config:type_name -> openconfig.openconfig_interfaces.Interfaces.Interface.HoldTime.Config - 12, // 13: openconfig.openconfig_interfaces.Interfaces.Interface.HoldTime.state:type_name -> openconfig.openconfig_interfaces.Interfaces.Interface.HoldTime.State - 0, // 14: openconfig.openconfig_interfaces.Interfaces.Interface.State.admin_status:type_name -> openconfig.openconfig_interfaces.Interfaces.Interface.State.AdminStatus - 13, // 15: openconfig.openconfig_interfaces.Interfaces.Interface.State.counters:type_name -> openconfig.openconfig_interfaces.Interfaces.Interface.State.Counters - 19, // 16: openconfig.openconfig_interfaces.Interfaces.Interface.State.description:type_name -> ywrapper.StringValue - 20, // 17: openconfig.openconfig_interfaces.Interfaces.Interface.State.enabled:type_name -> ywrapper.BoolValue - 21, // 18: openconfig.openconfig_interfaces.Interfaces.Interface.State.ifindex:type_name -> ywrapper.UintValue - 21, // 19: openconfig.openconfig_interfaces.Interfaces.Interface.State.last_change:type_name -> ywrapper.UintValue - 20, // 20: openconfig.openconfig_interfaces.Interfaces.Interface.State.logical:type_name -> ywrapper.BoolValue - 20, // 21: openconfig.openconfig_interfaces.Interfaces.Interface.State.loopback_mode:type_name -> ywrapper.BoolValue - 21, // 22: openconfig.openconfig_interfaces.Interfaces.Interface.State.mtu:type_name -> ywrapper.UintValue - 19, // 23: openconfig.openconfig_interfaces.Interfaces.Interface.State.name:type_name -> ywrapper.StringValue - 1, // 24: openconfig.openconfig_interfaces.Interfaces.Interface.State.oper_status:type_name -> openconfig.openconfig_interfaces.Interfaces.Interface.State.OperStatus - 22, // 25: openconfig.openconfig_interfaces.Interfaces.Interface.State.type:type_name -> openconfig.enums.IETFInterfacesInterfaceType - 15, // 26: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.subinterface:type_name -> openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.SubinterfaceKey - 21, // 27: openconfig.openconfig_interfaces.Interfaces.Interface.HoldTime.Config.down:type_name -> ywrapper.UintValue - 21, // 28: openconfig.openconfig_interfaces.Interfaces.Interface.HoldTime.Config.up:type_name -> ywrapper.UintValue - 21, // 29: openconfig.openconfig_interfaces.Interfaces.Interface.HoldTime.State.down:type_name -> ywrapper.UintValue - 21, // 30: openconfig.openconfig_interfaces.Interfaces.Interface.HoldTime.State.up:type_name -> ywrapper.UintValue - 21, // 31: openconfig.openconfig_interfaces.Interfaces.Interface.State.Counters.carrier_transitions:type_name -> ywrapper.UintValue - 21, // 32: openconfig.openconfig_interfaces.Interfaces.Interface.State.Counters.in_broadcast_pkts:type_name -> ywrapper.UintValue - 21, // 33: openconfig.openconfig_interfaces.Interfaces.Interface.State.Counters.in_discards:type_name -> ywrapper.UintValue - 21, // 34: openconfig.openconfig_interfaces.Interfaces.Interface.State.Counters.in_errors:type_name -> ywrapper.UintValue - 21, // 35: openconfig.openconfig_interfaces.Interfaces.Interface.State.Counters.in_fcs_errors:type_name -> ywrapper.UintValue - 21, // 36: openconfig.openconfig_interfaces.Interfaces.Interface.State.Counters.in_multicast_pkts:type_name -> ywrapper.UintValue - 21, // 37: openconfig.openconfig_interfaces.Interfaces.Interface.State.Counters.in_octets:type_name -> ywrapper.UintValue - 21, // 38: openconfig.openconfig_interfaces.Interfaces.Interface.State.Counters.in_pkts:type_name -> ywrapper.UintValue - 21, // 39: openconfig.openconfig_interfaces.Interfaces.Interface.State.Counters.in_unicast_pkts:type_name -> ywrapper.UintValue - 21, // 40: openconfig.openconfig_interfaces.Interfaces.Interface.State.Counters.in_unknown_protos:type_name -> ywrapper.UintValue - 21, // 41: openconfig.openconfig_interfaces.Interfaces.Interface.State.Counters.last_clear:type_name -> ywrapper.UintValue - 21, // 42: openconfig.openconfig_interfaces.Interfaces.Interface.State.Counters.out_broadcast_pkts:type_name -> ywrapper.UintValue - 21, // 43: openconfig.openconfig_interfaces.Interfaces.Interface.State.Counters.out_discards:type_name -> ywrapper.UintValue - 21, // 44: openconfig.openconfig_interfaces.Interfaces.Interface.State.Counters.out_errors:type_name -> ywrapper.UintValue - 21, // 45: openconfig.openconfig_interfaces.Interfaces.Interface.State.Counters.out_multicast_pkts:type_name -> ywrapper.UintValue - 21, // 46: openconfig.openconfig_interfaces.Interfaces.Interface.State.Counters.out_octets:type_name -> ywrapper.UintValue - 21, // 47: openconfig.openconfig_interfaces.Interfaces.Interface.State.Counters.out_pkts:type_name -> ywrapper.UintValue - 21, // 48: openconfig.openconfig_interfaces.Interfaces.Interface.State.Counters.out_unicast_pkts:type_name -> ywrapper.UintValue - 16, // 49: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.config:type_name -> openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.Config - 17, // 50: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.state:type_name -> openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State - 14, // 51: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.SubinterfaceKey.subinterface:type_name -> openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface - 19, // 52: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.Config.description:type_name -> ywrapper.StringValue - 20, // 53: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.Config.enabled:type_name -> ywrapper.BoolValue - 21, // 54: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.Config.index:type_name -> ywrapper.UintValue - 2, // 55: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.admin_status:type_name -> openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.AdminStatus - 18, // 56: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.counters:type_name -> openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.Counters - 19, // 57: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.description:type_name -> ywrapper.StringValue - 20, // 58: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.enabled:type_name -> ywrapper.BoolValue - 21, // 59: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.ifindex:type_name -> ywrapper.UintValue - 21, // 60: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.index:type_name -> ywrapper.UintValue - 21, // 61: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.last_change:type_name -> ywrapper.UintValue - 20, // 62: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.logical:type_name -> ywrapper.BoolValue - 19, // 63: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.name:type_name -> ywrapper.StringValue - 3, // 64: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.oper_status:type_name -> openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.OperStatus - 21, // 65: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.Counters.carrier_transitions:type_name -> ywrapper.UintValue - 21, // 66: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.Counters.in_broadcast_pkts:type_name -> ywrapper.UintValue - 21, // 67: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.Counters.in_discards:type_name -> ywrapper.UintValue - 21, // 68: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.Counters.in_errors:type_name -> ywrapper.UintValue - 21, // 69: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.Counters.in_fcs_errors:type_name -> ywrapper.UintValue - 21, // 70: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.Counters.in_multicast_pkts:type_name -> ywrapper.UintValue - 21, // 71: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.Counters.in_octets:type_name -> ywrapper.UintValue - 21, // 72: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.Counters.in_pkts:type_name -> ywrapper.UintValue - 21, // 73: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.Counters.in_unicast_pkts:type_name -> ywrapper.UintValue - 21, // 74: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.Counters.in_unknown_protos:type_name -> ywrapper.UintValue - 21, // 75: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.Counters.last_clear:type_name -> ywrapper.UintValue - 21, // 76: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.Counters.out_broadcast_pkts:type_name -> ywrapper.UintValue - 21, // 77: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.Counters.out_discards:type_name -> ywrapper.UintValue - 21, // 78: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.Counters.out_errors:type_name -> ywrapper.UintValue - 21, // 79: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.Counters.out_multicast_pkts:type_name -> ywrapper.UintValue - 21, // 80: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.Counters.out_octets:type_name -> ywrapper.UintValue - 21, // 81: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.Counters.out_pkts:type_name -> ywrapper.UintValue - 21, // 82: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.Counters.out_unicast_pkts:type_name -> ywrapper.UintValue - 83, // [83:83] is the sub-list for method output_type - 83, // [83:83] is the sub-list for method input_type - 83, // [83:83] is the sub-list for extension type_name - 83, // [83:83] is the sub-list for extension extendee - 0, // [0:83] is the sub-list for field type_name -} - -func init() { file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_init() } -func file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_init() { - if File_openconfig_openconfig_interfaces_openconfig_interfaces_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Interfaces); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Interfaces_Interface); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Interfaces_InterfaceKey); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Interfaces_Interface_Config); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Interfaces_Interface_HoldTime); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Interfaces_Interface_State); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Interfaces_Interface_Subinterfaces); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Interfaces_Interface_HoldTime_Config); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Interfaces_Interface_HoldTime_State); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Interfaces_Interface_State_Counters); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Interfaces_Interface_Subinterfaces_Subinterface); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Interfaces_Interface_Subinterfaces_SubinterfaceKey); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Interfaces_Interface_Subinterfaces_Subinterface_Config); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Interfaces_Interface_Subinterfaces_Subinterface_State); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Interfaces_Interface_Subinterfaces_Subinterface_State_Counters); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDesc, - NumEnums: 4, - NumMessages: 15, - NumExtensions: 0, - NumServices: 0, - }, - GoTypes: file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_goTypes, - DependencyIndexes: file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_depIdxs, - EnumInfos: file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_enumTypes, - MessageInfos: file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes, - }.Build() - File_openconfig_openconfig_interfaces_openconfig_interfaces_proto = out.File - file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDesc = nil - file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_goTypes = nil - file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_depIdxs = nil -} diff --git a/api/proto/openconfig/openconfig_interfaces/openconfig_interfaces.proto b/api/proto/openconfig/openconfig_interfaces/openconfig_interfaces.proto deleted file mode 100644 index 82e99cf6a..000000000 --- a/api/proto/openconfig/openconfig_interfaces/openconfig_interfaces.proto +++ /dev/null @@ -1,163 +0,0 @@ -// openconfig.openconfig_interfaces is generated by proto_generator as a protobuf -// representation of a YANG schema. -// -// Input schema modules: -// - ../yang-models/models/openconfig/release/models/interfaces/openconfig-interfaces.yang -// Include paths: -// - ../yang-models/models/... -syntax = "proto3"; - -package openconfig.openconfig_interfaces; -option go_package = "code.fbi.h-da.de/cocsn/gosdn"; - -import "github.com/openconfig/ygot/proto/ywrapper/ywrapper.proto"; -import "github.com/openconfig/ygot/proto/yext/yext.proto"; -import "openconfig/enums/enums.proto"; - -message Interfaces { - message Interface { - message Config { - ywrapper.StringValue description = 418535860 [(yext.schemapath) = "/interfaces/interface/config/description"]; - ywrapper.BoolValue enabled = 37224301 [(yext.schemapath) = "/interfaces/interface/config/enabled"]; - ywrapper.BoolValue loopback_mode = 253516347 [(yext.schemapath) = "/interfaces/interface/config/loopback-mode"]; - ywrapper.UintValue mtu = 376210342 [(yext.schemapath) = "/interfaces/interface/config/mtu"]; - ywrapper.StringValue name = 51804187 [(yext.schemapath) = "/interfaces/interface/config/name"]; - openconfig.enums.IETFInterfacesInterfaceType type = 144596894 [(yext.schemapath) = "/interfaces/interface/config/type"]; - } - message HoldTime { - message Config { - ywrapper.UintValue down = 171181656 [(yext.schemapath) = "/interfaces/interface/hold-time/config/down"]; - ywrapper.UintValue up = 62026235 [(yext.schemapath) = "/interfaces/interface/hold-time/config/up"]; - } - message State { - ywrapper.UintValue down = 167887721 [(yext.schemapath) = "/interfaces/interface/hold-time/state/down"]; - ywrapper.UintValue up = 223847598 [(yext.schemapath) = "/interfaces/interface/hold-time/state/up"]; - } - Config config = 316512729 [(yext.schemapath) = "/interfaces/interface/hold-time/config"]; - State state = 483010990 [(yext.schemapath) = "/interfaces/interface/hold-time/state"]; - } - message State { - message Counters { - ywrapper.UintValue carrier_transitions = 270803130 [(yext.schemapath) = "/interfaces/interface/state/counters/carrier-transitions"]; - ywrapper.UintValue in_broadcast_pkts = 280201989 [(yext.schemapath) = "/interfaces/interface/state/counters/in-broadcast-pkts"]; - ywrapper.UintValue in_discards = 11979514 [(yext.schemapath) = "/interfaces/interface/state/counters/in-discards"]; - ywrapper.UintValue in_errors = 456697578 [(yext.schemapath) = "/interfaces/interface/state/counters/in-errors"]; - ywrapper.UintValue in_fcs_errors = 501559027 [(yext.schemapath) = "/interfaces/interface/state/counters/in-fcs-errors"]; - ywrapper.UintValue in_multicast_pkts = 113269128 [(yext.schemapath) = "/interfaces/interface/state/counters/in-multicast-pkts"]; - ywrapper.UintValue in_octets = 333138891 [(yext.schemapath) = "/interfaces/interface/state/counters/in-octets"]; - ywrapper.UintValue in_pkts = 412843491 [(yext.schemapath) = "/interfaces/interface/state/counters/in-pkts"]; - ywrapper.UintValue in_unicast_pkts = 272792307 [(yext.schemapath) = "/interfaces/interface/state/counters/in-unicast-pkts"]; - ywrapper.UintValue in_unknown_protos = 241475497 [(yext.schemapath) = "/interfaces/interface/state/counters/in-unknown-protos"]; - ywrapper.UintValue last_clear = 186014919 [(yext.schemapath) = "/interfaces/interface/state/counters/last-clear"]; - ywrapper.UintValue out_broadcast_pkts = 338589668 [(yext.schemapath) = "/interfaces/interface/state/counters/out-broadcast-pkts"]; - ywrapper.UintValue out_discards = 254055111 [(yext.schemapath) = "/interfaces/interface/state/counters/out-discards"]; - ywrapper.UintValue out_errors = 471103047 [(yext.schemapath) = "/interfaces/interface/state/counters/out-errors"]; - ywrapper.UintValue out_multicast_pkts = 457840757 [(yext.schemapath) = "/interfaces/interface/state/counters/out-multicast-pkts"]; - ywrapper.UintValue out_octets = 201005514 [(yext.schemapath) = "/interfaces/interface/state/counters/out-octets"]; - ywrapper.UintValue out_pkts = 437582090 [(yext.schemapath) = "/interfaces/interface/state/counters/out-pkts"]; - ywrapper.UintValue out_unicast_pkts = 36542246 [(yext.schemapath) = "/interfaces/interface/state/counters/out-unicast-pkts"]; - } - enum AdminStatus { - ADMINSTATUS_UNSET = 0; - ADMINSTATUS_UP = 1 [(yext.yang_name) = "UP"]; - ADMINSTATUS_DOWN = 2 [(yext.yang_name) = "DOWN"]; - ADMINSTATUS_TESTING = 3 [(yext.yang_name) = "TESTING"]; - } - enum OperStatus { - OPERSTATUS_UNSET = 0; - OPERSTATUS_UP = 2 [(yext.yang_name) = "UP"]; - OPERSTATUS_DOWN = 3 [(yext.yang_name) = "DOWN"]; - OPERSTATUS_TESTING = 4 [(yext.yang_name) = "TESTING"]; - OPERSTATUS_UNKNOWN = 5 [(yext.yang_name) = "UNKNOWN"]; - OPERSTATUS_DORMANT = 6 [(yext.yang_name) = "DORMANT"]; - OPERSTATUS_NOT_PRESENT = 7 [(yext.yang_name) = "NOT_PRESENT"]; - OPERSTATUS_LOWER_LAYER_DOWN = 8 [(yext.yang_name) = "LOWER_LAYER_DOWN"]; - } - AdminStatus admin_status = 474494763 [(yext.schemapath) = "/interfaces/interface/state/admin-status"]; - Counters counters = 83645964 [(yext.schemapath) = "/interfaces/interface/state/counters"]; - ywrapper.StringValue description = 389435287 [(yext.schemapath) = "/interfaces/interface/state/description"]; - ywrapper.BoolValue enabled = 330927518 [(yext.schemapath) = "/interfaces/interface/state/enabled"]; - ywrapper.UintValue ifindex = 116108202 [(yext.schemapath) = "/interfaces/interface/state/ifindex"]; - ywrapper.UintValue last_change = 127348880 [(yext.schemapath) = "/interfaces/interface/state/last-change"]; - ywrapper.BoolValue logical = 440460216 [(yext.schemapath) = "/interfaces/interface/state/logical"]; - ywrapper.BoolValue loopback_mode = 372935512 [(yext.schemapath) = "/interfaces/interface/state/loopback-mode"]; - ywrapper.UintValue mtu = 96390485 [(yext.schemapath) = "/interfaces/interface/state/mtu"]; - ywrapper.StringValue name = 503495278 [(yext.schemapath) = "/interfaces/interface/state/name"]; - OperStatus oper_status = 470394226 [(yext.schemapath) = "/interfaces/interface/state/oper-status"]; - openconfig.enums.IETFInterfacesInterfaceType type = 358148579 [(yext.schemapath) = "/interfaces/interface/state/type"]; - } - message Subinterfaces { - message Subinterface { - message Config { - ywrapper.StringValue description = 280671199 [(yext.schemapath) = "/interfaces/interface/subinterfaces/subinterface/config/description"]; - ywrapper.BoolValue enabled = 297236390 [(yext.schemapath) = "/interfaces/interface/subinterfaces/subinterface/config/enabled"]; - ywrapper.UintValue index = 279269781 [(yext.schemapath) = "/interfaces/interface/subinterfaces/subinterface/config/index"]; - } - message State { - message Counters { - ywrapper.UintValue carrier_transitions = 141120277 [(yext.schemapath) = "/interfaces/interface/subinterfaces/subinterface/state/counters/carrier-transitions"]; - ywrapper.UintValue in_broadcast_pkts = 120244022 [(yext.schemapath) = "/interfaces/interface/subinterfaces/subinterface/state/counters/in-broadcast-pkts"]; - ywrapper.UintValue in_discards = 307490461 [(yext.schemapath) = "/interfaces/interface/subinterfaces/subinterface/state/counters/in-discards"]; - ywrapper.UintValue in_errors = 319720873 [(yext.schemapath) = "/interfaces/interface/subinterfaces/subinterface/state/counters/in-errors"]; - ywrapper.UintValue in_fcs_errors = 169858424 [(yext.schemapath) = "/interfaces/interface/subinterfaces/subinterface/state/counters/in-fcs-errors"]; - ywrapper.UintValue in_multicast_pkts = 320618859 [(yext.schemapath) = "/interfaces/interface/subinterfaces/subinterface/state/counters/in-multicast-pkts"]; - ywrapper.UintValue in_octets = 530205868 [(yext.schemapath) = "/interfaces/interface/subinterfaces/subinterface/state/counters/in-octets"]; - ywrapper.UintValue in_pkts = 441153352 [(yext.schemapath) = "/interfaces/interface/subinterfaces/subinterface/state/counters/in-pkts"]; - ywrapper.UintValue in_unicast_pkts = 177838880 [(yext.schemapath) = "/interfaces/interface/subinterfaces/subinterface/state/counters/in-unicast-pkts"]; - ywrapper.UintValue in_unknown_protos = 146059814 [(yext.schemapath) = "/interfaces/interface/subinterfaces/subinterface/state/counters/in-unknown-protos"]; - ywrapper.UintValue last_clear = 518046966 [(yext.schemapath) = "/interfaces/interface/subinterfaces/subinterface/state/counters/last-clear"]; - ywrapper.UintValue out_broadcast_pkts = 501221245 [(yext.schemapath) = "/interfaces/interface/subinterfaces/subinterface/state/counters/out-broadcast-pkts"]; - ywrapper.UintValue out_discards = 159539762 [(yext.schemapath) = "/interfaces/interface/subinterfaces/subinterface/state/counters/out-discards"]; - ywrapper.UintValue out_errors = 466636898 [(yext.schemapath) = "/interfaces/interface/subinterfaces/subinterface/state/counters/out-errors"]; - ywrapper.UintValue out_multicast_pkts = 326155776 [(yext.schemapath) = "/interfaces/interface/subinterfaces/subinterface/state/counters/out-multicast-pkts"]; - ywrapper.UintValue out_octets = 50579235 [(yext.schemapath) = "/interfaces/interface/subinterfaces/subinterface/state/counters/out-octets"]; - ywrapper.UintValue out_pkts = 29497115 [(yext.schemapath) = "/interfaces/interface/subinterfaces/subinterface/state/counters/out-pkts"]; - ywrapper.UintValue out_unicast_pkts = 297910971 [(yext.schemapath) = "/interfaces/interface/subinterfaces/subinterface/state/counters/out-unicast-pkts"]; - } - enum AdminStatus { - ADMINSTATUS_UNSET = 0; - ADMINSTATUS_UP = 1 [(yext.yang_name) = "UP"]; - ADMINSTATUS_DOWN = 2 [(yext.yang_name) = "DOWN"]; - ADMINSTATUS_TESTING = 3 [(yext.yang_name) = "TESTING"]; - } - enum OperStatus { - OPERSTATUS_UNSET = 0; - OPERSTATUS_UP = 2 [(yext.yang_name) = "UP"]; - OPERSTATUS_DOWN = 3 [(yext.yang_name) = "DOWN"]; - OPERSTATUS_TESTING = 4 [(yext.yang_name) = "TESTING"]; - OPERSTATUS_UNKNOWN = 5 [(yext.yang_name) = "UNKNOWN"]; - OPERSTATUS_DORMANT = 6 [(yext.yang_name) = "DORMANT"]; - OPERSTATUS_NOT_PRESENT = 7 [(yext.yang_name) = "NOT_PRESENT"]; - OPERSTATUS_LOWER_LAYER_DOWN = 8 [(yext.yang_name) = "LOWER_LAYER_DOWN"]; - } - AdminStatus admin_status = 250658952 [(yext.schemapath) = "/interfaces/interface/subinterfaces/subinterface/state/admin-status"]; - Counters counters = 483442783 [(yext.schemapath) = "/interfaces/interface/subinterfaces/subinterface/state/counters"]; - ywrapper.StringValue description = 49943526 [(yext.schemapath) = "/interfaces/interface/subinterfaces/subinterface/state/description"]; - ywrapper.BoolValue enabled = 468513843 [(yext.schemapath) = "/interfaces/interface/subinterfaces/subinterface/state/enabled"]; - ywrapper.UintValue ifindex = 511987815 [(yext.schemapath) = "/interfaces/interface/subinterfaces/subinterface/state/ifindex"]; - ywrapper.UintValue index = 80745756 [(yext.schemapath) = "/interfaces/interface/subinterfaces/subinterface/state/index"]; - ywrapper.UintValue last_change = 29904521 [(yext.schemapath) = "/interfaces/interface/subinterfaces/subinterface/state/last-change"]; - ywrapper.BoolValue logical = 294124401 [(yext.schemapath) = "/interfaces/interface/subinterfaces/subinterface/state/logical"]; - ywrapper.StringValue name = 279346681 [(yext.schemapath) = "/interfaces/interface/subinterfaces/subinterface/state/name"]; - OperStatus oper_status = 401969247 [(yext.schemapath) = "/interfaces/interface/subinterfaces/subinterface/state/oper-status"]; - } - Config config = 175001476 [(yext.schemapath) = "/interfaces/interface/subinterfaces/subinterface/config"]; - State state = 501974173 [(yext.schemapath) = "/interfaces/interface/subinterfaces/subinterface/state"]; - } - message SubinterfaceKey { - uint64 index = 1 [(yext.schemapath) = "/interfaces/interface/subinterfaces/subinterface/index"]; - Subinterface subinterface = 2; - } - repeated SubinterfaceKey subinterface = 464802819 [(yext.schemapath) = "/interfaces/interface/subinterfaces/subinterface"]; - } - Config config = 334174827 [(yext.schemapath) = "/interfaces/interface/config"]; - HoldTime hold_time = 175931092 [(yext.schemapath) = "/interfaces/interface/hold-time"]; - State state = 387556140 [(yext.schemapath) = "/interfaces/interface/state"]; - Subinterfaces subinterfaces = 327798165 [(yext.schemapath) = "/interfaces/interface/subinterfaces"]; - } - message InterfaceKey { - string name = 1 [(yext.schemapath) = "/interfaces/interface/name"]; - Interface interface = 2; - } - repeated InterfaceKey interface = 422482938 [(yext.schemapath) = "/interfaces/interface"]; -} diff --git a/cmd/gnmi/gnmi.go b/cmd/gnmi/gnmi.go deleted file mode 100644 index 22f9798c7..000000000 --- a/cmd/gnmi/gnmi.go +++ /dev/null @@ -1,43 +0,0 @@ -package main - -import ( - "code.fbi.h-da.de/cocsn/gosdn/forks/goarista/gnmi" - "code.fbi.h-da.de/cocsn/gosdn/nucleus" - "context" - "fmt" - "github.com/google/uuid" - log "github.com/sirupsen/logrus" -) - -func main() { - sbi := &nucleus.OpenConfig{} - device := nucleus.Device{ - SBI: sbi, - Config: nucleus.DeviceConfig{ - Uuid: uuid.New(), - Address: "141.100.70.170:6030", - Username: "admin", - Password: "arista", - }, - } - pnd := nucleus.NewPND("openconfig", sbi) - if err := pnd.AddDevice(device); err != nil { - log.Fatal(err) - } - - cfg := &gnmi.Config{ - Addr: device.Config.Address, - Password: device.Config.Password, - Username: device.Config.Username, - } - ctx := gnmi.NewContext(context.Background(), cfg) - ctx = context.WithValue(ctx, "config", cfg) - - paths := []string{"interfaces/interface"} - req, err := gnmi.NewGetRequest(gnmi.SplitPaths(paths), "") - resp, err := nucleus.GetWithRequest(ctx, req) - if err != nil { - log.Fatal(err) - } - fmt.Printf("%v", resp) -} diff --git a/cmd/gosdn-cli/main.go b/cmd/gosdn-cli/main.go index 5ed64517e..96d31c4ac 100644 --- a/cmd/gosdn-cli/main.go +++ b/cmd/gosdn-cli/main.go @@ -141,7 +141,7 @@ func goSDNTestDB(conn *grpc.ClientConn) { } // TAPIGetEdge triggers the GetEdge function of the Ciena -// flavoured TAPI ciena +// flavoured TAPI client func TAPIGetEdge(conn *grpc.ClientConn) { c := pb.NewGrpcCliClient(conn) @@ -161,7 +161,7 @@ func TAPIGetEdge(conn *grpc.ClientConn) { } // TAPIGetEdgeNode triggers the GetEdgeNode function of the Ciena -// flavoured TAPI ciena +// flavoured TAPI client func TAPIGetEdgeNode(conn *grpc.ClientConn) { c := pb.NewGrpcCliClient(conn) @@ -180,7 +180,7 @@ func TAPIGetEdgeNode(conn *grpc.ClientConn) { } // TAPIGetLink triggers the GetLink function of the Ciena -// flavoured TAPI ciena +// flavoured TAPI client func TAPIGetLink(conn *grpc.ClientConn) { c := pb.NewGrpcCliClient(conn) diff --git a/cmd/gosdn-tview/grpc/commands.go b/cmd/gosdn-tview/grpc/commands.go index b1d4bc6da..10ba4652b 100644 --- a/cmd/gosdn-tview/grpc/commands.go +++ b/cmd/gosdn-tview/grpc/commands.go @@ -169,7 +169,7 @@ func goSDNTestDB(conn *grpc.ClientConn) string { } // TAPIGetEdge triggers the GetEdge function of the Ciena -// flavoured TAPI ciena +// flavoured TAPI client func TAPIGetEdge(conn *grpc.ClientConn) string { c := pb.NewGrpcCliClient(conn) @@ -186,7 +186,7 @@ func TAPIGetEdge(conn *grpc.ClientConn) string { } // TAPIGetEdgeNode triggers the GetEdgeNode function of the Ciena -// flavoured TAPI ciena +// flavoured TAPI client func TAPIGetEdgeNode(conn *grpc.ClientConn) string { c := pb.NewGrpcCliClient(conn) @@ -202,7 +202,7 @@ func TAPIGetEdgeNode(conn *grpc.ClientConn) string { } // TAPIGetLink triggers the GetLink function of the Ciena -// flavoured TAPI ciena +// flavoured TAPI client func TAPIGetLink(conn *grpc.ClientConn) string { c := pb.NewGrpcCliClient(conn) diff --git a/cmd/gosdn/main.go b/cmd/gosdn/main.go index 2ba0f61f0..7555cd65a 100644 --- a/cmd/gosdn/main.go +++ b/cmd/gosdn/main.go @@ -2,15 +2,27 @@ package main import ( "code.fbi.h-da.de/cocsn/gosdn/nucleus" + "flag" log "github.com/sirupsen/logrus" ) func main() { + + // register our supported flags + cliListenAddr := flag.String("cli-listen-addr", "", "The IP address of the grpcCLI.") + cliListenPort := flag.String("cli-server-port", "55055", "The port number of the grpcCLI") + configFileName := flag.String("config-file", "", "Path to the config file") + + flag.Parse() + cliSocket := *cliListenAddr + ":" + *cliListenPort + log.SetLevel(log.DebugLevel) // Setup a channel to communicate if goSDN should shutdown. IsRunningChannel := make(chan bool) // hand off to cmd for further processing - nucleus.StartAndRun(IsRunningChannel) + nucleus.StartAndRun(cliSocket, *configFileName, IsRunningChannel) + + // nothing to see here, please move on! } diff --git a/configs/gosdn.toml b/configs/gosdn.toml index 229a018b6..b0ba95537 100644 --- a/configs/gosdn.toml +++ b/configs/gosdn.toml @@ -1,5 +1,6 @@ CliSocket = "localhost:55055" -db.socket = "bolt://172.17.0.4:7687" -db.user = "" -db.password = "" -db.crypto = false +DatabaseSocket = "bolt://172.17.0.4:7687" +DatabaseUser = "" +DatabasePassword = "" +DatabaseCrypto = false +ConfigPath = "./configs/gosdn.toml" diff --git a/database/client.go b/database/client.go index ecd24e25c..5910b12c7 100644 --- a/database/client.go +++ b/database/client.go @@ -4,7 +4,6 @@ import ( "errors" "github.com/neo4j/neo4j-go-driver/neo4j" log "github.com/sirupsen/logrus" - "github.com/spf13/viper" ) //Database is a database @@ -19,12 +18,8 @@ type PND struct { interfaces []string } -//NewDatabaseClient creates a database ciena -func NewDatabaseClient() Database { - uri := viper.GetString("db.socket") - username := viper.GetString("db.user") - password := viper.GetString("db.password") - encrypted := viper.GetBool("db.crypto") +//NewDatabaseClient creates a database client +func NewDatabaseClient(uri, username, password string, encrypted bool) Database { driver := createDriver(uri, username, password, encrypted) return Database{ diff --git a/forks/goarista/gnmi/arbitration.go b/forks/goarista/gnmi/arbitration.go deleted file mode 100644 index 78225d702..000000000 --- a/forks/goarista/gnmi/arbitration.go +++ /dev/null @@ -1,58 +0,0 @@ -// Copyright (c) 2019 Arista Networks, Inc. -// Use of this source code is governed by the Apache License 2.0 -// that can be found in the COPYING file. - -package gnmi - -import ( - "fmt" - "strconv" - "strings" - - "github.com/openconfig/gnmi/proto/gnmi_ext" -) - -// ArbitrationExt takes a string representation of a master arbitration value -// (e.g. "23", "role:42") and return a *gnmi_ext.Extension. -func ArbitrationExt(s string) (*gnmi_ext.Extension, error) { - if s == "" { - return nil, nil - } - roleID, electionID, err := parseArbitrationString(s) - if err != nil { - return nil, err - } - arb := &gnmi_ext.MasterArbitration{ - Role: &gnmi_ext.Role{Id: roleID}, - ElectionId: &gnmi_ext.Uint128{High: 0, Low: electionID}, - } - ext := gnmi_ext.Extension_MasterArbitration{MasterArbitration: arb} - return &gnmi_ext.Extension{Ext: &ext}, nil -} - -// parseArbitrationString parses the supplied string and returns the role and election id -// values. Input is of the form [<role>:]<election_id>, where election_id is a uint64. -// -// Examples: -// "1" -// "admin:42" -func parseArbitrationString(s string) (string, uint64, error) { - tokens := strings.Split(s, ":") - switch len(tokens) { - case 1: // just election id - id, err := parseElectionID(tokens[0]) - return "", id, err - case 2: // role and election id - id, err := parseElectionID(tokens[1]) - return tokens[0], id, err - } - return "", 0, fmt.Errorf("badly formed arbitration id (%s)", s) -} - -func parseElectionID(s string) (uint64, error) { - id, err := strconv.ParseUint(s, 0, 64) - if err != nil { - return 0, fmt.Errorf("badly formed arbitration id (%s)", s) - } - return id, nil -} diff --git a/forks/goarista/gnmi/arbitration_test.go b/forks/goarista/gnmi/arbitration_test.go deleted file mode 100644 index cdcc37c35..000000000 --- a/forks/goarista/gnmi/arbitration_test.go +++ /dev/null @@ -1,73 +0,0 @@ -// Copyright (c) 2019 Arista Networks, Inc. -// Use of this source code is governed by the Apache License 2.0 -// that can be found in the COPYING file. - -package gnmi - -import ( - "fmt" - "testing" - - "github.com/aristanetworks/goarista/test" - - "github.com/openconfig/gnmi/proto/gnmi_ext" -) - -func arbitration(role string, id *gnmi_ext.Uint128) *gnmi_ext.Extension { - arb := &gnmi_ext.MasterArbitration{ - Role: &gnmi_ext.Role{Id: role}, - ElectionId: id, - } - ext := gnmi_ext.Extension_MasterArbitration{MasterArbitration: arb} - return &gnmi_ext.Extension{Ext: &ext} -} - -func electionID(high, low uint64) *gnmi_ext.Uint128 { - return &gnmi_ext.Uint128{High: high, Low: low} -} - -func TestArbitrationExt(t *testing.T) { - testCases := map[string]struct { - s string - ext *gnmi_ext.Extension - err error - }{ - "empty": {}, - "no_role": { - s: "1", - ext: arbitration("", electionID(0, 1)), - }, - "with_role": { - s: "admin:1", - ext: arbitration("admin", electionID(0, 1)), - }, - "large_no_role": { - s: "9223372036854775807", - ext: arbitration("", electionID(0, 9223372036854775807)), - }, - "large_with_role": { - s: "admin:18446744073709551615", - ext: arbitration("admin", electionID(0, 18446744073709551615)), - }, - "invalid": { - s: "cat", - err: fmt.Errorf("badly formed arbitration id (%s)", "cat"), - }, - "invalid_too_many_colons": { - s: "dog:1:2", - err: fmt.Errorf("badly formed arbitration id (%s)", "dog:1:2"), - }, - } - - for name, tc := range testCases { - t.Run(name, func(t *testing.T) { - ext, err := ArbitrationExt(tc.s) - if !test.DeepEqual(tc.ext, ext) { - t.Errorf("Expected %#v, got %#v", tc.ext, ext) - } - if !test.DeepEqual(tc.err, err) { - t.Errorf("Expected %v, got %v", tc.err, err) - } - }) - } -} diff --git a/forks/goarista/gnmi/client.go b/forks/goarista/gnmi/client.go deleted file mode 100644 index 1a23050eb..000000000 --- a/forks/goarista/gnmi/client.go +++ /dev/null @@ -1,330 +0,0 @@ -// Copyright (c) 2017 Arista Networks, Inc. -// Use of this source code is governed by the Apache License 2.0 -// that can be found in the COPYING file. - -package gnmi - -import ( - "context" - "crypto/tls" - "crypto/x509" - "flag" - "fmt" - "math" - "net" - "os" - - "io/ioutil" - "strings" - - "github.com/golang/protobuf/proto" - pb "github.com/openconfig/gnmi/proto/gnmi" - "google.golang.org/grpc" - "google.golang.org/grpc/credentials" - "google.golang.org/grpc/encoding/gzip" - "google.golang.org/grpc/metadata" -) - -const ( - defaultPort = "6030" - // HostnameArg is the value to be replaced by the actual hostname - HostnameArg = "HOSTNAME" -) - -// PublishFunc is the method to publish responses -type PublishFunc func(addr string, message proto.Message) - -// ParseHostnames parses a comma-separated list of names and replaces HOSTNAME with the current -// hostname in it -func ParseHostnames(list string) ([]string, error) { - items := strings.Split(list, ",") - hostname, err := os.Hostname() - if err != nil { - return nil, err - } - names := make([]string, len(items)) - for i, name := range items { - if name == HostnameArg { - name = hostname - } - names[i] = name - } - return names, nil -} - -// Config is the gnmi.Client config -type Config struct { - Addr string - CAFile string - CertFile string - KeyFile string - Password string - Username string - TLS bool - Compression string - DialOptions []grpc.DialOption - Token string -} - -// SubscribeOptions is the gNMI subscription request options -type SubscribeOptions struct { - UpdatesOnly bool - Prefix string - Mode string - StreamMode string - SampleInterval uint64 - SuppressRedundant bool - HeartbeatInterval uint64 - Paths [][]string - Origin string - Target string -} - -// ParseFlags reads arguments from stdin and returns a populated Config object and a list of -// paths to subscribe to -func ParseFlags() (*Config, []string) { - // flags - var ( - addrsFlag = flag.String("addrs", "localhost:6030", - "Comma-separated list of addresses of OpenConfig gRPC servers. The address 'HOSTNAME' "+ - "is replaced by the current hostname.") - - caFileFlag = flag.String("cafile", "", - "Path to server TLS certificate file") - - certFileFlag = flag.String("certfile", "", - "Path to ciena TLS certificate file") - - keyFileFlag = flag.String("keyfile", "", - "Path to ciena TLS private key file") - - passwordFlag = flag.String("password", "", - "Password to authenticate with") - - usernameFlag = flag.String("username", "", - "Username to authenticate with") - - tlsFlag = flag.Bool("tls", false, - "Enable TLS") - - compressionFlag = flag.String("compression", "", - "Type of compression to use") - - subscribeFlag = flag.String("subscribe", "", - "Comma-separated list of paths to subscribe to upon connecting to the server") - - token = flag.String("token", "", - "Authentication token") - ) - flag.Parse() - cfg := &Config{ - Addr: *addrsFlag, - CAFile: *caFileFlag, - CertFile: *certFileFlag, - KeyFile: *keyFileFlag, - Password: *passwordFlag, - Username: *usernameFlag, - TLS: *tlsFlag, - Compression: *compressionFlag, - Token: *token, - } - subscriptions := strings.Split(*subscribeFlag, ",") - return cfg, subscriptions - -} - -// accessTokenCred implements credentials.PerRPCCredentials, the gRPC -// interface for credentials that need to attach security information -// to every RPC. -type accessTokenCred struct { - bearerToken string -} - -// newAccessTokenCredential constructs a new per-RPC credential from a token. -func newAccessTokenCredential(token string) credentials.PerRPCCredentials { - bearerFmt := "Bearer %s" - return &accessTokenCred{bearerToken: fmt.Sprintf(bearerFmt, token)} -} - -func (a *accessTokenCred) GetRequestMetadata(ctx context.Context, - uri ...string) (map[string]string, error) { - authHeader := "Authorization" - return map[string]string{ - authHeader: a.bearerToken, - }, nil -} - -func (a *accessTokenCred) RequireTransportSecurity() bool { return true } - -// DialContext connects to a gnmi service and returns a ciena -func DialContext(ctx context.Context, cfg *Config) (pb.GNMIClient, error) { - opts := append([]grpc.DialOption(nil), cfg.DialOptions...) - - switch cfg.Compression { - case "": - case "gzip": - opts = append(opts, grpc.WithDefaultCallOptions(grpc.UseCompressor(gzip.Name))) - default: - return nil, fmt.Errorf("unsupported compression option: %q", cfg.Compression) - } - - if cfg.TLS || cfg.CAFile != "" || cfg.CertFile != "" || cfg.Token != "" { - tlsConfig := &tls.Config{} - if cfg.CAFile != "" { - b, err := ioutil.ReadFile(cfg.CAFile) - if err != nil { - return nil, err - } - cp := x509.NewCertPool() - if !cp.AppendCertsFromPEM(b) { - return nil, fmt.Errorf("credentials: failed to append certificates") - } - tlsConfig.RootCAs = cp - } else { - tlsConfig.InsecureSkipVerify = true - } - if cfg.CertFile != "" { - if cfg.KeyFile == "" { - return nil, fmt.Errorf("please provide both -certfile and -keyfile") - } - cert, err := tls.LoadX509KeyPair(cfg.CertFile, cfg.KeyFile) - if err != nil { - return nil, err - } - tlsConfig.Certificates = []tls.Certificate{cert} - } - if cfg.Token != "" { - opts = append(opts, - grpc.WithPerRPCCredentials(newAccessTokenCredential(cfg.Token))) - } - opts = append(opts, grpc.WithTransportCredentials(credentials.NewTLS(tlsConfig))) - } else { - opts = append(opts, grpc.WithInsecure()) - } - - dial := func(ctx context.Context, addrIn string) (conn net.Conn, err error) { - var network, addr string - - split := strings.Split(addrIn, "://") - if l := len(split); l == 2 { - network = split[0] - addr = split[1] - } else { - network = "tcp" - addr = split[0] - } - - conn, err = (&net.Dialer{}).DialContext(ctx, network, addr) - return - } - - opts = append(opts, - grpc.WithContextDialer(dial), - - // Allows received protobuf messages to be larger than 4MB - grpc.WithDefaultCallOptions(grpc.MaxCallRecvMsgSize(math.MaxInt32)), - ) - - grpcconn, err := grpc.DialContext(ctx, cfg.Addr, opts...) - if err != nil { - return nil, fmt.Errorf("failed to dial: %s", err) - } - - return pb.NewGNMIClient(grpcconn), nil -} - -// Dial connects to a gnmi service and returns a ciena -func Dial(cfg *Config) (pb.GNMIClient, error) { - return DialContext(context.Background(), cfg) -} - -// NewContext returns a new context with username and password -// metadata if they are set in cfg. -func NewContext(ctx context.Context, cfg *Config) context.Context { - if cfg.Username != "" { - ctx = metadata.NewOutgoingContext(ctx, metadata.Pairs( - "username", cfg.Username, - "password", cfg.Password)) - } - return ctx -} - -// NewGetRequest returns a GetRequest for the given paths -func NewGetRequest(paths [][]string, origin string) (*pb.GetRequest, error) { - req := &pb.GetRequest{ - Path: make([]*pb.Path, len(paths)), - } - for i, p := range paths { - gnmiPath, err := ParseGNMIElements(p) - if err != nil { - return nil, err - } - req.Path[i] = gnmiPath - req.Path[i].Origin = origin - } - return req, nil -} - -// NewSubscribeRequest returns a SubscribeRequest for the given paths -func NewSubscribeRequest(subscribeOptions *SubscribeOptions) (*pb.SubscribeRequest, error) { - var mode pb.SubscriptionList_Mode - switch subscribeOptions.Mode { - case "once": - mode = pb.SubscriptionList_ONCE - case "poll": - mode = pb.SubscriptionList_POLL - case "": - fallthrough - case "stream": - mode = pb.SubscriptionList_STREAM - default: - return nil, fmt.Errorf("subscribe mode (%s) invalid", subscribeOptions.Mode) - } - - var streamMode pb.SubscriptionMode - switch subscribeOptions.StreamMode { - case "on_change": - streamMode = pb.SubscriptionMode_ON_CHANGE - case "sample": - streamMode = pb.SubscriptionMode_SAMPLE - case "": - fallthrough - case "target_defined": - streamMode = pb.SubscriptionMode_TARGET_DEFINED - default: - return nil, fmt.Errorf("subscribe stream mode (%s) invalid", subscribeOptions.StreamMode) - } - - prefixPath, err := ParseGNMIElements(SplitPath(subscribeOptions.Prefix)) - if err != nil { - return nil, err - } - subList := &pb.SubscriptionList{ - Subscription: make([]*pb.Subscription, len(subscribeOptions.Paths)), - Mode: mode, - UpdatesOnly: subscribeOptions.UpdatesOnly, - Prefix: prefixPath, - } - if subscribeOptions.Target != "" { - if subList.Prefix == nil { - subList.Prefix = &pb.Path{} - } - subList.Prefix.Target = subscribeOptions.Target - } - for i, p := range subscribeOptions.Paths { - gnmiPath, err := ParseGNMIElements(p) - if err != nil { - return nil, err - } - gnmiPath.Origin = subscribeOptions.Origin - subList.Subscription[i] = &pb.Subscription{ - Path: gnmiPath, - Mode: streamMode, - SampleInterval: subscribeOptions.SampleInterval, - SuppressRedundant: subscribeOptions.SuppressRedundant, - HeartbeatInterval: subscribeOptions.HeartbeatInterval, - } - } - return &pb.SubscribeRequest{Request: &pb.SubscribeRequest_Subscribe{ - Subscribe: subList}}, nil -} diff --git a/forks/goarista/gnmi/json.go b/forks/goarista/gnmi/json.go deleted file mode 100644 index 30aacd3df..000000000 --- a/forks/goarista/gnmi/json.go +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright (c) 2017 Arista Networks, Inc. -// Use of this source code is governed by the Apache License 2.0 -// that can be found in the COPYING file. - -package gnmi - -import ( - "github.com/openconfig/gnmi/proto/gnmi" -) - -// NotificationToMap converts a Notification into a map[string]interface{} -func NotificationToMap(notif *gnmi.Notification) (map[string]interface{}, error) { - m := make(map[string]interface{}, 1) - m["timestamp"] = notif.Timestamp - m["path"] = StrPath(notif.Prefix) - if len(notif.Update) != 0 { - updates := make(map[string]interface{}, len(notif.Update)) - var err error - for _, update := range notif.Update { - updates[StrPath(update.Path)] = StrUpdateVal(update) - if err != nil { - return nil, err - } - } - m["updates"] = updates - } - if len(notif.Delete) != 0 { - deletes := make([]string, len(notif.Delete)) - for i, del := range notif.Delete { - deletes[i] = StrPath(del) - } - m["deletes"] = deletes - } - return m, nil -} diff --git a/forks/goarista/gnmi/operation.go b/forks/goarista/gnmi/operation.go deleted file mode 100644 index ef506ac5e..000000000 --- a/forks/goarista/gnmi/operation.go +++ /dev/null @@ -1,541 +0,0 @@ -// Copyright (c) 2017 Arista Networks, Inc. -// Use of this source code is governed by the Apache License 2.0 -// that can be found in the COPYING file. - -package gnmi - -import ( - "bufio" - "bytes" - "context" - "encoding/base64" - "encoding/json" - "errors" - "fmt" - "io" - "io/ioutil" - "math" - "os" - "path" - "strconv" - "strings" - "time" - - pb "github.com/openconfig/gnmi/proto/gnmi" - "github.com/openconfig/gnmi/proto/gnmi_ext" - "google.golang.org/grpc/codes" -) - -// GetWithRequest takes a fully formed GetRequest, performs the Get, -// and displays any response. -func GetWithRequest(ctx context.Context, client pb.GNMIClient, - req *pb.GetRequest) error { - resp, err := client.Get(ctx, req) - if err != nil { - return err - } - for _, notif := range resp.Notification { - prefix := StrPath(notif.Prefix) - for _, update := range notif.Update { - fmt.Printf("%s:\n", path.Join(prefix, StrPath(update.Path))) - fmt.Println(StrUpdateVal(update)) - } - } - return nil -} - -// Get sends a GetRequest to the given ciena. -func Get(ctx context.Context, client pb.GNMIClient, paths [][]string, - origin string) error { - req, err := NewGetRequest(paths, origin) - if err != nil { - return err - } - return GetWithRequest(ctx, client, req) -} - -// Capabilities retuns the capabilities of the ciena. -func Capabilities(ctx context.Context, client pb.GNMIClient) error { - resp, err := client.Capabilities(ctx, &pb.CapabilityRequest{}) - if err != nil { - return err - } - fmt.Printf("Version: %s\n", resp.GNMIVersion) - for _, mod := range resp.SupportedModels { - fmt.Printf("SupportedModel: %s\n", mod) - } - for _, enc := range resp.SupportedEncodings { - fmt.Printf("SupportedEncoding: %s\n", enc) - } - return nil -} - -// val may be a path to a file or it may be json. First see if it is a -// file, if so return its contents, otherwise return val -func extractJSON(val string) []byte { - if jsonBytes, err := ioutil.ReadFile(val); err == nil { - return jsonBytes - } - // Best effort check if the value might a string literal, in which - // case wrap it in quotes. This is to allow a user to do: - // gnmi update ../hostname host1234 - // gnmi update ../description 'This is a description' - // instead of forcing them to quote the string: - // gnmi update ../hostname '"host1234"' - // gnmi update ../description '"This is a description"' - maybeUnquotedStringLiteral := func(s string) bool { - if s == "true" || s == "false" || s == "null" || // JSON reserved words - strings.ContainsAny(s, `"'{}[]`) { // Already quoted or is a JSON object or array - return false - } else if _, err := strconv.ParseInt(s, 0, 32); err == nil { - // Integer. Using byte size of 32 because larger integer - // types are supposed to be sent as strings in JSON. - return false - } else if _, err := strconv.ParseFloat(s, 64); err == nil { - // Float - return false - } - - return true - } - if maybeUnquotedStringLiteral(val) { - out := make([]byte, len(val)+2) - out[0] = '"' - copy(out[1:], val) - out[len(out)-1] = '"' - return out - } - return []byte(val) -} - -// StrUpdateVal will return a string representing the value within the supplied update -func StrUpdateVal(u *pb.Update) string { - if u.Value != nil { - // Backwards compatibility with pre-v0.4 gnmi - switch u.Value.Type { - case pb.Encoding_JSON, pb.Encoding_JSON_IETF: - return strJSON(u.Value.Value) - case pb.Encoding_BYTES, pb.Encoding_PROTO: - return base64.StdEncoding.EncodeToString(u.Value.Value) - case pb.Encoding_ASCII: - return string(u.Value.Value) - default: - return string(u.Value.Value) - } - } - return StrVal(u.Val) -} - -// StrVal will return a string representing the supplied value -func StrVal(val *pb.TypedValue) string { - switch v := val.GetValue().(type) { - case *pb.TypedValue_StringVal: - return v.StringVal - case *pb.TypedValue_JsonIetfVal: - return strJSON(v.JsonIetfVal) - case *pb.TypedValue_JsonVal: - return strJSON(v.JsonVal) - case *pb.TypedValue_IntVal: - return strconv.FormatInt(v.IntVal, 10) - case *pb.TypedValue_UintVal: - return strconv.FormatUint(v.UintVal, 10) - case *pb.TypedValue_BoolVal: - return strconv.FormatBool(v.BoolVal) - case *pb.TypedValue_BytesVal: - return base64.StdEncoding.EncodeToString(v.BytesVal) - case *pb.TypedValue_DecimalVal: - return strDecimal64(v.DecimalVal) - case *pb.TypedValue_FloatVal: - return strconv.FormatFloat(float64(v.FloatVal), 'g', -1, 32) - case *pb.TypedValue_LeaflistVal: - return strLeaflist(v.LeaflistVal) - case *pb.TypedValue_AsciiVal: - return v.AsciiVal - case *pb.TypedValue_AnyVal: - return v.AnyVal.String() - case *pb.TypedValue_ProtoBytes: - return base64.StdEncoding.EncodeToString(v.ProtoBytes) - default: - panic(v) - } -} - -func strJSON(inJSON []byte) string { - var ( - out bytes.Buffer - err error - ) - // Check for ',' as simple heuristic on whether to expand JSON - // onto multiple lines, or compact it to a single line. - if bytes.Contains(inJSON, []byte{','}) { - err = json.Indent(&out, inJSON, "", " ") - } else { - err = json.Compact(&out, inJSON) - } - if err != nil { - return fmt.Sprintf("(error unmarshalling json: %s)\n", err) + string(inJSON) - } - return out.String() -} - -func strDecimal64(d *pb.Decimal64) string { - var i, frac int64 - if d.Precision > 0 { - div := int64(10) - it := d.Precision - 1 - for it > 0 { - div *= 10 - it-- - } - i = d.Digits / div - frac = d.Digits % div - } else { - i = d.Digits - } - if frac < 0 { - frac = -frac - } - return fmt.Sprintf("%d.%d", i, frac) -} - -// strLeafList builds a human-readable form of a leaf-list. e.g. [1, 2, 3] or [a, b, c] -func strLeaflist(v *pb.ScalarArray) string { - var b strings.Builder - b.WriteByte('[') - - for i, elm := range v.Element { - b.WriteString(StrVal(elm)) - if i < len(v.Element)-1 { - b.WriteString(", ") - } - } - - b.WriteByte(']') - return b.String() -} - -// TypedValue marshals an interface into a gNMI TypedValue value -func TypedValue(val interface{}) *pb.TypedValue { - // TODO: handle more types: - // float64 - // maps - // key.Key - // key.Map - // ... etc - switch v := val.(type) { - case string: - return &pb.TypedValue{Value: &pb.TypedValue_StringVal{StringVal: v}} - case int: - return &pb.TypedValue{Value: &pb.TypedValue_IntVal{IntVal: int64(v)}} - case int8: - return &pb.TypedValue{Value: &pb.TypedValue_IntVal{IntVal: int64(v)}} - case int16: - return &pb.TypedValue{Value: &pb.TypedValue_IntVal{IntVal: int64(v)}} - case int32: - return &pb.TypedValue{Value: &pb.TypedValue_IntVal{IntVal: int64(v)}} - case int64: - return &pb.TypedValue{Value: &pb.TypedValue_IntVal{IntVal: v}} - case uint: - return &pb.TypedValue{Value: &pb.TypedValue_UintVal{UintVal: uint64(v)}} - case uint8: - return &pb.TypedValue{Value: &pb.TypedValue_UintVal{UintVal: uint64(v)}} - case uint16: - return &pb.TypedValue{Value: &pb.TypedValue_UintVal{UintVal: uint64(v)}} - case uint32: - return &pb.TypedValue{Value: &pb.TypedValue_UintVal{UintVal: uint64(v)}} - case uint64: - return &pb.TypedValue{Value: &pb.TypedValue_UintVal{UintVal: v}} - case bool: - return &pb.TypedValue{Value: &pb.TypedValue_BoolVal{BoolVal: v}} - case float32: - return &pb.TypedValue{Value: &pb.TypedValue_FloatVal{FloatVal: v}} - case []interface{}: - gnmiElems := make([]*pb.TypedValue, len(v)) - for i, elem := range v { - gnmiElems[i] = TypedValue(elem) - } - return &pb.TypedValue{ - Value: &pb.TypedValue_LeaflistVal{ - LeaflistVal: &pb.ScalarArray{ - Element: gnmiElems, - }}} - default: - panic(fmt.Sprintf("unexpected type %T for value %v", val, val)) - } -} - -// ExtractValue pulls a value out of a gNMI Update, parsing JSON if present. -// Possible return types: -// string -// int64 -// uint64 -// bool -// []byte -// float32 -// *gnmi.Decimal64 -// json.Number -// *any.Any -// []interface{} -// map[string]interface{} -func ExtractValue(update *pb.Update) (interface{}, error) { - var i interface{} - var err error - if update == nil { - return nil, fmt.Errorf("empty update") - } - if update.Val != nil { - i, err = extractValueV04(update.Val) - } else if update.Value != nil { - i, err = extractValueV03(update.Value) - } - return i, err -} - -func extractValueV04(val *pb.TypedValue) (interface{}, error) { - switch v := val.Value.(type) { - case *pb.TypedValue_StringVal: - return v.StringVal, nil - case *pb.TypedValue_IntVal: - return v.IntVal, nil - case *pb.TypedValue_UintVal: - return v.UintVal, nil - case *pb.TypedValue_BoolVal: - return v.BoolVal, nil - case *pb.TypedValue_BytesVal: - return v.BytesVal, nil - case *pb.TypedValue_FloatVal: - return v.FloatVal, nil - case *pb.TypedValue_DecimalVal: - return v.DecimalVal, nil - case *pb.TypedValue_LeaflistVal: - elementList := v.LeaflistVal.Element - l := make([]interface{}, len(elementList)) - for i, element := range elementList { - el, err := extractValueV04(element) - if err != nil { - return nil, err - } - l[i] = el - } - return l, nil - case *pb.TypedValue_AnyVal: - return v.AnyVal, nil - case *pb.TypedValue_JsonVal: - return decode(v.JsonVal) - case *pb.TypedValue_JsonIetfVal: - return decode(v.JsonIetfVal) - case *pb.TypedValue_AsciiVal: - return v.AsciiVal, nil - case *pb.TypedValue_ProtoBytes: - return v.ProtoBytes, nil - } - return nil, fmt.Errorf("unhandled type of value %v", val.GetValue()) -} - -func extractValueV03(val *pb.Value) (interface{}, error) { - switch val.Type { - case pb.Encoding_JSON, pb.Encoding_JSON_IETF: - return decode(val.Value) - case pb.Encoding_BYTES, pb.Encoding_PROTO: - return val.Value, nil - case pb.Encoding_ASCII: - return string(val.Value), nil - } - return nil, fmt.Errorf("unhandled type of value %v", val.GetValue()) -} - -func decode(byteArr []byte) (interface{}, error) { - decoder := json.NewDecoder(bytes.NewReader(byteArr)) - decoder.UseNumber() - var value interface{} - err := decoder.Decode(&value) - return value, err -} - -// DecimalToFloat converts a gNMI Decimal64 to a float64 -func DecimalToFloat(dec *pb.Decimal64) float64 { - return float64(dec.Digits) / math.Pow10(int(dec.Precision)) -} - -func update(p *pb.Path, val string) (*pb.Update, error) { - var v *pb.TypedValue - switch p.Origin { - case "": - v = &pb.TypedValue{ - Value: &pb.TypedValue_JsonIetfVal{JsonIetfVal: extractJSON(val)}} - case "eos_native": - v = &pb.TypedValue{ - Value: &pb.TypedValue_JsonVal{JsonVal: extractJSON(val)}} - case "cli", "test-regen-cli": - v = &pb.TypedValue{ - Value: &pb.TypedValue_AsciiVal{AsciiVal: val}} - case "p4_config": - b, err := ioutil.ReadFile(val) - if err != nil { - return nil, err - } - v = &pb.TypedValue{ - Value: &pb.TypedValue_ProtoBytes{ProtoBytes: b}} - default: - return nil, fmt.Errorf("unexpected origin: %q", p.Origin) - } - - return &pb.Update{Path: p, Val: v}, nil -} - -// Operation describes an gNMI operation. -type Operation struct { - Type string - Origin string - Target string - Path []string - Val string -} - -func newSetRequest(setOps []*Operation, exts ...*gnmi_ext.Extension) (*pb.SetRequest, error) { - req := &pb.SetRequest{} - for _, op := range setOps { - p, err := ParseGNMIElements(op.Path) - if err != nil { - return nil, err - } - p.Origin = op.Origin - - // Target must apply to the entire SetRequest. - if op.Target != "" { - req.Prefix = &pb.Path{ - Target: op.Target, - } - } - - switch op.Type { - case "delete": - req.Delete = append(req.Delete, p) - case "update": - u, err := update(p, op.Val) - if err != nil { - return nil, err - } - req.Update = append(req.Update, u) - case "replace": - u, err := update(p, op.Val) - if err != nil { - return nil, err - } - req.Replace = append(req.Replace, u) - } - } - for _, ext := range exts { - req.Extension = append(req.Extension, ext) - } - return req, nil -} - -// Set sends a SetRequest to the given ciena. -func Set(ctx context.Context, client pb.GNMIClient, setOps []*Operation, - exts ...*gnmi_ext.Extension) error { - req, err := newSetRequest(setOps, exts...) - if err != nil { - return err - } - resp, err := client.Set(ctx, req) - if err != nil { - return err - } - if resp.Message != nil && codes.Code(resp.Message.Code) != codes.OK { - return errors.New(resp.Message.Message) - } - return nil -} - -// Subscribe sends a SubscribeRequest to the given ciena. -// Deprecated: Use SubscribeErr instead. -func Subscribe(ctx context.Context, client pb.GNMIClient, subscribeOptions *SubscribeOptions, - respChan chan<- *pb.SubscribeResponse, errChan chan<- error) { - defer close(errChan) - if err := SubscribeErr(ctx, client, subscribeOptions, respChan); err != nil { - errChan <- err - } -} - -// SubscribeErr makes a gNMI.Subscribe call and writes the responses -// to the respChan. Before returning respChan will be closed. -func SubscribeErr(ctx context.Context, client pb.GNMIClient, subscribeOptions *SubscribeOptions, - respChan chan<- *pb.SubscribeResponse) error { - ctx, cancel := context.WithCancel(ctx) - defer cancel() - defer close(respChan) - - stream, err := client.Subscribe(ctx) - if err != nil { - return err - } - req, err := NewSubscribeRequest(subscribeOptions) - if err != nil { - return err - } - if err := stream.Send(req); err != nil { - return err - } - - for { - resp, err := stream.Recv() - if err != nil { - if err == io.EOF { - return nil - } - return err - } - respChan <- resp - - // For POLL subscriptions, initiate a poll request by pressing ENTER - if subscribeOptions.Mode == "poll" { - switch resp.Response.(type) { - case *pb.SubscribeResponse_SyncResponse: - fmt.Print("Press ENTER to send a poll request: ") - reader := bufio.NewReader(os.Stdin) - reader.ReadString('\n') - - pollReq := &pb.SubscribeRequest{ - Request: &pb.SubscribeRequest_Poll{ - Poll: &pb.Poll{}, - }, - } - if err := stream.Send(pollReq); err != nil { - return err - } - } - } - } -} - -// LogSubscribeResponse logs update responses to stderr. -func LogSubscribeResponse(response *pb.SubscribeResponse) error { - switch resp := response.Response.(type) { - case *pb.SubscribeResponse_Error: - return errors.New(resp.Error.Message) - case *pb.SubscribeResponse_SyncResponse: - if !resp.SyncResponse { - return errors.New("initial sync failed") - } - case *pb.SubscribeResponse_Update: - t := time.Unix(0, resp.Update.Timestamp).UTC() - prefix := StrPath(resp.Update.Prefix) - var target string - if t := resp.Update.Prefix.GetTarget(); t != "" { - target = "(" + t + ") " - } - for _, update := range resp.Update.Update { - fmt.Printf("[%s] %s%s = %s\n", t.Format(time.RFC3339Nano), - target, - path.Join(prefix, StrPath(update.Path)), - StrUpdateVal(update)) - } - for _, del := range resp.Update.Delete { - fmt.Printf("[%s] %sDeleted %s\n", t.Format(time.RFC3339Nano), - target, - path.Join(prefix, StrPath(del))) - } - } - return nil -} diff --git a/forks/goarista/gnmi/operation_test.go b/forks/goarista/gnmi/operation_test.go deleted file mode 100644 index fd575d10a..000000000 --- a/forks/goarista/gnmi/operation_test.go +++ /dev/null @@ -1,423 +0,0 @@ -// Copyright (c) 2017 Arista Networks, Inc. -// Use of this source code is governed by the Apache License 2.0 -// that can be found in the COPYING file. - -package gnmi - -import ( - "bytes" - "encoding/json" - "io/ioutil" - "os" - "testing" - - "github.com/aristanetworks/goarista/test" - "github.com/golang/protobuf/proto" - "github.com/golang/protobuf/ptypes/any" - - pb "github.com/openconfig/gnmi/proto/gnmi" -) - -func TestNewSetRequest(t *testing.T) { - pathFoo := &pb.Path{ - Element: []string{"foo"}, - Elem: []*pb.PathElem{{Name: "foo"}}, - } - pathCli := &pb.Path{ - Origin: "cli", - } - pathP4 := &pb.Path{ - Origin: "p4_config", - } - - p4FileContent := "p4_config test" - p4TestFile, err := ioutil.TempFile("", "p4TestFile") - if err != nil { - t.Errorf("cannot create test file for p4_config") - } - p4Filename := p4TestFile.Name() - - defer os.Remove(p4Filename) - - if _, err := p4TestFile.WriteString(p4FileContent); err != nil { - t.Errorf("cannot write test file for p4_config") - } - p4TestFile.Close() - - testCases := map[string]struct { - setOps []*Operation - exp pb.SetRequest - }{ - "delete": { - setOps: []*Operation{{Type: "delete", Path: []string{"foo"}}}, - exp: pb.SetRequest{Delete: []*pb.Path{pathFoo}}, - }, - "update": { - setOps: []*Operation{{Type: "update", Path: []string{"foo"}, Val: "true"}}, - exp: pb.SetRequest{ - Update: []*pb.Update{{ - Path: pathFoo, - Val: &pb.TypedValue{ - Value: &pb.TypedValue_JsonIetfVal{JsonIetfVal: []byte("true")}}, - }}, - }, - }, - "replace": { - setOps: []*Operation{{Type: "replace", Path: []string{"foo"}, Val: "true"}}, - exp: pb.SetRequest{ - Replace: []*pb.Update{{ - Path: pathFoo, - Val: &pb.TypedValue{ - Value: &pb.TypedValue_JsonIetfVal{JsonIetfVal: []byte("true")}}, - }}, - }, - }, - "cli-replace": { - setOps: []*Operation{{Type: "replace", Origin: "cli", - Val: "hostname foo\nip routing"}}, - exp: pb.SetRequest{ - Replace: []*pb.Update{{ - Path: pathCli, - Val: &pb.TypedValue{ - Value: &pb.TypedValue_AsciiVal{AsciiVal: "hostname foo\nip routing"}}, - }}, - }, - }, - "p4_config": { - setOps: []*Operation{{Type: "replace", Origin: "p4_config", - Val: p4Filename}}, - exp: pb.SetRequest{ - Replace: []*pb.Update{{ - Path: pathP4, - Val: &pb.TypedValue{ - Value: &pb.TypedValue_ProtoBytes{ProtoBytes: []byte(p4FileContent)}}, - }}, - }, - }, - "target": { - setOps: []*Operation{{Type: "replace", Target: "JPE1234567", - Path: []string{"foo"}, Val: "true"}}, - exp: pb.SetRequest{ - Prefix: &pb.Path{Target: "JPE1234567"}, - Replace: []*pb.Update{{ - Path: pathFoo, - Val: &pb.TypedValue{ - Value: &pb.TypedValue_JsonIetfVal{JsonIetfVal: []byte("true")}}, - }}, - }, - }, - } - - for name, tc := range testCases { - t.Run(name, func(t *testing.T) { - got, err := newSetRequest(tc.setOps) - if err != nil { - t.Fatal(err) - } - if diff := test.Diff(tc.exp, *got); diff != "" { - t.Errorf("unexpected diff: %s", diff) - } - }) - } -} - -func TestStrUpdateVal(t *testing.T) { - anyBytes, err := proto.Marshal(&pb.ModelData{Name: "foobar"}) - if err != nil { - t.Fatal(err) - } - anyMessage := &any.Any{TypeUrl: "gnmi/ModelData", Value: anyBytes} - anyString := proto.CompactTextString(anyMessage) - - for name, tc := range map[string]struct { - update *pb.Update - exp string - }{ - "JSON Value": { - update: &pb.Update{ - Value: &pb.Value{ - Value: []byte(`{"foo":"bar"}`), - Type: pb.Encoding_JSON}}, - exp: `{"foo":"bar"}`, - }, - "JSON_IETF Value": { - update: &pb.Update{ - Value: &pb.Value{ - Value: []byte(`{"foo":"bar"}`), - Type: pb.Encoding_JSON_IETF}}, - exp: `{"foo":"bar"}`, - }, - "BYTES Value": { - update: &pb.Update{ - Value: &pb.Value{ - Value: []byte{0xde, 0xad}, - Type: pb.Encoding_BYTES}}, - exp: "3q0=", - }, - "PROTO Value": { - update: &pb.Update{ - Value: &pb.Value{ - Value: []byte{0xde, 0xad}, - Type: pb.Encoding_PROTO}}, - exp: "3q0=", - }, - "ASCII Value": { - update: &pb.Update{ - Value: &pb.Value{ - Value: []byte("foobar"), - Type: pb.Encoding_ASCII}}, - exp: "foobar", - }, - "INVALID Value": { - update: &pb.Update{ - Value: &pb.Value{ - Value: []byte("foobar"), - Type: pb.Encoding(42)}}, - exp: "foobar", - }, - "StringVal": { - update: &pb.Update{Val: &pb.TypedValue{ - Value: &pb.TypedValue_StringVal{StringVal: "foobar"}}}, - exp: "foobar", - }, - "IntVal": { - update: &pb.Update{Val: &pb.TypedValue{ - Value: &pb.TypedValue_IntVal{IntVal: -42}}}, - exp: "-42", - }, - "UintVal": { - update: &pb.Update{Val: &pb.TypedValue{ - Value: &pb.TypedValue_UintVal{UintVal: 42}}}, - exp: "42", - }, - "BoolVal": { - update: &pb.Update{Val: &pb.TypedValue{ - Value: &pb.TypedValue_BoolVal{BoolVal: true}}}, - exp: "true", - }, - "BytesVal": { - update: &pb.Update{Val: &pb.TypedValue{ - Value: &pb.TypedValue_BytesVal{BytesVal: []byte{0xde, 0xad}}}}, - exp: "3q0=", - }, - "FloatVal": { - update: &pb.Update{Val: &pb.TypedValue{ - Value: &pb.TypedValue_FloatVal{FloatVal: 3.14}}}, - exp: "3.14", - }, - "DecimalVal": { - update: &pb.Update{Val: &pb.TypedValue{ - Value: &pb.TypedValue_DecimalVal{ - DecimalVal: &pb.Decimal64{Digits: 314, Precision: 2}, - }}}, - exp: "3.14", - }, - "LeafListVal": { - update: &pb.Update{Val: &pb.TypedValue{ - Value: &pb.TypedValue_LeaflistVal{ - LeaflistVal: &pb.ScalarArray{Element: []*pb.TypedValue{ - {Value: &pb.TypedValue_BoolVal{BoolVal: true}}, - {Value: &pb.TypedValue_AsciiVal{AsciiVal: "foobar"}}, - }}, - }}}, - exp: "[true, foobar]", - }, - "AnyVal": { - update: &pb.Update{Val: &pb.TypedValue{ - Value: &pb.TypedValue_AnyVal{AnyVal: anyMessage}}}, - exp: anyString, - }, - "JsonVal": { - update: &pb.Update{Val: &pb.TypedValue{ - Value: &pb.TypedValue_JsonVal{JsonVal: []byte(`{"foo":"bar"}`)}}}, - exp: `{"foo":"bar"}`, - }, - "JsonVal_complex": { - update: &pb.Update{Val: &pb.TypedValue{ - Value: &pb.TypedValue_JsonVal{JsonVal: []byte(`{"foo":"bar","baz":"qux"}`)}}}, - exp: `{ - "foo": "bar", - "baz": "qux" -}`, - }, - "JsonIetfVal": { - update: &pb.Update{Val: &pb.TypedValue{ - Value: &pb.TypedValue_JsonIetfVal{JsonIetfVal: []byte(`{"foo":"bar"}`)}}}, - exp: `{"foo":"bar"}`, - }, - "AsciiVal": { - update: &pb.Update{Val: &pb.TypedValue{ - Value: &pb.TypedValue_AsciiVal{AsciiVal: "foobar"}}}, - exp: "foobar", - }, - "ProtoBytes": { - update: &pb.Update{Val: &pb.TypedValue{ - Value: &pb.TypedValue_ProtoBytes{ProtoBytes: anyBytes}}}, - exp: "CgZmb29iYXI=", - }, - } { - t.Run(name, func(t *testing.T) { - got := StrUpdateVal(tc.update) - if got != tc.exp { - t.Errorf("Expected: %q Got: %q", tc.exp, got) - } - }) - } -} - -func TestTypedValue(t *testing.T) { - for tname, tcase := range map[string]struct { - in interface{} - exp *pb.TypedValue - }{ - "string": { - in: "foo", - exp: &pb.TypedValue{Value: &pb.TypedValue_StringVal{StringVal: "foo"}}, - }, - "int": { - in: 42, - exp: &pb.TypedValue{Value: &pb.TypedValue_IntVal{IntVal: 42}}, - }, - "int64": { - in: int64(42), - exp: &pb.TypedValue{Value: &pb.TypedValue_IntVal{IntVal: 42}}, - }, - "uint": { - in: uint(42), - exp: &pb.TypedValue{Value: &pb.TypedValue_UintVal{UintVal: 42}}, - }, - "bool": { - in: true, - exp: &pb.TypedValue{Value: &pb.TypedValue_BoolVal{BoolVal: true}}, - }, - "slice": { - in: []interface{}{"foo", 1, uint(2), true}, - exp: &pb.TypedValue{Value: &pb.TypedValue_LeaflistVal{LeaflistVal: &pb.ScalarArray{ - Element: []*pb.TypedValue{ - {Value: &pb.TypedValue_StringVal{StringVal: "foo"}}, - {Value: &pb.TypedValue_IntVal{IntVal: 1}}, - {Value: &pb.TypedValue_UintVal{UintVal: 2}}, - {Value: &pb.TypedValue_BoolVal{BoolVal: true}}, - }}}}, - }, - } { - t.Run(tname, func(t *testing.T) { - if got := TypedValue(tcase.in); !test.DeepEqual(got, tcase.exp) { - t.Errorf("Expected: %q Got: %q", tcase.exp, got) - } - }) - } -} - -func TestExtractJSON(t *testing.T) { - jsonFile, err := ioutil.TempFile("", "extractJSON") - if err != nil { - t.Fatal(err) - } - defer os.Remove(jsonFile.Name()) - if _, err := jsonFile.Write([]byte(`"jsonFile"`)); err != nil { - jsonFile.Close() - t.Fatal(err) - } - if err := jsonFile.Close(); err != nil { - t.Fatal(err) - } - - for val, exp := range map[string][]byte{ - jsonFile.Name(): []byte(`"jsonFile"`), - "foobar": []byte(`"foobar"`), - `"foobar"`: []byte(`"foobar"`), - "Val: true": []byte(`"Val: true"`), - "host42": []byte(`"host42"`), - "42": []byte("42"), - "-123.43": []byte("-123.43"), - "0xFFFF": []byte("0xFFFF"), - // Int larger than can fit in 32 bits should be quoted - "0x8000000000": []byte(`"0x8000000000"`), - "-0x8000000000": []byte(`"-0x8000000000"`), - "true": []byte("true"), - "false": []byte("false"), - "null": []byte("null"), - "{true: 42}": []byte("{true: 42}"), - "[]": []byte("[]"), - } { - t.Run(val, func(t *testing.T) { - got := extractJSON(val) - if !bytes.Equal(exp, got) { - t.Errorf("Unexpected diff. Expected: %q Got: %q", exp, got) - } - }) - } -} - -func TestExtractValue(t *testing.T) { - cases := []struct { - in *pb.Update - exp interface{} - }{{ - in: &pb.Update{Val: &pb.TypedValue{ - Value: &pb.TypedValue_StringVal{StringVal: "foo"}}}, - exp: "foo", - }, { - in: &pb.Update{Val: &pb.TypedValue{ - Value: &pb.TypedValue_IntVal{IntVal: 123}}}, - exp: int64(123), - }, { - in: &pb.Update{Val: &pb.TypedValue{ - Value: &pb.TypedValue_UintVal{UintVal: 123}}}, - exp: uint64(123), - }, { - in: &pb.Update{Val: &pb.TypedValue{ - Value: &pb.TypedValue_BoolVal{BoolVal: true}}}, - exp: true, - }, { - in: &pb.Update{Val: &pb.TypedValue{ - Value: &pb.TypedValue_BytesVal{BytesVal: []byte{0xde, 0xad}}}}, - exp: []byte{0xde, 0xad}, - }, { - in: &pb.Update{Val: &pb.TypedValue{ - Value: &pb.TypedValue_FloatVal{FloatVal: -12.34}}}, - exp: float32(-12.34), - }, { - in: &pb.Update{Val: &pb.TypedValue{ - Value: &pb.TypedValue_DecimalVal{DecimalVal: &pb.Decimal64{ - Digits: -1234, Precision: 2}}}}, - exp: &pb.Decimal64{Digits: -1234, Precision: 2}, - }, { - in: &pb.Update{Val: &pb.TypedValue{ - Value: &pb.TypedValue_LeaflistVal{LeaflistVal: &pb.ScalarArray{ - Element: []*pb.TypedValue{ - {Value: &pb.TypedValue_StringVal{StringVal: "foo"}}, - {Value: &pb.TypedValue_IntVal{IntVal: 123}}}}}}}, - exp: []interface{}{"foo", int64(123)}, - }, { - in: &pb.Update{Val: &pb.TypedValue{ - Value: &pb.TypedValue_JsonVal{JsonVal: []byte(`12.34`)}}}, - exp: json.Number("12.34"), - }, { - in: &pb.Update{Val: &pb.TypedValue{ - Value: &pb.TypedValue_JsonVal{JsonVal: []byte(`[12.34, 123, "foo"]`)}}}, - exp: []interface{}{json.Number("12.34"), json.Number("123"), "foo"}, - }, { - in: &pb.Update{Val: &pb.TypedValue{ - Value: &pb.TypedValue_JsonVal{JsonVal: []byte(`{"foo":"bar"}`)}}}, - exp: map[string]interface{}{"foo": "bar"}, - }, { - in: &pb.Update{Val: &pb.TypedValue{ - Value: &pb.TypedValue_JsonVal{JsonVal: []byte(`{"foo":45.67}`)}}}, - exp: map[string]interface{}{"foo": json.Number("45.67")}, - }, { - in: &pb.Update{Val: &pb.TypedValue{ - Value: &pb.TypedValue_JsonIetfVal{JsonIetfVal: []byte(`{"foo":"bar"}`)}}}, - exp: map[string]interface{}{"foo": "bar"}, - }} - for _, tc := range cases { - out, err := ExtractValue(tc.in) - if err != nil { - t.Errorf(err.Error()) - } - if !test.DeepEqual(tc.exp, out) { - t.Errorf("Extracted value is incorrect. Expected %+v, got %+v", tc.exp, out) - } - } -} diff --git a/forks/goarista/gnmi/path.go b/forks/goarista/gnmi/path.go deleted file mode 100644 index 00280a8fc..000000000 --- a/forks/goarista/gnmi/path.go +++ /dev/null @@ -1,251 +0,0 @@ -// Copyright (c) 2017 Arista Networks, Inc. -// Use of this source code is governed by the Apache License 2.0 -// that can be found in the COPYING file. - -package gnmi - -import ( - "fmt" - "sort" - "strings" - - pb "github.com/openconfig/gnmi/proto/gnmi" -) - -// nextTokenIndex returns the end index of the first token. -func nextTokenIndex(path string) int { - var inBrackets bool - var escape bool - for i, c := range path { - switch c { - case '[': - inBrackets = true - escape = false - case ']': - if !escape { - inBrackets = false - } - escape = false - case '\\': - escape = !escape - case '/': - if !inBrackets && !escape { - return i - } - escape = false - default: - escape = false - } - } - return len(path) -} - -// SplitPath splits a gnmi path according to the spec. See -// https://github.com/openconfig/reference/blob/master/rpc/gnmi/gnmi-path-conventions.md -// No validation is done. Behavior is undefined if path is an invalid -// gnmi path. TODO: Do validation? -func SplitPath(path string) []string { - var result []string - if len(path) > 0 && path[0] == '/' { - path = path[1:] - } - for len(path) > 0 { - i := nextTokenIndex(path) - result = append(result, path[:i]) - path = path[i:] - if len(path) > 0 && path[0] == '/' { - path = path[1:] - } - } - return result -} - -// SplitPaths splits multiple gnmi paths -func SplitPaths(paths []string) [][]string { - out := make([][]string, len(paths)) - for i, path := range paths { - out[i] = SplitPath(path) - } - return out -} - -// StrPath builds a human-readable form of a gnmi path. -// e.g. /a/b/c[e=f] -func StrPath(path *pb.Path) string { - if path == nil { - return "/" - } else if len(path.Elem) != 0 { - return strPathV04(path) - } else if len(path.Element) != 0 { - return strPathV03(path) - } - return "/" -} - -// strPathV04 handles the v0.4 gnmi and later path.Elem member. -func strPathV04(path *pb.Path) string { - b := &strings.Builder{} - for _, elm := range path.Elem { - b.WriteRune('/') - writeSafeString(b, elm.Name, '/') - if len(elm.Key) > 0 { - // Sort the keys so that they print in a conistent - // order. We don't have the YANG AST information, so the - // best we can do is sort them alphabetically. - keys := make([]string, 0, len(elm.Key)) - for k := range elm.Key { - keys = append(keys, k) - } - sort.Strings(keys) - for _, k := range keys { - b.WriteRune('[') - b.WriteString(k) - b.WriteRune('=') - writeSafeString(b, elm.Key[k], ']') - b.WriteRune(']') - } - } - } - return b.String() -} - -// strPathV03 handles the v0.3 gnmi and earlier path.Element member. -func strPathV03(path *pb.Path) string { - return "/" + strings.Join(path.Element, "/") -} - -// upgradePath modernizes a Path by translating the contents of the Element field to Elem -func upgradePath(path *pb.Path) *pb.Path { - if len(path.Elem) == 0 { - var elems []*pb.PathElem - for _, element := range path.Element { - n, keys, _ := parseElement(element) - elems = append(elems, &pb.PathElem{Name: n, Key: keys}) - } - path.Elem = elems - path.Element = nil - } - return path -} - -// JoinPaths joins multiple gnmi paths and returns a string representation -func JoinPaths(paths ...*pb.Path) *pb.Path { - var elems []*pb.PathElem - for _, path := range paths { - path = upgradePath(path) - elems = append(elems, path.Elem...) - } - return &pb.Path{Elem: elems} -} - -func writeSafeString(b *strings.Builder, s string, esc rune) { - for _, c := range s { - if c == esc || c == '\\' { - b.WriteRune('\\') - } - b.WriteRune(c) - } -} - -// ParseGNMIElements builds up a gnmi path, from user-supplied text -func ParseGNMIElements(elms []string) (*pb.Path, error) { - var parsed []*pb.PathElem - for _, e := range elms { - n, keys, err := parseElement(e) - if err != nil { - return nil, err - } - parsed = append(parsed, &pb.PathElem{Name: n, Key: keys}) - } - return &pb.Path{ - Element: elms, // Backwards compatibility with pre-v0.4 gnmi - Elem: parsed, - }, nil -} - -// parseElement parses a path element, according to the gNMI specification. See -// https://github.com/openconfig/reference/blame/master/rpc/gnmi/gnmi-path-conventions.md -// -// It returns the first string (the current element name), and an optional map of key name -// value pairs. -func parseElement(pathElement string) (string, map[string]string, error) { - // First check if there are any keys, i.e. do we have at least one '[' in the element - name, keyStart := findUnescaped(pathElement, '[') - if keyStart < 0 { - return name, nil, nil - } - - // Error if there is no element name or if the "[" is at the beginning of the path element - if len(name) == 0 { - return "", nil, fmt.Errorf("failed to find element name in %q", pathElement) - } - - // Look at the keys now. - keys := make(map[string]string) - keyPart := pathElement[keyStart:] - for keyPart != "" { - k, v, nextKey, err := parseKey(keyPart) - if err != nil { - return "", nil, err - } - keys[k] = v - keyPart = nextKey - } - return name, keys, nil -} - -// parseKey returns the key name, key value and the remaining string to be parsed, -func parseKey(s string) (string, string, string, error) { - if s[0] != '[' { - return "", "", "", fmt.Errorf("failed to find opening '[' in %q", s) - } - k, iEq := findUnescaped(s[1:], '=') - if iEq < 0 { - return "", "", "", fmt.Errorf("failed to find '=' in %q", s) - } - if k == "" { - return "", "", "", fmt.Errorf("failed to find key name in %q", s) - } - - rhs := s[1+iEq+1:] - v, iClosBr := findUnescaped(rhs, ']') - if iClosBr < 0 { - return "", "", "", fmt.Errorf("failed to find ']' in %q", s) - } - if v == "" { - return "", "", "", fmt.Errorf("failed to find key value in %q", s) - } - - next := rhs[iClosBr+1:] - return k, v, next, nil -} - -// findUnescaped will return the index of the first unescaped match of 'find', and the unescaped -// string leading up to it. -func findUnescaped(s string, find byte) (string, int) { - // Take a fast track if there are no escape sequences - if strings.IndexByte(s, '\\') == -1 { - i := strings.IndexByte(s, find) - if i < 0 { - return s, -1 - } - return s[:i], i - } - - // Find the first match, taking care of escaped chars. - var b strings.Builder - var i int - len := len(s) - for i = 0; i < len; { - ch := s[i] - if ch == find { - return b.String(), i - } else if ch == '\\' && i < len-1 { - i++ - ch = s[i] - } - b.WriteByte(ch) - i++ - } - return b.String(), -1 -} diff --git a/forks/goarista/gnmi/path_test.go b/forks/goarista/gnmi/path_test.go deleted file mode 100644 index 27318b65c..000000000 --- a/forks/goarista/gnmi/path_test.go +++ /dev/null @@ -1,308 +0,0 @@ -// Copyright (c) 2017 Arista Networks, Inc. -// Use of this source code is governed by the Apache License 2.0 -// that can be found in the COPYING file. - -package gnmi - -import ( - "fmt" - "testing" - - "github.com/aristanetworks/goarista/test" - - pb "github.com/openconfig/gnmi/proto/gnmi" -) - -func p(s ...string) []string { - return s -} - -func TestSplitPath(t *testing.T) { - for i, tc := range []struct { - in string - exp []string - }{{ - in: "/foo/bar", - exp: p("foo", "bar"), - }, { - in: "/foo/bar/", - exp: p("foo", "bar"), - }, { - in: "//foo//bar//", - exp: p("", "foo", "", "bar", ""), - }, { - in: "/foo[name=///]/bar", - exp: p("foo[name=///]", "bar"), - }, { - in: `/foo[name=[\\\]/]/bar`, - exp: p(`foo[name=[\\\]/]`, "bar"), - }, { - in: `/foo[name=[\\]/bar`, - exp: p(`foo[name=[\\]`, "bar"), - }, { - in: "/foo[a=1][b=2]/bar", - exp: p("foo[a=1][b=2]", "bar"), - }, { - in: "/foo[a=1\\]2][b=2]/bar", - exp: p("foo[a=1\\]2][b=2]", "bar"), - }, { - in: "/foo[a=1][b=2]/bar\\baz", - exp: p("foo[a=1][b=2]", "bar\\baz"), - }} { - got := SplitPath(tc.in) - if !test.DeepEqual(tc.exp, got) { - t.Errorf("[%d] unexpect split for %q. Expected: %v, Got: %v", - i, tc.in, tc.exp, got) - } - } -} - -func TestStrPath(t *testing.T) { - for i, tc := range []struct { - path string - }{{ - path: "/", - }, { - path: "/foo/bar", - }, { - path: "/foo[name=a]/bar", - }, { - path: "/foo[a=1][b=2]/bar", - }, { - path: "/foo[a=1\\]2][b=2]/bar", - }, { - path: "/foo[a=1][b=2]/bar\\/baz", - }} { - sElms := SplitPath(tc.path) - pbPath, err := ParseGNMIElements(sElms) - if err != nil { - t.Errorf("failed to parse %s: %s", sElms, err) - } - s := StrPath(pbPath) - if !test.DeepEqual(tc.path, s) { - t.Errorf("[%d] want %s, got %s", i, tc.path, s) - } - } -} - -func TestStrPathBackwardsCompat(t *testing.T) { - for i, tc := range []struct { - path *pb.Path - str string - }{{ - path: &pb.Path{ - Element: p("foo[a=1][b=2]", "bar"), - }, - str: "/foo[a=1][b=2]/bar", - }} { - got := StrPath(tc.path) - if got != tc.str { - t.Errorf("[%d] want %q, got %q", i, tc.str, got) - } - } -} - -func TestParseElement(t *testing.T) { - // test cases - cases := []struct { - // name is the name of the test useful if you want to run a single test - // from the command line -run TestParseElement/<name> - name string - // in is the path element to be parsed - in string - // fieldName is field name (YANG node name) expected to be parsed from the path element. - // Normally this is simply the path element, or if the path element contains keys this is - // the text before the first [ - fieldName string - // keys is a map of the expected key value pairs from within the []s in the - // `path element. - // - // For example prefix[ip-prefix=10.0.0.0/24][masklength-range=26..28] - // fieldName would be "prefix" - // keys would be {"ip-prefix": "10.0.0.0/24", "masklength-range": "26..28"} - keys map[string]string - // expectedError is the exact error we expect. - expectedError error - }{{ - name: "no_elms", - in: "hello", - fieldName: "hello", - }, { - name: "single_open", - in: "[", - expectedError: fmt.Errorf("failed to find element name in %q", "["), - }, { - name: "no_equal_no_close", - in: "hello[there", - expectedError: fmt.Errorf("failed to find '=' in %q", "[there"), - }, { - name: "no_equals", - in: "hello[there]", - expectedError: fmt.Errorf("failed to find '=' in %q", "[there]"), - }, { - name: "no_left_side", - in: "hello[=there]", - expectedError: fmt.Errorf("failed to find key name in %q", "[=there]"), - }, { - name: "no_right_side", - in: "hello[there=]", - expectedError: fmt.Errorf("failed to find key value in %q", "[there=]"), - }, { - name: "hanging_escape", - in: "hello[there\\", - expectedError: fmt.Errorf("failed to find '=' in %q", "[there\\"), - }, { - name: "single_name_value", - in: "hello[there=where]", - fieldName: "hello", - keys: map[string]string{"there": "where"}, - }, { - name: "single_value_with=", - in: "hello[there=whe=r=e]", - fieldName: "hello", - keys: map[string]string{"there": "whe=r=e"}, - }, { - name: "single_value_with=_and_escaped_]", - in: `hello[there=whe=\]r=e]`, - fieldName: "hello", - keys: map[string]string{"there": `whe=]r=e`}, - }, { - name: "single_value_with[", - in: "hello[there=w[[here]", - fieldName: "hello", - keys: map[string]string{"there": "w[[here"}, - }, { - name: "value_single_open", - in: "hello[first=value][", - expectedError: fmt.Errorf("failed to find '=' in %q", "["), - }, { - name: "value_no_close", - in: "hello[there=where][somename", - expectedError: fmt.Errorf("failed to find '=' in %q", "[somename"), - }, { - name: "value_no_equals", - in: "hello[there=where][somename]", - expectedError: fmt.Errorf("failed to find '=' in %q", "[somename]"), - }, { - name: "no_left_side", - in: "hello[there=where][=somevalue]", - expectedError: fmt.Errorf("failed to find key name in %q", "[=somevalue]"), - }, { - name: "no_right_side", - in: "hello[there=where][somename=]", - expectedError: fmt.Errorf("failed to find key value in %q", "[somename=]"), - }, { - name: "two_name_values", - in: "hello[there=where][somename=somevalue]", - fieldName: "hello", - keys: map[string]string{"there": "where", "somename": "somevalue"}, - }, { - name: "three_name_values", - in: "hello[there=where][somename=somevalue][anothername=value]", - fieldName: "hello", - keys: map[string]string{"there": "where", "somename": "somevalue", - "anothername": "value"}, - }, { - name: "aserisk_value", - in: "hello[there=*][somename=somevalue][anothername=value]", - fieldName: "hello", - keys: map[string]string{"there": "*", "somename": "somevalue", - "anothername": "value"}, - }} - - for _, tc := range cases { - t.Run(tc.name, func(t *testing.T) { - fieldName, keys, err := parseElement(tc.in) - if !test.DeepEqual(tc.expectedError, err) { - t.Fatalf("[%s] expected err %#v, got %#v", tc.name, tc.expectedError, err) - } - if !test.DeepEqual(tc.keys, keys) { - t.Fatalf("[%s] expected output %#v, got %#v", tc.name, tc.keys, keys) - } - if tc.fieldName != fieldName { - t.Fatalf("[%s] expected field name %s, got %s", tc.name, tc.fieldName, fieldName) - } - }) - } -} - -func strToPath(pathStr string) *pb.Path { - splitPath := SplitPath(pathStr) - path, _ := ParseGNMIElements(splitPath) - path.Element = nil - return path -} - -func strsToPaths(pathStrs []string) []*pb.Path { - var paths []*pb.Path - for _, splitPath := range SplitPaths(pathStrs) { - path, _ := ParseGNMIElements(splitPath) - path.Element = nil - paths = append(paths, path) - } - return paths -} - -func TestJoinPath(t *testing.T) { - cases := []struct { - paths []*pb.Path - exp string - }{{ - paths: strsToPaths([]string{"/foo/bar", "/baz/qux"}), - exp: "/foo/bar/baz/qux", - }, - { - paths: strsToPaths([]string{ - "/foo/bar[somekey=someval][otherkey=otherval]", "/baz/qux"}), - exp: "/foo/bar[otherkey=otherval][somekey=someval]/baz/qux", - }, - { - paths: strsToPaths([]string{ - "/foo/bar[somekey=someval][otherkey=otherval]", - "/baz/qux[somekey=someval][otherkey=otherval]"}), - exp: "/foo/bar[otherkey=otherval][somekey=someval]/" + - "baz/qux[otherkey=otherval][somekey=someval]", - }, - { - paths: []*pb.Path{ - {Element: []string{"foo", "bar[somekey=someval][otherkey=otherval]"}}, - {Element: []string{"baz", "qux[somekey=someval][otherkey=otherval]"}}}, - exp: "/foo/bar[somekey=someval][otherkey=otherval]/" + - "baz/qux[somekey=someval][otherkey=otherval]", - }, - } - - for _, tc := range cases { - got := JoinPaths(tc.paths...) - exp := strToPath(tc.exp) - exp.Element = nil - if !test.DeepEqual(got, exp) { - t.Fatalf("ERROR!\n Got: %s,\n Want %s\n", got, exp) - } - } -} - -func BenchmarkPathElementToSigleElementName(b *testing.B) { - for i := 0; i < b.N; i++ { - _, _, _ = parseElement("hello") - } -} - -func BenchmarkPathElementTwoKeys(b *testing.B) { - for i := 0; i < b.N; i++ { - _, _, _ = parseElement("hello[hello=world][bye=moon]") - } -} - -func BenchmarkPathElementBadKeys(b *testing.B) { - for i := 0; i < b.N; i++ { - _, _, _ = parseElement("hello[hello=world][byemoon]") - } -} - -func BenchmarkPathElementMaxKeys(b *testing.B) { - for i := 0; i < b.N; i++ { - _, _, _ = parseElement("hello[name=firstName][name=secondName][name=thirdName]" + - "[name=fourthName][name=fifthName][name=sixthName]") - } -} diff --git a/forks/goarista/openconfig/client/client.go b/forks/goarista/openconfig/client/client.go deleted file mode 100644 index 1d7d1992f..000000000 --- a/forks/goarista/openconfig/client/client.go +++ /dev/null @@ -1,132 +0,0 @@ -// Copyright (c) 2016 Arista Networks, Inc. -// Use of this source code is governed by the Apache License 2.0 -// that can be found in the COPYING file. - -// Package ciena provides helper functions for OpenConfig CLI tools. -package client - -import ( - "io" - "strings" - "sync" - - "github.com/golang/glog" - "github.com/golang/protobuf/proto" - "github.com/openconfig/reference/rpc/openconfig" - "golang.org/x/net/context" - "google.golang.org/grpc" - "google.golang.org/grpc/metadata" -) - -const defaultPort = "6030" - -// PublishFunc is the method to publish responses -type PublishFunc func(addr string, message proto.Message) - -// Client is a connected gRPC ciena -type Client struct { - client openconfig.OpenConfigClient - ctx context.Context - device string -} - -// New creates a new gRPC ciena and connects it -func New(username, password, addr string, opts []grpc.DialOption) *Client { - device := addr - if !strings.ContainsRune(addr, ':') { - addr += ":" + defaultPort - } - // Make sure we don't move past the grpc.Dial() call until we actually - // established an HTTP/2 connection successfully. - opts = append(opts, grpc.WithBlock()) - conn, err := grpc.Dial(addr, opts...) - if err != nil { - glog.Fatalf("Failed to dial: %s", err) - } - glog.Infof("Connected to %s", addr) - client := openconfig.NewOpenConfigClient(conn) - - ctx := context.Background() - if username != "" { - ctx = metadata.NewOutgoingContext(ctx, metadata.Pairs( - "username", username, - "password", password)) - } - return &Client{ - client: client, - device: device, - ctx: ctx, - } -} - -// Get sends a get request and returns the responses -func (c *Client) Get(path string) []*openconfig.Notification { - req := &openconfig.GetRequest{ - Path: []*openconfig.Path{ - { - Element: strings.Split(path, "/"), - }, - }, - } - response, err := c.client.Get(c.ctx, req) - if err != nil { - glog.Fatalf("Get failed: %s", err) - } - return response.Notification -} - -// Subscribe sends subscriptions, and consumes responses. -// The given publish function is used to publish SubscribeResponses received -// for the given subscriptions, when connected to the given host, with the -// given user/pass pair, or the ciena-side cert specified in the gRPC opts. -// This function does not normally return so it should probably be run in its -// own goroutine. When this function returns, the given WaitGroup is marked -// as done. -func (c *Client) Subscribe(wg *sync.WaitGroup, subscriptions []string, - publish PublishFunc) { - defer wg.Done() - stream, err := c.client.Subscribe(c.ctx) - if err != nil { - glog.Fatalf("Subscribe failed: %s", err) - } - defer stream.CloseSend() - - for _, path := range subscriptions { - sub := &openconfig.SubscribeRequest{ - Request: &openconfig.SubscribeRequest_Subscribe{ - Subscribe: &openconfig.SubscriptionList{ - Subscription: []*openconfig.Subscription{ - { - Path: &openconfig.Path{Element: strings.Split(path, "/")}, - }, - }, - }, - }, - } - - glog.Infof("Sending subscribe request: %s", sub) - err = stream.Send(sub) - if err != nil { - glog.Fatalf("Failed to subscribe: %s", err) - } - } - - for { - resp, err := stream.Recv() - if err != nil { - if err != io.EOF { - glog.Fatalf("Error received from the server: %s", err) - } - return - } - switch resp := resp.Response.(type) { - case *openconfig.SubscribeResponse_SyncResponse: - if !resp.SyncResponse { - panic("initial sync failed," + - " check that you're using a ciena compatible with the server") - } - } - glog.V(3).Info(resp) - publish(c.device, resp) - } -} diff --git a/forks/goarista/openconfig/client/flags.go b/forks/goarista/openconfig/client/flags.go deleted file mode 100644 index fb91bba37..000000000 --- a/forks/goarista/openconfig/client/flags.go +++ /dev/null @@ -1,113 +0,0 @@ -// Copyright (c) 2016 Arista Networks, Inc. -// Use of this source code is governed by the Apache License 2.0 -// that can be found in the COPYING file. - -package client - -import ( - "crypto/tls" - "crypto/x509" - "flag" - "io/ioutil" - "os" - "strings" - - "github.com/golang/glog" - "google.golang.org/grpc" - "google.golang.org/grpc/credentials" -) - -const ( - // HostnameArg is the value to be replaced by the actual hostname - HostnameArg = "HOSTNAME" -) - -// ParseHostnames parses a comma-separated list of names and replaces HOSTNAME with the current -// hostname in it -func ParseHostnames(list string) ([]string, error) { - items := strings.Split(list, ",") - hostname, err := os.Hostname() - if err != nil { - return nil, err - } - names := make([]string, len(items)) - for i, name := range items { - if name == HostnameArg { - name = hostname - } - names[i] = name - } - return names, nil -} - -// ParseFlags registers some additional common flags, -// parses the flags, and returns the resulting gRPC options, -// and other settings to connect to the gRPC interface. -func ParseFlags() (username string, password string, subscriptions, addrs []string, - opts []grpc.DialOption) { - - var ( - addrsFlag = flag.String("addrs", "localhost:6030", - "Comma-separated list of addresses of OpenConfig gRPC servers. The address 'HOSTNAME' "+ - "is replaced by the current hostname.") - - caFileFlag = flag.String("cafile", "", - "Path to server TLS certificate file") - - certFileFlag = flag.String("certfile", "", - "Path to ciena TLS certificate file") - - keyFileFlag = flag.String("keyfile", "", - "Path to ciena TLS private key file") - - passwordFlag = flag.String("password", "", - "Password to authenticate with") - - subscribeFlag = flag.String("subscribe", "", - "Comma-separated list of paths to subscribe to upon connecting to the server") - - usernameFlag = flag.String("username", "", - "Username to authenticate with") - - tlsFlag = flag.Bool("tls", false, - "Enable TLS") - ) - - flag.Parse() - if *tlsFlag || *caFileFlag != "" || *certFileFlag != "" { - config := &tls.Config{} - if *caFileFlag != "" { - b, err := ioutil.ReadFile(*caFileFlag) - if err != nil { - glog.Fatal(err) - } - cp := x509.NewCertPool() - if !cp.AppendCertsFromPEM(b) { - glog.Fatalf("credentials: failed to append certificates") - } - config.RootCAs = cp - } else { - config.InsecureSkipVerify = true - } - if *certFileFlag != "" { - if *keyFileFlag == "" { - glog.Fatalf("Please provide both -certfile and -keyfile") - } - cert, err := tls.LoadX509KeyPair(*certFileFlag, *keyFileFlag) - if err != nil { - glog.Fatal(err) - } - config.Certificates = []tls.Certificate{cert} - } - opts = append(opts, grpc.WithTransportCredentials(credentials.NewTLS(config))) - } else { - opts = append(opts, grpc.WithInsecure()) - } - var err error - addrs, err = ParseHostnames(*addrsFlag) - if err != nil { - glog.Fatal(err) - } - subscriptions = strings.Split(*subscribeFlag, ",") - return *usernameFlag, *passwordFlag, subscriptions, addrs, opts -} diff --git a/forks/goarista/openconfig/json.go b/forks/goarista/openconfig/json.go deleted file mode 100644 index 8eba88bad..000000000 --- a/forks/goarista/openconfig/json.go +++ /dev/null @@ -1,237 +0,0 @@ -// Copyright (c) 2016 Arista Networks, Inc. -// Use of this source code is governed by the Apache License 2.0 -// that can be found in the COPYING file. - -package openconfig - -import ( - "bytes" - "encoding/json" - "fmt" - "strings" - - "github.com/openconfig/reference/rpc/openconfig" -) - -// joinPath builds a string out of an Element -func joinPath(path *openconfig.Path) string { - if path == nil { - return "" - } - return strings.Join(path.Element, "/") -} - -func convertUpdate(update *openconfig.Update) (interface{}, error) { - switch update.Value.Type { - case openconfig.Type_JSON: - var value interface{} - decoder := json.NewDecoder(bytes.NewReader(update.Value.Value)) - decoder.UseNumber() - if err := decoder.Decode(&value); err != nil { - return nil, fmt.Errorf("Malformed JSON update %q in %s", - update.Value.Value, update) - } - return value, nil - case openconfig.Type_BYTES: - return update.Value.Value, nil - default: - return nil, - fmt.Errorf("Unhandled type of value %v in %s", update.Value.Type, update) - } -} - -// NotificationToJSON converts a Notification into a JSON string -func NotificationToJSON(notif *openconfig.Notification) (string, error) { - m := make(map[string]interface{}, 1) - m["timestamp"] = notif.Timestamp - m["path"] = "/" + joinPath(notif.Prefix) - if len(notif.Update) != 0 { - updates := make(map[string]interface{}, len(notif.Update)) - var err error - for _, update := range notif.Update { - updates[joinPath(update.Path)], err = convertUpdate(update) - if err != nil { - return "", err - } - } - m["updates"] = updates - } - if len(notif.Delete) != 0 { - deletes := make([]string, len(notif.Delete)) - for i, del := range notif.Delete { - deletes[i] = joinPath(del) - } - m["deletes"] = deletes - } - m = map[string]interface{}{"notification": m} - js, err := json.MarshalIndent(m, "", " ") - if err != nil { - return "", err - } - return string(js), nil -} - -// SubscribeResponseToJSON converts a SubscribeResponse into a JSON string -func SubscribeResponseToJSON(resp *openconfig.SubscribeResponse) (string, error) { - m := make(map[string]interface{}, 1) - var err error - switch resp := resp.Response.(type) { - case *openconfig.SubscribeResponse_Update: - return NotificationToJSON(resp.Update) - case *openconfig.SubscribeResponse_Heartbeat: - m["heartbeat"] = resp.Heartbeat.Interval - case *openconfig.SubscribeResponse_SyncResponse: - m["syncResponse"] = resp.SyncResponse - default: - return "", fmt.Errorf("Unknown type of response: %T: %s", resp, resp) - } - js, err := json.MarshalIndent(m, "", " ") - if err != nil { - return "", err - } - return string(js), nil -} - -// EscapeFunc is the escaping method for attribute names -type EscapeFunc func(k string) string - -// escapeValue looks for maps in an interface and escapes their keys -func escapeValue(value interface{}, escape EscapeFunc) interface{} { - valueMap, ok := value.(map[string]interface{}) - if !ok { - return value - } - escapedMap := make(map[string]interface{}, len(valueMap)) - for k, v := range valueMap { - escapedKey := escape(k) - escapedMap[escapedKey] = escapeValue(v, escape) - } - return escapedMap -} - -// addPathToMap creates a map[string]interface{} from a path. It returns the node in -// the map corresponding to the last element in the path -func addPathToMap(root map[string]interface{}, path []string, escape EscapeFunc) ( - map[string]interface{}, error) { - parent := root - for _, element := range path { - k := escape(element) - node, found := parent[k] - if !found { - node = map[string]interface{}{} - parent[k] = node - } - var ok bool - parent, ok = node.(map[string]interface{}) - if !ok { - return nil, fmt.Errorf( - "Node %s is of type %T (expected map[string]interface traversing %q)", - element, node, path) - } - } - return parent, nil -} - -// NotificationToMap maps a Notification into a nested map of entities -func NotificationToMap(addr string, notification *openconfig.Notification, - escape EscapeFunc) (map[string]interface{}, error) { - if escape == nil { - escape = func(name string) string { - return name - } - } - prefix := notification.GetPrefix() - - // Convert deletes - var deletes map[string]interface{} - notificationDeletes := notification.GetDelete() - if notificationDeletes != nil { - deletes = make(map[string]interface{}) - node := deletes - if prefix != nil { - var err error - node, err = addPathToMap(node, prefix.Element, escape) - if err != nil { - return nil, err - } - } - for _, delete := range notificationDeletes { - _, err := addPathToMap(node, delete.Element, escape) - if err != nil { - return nil, err - } - } - } - - // Convert updates - var updates map[string]interface{} - notificationUpdates := notification.GetUpdate() - if notificationUpdates != nil { - updates = make(map[string]interface{}) - node := updates - if prefix != nil { - var err error - node, err = addPathToMap(node, prefix.Element, escape) - if err != nil { - return nil, err - } - } - for _, update := range notificationUpdates { - updateNode := node - path := update.GetPath() - elementLen := len(path.Element) - - // Convert all elements before the leaf - if elementLen > 1 { - parentElements := path.Element[:elementLen-1] - var err error - updateNode, err = addPathToMap(updateNode, parentElements, escape) - if err != nil { - return nil, err - } - } - - // Convert the value in the leaf - value := update.GetValue() - var unmarshaledValue interface{} - switch value.Type { - case openconfig.Type_JSON: - if err := json.Unmarshal(value.Value, &unmarshaledValue); err != nil { - return nil, err - } - case openconfig.Type_BYTES: - unmarshaledValue = update.Value.Value - default: - return nil, fmt.Errorf("Unexpected value type %s for path %v", - value.Type, path) - } - updateNode[escape(path.Element[elementLen-1])] = escapeValue( - unmarshaledValue, escape) - } - } - - // Build the complete map to return - root := map[string]interface{}{ - "timestamp": notification.Timestamp, - } - if addr != "" { - root["dataset"] = addr - } - if deletes != nil { - root["delete"] = deletes - } - if updates != nil { - root["update"] = updates - } - return root, nil -} - -// NotificationToJSONDocument maps a Notification into a single JSON document -func NotificationToJSONDocument(addr string, notification *openconfig.Notification, - escape EscapeFunc) ([]byte, error) { - m, err := NotificationToMap(addr, notification, escape) - if err != nil { - return nil, err - } - return json.Marshal(m) -} diff --git a/forks/goarista/openconfig/json_test.go b/forks/goarista/openconfig/json_test.go deleted file mode 100644 index 1dfc41d57..000000000 --- a/forks/goarista/openconfig/json_test.go +++ /dev/null @@ -1,143 +0,0 @@ -// Copyright (c) 2016 Arista Networks, Inc. -// Use of this source code is governed by the Apache License 2.0 -// that can be found in the COPYING file. - -package openconfig - -import ( - "encoding/json" - "testing" - - "github.com/aristanetworks/goarista/test" - - "github.com/openconfig/reference/rpc/openconfig" -) - -func TestNotificationToMap(t *testing.T) { - value := map[string]interface{}{ - "239.255.255.250_0.0.0.0": map[string]interface{}{ - "creationTime": 4.567969230573434e+06, - }, - } - valueJSON, err := json.Marshal(value) - if err != nil { - t.Fatal(err) - } - tests := []struct { - notification openconfig.Notification - json map[string]interface{} - }{{ - notification: openconfig.Notification{ - Prefix: &openconfig.Path{ - Element: []string{ - "foo", - }, - }, - Update: []*openconfig.Update{ - { - Path: &openconfig.Path{ - Element: []string{ - "route1", - }, - }, - Value: &openconfig.Value{ - Value: valueJSON, - }, - }, { - Path: &openconfig.Path{ - Element: []string{ - "route2", - }, - }, - Value: &openconfig.Value{ - Value: valueJSON, - }, - }}, - }, - json: map[string]interface{}{ - "timestamp": int64(0), - "dataset": "cairo", - "update": map[string]interface{}{ - "foo": map[string]interface{}{ - "route1": map[string]interface{}{ - "239.255.255.250_0.0.0.0": map[string]interface{}{ - "creationTime": 4.567969230573434e+06, - }, - }, - "route2": map[string]interface{}{ - "239.255.255.250_0.0.0.0": map[string]interface{}{ - "creationTime": 4.567969230573434e+06, - }, - }, - }, - }, - }, - }, { - notification: openconfig.Notification{ - Prefix: &openconfig.Path{ - Element: []string{ - "foo", "bar", - }, - }, - Delete: []*openconfig.Path{ - { - Element: []string{ - "route", "237.255.255.250_0.0.0.0", - }}, - { - Element: []string{ - "route", "238.255.255.250_0.0.0.0", - }, - }, - }, - Update: []*openconfig.Update{{ - Path: &openconfig.Path{ - Element: []string{ - "route", - }, - }, - Value: &openconfig.Value{ - Value: valueJSON, - }, - }}, - }, - json: map[string]interface{}{ - "timestamp": int64(0), - "dataset": "cairo", - "delete": map[string]interface{}{ - "foo": map[string]interface{}{ - "bar": map[string]interface{}{ - "route": map[string]interface{}{ - "237.255.255.250_0.0.0.0": map[string]interface{}{}, - "238.255.255.250_0.0.0.0": map[string]interface{}{}, - }, - }, - }, - }, - "update": map[string]interface{}{ - "foo": map[string]interface{}{ - "bar": map[string]interface{}{ - "route": map[string]interface{}{ - "239.255.255.250_0.0.0.0": map[string]interface{}{ - "creationTime": 4.567969230573434e+06, - }, - }, - }, - }, - }, - }, - }} - for _, tcase := range tests { - actual, err := NotificationToMap("cairo", &tcase.notification, nil) - if err != nil { - t.Fatal(err) - } - diff := test.Diff(tcase.json, actual) - if len(diff) > 0 { - expectedJSON, _ := json.Marshal(tcase.json) - actualJSON, _ := json.Marshal(actual) - t.Fatalf("Unexpected diff: %s\nExpected:\n%s\nGot:\n%s\n)", diff, expectedJSON, - actualJSON) - } - } -} diff --git a/go.mod b/go.mod index cec3a1d5e..dd79e0b9f 100644 --- a/go.mod +++ b/go.mod @@ -4,24 +4,19 @@ go 1.14 require ( code.fbi.h-da.de/cocsn/swagger/apis v0.0.0-20200924152423-61030cab7b88 - code.fbi.h-da.de/cocsn/yang-models v0.0.3 - github.com/aristanetworks/goarista v0.0.0-20201120222254-94a892eb0c6a + code.fbi.h-da.de/cocsn/yang-modules/generated/tapi v0.0.0-20201116134549-765aa1790752 + github.com/BurntSushi/toml v0.3.1 github.com/gdamore/tcell/v2 v2.0.1-0.20201017141208-acf90d56d591 github.com/go-openapi/runtime v0.19.22 github.com/go-openapi/strfmt v0.19.5 - github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b // indirect github.com/golang/protobuf v1.4.2 - github.com/google/uuid v1.1.2 github.com/neo4j/neo4j-go-driver v1.8.3 github.com/onsi/ginkgo v1.13.0 // indirect - github.com/openconfig/gnmi v0.0.0-20200617225440-d2b4e6a45802 - github.com/openconfig/reference v0.0.0-20190727015836-8dfd928c9696 // indirect - github.com/openconfig/ygot v0.8.11 + github.com/openconfig/ygot v0.8.7 github.com/rivo/tview v0.0.0-20201018122409-d551c850a743 - github.com/sirupsen/logrus v1.4.2 - github.com/spf13/viper v1.7.1 github.com/tidwall/gjson v1.6.3 + github.com/sirupsen/logrus v1.4.2 golang.org/x/net v0.0.0-20200904194848-62affa334b73 // indirect google.golang.org/grpc v1.29.1 - google.golang.org/protobuf v1.25.0 + google.golang.org/protobuf v1.23.0 ) diff --git a/go.sum b/go.sum index ebb6a9edb..6b90cf7a5 100644 --- a/go.sum +++ b/go.sum @@ -1,113 +1,46 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= -cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= -cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= -cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= -cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= -cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= -cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= -cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk= -cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= -cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= code.fbi.h-da.de/cocsn/swagger/apis v0.0.0-20200924152423-61030cab7b88 h1:cNqY3WEh+CX8+esxIwWU/uD7hRC5mPvuJmXzB07OeuA= code.fbi.h-da.de/cocsn/swagger/apis v0.0.0-20200924152423-61030cab7b88/go.mod h1:3jDZAOmepPl3kiukNGvPFkJEzgGczgrC3zJ2jcqVFSs= -code.fbi.h-da.de/cocsn/yang-models v0.0.3 h1:VTVHDTyJiC2TeTAZyxJ1ZFqRwo6H7UeY7PXfp9GXYEY= -code.fbi.h-da.de/cocsn/yang-models v0.0.3/go.mod h1:X40pn/xQ1lTNbFFN9QFK99oSNaeN/Rg3MSpdhWc3IS8= -dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= +code.fbi.h-da.de/cocsn/yang-modules/generated/tapi v0.0.0-20201116134549-765aa1790752 h1:hCeie9cCBt0gyETD0EAINuWqpEokf0ulP1Rv9F+rXB0= +code.fbi.h-da.de/cocsn/yang-modules/generated/tapi v0.0.0-20201116134549-765aa1790752/go.mod h1:EhCu5gVeMKHpjwoV5g5eycc7WcfU98jkPswLDRHQX5w= github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/PuerkitoBio/purell v1.1.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= github.com/PuerkitoBio/purell v1.1.1 h1:WEQqlqaGbrPkxLJWfBwQmfEAE1Z7ONdDLqrN38tNFfI= github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= -github.com/Shopify/sarama v1.26.1 h1:3jnfWKD7gVwbB1KSy/lE0szA9duPuSFLViK0o/d3DgA= -github.com/Shopify/sarama v1.26.1/go.mod h1:NbSGBSSndYaIhRcBtY9V0U7AyH+x71bG668AuWys/yU= -github.com/Shopify/toxiproxy v2.1.4+incompatible h1:TKdv8HiTLgE5wdJuEML90aBgNWsokNbMijUGhmcoBJc= -github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= github.com/agnivade/levenshtein v1.0.1/go.mod h1:CURSv5d9Uaml+FovSIICkLbAUZ9S4RqaHDIsdSBg7lM= -github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= -github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= -github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= -github.com/aristanetworks/fsnotify v1.4.2 h1:it2ydpY6k0aXB7qjb4vGhOYOL6YDC/sr8vhqwokFQwQ= -github.com/aristanetworks/fsnotify v1.4.2/go.mod h1:D/rtu7LpjYM8tRJphJ0hUBYpjai8SfX+aSNsWDTq/Ks= -github.com/aristanetworks/glog v0.0.0-20191112221043-67e8567f59f3 h1:Bmjk+DjIi3tTAU0wxGaFbfjGUqlxxSXARq9A96Kgoos= -github.com/aristanetworks/glog v0.0.0-20191112221043-67e8567f59f3/go.mod h1:KASm+qXFKs/xjSoWn30NrWBBvdTTQq+UjkhjEJHfSFA= -github.com/aristanetworks/goarista v0.0.0-20201120222254-94a892eb0c6a h1:R7ghEBfKIqu/SDpGHS9Nj1fWPxkvxh6Lv4Wq6eS95G4= -github.com/aristanetworks/goarista v0.0.0-20201120222254-94a892eb0c6a/go.mod h1:Q4lsGfepQE823ePrSNr2CjCz1oeeMECJ6k1yBVujrZg= -github.com/aristanetworks/splunk-hec-go v0.3.3 h1:O7zlcm4ve7JvqTyEK3vSBh1LngLezraqcxv8Ya6tQFY= -github.com/aristanetworks/splunk-hec-go v0.3.3/go.mod h1:1VHO9r17b0K7WmOlLb9nTk/2YanvOEnLMUgsFrxBROc= -github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= -github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= -github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/asaskevich/govalidator v0.0.0-20180720115003-f9ffefc3facf/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= github.com/asaskevich/govalidator v0.0.0-20200108200545-475eaeb16496/go.mod h1:oGkLhpf+kjZl6xBf758TQhh5XrAeiJv/7FRz/2spLIg= github.com/asaskevich/govalidator v0.0.0-20200428143746-21a406dcc535 h1:4daAzAu0S6Vi7/lbWECcX0j45yZReDZ56BQsrVBOEEY= github.com/asaskevich/govalidator v0.0.0-20200428143746-21a406dcc535/go.mod h1:oGkLhpf+kjZl6xBf758TQhh5XrAeiJv/7FRz/2spLIg= -github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= -github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= -github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= -github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= -github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= -github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84= github.com/cenkalti/backoff/v4 v4.0.0/go.mod h1:eEew/i+1Q6OrCDZh3WiXYv3+nJwBASZ8Bog/87DQnVg= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= -github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY= -github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= -github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= -github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= -github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= github.com/docker/go-units v0.3.3/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= -github.com/eapache/go-resiliency v1.2.0 h1:v7g92e/KSN71Rq7vSThKaWIq68fL4YHvWyiUKorFR1Q= -github.com/eapache/go-resiliency v1.2.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= -github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21 h1:YEetp8/yCZMuEPMUDHG0CW/brkkEp8mzqk2+ODEitlw= -github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= -github.com/eapache/queue v1.1.0 h1:YOEu7KNc61ntiQlcEeUIoDTJ2o8mQznoNvUhiigpIqc= -github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= -github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= -github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= -github.com/frankban/quicktest v1.7.2 h1:2QxQoC1TS09S7fhCPsrvqYdvP1H5M1P1ih5ABm3BTYk= -github.com/frankban/quicktest v1.7.2/go.mod h1:jaStnuzAqU1AJdCO0l53JDCJrVDKcS03DbaAcR7Ks/o= +github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= -github.com/garyburd/redigo v1.6.0 h1:0VruCpn7yAIIu7pWVClQC8wxCJEcG3nyzpMSHKi1PQc= -github.com/garyburd/redigo v1.6.0/go.mod h1:NR3MbYisc3/PwhQ00EMzDiPmrwpPxAn5GI05/YaO1SY= github.com/gdamore/encoding v1.0.0 h1:+7OoQ1Bc6eTm5niUzBa0Ctsh6JbMW6Ra+YNuAtDBdko= github.com/gdamore/encoding v1.0.0/go.mod h1:alR0ol34c49FCSBLjhosxzcPHQbf2trDkoo5dl+VrEg= github.com/gdamore/tcell/v2 v2.0.1-0.20201017141208-acf90d56d591 h1:0WWUDZ1oxq7NxVyGo8M3KI5jbkiwNAdZFFzAdC68up4= github.com/gdamore/tcell/v2 v2.0.1-0.20201017141208-acf90d56d591/go.mod h1:vSVL/GV5mCSlPC6thFP5kfOFdM9MGZcalipmpTxTgQA= -github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/globalsign/mgo v0.0.0-20180905125535-1ca0a4f7cbcb/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= -github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= -github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= -github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-openapi/analysis v0.0.0-20180825180245-b006789cd277/go.mod h1:k70tL6pCuVxPJOHXQ+wIac1FUrvNkHolPie/cLEU6hI= github.com/go-openapi/analysis v0.17.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= github.com/go-openapi/analysis v0.18.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= @@ -120,6 +53,7 @@ github.com/go-openapi/errors v0.17.0/go.mod h1:LcZQpmvG4wyF5j4IhA73wkLFQg+QJXOQH github.com/go-openapi/errors v0.18.0/go.mod h1:LcZQpmvG4wyF5j4IhA73wkLFQg+QJXOQHVjmcZxhka0= github.com/go-openapi/errors v0.19.2/go.mod h1:qX0BLWsyaKfvhluLejVpVNwNRdXZhEbTA4kxxpKBC94= github.com/go-openapi/errors v0.19.3/go.mod h1:qX0BLWsyaKfvhluLejVpVNwNRdXZhEbTA4kxxpKBC94= +github.com/go-openapi/errors v0.19.6 h1:xZMThgv5SQ7SMbWtKFkCf9bBdvR2iEyw9k3zGZONuys= github.com/go-openapi/errors v0.19.6/go.mod h1:cM//ZKUKyO06HSwqAelJ5NsEMMcpa6VpXe8DOa1Mi1M= github.com/go-openapi/errors v0.19.7 h1:Lcq+o0mSwCLKACMxZhreVHigB9ebghJ/lrmeaqASbjo= github.com/go-openapi/errors v0.19.7/go.mod h1:cM//ZKUKyO06HSwqAelJ5NsEMMcpa6VpXe8DOa1Mi1M= @@ -172,6 +106,7 @@ github.com/go-openapi/swag v0.19.9/go.mod h1:ao+8BpOPyKdpQz3AOJfbeEVpLmWAvlT1IfT github.com/go-openapi/validate v0.18.0/go.mod h1:Uh4HdOzKt19xGIGm1qHf/ofbX1YQ4Y+MYsct2VUrAJ4= github.com/go-openapi/validate v0.19.2/go.mod h1:1tRCw7m3jtI8eNWEEliiAqUIcBztB2KDnRCRMUi7GTA= github.com/go-openapi/validate v0.19.3/go.mod h1:90Vh6jjkTn+OT1Eefm0ZixWNFjhtOH7vS9k0lo6zwJo= +github.com/go-openapi/validate v0.19.10 h1:tG3SZ5DC5KF4cyt7nqLVcQXGj5A7mpaYkAcNPlDK+Yk= github.com/go-openapi/validate v0.19.10/go.mod h1:RKEZTUWDkxKQxN2jDT7ZnZi2bhZlbNMAuKvKB+IaGx8= github.com/go-openapi/validate v0.19.11 h1:8lCr0b9lNWKjVjW/hSZZvltUy+bULl7vbnCTsOzlhPo= github.com/go-openapi/validate v0.19.11/go.mod h1:Rzou8hA/CBw8donlS6WNEUQupNvUZ0waH08tGe6kAQ4= @@ -201,17 +136,11 @@ github.com/gobuffalo/packd v0.1.0/go.mod h1:M2Juc+hhDXf/PnmBANFCqx4DM3wRbgDvnVWe github.com/gobuffalo/packr/v2 v2.0.9/go.mod h1:emmyGweYTm6Kdper+iywB6YK5YzuKchGtJQZ0Odn4pQ= github.com/gobuffalo/packr/v2 v2.2.0/go.mod h1:CaAwI0GPIAv+5wKLtv8Afwl+Cm78K/I/VCm/3ptBN+0= github.com/gobuffalo/syncx v0.0.0-20190224160051-33c29581e754/go.mod h1:HhnNqWY95UYwwW3uSASeV7vtgYkT2t16hJgV3AEPUpw= -github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= -github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= @@ -222,92 +151,29 @@ github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvq github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= github.com/golang/protobuf v1.4.2 h1:+Z5KGCizgyZCbGh1KZqA0fcLLkwbsjIzS4aV2v7wJX0= github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/snappy v0.0.1 h1:Qgr9rKW7uDUkrbSmQeiDsGa8SjGyCOGtuasMWwvp2P4= github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.4.1 h1:/exdXoGamhu5ONeUJH0deniYLWYvQwW66yvlfiiKTu0= github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.0 h1:/QaMHBdZ26BB3SSst0Iwl10Epc+xhTquomWX0oZEB6w= -github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= -github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/protobuf v3.11.4+incompatible/go.mod h1:lUQ9D1ePzbH2PrIS7ob/bjm9HXyH5WHB0Akwh7URreM= -github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.1.2 h1:EVhdT+1Kseyi1/pUmXKaFxYsDNy9RQYkMWRH68J/W7Y= -github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= -github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= -github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8= -github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= -github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= -github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= -github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= -github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= -github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= -github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= -github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= -github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= -github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= -github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= -github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= -github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= -github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-uuid v1.0.2 h1:cfejS+Tpcp13yd5nYHWDI6qVCny6wyX2Mt5SGur2IGE= -github.com/hashicorp/go-uuid v1.0.2/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= -github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= -github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= -github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= -github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= -github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= -github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= +github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= -github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d h1:/WZQPMZNsjZ7IlCpsLGdQBINg5bxKQ1K1sh6awxLtkA= -github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= -github.com/jcmturner/gofork v1.0.0 h1:J7uCkflzTEhUZ64xqKnkDxq3kzc96ajM1Gli5ktUem8= -github.com/jcmturner/gofork v1.0.0/go.mod h1:MK8+TM0La+2rjBD4jE12Kj1pCCxK7d2LK/UM3ncEo0o= github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= -github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= -github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= -github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= -github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo= -github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= -github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/karrick/godirwalk v1.8.0/go.mod h1:H5KPZjojv4lE+QYImBI8xVtrBRgYrIVsaRPx4tDPEn4= github.com/karrick/godirwalk v1.10.3/go.mod h1:RoGL9dQei4vP9ilrpETWE8CLOZ1kiN0LhBygSwrAsHA= -github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= -github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.9.5/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= -github.com/klauspost/compress v1.9.8/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= -github.com/klauspost/compress v1.10.1 h1:a/QY0o9S6wCi0XhxaMX/QmusicNUqCqFugR6WKPOSoQ= -github.com/klauspost/compress v1.10.1/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= -github.com/klauspost/cpuid v1.2.3 h1:CCtW0xUnWGVINKvE/WWOYKdsPV6mawAtvQuSl8guwQs= -github.com/klauspost/cpuid v1.2.3/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= -github.com/klauspost/reedsolomon v1.9.3 h1:N/VzgeMfHmLc+KHMD1UL/tNkfXAt8FnUqlgXGIduwAY= -github.com/klauspost/reedsolomon v1.9.3/go.mod h1:CwCi+NUr9pqSVktrkN+Ondf06rkhYZ/pcNv7fu+8Un4= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/konsorten/go-windows-terminal-sequences v1.0.2 h1:DB17ag19krx9CFsz4o3enTrPXyIXCl+2iCXH/aMAp9s= github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pretty v0.2.0 h1:s5hAObm+yFO5uHYt5dYjxi2rXrsnmRpJx4OYvIWUaQs= -github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= @@ -317,8 +183,6 @@ github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0 github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= github.com/lucasb-eyer/go-colorful v1.0.3 h1:QIbQXiugsb+q10B+MI+7DI1oQLdmnep86tWFlaaUAac= github.com/lucasb-eyer/go-colorful v1.0.3/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= -github.com/magiconair/properties v1.8.1 h1:ZC2Vc7/ZFkGmsVC9KvOjumD+G5lXy2RtTKyzRKO2BQ4= -github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= @@ -327,135 +191,65 @@ github.com/mailru/easyjson v0.7.1 h1:mdxE1MF9o53iCb2Ghj1VfWvh7ZOwHpnVG/xwXrV90U8 github.com/mailru/easyjson v0.7.1/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs= github.com/markbates/oncer v0.0.0-20181203154359-bf2de49a0be2/go.mod h1:Ld9puTsIW75CHf65OeIOkyKbteujpZVXDpWK6YGZbxE= github.com/markbates/safe v1.0.1/go.mod h1:nAqgmRi7cY2nqMc92/bSEeQA+R4OheNU2T1kNSCBdG0= -github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-runewidth v0.0.7/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/mattn/go-runewidth v0.0.9 h1:Lm995f3rfxdpd6TSmuVCHVb/QhupuXlYr8sCI/QdE+0= github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= -github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= -github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= -github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= -github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= -github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= -github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= -github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.3.2 h1:mRS76wmkOn3KkKAyXDu42V+6ebnXWIztFSYGN7GeoRg= github.com/mitchellh/mapstructure v1.3.2/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc= -github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/neo4j/neo4j-go-driver v1.8.3 h1:yfuo9YBAlezdIiogu92GwEir/81RD81dNwS5mY/wAIk= github.com/neo4j/neo4j-go-driver v1.8.3/go.mod h1:ncO5VaFWh0Nrt+4KT4mOZboaczBZcLuHrG+/sUeP8gI= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/nxadm/tail v1.4.4 h1:DQuhQpB1tVlglWS2hLQ5OV6B5r8aGxSrPc5Qo6uTN78= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= -github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.12.0 h1:Iw5WCbBcaAAd0fpRb1c9r5YCylv4XDoCSigm1zLevwU= github.com/onsi/ginkgo v1.12.0/go.mod h1:oUhWkIvk5aDxtKvDDuw8gItl8pKl42LzjC9KZE0HfGg= github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= github.com/onsi/ginkgo v1.13.0 h1:M76yO2HkZASFjXL0HSoZJ1AYEmQxNJmY41Jx1zNUq1Y= github.com/onsi/ginkgo v1.13.0/go.mod h1:+REjRxOmWfHCjfv9TTWB1jD1Frx4XydAD3zm1lskyM0= -github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= +github.com/onsi/gomega v1.9.0 h1:R1uwffexN6Pr340GtYRIdZmAiN4J+iw6WG4wog1DUXg= github.com/onsi/gomega v1.9.0/go.mod h1:Ho0h+IUsWyvy1OpqCwxlQ/21gkhVunqlU8fDGcoTdcA= github.com/onsi/gomega v1.10.1 h1:o0+MgICZLuZ7xjH7Vx6zS/zcu93/BEp1VwkIW1mEXCE= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= -github.com/openconfig/gnmi v0.0.0-20190823184014-89b2bf29312c/go.mod h1:t+O9It+LKzfOAhKTT5O0ehDix+MTqbtT0T9t+7zzOvc= github.com/openconfig/gnmi v0.0.0-20200414194230-1597cc0f2600/go.mod h1:M/EcuapNQgvzxo1DDXHK4tx3QpYM/uG4l591v33jG2A= +github.com/openconfig/gnmi v0.0.0-20200508230933-d19cebf5e7be h1:VEK8utxoyZu/hkpjLxvuBmK5yW3NmBo/v/Wu5VQAJVs= github.com/openconfig/gnmi v0.0.0-20200508230933-d19cebf5e7be/go.mod h1:M/EcuapNQgvzxo1DDXHK4tx3QpYM/uG4l591v33jG2A= -github.com/openconfig/gnmi v0.0.0-20200617225440-d2b4e6a45802 h1:WXFwJlWOJINlwlyAZuNo4GdYZS6qPX36+rRUncLmN8Q= -github.com/openconfig/gnmi v0.0.0-20200617225440-d2b4e6a45802/go.mod h1:M/EcuapNQgvzxo1DDXHK4tx3QpYM/uG4l591v33jG2A= github.com/openconfig/goyang v0.0.0-20200115183954-d0a48929f0ea/go.mod h1:dhXaV0JgHJzdrHi2l+w0fZrwArtXL7jEFoiqLEdmkvU= -github.com/openconfig/goyang v0.2.1 h1:TaADsLGzULGQL8xTmvLjmXqZ/J1F73dMzURDqrv9cLs= -github.com/openconfig/goyang v0.2.1/go.mod h1:vX61x01Q46AzbZUzG617vWqh/cB+aisc+RrNkXRd3W8= -github.com/openconfig/reference v0.0.0-20190727015836-8dfd928c9696 h1:yHCGAHg2zMaW8olLrqEt3SAHGcEx2aJPEQWMRCyravY= -github.com/openconfig/reference v0.0.0-20190727015836-8dfd928c9696/go.mod h1:ym2A+zigScwkSEb/cVQB0/ZMpU3rqiH6X7WRRsxgOGw= +github.com/openconfig/goyang v0.0.0-20200616001533-c0659aea65dd/go.mod h1:vX61x01Q46AzbZUzG617vWqh/cB+aisc+RrNkXRd3W8= +github.com/openconfig/goyang v0.0.0-20200917201611-633eccb6fa97 h1:TaCuNSX/fiTuky8ouzC+JaCJN+OSOpjtYlLrn/uXxxE= +github.com/openconfig/goyang v0.0.0-20200917201611-633eccb6fa97/go.mod h1:vX61x01Q46AzbZUzG617vWqh/cB+aisc+RrNkXRd3W8= github.com/openconfig/ygot v0.6.0/go.mod h1:o30svNf7O0xK+R35tlx95odkDmZWS9JyWWQSmIhqwAs= -github.com/openconfig/ygot v0.8.11 h1:s9BtpSeqChokRQHhTatv2xmwkTLHPz0ghPnVpgmz8WU= -github.com/openconfig/ygot v0.8.11/go.mod h1:Qh/F0ycMLXJlZn4cR+5iuefEMthLggO8KBq8wjXYPTY= -github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= +github.com/openconfig/ygot v0.8.7 h1:BKErV6vM15YGM1+XHDuLAQ938dYahzSgwlt9BIGFrdY= +github.com/openconfig/ygot v0.8.7/go.mod h1:AqXe0HNEITTcmcYkr+yzDMY8ofitImUdfZV4IgRsJWU= github.com/pborman/getopt v0.0.0-20190409184431-ee0cd42419d3/go.mod h1:85jBQOZwpVEaDAr341tbn15RS4fCAsIst0qp7i8ex1o= github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= -github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= -github.com/pelletier/go-toml v1.4.0 h1:u3Z1r+oOXJIkxqw34zVhyPgjBsm6X2wn21NWs/HfSeg= github.com/pelletier/go-toml v1.4.0/go.mod h1:PN7xzY2wHTK0K9p34ErDQMlFxa51Fk0OUruD3k1mMwo= -github.com/pierrec/lz4 v2.4.1+incompatible h1:mFe7ttWaflA46Mhqh+jUfjp2qTbPYxLB2/OyBppH9dg= -github.com/pierrec/lz4 v2.4.1+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= -github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= -github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= -github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= -github.com/prometheus/client_golang v1.4.1 h1:FFSuS004yOQEtDdTq+TAOLP5xUq63KqAFYyOi8zA+Y8= -github.com/prometheus/client_golang v1.4.1/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= -github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= -github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M= -github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= -github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/common v0.9.1 h1:KOMtN28tlbam3/7ZKEYKHhKoJZYYj3gMH4uc62x7X7U= -github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= -github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= -github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= -github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= -github.com/prometheus/procfs v0.0.10 h1:QJQN3jYQhkamO4mhfUWqdDH2asK7ONOI9MTWjyAxNKM= -github.com/prometheus/procfs v0.0.10/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= -github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= -github.com/rcrowley/go-metrics v0.0.0-20190826022208-cac0b30c2563 h1:dY6ETXrvDG7Sa4vE8ZQG4yqWg6UnOcbqTAahkV813vQ= -github.com/rcrowley/go-metrics v0.0.0-20190826022208-cac0b30c2563/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/rivo/tview v0.0.0-20201018122409-d551c850a743 h1:9BBjVJTRxuYBeCAv9DFH2hSzY0ujLx5sxMg5D3K/Xeg= github.com/rivo/tview v0.0.0-20201018122409-d551c850a743/go.mod h1:t7mcA3nlK9dxD1DMoz/DQRMWFMkGBUj6rJBM5VNfLFA= github.com/rivo/uniseg v0.1.0 h1:+2KBaVoUmb9XzDsrx/Ct0W/EYOSFf/nWTauy++DprtY= github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= -github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/go-internal v1.1.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.2.2/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= -github.com/satori/go.uuid v1.2.0 h1:0uYX9dsZ2yD7q2RtLRtPSdGDWzjeM3TbMJP9utgA0ww= -github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= github.com/sclevine/agouti v3.0.0+incompatible/go.mod h1:b4WX9W9L1sfQKXeJf1mUTLZKJ48R1S7H23Ji7oFO5Bw= -github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= -github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= github.com/sirupsen/logrus v1.4.2 h1:SPIRibHv4MatM3XXNO2BJeFLZwZ2LvZgfQ5+UNI2im4= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= -github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM= -github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= -github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s= -github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= -github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= -github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spf13/afero v1.1.2 h1:m8/z1t7/fwjysjQRYbP0RD+bUIF/8tJwPdEZsI83ACI= -github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= -github.com/spf13/cast v1.3.0 h1:oget//CVOEoFewqQxwr0Ej5yjygnqGkvggSE/gB35Q8= -github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= -github.com/spf13/jwalterweatherman v1.0.0 h1:XHEdyB+EcvlqZamSM4ZOMGlc93t6AcsBEu9Gc1vn7yk= -github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= github.com/spf13/pflag v1.0.3 h1:zPAT6CGy6wXeQ7NtTnaTerfKOsV6V6F8agHXFiazDkg= github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/spf13/viper v1.7.1 h1:pM5oEahlgWv/WnHXpgbKz7iLIxRf65tye2Ci+XFK5sk= -github.com/spf13/viper v1.7.1/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= @@ -464,213 +258,110 @@ github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UV github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s= -github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= -github.com/templexxx/cpufeat v0.0.0-20180724012125-cef66df7f161 h1:89CEmDvlq/F7SJEOqkIdNDGJXrQIhuIx9D2DBXjavSU= -github.com/templexxx/cpufeat v0.0.0-20180724012125-cef66df7f161/go.mod h1:wM7WEvslTq+iOEAMDLSzhVuOt5BRZ05WirO+b09GHQU= -github.com/templexxx/xor v0.0.0-20191217153810-f85b25db303b h1:fj5tQ8acgNUr6O8LEplsxDhUIe2573iLkJc+PqnzZTI= -github.com/templexxx/xor v0.0.0-20191217153810-f85b25db303b/go.mod h1:5XA7W9S6mni3h5uvOC75dA3m9CCCaS83lltmc0ukdi4= github.com/tidwall/gjson v1.6.3 h1:aHoiiem0dr7GHkW001T1SMTJ7X5PvyekH5WX0whWGnI= github.com/tidwall/gjson v1.6.3/go.mod h1:BaHyNc5bjzYkPqgLq7mdVzeiRtULKULXLgZFKsxEHI0= github.com/tidwall/match v1.0.1 h1:PnKP62LPNxHKTwvHHZZzdOAOCtsJTjo6dZLCwpKm5xc= github.com/tidwall/match v1.0.1/go.mod h1:LujAq0jyVjBy028G1WhWfIzbpQfMO8bBZ6Tyb0+pL9E= +github.com/tidwall/pretty v1.0.0 h1:HsD+QiTn7sK6flMKIvNmpqz1qrpP3Ps6jOKIKMooyg4= github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= github.com/tidwall/pretty v1.0.2 h1:Z7S3cePv9Jwm1KwS0513MRaoUe3S01WPbLNV40pwWZU= github.com/tidwall/pretty v1.0.2/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= -github.com/tjfoc/gmsm v1.3.0 h1:i7c6Za/IlgBvnGxYpfD7L3TGuaS+v6oGcgq+J9/ecEA= -github.com/tjfoc/gmsm v1.3.0/go.mod h1:HaUcFuY0auTiaHB9MHFGCPx5IaLhTUd2atbCFBQXn9w= -github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/vektah/gqlparser v1.1.2/go.mod h1:1ycwN7Ij5njmMkPPAOaRFY4rET2Enx7IkVv3vaXspKw= github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c/go.mod h1:lB8K/P019DLNhemzwFU4jHLhdvlE6uDZjXFejJXr49I= github.com/xdg/stringprep v0.0.0-20180714160509-73f8eece6fdc/go.mod h1:Jhud4/sHMO4oL310DaZAKk9ZaJ08SJfe+sJh0HrGL1Y= -github.com/xdg/stringprep v1.0.0/go.mod h1:Jhud4/sHMO4oL310DaZAKk9ZaJ08SJfe+sJh0HrGL1Y= -github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= -github.com/xtaci/kcp-go v5.4.20+incompatible h1:TN1uey3Raw0sTz0Fg8GkfM0uH3YwzhnZWQ1bABv5xAg= -github.com/xtaci/kcp-go v5.4.20+incompatible/go.mod h1:bN6vIwHQbfHaHtFpEssmWsN45a+AZwO7eyRCmEIbtvE= -github.com/xtaci/lossyconn v0.0.0-20190602105132-8df528c0c9ae h1:J0GxkO96kL4WF+AIT3M4mfUVinOCPgf2uUWYFUzN0sM= -github.com/xtaci/lossyconn v0.0.0-20190602105132-8df528c0c9ae/go.mod h1:gXtu8J62kEgmN++bm9BVICuT/e8yiLI2KFobd/TRFsE= -go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.mongodb.org/mongo-driver v1.0.3/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= go.mongodb.org/mongo-driver v1.1.1/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= go.mongodb.org/mongo-driver v1.3.0/go.mod h1:MSWZXKOynuguX+JSvwP8i+58jYCXxbia8HS3gZBapIE= go.mongodb.org/mongo-driver v1.3.4 h1:zs/dKNwX0gYUtzwrN9lLiR15hCO0nDwQj5xXx+vjCdE= go.mongodb.org/mongo-driver v1.3.4/go.mod h1:MSWZXKOynuguX+JSvwP8i+58jYCXxbia8HS3gZBapIE= -go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= -go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= -go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= -go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= -go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190320223903-b7391e95e576/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190422162423-af44ce270edf/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE= -golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190530122614-20be4c3c3ed5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190617133340-57b3e21c3d56/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20191219195013-becbf705a915/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200204104054-c9f3fb736b72/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200221231518-2aa609cf4a9d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200302210943-78000ba7a073/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= -golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= -golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= -golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= -golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= -golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= -golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= -golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= -golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181005035420-146acd28ed58/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190320064053-1272bf9dcd53/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200602114024-627f9648deb9 h1:pNX+40auqi2JqRfOP1akLGtYcn15TUbkhwuCO3foqqM= golang.org/x/net v0.0.0-20200602114024-627f9648deb9/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200904194848-62affa334b73 h1:MXfv8rhZWmFeqX3GNZRsd6vOLoaCHjYEX3qkRo3YBUA= golang.org/x/net v0.0.0-20200904194848-62affa334b73/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190412183630-56d357773e84/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e h1:vcxGaoTs7kV8m5Np9uUNQin4BrLOthgV7252N8V+FwY= -golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190321052220-f7bb7a8bee54/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190403152447-81d4e9dc473e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190419153524-e8e3143a4f4a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190531175056-4c3a928424d2/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190626150813-e07cf5db2756/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200219091948-cb0a6d8edb6c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201017003518-b09fb700fbb7 h1:XtNJkfEjb4zR3q20BBBcYUykVOEMgZeIUOpBPfNYgxg= golang.org/x/sys v0.0.0-20201017003518-b09fb700fbb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20191024005414-555d28b269f0 h1:/5xXl8Y5W96D+TtHSlonuFqGHIWVuyCkGJLwGh9JJFs= -golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190125232054-d66bd3c5d5a6/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190329151228-23e29df326fe/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190416151739-9c9e1878f421/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190420181800-aa740d480789/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190531172133-b3315ee88b7d/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190614205625-5aca471b1d59/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190617190820-da514acc4774 h1:CQVOmarCBFzTx0kbOU0ru54Cvot8SdSrNYjZPhQl+gk= golang.org/x/tools v0.0.0-20190617190820-da514acc4774/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20200221224223-e1da425f72fd h1:hHkvGJK23seRCflePJnVa9IMv8fsuavSCWKd11kDQFs= -golang.org/x/tools v0.0.0-20200221224223-e1da425f72fd/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= -google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= -google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= -google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200519141106-08726f379972 h1:6ydLqG65DIMNJf6p97WudGsmd1w3Ickm/LiZnBrREPI= google.golang.org/genproto v0.0.0-20200519141106-08726f379972/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= -google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013 h1:+kGHl1aib/qcwaRi1CbqBZ1rk19r85MNUf8HaBghugY= -google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= -google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= @@ -683,42 +374,20 @@ google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQ google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.0 h1:4MY060fB1DLGMB/7MBTLnwQUY6+F09GEiz6SsrNqyzM= google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.25.0 h1:Ejskq+SyPohKW+1uil0JJMtmHCgJPJ/qWTxr8qp+R4c= -google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= -gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= -gopkg.in/bsm/ratelimit.v1 v1.0.0-20160220154919-db14e161995a h1:stTHdEoWg1pQ8riaP5ROrjS6zy6wewH/Q2iwnLCQUXY= -gopkg.in/bsm/ratelimit.v1 v1.0.0-20160220154919-db14e161995a/go.mod h1:KF9sEfUPAXdG8Oev9e99iLGnl2uJMjc5B+4y3O7x610= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= +gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/ini.v1 v1.51.0 h1:AQvPpx3LzTDM0AjnIRlVFwFFGC+npRopjZxLJj6gdno= -gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/jcmturner/aescts.v1 v1.0.1 h1:cVVZBK2b1zY26haWB4vbBiZrfFQnfbTVrE3xZq6hrEw= -gopkg.in/jcmturner/aescts.v1 v1.0.1/go.mod h1:nsR8qBOg+OucoIW+WMhB3GspUQXq9XorLnQb9XtvcOo= -gopkg.in/jcmturner/dnsutils.v1 v1.0.1 h1:cIuC1OLRGZrld+16ZJvvZxVJeKPsvd5eUIvxfoN5hSM= -gopkg.in/jcmturner/dnsutils.v1 v1.0.1/go.mod h1:m3v+5svpVOhtFAP/wSz+yzh4Mc0Fg7eRhxkJMWSIz9Q= -gopkg.in/jcmturner/goidentity.v3 v3.0.0 h1:1duIyWiTaYvVx3YX2CYtpJbUFd7/UuPYCfgXtQ3VTbI= -gopkg.in/jcmturner/goidentity.v3 v3.0.0/go.mod h1:oG2kH0IvSYNIu80dVAyu/yoefjq1mNfM5bm88whjWx4= -gopkg.in/jcmturner/gokrb5.v7 v7.5.0 h1:a9tsXlIDD9SKxotJMK3niV7rPZAJeX2aD/0yg3qlIrg= -gopkg.in/jcmturner/gokrb5.v7 v7.5.0/go.mod h1:l8VISx+WGYp+Fp7KRbsiUuXTTOnxIc3Tuvyavf11/WM= -gopkg.in/jcmturner/rpc.v1 v1.1.0 h1:QHIUxTX1ISuAv9dD2wJ9HWQVuWDX/Zc0PfeC2tjc4rU= -gopkg.in/jcmturner/rpc.v1 v1.1.0/go.mod h1:YIdkC4XfD6GXbzje11McwsDuOlZQSb9W4vfLvuNnlv8= -gopkg.in/redis.v4 v4.2.4 h1:y3XbwQAiHwgNLUng56mgWYK39vsPqo8sT84XTEcxjr0= -gopkg.in/redis.v4 v4.2.4/go.mod h1:8KREHdypkCEojGKQcjMqAODMICIVwZAONWq8RowTITA= -gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.3.0 h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU= gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= @@ -727,10 +396,6 @@ gopkg.in/yaml.v3 v3.0.0-20200605160147-a5ece683394c/go.mod h1:K4uyk7z7BCEPqu6E+C gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776 h1:tQIYjPdBoyREyB9XMu+nnTclpTYkz2zFM+lzLJFO4gQ= gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= -rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= diff --git a/gosdn.png b/gosdn.png deleted file mode 100644 index b16c83696fe11f6b983da0bf923457ecf59add8d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 135420 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ξ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ν3 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 Dv=KRR diff --git a/gosdn.puml b/gosdn.puml deleted file mode 100644 index 1dc237900..000000000 --- a/gosdn.puml +++ /dev/null @@ -1,118 +0,0 @@ -@startuml -namespace nucleus { - class ClientConfig << (S,Aquamarine) >> { - + Identifier string - + Endpoint string - + Username string - + Password string - + GjsonDefaultPath string - + GjsonConnectionsPath string - - } - class Core << (S,Aquamarine) >> { - - devices <font color=blue>map</font>[string]Device - - southboundInterfaces <font color=blue>map</font>[string]interfaces.SouthboundInterface - - prinipalNetworkDomains <font color=blue>map</font>[uuid.UUID]interfaces.PrincipalNetworkDomain - - database database.Database - - config controllerConfig - - + IsRunning <font color=blue>chan</font> bool - - - readControllerConfig(configFileController string) error - - + Init(socket string, configFileController string, configFileClient string, IsRunningChannel <font color=blue>chan</font> bool) - + AttachDatabase() - + Shutdown() - - } - class Device << (S,Aquamarine) >> { - - device ygot.GoStruct - - + SBI interfaces.SouthboundInterface - + Config DeviceConfig - - } - class DeviceConfig << (S,Aquamarine) >> { - + Identifier uuid.UUID - + Endpoint string - + Username string - + Password string - - } - interface PrincipalNetworkDomain { - + Destroy() error - + AddSbi() error - + RemoveSbi() error - + AddDevice( interfaces.Device) error - + RemoveDevice(uuid uuid.UUID) error - - } - interface SouthboundInterface { - } - class buf << (S,Aquamarine) >> { - + Write(p []byte) (int, error) - - } - class controllerConfig << (S,Aquamarine) >> { - + CliSocket string - + DatabaseSocket string - + DatabaseUser string - + DatabasePassword string - + DatabaseCrypto bool - + ConfigPath string - - } - class logConnection << (S,Aquamarine) >> { - - stream proto.GrpcCli_CreateLogStreamServer - - id string - - active bool - - error <font color=blue>chan</font> error - - } - class nucleus.buf << (T, #FF7700) >> { - } - class pndImplementation << (S,Aquamarine) >> { - - name string - - sbiContainer <font color=blue>map</font>[string]*interfaces.SouthboundInterface - - devices <font color=blue>map</font>[uuid.UUID]Device - - + Destroy() error - + AddSbi() error - + RemoveSbi() error - + AddDevice(device Device) error - + RemoveDevice(uuid uuid.UUID) error - - } - class server << (S,Aquamarine) >> { - - core *Core - - logConnections []*logConnection - - + SayHello(ctx context.Context, in *proto.HelloRequest) (*proto.HelloReply, error) - + CreateLogStream(req *emptypb.Empty, stream proto.GrpcCli_CreateLogStreamServer) error - + BroadcastLog(log *proto.LogReply) - + Shutdown(ctx context.Context, in *proto.ShutdownRequest) (*proto.ShutdownReply, error) - + TAPIGetEdge(ctx context.Context, in *proto.TAPIRequest) (*proto.TAPIReply, error) - + TAPIGetEdgeNode(ctx context.Context, in *proto.TAPIRequest) (*proto.TAPIReply, error) - + TAPIGetLink(ctx context.Context, in *proto.TAPIRequest) (*proto.TAPIReply, error) - - } -} -"proto.UnimplementedGrpcCliServer" *-- "nucleus.server" - - -namespace sbi { - class OpenConfig << (S,Aquamarine) >> { - - name string - - clientContainer []Client - - + AddClient() error - + RemoveClient() error - + CollectHeartbeats() error - + ListClients() <font color=blue>map</font>[int]interfaces.Client - - } -} - - -"__builtin__.[]byte" #.. "nucleus.buf" -@enduml diff --git a/nucleus/cli-handling.go b/nucleus/cli-handling.go index 6ebe88cec..81c11d1a8 100644 --- a/nucleus/cli-handling.go +++ b/nucleus/cli-handling.go @@ -8,14 +8,13 @@ package nucleus import ( "context" - "github.com/google/uuid" - "github.com/spf13/viper" "io" "net" "os" "sync" pb "code.fbi.h-da.de/cocsn/gosdn/api/proto" + "code.fbi.h-da.de/cocsn/gosdn/sbi/restconf/client/ciena" log "github.com/sirupsen/logrus" "google.golang.org/grpc" "google.golang.org/grpc/health" @@ -35,7 +34,6 @@ type server struct { pb.UnimplementedGrpcCliServer core *Core logConnections []*logConnection - devices map[uuid.UUID]Device } var srv *server @@ -54,7 +52,7 @@ func (s *server) SayHello(ctx context.Context, in *pb.HelloRequest) (*pb.HelloRe return &pb.HelloReply{Message: "Hello " + in.GetName(), GoSDNInfo: "goSDN in version: DEVELOP"}, nil } -//GetLog creates a continuous stream between ciena and server to send goSDN logs +//GetLog creates a continuous stream between client and server to send goSDN logs func (s *server) CreateLogStream(req *emptypb.Empty, stream pb.GrpcCli_CreateLogStreamServer) error { conn := &logConnection{ stream: stream, @@ -111,7 +109,7 @@ func getCLIGoing(core *Core) { log.Info("Starting: GetCLIGoing") // Boot-up the control interface for the cli - cliControlListener, err := net.Listen("tcp", viper.GetString("socket")) + cliControlListener, err := net.Listen("tcp", core.config.CliSocket) if err != nil { log.Fatal(err) } @@ -137,18 +135,27 @@ func getCLIGoing(core *Core) { // SBI specific calls, by now TAPI only func (s *server) TAPIGetEdge(ctx context.Context, in *pb.TAPIRequest) (*pb.TAPIReply, error) { log.Info("Received: ", in.GetName()) - // TODO: Implement + if err := s.core.clients["ciena-mcp"].(*ciena.MCPClient).GetNodes(); err != nil { + log.Error(err) + return &pb.TAPIReply{Message: "TAPI error"}, nil + } return &pb.TAPIReply{Message: "Done"}, nil } func (s *server) TAPIGetEdgeNode(ctx context.Context, in *pb.TAPIRequest) (*pb.TAPIReply, error) { log.Info("Received: ", in.GetName()) - // TODO: Implement + if err := s.core.clients["ciena-mcp"].(*ciena.MCPClient).GetNodeEdgePoints(); err != nil { + log.Error(err) + return &pb.TAPIReply{Message: "TAPI error"}, nil + } return &pb.TAPIReply{Message: "Done"}, nil } func (s *server) TAPIGetLink(ctx context.Context, in *pb.TAPIRequest) (*pb.TAPIReply, error) { log.Info("Received: ", in.GetName()) - // TODO: Implement + if err := s.core.clients["ciena-mcp"].(*ciena.MCPClient).GetLinks(); err != nil { + log.Error(err) + return &pb.TAPIReply{Message: "TAPI error"}, nil + } return &pb.TAPIReply{Message: "Done"}, nil } diff --git a/nucleus/controller.go b/nucleus/controller.go index 9de78e919..7d0541f88 100644 --- a/nucleus/controller.go +++ b/nucleus/controller.go @@ -2,43 +2,57 @@ package nucleus import ( "code.fbi.h-da.de/cocsn/gosdn/database" - "fmt" - "github.com/google/uuid" + "code.fbi.h-da.de/cocsn/gosdn/nucleus/interfaces" + "code.fbi.h-da.de/cocsn/gosdn/sbi/restconf/client/ciena" + "github.com/BurntSushi/toml" log "github.com/sirupsen/logrus" - "github.com/spf13/viper" "os" ) +type controllerConfig struct { + CliSocket string + DatabaseSocket string + DatabaseUser string + DatabasePassword string + DatabaseCrypto bool + ConfigPath string +} + +type clientConfigs struct { + Client []interfaces.ClientConfig `toml:"client"` +} + // Core is the representation of the controllers core type Core struct { - southboundInterfaces map[string]SouthboundInterface - prinipalNetworkDomains map[uuid.UUID]PrincipalNetworkDomain - database database.Database - IsRunning chan bool -} - -//Initialize does start-up housekeeping like reading controller config files -func (c *Core) Initialize(IsRunningChannel chan bool) { - // Set config defaults - viper.SetDefault("socket", "localhost:55055") - - // Set config path and read config - viper.SetConfigName("gosdn") - viper.SetConfigType("toml") - viper.AddConfigPath("/usr/local/etc/gosdn/") - viper.AddConfigPath("./configs/") - err := viper.ReadInConfig() - if err != nil { - log.Fatal(fmt.Errorf("Fatal error config file: %s \n", err)) + //Assert type with clients[key].(*MCPClient) + clients map[string]interfaces.Client + database database.Database + config controllerConfig + IsRunning chan bool +} + +//Init does start-up housekeeping like reading controller and client config files +func (c *Core) Init(socket, configFileController, configFileClient string, IsRunningChannel chan bool) { + if err := c.readControllerConfig(configFileController); err != nil { + log.Fatal(err) } + + if socket != "localhost:55055" { + c.config.CliSocket = socket + } + c.AttachDatabase() c.IsRunning = IsRunningChannel + + if err := c.readClientConfig(configFileClient); err != nil { + log.Fatal(err) + } } // AttachDatabase connects to the database and passes the connectio to the controller core func (c *Core) AttachDatabase() { - c.database = database.NewDatabaseClient() + c.database = database.NewDatabaseClient(c.config.DatabaseSocket, c.config.DatabaseUser, c.config.DatabasePassword, c.config.DatabaseCrypto) } // Shutdown waits for the shutdown signal and gracefully shuts down once it arrived @@ -46,10 +60,50 @@ func (c *Core) Shutdown() { <-c.IsRunning log.Info("Received shutdown signal. Shutting down") - err := viper.WriteConfig() + f, err := os.Create(c.config.ConfigPath) if err != nil { log.Fatal(err) } + enc := toml.NewEncoder(f) + if err := enc.Encode(c.config); err != nil { + log.Fatal(err) + } log.Info("Shutdown complete") os.Exit(0) -} \ No newline at end of file +} + +func (c *Core) readControllerConfig(configFileController string) error { + if configFileController == "" { + configFileController = "configs/gosdn.toml" + } + if _, err := os.Stat(configFileController); err != nil { + return err + } + + c.config = controllerConfig{} + if _, err := toml.DecodeFile(configFileController, &c.config); err != nil { + return err + } + + if c.config.ConfigPath == "" { + c.config.ConfigPath = configFileController + } + return nil +} + +func (c *Core) readClientConfig(configFileClient string) error { + if configFileClient == "" { + configFileClient = "configs/clients.toml" + } + if _, err := os.Stat(configFileClient); err != nil { + return err + } + clients := clientConfigs{} + if _, err := toml.DecodeFile(configFileClient, &clients); err != nil { + return err + } + for _, client := range clients.Client { + c.clients[client.Identifier] = ciena.NewMCPClient(client.Endpoint, client.Username, client.Password, &c.database, &client) + } + return nil +} diff --git a/nucleus/device.go b/nucleus/device.go deleted file mode 100644 index f39d1bc6e..000000000 --- a/nucleus/device.go +++ /dev/null @@ -1,49 +0,0 @@ -package nucleus - -import ( - "code.fbi.h-da.de/cocsn/yang-models/generated/openconfig" - "github.com/google/uuid" - "github.com/openconfig/gnmi/proto/gnmi" - "github.com/openconfig/ygot/ygot" - log "github.com/sirupsen/logrus" -) - -type Device struct { - Device ygot.GoStruct - SBI SouthboundInterface - Config DeviceConfig - Transport Transport -} - -// Add adds a property to a device. Please -// use better naming in further develop -// Also all that Interface Call specific logic belongs to SBI! -func (d Device) Add(resp interface{}) { - r := resp.(*gnmi.GetResponse) - log.Debug(r) - device := d.Device.(*openconfig.Device) - ifaces := make(map[string]*openconfig.OpenconfigInterfaces_Interfaces_Interface) - ifaces["test"] = &openconfig.OpenconfigInterfaces_Interfaces_Interface{ - Aggregation: nil, - Config: nil, - Ethernet: nil, - HoldTime: nil, - Name: nil, - RoutedVlan: nil, - State: nil, - Subinterfaces: nil, - } - // It's possible that the gnmi response already is too Arista-fied to be used w/YGOT - ifs := &openconfig.OpenconfigInterfaces_Interfaces{ - Interface: ifaces, - } - device.Interfaces = ifs - d.Device = device -} - -type DeviceConfig struct { - Uuid uuid.UUID - Address string - Username string - Password string -} diff --git a/nucleus/gnmi_transport.go b/nucleus/gnmi_transport.go deleted file mode 100644 index 867fdea28..000000000 --- a/nucleus/gnmi_transport.go +++ /dev/null @@ -1,81 +0,0 @@ -package nucleus - -import ( - "code.fbi.h-da.de/cocsn/gosdn/forks/goarista/gnmi" - "context" - "github.com/google/uuid" - "github.com/openconfig/gnmi/proto/gnmi_ext" - - gpb "github.com/openconfig/gnmi/proto/gnmi" -) - -type Gnmi uuid.UUID - -func (g *Gnmi) SetConfig(interface{}) error { - return nil -} - -func (g *Gnmi) GetConfig() interface{} { - return nil -} - -// Capabilities calls GNMI capabilities -func (g *Gnmi) Capabilities(ctx context.Context) (interface{}, error) { - client, err := gnmi.Dial(ctx.Value("config").(*gnmi.Config)) - if err != nil { - return nil, err - } - resp, err := client.Capabilities(ctx, &gpb.CapabilityRequest{}) - if err != nil { - return nil, err - } - return resp, nil -} - -// Get calls GNMI get -func (g *Gnmi) Get(ctx context.Context, paths [][]string, origin string) (interface{}, error) { - req, err := gnmi.NewGetRequest(paths, origin) - if err != nil { - return nil, err - } - return GetWithRequest(ctx, req) -} - -// GetWithRequest takes a fully formed GetRequest, performs the Get, -// and displays any response. -func GetWithRequest(ctx context.Context, req *gpb.GetRequest) (interface{}, error) { - client, err := gnmi.Dial(ctx.Value("config").(*gnmi.Config)) - if err != nil { - return nil, err - } - resp, err := client.Get(ctx, req) - if err != nil { - return nil, err - } - return resp, nil -} - -// Set calls GNMI set -func (g *Gnmi) Set(ctx context.Context, setOps []*gnmi.Operation, - exts ...*gnmi_ext.Extension) error { - client, err := gnmi.Dial(ctx.Value("config").(*gnmi.Config)) - if err != nil { - return err - } - return gnmi.Set(ctx, client, setOps, exts...) -} - -// Subscribe calls GNMI subscribe -func (g *Gnmi) Subscribe(ctx context.Context, subscribeOptions *gnmi.SubscribeOptions, - respChan chan<- *gpb.SubscribeResponse) error { - client, err := gnmi.Dial(ctx.Value("config").(*gnmi.Config)) - if err != nil { - return err - } - return gnmi.SubscribeErr(ctx, client, subscribeOptions, respChan) -} - -// Close calls GNMI close -func (g *Gnmi) Close() error { - return nil -} diff --git a/nucleus/interfaces/client.go b/nucleus/interfaces/client.go new file mode 100644 index 000000000..4d0b9e1ce --- /dev/null +++ b/nucleus/interfaces/client.go @@ -0,0 +1,7 @@ +package interfaces + +// Client provides an interface for +// SBI protocol clients +type Client interface { + GetConfig() ClientConfig +} diff --git a/nucleus/clientConfig.go b/nucleus/interfaces/clientConfig.go similarity index 86% rename from nucleus/clientConfig.go rename to nucleus/interfaces/clientConfig.go index 0dc63e1c5..b90df8041 100644 --- a/nucleus/clientConfig.go +++ b/nucleus/interfaces/clientConfig.go @@ -1,6 +1,6 @@ -package nucleus +package interfaces -// ClientConfig contains SBI ciena +// ClientConfig contains SBI client // configuration parameters type ClientConfig struct { Identifier string `toml:"identifier"` diff --git a/nucleus/nucleus-core.go b/nucleus/nucleus-core.go index 47b265b96..4e92cf46a 100644 --- a/nucleus/nucleus-core.go +++ b/nucleus/nucleus-core.go @@ -2,20 +2,22 @@ package nucleus import ( "code.fbi.h-da.de/cocsn/gosdn/database" + "code.fbi.h-da.de/cocsn/gosdn/nucleus/interfaces" log "github.com/sirupsen/logrus" "time" ) //StartAndRun is used to start the core of the controller and any auxiliary services. -func StartAndRun(IsRunningChannel chan bool) { +func StartAndRun(socket, filename string, IsRunningChannel chan bool) { log.Info("This is the network superintendent...") log.Info("Starting my ducks") - // Initialize the Core + // Init the Core core := Core{ + clients: make(map[string]interfaces.Client), database: database.Database{}, } - core.Initialize(IsRunningChannel) + core.Init(socket, filename, "", IsRunningChannel) // Start the GRCP CLI go getCLIGoing(&core) go core.Shutdown() diff --git a/nucleus/principalNetworkDomain.go b/nucleus/principalNetworkDomain.go deleted file mode 100644 index fd54a00ab..000000000 --- a/nucleus/principalNetworkDomain.go +++ /dev/null @@ -1,78 +0,0 @@ -package nucleus - -import ( - "github.com/google/uuid" -) - -// PrincipalNetworkDomain provides an -// interface for PND implementations -type PrincipalNetworkDomain interface { - Destroy() error - AddSbi() error - RemoveSbi() error - AddDevice(Device) error - RemoveDevice(uuid uuid.UUID) error -} - -type pndImplementation struct { - name string - sbi map[string]SouthboundInterface - devices map[uuid.UUID]Device -} - -//NewPND creates a Principle Network Domain -func NewPND(name string, sbi SouthboundInterface) PrincipalNetworkDomain { - sbic := make(map[string]SouthboundInterface) - sbic["default"] = sbi - devices := make(map[uuid.UUID]Device) - return &pndImplementation{ - name: name, - sbi: sbic, - devices: devices, - } -} - -// Interface satisfaction -func (pnd *pndImplementation) Destroy() error { - return destroy() -} - -func (pnd *pndImplementation) AddSbi() error { - return addSbi() -} - -func (pnd *pndImplementation) RemoveSbi() error { - return removeSbi() -} - -func (pnd *pndImplementation) AddDevice(device Device) error { - return pnd.addDevice(device) -} - -func (pnd *pndImplementation) RemoveDevice(uuid uuid.UUID) error { - return pnd.removeDevice(uuid) -} - -// Actual implementation, bind to struct if -// neccessary -func destroy() error { - return nil -} - -func addSbi() error { - return nil -} - -func removeSbi() error { - return nil -} - -func (pnd *pndImplementation) addDevice(device Device) error { - pnd.devices[device.Config.Uuid] = device - return nil -} - -func (pnd *pndImplementation) removeDevice(uuid uuid.UUID) error { - delete(pnd.devices, uuid) - return nil -} diff --git a/nucleus/restconf_transport.go b/nucleus/restconf_transport.go deleted file mode 100644 index 452bc6d99..000000000 --- a/nucleus/restconf_transport.go +++ /dev/null @@ -1,18 +0,0 @@ -package nucleus - -import "context" - -type Restconf struct { -} - -func (rc *Restconf) SetConfig(interface{}) error { - return nil -} - -func (rc *Restconf) GetConfig() interface{} { - return nil -} - -func (rc *Restconf) Subscribe(ctx context.Context, params ...string) error { - return nil -} diff --git a/nucleus/southbound.go b/nucleus/southbound.go deleted file mode 100644 index 69d37e843..000000000 --- a/nucleus/southbound.go +++ /dev/null @@ -1,26 +0,0 @@ -package nucleus - -// SouthboundInterface provides an -// interface for SBI implementations -type SouthboundInterface interface { - GetSBIString() string -} - -type Tapi struct { -} - -type OpenConfig struct { - transport Transport -} - -func (oc *OpenConfig) GetSBIString() string { - return "openconfig" -} - -func (oc *OpenConfig) OpenconfigInterfaces(device Device) { - resp, err := oc.transport.Get(nil, nil...) - if err != nil { - - } - device.Add(resp) -} diff --git a/plugins/sbi-general.go b/plugins/sbi-general.go deleted file mode 100644 index 4a4ce3272..000000000 --- a/plugins/sbi-general.go +++ /dev/null @@ -1,40 +0,0 @@ -package plugins - -import ( - "fmt" - "os" - "plugin" -) - -type SBIGreeter interface { - SBIHello() -} - -func SBILoader() { - modPath := "/Users/mls/go/src/code.fbi.h-da.de/cocsn/byowsbi/byowsbi.o" - - // open the so file that contains the SBI-plugin as step before loading the symbols - plug, err := plugin.Open(modPath) - if err != nil { - fmt.Println(err) - os.Exit(1) - } - - // loading the symbols - sbiModule, err := plug.Lookup("SBIGreeter") - if err != nil { - fmt.Println(err) - os.Exit(1) - } - - // Assert the loaded symbol - var sbigreeter SBIGreeter - sbigreeter, ok := sbiModule.(SBIGreeter) - if !ok { - fmt.Println("unexpected type from module symbol") - os.Exit(1) - } - - // use me! - sbigreeter.SBIHello() -} diff --git a/plugins/ciena/mcp.go b/sbi/restconf/client/ciena/client.go similarity index 81% rename from plugins/ciena/mcp.go rename to sbi/restconf/client/ciena/client.go index 2c51eed50..7b994496a 100644 --- a/plugins/ciena/mcp.go +++ b/sbi/restconf/client/ciena/client.go @@ -3,64 +3,53 @@ package ciena import ( "bytes" "code.fbi.h-da.de/cocsn/gosdn/database" - "code.fbi.h-da.de/cocsn/gosdn/nucleus" + "code.fbi.h-da.de/cocsn/gosdn/nucleus/interfaces" + "code.fbi.h-da.de/cocsn/gosdn/sbi/restconf/util" apiclient "code.fbi.h-da.de/cocsn/swagger/apis/mcp/client" - "code.fbi.h-da.de/cocsn/yang-models/generated/tapi" + "code.fbi.h-da.de/cocsn/yang-modules/generated/tapi" "crypto/tls" "encoding/json" "github.com/go-openapi/runtime" httptransport "github.com/go-openapi/runtime/client" "github.com/go-openapi/strfmt" "github.com/openconfig/ygot/ygot" - log "github.com/sirupsen/logrus" "github.com/tidwall/gjson" + log "github.com/sirupsen/logrus" "net/http" "strings" ) -//Mcp handles requests to a Ciena MCP RESTCONF endpoint -type Mcp struct { +//MCPClient handles requests to a Ciena MCP RESTCONF endpoint +type MCPClient struct { transport *httptransport.Runtime client *apiclient.ServiceTopologyTAPI database *database.Database buffer *bytes.Buffer - config *nucleus.ClientConfig + config *interfaces.ClientConfig device ygot.GoStruct } // GetConfig returns a ClientConfig struct containing -// the current configuration stat of the Ciena SBI ciena -func (c Mcp) GetConfig() nucleus.ClientConfig { +// the current configuration stat of the Ciena SBI client +func (c MCPClient) GetConfig() interfaces.ClientConfig { return *c.config } -// ListPorts is a stub to satisfy the interface -// TODO: Implement -func (c Mcp) ListPorts() interface{} { - return nil -} - -// PushReceiver is a stub to satisfy the interface -// TODO: Implement -func (c Mcp) PushReceiver() error { - return nil -} - -//NewMCPClient creates a Ciena flavores TAPI ciena -func NewMCPClient(endpoint, username, password string, database *database.Database, config *nucleus.ClientConfig) *Mcp { +//NewMCPClient creates a Ciena flavores TAPI client +func NewMCPClient(endpoint, username, password string, database *database.Database, config *interfaces.ClientConfig) *MCPClient { // create the transport transport := httptransport.New(endpoint, "/", nil) transport.Transport.(*http.Transport).TLSClientConfig = &tls.Config{InsecureSkipVerify: true} - // create the API ciena, with the transport + // create the API client, with the transport basicAuth := httptransport.BasicAuth(username, password) - // authenticate ciena + // authenticate client transport.DefaultAuthentication = basicAuth client := apiclient.New(transport, strfmt.Default) buffer := new(bytes.Buffer) - transport.Consumers[runtime.JSONMime] = nucleus.YANGConsumer{Data: buffer} + transport.Consumers[runtime.JSONMime] = util.YANGConsumer{Data: buffer} - return &Mcp{ + return &MCPClient{ transport: transport, client: client, database: database, @@ -71,8 +60,8 @@ func NewMCPClient(endpoint, username, password string, database *database.Databa } // GetConnections implements the TAPI Connectivity GetConnections call with a grain of -// Ciena salt. The response is written to the ciena's buffer and passed to the database -func (c *Mcp) GetConnections() error { +// Ciena salt. The response is written to the client's buffer and passed to the database +func (c *MCPClient) GetConnections() error { defer c.buffer.Reset() _, err := c.client.TapiConnectivityCore.GetTapiCoreContextConnection(nil) if err != nil { @@ -98,8 +87,8 @@ func (c *Mcp) GetConnections() error { } // GetLinks implements the TAPI Topology GetLinks call with a grain of -// Ciena salt. The response is written to the ciena's buffer and passed to the database -func (c *Mcp) GetLinks() error { +// Ciena salt. The response is written to the client's buffer and passed to the database +func (c *MCPClient) GetLinks() error { defer c.buffer.Reset() _, err := c.client.TapiTopologyCore.GetTapiCoreContextTopologyMcpBaseTopologyLink(nil) if err != nil { @@ -125,8 +114,8 @@ func (c *Mcp) GetLinks() error { } // GetNodes implements the TAPI Topology GetNodes call with a grain of -// Ciena salt. The response is written to the ciena's buffer and passed to the database -func (c *Mcp) GetNodes() error { +// Ciena salt. The response is written to the client's buffer and passed to the database +func (c *MCPClient) GetNodes() error { defer c.buffer.Reset() _, err := c.client.TapiTopologyCore.GetTapiCoreContextTopologyMcpBaseTopologyNode(nil) if err != nil { @@ -152,8 +141,8 @@ func (c *Mcp) GetNodes() error { } // GetNodeEdgePoints implements the TAPI Topology GetNodeEdgePoints call with a grain of -// Ciena salt. The response is written to the ciena's buffer and passed to the database -func (c *Mcp) GetNodeEdgePoints() error { +// Ciena salt. The response is written to the client's buffer and passed to the database +func (c *MCPClient) GetNodeEdgePoints() error { defer c.buffer.Reset() _, err := c.client.TapiTopologyCore.GetTapiCoreContextTopologyMcpBaseTopologyNodeEdgePoint(nil) if err != nil { diff --git a/nucleus/transport.go b/sbi/restconf/util/unmarshal.go similarity index 52% rename from nucleus/transport.go rename to sbi/restconf/util/unmarshal.go index 809ddd603..9c85a8cb4 100644 --- a/nucleus/transport.go +++ b/sbi/restconf/util/unmarshal.go @@ -1,20 +1,10 @@ -package nucleus +package util import ( "bytes" - "context" "io" ) -// Transport provides an interface for -// Transport implementations like RESTCONF -// or gnmi -type Transport interface { - Get(ctx context.Context, params ...string) (interface{}, error) - Set(ctx context.Context, params ...string) (interface{}, error) - Subscribe(ctx context.Context, params ...string) error -} - // YANGConsumer is a auxillary type to redirect the response // of an RESTCONF call to a ygot YANG unmarshaler type YANGConsumer struct { -- GitLab