diff options
author | FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> | 2016-11-18 13:44:14 +0900 |
---|---|---|
committer | FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> | 2016-11-18 14:00:51 +0900 |
commit | e11b09d7eae851d777a06ee18fde7865a361f5bb (patch) | |
tree | f33fd973aadabd3cb6ead949f0c8e3fadb481c20 | |
parent | 93d1dca70aa0ae3b34050d24ad7462b8757213bf (diff) |
server: disable advertised number calculation with multiple neighbors
AdjRibOut isn't in memory so needs to be calculated on the fly.
Doing such for multiple neighbors consumes too much CPU (especially
there are lots of routes).
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
-rw-r--r-- | api/gobgp.pb.go | 2214 | ||||
-rw-r--r-- | api/gobgp.proto | 1 | ||||
-rw-r--r-- | api/grpc_server.go | 2 | ||||
-rw-r--r-- | client/client.go | 2 | ||||
-rw-r--r-- | gobgp/cmd/neighbor.go | 6 | ||||
-rw-r--r-- | server/peer.go | 10 | ||||
-rw-r--r-- | server/server.go | 6 | ||||
-rw-r--r-- | server/server_test.go | 2 |
8 files changed, 1872 insertions, 371 deletions
diff --git a/api/gobgp.pb.go b/api/gobgp.pb.go index 3feb7e64..b2ff2f8b 100644 --- a/api/gobgp.pb.go +++ b/api/gobgp.pb.go @@ -481,6 +481,7 @@ func (x Conditions_RouteType) String() string { func (Conditions_RouteType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{120, 0} } type GetNeighborRequest struct { + EnableAdvertised bool `protobuf:"varint,1,opt,name=enableAdvertised" json:"enableAdvertised,omitempty"` } func (m *GetNeighborRequest) Reset() { *m = GetNeighborRequest{} } @@ -488,6 +489,13 @@ func (m *GetNeighborRequest) String() string { return proto.CompactTe func (*GetNeighborRequest) ProtoMessage() {} func (*GetNeighborRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } +func (m *GetNeighborRequest) GetEnableAdvertised() bool { + if m != nil { + return m.EnableAdvertised + } + return false +} + type GetNeighborResponse struct { Peers []*Peer `protobuf:"bytes,1,rep,name=peers" json:"peers,omitempty"` } @@ -515,6 +523,27 @@ func (m *Arguments) String() string { return proto.CompactTextString( func (*Arguments) ProtoMessage() {} func (*Arguments) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } +func (m *Arguments) GetResource() Resource { + if m != nil { + return m.Resource + } + return Resource_GLOBAL +} + +func (m *Arguments) GetFamily() uint32 { + if m != nil { + return m.Family + } + return 0 +} + +func (m *Arguments) GetName() string { + if m != nil { + return m.Name + } + return "" +} + type AddPathRequest struct { Resource Resource `protobuf:"varint,1,opt,name=resource,enum=gobgpapi.Resource" json:"resource,omitempty"` VrfId string `protobuf:"bytes,2,opt,name=vrf_id,json=vrfId" json:"vrf_id,omitempty"` @@ -526,6 +555,20 @@ func (m *AddPathRequest) String() string { return proto.CompactTextSt func (*AddPathRequest) ProtoMessage() {} func (*AddPathRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } +func (m *AddPathRequest) GetResource() Resource { + if m != nil { + return m.Resource + } + return Resource_GLOBAL +} + +func (m *AddPathRequest) GetVrfId() string { + if m != nil { + return m.VrfId + } + return "" +} + func (m *AddPathRequest) GetPath() *Path { if m != nil { return m.Path @@ -542,6 +585,13 @@ func (m *AddPathResponse) String() string { return proto.CompactTextS func (*AddPathResponse) ProtoMessage() {} func (*AddPathResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } +func (m *AddPathResponse) GetUuid() []byte { + if m != nil { + return m.Uuid + } + return nil +} + type DeletePathRequest struct { Resource Resource `protobuf:"varint,1,opt,name=resource,enum=gobgpapi.Resource" json:"resource,omitempty"` VrfId string `protobuf:"bytes,2,opt,name=vrf_id,json=vrfId" json:"vrf_id,omitempty"` @@ -555,6 +605,27 @@ func (m *DeletePathRequest) String() string { return proto.CompactTex func (*DeletePathRequest) ProtoMessage() {} func (*DeletePathRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } +func (m *DeletePathRequest) GetResource() Resource { + if m != nil { + return m.Resource + } + return Resource_GLOBAL +} + +func (m *DeletePathRequest) GetVrfId() string { + if m != nil { + return m.VrfId + } + return "" +} + +func (m *DeletePathRequest) GetFamily() uint32 { + if m != nil { + return m.Family + } + return 0 +} + func (m *DeletePathRequest) GetPath() *Path { if m != nil { return m.Path @@ -562,6 +633,13 @@ func (m *DeletePathRequest) GetPath() *Path { return nil } +func (m *DeletePathRequest) GetUuid() []byte { + if m != nil { + return m.Uuid + } + return nil +} + type DeletePathResponse struct { } @@ -627,6 +705,13 @@ func (m *ResetNeighborRequest) String() string { return proto.Compact func (*ResetNeighborRequest) ProtoMessage() {} func (*ResetNeighborRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} } +func (m *ResetNeighborRequest) GetAddress() string { + if m != nil { + return m.Address + } + return "" +} + type ResetNeighborResponse struct { } @@ -645,6 +730,20 @@ func (m *SoftResetNeighborRequest) String() string { return proto.Com func (*SoftResetNeighborRequest) ProtoMessage() {} func (*SoftResetNeighborRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} } +func (m *SoftResetNeighborRequest) GetAddress() string { + if m != nil { + return m.Address + } + return "" +} + +func (m *SoftResetNeighborRequest) GetDirection() SoftResetNeighborRequest_SoftResetDirection { + if m != nil { + return m.Direction + } + return SoftResetNeighborRequest_IN +} + type SoftResetNeighborResponse struct { } @@ -662,6 +761,13 @@ func (m *ShutdownNeighborRequest) String() string { return proto.Comp func (*ShutdownNeighborRequest) ProtoMessage() {} func (*ShutdownNeighborRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} } +func (m *ShutdownNeighborRequest) GetAddress() string { + if m != nil { + return m.Address + } + return "" +} + type ShutdownNeighborResponse struct { } @@ -679,6 +785,13 @@ func (m *EnableNeighborRequest) String() string { return proto.Compac func (*EnableNeighborRequest) ProtoMessage() {} func (*EnableNeighborRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{17} } +func (m *EnableNeighborRequest) GetAddress() string { + if m != nil { + return m.Address + } + return "" +} + type EnableNeighborResponse struct { } @@ -696,6 +809,13 @@ func (m *DisableNeighborRequest) String() string { return proto.Compa func (*DisableNeighborRequest) ProtoMessage() {} func (*DisableNeighborRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{19} } +func (m *DisableNeighborRequest) GetAddress() string { + if m != nil { + return m.Address + } + return "" +} + type DisableNeighborResponse struct { } @@ -715,6 +835,27 @@ func (m *EnableMrtRequest) String() string { return proto.CompactText func (*EnableMrtRequest) ProtoMessage() {} func (*EnableMrtRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{21} } +func (m *EnableMrtRequest) GetDumpType() int32 { + if m != nil { + return m.DumpType + } + return 0 +} + +func (m *EnableMrtRequest) GetFilename() string { + if m != nil { + return m.Filename + } + return "" +} + +func (m *EnableMrtRequest) GetInterval() uint64 { + if m != nil { + return m.Interval + } + return 0 +} + type EnableMrtResponse struct { } @@ -750,6 +891,20 @@ func (m *InjectMrtRequest) String() string { return proto.CompactText func (*InjectMrtRequest) ProtoMessage() {} func (*InjectMrtRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{25} } +func (m *InjectMrtRequest) GetResource() Resource { + if m != nil { + return m.Resource + } + return Resource_GLOBAL +} + +func (m *InjectMrtRequest) GetVrfId() string { + if m != nil { + return m.VrfId + } + return "" +} + func (m *InjectMrtRequest) GetPaths() []*Path { if m != nil { return m.Paths @@ -776,6 +931,27 @@ func (m *AddBmpRequest) String() string { return proto.CompactTextStr func (*AddBmpRequest) ProtoMessage() {} func (*AddBmpRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{27} } +func (m *AddBmpRequest) GetAddress() string { + if m != nil { + return m.Address + } + return "" +} + +func (m *AddBmpRequest) GetPort() uint32 { + if m != nil { + return m.Port + } + return 0 +} + +func (m *AddBmpRequest) GetType() AddBmpRequest_MonitoringPolicy { + if m != nil { + return m.Type + } + return AddBmpRequest_PRE +} + type AddBmpResponse struct { } @@ -794,6 +970,20 @@ func (m *DeleteBmpRequest) String() string { return proto.CompactText func (*DeleteBmpRequest) ProtoMessage() {} func (*DeleteBmpRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{29} } +func (m *DeleteBmpRequest) GetAddress() string { + if m != nil { + return m.Address + } + return "" +} + +func (m *DeleteBmpRequest) GetPort() uint32 { + if m != nil { + return m.Port + } + return 0 +} + type DeleteBmpResponse struct { } @@ -812,6 +1002,20 @@ func (m *RPKIConf) String() string { return proto.CompactTextString(m func (*RPKIConf) ProtoMessage() {} func (*RPKIConf) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{31} } +func (m *RPKIConf) GetAddress() string { + if m != nil { + return m.Address + } + return "" +} + +func (m *RPKIConf) GetRemotePort() string { + if m != nil { + return m.RemotePort + } + return "" +} + type RPKIState struct { Uptime int64 `protobuf:"varint,1,opt,name=uptime" json:"uptime,omitempty"` Downtime int64 `protobuf:"varint,2,opt,name=downtime" json:"downtime,omitempty"` @@ -837,6 +1041,125 @@ func (m *RPKIState) String() string { return proto.CompactTextString( func (*RPKIState) ProtoMessage() {} func (*RPKIState) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{32} } +func (m *RPKIState) GetUptime() int64 { + if m != nil { + return m.Uptime + } + return 0 +} + +func (m *RPKIState) GetDowntime() int64 { + if m != nil { + return m.Downtime + } + return 0 +} + +func (m *RPKIState) GetUp() bool { + if m != nil { + return m.Up + } + return false +} + +func (m *RPKIState) GetRecordIpv4() uint32 { + if m != nil { + return m.RecordIpv4 + } + return 0 +} + +func (m *RPKIState) GetRecordIpv6() uint32 { + if m != nil { + return m.RecordIpv6 + } + return 0 +} + +func (m *RPKIState) GetPrefixIpv4() uint32 { + if m != nil { + return m.PrefixIpv4 + } + return 0 +} + +func (m *RPKIState) GetPrefixIpv6() uint32 { + if m != nil { + return m.PrefixIpv6 + } + return 0 +} + +func (m *RPKIState) GetSerial() uint32 { + if m != nil { + return m.Serial + } + return 0 +} + +func (m *RPKIState) GetReceivedIpv4() int64 { + if m != nil { + return m.ReceivedIpv4 + } + return 0 +} + +func (m *RPKIState) GetReceivedIpv6() int64 { + if m != nil { + return m.ReceivedIpv6 + } + return 0 +} + +func (m *RPKIState) GetSerialNotify() int64 { + if m != nil { + return m.SerialNotify + } + return 0 +} + +func (m *RPKIState) GetCacheReset() int64 { + if m != nil { + return m.CacheReset + } + return 0 +} + +func (m *RPKIState) GetCacheResponse() int64 { + if m != nil { + return m.CacheResponse + } + return 0 +} + +func (m *RPKIState) GetEndOfData() int64 { + if m != nil { + return m.EndOfData + } + return 0 +} + +func (m *RPKIState) GetError() int64 { + if m != nil { + return m.Error + } + return 0 +} + +func (m *RPKIState) GetSerialQuery() int64 { + if m != nil { + return m.SerialQuery + } + return 0 +} + +func (m *RPKIState) GetResetQuery() int64 { + if m != nil { + return m.ResetQuery + } + return 0 +} + type Rpki struct { Conf *RPKIConf `protobuf:"bytes,1,opt,name=conf" json:"conf,omitempty"` State *RPKIState `protobuf:"bytes,2,opt,name=state" json:"state,omitempty"` @@ -870,6 +1193,13 @@ func (m *GetRpkiRequest) String() string { return proto.CompactTextSt func (*GetRpkiRequest) ProtoMessage() {} func (*GetRpkiRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{34} } +func (m *GetRpkiRequest) GetFamily() uint32 { + if m != nil { + return m.Family + } + return 0 +} + type GetRpkiResponse struct { Servers []*Rpki `protobuf:"bytes,1,rep,name=servers" json:"servers,omitempty"` } @@ -897,6 +1227,27 @@ func (m *AddRpkiRequest) String() string { return proto.CompactTextSt func (*AddRpkiRequest) ProtoMessage() {} func (*AddRpkiRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{36} } +func (m *AddRpkiRequest) GetAddress() string { + if m != nil { + return m.Address + } + return "" +} + +func (m *AddRpkiRequest) GetPort() uint32 { + if m != nil { + return m.Port + } + return 0 +} + +func (m *AddRpkiRequest) GetLifetime() int64 { + if m != nil { + return m.Lifetime + } + return 0 +} + type AddRpkiResponse struct { } @@ -915,6 +1266,20 @@ func (m *DeleteRpkiRequest) String() string { return proto.CompactTex func (*DeleteRpkiRequest) ProtoMessage() {} func (*DeleteRpkiRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{38} } +func (m *DeleteRpkiRequest) GetAddress() string { + if m != nil { + return m.Address + } + return "" +} + +func (m *DeleteRpkiRequest) GetPort() uint32 { + if m != nil { + return m.Port + } + return 0 +} + type DeleteRpkiResponse struct { } @@ -932,6 +1297,13 @@ func (m *EnableRpkiRequest) String() string { return proto.CompactTex func (*EnableRpkiRequest) ProtoMessage() {} func (*EnableRpkiRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{40} } +func (m *EnableRpkiRequest) GetAddress() string { + if m != nil { + return m.Address + } + return "" +} + type EnableRpkiResponse struct { } @@ -949,6 +1321,13 @@ func (m *DisableRpkiRequest) String() string { return proto.CompactTe func (*DisableRpkiRequest) ProtoMessage() {} func (*DisableRpkiRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{42} } +func (m *DisableRpkiRequest) GetAddress() string { + if m != nil { + return m.Address + } + return "" +} + type DisableRpkiResponse struct { } @@ -966,6 +1345,13 @@ func (m *ResetRpkiRequest) String() string { return proto.CompactText func (*ResetRpkiRequest) ProtoMessage() {} func (*ResetRpkiRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{44} } +func (m *ResetRpkiRequest) GetAddress() string { + if m != nil { + return m.Address + } + return "" +} + type ResetRpkiResponse struct { } @@ -983,6 +1369,13 @@ func (m *SoftResetRpkiRequest) String() string { return proto.Compact func (*SoftResetRpkiRequest) ProtoMessage() {} func (*SoftResetRpkiRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{46} } +func (m *SoftResetRpkiRequest) GetAddress() string { + if m != nil { + return m.Address + } + return "" +} + type SoftResetRpkiResponse struct { } @@ -1002,6 +1395,27 @@ func (m *EnableZebraRequest) String() string { return proto.CompactTe func (*EnableZebraRequest) ProtoMessage() {} func (*EnableZebraRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{48} } +func (m *EnableZebraRequest) GetUrl() string { + if m != nil { + return m.Url + } + return "" +} + +func (m *EnableZebraRequest) GetRouteTypes() []string { + if m != nil { + return m.RouteTypes + } + return nil +} + +func (m *EnableZebraRequest) GetVersion() uint32 { + if m != nil { + return m.Version + } + return 0 +} + type EnableZebraResponse struct { } @@ -1091,6 +1505,13 @@ func (m *GetDefinedSetRequest) String() string { return proto.Compact func (*GetDefinedSetRequest) ProtoMessage() {} func (*GetDefinedSetRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{56} } +func (m *GetDefinedSetRequest) GetType() DefinedType { + if m != nil { + return m.Type + } + return DefinedType_PREFIX +} + type GetDefinedSetResponse struct { Sets []*DefinedSet `protobuf:"bytes,1,rep,name=sets" json:"sets,omitempty"` } @@ -1148,6 +1569,13 @@ func (m *DeleteDefinedSetRequest) GetSet() *DefinedSet { return nil } +func (m *DeleteDefinedSetRequest) GetAll() bool { + if m != nil { + return m.All + } + return false +} + type DeleteDefinedSetResponse struct { } @@ -1245,6 +1673,13 @@ func (m *DeleteStatementRequest) GetStatement() *Statement { return nil } +func (m *DeleteStatementRequest) GetAll() bool { + if m != nil { + return m.All + } + return false +} + type DeleteStatementResponse struct { } @@ -1320,6 +1755,13 @@ func (m *AddPolicyRequest) GetPolicy() *Policy { return nil } +func (m *AddPolicyRequest) GetReferExistingStatements() bool { + if m != nil { + return m.ReferExistingStatements + } + return false +} + type AddPolicyResponse struct { } @@ -1348,6 +1790,20 @@ func (m *DeletePolicyRequest) GetPolicy() *Policy { return nil } +func (m *DeletePolicyRequest) GetPreserveStatements() bool { + if m != nil { + return m.PreserveStatements + } + return false +} + +func (m *DeletePolicyRequest) GetAll() bool { + if m != nil { + return m.All + } + return false +} + type DeletePolicyResponse struct { } @@ -1378,6 +1834,20 @@ func (m *ReplacePolicyRequest) GetPolicy() *Policy { return nil } +func (m *ReplacePolicyRequest) GetReferExistingStatements() bool { + if m != nil { + return m.ReferExistingStatements + } + return false +} + +func (m *ReplacePolicyRequest) GetPreserveStatements() bool { + if m != nil { + return m.PreserveStatements + } + return false +} + type ReplacePolicyResponse struct { } @@ -1459,6 +1929,13 @@ func (m *DeletePolicyAssignmentRequest) GetAssignment() *PolicyAssignment { return nil } +func (m *DeletePolicyAssignmentRequest) GetAll() bool { + if m != nil { + return m.All + } + return false +} + type DeletePolicyAssignmentResponse struct { } @@ -1579,6 +2056,104 @@ func (m *Path) String() string { return proto.CompactTextString(m) } func (*Path) ProtoMessage() {} func (*Path) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{94} } +func (m *Path) GetNlri() []byte { + if m != nil { + return m.Nlri + } + return nil +} + +func (m *Path) GetPattrs() [][]byte { + if m != nil { + return m.Pattrs + } + return nil +} + +func (m *Path) GetAge() int64 { + if m != nil { + return m.Age + } + return 0 +} + +func (m *Path) GetBest() bool { + if m != nil { + return m.Best + } + return false +} + +func (m *Path) GetIsWithdraw() bool { + if m != nil { + return m.IsWithdraw + } + return false +} + +func (m *Path) GetValidation() int32 { + if m != nil { + return m.Validation + } + return 0 +} + +func (m *Path) GetNoImplicitWithdraw() bool { + if m != nil { + return m.NoImplicitWithdraw + } + return false +} + +func (m *Path) GetFamily() uint32 { + if m != nil { + return m.Family + } + return 0 +} + +func (m *Path) GetSourceAsn() uint32 { + if m != nil { + return m.SourceAsn + } + return 0 +} + +func (m *Path) GetSourceId() string { + if m != nil { + return m.SourceId + } + return "" +} + +func (m *Path) GetFiltered() bool { + if m != nil { + return m.Filtered + } + return false +} + +func (m *Path) GetStale() bool { + if m != nil { + return m.Stale + } + return false +} + +func (m *Path) GetIsFromExternal() bool { + if m != nil { + return m.IsFromExternal + } + return false +} + +func (m *Path) GetNeighborIp() string { + if m != nil { + return m.NeighborIp + } + return "" +} + type Destination struct { Prefix string `protobuf:"bytes,1,opt,name=prefix" json:"prefix,omitempty"` Paths []*Path `protobuf:"bytes,2,rep,name=paths" json:"paths,omitempty"` @@ -1591,6 +2166,13 @@ func (m *Destination) String() string { return proto.CompactTextStrin func (*Destination) ProtoMessage() {} func (*Destination) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{95} } +func (m *Destination) GetPrefix() string { + if m != nil { + return m.Prefix + } + return "" +} + func (m *Destination) GetPaths() []*Path { if m != nil { return m.Paths @@ -1598,6 +2180,20 @@ func (m *Destination) GetPaths() []*Path { return nil } +func (m *Destination) GetLongerPrefixes() bool { + if m != nil { + return m.LongerPrefixes + } + return false +} + +func (m *Destination) GetShorterPrefixes() bool { + if m != nil { + return m.ShorterPrefixes + } + return false +} + type Table struct { Type Resource `protobuf:"varint,1,opt,name=type,enum=gobgpapi.Resource" json:"type,omitempty"` Name string `protobuf:"bytes,2,opt,name=name" json:"name,omitempty"` @@ -1611,6 +2207,27 @@ func (m *Table) String() string { return proto.CompactTextString(m) } func (*Table) ProtoMessage() {} func (*Table) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{96} } +func (m *Table) GetType() Resource { + if m != nil { + return m.Type + } + return Resource_GLOBAL +} + +func (m *Table) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *Table) GetFamily() uint32 { + if m != nil { + return m.Family + } + return 0 +} + func (m *Table) GetDestinations() []*Destination { if m != nil { return m.Destinations @@ -1618,6 +2235,13 @@ func (m *Table) GetDestinations() []*Destination { return nil } +func (m *Table) GetPostPolicy() bool { + if m != nil { + return m.PostPolicy + } + return false +} + type GetRibRequest struct { Table *Table `protobuf:"bytes,1,opt,name=table" json:"table,omitempty"` } @@ -1661,6 +2285,27 @@ func (m *ValidateRibRequest) String() string { return proto.CompactTe func (*ValidateRibRequest) ProtoMessage() {} func (*ValidateRibRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{99} } +func (m *ValidateRibRequest) GetType() Resource { + if m != nil { + return m.Type + } + return Resource_GLOBAL +} + +func (m *ValidateRibRequest) GetFamily() uint32 { + if m != nil { + return m.Family + } + return 0 +} + +func (m *ValidateRibRequest) GetPrefix() string { + if m != nil { + return m.Prefix + } + return "" +} + type ValidateRibResponse struct { } @@ -1686,6 +2331,13 @@ func (m *Peer) String() string { return proto.CompactTextString(m) } func (*Peer) ProtoMessage() {} func (*Peer) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{101} } +func (m *Peer) GetFamilies() []uint32 { + if m != nil { + return m.Families + } + return nil +} + func (m *Peer) GetApplyPolicy() *ApplyPolicy { if m != nil { return m.ApplyPolicy @@ -1785,6 +2437,27 @@ func (m *PrefixLimit) String() string { return proto.CompactTextStrin func (*PrefixLimit) ProtoMessage() {} func (*PrefixLimit) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{103} } +func (m *PrefixLimit) GetFamily() uint32 { + if m != nil { + return m.Family + } + return 0 +} + +func (m *PrefixLimit) GetMaxPrefixes() uint32 { + if m != nil { + return m.MaxPrefixes + } + return 0 +} + +func (m *PrefixLimit) GetShutdownThresholdPct() uint32 { + if m != nil { + return m.ShutdownThresholdPct + } + return 0 +} + type PeerConf struct { AuthPassword string `protobuf:"bytes,1,opt,name=auth_password,json=authPassword" json:"auth_password,omitempty"` Description string `protobuf:"bytes,2,opt,name=description" json:"description,omitempty"` @@ -1810,6 +2483,97 @@ func (m *PeerConf) String() string { return proto.CompactTextString(m func (*PeerConf) ProtoMessage() {} func (*PeerConf) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{104} } +func (m *PeerConf) GetAuthPassword() string { + if m != nil { + return m.AuthPassword + } + return "" +} + +func (m *PeerConf) GetDescription() string { + if m != nil { + return m.Description + } + return "" +} + +func (m *PeerConf) GetLocalAs() uint32 { + if m != nil { + return m.LocalAs + } + return 0 +} + +func (m *PeerConf) GetNeighborAddress() string { + if m != nil { + return m.NeighborAddress + } + return "" +} + +func (m *PeerConf) GetPeerAs() uint32 { + if m != nil { + return m.PeerAs + } + return 0 +} + +func (m *PeerConf) GetPeerGroup() string { + if m != nil { + return m.PeerGroup + } + return "" +} + +func (m *PeerConf) GetPeerType() uint32 { + if m != nil { + return m.PeerType + } + return 0 +} + +func (m *PeerConf) GetRemovePrivateAs() uint32 { + if m != nil { + return m.RemovePrivateAs + } + return 0 +} + +func (m *PeerConf) GetRouteFlapDamping() bool { + if m != nil { + return m.RouteFlapDamping + } + return false +} + +func (m *PeerConf) GetSendCommunity() uint32 { + if m != nil { + return m.SendCommunity + } + return 0 +} + +func (m *PeerConf) GetRemoteCap() [][]byte { + if m != nil { + return m.RemoteCap + } + return nil +} + +func (m *PeerConf) GetLocalCap() [][]byte { + if m != nil { + return m.LocalCap + } + return nil +} + +func (m *PeerConf) GetId() string { + if m != nil { + return m.Id + } + return "" +} + func (m *PeerConf) GetPrefixLimits() []*PrefixLimit { if m != nil { return m.PrefixLimits @@ -1817,6 +2581,27 @@ func (m *PeerConf) GetPrefixLimits() []*PrefixLimit { return nil } +func (m *PeerConf) GetLocalAddress() string { + if m != nil { + return m.LocalAddress + } + return "" +} + +func (m *PeerConf) GetNeighborInterface() string { + if m != nil { + return m.NeighborInterface + } + return "" +} + +func (m *PeerConf) GetVrf() string { + if m != nil { + return m.Vrf + } + return "" +} + type EbgpMultihop struct { Enabled bool `protobuf:"varint,1,opt,name=enabled" json:"enabled,omitempty"` MultihopTtl uint32 `protobuf:"varint,2,opt,name=multihop_ttl,json=multihopTtl" json:"multihop_ttl,omitempty"` @@ -1827,6 +2612,20 @@ func (m *EbgpMultihop) String() string { return proto.CompactTextStri func (*EbgpMultihop) ProtoMessage() {} func (*EbgpMultihop) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{105} } +func (m *EbgpMultihop) GetEnabled() bool { + if m != nil { + return m.Enabled + } + return false +} + +func (m *EbgpMultihop) GetMultihopTtl() uint32 { + if m != nil { + return m.MultihopTtl + } + return 0 +} + type RouteReflector struct { RouteReflectorClient bool `protobuf:"varint,1,opt,name=route_reflector_client,json=routeReflectorClient" json:"route_reflector_client,omitempty"` RouteReflectorClusterId string `protobuf:"bytes,2,opt,name=route_reflector_cluster_id,json=routeReflectorClusterId" json:"route_reflector_cluster_id,omitempty"` @@ -1837,6 +2636,20 @@ func (m *RouteReflector) String() string { return proto.CompactTextSt func (*RouteReflector) ProtoMessage() {} func (*RouteReflector) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{106} } +func (m *RouteReflector) GetRouteReflectorClient() bool { + if m != nil { + return m.RouteReflectorClient + } + return false +} + +func (m *RouteReflector) GetRouteReflectorClusterId() string { + if m != nil { + return m.RouteReflectorClusterId + } + return "" +} + type PeerState struct { AuthPassword string `protobuf:"bytes,1,opt,name=auth_password,json=authPassword" json:"auth_password,omitempty"` Description string `protobuf:"bytes,2,opt,name=description" json:"description,omitempty"` @@ -1866,6 +2679,27 @@ func (m *PeerState) String() string { return proto.CompactTextString( func (*PeerState) ProtoMessage() {} func (*PeerState) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{107} } +func (m *PeerState) GetAuthPassword() string { + if m != nil { + return m.AuthPassword + } + return "" +} + +func (m *PeerState) GetDescription() string { + if m != nil { + return m.Description + } + return "" +} + +func (m *PeerState) GetLocalAs() uint32 { + if m != nil { + return m.LocalAs + } + return 0 +} + func (m *PeerState) GetMessages() *Messages { if m != nil { return m.Messages @@ -1873,6 +2707,34 @@ func (m *PeerState) GetMessages() *Messages { return nil } +func (m *PeerState) GetNeighborAddress() string { + if m != nil { + return m.NeighborAddress + } + return "" +} + +func (m *PeerState) GetPeerAs() uint32 { + if m != nil { + return m.PeerAs + } + return 0 +} + +func (m *PeerState) GetPeerGroup() string { + if m != nil { + return m.PeerGroup + } + return "" +} + +func (m *PeerState) GetPeerType() uint32 { + if m != nil { + return m.PeerType + } + return 0 +} + func (m *PeerState) GetQueues() *Queues { if m != nil { return m.Queues @@ -1880,6 +2742,90 @@ func (m *PeerState) GetQueues() *Queues { return nil } +func (m *PeerState) GetRemovePrivateAs() uint32 { + if m != nil { + return m.RemovePrivateAs + } + return 0 +} + +func (m *PeerState) GetRouteFlapDamping() bool { + if m != nil { + return m.RouteFlapDamping + } + return false +} + +func (m *PeerState) GetSendCommunity() uint32 { + if m != nil { + return m.SendCommunity + } + return 0 +} + +func (m *PeerState) GetSessionState() uint32 { + if m != nil { + return m.SessionState + } + return 0 +} + +func (m *PeerState) GetSupportedCapabilities() []string { + if m != nil { + return m.SupportedCapabilities + } + return nil +} + +func (m *PeerState) GetBgpState() string { + if m != nil { + return m.BgpState + } + return "" +} + +func (m *PeerState) GetAdminState() PeerState_AdminState { + if m != nil { + return m.AdminState + } + return PeerState_UP +} + +func (m *PeerState) GetReceived() uint32 { + if m != nil { + return m.Received + } + return 0 +} + +func (m *PeerState) GetAccepted() uint32 { + if m != nil { + return m.Accepted + } + return 0 +} + +func (m *PeerState) GetAdvertised() uint32 { + if m != nil { + return m.Advertised + } + return 0 +} + +func (m *PeerState) GetOutQ() uint32 { + if m != nil { + return m.OutQ + } + return 0 +} + +func (m *PeerState) GetFlops() uint32 { + if m != nil { + return m.Flops + } + return 0 +} + type Messages struct { Received *Message `protobuf:"bytes,1,opt,name=received" json:"received,omitempty"` Sent *Message `protobuf:"bytes,2,opt,name=sent" json:"sent,omitempty"` @@ -1905,13 +2851,13 @@ func (m *Messages) GetSent() *Message { } type Message struct { - NOTIFICATION uint64 `protobuf:"varint,1,opt,name=NOTIFICATION,json=nOTIFICATION" json:"NOTIFICATION,omitempty"` - UPDATE uint64 `protobuf:"varint,2,opt,name=UPDATE,json=uPDATE" json:"UPDATE,omitempty"` - OPEN uint64 `protobuf:"varint,3,opt,name=OPEN,json=oPEN" json:"OPEN,omitempty"` - KEEPALIVE uint64 `protobuf:"varint,4,opt,name=KEEPALIVE,json=kEEPALIVE" json:"KEEPALIVE,omitempty"` - REFRESH uint64 `protobuf:"varint,5,opt,name=REFRESH,json=rEFRESH" json:"REFRESH,omitempty"` - DISCARDED uint64 `protobuf:"varint,6,opt,name=DISCARDED,json=dISCARDED" json:"DISCARDED,omitempty"` - TOTAL uint64 `protobuf:"varint,7,opt,name=TOTAL,json=tOTAL" json:"TOTAL,omitempty"` + NOTIFICATION uint64 `protobuf:"varint,1,opt,name=NOTIFICATION" json:"NOTIFICATION,omitempty"` + UPDATE uint64 `protobuf:"varint,2,opt,name=UPDATE" json:"UPDATE,omitempty"` + OPEN uint64 `protobuf:"varint,3,opt,name=OPEN" json:"OPEN,omitempty"` + KEEPALIVE uint64 `protobuf:"varint,4,opt,name=KEEPALIVE" json:"KEEPALIVE,omitempty"` + REFRESH uint64 `protobuf:"varint,5,opt,name=REFRESH" json:"REFRESH,omitempty"` + DISCARDED uint64 `protobuf:"varint,6,opt,name=DISCARDED" json:"DISCARDED,omitempty"` + TOTAL uint64 `protobuf:"varint,7,opt,name=TOTAL" json:"TOTAL,omitempty"` } func (m *Message) Reset() { *m = Message{} } @@ -1919,6 +2865,55 @@ func (m *Message) String() string { return proto.CompactTextString(m) func (*Message) ProtoMessage() {} func (*Message) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{109} } +func (m *Message) GetNOTIFICATION() uint64 { + if m != nil { + return m.NOTIFICATION + } + return 0 +} + +func (m *Message) GetUPDATE() uint64 { + if m != nil { + return m.UPDATE + } + return 0 +} + +func (m *Message) GetOPEN() uint64 { + if m != nil { + return m.OPEN + } + return 0 +} + +func (m *Message) GetKEEPALIVE() uint64 { + if m != nil { + return m.KEEPALIVE + } + return 0 +} + +func (m *Message) GetREFRESH() uint64 { + if m != nil { + return m.REFRESH + } + return 0 +} + +func (m *Message) GetDISCARDED() uint64 { + if m != nil { + return m.DISCARDED + } + return 0 +} + +func (m *Message) GetTOTAL() uint64 { + if m != nil { + return m.TOTAL + } + return 0 +} + type Queues struct { Input uint32 `protobuf:"varint,1,opt,name=input" json:"input,omitempty"` Output uint32 `protobuf:"varint,2,opt,name=output" json:"output,omitempty"` @@ -1929,6 +2924,20 @@ func (m *Queues) String() string { return proto.CompactTextString(m) func (*Queues) ProtoMessage() {} func (*Queues) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{110} } +func (m *Queues) GetInput() uint32 { + if m != nil { + return m.Input + } + return 0 +} + +func (m *Queues) GetOutput() uint32 { + if m != nil { + return m.Output + } + return 0 +} + type Timers struct { Config *TimersConfig `protobuf:"bytes,1,opt,name=config" json:"config,omitempty"` State *TimersState `protobuf:"bytes,2,opt,name=state" json:"state,omitempty"` @@ -1965,6 +2974,34 @@ func (m *TimersConfig) String() string { return proto.CompactTextStri func (*TimersConfig) ProtoMessage() {} func (*TimersConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{112} } +func (m *TimersConfig) GetConnectRetry() uint64 { + if m != nil { + return m.ConnectRetry + } + return 0 +} + +func (m *TimersConfig) GetHoldTime() uint64 { + if m != nil { + return m.HoldTime + } + return 0 +} + +func (m *TimersConfig) GetKeepaliveInterval() uint64 { + if m != nil { + return m.KeepaliveInterval + } + return 0 +} + +func (m *TimersConfig) GetMinimumAdvertisementInterval() uint64 { + if m != nil { + return m.MinimumAdvertisementInterval + } + return 0 +} + type TimersState struct { ConnectRetry uint64 `protobuf:"varint,1,opt,name=connect_retry,json=connectRetry" json:"connect_retry,omitempty"` HoldTime uint64 `protobuf:"varint,2,opt,name=hold_time,json=holdTime" json:"hold_time,omitempty"` @@ -1980,6 +3017,55 @@ func (m *TimersState) String() string { return proto.CompactTextStrin func (*TimersState) ProtoMessage() {} func (*TimersState) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{113} } +func (m *TimersState) GetConnectRetry() uint64 { + if m != nil { + return m.ConnectRetry + } + return 0 +} + +func (m *TimersState) GetHoldTime() uint64 { + if m != nil { + return m.HoldTime + } + return 0 +} + +func (m *TimersState) GetKeepaliveInterval() uint64 { + if m != nil { + return m.KeepaliveInterval + } + return 0 +} + +func (m *TimersState) GetMinimumAdvertisementInterval() uint64 { + if m != nil { + return m.MinimumAdvertisementInterval + } + return 0 +} + +func (m *TimersState) GetNegotiatedHoldTime() uint64 { + if m != nil { + return m.NegotiatedHoldTime + } + return 0 +} + +func (m *TimersState) GetUptime() uint64 { + if m != nil { + return m.Uptime + } + return 0 +} + +func (m *TimersState) GetDowntime() uint64 { + if m != nil { + return m.Downtime + } + return 0 +} + type Transport struct { LocalAddress string `protobuf:"bytes,1,opt,name=local_address,json=localAddress" json:"local_address,omitempty"` LocalPort uint32 `protobuf:"varint,2,opt,name=local_port,json=localPort" json:"local_port,omitempty"` @@ -1995,6 +3081,55 @@ func (m *Transport) String() string { return proto.CompactTextString( func (*Transport) ProtoMessage() {} func (*Transport) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{114} } +func (m *Transport) GetLocalAddress() string { + if m != nil { + return m.LocalAddress + } + return "" +} + +func (m *Transport) GetLocalPort() uint32 { + if m != nil { + return m.LocalPort + } + return 0 +} + +func (m *Transport) GetMtuDiscovery() bool { + if m != nil { + return m.MtuDiscovery + } + return false +} + +func (m *Transport) GetPassiveMode() bool { + if m != nil { + return m.PassiveMode + } + return false +} + +func (m *Transport) GetRemoteAddress() string { + if m != nil { + return m.RemoteAddress + } + return "" +} + +func (m *Transport) GetRemotePort() uint32 { + if m != nil { + return m.RemotePort + } + return 0 +} + +func (m *Transport) GetTcpMss() uint32 { + if m != nil { + return m.TcpMss + } + return 0 +} + type RouteServer struct { RouteServerClient bool `protobuf:"varint,1,opt,name=route_server_client,json=routeServerClient" json:"route_server_client,omitempty"` } @@ -2004,6 +3139,13 @@ func (m *RouteServer) String() string { return proto.CompactTextStrin func (*RouteServer) ProtoMessage() {} func (*RouteServer) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{115} } +func (m *RouteServer) GetRouteServerClient() bool { + if m != nil { + return m.RouteServerClient + } + return false +} + type Prefix struct { IpPrefix string `protobuf:"bytes,1,opt,name=ip_prefix,json=ipPrefix" json:"ip_prefix,omitempty"` MaskLengthMin uint32 `protobuf:"varint,2,opt,name=mask_length_min,json=maskLengthMin" json:"mask_length_min,omitempty"` @@ -2015,6 +3157,27 @@ func (m *Prefix) String() string { return proto.CompactTextString(m) func (*Prefix) ProtoMessage() {} func (*Prefix) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{116} } +func (m *Prefix) GetIpPrefix() string { + if m != nil { + return m.IpPrefix + } + return "" +} + +func (m *Prefix) GetMaskLengthMin() uint32 { + if m != nil { + return m.MaskLengthMin + } + return 0 +} + +func (m *Prefix) GetMaskLengthMax() uint32 { + if m != nil { + return m.MaskLengthMax + } + return 0 +} + type DefinedSet struct { Type DefinedType `protobuf:"varint,1,opt,name=type,enum=gobgpapi.DefinedType" json:"type,omitempty"` Name string `protobuf:"bytes,2,opt,name=name" json:"name,omitempty"` @@ -2027,6 +3190,27 @@ func (m *DefinedSet) String() string { return proto.CompactTextString func (*DefinedSet) ProtoMessage() {} func (*DefinedSet) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{117} } +func (m *DefinedSet) GetType() DefinedType { + if m != nil { + return m.Type + } + return DefinedType_PREFIX +} + +func (m *DefinedSet) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *DefinedSet) GetList() []string { + if m != nil { + return m.List + } + return nil +} + func (m *DefinedSet) GetPrefixes() []*Prefix { if m != nil { return m.Prefixes @@ -2044,6 +3228,20 @@ func (m *MatchSet) String() string { return proto.CompactTextString(m func (*MatchSet) ProtoMessage() {} func (*MatchSet) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{118} } +func (m *MatchSet) GetType() MatchType { + if m != nil { + return m.Type + } + return MatchType_ANY +} + +func (m *MatchSet) GetName() string { + if m != nil { + return m.Name + } + return "" +} + type AsPathLength struct { Type AsPathLengthType `protobuf:"varint,1,opt,name=type,enum=gobgpapi.AsPathLengthType" json:"type,omitempty"` Length uint32 `protobuf:"varint,2,opt,name=length" json:"length,omitempty"` @@ -2054,6 +3252,20 @@ func (m *AsPathLength) String() string { return proto.CompactTextStri func (*AsPathLength) ProtoMessage() {} func (*AsPathLength) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{119} } +func (m *AsPathLength) GetType() AsPathLengthType { + if m != nil { + return m.Type + } + return AsPathLengthType_EQ +} + +func (m *AsPathLength) GetLength() uint32 { + if m != nil { + return m.Length + } + return 0 +} + type Conditions struct { PrefixSet *MatchSet `protobuf:"bytes,1,opt,name=prefix_set,json=prefixSet" json:"prefix_set,omitempty"` NeighborSet *MatchSet `protobuf:"bytes,2,opt,name=neighbor_set,json=neighborSet" json:"neighbor_set,omitempty"` @@ -2113,6 +3325,20 @@ func (m *Conditions) GetExtCommunitySet() *MatchSet { return nil } +func (m *Conditions) GetRpkiResult() int32 { + if m != nil { + return m.RpkiResult + } + return 0 +} + +func (m *Conditions) GetRouteType() Conditions_RouteType { + if m != nil { + return m.RouteType + } + return Conditions_ROUTE_TYPE_NONE +} + func (m *Conditions) GetLargeCommunitySet() *MatchSet { if m != nil { return m.LargeCommunitySet @@ -2130,6 +3356,20 @@ func (m *CommunityAction) String() string { return proto.CompactTextS func (*CommunityAction) ProtoMessage() {} func (*CommunityAction) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{121} } +func (m *CommunityAction) GetType() CommunityActionType { + if m != nil { + return m.Type + } + return CommunityActionType_COMMUNITY_ADD +} + +func (m *CommunityAction) GetCommunities() []string { + if m != nil { + return m.Communities + } + return nil +} + type MedAction struct { Type MedActionType `protobuf:"varint,1,opt,name=type,enum=gobgpapi.MedActionType" json:"type,omitempty"` Value int64 `protobuf:"varint,2,opt,name=value" json:"value,omitempty"` @@ -2140,6 +3380,20 @@ func (m *MedAction) String() string { return proto.CompactTextString( func (*MedAction) ProtoMessage() {} func (*MedAction) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{122} } +func (m *MedAction) GetType() MedActionType { + if m != nil { + return m.Type + } + return MedActionType_MED_MOD +} + +func (m *MedAction) GetValue() int64 { + if m != nil { + return m.Value + } + return 0 +} + type AsPrependAction struct { Asn uint32 `protobuf:"varint,1,opt,name=asn" json:"asn,omitempty"` Repeat uint32 `protobuf:"varint,2,opt,name=repeat" json:"repeat,omitempty"` @@ -2151,6 +3405,27 @@ func (m *AsPrependAction) String() string { return proto.CompactTextS func (*AsPrependAction) ProtoMessage() {} func (*AsPrependAction) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{123} } +func (m *AsPrependAction) GetAsn() uint32 { + if m != nil { + return m.Asn + } + return 0 +} + +func (m *AsPrependAction) GetRepeat() uint32 { + if m != nil { + return m.Repeat + } + return 0 +} + +func (m *AsPrependAction) GetUseLeftMost() bool { + if m != nil { + return m.UseLeftMost + } + return false +} + type NexthopAction struct { Address string `protobuf:"bytes,1,opt,name=address" json:"address,omitempty"` Self bool `protobuf:"varint,2,opt,name=self" json:"self,omitempty"` @@ -2161,6 +3436,20 @@ func (m *NexthopAction) String() string { return proto.CompactTextStr func (*NexthopAction) ProtoMessage() {} func (*NexthopAction) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{124} } +func (m *NexthopAction) GetAddress() string { + if m != nil { + return m.Address + } + return "" +} + +func (m *NexthopAction) GetSelf() bool { + if m != nil { + return m.Self + } + return false +} + type LocalPrefAction struct { Value uint32 `protobuf:"varint,1,opt,name=value" json:"value,omitempty"` } @@ -2170,6 +3459,13 @@ func (m *LocalPrefAction) String() string { return proto.CompactTextS func (*LocalPrefAction) ProtoMessage() {} func (*LocalPrefAction) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{125} } +func (m *LocalPrefAction) GetValue() uint32 { + if m != nil { + return m.Value + } + return 0 +} + type Actions struct { RouteAction RouteAction `protobuf:"varint,1,opt,name=route_action,json=routeAction,enum=gobgpapi.RouteAction" json:"route_action,omitempty"` Community *CommunityAction `protobuf:"bytes,2,opt,name=community" json:"community,omitempty"` @@ -2186,6 +3482,13 @@ func (m *Actions) String() string { return proto.CompactTextString(m) func (*Actions) ProtoMessage() {} func (*Actions) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{126} } +func (m *Actions) GetRouteAction() RouteAction { + if m != nil { + return m.RouteAction + } + return RouteAction_NONE +} + func (m *Actions) GetCommunity() *CommunityAction { if m != nil { return m.Community @@ -2246,6 +3549,13 @@ func (m *Statement) String() string { return proto.CompactTextString( func (*Statement) ProtoMessage() {} func (*Statement) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{127} } +func (m *Statement) GetName() string { + if m != nil { + return m.Name + } + return "" +} + func (m *Statement) GetConditions() *Conditions { if m != nil { return m.Conditions @@ -2270,6 +3580,13 @@ func (m *Policy) String() string { return proto.CompactTextString(m) func (*Policy) ProtoMessage() {} func (*Policy) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{128} } +func (m *Policy) GetName() string { + if m != nil { + return m.Name + } + return "" +} + func (m *Policy) GetStatements() []*Statement { if m != nil { return m.Statements @@ -2290,6 +3607,27 @@ func (m *PolicyAssignment) String() string { return proto.CompactText func (*PolicyAssignment) ProtoMessage() {} func (*PolicyAssignment) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{129} } +func (m *PolicyAssignment) GetType() PolicyType { + if m != nil { + return m.Type + } + return PolicyType_IN +} + +func (m *PolicyAssignment) GetResource() Resource { + if m != nil { + return m.Resource + } + return Resource_GLOBAL +} + +func (m *PolicyAssignment) GetName() string { + if m != nil { + return m.Name + } + return "" +} + func (m *PolicyAssignment) GetPolicies() []*Policy { if m != nil { return m.Policies @@ -2297,6 +3635,13 @@ func (m *PolicyAssignment) GetPolicies() []*Policy { return nil } +func (m *PolicyAssignment) GetDefault() RouteAction { + if m != nil { + return m.Default + } + return RouteAction_NONE +} + type Roa struct { As uint32 `protobuf:"varint,1,opt,name=as" json:"as,omitempty"` Prefixlen uint32 `protobuf:"varint,2,opt,name=prefixlen" json:"prefixlen,omitempty"` @@ -2310,6 +3655,34 @@ func (m *Roa) String() string { return proto.CompactTextString(m) } func (*Roa) ProtoMessage() {} func (*Roa) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{130} } +func (m *Roa) GetAs() uint32 { + if m != nil { + return m.As + } + return 0 +} + +func (m *Roa) GetPrefixlen() uint32 { + if m != nil { + return m.Prefixlen + } + return 0 +} + +func (m *Roa) GetMaxlen() uint32 { + if m != nil { + return m.Maxlen + } + return 0 +} + +func (m *Roa) GetPrefix() string { + if m != nil { + return m.Prefix + } + return "" +} + func (m *Roa) GetConf() *RPKIConf { if m != nil { return m.Conf @@ -2326,6 +3699,13 @@ func (m *GetRoaRequest) String() string { return proto.CompactTextStr func (*GetRoaRequest) ProtoMessage() {} func (*GetRoaRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{131} } +func (m *GetRoaRequest) GetFamily() uint32 { + if m != nil { + return m.Family + } + return 0 +} + type GetRoaResponse struct { Roas []*Roa `protobuf:"bytes,1,rep,name=roas" json:"roas,omitempty"` } @@ -2355,6 +3735,41 @@ func (m *Vrf) String() string { return proto.CompactTextString(m) } func (*Vrf) ProtoMessage() {} func (*Vrf) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{133} } +func (m *Vrf) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *Vrf) GetRd() []byte { + if m != nil { + return m.Rd + } + return nil +} + +func (m *Vrf) GetImportRt() [][]byte { + if m != nil { + return m.ImportRt + } + return nil +} + +func (m *Vrf) GetExportRt() [][]byte { + if m != nil { + return m.ExportRt + } + return nil +} + +func (m *Vrf) GetId() uint32 { + if m != nil { + return m.Id + } + return 0 +} + type Global struct { As uint32 `protobuf:"varint,1,opt,name=as" json:"as,omitempty"` RouterId string `protobuf:"bytes,2,opt,name=router_id,json=routerId" json:"router_id,omitempty"` @@ -2369,6 +3784,48 @@ func (m *Global) String() string { return proto.CompactTextString(m) func (*Global) ProtoMessage() {} func (*Global) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{134} } +func (m *Global) GetAs() uint32 { + if m != nil { + return m.As + } + return 0 +} + +func (m *Global) GetRouterId() string { + if m != nil { + return m.RouterId + } + return "" +} + +func (m *Global) GetListenPort() int32 { + if m != nil { + return m.ListenPort + } + return 0 +} + +func (m *Global) GetListenAddresses() []string { + if m != nil { + return m.ListenAddresses + } + return nil +} + +func (m *Global) GetFamilies() []uint32 { + if m != nil { + return m.Families + } + return nil +} + +func (m *Global) GetUseMultiplePaths() bool { + if m != nil { + return m.UseMultiplePaths + } + return false +} + type TableInfo struct { Type Resource `protobuf:"varint,1,opt,name=type,enum=gobgpapi.Resource" json:"type,omitempty"` Name string `protobuf:"bytes,2,opt,name=name" json:"name,omitempty"` @@ -2383,6 +3840,48 @@ func (m *TableInfo) String() string { return proto.CompactTextString( func (*TableInfo) ProtoMessage() {} func (*TableInfo) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{135} } +func (m *TableInfo) GetType() Resource { + if m != nil { + return m.Type + } + return Resource_GLOBAL +} + +func (m *TableInfo) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *TableInfo) GetFamily() uint32 { + if m != nil { + return m.Family + } + return 0 +} + +func (m *TableInfo) GetNumDestination() uint64 { + if m != nil { + return m.NumDestination + } + return 0 +} + +func (m *TableInfo) GetNumPath() uint64 { + if m != nil { + return m.NumPath + } + return 0 +} + +func (m *TableInfo) GetNumAccepted() uint64 { + if m != nil { + return m.NumAccepted + } + return 0 +} + type GetRibInfoRequest struct { Info *TableInfo `protobuf:"bytes,1,opt,name=info" json:"info,omitempty"` } @@ -4382,356 +5881,353 @@ var _GobgpApi_serviceDesc = grpc.ServiceDesc{ func init() { proto.RegisterFile("gobgp.proto", fileDescriptor0) } var fileDescriptor0 = []byte{ - // 5603 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xd4, 0x3c, 0xcb, 0x72, 0x1b, 0x49, - 0x72, 0xc4, 0x83, 0x20, 0x90, 0x78, 0x10, 0x2c, 0xbe, 0x20, 0xe8, 0xdd, 0xbb, 0x5a, 0x51, 0xda, - 0x19, 0xcd, 0x8c, 0x66, 0x56, 0xb3, 0x5e, 0xcd, 0xcc, 0x2e, 0x44, 0x42, 0x14, 0x76, 0xf8, 0xc0, - 0x14, 0x21, 0xad, 0x66, 0xfd, 0x68, 0x37, 0xd1, 0x05, 0xb2, 0x3d, 0x8d, 0xee, 0x9e, 0xee, 0x02, - 0x87, 0x0a, 0x47, 0xd8, 0x11, 0xeb, 0xa3, 0xc3, 0x7f, 0xb0, 0x11, 0xbe, 0x6f, 0xd8, 0x07, 0x9f, - 0x1c, 0xe1, 0xb3, 0xd7, 0xe1, 0x08, 0x47, 0xf8, 0xea, 0x83, 0x0f, 0xfe, 0x04, 0x5f, 0x7d, 0x74, - 0xd4, 0xa3, 0xbb, 0xab, 0x1f, 0xa0, 0x28, 0x59, 0x6b, 0x87, 0x4f, 0x44, 0x67, 0x66, 0x65, 0x65, - 0x55, 0x65, 0x66, 0x65, 0x65, 0x55, 0x12, 0xea, 0x27, 0xee, 0xf1, 0x89, 0xf7, 0xc0, 0xf3, 0x5d, - 0xea, 0xa2, 0x2a, 0xff, 0x30, 0x3c, 0x4b, 0x5b, 0x03, 0xb4, 0x4b, 0xe8, 0x01, 0xb1, 0x4e, 0x4e, - 0x8f, 0x5d, 0x1f, 0x93, 0x6f, 0x67, 0x24, 0xa0, 0xda, 0x63, 0x58, 0x4d, 0x40, 0x03, 0xcf, 0x75, - 0x02, 0x82, 0xbe, 0x0f, 0x8b, 0x1e, 0x21, 0x7e, 0xd0, 0x29, 0xdc, 0x2a, 0x6d, 0xd5, 0x1f, 0xb6, - 0x1e, 0x84, 0x6c, 0x1e, 0x0c, 0x09, 0xf1, 0xb1, 0x40, 0x6a, 0x27, 0x50, 0xeb, 0xf9, 0x27, 0xb3, - 0x29, 0x71, 0x68, 0x80, 0x1e, 0x40, 0xd5, 0x27, 0x81, 0x3b, 0xf3, 0xc7, 0xa4, 0x53, 0xb8, 0x55, - 0xd8, 0x6a, 0x3d, 0x44, 0x71, 0x2b, 0x2c, 0x31, 0x38, 0xa2, 0x41, 0x1b, 0x50, 0x99, 0x18, 0x53, - 0xcb, 0x7e, 0xd5, 0x29, 0xde, 0x2a, 0x6c, 0x35, 0xb1, 0xfc, 0x42, 0x08, 0xca, 0x8e, 0x31, 0x25, - 0x9d, 0xd2, 0xad, 0xc2, 0x56, 0x0d, 0xf3, 0xdf, 0xda, 0x9f, 0x42, 0xab, 0x67, 0x9a, 0x43, 0x83, - 0x9e, 0x4a, 0xb9, 0xdf, 0xb8, 0xb7, 0x75, 0xa8, 0x9c, 0xf9, 0x13, 0xdd, 0x32, 0x79, 0x6f, 0x35, - 0xbc, 0x78, 0xe6, 0x4f, 0x06, 0x26, 0xd2, 0xa0, 0xec, 0x19, 0xf4, 0x94, 0x77, 0x96, 0x1c, 0x26, - 0xeb, 0x8b, 0xe3, 0xb4, 0x3b, 0xb0, 0x1c, 0x75, 0x2e, 0xa7, 0x07, 0x41, 0x79, 0x36, 0xb3, 0x4c, - 0xde, 0x73, 0x03, 0xf3, 0xdf, 0xda, 0x6f, 0x0a, 0xb0, 0xb2, 0x43, 0x6c, 0x42, 0xc9, 0xef, 0x40, - 0xce, 0x78, 0xb2, 0x4a, 0x89, 0xc9, 0x0a, 0xe5, 0x2f, 0xcf, 0x97, 0x3f, 0x12, 0x76, 0x51, 0x11, - 0x76, 0x0d, 0x90, 0x2a, 0xab, 0x18, 0x96, 0xf6, 0x63, 0x40, 0x3d, 0xd3, 0x4c, 0xa9, 0x08, 0xef, - 0x83, 0x10, 0x9f, 0x8b, 0x9f, 0x55, 0x05, 0x8e, 0xd3, 0xd6, 0x61, 0x35, 0xd1, 0x52, 0x32, 0x7c, - 0x0c, 0xeb, 0xa2, 0x9b, 0xb7, 0xe1, 0xd9, 0x81, 0x8d, 0x74, 0x63, 0xc9, 0xf6, 0x43, 0x58, 0xc3, - 0x24, 0xc8, 0x28, 0x33, 0xea, 0xc0, 0x92, 0x61, 0x9a, 0x3e, 0x09, 0x02, 0xce, 0xb8, 0x86, 0xc3, - 0x4f, 0x6d, 0x13, 0xd6, 0x53, 0x2d, 0x24, 0xab, 0x7f, 0x28, 0x40, 0xe7, 0xc8, 0x9d, 0xd0, 0x37, - 0xe3, 0x87, 0x8e, 0xa0, 0x66, 0x5a, 0x3e, 0x19, 0x53, 0xcb, 0x75, 0xf8, 0x4a, 0xb5, 0x1e, 0xfe, - 0x28, 0x1e, 0xc4, 0x3c, 0x86, 0x31, 0x62, 0x27, 0x6c, 0x8c, 0x63, 0x3e, 0xda, 0x07, 0x80, 0xb2, - 0x04, 0xa8, 0x02, 0xc5, 0xc1, 0x41, 0x7b, 0x01, 0x2d, 0x41, 0xe9, 0xf0, 0xf9, 0xa8, 0x5d, 0x40, - 0x55, 0x28, 0x3f, 0x39, 0x1c, 0x3d, 0x6b, 0x17, 0xb5, 0xab, 0x70, 0x25, 0xa7, 0x2b, 0x39, 0xb2, - 0x8f, 0x61, 0xf3, 0xe8, 0x74, 0x46, 0x4d, 0xf7, 0x3b, 0xe7, 0xf2, 0xf3, 0xd4, 0x85, 0x4e, 0xb6, - 0x91, 0x64, 0xf8, 0x11, 0xac, 0xf7, 0x1d, 0xe3, 0xd8, 0x26, 0x97, 0x67, 0xd7, 0x81, 0x8d, 0x74, - 0x13, 0xc9, 0xec, 0x21, 0x6c, 0xec, 0x58, 0xc1, 0x9b, 0x71, 0xbb, 0x02, 0x9b, 0x99, 0x36, 0x92, - 0xdd, 0x09, 0xb4, 0x45, 0x47, 0xfb, 0x3e, 0x0d, 0x19, 0x5d, 0x85, 0x9a, 0x39, 0x9b, 0x7a, 0x3a, - 0x7d, 0xe5, 0x09, 0xdb, 0x5b, 0xc4, 0x55, 0x06, 0x18, 0xbd, 0xf2, 0x08, 0xea, 0x42, 0x75, 0x62, - 0xd9, 0x84, 0x7b, 0x1a, 0x61, 0x69, 0xd1, 0x37, 0xc3, 0x59, 0x0e, 0x25, 0xfe, 0x99, 0x61, 0x73, - 0x73, 0x2b, 0xe3, 0xe8, 0x5b, 0x5b, 0x85, 0x15, 0xa5, 0x23, 0xd9, 0xfb, 0x2a, 0xac, 0x48, 0xc1, - 0xe2, 0xee, 0xb9, 0x89, 0x29, 0x40, 0x49, 0xfa, 0xe7, 0xd0, 0x1e, 0x38, 0x7f, 0x42, 0xc6, 0x54, - 0x11, 0xf4, 0x1d, 0xf9, 0x08, 0xe6, 0xb3, 0x0d, 0x7a, 0x1a, 0x74, 0x4a, 0x19, 0x9f, 0xcd, 0x8c, - 0x5c, 0x20, 0x99, 0xac, 0x8a, 0x00, 0x52, 0xaa, 0xbf, 0x29, 0x40, 0xb3, 0x67, 0x9a, 0x4f, 0xa6, - 0xde, 0xeb, 0x55, 0x1f, 0x41, 0xd9, 0x73, 0x7d, 0x2a, 0xbd, 0x36, 0xff, 0x8d, 0x3e, 0x83, 0x32, - 0x9f, 0xe5, 0x12, 0x97, 0x7e, 0x2b, 0xee, 0x39, 0xc1, 0xf4, 0xc1, 0xbe, 0xeb, 0x58, 0xd4, 0xf5, - 0x2d, 0xe7, 0x64, 0xe8, 0xda, 0xd6, 0xf8, 0x15, 0xe6, 0xad, 0xb4, 0x0f, 0xa0, 0x9d, 0xc6, 0x30, - 0x6d, 0x1f, 0xe2, 0x7e, 0x7b, 0x81, 0x69, 0xfb, 0xf0, 0xf0, 0x28, 0xa9, 0xf7, 0x6d, 0xbe, 0x1d, - 0x70, 0xc6, 0x72, 0x00, 0x3f, 0x83, 0xb6, 0xf0, 0x15, 0x6f, 0x3b, 0x04, 0xbe, 0x86, 0x31, 0x07, - 0xc9, 0xb6, 0x0f, 0x55, 0x3c, 0xfc, 0x72, 0xb0, 0xed, 0x3a, 0x93, 0x0b, 0xd8, 0xdd, 0x84, 0xba, - 0x4f, 0xa6, 0x2e, 0x25, 0x7a, 0xc4, 0xb5, 0x86, 0x41, 0x80, 0x86, 0x8c, 0xf7, 0xaf, 0xcb, 0x50, - 0x63, 0x7c, 0x8e, 0xa8, 0x41, 0xf9, 0xc6, 0x37, 0xf3, 0xa8, 0x35, 0x15, 0x8b, 0x5d, 0xc2, 0xf2, - 0x8b, 0xa9, 0x1d, 0xb3, 0x3b, 0x8e, 0x29, 0x72, 0x4c, 0xf4, 0x8d, 0x5a, 0x50, 0x9c, 0x79, 0x7c, - 0x7a, 0xab, 0xb8, 0x38, 0xf3, 0x44, 0x97, 0x63, 0xd7, 0x37, 0x75, 0xcb, 0x3b, 0xfb, 0x84, 0xbb, - 0xff, 0x26, 0xeb, 0x92, 0x81, 0x06, 0xde, 0xd9, 0x27, 0x49, 0x82, 0x47, 0xdc, 0xf7, 0xab, 0x04, - 0x8f, 0x18, 0x81, 0xe7, 0x93, 0x89, 0x75, 0x2e, 0x38, 0x54, 0x04, 0x81, 0x00, 0x85, 0x1c, 0x62, - 0x82, 0x47, 0x9d, 0xa5, 0x14, 0xc1, 0x23, 0x36, 0x8e, 0x80, 0xf8, 0x96, 0x61, 0x77, 0xaa, 0x62, - 0x4f, 0x12, 0x5f, 0xe8, 0x7b, 0xd0, 0xf4, 0xc9, 0x98, 0x58, 0x67, 0x44, 0x4a, 0x57, 0xe3, 0x83, - 0x69, 0x84, 0x40, 0xce, 0x3d, 0x45, 0xf4, 0xa8, 0x03, 0x19, 0xa2, 0x47, 0x8c, 0x48, 0xf0, 0xd4, - 0x1d, 0x97, 0x5a, 0x93, 0x57, 0x9d, 0xba, 0x20, 0x12, 0xc0, 0x03, 0x0e, 0x63, 0x72, 0x8e, 0x8d, - 0xf1, 0x29, 0xd1, 0x7d, 0xe6, 0x06, 0x3b, 0x0d, 0x4e, 0x02, 0x1c, 0xc4, 0x1d, 0x23, 0xba, 0x03, - 0xad, 0x88, 0x80, 0x2f, 0x6b, 0xa7, 0xc9, 0x69, 0x9a, 0x21, 0x8d, 0xd8, 0xd3, 0x6f, 0x40, 0x9d, - 0x38, 0xa6, 0xee, 0x4e, 0x74, 0xd3, 0xa0, 0x46, 0xa7, 0xc5, 0x69, 0x6a, 0xc4, 0x31, 0x0f, 0x27, - 0x3b, 0x06, 0x35, 0xd0, 0x1a, 0x2c, 0x12, 0xdf, 0x77, 0xfd, 0xce, 0x32, 0xc7, 0x88, 0x0f, 0x74, - 0x1b, 0xa4, 0x34, 0xfa, 0xb7, 0x33, 0xe2, 0xbf, 0xea, 0xb4, 0x39, 0xb2, 0x2e, 0x60, 0x5f, 0x31, - 0x90, 0x58, 0x8a, 0x80, 0x50, 0x49, 0xb1, 0x22, 0x04, 0xe4, 0x20, 0x4e, 0xa0, 0x7d, 0x0d, 0x65, - 0xec, 0x7d, 0x63, 0xa1, 0x1f, 0x40, 0x79, 0xec, 0x3a, 0x13, 0xb9, 0x29, 0xaa, 0x3e, 0x40, 0xea, - 0x20, 0xe6, 0x78, 0x74, 0x0f, 0x16, 0x03, 0xa6, 0x49, 0x5c, 0x4b, 0xea, 0x0f, 0x57, 0x93, 0x84, - 0x5c, 0xc9, 0xb0, 0xa0, 0xd0, 0xb6, 0xa0, 0xb5, 0x4b, 0x28, 0xe3, 0x1e, 0x5a, 0x45, 0x1c, 0x49, - 0x14, 0xd4, 0x48, 0x42, 0x7b, 0x0c, 0xcb, 0x11, 0xa5, 0x9c, 0x91, 0x2d, 0x58, 0x0a, 0x88, 0x7f, - 0x96, 0x1b, 0x06, 0x72, 0xc2, 0x10, 0xad, 0xfd, 0x92, 0x1b, 0xa4, 0xda, 0xcd, 0x9b, 0xf9, 0x8f, - 0x2e, 0x54, 0x6d, 0x6b, 0x42, 0xb8, 0xea, 0x97, 0x84, 0xea, 0x87, 0xdf, 0xda, 0x0a, 0x0f, 0xbf, - 0x54, 0xc1, 0xb4, 0x5e, 0x68, 0xab, 0x6f, 0xdd, 0x63, 0x1c, 0x00, 0x25, 0x18, 0xbf, 0x1f, 0x7a, - 0xf7, 0x4b, 0x31, 0x66, 0x4c, 0x54, 0x72, 0xc9, 0xe4, 0x41, 0xe4, 0xf8, 0x2f, 0xc7, 0x65, 0x1d, - 0x56, 0x13, 0xf4, 0x92, 0xcd, 0x7b, 0xd0, 0xe6, 0xfa, 0x7b, 0x39, 0x26, 0xab, 0xb0, 0xa2, 0x50, - 0xc7, 0x71, 0x52, 0x14, 0x1f, 0x5c, 0x8e, 0xcd, 0x26, 0xac, 0xa7, 0x5a, 0x48, 0x56, 0x46, 0x38, - 0xd4, 0x5f, 0x92, 0x63, 0xdf, 0x08, 0x19, 0xb5, 0xa1, 0x34, 0xf3, 0x6d, 0xc9, 0x84, 0xfd, 0xe4, - 0xca, 0xee, 0xce, 0x28, 0xe1, 0xbb, 0x6e, 0xd0, 0x29, 0xde, 0x2a, 0x71, 0x5f, 0xc8, 0x40, 0x6c, - 0xdf, 0x0d, 0x58, 0xdf, 0x4c, 0x65, 0x58, 0xdc, 0x24, 0x42, 0xd9, 0xf0, 0x93, 0xcd, 0x43, 0xa2, - 0x0b, 0xd9, 0xf3, 0x32, 0x34, 0x77, 0x09, 0x7d, 0xe1, 0x4f, 0xc2, 0x8d, 0xf5, 0x63, 0xae, 0xd3, - 0x1c, 0x20, 0x15, 0xf5, 0x36, 0x94, 0xcf, 0xfc, 0x49, 0xa8, 0xa5, 0xcd, 0x58, 0x4b, 0x19, 0x11, - 0x47, 0x69, 0x1f, 0xf2, 0x0d, 0x2e, 0xe6, 0x82, 0x6e, 0x42, 0xe9, 0xcc, 0x0f, 0x6d, 0x2d, 0xd5, - 0x84, 0x61, 0xe4, 0x26, 0xa3, 0x74, 0xa3, 0x7d, 0x1c, 0x6e, 0x32, 0x6f, 0xc2, 0x26, 0xda, 0x57, - 0x54, 0x4e, 0x3d, 0x58, 0xdb, 0x25, 0x74, 0x87, 0x4c, 0x2c, 0x87, 0x98, 0x47, 0x24, 0x8a, 0x04, - 0xee, 0xc9, 0x7d, 0x54, 0x44, 0x01, 0xeb, 0x31, 0x3b, 0x49, 0xca, 0xa6, 0x50, 0x6e, 0x9a, 0x3d, - 0x58, 0x4f, 0xb1, 0x88, 0xac, 0xb6, 0x1c, 0x10, 0x1a, 0x4e, 0xc6, 0x5a, 0x86, 0x07, 0xa3, 0xe5, - 0x14, 0xda, 0x17, 0xb0, 0xd6, 0x33, 0xcd, 0xac, 0x14, 0x3f, 0x80, 0x12, 0xf3, 0xa4, 0x62, 0x4c, - 0xf9, 0x0c, 0x18, 0x01, 0x53, 0x96, 0x54, 0x7b, 0x39, 0xbc, 0x23, 0xd8, 0x14, 0x63, 0x7e, 0x6b, - 0xde, 0x4c, 0xb3, 0x0c, 0xdb, 0xe6, 0x26, 0x5b, 0xc5, 0xec, 0x27, 0x0b, 0x4d, 0xb3, 0x4c, 0x65, - 0x87, 0x4f, 0xa0, 0x83, 0x89, 0x67, 0x1b, 0xe3, 0xb7, 0xef, 0x91, 0x05, 0xd3, 0x39, 0x3c, 0x64, - 0x07, 0xeb, 0xfc, 0x98, 0xcc, 0x5d, 0x2b, 0x3b, 0xed, 0x86, 0xaa, 0xf8, 0x25, 0x5f, 0x47, 0x05, - 0x2c, 0xd7, 0xe0, 0x63, 0x80, 0x20, 0x04, 0x86, 0x2b, 0xa1, 0xb8, 0xe9, 0xb8, 0x81, 0x42, 0xa6, - 0x3d, 0xe3, 0x67, 0xa8, 0x74, 0x1f, 0xe8, 0x23, 0xa8, 0x45, 0x44, 0x72, 0x14, 0xb9, 0xac, 0x62, - 0x2a, 0x6d, 0x83, 0x2f, 0x6c, 0x46, 0x2c, 0xed, 0x0f, 0xc3, 0x13, 0xd5, 0x3b, 0xe8, 0x24, 0x67, - 0x85, 0xae, 0x84, 0xcb, 0x9e, 0xed, 0x79, 0x0f, 0x36, 0xe5, 0xe4, 0xbe, 0x8b, 0xf1, 0x75, 0xa3, - 0xe5, 0xce, 0xf6, 0x84, 0xa0, 0xbd, 0x4b, 0xa8, 0x8c, 0x2f, 0xe5, 0x32, 0xf5, 0x60, 0x45, 0x81, - 0xc9, 0x35, 0x7a, 0x0f, 0xaa, 0x1e, 0x83, 0x58, 0x24, 0x5c, 0xa1, 0xb6, 0x12, 0x31, 0x0b, 0xda, - 0x88, 0x42, 0x3b, 0x87, 0x76, 0xcf, 0x34, 0x13, 0x6c, 0xd1, 0x16, 0x54, 0x38, 0xfe, 0x95, 0x14, - 0x3b, 0xdb, 0x5e, 0xe2, 0xd1, 0x4f, 0xe0, 0x8a, 0x4f, 0x26, 0xc4, 0xd7, 0xc9, 0xb9, 0x15, 0x50, - 0xcb, 0x39, 0xd1, 0x15, 0xf5, 0x10, 0x33, 0xb8, 0xc9, 0x09, 0xfa, 0x12, 0x7f, 0x14, 0xab, 0xc5, - 0x2a, 0xac, 0x28, 0x3d, 0xcb, 0x51, 0xfe, 0xaa, 0x00, 0xab, 0xf2, 0x00, 0xff, 0x96, 0x22, 0x7d, - 0x00, 0xab, 0x1e, 0x8b, 0x41, 0xfc, 0x33, 0x92, 0x15, 0x06, 0x85, 0xa8, 0x58, 0x8e, 0x70, 0xbd, - 0x4b, 0xf1, 0x7a, 0x6f, 0xc0, 0x5a, 0x52, 0x06, 0x29, 0xdc, 0xdf, 0x16, 0xd8, 0xf9, 0x9c, 0xaf, - 0xcf, 0xff, 0xc1, 0x84, 0xcd, 0x1b, 0x59, 0x69, 0xde, 0xc8, 0x44, 0x72, 0x20, 0x21, 0xae, 0x1c, - 0xc8, 0x4b, 0xe8, 0x46, 0x7a, 0xd3, 0x0b, 0x02, 0xeb, 0xc4, 0x51, 0x15, 0xf7, 0x27, 0x00, 0x46, - 0x04, 0x94, 0x23, 0xea, 0xa6, 0x47, 0xa4, 0x34, 0x53, 0xa8, 0xb5, 0xaf, 0xe1, 0x6a, 0x2e, 0x67, - 0xa9, 0x9b, 0xff, 0x13, 0xd6, 0x2f, 0xa1, 0x1b, 0xe9, 0xcb, 0xbb, 0x15, 0xfa, 0x3a, 0x5c, 0xcd, - 0xe5, 0x2c, 0x67, 0x6b, 0x0a, 0xd7, 0x55, 0x75, 0x78, 0xa7, 0x7d, 0xe7, 0x78, 0x9b, 0x5b, 0x70, - 0x63, 0x5e, 0x77, 0x52, 0xa0, 0x3f, 0x80, 0x1b, 0x89, 0x75, 0x7d, 0xb7, 0xb3, 0x71, 0x1b, 0x6e, - 0xce, 0xe5, 0x9e, 0xf0, 0x45, 0x47, 0x3c, 0x48, 0x0e, 0x7d, 0xd1, 0xe7, 0xdc, 0x17, 0x85, 0xb0, - 0x68, 0xcf, 0xae, 0x9c, 0xd8, 0xee, 0xb1, 0x61, 0x67, 0x0d, 0x63, 0x97, 0xc3, 0xb1, 0xc4, 0x6b, - 0x5f, 0x00, 0x3a, 0xa2, 0x86, 0x9f, 0x64, 0xfa, 0x06, 0xed, 0xd7, 0x61, 0x35, 0xd1, 0x3e, 0xce, - 0x60, 0x1c, 0x51, 0xd7, 0x4b, 0x8a, 0xba, 0xc6, 0xfa, 0x8a, 0x81, 0x92, 0xf4, 0xd7, 0x25, 0x28, - 0x0f, 0x65, 0x5e, 0xd1, 0xb1, 0x7d, 0x2b, 0x4c, 0x82, 0xb2, 0xdf, 0xec, 0x74, 0xe1, 0x19, 0x94, - 0xfa, 0x22, 0xf2, 0x6b, 0x60, 0xf9, 0xc5, 0x97, 0xef, 0x24, 0x8c, 0xed, 0xd9, 0x4f, 0xd6, 0xfa, - 0x98, 0x04, 0x94, 0x1f, 0x5d, 0xab, 0x98, 0xff, 0x66, 0xc1, 0xa3, 0x15, 0xe8, 0xdf, 0x59, 0xf4, - 0xd4, 0xf4, 0x8d, 0xef, 0xf8, 0xa1, 0xb5, 0x8a, 0xc1, 0x0a, 0x7e, 0x21, 0x21, 0xe8, 0x06, 0xc0, - 0x99, 0x61, 0x5b, 0xa6, 0xc1, 0xf3, 0x6e, 0x15, 0x9e, 0xd3, 0x51, 0x20, 0xe8, 0x43, 0x58, 0x73, - 0x5c, 0xdd, 0x9a, 0x7a, 0xcc, 0x6b, 0xd3, 0x98, 0xd3, 0x92, 0xb0, 0x7d, 0xc7, 0x1d, 0x48, 0x54, - 0xc4, 0x31, 0x3e, 0x0e, 0x55, 0x13, 0x89, 0xd5, 0xeb, 0x00, 0x22, 0xdb, 0xa2, 0x1b, 0x81, 0xc3, - 0x4f, 0xb0, 0x4d, 0x5c, 0x13, 0x90, 0x5e, 0xe0, 0xa0, 0xab, 0x20, 0x3f, 0x74, 0xcb, 0xe4, 0x47, - 0xd7, 0x1a, 0xae, 0x0a, 0xc0, 0xc0, 0x94, 0xb9, 0x25, 0x4a, 0x7c, 0x62, 0xf2, 0x13, 0x6b, 0x15, - 0x47, 0xdf, 0xec, 0x14, 0x19, 0x50, 0xc3, 0x26, 0xfc, 0x9c, 0x5a, 0xc5, 0xe2, 0x03, 0x6d, 0x41, - 0xdb, 0x0a, 0xf4, 0x89, 0xef, 0x4e, 0x75, 0x72, 0x4e, 0x89, 0xef, 0x18, 0x36, 0x3f, 0xa4, 0x56, - 0x71, 0xcb, 0x0a, 0x9e, 0xfa, 0xee, 0xb4, 0x2f, 0xa1, 0x6c, 0x8a, 0x1c, 0x99, 0xfc, 0xd2, 0x2d, - 0x8f, 0x9f, 0x52, 0x6b, 0x18, 0x42, 0xd0, 0xc0, 0xd3, 0xfe, 0xba, 0x00, 0xf5, 0x1d, 0xc2, 0x7c, - 0xa2, 0x98, 0x12, 0xb6, 0x22, 0xfc, 0xcc, 0x2e, 0xa3, 0x74, 0xf9, 0x15, 0x67, 0x8b, 0x8a, 0x17, - 0x64, 0x8b, 0xd0, 0x5d, 0x58, 0xb6, 0x5d, 0xe7, 0x84, 0xf8, 0xba, 0x68, 0x46, 0x42, 0x3f, 0xda, - 0x12, 0xe0, 0xa1, 0x84, 0xa2, 0x7b, 0xd0, 0x0e, 0x4e, 0x5d, 0x9f, 0xaa, 0x94, 0x62, 0x69, 0x97, - 0x25, 0x3c, 0x24, 0xd5, 0xfe, 0xbe, 0x00, 0x8b, 0x23, 0x16, 0xe7, 0xb3, 0x03, 0xaf, 0x12, 0xee, - 0xe6, 0x25, 0xbd, 0x38, 0x3e, 0xba, 0x12, 0x28, 0xc6, 0x57, 0x02, 0x73, 0x33, 0xe2, 0xbf, 0x07, - 0x0d, 0x33, 0x1e, 0x3e, 0x13, 0x82, 0x0d, 0x2f, 0x11, 0x4a, 0x47, 0x58, 0x9c, 0x20, 0xe5, 0x19, - 0x0f, 0x37, 0xa0, 0xba, 0xdc, 0xa3, 0xa4, 0xfa, 0x31, 0x90, 0xb0, 0x70, 0xed, 0x11, 0x3f, 0x8a, - 0x60, 0xeb, 0x38, 0xb4, 0xbb, 0x3b, 0xb0, 0x48, 0xd9, 0x48, 0xa4, 0xd9, 0x2d, 0xc7, 0xbd, 0xf0, - 0x01, 0x62, 0x81, 0xd5, 0x3e, 0x15, 0xa7, 0x70, 0xd6, 0x4e, 0x1a, 0xfc, 0x25, 0x1b, 0xda, 0x80, - 0x5e, 0x08, 0xed, 0x26, 0x4a, 0xaf, 0x97, 0x9d, 0xb6, 0x79, 0x37, 0x2c, 0xb1, 0x4a, 0x94, 0x54, - 0x95, 0x60, 0xbe, 0x21, 0xd1, 0x9b, 0x34, 0xf8, 0x7f, 0x64, 0x06, 0x4f, 0x88, 0xcf, 0xf5, 0x9a, - 0x71, 0x08, 0x23, 0xa6, 0x26, 0x8e, 0xbe, 0xd1, 0x8f, 0xa1, 0x61, 0x78, 0x9e, 0xfd, 0x2a, 0x9c, - 0x3c, 0x91, 0x9a, 0x50, 0xa6, 0xbd, 0xc7, 0xb0, 0x72, 0x7f, 0xad, 0x1b, 0xf1, 0x47, 0x94, 0xf5, - 0x28, 0xa5, 0xb3, 0x1e, 0xac, 0x4f, 0x25, 0xeb, 0xf1, 0x18, 0x9a, 0xe4, 0xf8, 0xc4, 0xd3, 0xa7, - 0x33, 0x9b, 0x5a, 0xa7, 0xae, 0x27, 0xef, 0x3c, 0x36, 0xe2, 0x06, 0xfd, 0xe3, 0x13, 0x6f, 0x5f, - 0x62, 0x71, 0x83, 0x28, 0x5f, 0xa8, 0x07, 0xcb, 0xe2, 0x58, 0xea, 0x93, 0x89, 0x4d, 0xc6, 0xd4, - 0xf5, 0xf9, 0xf2, 0xd6, 0x1f, 0x76, 0x94, 0xd9, 0x63, 0x04, 0x38, 0xc4, 0xe3, 0x96, 0x9f, 0xf8, - 0x46, 0x77, 0xa1, 0x6c, 0x39, 0x13, 0x97, 0x7b, 0x9d, 0x44, 0x88, 0xca, 0xe4, 0x14, 0x49, 0x17, - 0x4e, 0xc0, 0x9c, 0x31, 0xb5, 0xa6, 0xc4, 0x0f, 0xb8, 0xdb, 0x49, 0x38, 0xe3, 0x11, 0x87, 0x63, - 0x89, 0x67, 0xa1, 0x2f, 0xf5, 0x0d, 0x27, 0xe0, 0xd9, 0x89, 0x6a, 0x9a, 0xef, 0x28, 0x44, 0xe1, - 0x98, 0x8a, 0xcd, 0xb3, 0x18, 0x88, 0x48, 0xbd, 0x70, 0xcf, 0x94, 0x98, 0x67, 0x3e, 0x0a, 0xe9, - 0xb2, 0xc5, 0x51, 0x5c, 0x7c, 0x68, 0xff, 0x5c, 0x80, 0xba, 0xb2, 0x08, 0xe8, 0x53, 0xa8, 0x59, - 0x8e, 0x9e, 0x88, 0xc7, 0x2e, 0xda, 0xfa, 0xaa, 0x96, 0x23, 0x1b, 0xfe, 0x14, 0x9a, 0xe4, 0x9c, - 0x09, 0x93, 0x5c, 0xeb, 0x8b, 0x1a, 0x37, 0x44, 0x83, 0x98, 0x81, 0x35, 0x55, 0x19, 0x94, 0x5e, - 0xcf, 0x40, 0x34, 0x90, 0x76, 0xf8, 0x67, 0x50, 0x17, 0xde, 0x64, 0xcf, 0x9a, 0x5a, 0x73, 0x53, - 0x5a, 0xe8, 0x36, 0x34, 0xa6, 0xc6, 0x79, 0xec, 0x8f, 0x84, 0x15, 0xd4, 0xa7, 0xc6, 0x79, 0xe4, - 0xb6, 0x3e, 0x81, 0x8d, 0x40, 0xde, 0x77, 0xe8, 0xf4, 0xd4, 0x27, 0xc1, 0xa9, 0x6b, 0x9b, 0xba, - 0x37, 0xa6, 0xd2, 0xab, 0xac, 0x85, 0xd8, 0x51, 0x88, 0x1c, 0x8e, 0xa9, 0xf6, 0xef, 0x65, 0xa8, - 0x86, 0xda, 0x89, 0xbe, 0x07, 0x4d, 0x63, 0x46, 0x4f, 0x75, 0xcf, 0x08, 0x82, 0xef, 0x5c, 0xdf, - 0x94, 0x7e, 0xb6, 0xc1, 0x80, 0x43, 0x09, 0x43, 0xb7, 0xa0, 0x6e, 0x92, 0x60, 0xec, 0x5b, 0x5e, - 0x74, 0x63, 0x54, 0xc3, 0x2a, 0x08, 0x5d, 0x81, 0xaa, 0xed, 0x8e, 0x0d, 0x5b, 0x37, 0x82, 0x30, - 0x31, 0xc2, 0xbf, 0x7b, 0xdc, 0xb7, 0x46, 0x3e, 0x3f, 0xcc, 0xdb, 0x94, 0x39, 0x87, 0xe5, 0x10, - 0xde, 0x93, 0xa9, 0xae, 0x4d, 0x58, 0xf2, 0x08, 0xf1, 0x19, 0x13, 0x91, 0xf2, 0xad, 0xb0, 0xcf, - 0x5e, 0xc0, 0xf6, 0x33, 0x8e, 0x38, 0xf1, 0xdd, 0x99, 0xc7, 0x75, 0xb8, 0x86, 0x6b, 0x0c, 0xb2, - 0xcb, 0x00, 0x6c, 0x3f, 0xe3, 0x68, 0xee, 0x57, 0x44, 0xaa, 0xb7, 0xca, 0x00, 0xfc, 0xae, 0xe4, - 0x3e, 0xac, 0xf8, 0x64, 0xea, 0x9e, 0x11, 0xdd, 0xf3, 0xad, 0x33, 0x83, 0xb2, 0x3d, 0x51, 0x6e, - 0x97, 0xcb, 0x02, 0x31, 0x14, 0xf0, 0x5e, 0x80, 0xde, 0x03, 0x24, 0xf4, 0x73, 0x62, 0x1b, 0x9e, - 0x6e, 0x1a, 0x53, 0xcf, 0x72, 0x4e, 0xb8, 0x96, 0x56, 0x71, 0x9b, 0x63, 0x9e, 0xda, 0x86, 0xb7, - 0x23, 0xe0, 0xe8, 0x0e, 0xb4, 0x02, 0xe2, 0x98, 0xfa, 0xd8, 0x9d, 0x4e, 0x67, 0x8e, 0x45, 0x5f, - 0xf1, 0xbd, 0xb4, 0x89, 0x9b, 0x0c, 0xba, 0x1d, 0x02, 0x99, 0xf0, 0x32, 0xc1, 0x3e, 0x36, 0xbc, - 0x4e, 0x9d, 0x47, 0x16, 0x35, 0x01, 0xd9, 0x36, 0xb8, 0xf0, 0x62, 0xea, 0x18, 0xb6, 0xc1, 0xb1, - 0x62, 0x2e, 0x19, 0xb2, 0x05, 0x45, 0xcb, 0xe4, 0x9b, 0x69, 0x0d, 0x17, 0x2d, 0x13, 0xfd, 0x04, - 0x9a, 0x32, 0xad, 0x6d, 0x33, 0xe5, 0x09, 0x3a, 0xad, 0xf4, 0x06, 0xa1, 0xa8, 0x16, 0x6e, 0x78, - 0xf1, 0x47, 0xc0, 0x96, 0x5a, 0xae, 0x91, 0x5c, 0x85, 0x65, 0xb1, 0xd4, 0x62, 0xa1, 0xe4, 0x12, - 0xbc, 0x0f, 0x28, 0xde, 0xa1, 0x1d, 0x4a, 0xfc, 0x89, 0x31, 0x26, 0x3c, 0x2f, 0x5c, 0xc3, 0x2b, - 0xd1, 0x46, 0x1d, 0x22, 0x58, 0x64, 0x74, 0xe6, 0x4f, 0x78, 0x56, 0xb8, 0x26, 0x32, 0x46, 0x5f, - 0x42, 0x43, 0xf5, 0x64, 0xa8, 0x03, 0x4b, 0x84, 0xe7, 0xc5, 0x84, 0x6a, 0x55, 0x71, 0xf8, 0xc9, - 0x15, 0x5c, 0x52, 0xe9, 0x94, 0xda, 0x91, 0x82, 0x4b, 0xd8, 0x88, 0xda, 0xda, 0x5f, 0x14, 0xa0, - 0x95, 0x74, 0x6c, 0x4c, 0xe7, 0x53, 0xbe, 0x50, 0x1f, 0xdb, 0x56, 0x18, 0x00, 0x57, 0xf1, 0x5a, - 0xd2, 0xf1, 0x6d, 0x73, 0x1c, 0x7a, 0x0c, 0xdd, 0x6c, 0xab, 0x59, 0xc0, 0x36, 0xfc, 0xe8, 0x22, - 0x6a, 0x33, 0xdd, 0x92, 0xe3, 0x07, 0xa6, 0xf6, 0x77, 0x15, 0xa8, 0x45, 0x6e, 0xf2, 0x7f, 0xc1, - 0x62, 0x1e, 0x40, 0x75, 0x4a, 0x82, 0xc0, 0x38, 0x91, 0x51, 0x48, 0x62, 0x5f, 0xd9, 0x97, 0x18, - 0x1c, 0xd1, 0xe4, 0x5a, 0xd8, 0xe2, 0x6b, 0x2d, 0xac, 0x72, 0x81, 0x85, 0x2d, 0x5d, 0x68, 0x61, - 0xd5, 0x94, 0x85, 0x6d, 0x41, 0xe5, 0xdb, 0x19, 0x99, 0x91, 0x40, 0xfa, 0x73, 0x65, 0xcb, 0xf8, - 0x8a, 0xc3, 0xb1, 0xc4, 0xe7, 0xdb, 0x22, 0xbc, 0x89, 0x2d, 0xd6, 0x2f, 0x6d, 0x8b, 0x8d, 0x3c, - 0x5b, 0xe4, 0x77, 0x32, 0x41, 0x60, 0xb9, 0x8e, 0x38, 0x5c, 0x73, 0xd3, 0x6a, 0xe2, 0x86, 0x04, - 0x8a, 0x15, 0xfe, 0x11, 0x6c, 0x04, 0x33, 0x8f, 0x79, 0x6c, 0x62, 0x32, 0xab, 0x34, 0x8e, 0x2d, - 0xdb, 0xa2, 0x2c, 0x6e, 0x68, 0xf1, 0x84, 0xf0, 0x7a, 0x84, 0xdd, 0x56, 0x90, 0x6c, 0x8e, 0xd8, - 0x0e, 0x2f, 0xf8, 0x0a, 0xdb, 0xaa, 0x1e, 0x9f, 0x78, 0x82, 0xe7, 0x4f, 0xa1, 0x6e, 0x98, 0x53, - 0x2b, 0xec, 0xb6, 0xcd, 0x83, 0x9f, 0x1b, 0x39, 0xdb, 0xf0, 0x83, 0x1e, 0x23, 0x13, 0x3b, 0x32, - 0x18, 0xd1, 0x6f, 0x16, 0xbe, 0x84, 0xb7, 0x4b, 0xdc, 0xdc, 0x9a, 0x38, 0xfa, 0x66, 0x38, 0x63, - 0x3c, 0x26, 0x1e, 0x25, 0x66, 0x07, 0x09, 0x5c, 0xf8, 0xcd, 0x0e, 0x1d, 0x86, 0x79, 0x46, 0x7c, - 0x6a, 0x05, 0xc4, 0xec, 0xac, 0x8a, 0x7b, 0xb0, 0x18, 0x82, 0x56, 0x61, 0xd1, 0x9d, 0x51, 0xfd, - 0xdb, 0xce, 0x9a, 0xb8, 0x5f, 0x70, 0x67, 0xf4, 0x2b, 0x16, 0xe7, 0x4f, 0x6c, 0xd7, 0x0b, 0x3a, - 0xeb, 0x1c, 0x28, 0x3e, 0xb4, 0xfb, 0x00, 0xb1, 0x70, 0xa8, 0x02, 0xc5, 0xe7, 0x43, 0x71, 0xc5, - 0xb9, 0x73, 0xf8, 0x8b, 0x83, 0x76, 0x01, 0x01, 0x54, 0x86, 0x4f, 0x5f, 0xea, 0xdb, 0xa3, 0x76, - 0x51, 0xfb, 0x63, 0xa8, 0x86, 0x9a, 0x8a, 0xde, 0x57, 0x44, 0x17, 0x5b, 0xf5, 0x4a, 0x46, 0x9f, - 0x95, 0xd1, 0xdc, 0x81, 0x72, 0xc0, 0xec, 0xb9, 0x38, 0x8f, 0x94, 0xa3, 0xb5, 0xdf, 0x16, 0x60, - 0x49, 0x42, 0x90, 0x06, 0x8d, 0x83, 0xc3, 0xd1, 0xe0, 0xe9, 0x60, 0xbb, 0x37, 0x1a, 0x1c, 0x1e, - 0xf0, 0x5e, 0xca, 0xb8, 0xe1, 0x28, 0x30, 0xb6, 0xcf, 0x3e, 0x1f, 0xee, 0xf4, 0x46, 0x7d, 0xce, - 0xb8, 0x8c, 0x2b, 0x33, 0xfe, 0xc5, 0xc2, 0xf3, 0xc3, 0x61, 0xff, 0x40, 0xde, 0x95, 0x97, 0xdd, - 0x61, 0xff, 0x00, 0x5d, 0x83, 0xda, 0x97, 0xfd, 0xfe, 0xb0, 0xb7, 0x37, 0x78, 0xd1, 0xe7, 0x26, - 0x58, 0xc6, 0xb5, 0x6f, 0x42, 0x00, 0x73, 0x69, 0xb8, 0xff, 0x14, 0xf7, 0x8f, 0x9e, 0x71, 0x33, - 0x2b, 0xe3, 0x25, 0x5f, 0x7c, 0xb2, 0x76, 0x3b, 0x83, 0xa3, 0xed, 0x1e, 0xde, 0xe9, 0xef, 0x70, - 0x03, 0x2b, 0xe3, 0x9a, 0x19, 0x02, 0xd8, 0xac, 0x8e, 0x0e, 0x47, 0xbd, 0x3d, 0x6e, 0x5e, 0x65, - 0xbc, 0x48, 0xd9, 0x87, 0xf6, 0x08, 0x2a, 0xc2, 0x4a, 0x18, 0xde, 0x72, 0xbc, 0x19, 0x95, 0x81, - 0x80, 0xf8, 0x60, 0x72, 0xbb, 0x33, 0xca, 0xc0, 0x32, 0x0e, 0x16, 0x5f, 0x1a, 0x81, 0x8a, 0x08, - 0xc8, 0xd0, 0x03, 0xa8, 0xb0, 0x18, 0xd3, 0x3a, 0x91, 0xb3, 0xbb, 0x91, 0x0e, 0xd9, 0xb6, 0x39, - 0x16, 0x4b, 0x2a, 0xf4, 0xc3, 0xe4, 0x0d, 0xdc, 0x7a, 0x9a, 0x3c, 0x71, 0x07, 0xf7, 0xdb, 0x02, - 0x34, 0x54, 0x2e, 0xcc, 0x84, 0xc6, 0xae, 0xe3, 0x90, 0x31, 0xd5, 0x7d, 0x42, 0xfd, 0x57, 0xe1, - 0x64, 0x4b, 0x20, 0x66, 0x30, 0x66, 0x0b, 0x3c, 0x16, 0x89, 0xae, 0x83, 0xcb, 0xb8, 0xca, 0x00, - 0x8c, 0x13, 0xdb, 0x63, 0xbe, 0x21, 0xc4, 0x33, 0x6c, 0xeb, 0x8c, 0xe8, 0xa9, 0xb7, 0x0a, 0x2b, - 0x11, 0x66, 0x20, 0x11, 0x68, 0x07, 0x6e, 0x4c, 0x2d, 0xc7, 0x9a, 0xce, 0xa6, 0x7a, 0xa4, 0xb7, - 0x2c, 0xac, 0x8a, 0x9b, 0x8a, 0x15, 0xba, 0x26, 0xa9, 0x7a, 0x2a, 0x51, 0xc8, 0x45, 0xfb, 0x4d, - 0x11, 0xea, 0xca, 0xf0, 0xfe, 0x9f, 0x0e, 0x83, 0xe7, 0x08, 0xc8, 0x89, 0x4b, 0x2d, 0x83, 0x39, - 0xa7, 0x58, 0x38, 0xa1, 0x88, 0x28, 0xc6, 0x3d, 0x0b, 0xc5, 0x8c, 0x2f, 0xec, 0x2b, 0x52, 0xef, - 0xb3, 0x17, 0xf6, 0x42, 0x21, 0xa3, 0x6f, 0xed, 0xbf, 0x0a, 0x50, 0x8b, 0x02, 0xf8, 0x6c, 0xe0, - 0x50, 0xc8, 0x09, 0x1c, 0xae, 0x03, 0x08, 0x22, 0xe5, 0xb2, 0x52, 0x04, 0x36, 0x43, 0xc9, 0x63, - 0x4a, 0x67, 0xba, 0x69, 0x05, 0x63, 0xf7, 0x8c, 0xf8, 0xaf, 0xe4, 0x41, 0xbc, 0x31, 0xa5, 0xb3, - 0x9d, 0x10, 0xc6, 0x22, 0x02, 0xb6, 0xab, 0xb2, 0xf9, 0x9c, 0xba, 0x26, 0x91, 0x47, 0xf0, 0xba, - 0x84, 0xed, 0xbb, 0x26, 0x3b, 0x7a, 0xb6, 0x64, 0x30, 0x95, 0xdc, 0xe9, 0x9a, 0x02, 0xda, 0xcb, - 0x7f, 0xd4, 0x50, 0x09, 0x1f, 0x10, 0x84, 0x8f, 0x1a, 0xd8, 0x46, 0x48, 0xc7, 0x9e, 0x3e, 0x0d, - 0x02, 0x19, 0x30, 0x56, 0xe8, 0xd8, 0xdb, 0x0f, 0x02, 0xed, 0x73, 0xa8, 0x2b, 0x87, 0x10, 0xf4, - 0x00, 0x56, 0xd5, 0x13, 0x4b, 0x32, 0xd6, 0x58, 0x51, 0x4e, 0x28, 0x22, 0xd0, 0xd0, 0x66, 0x50, - 0x11, 0x11, 0x18, 0xd3, 0x1d, 0xcb, 0xd3, 0x13, 0xd9, 0x8b, 0xaa, 0xe5, 0x49, 0xe4, 0x0f, 0x60, - 0x79, 0x6a, 0x04, 0xdf, 0xe8, 0x36, 0x71, 0x4e, 0xe8, 0xa9, 0x3e, 0xb5, 0x1c, 0x39, 0x65, 0x4d, - 0x06, 0xde, 0xe3, 0xd0, 0x7d, 0xcb, 0xc9, 0xd0, 0x19, 0xe7, 0x32, 0x58, 0x50, 0xe9, 0x8c, 0x73, - 0xed, 0xaf, 0x0a, 0x00, 0xf1, 0xc5, 0xcf, 0x1b, 0xdc, 0xc4, 0xe5, 0x66, 0x27, 0x10, 0x94, 0x6d, - 0x2b, 0xa0, 0xfc, 0x29, 0x4e, 0x0d, 0xf3, 0xdf, 0xfc, 0xc2, 0x21, 0x4e, 0x8d, 0xa4, 0x2f, 0x1c, - 0x38, 0x06, 0x47, 0x14, 0xda, 0x2e, 0x54, 0xf7, 0x0d, 0x3a, 0x3e, 0x65, 0xc2, 0xdc, 0x4d, 0x08, - 0xa3, 0x1c, 0x11, 0x39, 0xc5, 0xc5, 0xa2, 0x68, 0x2f, 0xa0, 0xd1, 0x0b, 0x86, 0x06, 0x3d, 0x15, - 0x63, 0x45, 0x0f, 0x12, 0xcc, 0x94, 0x43, 0x97, 0x4a, 0xa5, 0xf0, 0xdc, 0x80, 0x8a, 0x98, 0xbb, - 0xd0, 0x7b, 0x8a, 0x2f, 0xed, 0x3f, 0xcb, 0x00, 0xdb, 0xae, 0x63, 0x5a, 0x22, 0x79, 0xf2, 0x11, - 0xc8, 0xb7, 0x21, 0x7a, 0x7c, 0xdb, 0x86, 0x52, 0x92, 0x1e, 0x11, 0x8a, 0x6b, 0x82, 0x8a, 0x0d, - 0xeb, 0x47, 0xd0, 0x88, 0xa2, 0x2e, 0xd6, 0xa8, 0x38, 0xb7, 0x51, 0x94, 0xf3, 0x62, 0xcd, 0x3e, - 0x83, 0x96, 0x11, 0xe8, 0x9e, 0x41, 0x4f, 0xe5, 0xa2, 0xca, 0xf3, 0xe3, 0x46, 0xfe, 0x50, 0x70, - 0xc3, 0x50, 0x87, 0xff, 0x10, 0xea, 0x61, 0x6b, 0xd6, 0x67, 0x79, 0xbe, 0xa0, 0xa2, 0x19, 0xeb, - 0xf1, 0x53, 0xe6, 0xe9, 0x64, 0x00, 0xc4, 0x5b, 0x2d, 0xce, 0x6d, 0xd5, 0x88, 0x08, 0x59, 0xc3, - 0x2f, 0x60, 0x85, 0x9c, 0x53, 0x3d, 0xd9, 0xb8, 0x32, 0xb7, 0xf1, 0x32, 0x39, 0xa7, 0xdb, 0x6a, - 0x7b, 0x66, 0x84, 0xde, 0x37, 0x96, 0xee, 0x93, 0x60, 0x66, 0x53, 0x6e, 0x67, 0x8b, 0x18, 0x7c, - 0x71, 0x31, 0x3f, 0xb3, 0x29, 0xfa, 0x1c, 0x20, 0xbe, 0x6e, 0xe7, 0x61, 0x65, 0x22, 0x26, 0x8a, - 0xd7, 0x47, 0xe4, 0x05, 0xf8, 0xb2, 0xd6, 0xa2, 0xdb, 0x78, 0xf4, 0x04, 0x56, 0x6d, 0xc3, 0x3f, - 0x21, 0x29, 0x09, 0x6b, 0x73, 0x25, 0x5c, 0xe1, 0xe4, 0xaa, 0x8c, 0xda, 0x29, 0xd4, 0x22, 0xde, - 0x68, 0x15, 0x96, 0xf1, 0xe1, 0xf3, 0x51, 0x5f, 0x1f, 0x7d, 0x3d, 0xec, 0xeb, 0x07, 0x87, 0x07, - 0xfd, 0xf6, 0x02, 0xda, 0x84, 0x55, 0x05, 0x38, 0x38, 0x18, 0xf5, 0xf1, 0x41, 0x6f, 0xaf, 0x5d, - 0x48, 0x21, 0xfa, 0x2f, 0x25, 0xa2, 0x88, 0xd6, 0xa0, 0xad, 0x20, 0xf6, 0x0e, 0xb7, 0x7b, 0x7b, - 0xed, 0x92, 0x36, 0x81, 0xe5, 0xa8, 0xe7, 0x9e, 0x78, 0x1c, 0xf9, 0x51, 0x42, 0x99, 0xaf, 0xab, - 0x23, 0x4f, 0x10, 0x2a, 0xfa, 0x7c, 0x0b, 0xea, 0xe1, 0x68, 0xad, 0xe8, 0x85, 0x82, 0x0a, 0xd2, - 0x0e, 0xa0, 0xb6, 0x4f, 0x4c, 0xd9, 0xc3, 0x0f, 0x13, 0x3d, 0x6c, 0xaa, 0xb1, 0x94, 0x99, 0xe1, - 0xbd, 0x06, 0x8b, 0x67, 0x86, 0x3d, 0x0b, 0xdf, 0x6f, 0x89, 0x0f, 0x4d, 0x87, 0xe5, 0x5e, 0x30, - 0xf4, 0x89, 0x47, 0x9c, 0x90, 0x6b, 0x1b, 0x4a, 0x46, 0xe0, 0xc8, 0x30, 0x85, 0xfd, 0x64, 0x66, - 0xc6, 0x28, 0x8c, 0x28, 0x48, 0x11, 0x5f, 0x48, 0x83, 0xe6, 0x2c, 0x20, 0xba, 0x4d, 0x26, 0x54, - 0x9f, 0xba, 0x01, 0x95, 0x6e, 0xbf, 0x3e, 0x0b, 0xc8, 0x1e, 0x99, 0xd0, 0x7d, 0x97, 0xdf, 0x29, - 0x34, 0x0f, 0xc8, 0x39, 0x3d, 0x75, 0x3d, 0xc9, 0xfe, 0xc2, 0xb7, 0x30, 0x01, 0xb1, 0x27, 0xf2, - 0x22, 0x85, 0xff, 0xd6, 0xee, 0xc2, 0xf2, 0x1e, 0xdf, 0x66, 0x7c, 0x32, 0x91, 0x0c, 0xa2, 0x81, - 0xc8, 0x40, 0x4a, 0x0c, 0xe4, 0x5f, 0x4b, 0xb0, 0x24, 0x08, 0x82, 0x38, 0x11, 0x65, 0x88, 0x47, - 0xb0, 0x19, 0x47, 0xc9, 0x95, 0x42, 0x50, 0xcb, 0x44, 0x94, 0xe4, 0xfd, 0x29, 0xd4, 0xe2, 0x33, - 0x86, 0xb0, 0xf9, 0x2b, 0x73, 0x17, 0x0e, 0xc7, 0xb4, 0xe8, 0x0e, 0x94, 0xa6, 0xc4, 0x94, 0xd6, - 0xbe, 0x9a, 0xb3, 0x12, 0x98, 0xe1, 0xd1, 0x8f, 0x01, 0x98, 0x85, 0x8b, 0xf9, 0x96, 0x06, 0x7e, - 0x25, 0xe1, 0x1b, 0xd4, 0xa5, 0xe0, 0x76, 0x2e, 0x00, 0xe8, 0x0b, 0x68, 0x26, 0xcc, 0x55, 0xda, - 0xf9, 0x05, 0xd2, 0x35, 0x54, 0x8b, 0x45, 0x1f, 0xc1, 0x92, 0x23, 0xd6, 0x41, 0x1a, 0xb9, 0xa2, - 0x2e, 0x89, 0x05, 0xc2, 0x21, 0x1d, 0x13, 0x56, 0x6e, 0xfa, 0x3e, 0x99, 0xc8, 0x84, 0xa1, 0xd2, - 0x5f, 0x6a, 0x5d, 0xc2, 0x78, 0xc0, 0x27, 0x13, 0xf4, 0x04, 0x96, 0x53, 0xb6, 0x2b, 0x53, 0x88, - 0x17, 0x88, 0xdb, 0x4a, 0x9a, 0xaf, 0xf6, 0xab, 0x02, 0xd4, 0xa2, 0x8b, 0xd0, 0x68, 0xf7, 0x28, - 0x28, 0x1b, 0xd9, 0x27, 0x00, 0xe3, 0xc8, 0x89, 0xc8, 0xd5, 0x5a, 0xcb, 0x73, 0x30, 0x58, 0xa1, - 0x43, 0x3f, 0x84, 0x25, 0xa1, 0x16, 0x81, 0x5c, 0x2d, 0xe5, 0x0c, 0x22, 0x15, 0x08, 0x87, 0x14, - 0xda, 0x57, 0x50, 0x91, 0x89, 0xc1, 0x3c, 0x01, 0x92, 0x4f, 0x29, 0x8a, 0x97, 0x7b, 0x4a, 0xf1, - 0x1f, 0x05, 0x68, 0xa7, 0x73, 0x88, 0x68, 0x2b, 0x61, 0xc9, 0x6b, 0xe9, 0x6c, 0xa3, 0x62, 0xc6, - 0xea, 0x83, 0xdc, 0xe2, 0x25, 0x1e, 0xe4, 0xe6, 0x94, 0x2c, 0x24, 0x9e, 0x17, 0x94, 0x5f, 0xf7, - 0xbc, 0x00, 0x7d, 0x00, 0x4b, 0x26, 0x99, 0x18, 0xcc, 0xc9, 0x2f, 0x5e, 0x64, 0x48, 0x21, 0x95, - 0xf6, 0x97, 0x05, 0x28, 0x61, 0xd7, 0x40, 0x2d, 0x28, 0x1a, 0x81, 0xb4, 0xd2, 0xa2, 0x11, 0xb0, - 0xf3, 0x93, 0xd8, 0x60, 0x6d, 0x12, 0x06, 0x44, 0x31, 0x80, 0x39, 0x99, 0xa9, 0xc1, 0x51, 0xf2, - 0xd2, 0x44, 0x7c, 0x29, 0x37, 0x02, 0xe5, 0xc4, 0x25, 0x51, 0x98, 0x9b, 0x5f, 0xbc, 0xf8, 0x45, - 0xa2, 0x76, 0x57, 0x5c, 0x8c, 0xb8, 0xc6, 0xeb, 0x5e, 0x19, 0x8a, 0xb7, 0x5b, 0x9c, 0x30, 0x7e, - 0xbb, 0xe5, 0xbb, 0x46, 0xce, 0xdb, 0x2d, 0x46, 0xc4, 0x51, 0x5a, 0x00, 0xa5, 0x17, 0xfe, 0x24, - 0x57, 0x3b, 0x5a, 0x50, 0xf4, 0x45, 0xf6, 0xa9, 0x81, 0x8b, 0xbe, 0xc9, 0x43, 0x46, 0x91, 0x5a, - 0xf6, 0x45, 0xf0, 0xd5, 0xc0, 0x55, 0x01, 0xc0, 0xfc, 0x41, 0xb8, 0x4c, 0x5c, 0xfb, 0x94, 0xaf, - 0x49, 0x03, 0x57, 0x05, 0x00, 0x53, 0x99, 0x27, 0x14, 0x49, 0xd3, 0xa2, 0x65, 0x6a, 0xff, 0x52, - 0x80, 0x8a, 0xb8, 0x3b, 0xcd, 0xcc, 0xf1, 0x55, 0x10, 0x5b, 0xa8, 0x92, 0xf9, 0xaa, 0x0a, 0xc0, - 0xc0, 0x64, 0x5b, 0x36, 0x8b, 0xf6, 0x88, 0x23, 0xe2, 0xe6, 0x92, 0xd8, 0xb2, 0x05, 0x88, 0xc7, - 0xcd, 0xf7, 0xa0, 0x2d, 0x09, 0xa4, 0x4f, 0x96, 0x0a, 0x52, 0xc3, 0xcb, 0x02, 0xde, 0x0b, 0xc1, - 0x89, 0x0b, 0x97, 0xc5, 0xd4, 0x85, 0xcb, 0x7b, 0x80, 0xd8, 0xbe, 0xc0, 0x73, 0x7d, 0x9e, 0x4d, - 0x74, 0x71, 0x99, 0x57, 0x11, 0xc9, 0x9d, 0x59, 0x40, 0xf6, 0x25, 0x62, 0xc8, 0x5f, 0x7d, 0xff, - 0x13, 0x3b, 0x8e, 0x18, 0xc7, 0x36, 0x19, 0x38, 0x13, 0xf7, 0x77, 0x72, 0xef, 0x76, 0x17, 0x96, - 0x9d, 0xd9, 0x54, 0x57, 0x2e, 0xd4, 0xe4, 0x69, 0xac, 0xe5, 0xcc, 0xa6, 0xea, 0x85, 0xe4, 0x15, - 0xa8, 0x32, 0x42, 0x5e, 0xb6, 0x22, 0x0f, 0xff, 0xce, 0x6c, 0xca, 0x6f, 0x94, 0x6f, 0x43, 0x83, - 0xa1, 0xa2, 0x4c, 0x8c, 0x38, 0x6e, 0xd5, 0x9d, 0xd9, 0xb4, 0x27, 0x41, 0xda, 0x67, 0xfc, 0xfa, - 0x1c, 0x5b, 0xc7, 0x6c, 0x20, 0xa1, 0xb6, 0x85, 0x57, 0x33, 0x99, 0xd7, 0x43, 0xd1, 0x90, 0xc5, - 0xd5, 0x8c, 0xf6, 0x39, 0xaf, 0x81, 0x8a, 0x5a, 0x4b, 0x15, 0xbc, 0x6c, 0xf3, 0xfb, 0xdb, 0x50, - 0x0d, 0x67, 0x08, 0x01, 0x54, 0x76, 0xf7, 0x0e, 0x9f, 0xf4, 0xf6, 0xda, 0x0b, 0xa8, 0x06, 0x8b, - 0x22, 0x46, 0xe1, 0x19, 0x9c, 0xde, 0xce, 0xcf, 0xf5, 0xc1, 0x41, 0xbb, 0x88, 0xea, 0xb0, 0xc4, - 0x7e, 0x1f, 0x3e, 0x1f, 0xb5, 0x4b, 0x68, 0x09, 0x4a, 0x2f, 0xf0, 0xd3, 0x76, 0xf9, 0x3e, 0x85, - 0xba, 0x72, 0x86, 0xe0, 0x29, 0x1f, 0xdc, 0x7f, 0x3a, 0x78, 0xd9, 0x5e, 0x40, 0x0d, 0xa8, 0x1e, - 0xf4, 0x07, 0xbb, 0xcf, 0x9e, 0x1c, 0xe2, 0x76, 0x81, 0xb5, 0x18, 0xf5, 0x76, 0x25, 0x9f, 0x23, - 0x7d, 0xd8, 0x1b, 0x3d, 0x6b, 0x97, 0x50, 0x13, 0x6a, 0xdb, 0x87, 0xfb, 0xfb, 0xcf, 0x0f, 0x06, - 0xa3, 0xaf, 0xdb, 0x65, 0xb4, 0x02, 0xcd, 0xfe, 0xcb, 0x91, 0x1e, 0x83, 0x16, 0x59, 0x0c, 0xb6, - 0xd7, 0xc3, 0xbb, 0x7d, 0x05, 0x58, 0xb9, 0x7f, 0x0f, 0x6a, 0xd1, 0x61, 0x81, 0x71, 0xee, 0x1d, - 0x7c, 0x2d, 0x6a, 0x4a, 0x7a, 0x7b, 0x52, 0xec, 0xc1, 0xc1, 0x8b, 0x3e, 0x1e, 0xb5, 0x8b, 0xf7, - 0xef, 0x43, 0x3b, 0x7d, 0x14, 0x40, 0x15, 0x28, 0xf6, 0xbf, 0x6a, 0x2f, 0xb0, 0xbf, 0xbb, 0xfd, - 0x76, 0x81, 0xfd, 0xdd, 0xeb, 0xb7, 0x8b, 0xf7, 0x3f, 0x90, 0x67, 0x3d, 0xb9, 0xb5, 0x57, 0xa1, - 0x2c, 0x63, 0x3e, 0x36, 0x0f, 0xdb, 0xdb, 0xfd, 0xe1, 0x48, 0x30, 0xc7, 0xfd, 0x9f, 0xf7, 0xb7, - 0x19, 0xf3, 0xe7, 0xb0, 0x9a, 0x13, 0x9a, 0xb1, 0x61, 0x44, 0xd2, 0xea, 0xbd, 0x9d, 0x9d, 0xf6, - 0x02, 0x8b, 0x01, 0x63, 0x10, 0xee, 0xef, 0x1f, 0xbe, 0x60, 0x1d, 0xaf, 0xc3, 0x8a, 0x0a, 0x1d, - 0xee, 0xf5, 0xb6, 0x99, 0x1c, 0xef, 0x43, 0x33, 0x11, 0x8f, 0xb1, 0x39, 0xdb, 0xef, 0xef, 0xe8, - 0xfb, 0x87, 0x8c, 0xd5, 0x32, 0xd4, 0xd9, 0x47, 0x48, 0x5e, 0xb8, 0xff, 0x1e, 0x40, 0xec, 0xf4, - 0xa3, 0x0a, 0x1b, 0x36, 0x09, 0xfb, 0xc3, 0x43, 0x2c, 0x65, 0xee, 0xbf, 0xe4, 0xbf, 0x8b, 0x0f, - 0xff, 0xed, 0x26, 0x54, 0x77, 0x99, 0x4e, 0xf4, 0x3c, 0x0b, 0xed, 0x41, 0x5d, 0x79, 0x40, 0x81, - 0xae, 0x25, 0xb6, 0xa2, 0xd4, 0xbb, 0x8c, 0xee, 0xf5, 0x39, 0x58, 0x79, 0xb3, 0xba, 0x80, 0x06, - 0x00, 0xf1, 0x13, 0x0b, 0x74, 0x55, 0x25, 0x4f, 0xbd, 0xc6, 0xe8, 0x5e, 0xcb, 0x47, 0x46, 0xac, - 0x9e, 0x42, 0x2d, 0x7a, 0x58, 0x82, 0x94, 0x63, 0x5d, 0xfa, 0x05, 0x4a, 0xf7, 0x6a, 0x2e, 0x2e, - 0xe2, 0xb3, 0x07, 0x75, 0xa5, 0x94, 0x4b, 0x1d, 0x60, 0xb6, 0x36, 0x4c, 0x1d, 0x60, 0x5e, 0xfd, - 0xd7, 0x02, 0x7a, 0x0e, 0xad, 0x64, 0x11, 0x17, 0xba, 0xa9, 0x9e, 0xa5, 0x73, 0x6a, 0xc3, 0xba, - 0xb7, 0xe6, 0x13, 0xa8, 0x42, 0x2a, 0x65, 0x8b, 0xaa, 0x90, 0xd9, 0x1a, 0x47, 0x55, 0xc8, 0x9c, - 0x5a, 0x47, 0x6d, 0x01, 0x61, 0x68, 0x26, 0x6a, 0xa8, 0xd0, 0x8d, 0x84, 0x4b, 0xcc, 0x72, 0xbc, - 0x39, 0x17, 0x1f, 0xf1, 0xfc, 0x23, 0x58, 0xc9, 0xd4, 0x66, 0x21, 0xed, 0xf5, 0x35, 0x62, 0xdd, - 0xef, 0x5d, 0x48, 0x13, 0xf1, 0xff, 0x7d, 0x68, 0xa7, 0x2b, 0xb5, 0xd0, 0x6d, 0xa5, 0x69, 0x7e, - 0xe9, 0x57, 0x57, 0xbb, 0x88, 0x44, 0x5d, 0xb5, 0x64, 0xdd, 0x96, 0xba, 0x6a, 0xb9, 0x45, 0x60, - 0xea, 0xaa, 0xcd, 0x29, 0xf9, 0x5a, 0x40, 0x2f, 0x61, 0x39, 0x55, 0xc0, 0x85, 0xd4, 0xc5, 0xce, - 0xad, 0x07, 0xeb, 0xde, 0xbe, 0x80, 0x22, 0xe2, 0xfc, 0x39, 0x54, 0x84, 0x63, 0x47, 0x9b, 0x89, - 0xc5, 0x8e, 0x5f, 0x4d, 0x74, 0x3b, 0x59, 0x84, 0xaa, 0x4e, 0xca, 0xcb, 0x07, 0x55, 0x9d, 0xb2, - 0xcf, 0x2f, 0x54, 0x75, 0xca, 0x7b, 0x2e, 0xb1, 0x80, 0x7e, 0x06, 0x4b, 0xb2, 0x60, 0x14, 0x75, - 0x12, 0xf6, 0xa1, 0x14, 0x86, 0x76, 0xaf, 0xe4, 0x60, 0x54, 0xb7, 0x10, 0x97, 0x67, 0xaa, 0x6e, - 0x21, 0x53, 0x60, 0xaa, 0xba, 0x85, 0x9c, 0x8a, 0xce, 0x05, 0x76, 0xc0, 0x90, 0xc5, 0x55, 0x6c, - 0x64, 0xe9, 0x87, 0x26, 0xdd, 0xfc, 0x87, 0x31, 0xda, 0xc2, 0x87, 0x05, 0xf4, 0x38, 0x2a, 0xcb, - 0x8a, 0xaf, 0xee, 0x94, 0xcd, 0x31, 0xaa, 0xfc, 0xed, 0xa6, 0xca, 0x37, 0x79, 0xe3, 0xa7, 0x50, - 0x8b, 0xea, 0xe4, 0x54, 0x6f, 0x94, 0xae, 0xd2, 0x53, 0xbd, 0x51, 0xb6, 0xb0, 0x4e, 0xcc, 0x44, - 0x54, 0x45, 0x97, 0x98, 0x89, 0x74, 0xc1, 0x5d, 0x62, 0x26, 0xb2, 0x85, 0x77, 0x0b, 0xe8, 0x19, - 0xd4, 0xa2, 0xca, 0x37, 0x55, 0xa4, 0x74, 0x3d, 0x9e, 0x2a, 0x52, 0xb6, 0x54, 0x6e, 0x61, 0xab, - 0xc0, 0xb4, 0x4d, 0xd4, 0x9f, 0xa9, 0xda, 0x96, 0x28, 0x75, 0xeb, 0x76, 0xb2, 0x08, 0xd5, 0x53, - 0x47, 0xa5, 0x66, 0xaa, 0x20, 0xe9, 0x0a, 0xb6, 0xee, 0xd5, 0x5c, 0x9c, 0xaa, 0x67, 0xb2, 0x64, - 0x07, 0xa5, 0x94, 0x3b, 0xae, 0xf5, 0x50, 0xf5, 0x2c, 0x55, 0xdf, 0x13, 0x69, 0x6a, 0x9a, 0x43, - 0xb2, 0x94, 0x27, 0xa5, 0xa9, 0x29, 0x0e, 0x91, 0xa6, 0x72, 0x26, 0x19, 0x81, 0x55, 0x3e, 0xd7, - 0xf2, 0x91, 0x2a, 0xab, 0xb8, 0x9a, 0x06, 0x65, 0xf4, 0x62, 0x0e, 0xab, 0x9c, 0x02, 0x1c, 0x6e, - 0xcf, 0x4a, 0x49, 0x0d, 0xca, 0x6a, 0x86, 0xca, 0xec, 0xfa, 0x1c, 0xac, 0xba, 0x5e, 0x51, 0x41, - 0x8c, 0xba, 0x5e, 0xe9, 0xba, 0x1a, 0x75, 0xbd, 0xb2, 0x15, 0x34, 0x7c, 0x9b, 0x49, 0x14, 0xd7, - 0xa8, 0xdb, 0x4c, 0x5e, 0x9d, 0x8e, 0xba, 0xcd, 0xe4, 0x57, 0xe5, 0x44, 0x8e, 0xcf, 0x35, 0xd2, - 0x8e, 0x2f, 0x3a, 0x8b, 0xa5, 0x1d, 0x5f, 0x7c, 0xf6, 0x12, 0x13, 0xa5, 0xd4, 0xdc, 0xa0, 0xcc, - 0xbc, 0xaa, 0xd5, 0x3e, 0xea, 0x44, 0xe5, 0x15, 0xea, 0x2c, 0x48, 0xbb, 0x60, 0x67, 0xb5, 0xa4, - 0x5d, 0xc4, 0xf5, 0x32, 0x29, 0xbb, 0x50, 0x6b, 0x62, 0x14, 0xbb, 0x60, 0x1c, 0x32, 0x76, 0xa1, - 0x30, 0xb9, 0x9a, 0x8b, 0x4b, 0xcd, 0x49, 0x4a, 0x8c, 0x44, 0x0d, 0x51, 0x6a, 0x4e, 0x92, 0xcd, - 0x31, 0x3f, 0xcc, 0x2a, 0x77, 0x01, 0x37, 0x12, 0xc4, 0x99, 0x0a, 0x13, 0x75, 0x99, 0x72, 0x4b, - 0x72, 0x04, 0xcf, 0x44, 0xa9, 0x8c, 0xca, 0x33, 0xaf, 0x06, 0x47, 0xe5, 0x99, 0x5f, 0x63, 0xc3, - 0x23, 0x80, 0x74, 0x41, 0x8c, 0x1a, 0x01, 0xcc, 0xa9, 0xc0, 0x51, 0x23, 0x80, 0xb9, 0xf5, 0x34, - 0x3c, 0x7c, 0xc9, 0x54, 0xc3, 0xa8, 0xe1, 0xcb, 0xbc, 0x72, 0x1b, 0x35, 0x7c, 0x99, 0x5f, 0x4e, - 0xb3, 0x80, 0x0e, 0xa1, 0xa1, 0x56, 0xce, 0xa0, 0x64, 0x8c, 0x96, 0x2e, 0x12, 0xe9, 0xde, 0x98, - 0x87, 0x56, 0x19, 0xaa, 0x35, 0x2f, 0x28, 0x19, 0x99, 0x5e, 0xc4, 0x30, 0xb7, 0x54, 0x46, 0x04, - 0x2b, 0xc9, 0x6a, 0x16, 0x94, 0x89, 0x4c, 0x33, 0x6c, 0x6f, 0x5f, 0x40, 0xa1, 0x2e, 0x5c, 0xba, - 0x7c, 0x45, 0x5d, 0xb8, 0x39, 0x85, 0x32, 0x5d, 0xed, 0x22, 0x92, 0xd4, 0x31, 0x40, 0x26, 0xd4, - 0x92, 0xc7, 0x80, 0x44, 0x31, 0x46, 0xea, 0x18, 0x90, 0xaa, 0x7c, 0xe0, 0x7c, 0xa2, 0xc7, 0xfe, - 0x2a, 0x9f, 0x74, 0x15, 0x8c, 0xca, 0x27, 0x5b, 0xa7, 0xc2, 0xd7, 0x45, 0x7d, 0xa6, 0xaf, 0xae, - 0x4b, 0x4e, 0x01, 0x8b, 0xba, 0x2e, 0xb9, 0xb5, 0x25, 0x32, 0x58, 0x57, 0xde, 0xdd, 0x27, 0x83, - 0xf5, 0x6c, 0xd5, 0x49, 0x32, 0x58, 0xcf, 0x2b, 0xf3, 0x58, 0x40, 0x26, 0x2f, 0xef, 0xca, 0x64, - 0x0c, 0xbf, 0x9f, 0x33, 0x45, 0x99, 0x22, 0x82, 0xee, 0x9d, 0xd7, 0x50, 0xa9, 0xbd, 0xe4, 0xd4, - 0x4f, 0xa8, 0xbd, 0xcc, 0x2f, 0xdc, 0x50, 0x7b, 0xb9, 0xa8, 0x08, 0x63, 0x01, 0x4d, 0xc3, 0x22, - 0xaf, 0x4c, 0x47, 0x77, 0xf3, 0xe7, 0x36, 0xdb, 0xd7, 0xd6, 0xeb, 0x09, 0xa3, 0xee, 0xbc, 0xa8, - 0xb2, 0x2b, 0x9b, 0x70, 0x9d, 0x33, 0xf1, 0xd9, 0x0e, 0xef, 0x5d, 0x82, 0x52, 0x8d, 0x13, 0xe2, - 0x24, 0x0e, 0xba, 0x9a, 0x0e, 0xeb, 0x95, 0xc4, 0x50, 0xf7, 0x5a, 0x3e, 0x32, 0x64, 0x75, 0x5c, - 0xe1, 0xff, 0x24, 0xe7, 0xe3, 0xff, 0x0e, 0x00, 0x00, 0xff, 0xff, 0x47, 0x17, 0x37, 0x20, 0x33, - 0x47, 0x00, 0x00, + // 5559 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xd4, 0x3c, 0x4d, 0x73, 0x1b, 0x57, + 0x72, 0x04, 0x01, 0x92, 0x40, 0x03, 0x20, 0xc1, 0x27, 0x52, 0x82, 0xa0, 0x0f, 0x5b, 0xb3, 0xeb, + 0xb5, 0xac, 0xf5, 0xca, 0x6b, 0x79, 0x2d, 0x6f, 0xd6, 0xf6, 0xae, 0x21, 0x12, 0x92, 0xb0, 0xe6, + 0x07, 0x3c, 0x84, 0xb4, 0xf2, 0xe6, 0x03, 0x19, 0x01, 0x43, 0x72, 0x62, 0x7c, 0xcc, 0xce, 0x0c, + 0x64, 0xa9, 0x52, 0x95, 0x54, 0x25, 0xc7, 0x54, 0xfe, 0xc1, 0x56, 0xe5, 0xbe, 0x95, 0x1c, 0x72, + 0x4a, 0x55, 0xce, 0x49, 0x2a, 0x55, 0xa9, 0xca, 0x35, 0x87, 0x1c, 0xf2, 0x13, 0x72, 0xcd, 0x31, + 0xdd, 0xfd, 0xde, 0xcc, 0xbc, 0xf9, 0x00, 0x45, 0x29, 0xda, 0xa4, 0x72, 0x22, 0xa6, 0xbb, 0x5f, + 0xbf, 0xaf, 0xfe, 0x7a, 0xfd, 0x5e, 0x13, 0xaa, 0x27, 0xb3, 0xa7, 0x27, 0xee, 0x6d, 0xd7, 0x9b, + 0x05, 0x33, 0x51, 0xe6, 0x0f, 0xcb, 0x75, 0x8c, 0x2f, 0x40, 0x3c, 0xb0, 0x83, 0x03, 0xdb, 0x39, + 0x39, 0x7d, 0x3a, 0xf3, 0x4c, 0xfb, 0x57, 0x73, 0xdb, 0x0f, 0xc4, 0x2d, 0x68, 0xd8, 0x53, 0xeb, + 0xe9, 0xd8, 0x6e, 0x8f, 0x9e, 0xd9, 0x5e, 0xe0, 0xf8, 0xf6, 0xa8, 0x59, 0x78, 0xbb, 0x70, 0xb3, + 0x6c, 0x66, 0xe0, 0xc6, 0xa7, 0x70, 0x21, 0xc1, 0xc1, 0x77, 0x67, 0x53, 0xdf, 0x16, 0xdf, 0x85, + 0x15, 0xd7, 0xb6, 0x3d, 0x1f, 0xdb, 0x15, 0x6f, 0x56, 0xef, 0xac, 0xdf, 0x0e, 0xbb, 0xbc, 0xdd, + 0x43, 0xb0, 0x29, 0x91, 0xc6, 0x09, 0x54, 0xda, 0xde, 0xc9, 0x7c, 0x62, 0x4f, 0x03, 0x5f, 0xdc, + 0x86, 0xb2, 0x67, 0xfb, 0xb3, 0xb9, 0x37, 0xb4, 0xb9, 0xb7, 0xf5, 0x3b, 0x22, 0x6e, 0x65, 0x2a, + 0x8c, 0x19, 0xd1, 0x88, 0x8b, 0xb0, 0x7a, 0x6c, 0x4d, 0x9c, 0xf1, 0x8b, 0xe6, 0x32, 0x52, 0xd7, + 0x4d, 0xf5, 0x25, 0x04, 0x94, 0xa6, 0xd6, 0xc4, 0x6e, 0x16, 0x11, 0x5a, 0x31, 0xf9, 0xb7, 0xf1, + 0xc7, 0xb0, 0xde, 0x1e, 0x8d, 0x7a, 0x56, 0x70, 0x1a, 0xce, 0xf1, 0x55, 0x7b, 0xdb, 0x86, 0xd5, + 0x67, 0xde, 0xf1, 0xc0, 0x19, 0x71, 0x6f, 0x15, 0x73, 0x05, 0xbf, 0xba, 0x23, 0x61, 0x40, 0xc9, + 0x45, 0xae, 0xdc, 0x59, 0x72, 0x9a, 0xd4, 0x17, 0xe3, 0x8c, 0x77, 0x60, 0x23, 0xea, 0x5c, 0x2d, + 0x0f, 0x8e, 0x71, 0x3e, 0x77, 0xe4, 0xaa, 0xd6, 0x4c, 0xfe, 0x6d, 0xfc, 0xa6, 0x00, 0x9b, 0xbb, + 0xf6, 0xd8, 0x0e, 0xec, 0xdf, 0xc2, 0x38, 0xe3, 0xc5, 0x2a, 0x26, 0x16, 0x2b, 0x1c, 0x7f, 0x69, + 0xf1, 0xf8, 0xa3, 0xc1, 0xae, 0x68, 0x83, 0xdd, 0x02, 0xa1, 0x8f, 0x55, 0x4e, 0xcb, 0xf8, 0x31, + 0x08, 0x9c, 0x69, 0x5a, 0x9c, 0xa8, 0x0f, 0xdc, 0x6e, 0x1e, 0x7e, 0x56, 0x14, 0x18, 0x67, 0x6c, + 0xc3, 0x85, 0x44, 0x4b, 0xc5, 0xf0, 0x53, 0xd8, 0x96, 0xdd, 0xbc, 0x0e, 0xcf, 0x26, 0x5c, 0x4c, + 0x37, 0x56, 0x6c, 0x7f, 0x08, 0x5b, 0xf8, 0x3b, 0x2b, 0xf8, 0x4d, 0x58, 0xb3, 0x46, 0x23, 0x5c, + 0x4b, 0x9f, 0x19, 0x57, 0xcc, 0xf0, 0xd3, 0xb8, 0x04, 0xdb, 0xa9, 0x16, 0x8a, 0xd5, 0xdf, 0x17, + 0xa0, 0x79, 0x34, 0x3b, 0x0e, 0x5e, 0x8d, 0x9f, 0x38, 0x82, 0xca, 0xc8, 0xf1, 0xec, 0x61, 0xe0, + 0xcc, 0xa6, 0xbc, 0x53, 0xeb, 0x77, 0x3e, 0x8e, 0x27, 0xb1, 0x88, 0x61, 0x8c, 0xd8, 0x0d, 0x1b, + 0x9b, 0x31, 0x1f, 0xe3, 0x03, 0x10, 0x59, 0x02, 0xb1, 0x0a, 0xcb, 0xdd, 0x83, 0xc6, 0x92, 0x58, + 0x83, 0xe2, 0xe1, 0xa3, 0x7e, 0xa3, 0x20, 0xca, 0x50, 0xba, 0x77, 0xd8, 0x7f, 0xd8, 0x58, 0x36, + 0xae, 0xc0, 0xe5, 0x9c, 0xae, 0xd4, 0xcc, 0x3e, 0x82, 0x4b, 0x47, 0xa7, 0xf3, 0x60, 0x34, 0xfb, + 0x76, 0x7a, 0xfe, 0x75, 0x6a, 0xe1, 0x6a, 0x64, 0x1a, 0x29, 0x86, 0x1f, 0xc2, 0x76, 0x87, 0xcd, + 0xc7, 0xf9, 0xd9, 0xe1, 0x16, 0xa6, 0x9b, 0x28, 0x66, 0x77, 0x70, 0x73, 0x1d, 0xff, 0xd5, 0xb8, + 0x5d, 0x86, 0x4b, 0x99, 0x36, 0x8a, 0xdd, 0x09, 0x34, 0x64, 0x47, 0xfb, 0x5e, 0x10, 0x32, 0xba, + 0x82, 0x7b, 0x34, 0x9f, 0xb8, 0x83, 0xe0, 0x85, 0x2b, 0x75, 0x6f, 0xc5, 0x2c, 0x13, 0xa0, 0x8f, + 0xdf, 0xa2, 0x05, 0xe5, 0x63, 0x67, 0x6c, 0xb3, 0xa5, 0x91, 0x9a, 0x16, 0x7d, 0x13, 0xce, 0x99, + 0x06, 0xb6, 0xf7, 0xcc, 0x1a, 0xb3, 0xba, 0x95, 0xcc, 0xe8, 0xdb, 0xb8, 0x00, 0x9b, 0x5a, 0x47, + 0xaa, 0x77, 0x04, 0xaa, 0x81, 0xc5, 0xdd, 0xb3, 0x8a, 0x69, 0x40, 0x45, 0xfa, 0xa7, 0xd0, 0xe8, + 0x4e, 0xff, 0x08, 0xb7, 0x56, 0x1b, 0xe8, 0x1b, 0xb2, 0x11, 0x64, 0xb3, 0x51, 0x9b, 0x7d, 0x1c, + 0x73, 0x31, 0xc7, 0x18, 0x48, 0x24, 0x8d, 0x55, 0x1b, 0x80, 0x1a, 0xd5, 0x5f, 0x17, 0xa0, 0x8e, + 0xfa, 0x7b, 0x6f, 0xe2, 0xbe, 0x5c, 0xf4, 0xd1, 0x9c, 0xb8, 0x33, 0x2f, 0x50, 0x56, 0x9b, 0x7f, + 0x8b, 0xcf, 0xa0, 0xc4, 0xab, 0x5c, 0xe4, 0xd1, 0xdf, 0x8c, 0x7b, 0x4e, 0x30, 0xbd, 0xbd, 0x3f, + 0x9b, 0x3a, 0xc1, 0xcc, 0x73, 0xa6, 0x27, 0xbd, 0xd9, 0xd8, 0x19, 0xbe, 0x30, 0xb9, 0x15, 0xca, + 0x7d, 0x23, 0x8d, 0x21, 0x69, 0xef, 0x99, 0x1d, 0x14, 0x7b, 0x94, 0xf6, 0xde, 0xe1, 0x51, 0x52, + 0xee, 0x1b, 0xec, 0x0e, 0x98, 0xb1, 0x9a, 0xc0, 0x17, 0xd0, 0x90, 0xb6, 0xe2, 0x75, 0xa7, 0xc0, + 0x7b, 0x18, 0x73, 0x50, 0x6c, 0x3b, 0x50, 0x36, 0x7b, 0x5f, 0x76, 0x77, 0x66, 0xd3, 0xe3, 0x33, + 0xd8, 0xbd, 0x05, 0x55, 0xcf, 0x9e, 0xcc, 0x02, 0x7b, 0x10, 0x71, 0xad, 0x98, 0x20, 0x41, 0x3d, + 0xe2, 0xfd, 0xeb, 0x12, 0x54, 0x88, 0xcf, 0x51, 0x60, 0x05, 0xec, 0xf8, 0xe6, 0x6e, 0xe0, 0x4c, + 0xe4, 0x66, 0x17, 0x4d, 0xf5, 0x45, 0x62, 0x47, 0x7a, 0xc7, 0x98, 0x65, 0xc6, 0x44, 0xdf, 0x62, + 0x1d, 0x96, 0xe7, 0x2e, 0x2f, 0x6f, 0xd9, 0xc4, 0x5f, 0xb2, 0xcb, 0xe1, 0xcc, 0x1b, 0x0d, 0x1c, + 0xf7, 0xd9, 0x8f, 0xd8, 0xfc, 0xd7, 0xa9, 0x4b, 0x02, 0x75, 0x11, 0x92, 0x24, 0xb8, 0xcb, 0xb6, + 0x5f, 0x27, 0xb8, 0x4b, 0x04, 0xae, 0x67, 0x1f, 0x3b, 0xcf, 0x25, 0x87, 0x55, 0x49, 0x20, 0x41, + 0x21, 0x87, 0x98, 0xe0, 0x6e, 0x73, 0x2d, 0x45, 0x70, 0x97, 0xe6, 0xe1, 0xdb, 0x9e, 0x83, 0x4a, + 0x52, 0x96, 0x3e, 0x49, 0x7e, 0x89, 0xef, 0x40, 0x1d, 0xfb, 0xb1, 0x9d, 0x67, 0xb6, 0x1a, 0x5d, + 0x85, 0x27, 0x53, 0x0b, 0x81, 0xcc, 0x3d, 0x45, 0x74, 0xb7, 0x09, 0x19, 0xa2, 0xbb, 0x44, 0x24, + 0x79, 0x0e, 0xa6, 0xb3, 0xc0, 0x39, 0x7e, 0xd1, 0xac, 0x4a, 0x22, 0x09, 0x3c, 0x60, 0x18, 0x8d, + 0x73, 0x68, 0x0d, 0x4f, 0xed, 0x81, 0x47, 0x66, 0xb0, 0x59, 0x63, 0x12, 0x60, 0x10, 0x1b, 0x46, + 0xf1, 0x0e, 0xac, 0x47, 0x04, 0xbc, 0xad, 0xcd, 0x3a, 0xd3, 0xd4, 0x43, 0x1a, 0xe9, 0xd3, 0xaf, + 0x43, 0xd5, 0x9e, 0x8e, 0x06, 0xb3, 0xe3, 0xc1, 0xc8, 0x0a, 0xac, 0xe6, 0x3a, 0xd3, 0x54, 0x10, + 0x74, 0x78, 0xbc, 0x8b, 0x00, 0xb1, 0x05, 0x2b, 0xb6, 0xe7, 0xcd, 0xbc, 0xe6, 0x06, 0x63, 0xe4, + 0x87, 0xb8, 0x01, 0x6a, 0x34, 0x03, 0x14, 0x3a, 0xef, 0x45, 0xb3, 0xc1, 0xc8, 0xaa, 0x84, 0x7d, + 0x45, 0x20, 0xb9, 0x15, 0x38, 0x10, 0x45, 0xb1, 0x29, 0x07, 0xc8, 0x20, 0x26, 0x30, 0xbe, 0x86, + 0x92, 0xe9, 0x7e, 0xe3, 0x88, 0xef, 0x41, 0x69, 0x88, 0x92, 0xa6, 0x9c, 0xa2, 0x6e, 0x03, 0x94, + 0x0c, 0x9a, 0x8c, 0x17, 0xef, 0xc1, 0x8a, 0x4f, 0x92, 0xc4, 0x52, 0x52, 0xbd, 0x73, 0x21, 0x49, + 0xc8, 0x42, 0x66, 0x4a, 0x0a, 0xe3, 0x26, 0xac, 0x63, 0x78, 0x47, 0xdc, 0x43, 0xad, 0x88, 0x23, + 0x89, 0x82, 0x1e, 0x49, 0xa0, 0xab, 0xde, 0x88, 0x28, 0xd5, 0x8a, 0xdc, 0x84, 0x35, 0x9c, 0xc7, + 0xb3, 0xdc, 0x30, 0x90, 0x09, 0x43, 0xb4, 0xf1, 0x4b, 0x56, 0x48, 0xbd, 0x9b, 0x57, 0xb3, 0x1f, + 0x28, 0xfa, 0x63, 0xe7, 0xd8, 0x66, 0xd1, 0x2f, 0x4a, 0xd1, 0x0f, 0xbf, 0x8d, 0x4d, 0x0e, 0xbf, + 0xf4, 0x81, 0x19, 0xed, 0x50, 0x57, 0x5f, 0xbb, 0xc7, 0x38, 0x00, 0x4a, 0x30, 0xfe, 0x41, 0x68, + 0xdd, 0xcf, 0xc5, 0x98, 0x98, 0xe8, 0xe4, 0x8a, 0xc9, 0xed, 0xc8, 0xf0, 0x9f, 0x8f, 0x0b, 0xc6, + 0x4e, 0x09, 0x7a, 0xc5, 0xe6, 0x7d, 0x68, 0xb0, 0xfc, 0x9e, 0x8f, 0x09, 0x9a, 0x2f, 0x8d, 0x3a, + 0x8e, 0x93, 0xa2, 0xf8, 0xe0, 0x7c, 0x6c, 0x30, 0x4e, 0x4a, 0xb5, 0x50, 0xac, 0xac, 0x70, 0xaa, + 0xbf, 0xb4, 0x9f, 0x7a, 0x56, 0xc8, 0xa8, 0x01, 0xc5, 0xb9, 0x37, 0x56, 0x4c, 0xe8, 0x27, 0x0b, + 0xfb, 0x6c, 0x8e, 0xa6, 0x90, 0x2c, 0xbb, 0x8f, 0x4b, 0x5e, 0x64, 0x5b, 0x48, 0x20, 0xf2, 0xbb, + 0x3e, 0xf5, 0x4d, 0x22, 0x43, 0x71, 0x93, 0x0c, 0x65, 0xc3, 0x4f, 0x5a, 0x87, 0x44, 0x17, 0xaa, + 0xe7, 0x0d, 0xa8, 0xa3, 0x60, 0x3e, 0xf6, 0x8e, 0x43, 0xc7, 0xfa, 0x11, 0xcb, 0x34, 0x03, 0x94, + 0xa0, 0xde, 0x80, 0x12, 0xba, 0xc0, 0x50, 0x4a, 0xeb, 0xb1, 0x94, 0x12, 0x11, 0xa3, 0x70, 0x29, + 0xc8, 0xc1, 0xc5, 0x5c, 0x70, 0xa0, 0x45, 0x44, 0x28, 0x5d, 0x4b, 0x35, 0x21, 0x8c, 0x72, 0x32, + 0x5a, 0x37, 0xd8, 0xb1, 0x72, 0x32, 0xaf, 0xc2, 0x26, 0xf2, 0x2b, 0x3a, 0xa7, 0x36, 0x6c, 0xe1, + 0x14, 0x76, 0xd1, 0x94, 0x4e, 0xed, 0xd1, 0x91, 0x1d, 0x45, 0x02, 0xef, 0x29, 0x3f, 0x2a, 0xa3, + 0x80, 0xed, 0x98, 0x9d, 0x22, 0xa5, 0x25, 0x54, 0x4e, 0xb3, 0x0d, 0xdb, 0x29, 0x16, 0x91, 0xd6, + 0x96, 0x70, 0xf3, 0xc2, 0xc5, 0xd8, 0xca, 0xf0, 0x20, 0x5a, 0xa6, 0x30, 0x7e, 0x0a, 0x5b, 0x38, + 0xc3, 0xec, 0x28, 0xbe, 0x07, 0x45, 0xb2, 0xa4, 0x72, 0x4e, 0xf9, 0x0c, 0x88, 0x80, 0x84, 0x25, + 0xd5, 0x5e, 0x4d, 0xef, 0x08, 0x03, 0x35, 0x9e, 0xf3, 0x6b, 0xf3, 0x26, 0xc9, 0xb2, 0xc6, 0x63, + 0x56, 0xd9, 0xb2, 0x49, 0x3f, 0x29, 0x34, 0xcd, 0x32, 0x55, 0x1d, 0xde, 0x83, 0xa6, 0x69, 0xbb, + 0x63, 0x6b, 0xf8, 0xfa, 0x3d, 0x52, 0x30, 0x9d, 0xc3, 0x43, 0x75, 0xb0, 0xcd, 0xc7, 0x64, 0x36, + 0xad, 0x74, 0xda, 0x0d, 0x45, 0xf1, 0x4b, 0xde, 0x47, 0x0d, 0xac, 0xf6, 0xe0, 0x23, 0x00, 0x3f, + 0x04, 0x86, 0x3b, 0xa1, 0x99, 0xe9, 0xb8, 0x81, 0x46, 0x66, 0x3c, 0xe4, 0x33, 0x54, 0xba, 0x0f, + 0xf1, 0x21, 0x54, 0x22, 0x22, 0x35, 0x8b, 0x5c, 0x56, 0x31, 0x95, 0x71, 0x91, 0x37, 0x36, 0x33, + 0x2c, 0xe3, 0xf7, 0xc3, 0x13, 0xd5, 0x1b, 0xe8, 0x24, 0x67, 0x87, 0x2e, 0x87, 0xdb, 0x9e, 0xed, + 0x79, 0x0f, 0x2e, 0xa9, 0xc5, 0x7d, 0x13, 0xf3, 0x6b, 0x45, 0xdb, 0x9d, 0xed, 0x49, 0x40, 0x03, + 0xb7, 0x44, 0xc5, 0x97, 0x6a, 0x9b, 0xd0, 0x5f, 0x68, 0x30, 0xb5, 0x47, 0xef, 0x43, 0xd9, 0x25, + 0x88, 0x63, 0x87, 0x3b, 0xd4, 0xd0, 0x22, 0x66, 0x49, 0x1b, 0x51, 0x18, 0xcf, 0xa1, 0x41, 0x49, + 0x00, 0x9d, 0x2d, 0x6a, 0xda, 0x2a, 0xe3, 0x5f, 0xa8, 0x61, 0x67, 0xdb, 0x2b, 0xbc, 0xf8, 0x09, + 0x5c, 0xc6, 0xb8, 0xc9, 0xf6, 0x06, 0xf6, 0x73, 0xc7, 0x0f, 0x30, 0xca, 0x1d, 0x68, 0xe2, 0x21, + 0x57, 0xf0, 0x12, 0x13, 0x74, 0x14, 0xfe, 0x28, 0x16, 0x0b, 0x34, 0x20, 0x5a, 0xcf, 0x6a, 0x96, + 0x7f, 0x56, 0x40, 0xa7, 0x21, 0x0f, 0xf0, 0xaf, 0x39, 0xa4, 0x0f, 0xe0, 0x82, 0x4b, 0x31, 0x08, + 0x3a, 0xf0, 0xec, 0x60, 0x44, 0x88, 0x8a, 0xc7, 0x11, 0xee, 0x77, 0x31, 0xde, 0x6f, 0x14, 0xb3, + 0xe4, 0x18, 0xd4, 0xe0, 0xfe, 0xa6, 0x40, 0xe7, 0x73, 0xde, 0x9f, 0xff, 0x83, 0x05, 0x5b, 0x34, + 0xb3, 0xe2, 0xa2, 0x99, 0xc9, 0xe4, 0x40, 0x62, 0xb8, 0x6a, 0x22, 0x4f, 0xa0, 0x15, 0xc9, 0x4d, + 0xdb, 0xf7, 0x9d, 0x93, 0xa9, 0x2e, 0xb8, 0x3f, 0x01, 0xb0, 0x22, 0xa0, 0x9a, 0x51, 0x2b, 0x3d, + 0x23, 0xad, 0x99, 0x46, 0x8d, 0x21, 0xdf, 0x95, 0x5c, 0xce, 0x4a, 0x36, 0xff, 0x27, 0xac, 0x71, + 0xd0, 0x91, 0xbc, 0xbc, 0xd9, 0x41, 0x5f, 0x83, 0x2b, 0xb9, 0x9c, 0xd5, 0x6a, 0x4d, 0xe0, 0x9a, + 0x2e, 0x0e, 0x6f, 0xb4, 0xef, 0x1c, 0x6b, 0xf3, 0x36, 0x5c, 0x5f, 0xd4, 0x9d, 0x1a, 0xd0, 0xef, + 0xc1, 0xf5, 0xc4, 0xbe, 0xbe, 0xd9, 0xd5, 0xb8, 0x01, 0x6f, 0x2d, 0xe4, 0x9e, 0xb0, 0x45, 0x47, + 0x1c, 0x24, 0x87, 0xb6, 0xe8, 0x73, 0xb6, 0x45, 0x21, 0x2c, 0xf2, 0xd9, 0xab, 0x27, 0xe3, 0xd9, + 0x53, 0x6b, 0x9c, 0x55, 0x8c, 0x07, 0x0c, 0x37, 0x15, 0x1e, 0x7d, 0xb6, 0x40, 0xc9, 0xf5, 0x92, + 0x4c, 0x5f, 0xa1, 0x3d, 0x3a, 0xb2, 0x44, 0xfb, 0x38, 0x83, 0x71, 0x14, 0xcc, 0xdc, 0xe4, 0x50, + 0xb7, 0xa8, 0xaf, 0x18, 0xa8, 0x48, 0x7f, 0x5d, 0xc4, 0x13, 0xb9, 0xca, 0x2b, 0x4e, 0xc7, 0x9e, + 0x13, 0x26, 0x41, 0xe9, 0x37, 0x9d, 0x2e, 0x5c, 0x2b, 0x08, 0x3c, 0x19, 0xf9, 0xd5, 0x4c, 0xf5, + 0xc5, 0xdb, 0x77, 0x12, 0xc6, 0xf6, 0xf4, 0x93, 0x5a, 0x3f, 0xc5, 0x4e, 0xf8, 0xe8, 0x5a, 0x36, + 0xf9, 0x37, 0x05, 0x8f, 0x8e, 0x3f, 0xf8, 0xd6, 0x09, 0x4e, 0x47, 0x9e, 0xf5, 0x2d, 0x1f, 0x5a, + 0xcb, 0x26, 0x38, 0xfe, 0x2f, 0x14, 0x04, 0xcf, 0x68, 0xf0, 0xcc, 0x1a, 0x3b, 0x78, 0x40, 0xa3, + 0xf8, 0x71, 0x95, 0x73, 0x3a, 0x1a, 0x44, 0x60, 0xc0, 0x3b, 0x9d, 0x0d, 0x9c, 0x89, 0x4b, 0x56, + 0x3b, 0x88, 0x39, 0xad, 0x49, 0xdd, 0x9f, 0xce, 0xba, 0x0a, 0x15, 0x71, 0x8c, 0x8f, 0x43, 0xe5, + 0x44, 0x62, 0xf5, 0x1a, 0x7a, 0x70, 0xce, 0xb6, 0x0c, 0x2c, 0x7f, 0xca, 0x27, 0xd8, 0x3a, 0x7a, + 0x20, 0x86, 0xb4, 0xfd, 0x29, 0xe5, 0x96, 0x14, 0xda, 0x19, 0xf1, 0xd1, 0xb5, 0x62, 0x96, 0x25, + 0xa0, 0x3b, 0x52, 0xb9, 0xa5, 0xc0, 0xf6, 0xec, 0x11, 0x9f, 0x58, 0xcb, 0x66, 0xf4, 0x4d, 0xa7, + 0x48, 0xb4, 0x49, 0x63, 0x9b, 0xcf, 0xa9, 0x65, 0x53, 0x7e, 0xe0, 0xfe, 0x35, 0x70, 0xe2, 0xc7, + 0xde, 0x6c, 0x82, 0x06, 0x0f, 0x09, 0xa7, 0xb8, 0x93, 0x75, 0x26, 0x58, 0x77, 0xfc, 0xfb, 0x08, + 0xee, 0x28, 0x28, 0x2d, 0xd1, 0x54, 0x25, 0xbf, 0xf0, 0xdc, 0xcc, 0xa7, 0x54, 0x8c, 0xaf, 0x43, + 0x50, 0xd7, 0x35, 0xfe, 0xaa, 0x00, 0xd5, 0x5d, 0x9b, 0x6c, 0xa2, 0x5c, 0x12, 0xda, 0x11, 0x3e, + 0xb3, 0xab, 0x28, 0x5d, 0x7d, 0xc5, 0xd9, 0xa2, 0xe5, 0x33, 0xb2, 0x45, 0xe2, 0x5d, 0xd8, 0x18, + 0xcf, 0xa6, 0x27, 0x68, 0x88, 0x65, 0x33, 0x3b, 0xb4, 0xa3, 0xeb, 0x12, 0xdc, 0x53, 0x50, 0x8c, + 0x5c, 0x1b, 0xfe, 0x29, 0x1e, 0xac, 0x74, 0x4a, 0xb9, 0xb5, 0x1b, 0x0a, 0x1e, 0x92, 0x1a, 0x7f, + 0x57, 0x80, 0x95, 0x3e, 0xc5, 0xf9, 0x74, 0xe0, 0xd5, 0xc2, 0xdd, 0xbc, 0xa4, 0x17, 0xe3, 0xa3, + 0x2b, 0x81, 0xe5, 0xf8, 0x4a, 0x60, 0x61, 0x46, 0xfc, 0x77, 0xa0, 0x36, 0x8a, 0xa7, 0x4f, 0x83, + 0xa0, 0xe9, 0x25, 0x42, 0xe9, 0x08, 0x6b, 0x26, 0x48, 0x39, 0xe3, 0x31, 0xf3, 0x83, 0x81, 0xf2, + 0x51, 0x4a, 0xfc, 0x08, 0x24, 0x35, 0xdc, 0xb8, 0xcb, 0x47, 0x11, 0xd3, 0x79, 0x1a, 0xea, 0xdd, + 0x3b, 0xb0, 0x12, 0xd0, 0x4c, 0x94, 0xda, 0x6d, 0xc4, 0xbd, 0xf0, 0x04, 0x4d, 0x89, 0x35, 0x3e, + 0x91, 0xa7, 0x70, 0x6a, 0xa7, 0x14, 0xfe, 0x9c, 0x0d, 0xc7, 0x20, 0x1e, 0x4b, 0xe9, 0xb6, 0xb5, + 0x5e, 0xcf, 0xbb, 0x6c, 0x8b, 0x6e, 0x58, 0x62, 0x91, 0x28, 0xea, 0x22, 0x41, 0xb6, 0x21, 0xd1, + 0x9b, 0x52, 0xf8, 0x7f, 0x20, 0x85, 0xb7, 0x6d, 0x8f, 0xe5, 0x9a, 0x38, 0x84, 0x11, 0x53, 0xdd, + 0x8c, 0xbe, 0xc5, 0x8f, 0xa1, 0x66, 0xb9, 0xee, 0xf8, 0x45, 0xb8, 0x78, 0x32, 0x35, 0xa1, 0x2d, + 0x7b, 0x9b, 0xb0, 0xca, 0xbf, 0x56, 0xad, 0xf8, 0x23, 0xca, 0x7a, 0x14, 0xd3, 0x59, 0x0f, 0xea, + 0x53, 0xcb, 0x7a, 0x7c, 0x0a, 0x75, 0x1b, 0x31, 0x83, 0xc9, 0x7c, 0x1c, 0x38, 0xa7, 0x33, 0x57, + 0xdd, 0x79, 0x5c, 0x8c, 0x1b, 0x74, 0xf0, 0xef, 0xbe, 0xc2, 0x9a, 0x35, 0x5b, 0xfb, 0x12, 0x6d, + 0xd8, 0x90, 0xc7, 0x52, 0x9c, 0xe9, 0xd8, 0x1e, 0x06, 0x33, 0x8f, 0xb7, 0xb7, 0x7a, 0xa7, 0xa9, + 0xad, 0x1e, 0x11, 0x98, 0x21, 0xde, 0x5c, 0xf7, 0x12, 0xdf, 0xa8, 0x0a, 0x25, 0x67, 0x7a, 0x3c, + 0x63, 0xab, 0x93, 0x08, 0x51, 0x69, 0x9c, 0x32, 0xe9, 0xc2, 0x04, 0x64, 0x8c, 0x29, 0x71, 0x81, + 0x36, 0x70, 0x2d, 0x6d, 0x8c, 0xfb, 0x0c, 0x37, 0x15, 0x9e, 0x42, 0xdf, 0xc0, 0xb3, 0xa6, 0x3e, + 0x67, 0x27, 0xca, 0x69, 0xbe, 0xfd, 0x10, 0x65, 0xc6, 0x54, 0xb4, 0xce, 0x72, 0x22, 0x32, 0xf5, + 0xc2, 0x96, 0x29, 0xb1, 0xce, 0x3c, 0x0b, 0x65, 0xb2, 0xe5, 0x51, 0x5c, 0x7e, 0x18, 0xff, 0x8c, + 0x86, 0x41, 0xdb, 0x04, 0xf1, 0x09, 0x54, 0x9c, 0xe9, 0x20, 0x11, 0x8f, 0x9d, 0xe5, 0xfa, 0xca, + 0xce, 0x54, 0x35, 0xfc, 0x19, 0x6e, 0xc4, 0x73, 0x1a, 0x4c, 0x72, 0xaf, 0xcf, 0x6a, 0x5c, 0x93, + 0x0d, 0x62, 0x06, 0x68, 0xa2, 0x35, 0x06, 0xc5, 0x97, 0x33, 0x90, 0x0d, 0x94, 0x1e, 0xfe, 0x09, + 0x54, 0xa5, 0x35, 0xd9, 0x73, 0x26, 0xce, 0xc2, 0x94, 0x16, 0xe5, 0xe6, 0x26, 0xd6, 0xf3, 0xd8, + 0x1e, 0x49, 0x2d, 0xa8, 0x22, 0x2c, 0x32, 0x5b, 0x3f, 0x82, 0x8b, 0xbe, 0xba, 0xef, 0x18, 0x04, + 0xa7, 0x18, 0x1a, 0x9e, 0xce, 0xc6, 0xa3, 0x81, 0x3b, 0x0c, 0x94, 0x55, 0xd9, 0x0a, 0xb1, 0xfd, + 0x10, 0xd9, 0x1b, 0x06, 0xc6, 0xbf, 0x97, 0xa0, 0x1c, 0x4a, 0x27, 0x25, 0x29, 0xad, 0x79, 0x70, + 0x3a, 0x70, 0x31, 0x36, 0xf8, 0x76, 0xe6, 0x8d, 0x94, 0x9d, 0xad, 0x11, 0xb0, 0xa7, 0x60, 0xe2, + 0x6d, 0xa8, 0xa2, 0xa9, 0x19, 0x7a, 0x8e, 0x1b, 0xdd, 0x18, 0x55, 0x4c, 0x1d, 0x24, 0x2e, 0x43, + 0x79, 0x3c, 0x1b, 0x5a, 0x63, 0xf4, 0x37, 0x61, 0x62, 0x84, 0xbf, 0xdb, 0x6c, 0x5b, 0x23, 0x9b, + 0x1f, 0xe6, 0x6d, 0x4a, 0xcc, 0x61, 0x23, 0x84, 0xb7, 0x55, 0xaa, 0xeb, 0x12, 0xac, 0xd1, 0xdd, + 0x19, 0x31, 0x91, 0x29, 0xdf, 0x55, 0xfa, 0x44, 0x1e, 0xe8, 0xcf, 0x18, 0x71, 0x82, 0x22, 0xe1, + 0xb2, 0x0c, 0x57, 0xcc, 0x0a, 0x41, 0x1e, 0x10, 0x80, 0xfc, 0x19, 0xa3, 0xd9, 0xae, 0xc8, 0x54, + 0x6f, 0x99, 0x00, 0x7c, 0x57, 0x72, 0x0b, 0x36, 0x29, 0x99, 0x8d, 0xe1, 0xb4, 0xeb, 0x39, 0xcf, + 0x50, 0xd0, 0x89, 0xbd, 0x74, 0x97, 0x1b, 0x12, 0xd1, 0x93, 0x70, 0xec, 0xe7, 0x7d, 0x10, 0x52, + 0x3e, 0x8f, 0xc7, 0x96, 0x3b, 0x18, 0x59, 0x13, 0x17, 0x83, 0x73, 0x96, 0xd2, 0xb2, 0xd9, 0x60, + 0xcc, 0x7d, 0x44, 0xec, 0x4a, 0x38, 0xa5, 0x66, 0x7d, 0x4a, 0xba, 0x0e, 0x67, 0x93, 0xc9, 0x7c, + 0xea, 0x04, 0x2f, 0xd8, 0x97, 0xd6, 0xcd, 0x3a, 0x41, 0x77, 0x42, 0x20, 0x0d, 0x5e, 0x25, 0xd8, + 0x87, 0x96, 0x8b, 0x2e, 0x95, 0x22, 0x8b, 0x8a, 0x84, 0xec, 0x58, 0x3c, 0x78, 0xb9, 0x74, 0x84, + 0xad, 0x31, 0x56, 0xae, 0x25, 0x21, 0xd7, 0x61, 0x19, 0x5d, 0x74, 0x9d, 0x27, 0x8c, 0xbf, 0x30, + 0xe4, 0xab, 0xab, 0xb4, 0xf6, 0x98, 0x84, 0xc7, 0x47, 0x17, 0x9a, 0x72, 0x10, 0x9a, 0x68, 0x99, + 0x35, 0x37, 0xfe, 0xf0, 0x69, 0xab, 0xd5, 0x1e, 0xa9, 0x5d, 0xd8, 0x90, 0x5b, 0x2d, 0x37, 0x4a, + 0x6d, 0xc1, 0x0f, 0x40, 0xc4, 0x1e, 0x9a, 0xae, 0x8d, 0x8e, 0x31, 0x44, 0xe4, 0xbc, 0x70, 0xc5, + 0xdc, 0x8c, 0x1c, 0x75, 0x88, 0xa0, 0xc8, 0x88, 0x12, 0x48, 0x9b, 0x32, 0x85, 0x46, 0x19, 0xa3, + 0x2f, 0xa1, 0xa6, 0x5b, 0x32, 0xca, 0x98, 0xc9, 0x6b, 0xfb, 0xf0, 0x16, 0x3f, 0xfc, 0x64, 0x01, + 0x57, 0x54, 0x83, 0x20, 0x18, 0x47, 0x02, 0xae, 0x60, 0xfd, 0x60, 0x6c, 0xfc, 0x79, 0x01, 0xd6, + 0x93, 0x86, 0x8d, 0x64, 0x3e, 0x65, 0x0b, 0x07, 0x43, 0xb4, 0xe1, 0x2a, 0x00, 0x2e, 0x9b, 0x5b, + 0x49, 0xc3, 0xb7, 0xc3, 0x38, 0x34, 0xbf, 0xad, 0x6c, 0xab, 0xb9, 0x4f, 0x0e, 0x3f, 0xba, 0x88, + 0xba, 0x94, 0x6e, 0xc9, 0xf8, 0xee, 0xc8, 0xf8, 0xdb, 0x55, 0xa8, 0x44, 0x66, 0xf2, 0x7f, 0x41, + 0x63, 0x6e, 0x43, 0x79, 0x82, 0x7b, 0x81, 0x71, 0xa6, 0xaf, 0xdc, 0x84, 0xe6, 0x57, 0xf6, 0x15, + 0xc6, 0x8c, 0x68, 0x72, 0x35, 0x6c, 0xe5, 0xa5, 0x1a, 0xb6, 0x7a, 0x86, 0x86, 0xad, 0x9d, 0xa9, + 0x61, 0xe5, 0x94, 0x86, 0xa1, 0xcb, 0x40, 0xd7, 0x8e, 0xce, 0x5d, 0xd9, 0x73, 0xcd, 0x65, 0x7c, + 0xc5, 0x70, 0x53, 0xe1, 0xf3, 0x75, 0x11, 0x5e, 0x45, 0x17, 0xab, 0xe7, 0xd6, 0xc5, 0x5a, 0x9e, + 0x2e, 0xf2, 0x9d, 0x8c, 0x4f, 0x09, 0x5b, 0x79, 0xb8, 0x66, 0xd5, 0xaa, 0xd3, 0x9d, 0x0c, 0x03, + 0xe5, 0x0e, 0x7f, 0x8c, 0x66, 0x75, 0xee, 0x92, 0xc5, 0xb6, 0x47, 0xa4, 0x95, 0xd6, 0x53, 0x8c, + 0x12, 0x02, 0x8a, 0x1b, 0xd6, 0x39, 0x21, 0xbc, 0x1d, 0x61, 0x77, 0x34, 0x24, 0xad, 0x11, 0x79, + 0x78, 0xc9, 0x57, 0xea, 0x56, 0x19, 0x01, 0x92, 0xe7, 0xcf, 0xa0, 0x6a, 0x8d, 0x26, 0x4e, 0xd8, + 0x6d, 0x83, 0x83, 0x9f, 0xeb, 0x39, 0x6e, 0xf8, 0x76, 0x9b, 0xc8, 0xa4, 0x47, 0x06, 0x2b, 0xfa, + 0x4d, 0xe1, 0x4b, 0x78, 0xbb, 0xc4, 0xea, 0x56, 0x37, 0xa3, 0x6f, 0xc2, 0x59, 0xc3, 0xa1, 0xed, + 0xe2, 0x88, 0x9a, 0x42, 0xe2, 0xc2, 0x6f, 0x3a, 0x74, 0x58, 0xf1, 0x43, 0x9a, 0x0b, 0xf2, 0x1e, + 0x2c, 0x86, 0x88, 0x0b, 0xb0, 0x82, 0x6b, 0x39, 0xf8, 0x55, 0x73, 0x4b, 0xde, 0x2f, 0xe0, 0xc7, + 0x57, 0x14, 0xe7, 0x1f, 0x8f, 0x67, 0xae, 0xdf, 0xdc, 0x66, 0xa0, 0xfc, 0x30, 0x6e, 0x01, 0xc4, + 0x83, 0xa3, 0x9b, 0xfd, 0x47, 0x3d, 0x79, 0xc5, 0xb9, 0x7b, 0xf8, 0x8b, 0x83, 0x46, 0x41, 0x00, + 0xac, 0xf6, 0xee, 0x3f, 0x19, 0xec, 0xf4, 0x1b, 0xcb, 0xc6, 0x1f, 0x42, 0x39, 0x94, 0x54, 0xb4, + 0x29, 0xf1, 0xd0, 0xa5, 0xab, 0xde, 0xcc, 0xc8, 0xb3, 0x36, 0x9b, 0x77, 0x28, 0x05, 0x3c, 0x0d, + 0x94, 0x63, 0xce, 0x21, 0x65, 0xb4, 0xf1, 0x8f, 0x05, 0x58, 0x53, 0x10, 0x61, 0x40, 0xed, 0xe0, + 0xb0, 0xdf, 0xbd, 0xdf, 0xdd, 0x69, 0xf7, 0xbb, 0x87, 0x07, 0xdc, 0x4b, 0xc9, 0x4c, 0xc0, 0xc8, + 0xcf, 0x3e, 0xea, 0xed, 0xb6, 0xfb, 0x1d, 0x66, 0x5c, 0x32, 0xd5, 0x17, 0x85, 0xe7, 0x87, 0xbd, + 0xce, 0x81, 0xba, 0x2b, 0xe7, 0xdf, 0xe2, 0x2a, 0x54, 0xbe, 0xec, 0x74, 0x7a, 0xed, 0xbd, 0xee, + 0xe3, 0x0e, 0xab, 0x60, 0xc9, 0x8c, 0x01, 0x64, 0xd2, 0xcc, 0xce, 0x7d, 0xb3, 0x73, 0xf4, 0x90, + 0xd5, 0xac, 0x64, 0x86, 0x9f, 0xd4, 0x6e, 0xb7, 0x7b, 0xb4, 0xd3, 0x36, 0x77, 0x3b, 0xbb, 0xac, + 0x60, 0xd8, 0x2e, 0x02, 0xd0, 0xaa, 0xf6, 0x0f, 0xfb, 0xed, 0x3d, 0x56, 0xaf, 0x92, 0x29, 0x3f, + 0x30, 0x2c, 0x5f, 0x95, 0x5a, 0x42, 0x78, 0x67, 0xea, 0xce, 0x03, 0x15, 0x08, 0xc8, 0x0f, 0x1a, + 0x37, 0xee, 0x09, 0x81, 0x55, 0x1c, 0x2c, 0xbf, 0x0c, 0x1b, 0x56, 0x65, 0x40, 0x86, 0xf6, 0x62, + 0x95, 0x62, 0x4c, 0xe7, 0x44, 0xad, 0xee, 0xc5, 0x74, 0xc8, 0xb6, 0xc3, 0x58, 0x53, 0x51, 0x89, + 0xef, 0x27, 0x6f, 0xe0, 0xb6, 0xd3, 0xe4, 0x89, 0x3b, 0x38, 0x5c, 0xe6, 0x9a, 0xce, 0x85, 0x54, + 0x08, 0xf9, 0x4c, 0xd1, 0x46, 0xa2, 0x31, 0x0d, 0xbc, 0x17, 0xe1, 0x62, 0x2b, 0xa0, 0x49, 0x30, + 0xd2, 0x05, 0x8e, 0x45, 0xa2, 0xeb, 0xe0, 0x92, 0x59, 0x26, 0x00, 0x71, 0x22, 0x1f, 0xf3, 0x8d, + 0x6d, 0xbb, 0x18, 0xac, 0xa3, 0x21, 0x48, 0xbd, 0x55, 0xd8, 0x8c, 0x30, 0x5d, 0x85, 0x10, 0xbb, + 0x70, 0x1d, 0x85, 0xce, 0x99, 0xcc, 0x27, 0x83, 0x48, 0x6e, 0x29, 0xac, 0x8a, 0x9b, 0xca, 0x1d, + 0xba, 0xaa, 0xa8, 0xda, 0x3a, 0x51, 0xc8, 0xc5, 0xf8, 0xcd, 0x32, 0x54, 0xb5, 0xe9, 0xfd, 0x3f, + 0x9d, 0x06, 0xe7, 0x08, 0xec, 0x93, 0x59, 0xe0, 0x58, 0x64, 0x9c, 0xe2, 0xc1, 0x49, 0x41, 0x14, + 0x31, 0xee, 0x61, 0x38, 0xcc, 0xf8, 0xc2, 0x5e, 0x0a, 0x64, 0xde, 0x85, 0xbd, 0x14, 0xc8, 0xe8, + 0xdb, 0xf8, 0xaf, 0x02, 0x54, 0xa2, 0x00, 0x3e, 0x1b, 0x38, 0x14, 0x72, 0x02, 0x07, 0x74, 0x20, + 0x92, 0x48, 0xbb, 0xac, 0x94, 0x81, 0x4d, 0x4f, 0xf1, 0x98, 0x04, 0xf3, 0xc1, 0xc8, 0xf1, 0x87, + 0x68, 0xe5, 0xbd, 0x17, 0xea, 0x20, 0x5e, 0x43, 0xe0, 0x6e, 0x08, 0xa3, 0x88, 0x80, 0xbc, 0x2a, + 0xad, 0xe7, 0x64, 0x36, 0xb2, 0xd5, 0x11, 0xbc, 0xaa, 0x60, 0xfb, 0x08, 0x22, 0x3b, 0xaf, 0x82, + 0xa9, 0xa4, 0xa7, 0xab, 0x4b, 0x68, 0x3b, 0xff, 0x51, 0xc3, 0x6a, 0xf8, 0x80, 0x20, 0x7c, 0xd4, + 0x40, 0x8e, 0x30, 0x18, 0xe2, 0x71, 0xcc, 0xf7, 0x55, 0xc0, 0xb8, 0x8a, 0x9f, 0xfb, 0xbe, 0x6f, + 0x7c, 0x0e, 0x55, 0xed, 0x10, 0x82, 0xba, 0x75, 0x41, 0x3f, 0xb1, 0x24, 0x63, 0x8d, 0x4d, 0xed, + 0x84, 0x22, 0x03, 0x0d, 0x63, 0x8e, 0x36, 0x50, 0xa6, 0x28, 0x50, 0x76, 0x1c, 0x77, 0x90, 0xc8, + 0x5e, 0x94, 0x1d, 0x57, 0x21, 0xbf, 0x07, 0x1b, 0x13, 0xcb, 0xff, 0x66, 0x30, 0xb6, 0xa7, 0x27, + 0x18, 0x4b, 0xe0, 0x96, 0xab, 0x25, 0xab, 0x13, 0x78, 0x8f, 0xa1, 0xfb, 0xce, 0x34, 0x43, 0x67, + 0x3d, 0x57, 0xc1, 0x82, 0x4e, 0x67, 0x3d, 0x37, 0xfe, 0xb2, 0x00, 0x10, 0x5f, 0xfc, 0xbc, 0xc2, + 0x4d, 0x5c, 0x6e, 0x76, 0x02, 0x61, 0x63, 0xc7, 0x0f, 0xf8, 0x29, 0x0e, 0xc2, 0xe8, 0x37, 0x5f, + 0x38, 0xc4, 0xa9, 0x91, 0xf4, 0x85, 0x03, 0x63, 0xcc, 0x88, 0xc2, 0x78, 0x80, 0xe6, 0xdf, 0x0a, + 0x86, 0xa7, 0x34, 0x98, 0x77, 0x13, 0x83, 0xd1, 0x8e, 0x88, 0x4c, 0x71, 0xf6, 0x50, 0x8c, 0xc7, + 0x50, 0x6b, 0xfb, 0x94, 0xd3, 0x91, 0x73, 0xc5, 0xfd, 0xd0, 0x99, 0x69, 0x87, 0x2e, 0x9d, 0x4a, + 0xe3, 0x89, 0xd2, 0x2f, 0xd7, 0x2e, 0xb4, 0x9e, 0xf2, 0xcb, 0xf8, 0xcf, 0x12, 0x00, 0x1a, 0xb4, + 0x91, 0x23, 0x93, 0x27, 0x1f, 0x82, 0x7a, 0x1b, 0x32, 0x88, 0x6f, 0xdb, 0x44, 0x6a, 0xa4, 0x74, + 0xa3, 0x56, 0x91, 0x54, 0x34, 0xad, 0x8f, 0xa1, 0x16, 0x45, 0x5d, 0xd4, 0x68, 0x79, 0x61, 0xa3, + 0x28, 0xe7, 0x45, 0xcd, 0x3e, 0x83, 0x75, 0xcb, 0x1f, 0x50, 0x7e, 0x4a, 0x6d, 0xaa, 0x3a, 0x3f, + 0x5e, 0xcc, 0x9f, 0x0a, 0xc6, 0x95, 0xfa, 0xf4, 0xef, 0x60, 0x18, 0xa1, 0x5a, 0x53, 0x9f, 0xa5, + 0xc5, 0x03, 0x95, 0xcd, 0xa8, 0xc7, 0x4f, 0xc8, 0xd2, 0xa9, 0x00, 0x88, 0x5b, 0xad, 0x2c, 0x6c, + 0x55, 0x8b, 0x08, 0xa9, 0xe1, 0x4f, 0x61, 0xd3, 0x7e, 0x1e, 0x0c, 0x92, 0x8d, 0x57, 0x17, 0x36, + 0xde, 0x40, 0xe2, 0x1d, 0xbd, 0x3d, 0x29, 0xa1, 0xfb, 0x8d, 0x43, 0x2f, 0x57, 0x30, 0xa6, 0x67, + 0x3d, 0x5b, 0x41, 0x25, 0x94, 0x17, 0xf3, 0x08, 0x11, 0x9f, 0x03, 0xc4, 0xd7, 0xed, 0x1c, 0x56, + 0x26, 0x62, 0xa2, 0x78, 0x7f, 0x64, 0x5e, 0x80, 0xb7, 0xb5, 0x12, 0xdd, 0xc6, 0x8b, 0x7b, 0x70, + 0x61, 0x6c, 0x79, 0x27, 0x76, 0x6a, 0x84, 0x95, 0x85, 0x23, 0xdc, 0x64, 0x72, 0x7d, 0x8c, 0xc6, + 0x29, 0x54, 0x22, 0xde, 0x18, 0x0b, 0x6d, 0x98, 0x87, 0x8f, 0xfa, 0x9d, 0x41, 0xff, 0xeb, 0x5e, + 0x67, 0x70, 0x70, 0x78, 0x40, 0x4f, 0xb8, 0x2e, 0xc1, 0x05, 0x0d, 0xd8, 0x3d, 0xe8, 0x77, 0xcc, + 0x83, 0xf6, 0x1e, 0x86, 0x3b, 0x49, 0x44, 0xe7, 0x89, 0x42, 0x2c, 0xa3, 0x1f, 0x6f, 0x68, 0x88, + 0xbd, 0xc3, 0x1d, 0x84, 0x16, 0x8d, 0x63, 0xd8, 0x88, 0x7a, 0x6e, 0xcb, 0xc7, 0x91, 0x1f, 0x26, + 0x84, 0xf9, 0x9a, 0x3e, 0xf3, 0x04, 0xa1, 0x26, 0xcf, 0x78, 0xb0, 0x08, 0x67, 0xeb, 0x44, 0x2f, + 0x14, 0x74, 0x90, 0x71, 0x00, 0x95, 0x7d, 0x7b, 0xa4, 0x7a, 0xf8, 0x7e, 0xa2, 0x87, 0x4b, 0x7a, + 0x2c, 0x35, 0xca, 0xf0, 0xc6, 0xf8, 0x03, 0x5d, 0xcc, 0x3c, 0x7c, 0xbf, 0x25, 0x3f, 0x8c, 0x01, + 0x6c, 0xa0, 0x40, 0x7a, 0xb6, 0x8b, 0x81, 0xb4, 0xe2, 0x4a, 0xf9, 0x70, 0x7f, 0xaa, 0xc2, 0x14, + 0xfa, 0x49, 0x6a, 0x46, 0x14, 0x56, 0x14, 0xa4, 0xc8, 0x2f, 0x0c, 0xcc, 0xea, 0x73, 0xdf, 0x46, + 0x49, 0x3f, 0x0e, 0xd0, 0xa4, 0xfb, 0x81, 0x32, 0xfb, 0x55, 0x04, 0xee, 0x21, 0x6c, 0x7f, 0xc6, + 0x77, 0x0a, 0xf5, 0x03, 0x14, 0x1d, 0x3c, 0xf2, 0x29, 0xf6, 0x67, 0xbe, 0x85, 0xf1, 0xed, 0xf1, + 0xb1, 0xba, 0x48, 0xe1, 0xdf, 0xc6, 0xbb, 0xb0, 0xb1, 0xc7, 0x6e, 0x06, 0x35, 0x53, 0x31, 0x88, + 0x26, 0xa2, 0x02, 0x29, 0x39, 0x91, 0x7f, 0x2d, 0xc2, 0x9a, 0x24, 0xf0, 0xe3, 0x44, 0x94, 0x25, + 0x1f, 0xc1, 0x66, 0x0c, 0x25, 0x0b, 0x85, 0xa4, 0x56, 0x89, 0x28, 0xc5, 0xfb, 0x13, 0xa8, 0xc4, + 0x67, 0x0c, 0xa9, 0xf3, 0x97, 0x17, 0x6e, 0x9c, 0x19, 0xd3, 0xa2, 0xe7, 0x2a, 0x4e, 0x30, 0x00, + 0x2e, 0xa6, 0x13, 0x65, 0xd1, 0x4e, 0x98, 0x84, 0xc7, 0x91, 0x01, 0x69, 0xb8, 0x5c, 0x6f, 0xa5, + 0xe0, 0x97, 0x13, 0xb6, 0x41, 0xdf, 0x0a, 0xd6, 0x73, 0x09, 0x40, 0x75, 0xad, 0x27, 0xd4, 0x55, + 0xe9, 0xf9, 0x19, 0xa3, 0xab, 0xe9, 0x1a, 0x8b, 0xd2, 0xb8, 0x36, 0x95, 0xfb, 0xa0, 0x94, 0x5c, + 0x13, 0x97, 0xc4, 0x06, 0x99, 0x21, 0x1d, 0x0d, 0x56, 0x39, 0x7d, 0x5c, 0x7c, 0x95, 0x30, 0xd4, + 0xfa, 0x4b, 0xed, 0x4b, 0x18, 0x0f, 0x20, 0x00, 0x75, 0x77, 0x23, 0xa5, 0xbb, 0x2a, 0x85, 0x78, + 0xc6, 0x70, 0xd7, 0x93, 0xea, 0x4b, 0xd7, 0xc8, 0x95, 0xe8, 0x22, 0x34, 0xf2, 0x1e, 0x05, 0xcd, + 0x91, 0xfd, 0x08, 0x60, 0x18, 0x19, 0x11, 0xb5, 0x5b, 0x5b, 0x79, 0x06, 0xc6, 0xd4, 0xe8, 0x50, + 0x69, 0xd6, 0xa4, 0x58, 0xf8, 0x6a, 0xb7, 0xb4, 0x33, 0x88, 0x12, 0x20, 0x33, 0xa4, 0x30, 0xbe, + 0x42, 0x87, 0x2f, 0x13, 0x83, 0x79, 0x03, 0x48, 0x3e, 0xa5, 0x58, 0x3e, 0xdf, 0x53, 0x8a, 0xff, + 0x28, 0x40, 0x23, 0x9d, 0x43, 0xa4, 0x87, 0x31, 0x9a, 0x26, 0x6f, 0xa5, 0xb3, 0x8d, 0x9a, 0x1a, + 0xeb, 0x0f, 0x72, 0x97, 0xcf, 0xf1, 0x20, 0x37, 0xa7, 0x64, 0x21, 0xf1, 0xbc, 0xa0, 0xf4, 0xb2, + 0xe7, 0x05, 0xe2, 0x03, 0x58, 0x1b, 0xd9, 0xc7, 0x16, 0x19, 0xf9, 0x95, 0xb3, 0x14, 0x29, 0xa4, + 0x32, 0xfe, 0xa2, 0x00, 0x45, 0x73, 0x66, 0x51, 0x7a, 0xcb, 0xf2, 0x95, 0x96, 0xe2, 0x2f, 0x3a, + 0x3f, 0x49, 0x07, 0x8b, 0xae, 0x31, 0x8c, 0x21, 0x23, 0x00, 0x19, 0x19, 0x0c, 0x80, 0x08, 0xa5, + 0x2e, 0x4d, 0xe4, 0x97, 0x76, 0x23, 0x50, 0x4a, 0x5c, 0x12, 0x85, 0xb9, 0xf9, 0x95, 0xb3, 0x5f, + 0x24, 0xa2, 0x05, 0xe1, 0x8b, 0x91, 0x99, 0xf5, 0xb2, 0x57, 0x86, 0xf2, 0xed, 0x16, 0x13, 0xc6, + 0x6f, 0xb7, 0xbc, 0x99, 0x95, 0xf3, 0x76, 0x8b, 0x88, 0x18, 0x65, 0xf8, 0x50, 0x7c, 0xec, 0x1d, + 0xe7, 0x4a, 0x07, 0x4e, 0xdf, 0x93, 0xd9, 0xa7, 0x9a, 0x89, 0xbf, 0x38, 0x64, 0x94, 0xa9, 0x65, + 0x4f, 0x06, 0x5f, 0x35, 0x0c, 0x19, 0x19, 0x60, 0xf2, 0x83, 0x70, 0x95, 0xb8, 0xf6, 0x02, 0xde, + 0x13, 0x44, 0x4a, 0x00, 0x22, 0x65, 0x9e, 0x50, 0x26, 0x4d, 0xf1, 0x97, 0xf1, 0x2f, 0x05, 0x58, + 0x95, 0x77, 0xa7, 0x99, 0x35, 0x46, 0x3e, 0x6c, 0xcf, 0xb4, 0xcc, 0x57, 0x59, 0x02, 0xba, 0x23, + 0x72, 0xd9, 0x14, 0xed, 0xd9, 0x53, 0x19, 0x37, 0x17, 0xa5, 0xcb, 0x96, 0x20, 0x8e, 0x9b, 0xdf, + 0x83, 0x86, 0x22, 0x50, 0x36, 0x59, 0x09, 0x48, 0xc5, 0xdc, 0x90, 0xf0, 0x76, 0x08, 0x4e, 0x5c, + 0xb8, 0xac, 0xa4, 0x2e, 0x5c, 0xde, 0x07, 0x41, 0x7e, 0x81, 0x73, 0x7d, 0xee, 0xd8, 0x1e, 0xc8, + 0xcb, 0xbc, 0x55, 0x99, 0xdc, 0x41, 0xcc, 0xbe, 0x42, 0xf4, 0xf8, 0xd5, 0xf7, 0x3f, 0xd1, 0x71, + 0x84, 0x92, 0x86, 0x5d, 0xba, 0xa1, 0xf8, 0x6d, 0xdc, 0xbb, 0xa1, 0x13, 0x99, 0xe2, 0xc1, 0x4c, + 0xbb, 0x50, 0x53, 0xa7, 0xb1, 0x75, 0x04, 0xeb, 0x17, 0x92, 0x97, 0xa1, 0x4c, 0x84, 0x5c, 0xb6, + 0xa2, 0x0e, 0xff, 0xf8, 0xcd, 0x37, 0xca, 0x78, 0x7a, 0x21, 0x54, 0x94, 0x89, 0x91, 0xc7, 0xad, + 0x2a, 0xc2, 0xda, 0x0a, 0x64, 0x7c, 0xc6, 0xd7, 0xe7, 0xa6, 0xf3, 0x94, 0x26, 0x12, 0x4a, 0x5b, + 0x78, 0x35, 0x93, 0x79, 0x3d, 0x14, 0x4d, 0x59, 0x5e, 0xcd, 0xa0, 0xa3, 0x14, 0x7a, 0x6b, 0x25, + 0x82, 0xe7, 0x6d, 0x7e, 0x6b, 0x07, 0xca, 0xe1, 0x0a, 0x51, 0xaa, 0xe6, 0xc1, 0xde, 0xe1, 0x3d, + 0x0c, 0x4c, 0x96, 0x44, 0x05, 0x56, 0x64, 0x8c, 0xc2, 0x19, 0x9c, 0xf6, 0xee, 0xcf, 0x31, 0xc8, + 0xc1, 0x28, 0xa6, 0x8a, 0xde, 0x12, 0x7f, 0x53, 0xd5, 0x46, 0x91, 0x1e, 0xb4, 0x3f, 0x36, 0xef, + 0x37, 0x4a, 0xb7, 0x02, 0xba, 0x9f, 0x8d, 0xce, 0x10, 0x9c, 0xf2, 0x31, 0x3b, 0xf7, 0xbb, 0x4f, + 0x90, 0x4f, 0x0d, 0xca, 0x07, 0x9d, 0xee, 0x83, 0x87, 0xf7, 0x0e, 0x4d, 0x64, 0x85, 0x2d, 0xfa, + 0xed, 0x07, 0x8a, 0xcf, 0xd1, 0xa0, 0xd7, 0xee, 0x3f, 0x44, 0x3e, 0x75, 0xa8, 0xec, 0x1c, 0xee, + 0xef, 0x3f, 0x3a, 0xe8, 0xf6, 0xbf, 0x6e, 0x94, 0xc4, 0x26, 0xd4, 0x31, 0x6e, 0x1a, 0xc4, 0xa0, + 0x15, 0x8a, 0xc1, 0xf6, 0xda, 0xe6, 0x83, 0x8e, 0x06, 0x5c, 0xbd, 0xf5, 0x1e, 0xc6, 0x34, 0xe1, + 0x61, 0x81, 0x38, 0xb7, 0x0f, 0xbe, 0x96, 0x35, 0x25, 0xed, 0x3d, 0x35, 0xec, 0xee, 0xc1, 0xe3, + 0x8e, 0xd9, 0x6f, 0x2c, 0xdf, 0xba, 0x05, 0x8d, 0xf4, 0x51, 0x80, 0x52, 0x55, 0x9d, 0xaf, 0xb0, + 0x01, 0xfe, 0x7d, 0xd0, 0x41, 0x7a, 0xfc, 0xbb, 0xd7, 0x41, 0xda, 0x0f, 0xd4, 0x59, 0x4f, 0xb9, + 0xf6, 0x32, 0x94, 0x54, 0xcc, 0x47, 0xeb, 0xb0, 0xb3, 0xd3, 0xe9, 0xf5, 0x25, 0x73, 0xb3, 0xf3, + 0xf3, 0x0e, 0x65, 0xb5, 0x6e, 0x3d, 0x82, 0x0b, 0x39, 0xa1, 0x19, 0x4d, 0x23, 0x1a, 0xed, 0xa0, + 0xbd, 0xbb, 0x8b, 0x1c, 0x30, 0x06, 0x8c, 0x41, 0x66, 0x67, 0xff, 0xf0, 0x31, 0x75, 0xbc, 0x0d, + 0x9b, 0x3a, 0xb4, 0xb7, 0xd7, 0xde, 0xa1, 0x71, 0xfc, 0x00, 0xea, 0x89, 0x78, 0x8c, 0xd6, 0x6c, + 0xbf, 0xb3, 0x3b, 0xd8, 0x3f, 0x24, 0x56, 0x1b, 0x50, 0xa5, 0x8f, 0x90, 0xbc, 0x70, 0xeb, 0x7d, + 0x80, 0xd8, 0xe8, 0x47, 0x15, 0x36, 0xb4, 0x08, 0xfb, 0xbd, 0x43, 0x53, 0x8d, 0xb9, 0xf3, 0x84, + 0x7f, 0x2f, 0xdf, 0xf9, 0xb7, 0xb7, 0xa0, 0xfc, 0x80, 0x64, 0xa2, 0xed, 0x3a, 0x62, 0x0f, 0xaa, + 0xda, 0x03, 0x0a, 0x71, 0x35, 0xe1, 0x8a, 0x52, 0xef, 0x32, 0x5a, 0xd7, 0x16, 0x60, 0xd5, 0xcd, + 0xea, 0x92, 0xe8, 0x02, 0xc4, 0x4f, 0x2c, 0xc4, 0x15, 0x9d, 0x3c, 0xf5, 0x1a, 0xa3, 0x75, 0x35, + 0x1f, 0x19, 0xb1, 0xba, 0x0f, 0x95, 0xe8, 0x61, 0x89, 0xd0, 0x8e, 0x75, 0xe9, 0x17, 0x28, 0xad, + 0x2b, 0xb9, 0xb8, 0x88, 0x0f, 0x4e, 0x50, 0x2b, 0xe5, 0xd2, 0x27, 0x98, 0xad, 0x0d, 0xd3, 0x27, + 0x98, 0x57, 0xff, 0xb5, 0x24, 0x1e, 0xc1, 0x7a, 0xb2, 0x88, 0x4b, 0xbc, 0xa5, 0x9f, 0xa5, 0x73, + 0x6a, 0xc3, 0x5a, 0x6f, 0x2f, 0x26, 0xd0, 0x07, 0xa9, 0x95, 0x2d, 0xea, 0x83, 0xcc, 0xd6, 0x43, + 0xea, 0x83, 0xcc, 0xa9, 0x75, 0x44, 0x6e, 0x26, 0xd4, 0x13, 0x35, 0x54, 0xe2, 0x7a, 0xc2, 0x24, + 0x66, 0x39, 0xbe, 0xb5, 0x10, 0x1f, 0xf1, 0xfc, 0x03, 0xd8, 0xcc, 0xd4, 0x66, 0x09, 0xe3, 0xe5, + 0x35, 0x62, 0xad, 0xef, 0x9c, 0x49, 0x13, 0xf1, 0xff, 0x5d, 0x68, 0xa4, 0x2b, 0xb5, 0xc4, 0x0d, + 0xad, 0x69, 0x7e, 0xe9, 0x57, 0xcb, 0x38, 0x8b, 0x44, 0xdf, 0xb5, 0x64, 0xdd, 0x96, 0xbe, 0x6b, + 0xb9, 0x45, 0x60, 0xfa, 0xae, 0x2d, 0x28, 0xf9, 0x5a, 0x12, 0x4f, 0x60, 0x23, 0x55, 0xc0, 0x25, + 0xf4, 0xcd, 0xce, 0xad, 0x07, 0x6b, 0xdd, 0x38, 0x83, 0x22, 0xe2, 0xfc, 0x39, 0x5a, 0x63, 0x36, + 0xec, 0xe2, 0x52, 0x62, 0xb3, 0xe3, 0x57, 0x13, 0xad, 0x66, 0x16, 0xa1, 0x8b, 0x93, 0xf6, 0xf2, + 0x41, 0x17, 0xa7, 0xec, 0xf3, 0x0b, 0x5d, 0x9c, 0xf2, 0x9e, 0x4b, 0x2c, 0x89, 0x2f, 0xd0, 0x5e, + 0xcb, 0x82, 0x51, 0xd1, 0x4c, 0xe8, 0x87, 0x56, 0x18, 0xda, 0xba, 0x9c, 0x83, 0xd1, 0xcd, 0x42, + 0x5c, 0x9e, 0xa9, 0x9b, 0x85, 0x4c, 0x81, 0xa9, 0x6e, 0x16, 0x72, 0x2a, 0x3a, 0x97, 0xe8, 0x80, + 0xa1, 0x8a, 0xab, 0x68, 0x66, 0xe9, 0x87, 0x26, 0xad, 0xfc, 0x87, 0x31, 0xc6, 0xd2, 0x0f, 0x0b, + 0xe2, 0xd3, 0xa8, 0x2c, 0x2b, 0xbe, 0xba, 0xd3, 0x9c, 0x63, 0x54, 0xf9, 0xdb, 0x4a, 0x95, 0x6f, + 0x72, 0x63, 0xb4, 0x46, 0x51, 0x9d, 0x9c, 0x6e, 0x8d, 0xd2, 0x55, 0x7a, 0xba, 0x35, 0xca, 0x16, + 0xd6, 0xc9, 0x95, 0x88, 0xaa, 0xe8, 0x12, 0x2b, 0x91, 0x2e, 0xb8, 0x4b, 0xac, 0x44, 0xb6, 0xf0, + 0x6e, 0x49, 0x3c, 0x84, 0x4a, 0x54, 0xf9, 0xa6, 0x0f, 0x29, 0x5d, 0x8f, 0xa7, 0x0f, 0x29, 0x5b, + 0x2a, 0xb7, 0x74, 0xb3, 0x40, 0xd2, 0x26, 0xeb, 0xcf, 0x74, 0x69, 0x4b, 0x94, 0xba, 0xb5, 0x9a, + 0x59, 0x84, 0x6e, 0xa9, 0xa3, 0x52, 0x33, 0x7d, 0x20, 0xe9, 0x0a, 0xb6, 0xd6, 0x95, 0x5c, 0x9c, + 0x2e, 0x67, 0xaa, 0x64, 0x47, 0xa4, 0x84, 0x3b, 0xae, 0xf5, 0xd0, 0xe5, 0x2c, 0x55, 0xdf, 0x13, + 0x49, 0x6a, 0x9a, 0x43, 0xb2, 0x94, 0x27, 0x25, 0xa9, 0x29, 0x0e, 0x91, 0xa4, 0x32, 0x93, 0xcc, + 0x80, 0x75, 0x3e, 0x57, 0xf3, 0x91, 0x3a, 0xab, 0xb8, 0x9a, 0x46, 0x64, 0xe4, 0x62, 0x01, 0xab, + 0x9c, 0x02, 0x1c, 0xd6, 0x67, 0xad, 0xa4, 0x46, 0x64, 0x25, 0x43, 0x67, 0x76, 0x6d, 0x01, 0x56, + 0xdf, 0xaf, 0xa8, 0x20, 0x46, 0xdf, 0xaf, 0x74, 0x5d, 0x8d, 0xbe, 0x5f, 0xd9, 0x0a, 0x1a, 0x76, + 0x33, 0x89, 0xe2, 0x1a, 0xdd, 0xcd, 0xe4, 0xd5, 0xe9, 0xe8, 0x6e, 0x26, 0xbf, 0x2a, 0x27, 0x32, + 0x7c, 0x78, 0x12, 0x4c, 0x19, 0xbe, 0xe8, 0x2c, 0x96, 0x36, 0x7c, 0xf1, 0xd9, 0x4b, 0x2e, 0x94, + 0x56, 0x73, 0x23, 0x32, 0xeb, 0xaa, 0x57, 0xfb, 0xe8, 0x0b, 0x95, 0x57, 0xa8, 0xb3, 0xa4, 0xf4, + 0x82, 0xce, 0x6a, 0x49, 0xbd, 0x88, 0xeb, 0x65, 0x52, 0x7a, 0xa1, 0xd7, 0xc4, 0x68, 0x7a, 0x41, + 0x1c, 0x32, 0x7a, 0xa1, 0x31, 0xb9, 0x92, 0x8b, 0x4b, 0xad, 0x49, 0x6a, 0x18, 0x89, 0x1a, 0xa2, + 0xd4, 0x9a, 0x24, 0x9b, 0x9b, 0x7c, 0x98, 0xd5, 0xee, 0x02, 0xae, 0x27, 0x88, 0x33, 0x15, 0x26, + 0xfa, 0x36, 0xe5, 0x96, 0xe4, 0x48, 0x9e, 0x89, 0x52, 0x19, 0x9d, 0x67, 0x5e, 0x0d, 0x8e, 0xce, + 0x33, 0xbf, 0xc6, 0x86, 0x23, 0x80, 0x74, 0x41, 0x8c, 0x1e, 0x01, 0x2c, 0xa8, 0xc0, 0xd1, 0x23, + 0x80, 0x85, 0xf5, 0x34, 0x1c, 0xbe, 0x64, 0xaa, 0x61, 0xf4, 0xf0, 0x65, 0x51, 0xb9, 0x8d, 0x1e, + 0xbe, 0x2c, 0x2e, 0xa7, 0x59, 0x12, 0x87, 0x50, 0xd3, 0x2b, 0x67, 0x44, 0x32, 0x46, 0x4b, 0x17, + 0x89, 0xb4, 0xae, 0x2f, 0x42, 0xeb, 0x0c, 0xf5, 0x9a, 0x17, 0x91, 0x8c, 0x4c, 0xcf, 0x62, 0x98, + 0x5b, 0x2a, 0x23, 0x83, 0x95, 0x64, 0x35, 0x8b, 0xc8, 0x44, 0xa6, 0x19, 0xb6, 0x37, 0xce, 0xa0, + 0xd0, 0x37, 0x2e, 0x5d, 0xbe, 0xa2, 0x6f, 0xdc, 0x82, 0x42, 0x99, 0x96, 0x71, 0x16, 0x49, 0xea, + 0x18, 0xa0, 0x12, 0x6a, 0xc9, 0x63, 0x40, 0xa2, 0x18, 0x23, 0x75, 0x0c, 0x48, 0x55, 0x3e, 0x30, + 0x9f, 0xe8, 0xb1, 0xbf, 0xce, 0x27, 0x5d, 0x05, 0xa3, 0xf3, 0xc9, 0xd6, 0xa9, 0xf0, 0xbe, 0xe8, + 0xcf, 0xf4, 0xf5, 0x7d, 0xc9, 0x29, 0x60, 0xd1, 0xf7, 0x25, 0xb7, 0xb6, 0x44, 0x05, 0xeb, 0xda, + 0xbb, 0xfb, 0x64, 0xb0, 0x9e, 0xad, 0x3a, 0x49, 0x06, 0xeb, 0x79, 0x65, 0x1e, 0x4b, 0x62, 0xc4, + 0xe5, 0x5d, 0x99, 0x8c, 0xe1, 0x77, 0x73, 0x96, 0x28, 0x53, 0x44, 0xd0, 0x7a, 0xe7, 0x25, 0x54, + 0x7a, 0x2f, 0x39, 0xf5, 0x13, 0x7a, 0x2f, 0x8b, 0x0b, 0x37, 0xf4, 0x5e, 0xce, 0x2a, 0xc2, 0x58, + 0x12, 0x93, 0xb0, 0xc8, 0x2b, 0xd3, 0xd1, 0xbb, 0xf9, 0x6b, 0x9b, 0xed, 0xeb, 0xe6, 0xcb, 0x09, + 0xa3, 0xee, 0xdc, 0xa8, 0xb2, 0x2b, 0x9b, 0x70, 0x5d, 0xb0, 0xf0, 0xd9, 0x0e, 0xdf, 0x3b, 0x07, + 0xa5, 0x1e, 0x27, 0xc4, 0x49, 0x1c, 0x71, 0x25, 0x1d, 0xd6, 0x6b, 0x89, 0xa1, 0xd6, 0xd5, 0x7c, + 0x64, 0xc8, 0xea, 0xe9, 0x2a, 0xff, 0x43, 0x9d, 0x8f, 0xfe, 0x3b, 0x00, 0x00, 0xff, 0xff, 0x38, + 0x8d, 0x98, 0x44, 0x5f, 0x47, 0x00, 0x00, } diff --git a/api/gobgp.proto b/api/gobgp.proto index c212df92..5ee871b6 100644 --- a/api/gobgp.proto +++ b/api/gobgp.proto @@ -74,6 +74,7 @@ service GobgpApi { } message GetNeighborRequest { + bool enableAdvertised = 1; } message GetNeighborResponse { diff --git a/api/grpc_server.go b/api/grpc_server.go index 6445c003..65ea21f9 100644 --- a/api/grpc_server.go +++ b/api/grpc_server.go @@ -188,7 +188,7 @@ func NewPeerFromConfigStruct(pconf *config.Neighbor) *Peer { func (s *Server) GetNeighbor(ctx context.Context, arg *GetNeighborRequest) (*GetNeighborResponse, error) { p := []*Peer{} - for _, e := range s.bgpServer.GetNeighbor() { + for _, e := range s.bgpServer.GetNeighbor(arg.EnableAdvertised) { p = append(p, NewPeerFromConfigStruct(e)) } return &GetNeighborResponse{Peers: p}, nil diff --git a/client/client.go b/client/client.go index abc22161..b85360c2 100644 --- a/client/client.go +++ b/client/client.go @@ -97,7 +97,7 @@ func (cli *GoBGPClient) GetServer() (*config.Global, error) { } func (cli *GoBGPClient) getNeighbor(name string, afi int, vrf string) ([]*config.Neighbor, error) { - ret, err := cli.cli.GetNeighbor(context.Background(), &api.GetNeighborRequest{}) + ret, err := cli.cli.GetNeighbor(context.Background(), &api.GetNeighborRequest{EnableAdvertised: name != ""}) if err != nil { return nil, err } diff --git a/gobgp/cmd/neighbor.go b/gobgp/cmd/neighbor.go index 324e21f0..c5e688b1 100644 --- a/gobgp/cmd/neighbor.go +++ b/gobgp/cmd/neighbor.go @@ -102,8 +102,8 @@ func showNeighbors(vrf string) error { } var format string format = "%-" + fmt.Sprint(maxaddrlen) + "s" + " %" + fmt.Sprint(maxaslen) + "s" + " %" + fmt.Sprint(maxtimelen) + "s" - format += " %-11s |%11s %8s %8s\n" - fmt.Printf(format, "Peer", "AS", "Up/Down", "State", "#Advertised", "Received", "Accepted") + format += " %-11s |%9s %9s\n" + fmt.Printf(format, "Peer", "AS", "Up/Down", "State", "#Received", "Accepted") format_fsm := func(admin config.AdminState, fsm config.SessionState) string { switch admin { case config.ADMIN_STATE_DOWN: @@ -135,7 +135,7 @@ func showNeighbors(vrf string) error { if n.Config.NeighborInterface != "" { neigh = n.Config.NeighborInterface } - fmt.Printf(format, neigh, fmt.Sprint(n.Config.PeerAs), timedelta[i], format_fsm(n.State.AdminState, n.State.SessionState), fmt.Sprint(n.State.AdjTable.Advertised), fmt.Sprint(n.State.AdjTable.Received), fmt.Sprint(n.State.AdjTable.Accepted)) + fmt.Printf(format, neigh, fmt.Sprint(n.Config.PeerAs), timedelta[i], format_fsm(n.State.AdminState, n.State.SessionState), fmt.Sprint(n.State.AdjTable.Received), fmt.Sprint(n.State.AdjTable.Accepted)) } return nil diff --git a/server/peer.go b/server/peer.go index 05018f89..780af50d 100644 --- a/server/peer.go +++ b/server/peer.go @@ -502,7 +502,7 @@ func (peer *Peer) PassConn(conn *net.TCPConn) { } } -func (peer *Peer) ToConfig() *config.Neighbor { +func (peer *Peer) ToConfig(getAdvertised bool) *config.Neighbor { // create copy which can be access to without mutex conf := *peer.fsm.pConf @@ -529,8 +529,12 @@ func (peer *Peer) ToConfig() *config.Neighbor { if peer.fsm.state == bgp.BGP_FSM_ESTABLISHED { rfList := peer.configuredRFlist() - pathList, _ := peer.getBestFromLocal(rfList) - conf.State.AdjTable.Advertised = uint32(len(pathList)) + if getAdvertised { + pathList, _ := peer.getBestFromLocal(rfList) + conf.State.AdjTable.Advertised = uint32(len(pathList)) + } else { + conf.State.AdjTable.Advertised = 0 + } conf.State.AdjTable.Received = uint32(peer.adjRibIn.Count(rfList)) conf.State.AdjTable.Accepted = uint32(peer.adjRibIn.Accepted(rfList)) diff --git a/server/server.go b/server/server.go index aaa69e7d..d18cf641 100644 --- a/server/server.go +++ b/server/server.go @@ -1618,7 +1618,7 @@ func (s *BgpServer) GetServer() (c *config.Global) { return c } -func (s *BgpServer) GetNeighbor() (l []*config.Neighbor) { +func (s *BgpServer) GetNeighbor(getAdvertised bool) (l []*config.Neighbor) { ch := make(chan struct{}) defer func() { <-ch }() @@ -1627,7 +1627,7 @@ func (s *BgpServer) GetNeighbor() (l []*config.Neighbor) { l = make([]*config.Neighbor, 0, len(s.neighborMap)) for _, peer := range s.neighborMap { - l = append(l, peer.ToConfig()) + l = append(l, peer.ToConfig(getAdvertised)) } } return l @@ -2511,7 +2511,7 @@ func (w *Watcher) Generate(t WatchEventType) (err error) { }() l := make([]*config.Neighbor, 0, len(w.s.neighborMap)) for _, peer := range w.s.neighborMap { - l = append(l, peer.ToConfig()) + l = append(l, peer.ToConfig(false)) } w.notify(&WatchEventTable{PathList: pathList, Neighbor: l}) default: diff --git a/server/server_test.go b/server/server_test.go index b9d8263f..46ef4be3 100644 --- a/server/server_test.go +++ b/server/server_test.go @@ -107,7 +107,7 @@ func TestMonitor(test *testing.T) { for { time.Sleep(time.Second) - if t.GetNeighbor()[0].State.SessionState == config.SESSION_STATE_ESTABLISHED { + if t.GetNeighbor(false)[0].State.SessionState == config.SESSION_STATE_ESTABLISHED { break } } |