diff --git a/pkg/roachpb/api.go b/pkg/roachpb/api.go index 9f183e99b1a7..9b0189947f36 100644 --- a/pkg/roachpb/api.go +++ b/pkg/roachpb/api.go @@ -1519,3 +1519,14 @@ func (c *ContentionEvent) SafeFormat(w redact.SafePrinter, _ rune) { func (c *ContentionEvent) String() string { return redact.StringWithoutMarkers(c) } + +// SafeFormat implements redact.SafeFormatter. +func (s *ScanStats) SafeFormat(w redact.SafePrinter, _ rune) { + w.Printf("scan stats: stepped %d times (%d internal); seeked %d times (%d internal)", + s.NumInterfaceSteps, s.NumInternalSteps, s.NumInterfaceSeeks, s.NumInternalSeeks) +} + +// String implements fmt.Stringer. +func (s *ScanStats) String() string { + return redact.StringWithoutMarkers(s) +} diff --git a/pkg/roachpb/api.pb.go b/pkg/roachpb/api.pb.go index 5a0160e269fd..8021350b34b4 100644 --- a/pkg/roachpb/api.pb.go +++ b/pkg/roachpb/api.pb.go @@ -6988,6 +6988,43 @@ func (m *ContentionEvent) XXX_DiscardUnknown() { var xxx_messageInfo_ContentionEvent proto.InternalMessageInfo +// ScanStats is a message that will be attached to BatchResponses containing +// information about what happened during each scan and get in the request. +type ScanStats struct { + NumInterfaceSeeks uint64 `protobuf:"varint,1,opt,name=num_interface_seeks,json=numInterfaceSeeks,proto3" json:"num_interface_seeks,omitempty"` + NumInternalSeeks uint64 `protobuf:"varint,2,opt,name=num_internal_seeks,json=numInternalSeeks,proto3" json:"num_internal_seeks,omitempty"` + NumInterfaceSteps uint64 `protobuf:"varint,3,opt,name=num_interface_steps,json=numInterfaceSteps,proto3" json:"num_interface_steps,omitempty"` + NumInternalSteps uint64 `protobuf:"varint,4,opt,name=num_internal_steps,json=numInternalSteps,proto3" json:"num_internal_steps,omitempty"` +} + +func (m *ScanStats) Reset() { *m = ScanStats{} } +func (*ScanStats) ProtoMessage() {} +func (*ScanStats) Descriptor() ([]byte, []int) { + return fileDescriptor_e08772acc330f58b, []int{112} +} +func (m *ScanStats) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ScanStats) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ScanStats) XXX_Merge(src proto.Message) { + xxx_messageInfo_ScanStats.Merge(m, src) +} +func (m *ScanStats) XXX_Size() int { + return m.Size() +} +func (m *ScanStats) XXX_DiscardUnknown() { + xxx_messageInfo_ScanStats.DiscardUnknown(m) +} + +var xxx_messageInfo_ScanStats proto.InternalMessageInfo + func init() { proto.RegisterEnum("cockroach.roachpb.ReadConsistencyType", ReadConsistencyType_name, ReadConsistencyType_value) proto.RegisterEnum("cockroach.roachpb.ScanFormat", ScanFormat_name, ScanFormat_value) @@ -7124,525 +7161,530 @@ func init() { proto.RegisterType((*JoinNodeRequest)(nil), "cockroach.roachpb.JoinNodeRequest") proto.RegisterType((*JoinNodeResponse)(nil), "cockroach.roachpb.JoinNodeResponse") proto.RegisterType((*ContentionEvent)(nil), "cockroach.roachpb.ContentionEvent") + proto.RegisterType((*ScanStats)(nil), "cockroach.roachpb.ScanStats") } func init() { proto.RegisterFile("roachpb/api.proto", fileDescriptor_e08772acc330f58b) } var fileDescriptor_e08772acc330f58b = []byte{ - // 8195 bytes of a gzipped FileDescriptorProto + // 8269 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x7d, 0x5f, 0x6c, 0x23, 0x49, 0x7a, 0x9f, 0x9a, 0xa4, 0x24, 0xf2, 0xa3, 0x44, 0xb6, 0x4a, 0xf3, 0x47, 0xa3, 0xdd, 0x95, 0x66, - 0x7a, 0x76, 0xfe, 0xfa, 0x96, 0xda, 0x99, 0xb9, 0xcb, 0xad, 0x77, 0xd7, 0x7b, 0x16, 0x29, 0xce, + 0x7a, 0x77, 0xfe, 0x7a, 0x97, 0xda, 0x99, 0xb9, 0xcb, 0xae, 0x77, 0xd7, 0x7b, 0x16, 0x29, 0xce, 0x90, 0xd2, 0x48, 0xa3, 0x69, 0x52, 0x33, 0xd8, 0xf5, 0x39, 0xed, 0x56, 0x77, 0x89, 0xea, 0x13, 0xd9, 0xcd, 0xe9, 0x6e, 0x6a, 0xc4, 0x05, 0xf2, 0x90, 0xc4, 0x70, 0xee, 0x29, 0xb8, 0x00, 0x01, 0x7c, 0x07, 0x07, 0xc1, 0x39, 0x36, 0x92, 0x87, 0x3c, 0x24, 0x88, 0x83, 0xfc, 0x43, 0x12, 0x23, - 0x4f, 0x39, 0x04, 0x87, 0xdc, 0x19, 0xc8, 0x83, 0x11, 0x20, 0x8a, 0xa3, 0xcb, 0x43, 0x0c, 0x23, + 0x4f, 0x39, 0x04, 0x97, 0xdc, 0x19, 0xc8, 0x83, 0x11, 0x20, 0x8a, 0xa3, 0xcb, 0x43, 0x0c, 0x23, 0x48, 0x10, 0x04, 0x30, 0xb0, 0x40, 0x82, 0xa0, 0xfe, 0xf4, 0x3f, 0xb2, 0x49, 0x51, 0xb3, 0x7d, - 0xf1, 0x02, 0x7e, 0x91, 0xd8, 0x5f, 0xd5, 0xf7, 0x75, 0xd5, 0x57, 0x55, 0x5f, 0x7d, 0xbf, 0xaa, + 0xc9, 0x02, 0x7e, 0x91, 0xd8, 0x5f, 0xd5, 0xf7, 0x75, 0xd5, 0x57, 0x55, 0x5f, 0x7d, 0xbf, 0xaa, 0xaf, 0xaa, 0x61, 0xc1, 0xb6, 0x54, 0xed, 0xb0, 0xbb, 0xbf, 0xa6, 0x76, 0x8d, 0x52, 0xd7, 0xb6, - 0x5c, 0x0b, 0x2d, 0x68, 0x96, 0x76, 0x44, 0xc9, 0x25, 0x9e, 0xb8, 0x7c, 0xff, 0xe8, 0x78, 0xed, + 0x5c, 0x0b, 0x2d, 0x68, 0x96, 0x76, 0x44, 0xc9, 0x25, 0x9e, 0xb8, 0x7c, 0xef, 0xe8, 0x78, 0xed, 0xe8, 0xd8, 0xc1, 0xf6, 0x31, 0xb6, 0xd7, 0x34, 0xcb, 0xd4, 0x7a, 0xb6, 0x8d, 0x4d, 0xad, 0xbf, 0xd6, 0xb6, 0xb4, 0x23, 0xfa, 0xc7, 0x30, 0x5b, 0x8c, 0x3d, 0x9a, 0xd7, 0xc6, 0xaa, 0xee, 0xf4, 0x3a, 0x1d, 0xd5, 0xee, 0xaf, 0xd9, 0x4e, 0x77, 0x7f, 0x8d, 0x3f, 0xf0, 0xbc, 0xc8, 0x7b, 0xbb, 0xae, 0xba, 0x2a, 0xa7, 0x5d, 0xf2, 0x68, 0xd8, 0xb6, 0x2d, 0xdb, 0xe1, 0xd4, 0x2b, 0x1e, 0xb5, - 0x83, 0x5d, 0x35, 0x94, 0xfb, 0x2d, 0xc7, 0xb5, 0x6c, 0xb5, 0x85, 0xd7, 0xb0, 0xd9, 0x32, 0x4c, - 0x4c, 0x32, 0x1c, 0x6b, 0x1a, 0x4f, 0x7c, 0x3b, 0x36, 0xf1, 0x11, 0x4f, 0x5d, 0xea, 0xb9, 0x46, + 0x83, 0x5d, 0x35, 0x94, 0xfb, 0x0d, 0xc7, 0xb5, 0x6c, 0xb5, 0x85, 0xd7, 0xb0, 0xd9, 0x32, 0x4c, + 0x4c, 0x32, 0x1c, 0x6b, 0x1a, 0x4f, 0x7c, 0x33, 0x36, 0xf1, 0x21, 0x4f, 0x5d, 0xea, 0xb9, 0x46, 0x7b, 0xed, 0xb0, 0xad, 0xad, 0xb9, 0x46, 0x07, 0x3b, 0xae, 0xda, 0xe9, 0x7a, 0x55, 0xa0, 0x29, 0xae, 0xad, 0x6a, 0x86, 0xd9, 0xf2, 0xfe, 0x77, 0xf7, 0xd7, 0x6c, 0xac, 0x59, 0xb6, 0x8e, 0x75, 0xc5, 0xe9, 0xaa, 0xa6, 0x57, 0xdc, 0x96, 0xd5, 0xb2, 0xe8, 0xcf, 0x35, 0xf2, 0x8b, 0x53, 0x57, 0x5a, 0x96, 0xd5, 0x6a, 0xe3, 0x35, 0xfa, 0xb4, 0xdf, 0x3b, 0x58, 0xd3, 0x7b, 0xb6, 0xea, 0x1a, - 0x16, 0xe7, 0x92, 0xfe, 0x89, 0x00, 0xf3, 0x32, 0x7e, 0xd5, 0xc3, 0x8e, 0x5b, 0xc3, 0xaa, 0x8e, - 0x6d, 0x74, 0x0d, 0xd2, 0x47, 0xb8, 0xbf, 0x94, 0xbe, 0x2e, 0xdc, 0x9d, 0x2b, 0xcf, 0x7e, 0x71, + 0x16, 0xe7, 0x92, 0xfe, 0x91, 0x00, 0xf3, 0x32, 0x7e, 0xd9, 0xc3, 0x8e, 0x5b, 0xc3, 0xaa, 0x8e, + 0x6d, 0x74, 0x0d, 0xd2, 0x47, 0xb8, 0xbf, 0x94, 0xbe, 0x2e, 0xdc, 0x99, 0x2b, 0xcf, 0x7e, 0x79, 0xba, 0x9a, 0xde, 0xc2, 0x7d, 0x99, 0xd0, 0xd0, 0x75, 0x98, 0xc5, 0xa6, 0xae, 0x90, 0xe4, 0x4c, 0x34, 0x79, 0x06, 0x9b, 0xfa, 0x16, 0xee, 0xa3, 0x6f, 0x43, 0xd6, 0x21, 0xd2, 0x4c, 0x0d, 0x2f, - 0x4d, 0x5f, 0x17, 0xee, 0x4e, 0x97, 0x7f, 0xf9, 0x8b, 0xd3, 0xd5, 0x8f, 0x5b, 0x86, 0x7b, 0xd8, + 0x4d, 0x5f, 0x17, 0xee, 0x4c, 0x97, 0x7f, 0xf9, 0xcb, 0xd3, 0xd5, 0x4f, 0x5a, 0x86, 0x7b, 0xd8, 0xdb, 0x2f, 0x69, 0x56, 0x67, 0xcd, 0x6f, 0x53, 0x7d, 0x3f, 0xf8, 0xbd, 0xd6, 0x3d, 0x6a, 0xad, - 0x0d, 0xea, 0xa8, 0xd4, 0x3c, 0x31, 0x1b, 0xf8, 0x95, 0xec, 0x4b, 0xdc, 0xcc, 0x64, 0x05, 0x31, + 0x0d, 0xea, 0xa8, 0xd4, 0x3c, 0x31, 0x1b, 0xf8, 0xa5, 0xec, 0x4b, 0xdc, 0xcc, 0x64, 0x05, 0x31, 0xb5, 0x99, 0xc9, 0xa6, 0xc4, 0xb4, 0xf4, 0x93, 0x14, 0x14, 0x64, 0xec, 0x74, 0x2d, 0xd3, 0xc1, - 0xbc, 0xe4, 0xef, 0x43, 0xda, 0x3d, 0x31, 0x69, 0xc9, 0xf3, 0x0f, 0x57, 0x4a, 0x43, 0xbd, 0xa7, - 0xd4, 0xb4, 0x55, 0xd3, 0x51, 0x35, 0x52, 0x7d, 0x99, 0x64, 0x45, 0x1f, 0x40, 0xde, 0xc6, 0x4e, - 0xaf, 0x83, 0xa9, 0x22, 0x69, 0xa5, 0xf2, 0x0f, 0xaf, 0xc6, 0x70, 0x36, 0xba, 0xaa, 0x29, 0x03, + 0xbc, 0xe4, 0xef, 0x43, 0xda, 0x3d, 0x31, 0x69, 0xc9, 0xf3, 0x0f, 0x56, 0x4a, 0x43, 0xbd, 0xa7, + 0xd4, 0xb4, 0x55, 0xd3, 0x51, 0x35, 0x52, 0x7d, 0x99, 0x64, 0x45, 0x1f, 0x42, 0xde, 0xc6, 0x4e, + 0xaf, 0x83, 0xa9, 0x22, 0x69, 0xa5, 0xf2, 0x0f, 0xae, 0xc6, 0x70, 0x36, 0xba, 0xaa, 0x29, 0x03, 0xcb, 0x4b, 0x7e, 0xa3, 0x06, 0xcc, 0x73, 0x4e, 0x1b, 0xab, 0x8e, 0x65, 0x2e, 0xcd, 0x5e, 0x17, - 0xee, 0x16, 0x1e, 0x96, 0x62, 0x78, 0xa3, 0xa5, 0x24, 0x8f, 0xbd, 0x0e, 0x96, 0x29, 0x97, 0x3c, + 0xee, 0x14, 0x1e, 0x94, 0x62, 0x78, 0xa3, 0xa5, 0x24, 0x8f, 0xbd, 0x0e, 0x96, 0x29, 0x97, 0x3c, 0x67, 0x87, 0x9e, 0xd0, 0x35, 0xc8, 0x9a, 0xbd, 0x0e, 0xd1, 0xaf, 0x43, 0xb5, 0x97, 0x96, 0x67, - 0xcd, 0x5e, 0x67, 0x0b, 0xf7, 0x1d, 0xf4, 0x16, 0xe4, 0x48, 0xd2, 0x7e, 0xdf, 0xc5, 0xce, 0x52, - 0x96, 0xa6, 0x91, 0xbc, 0x65, 0xf2, 0x2c, 0x7d, 0x02, 0x73, 0x61, 0xa9, 0x08, 0x41, 0x41, 0xae, - 0x36, 0xf6, 0xb6, 0xab, 0xca, 0xde, 0xce, 0xd6, 0xce, 0xb3, 0x97, 0x3b, 0xe2, 0x14, 0xba, 0x04, - 0x22, 0xa7, 0x6d, 0x55, 0x3f, 0x55, 0x9e, 0xd6, 0xb7, 0xeb, 0x4d, 0x51, 0x58, 0xce, 0x7c, 0xf7, - 0x77, 0x56, 0xa6, 0x36, 0x33, 0xd9, 0x19, 0x71, 0x56, 0xfa, 0x1d, 0x01, 0xe0, 0x09, 0x76, 0x79, + 0xcd, 0x5e, 0x67, 0x0b, 0xf7, 0x1d, 0xf4, 0x06, 0xe4, 0x48, 0xd2, 0x7e, 0xdf, 0xc5, 0xce, 0x52, + 0x96, 0xa6, 0x91, 0xbc, 0x65, 0xf2, 0x2c, 0x7d, 0x0a, 0x73, 0x61, 0xa9, 0x08, 0x41, 0x41, 0xae, + 0x36, 0xf6, 0xb6, 0xab, 0xca, 0xde, 0xce, 0xd6, 0xce, 0xd3, 0x17, 0x3b, 0xe2, 0x14, 0xba, 0x04, + 0x22, 0xa7, 0x6d, 0x55, 0x3f, 0x53, 0x9e, 0xd4, 0xb7, 0xeb, 0x4d, 0x51, 0x58, 0xce, 0x7c, 0xf7, + 0x77, 0x56, 0xa6, 0x36, 0x33, 0xd9, 0x19, 0x71, 0x56, 0xfa, 0x1d, 0x01, 0xe0, 0x31, 0x76, 0x79, 0x6f, 0x40, 0x65, 0x98, 0x39, 0xa4, 0x25, 0x5e, 0x12, 0xa8, 0x5a, 0xae, 0xc7, 0x56, 0x2d, 0xd4, - 0x73, 0xca, 0xd9, 0x1f, 0x9d, 0xae, 0x4e, 0xfd, 0xf4, 0x74, 0x55, 0x90, 0x39, 0x27, 0x7a, 0x0e, + 0x73, 0xca, 0xd9, 0x1f, 0x9d, 0xae, 0x4e, 0xfd, 0xf4, 0x74, 0x55, 0x90, 0x39, 0x27, 0x7a, 0x06, 0xf9, 0x23, 0xdc, 0x57, 0xf8, 0xb8, 0x5c, 0x4a, 0x51, 0x1d, 0xbd, 0x1f, 0x12, 0x74, 0x74, 0x5c, 0xf2, 0x86, 0x68, 0x29, 0x34, 0x9c, 0x4b, 0x84, 0xa3, 0xd4, 0x70, 0x6d, 0x6c, 0xb6, 0xdc, 0x43, - 0x19, 0x8e, 0x70, 0xff, 0x29, 0x93, 0x21, 0xfd, 0xbe, 0x00, 0x79, 0x5a, 0x4a, 0xa6, 0x54, 0x54, + 0x19, 0x8e, 0x70, 0xff, 0x09, 0x93, 0x21, 0xfd, 0xbe, 0x00, 0x79, 0x5a, 0x4a, 0xa6, 0x54, 0x54, 0x19, 0x28, 0xe6, 0x8d, 0x73, 0x5b, 0x20, 0xa6, 0x9c, 0x25, 0x98, 0x3e, 0x56, 0xdb, 0x3d, 0x4c, - 0x4b, 0x98, 0x7f, 0xb8, 0x14, 0x23, 0xe3, 0x05, 0x49, 0x97, 0x59, 0x36, 0xf4, 0x11, 0xcc, 0x19, - 0xa6, 0x8b, 0x4d, 0x57, 0x61, 0x6c, 0xe9, 0x73, 0xd8, 0xf2, 0x2c, 0x37, 0x7d, 0x90, 0xfe, 0xb1, - 0x00, 0xb0, 0xdb, 0x4b, 0x54, 0xcf, 0x5f, 0x9f, 0xb0, 0xfc, 0xe5, 0x0c, 0x61, 0xf5, 0x6a, 0x71, + 0x4b, 0x98, 0x7f, 0xb0, 0x14, 0x23, 0xe3, 0x39, 0x49, 0x97, 0x59, 0x36, 0xf4, 0x31, 0xcc, 0x19, + 0xa6, 0x8b, 0x4d, 0x57, 0x61, 0x6c, 0xe9, 0x73, 0xd8, 0xf2, 0x2c, 0x37, 0x7d, 0x90, 0xfe, 0xa1, + 0x00, 0xb0, 0xdb, 0x4b, 0x54, 0xcf, 0xdf, 0x98, 0xb0, 0xfc, 0xe5, 0x0c, 0x61, 0xf5, 0x6a, 0x71, 0x05, 0x66, 0x0c, 0xb3, 0x6d, 0x98, 0xac, 0xfc, 0x59, 0x99, 0x3f, 0xa1, 0x4b, 0x30, 0xbd, 0xdf, 0x36, 0x4c, 0x9d, 0x8e, 0x87, 0xac, 0xcc, 0x1e, 0x24, 0x19, 0xf2, 0xb4, 0xd4, 0x09, 0xea, 0x5d, - 0x3a, 0x4d, 0xc1, 0xe5, 0x8a, 0x65, 0xea, 0x06, 0x19, 0x92, 0x6a, 0xfb, 0x2b, 0xa1, 0x95, 0x4d, + 0x3a, 0x4d, 0xc1, 0xe5, 0x8a, 0x65, 0xea, 0x06, 0x19, 0x92, 0x6a, 0xfb, 0x6b, 0xa1, 0x95, 0x4d, 0xb8, 0xa4, 0xe3, 0xae, 0x8d, 0x35, 0xd5, 0xc5, 0xba, 0x82, 0x4f, 0xba, 0x13, 0xb6, 0x31, 0x0a, 0xb8, 0xaa, 0x27, 0x5d, 0x4a, 0x23, 0xa3, 0x96, 0x08, 0x60, 0xa3, 0x76, 0x86, 0x98, 0x4c, 0x39, - 0x8b, 0x4f, 0xba, 0x74, 0xd4, 0xc6, 0xab, 0x19, 0x7d, 0x1d, 0xae, 0xaa, 0xed, 0xb6, 0xf5, 0x5a, + 0x8b, 0x4f, 0xba, 0x74, 0xd4, 0xc6, 0xab, 0x19, 0x7d, 0x03, 0xae, 0xaa, 0xed, 0xb6, 0xf5, 0x4a, 0x31, 0x0e, 0x14, 0xdd, 0xc2, 0x8e, 0x62, 0x5a, 0xae, 0x82, 0x4f, 0x0c, 0xc7, 0xa5, 0x26, 0x21, 0x2b, 0x2f, 0xd2, 0xe4, 0xfa, 0xc1, 0x86, 0x85, 0x9d, 0x1d, 0xcb, 0xad, 0x92, 0xa4, 0x50, 0x53, 0xce, 0x86, 0x9b, 0x52, 0xfa, 0x55, 0xb8, 0x32, 0xa8, 0xdf, 0x24, 0xdb, 0xef, 0xc7, 0x02, 0x14, - 0xea, 0xa6, 0xe1, 0x7e, 0x25, 0x1a, 0xce, 0xd7, 0x67, 0x3a, 0xac, 0xcf, 0xfb, 0x20, 0x1e, 0xa8, - 0x46, 0xfb, 0x99, 0xd9, 0xb4, 0x3a, 0xfb, 0x8e, 0x6b, 0x99, 0xd8, 0xe1, 0x0a, 0x1f, 0xa2, 0x4b, - 0x2f, 0xa0, 0xe8, 0xd7, 0x26, 0x49, 0x35, 0xb9, 0x20, 0xd6, 0x4d, 0xcd, 0xc6, 0x1d, 0x6c, 0x26, - 0xaa, 0xa7, 0xb7, 0x21, 0x67, 0x78, 0x72, 0xa9, 0xae, 0xd2, 0x72, 0x40, 0x90, 0x7a, 0xb0, 0x10, - 0x7a, 0x6b, 0x92, 0xe6, 0x92, 0x4c, 0x46, 0xf8, 0xb5, 0x12, 0xb4, 0x11, 0x99, 0x8c, 0xf0, 0x6b, + 0xea, 0xa6, 0xe1, 0x7e, 0x2d, 0x1a, 0xce, 0xd7, 0x67, 0x3a, 0xac, 0xcf, 0x7b, 0x20, 0x1e, 0xa8, + 0x46, 0xfb, 0xa9, 0xd9, 0xb4, 0x3a, 0xfb, 0x8e, 0x6b, 0x99, 0xd8, 0xe1, 0x0a, 0x1f, 0xa2, 0x4b, + 0xcf, 0xa1, 0xe8, 0xd7, 0x26, 0x49, 0x35, 0xb9, 0x20, 0xd6, 0x4d, 0xcd, 0xc6, 0x1d, 0x6c, 0x26, + 0xaa, 0xa7, 0x37, 0x21, 0x67, 0x78, 0x72, 0xa9, 0xae, 0xd2, 0x72, 0x40, 0x90, 0x7a, 0xb0, 0x10, + 0x7a, 0x6b, 0x92, 0xe6, 0x92, 0x4c, 0x46, 0xf8, 0x95, 0x12, 0xb4, 0x11, 0x99, 0x8c, 0xf0, 0x2b, 0x66, 0xde, 0x1a, 0x30, 0xbf, 0x81, 0xdb, 0xd8, 0xc5, 0x09, 0xd6, 0x54, 0xda, 0x83, 0x82, 0x27, 0x34, 0xc9, 0x86, 0xf9, 0x4d, 0x01, 0x10, 0x97, 0xab, 0x9a, 0xad, 0x24, 0x4b, 0x8c, 0x56, 0x89, 0x6b, 0xe1, 0xf6, 0x6c, 0x93, 0x4d, 0xe7, 0xac, 0x4f, 0x02, 0x23, 0xd1, 0x19, 0x3d, 0x18, 0xb2, - 0x99, 0xf0, 0x90, 0xe5, 0xee, 0xcd, 0x6b, 0x58, 0x8c, 0x14, 0x2c, 0xd9, 0xe6, 0xcb, 0xd0, 0x32, + 0x99, 0xf0, 0x90, 0xe5, 0xee, 0xcd, 0x2b, 0x58, 0x8c, 0x14, 0x2c, 0xd9, 0xe6, 0xcb, 0xd0, 0x32, 0xa5, 0xae, 0xa7, 0xc3, 0x3e, 0x1c, 0x25, 0x4a, 0xdf, 0x17, 0x60, 0xa1, 0xd2, 0xc6, 0xaa, 0x9d, - 0xb8, 0x46, 0xbe, 0x05, 0x59, 0x1d, 0xab, 0x3a, 0xad, 0x32, 0x1b, 0xd8, 0xef, 0x84, 0xa4, 0x10, - 0x4f, 0xb7, 0x74, 0xd8, 0xd6, 0x4a, 0x4d, 0xcf, 0x07, 0xe6, 0xa3, 0xdb, 0x67, 0x92, 0x3e, 0x05, + 0xb8, 0x46, 0xbe, 0x05, 0x59, 0x1d, 0xab, 0x3a, 0xad, 0x32, 0x1b, 0xd8, 0x6f, 0x85, 0xa4, 0x10, + 0x4f, 0xb7, 0x74, 0xd8, 0xd6, 0x4a, 0x4d, 0xcf, 0x07, 0xe6, 0xa3, 0xdb, 0x67, 0x92, 0x3e, 0x03, 0x14, 0x2e, 0x59, 0x92, 0x1d, 0xe1, 0x77, 0x53, 0x80, 0x64, 0x7c, 0x8c, 0x6d, 0x37, 0xf1, 0x6a, 0x6f, 0x40, 0xde, 0x55, 0xed, 0x16, 0x76, 0x15, 0xe2, 0xdd, 0x5f, 0xa4, 0xe6, 0xc0, 0xf8, 0x08, - 0x19, 0x35, 0xe1, 0x0e, 0x36, 0xd5, 0xfd, 0x36, 0xa6, 0x52, 0x94, 0x7d, 0xab, 0x67, 0xea, 0x8a, - 0xe1, 0x62, 0x5b, 0x75, 0x2d, 0x5b, 0xb1, 0xba, 0xae, 0xd1, 0x31, 0x3e, 0xa7, 0x8e, 0x3d, 0xef, - 0x6a, 0x37, 0x59, 0x76, 0xc2, 0x5c, 0x26, 0x99, 0xeb, 0x3c, 0xef, 0xb3, 0x50, 0x56, 0x54, 0x82, - 0x45, 0xa3, 0x65, 0x5a, 0x36, 0x56, 0x5a, 0x9a, 0xe2, 0x1e, 0xda, 0xd8, 0x39, 0xb4, 0xda, 0xde, - 0x84, 0xb4, 0xc0, 0x92, 0x9e, 0x68, 0x4d, 0x2f, 0x41, 0xfa, 0x0c, 0x16, 0x23, 0x5a, 0x4a, 0xb2, - 0x09, 0xfe, 0xa7, 0x00, 0xf9, 0x86, 0xa6, 0x9a, 0x49, 0xea, 0xfe, 0x13, 0xc8, 0x3b, 0x9a, 0x6a, - 0x2a, 0x07, 0x96, 0xdd, 0x51, 0x5d, 0x5a, 0xaf, 0x42, 0x44, 0xf7, 0xbe, 0x7f, 0xaf, 0xa9, 0xe6, - 0x63, 0x9a, 0x49, 0x06, 0xc7, 0xff, 0x3d, 0xe8, 0xbf, 0x4e, 0x7f, 0x79, 0xff, 0x95, 0x0d, 0xef, - 0xcd, 0x4c, 0x36, 0x2d, 0x66, 0xa4, 0x3f, 0x15, 0x60, 0x8e, 0x55, 0x39, 0xc9, 0xe1, 0xfd, 0x0d, - 0xc8, 0xd8, 0xd6, 0x6b, 0x36, 0xbc, 0xf3, 0x0f, 0xdf, 0x8a, 0x11, 0xb1, 0x85, 0xfb, 0xe1, 0xf9, - 0x93, 0x66, 0x47, 0x65, 0xe0, 0x5e, 0xaa, 0x42, 0xb9, 0xd3, 0x93, 0x72, 0x03, 0xe3, 0x92, 0x89, - 0x8c, 0x3b, 0x50, 0xdc, 0x57, 0x5d, 0xed, 0x50, 0xb1, 0x79, 0x21, 0xc9, 0x5c, 0x9b, 0xbe, 0x3b, - 0x27, 0x17, 0x28, 0xd9, 0x2b, 0xba, 0x43, 0x6a, 0xce, 0xc6, 0x9b, 0x83, 0xff, 0x9c, 0xb5, 0xf9, - 0xff, 0x15, 0xf8, 0x18, 0xf2, 0x6a, 0xfe, 0xe7, 0xad, 0xe9, 0x7f, 0x90, 0x82, 0xab, 0x95, 0x43, - 0xac, 0x1d, 0x55, 0x2c, 0xd3, 0x31, 0x1c, 0x97, 0xe8, 0x2e, 0xc9, 0xf6, 0x7f, 0x0b, 0x72, 0xaf, - 0x0d, 0xf7, 0x50, 0xd1, 0x8d, 0x83, 0x03, 0x6a, 0x6d, 0xb3, 0x72, 0x96, 0x10, 0x36, 0x8c, 0x83, - 0x03, 0xf4, 0x08, 0x32, 0x1d, 0x4b, 0x67, 0xce, 0x7c, 0xe1, 0xe1, 0x6a, 0x8c, 0x78, 0x5a, 0x34, - 0xa7, 0xd7, 0xd9, 0xb6, 0x74, 0x2c, 0xd3, 0xcc, 0x68, 0x05, 0x40, 0x23, 0xd4, 0xae, 0x65, 0x98, - 0x2e, 0x37, 0x8e, 0x21, 0x0a, 0xaa, 0x41, 0xce, 0xc5, 0x76, 0xc7, 0x30, 0x55, 0x17, 0x2f, 0x4d, - 0x53, 0xe5, 0xbd, 0x1b, 0x5b, 0xf0, 0x6e, 0xdb, 0xd0, 0xd4, 0x0d, 0xec, 0x68, 0xb6, 0xd1, 0x75, - 0x2d, 0x9b, 0x6b, 0x31, 0x60, 0x96, 0xfe, 0x7a, 0x06, 0x96, 0x86, 0x75, 0x93, 0x64, 0x0f, 0xd9, - 0x85, 0x19, 0x1b, 0x3b, 0xbd, 0xb6, 0xcb, 0xfb, 0xc8, 0xc3, 0x51, 0x2a, 0x88, 0x29, 0x01, 0x5d, - 0xba, 0x68, 0xbb, 0xbc, 0xd8, 0x5c, 0xce, 0xf2, 0xbf, 0x14, 0x60, 0x86, 0x25, 0xa0, 0x07, 0x90, - 0xb5, 0xc9, 0xc4, 0xa0, 0x18, 0x3a, 0x2d, 0x63, 0xba, 0x7c, 0xe5, 0xec, 0x74, 0x75, 0x96, 0x4e, - 0x16, 0xf5, 0x8d, 0x2f, 0x82, 0x9f, 0xf2, 0x2c, 0xcd, 0x57, 0xd7, 0x49, 0x6b, 0x39, 0xae, 0x6a, - 0xbb, 0x74, 0x51, 0x29, 0xc5, 0x10, 0x12, 0x25, 0x6c, 0xe1, 0x3e, 0xda, 0x84, 0x19, 0xc7, 0x55, - 0xdd, 0x9e, 0xc3, 0xdb, 0xeb, 0x42, 0x85, 0x6d, 0x50, 0x4e, 0x99, 0x4b, 0x20, 0xee, 0x96, 0x8e, - 0x5d, 0xd5, 0x68, 0xd3, 0x06, 0xcc, 0xc9, 0xfc, 0x49, 0xfa, 0x2d, 0x01, 0x66, 0x58, 0x56, 0x74, - 0x15, 0x16, 0xe5, 0xf5, 0x9d, 0x27, 0x55, 0xa5, 0xbe, 0xb3, 0x51, 0x6d, 0x56, 0xe5, 0xed, 0xfa, - 0xce, 0x7a, 0xb3, 0x2a, 0x4e, 0xa1, 0x2b, 0x80, 0xbc, 0x84, 0xca, 0xb3, 0x9d, 0x46, 0xbd, 0xd1, - 0xac, 0xee, 0x34, 0x45, 0x81, 0xae, 0xa9, 0x50, 0x7a, 0x88, 0x9a, 0x42, 0xef, 0xc2, 0xf5, 0x41, - 0xaa, 0xd2, 0x68, 0xae, 0x37, 0x1b, 0x4a, 0xb5, 0xd1, 0xac, 0x6f, 0xaf, 0x37, 0xab, 0x1b, 0x62, - 0x7a, 0x4c, 0x2e, 0xf2, 0x12, 0x59, 0xae, 0x56, 0x9a, 0x62, 0x46, 0x72, 0xe1, 0xb2, 0x8c, 0x35, - 0xab, 0xd3, 0xed, 0xb9, 0x98, 0x94, 0xd2, 0x49, 0x72, 0xa4, 0x5c, 0x85, 0x59, 0xdd, 0xee, 0x2b, - 0x76, 0xcf, 0xe4, 0xe3, 0x64, 0x46, 0xb7, 0xfb, 0x72, 0xcf, 0x94, 0xfe, 0xa1, 0x00, 0x57, 0x06, - 0x5f, 0x9b, 0x64, 0x27, 0x7c, 0x0e, 0x79, 0x55, 0xd7, 0xb1, 0xae, 0xe8, 0xb8, 0xed, 0xaa, 0xdc, - 0x25, 0xba, 0x1f, 0x92, 0xc4, 0x97, 0x02, 0x4b, 0xfe, 0x52, 0xe0, 0xf6, 0x8b, 0x4a, 0x85, 0x16, - 0x64, 0x83, 0x70, 0x78, 0xe6, 0x87, 0x0a, 0xa1, 0x14, 0xe9, 0x07, 0x19, 0x98, 0xaf, 0x9a, 0x7a, - 0xf3, 0x24, 0xd1, 0xb9, 0xe4, 0x0a, 0xcc, 0x68, 0x56, 0xa7, 0x63, 0xb8, 0x9e, 0x82, 0xd8, 0x13, - 0xfa, 0xc5, 0x90, 0x2b, 0x9b, 0x9e, 0xc0, 0xa1, 0x0b, 0x9c, 0x58, 0xf4, 0x6b, 0x70, 0x95, 0x58, - 0x4d, 0xdb, 0x54, 0xdb, 0x0a, 0x93, 0xa6, 0xb8, 0xb6, 0xd1, 0x6a, 0x61, 0x9b, 0x2f, 0x3f, 0xde, - 0x8d, 0x29, 0x67, 0x9d, 0x73, 0x54, 0x28, 0x43, 0x93, 0xe5, 0x97, 0x2f, 0x1b, 0x71, 0x64, 0xf4, - 0x31, 0x00, 0x99, 0x8a, 0xe8, 0x92, 0xa6, 0xc3, 0xed, 0xd1, 0xa8, 0x35, 0x4d, 0xcf, 0x04, 0x11, - 0x06, 0xf2, 0xec, 0xa0, 0xe7, 0x20, 0x1a, 0xa6, 0x72, 0xd0, 0x36, 0x5a, 0x87, 0xae, 0xf2, 0xda, - 0x36, 0x5c, 0xec, 0x2c, 0x2d, 0x50, 0x19, 0x71, 0x4d, 0xdd, 0xe0, 0x4b, 0xb3, 0xfa, 0x4b, 0x92, - 0x93, 0x4b, 0x2b, 0x18, 0xe6, 0x63, 0xca, 0x4f, 0x89, 0x0e, 0x5a, 0x23, 0x50, 0xe8, 0x55, 0xcf, - 0xb0, 0xb1, 0xf2, 0xa0, 0xab, 0xd1, 0x75, 0x90, 0x6c, 0xb9, 0x70, 0x76, 0xba, 0x0a, 0x32, 0x23, - 0x3f, 0xd8, 0xad, 0x10, 0x68, 0xc4, 0x7e, 0x77, 0x35, 0xa2, 0xf6, 0xae, 0x65, 0x38, 0x96, 0xb9, - 0x94, 0x63, 0x6a, 0x67, 0x4f, 0xe8, 0x1e, 0x88, 0xee, 0x89, 0xa9, 0x1c, 0x62, 0xd5, 0x76, 0xf7, - 0xb1, 0xea, 0x92, 0xf9, 0x19, 0x68, 0x8e, 0xa2, 0x7b, 0x62, 0xd6, 0x42, 0xe4, 0xcd, 0x4c, 0x76, - 0x56, 0xcc, 0x6e, 0x66, 0xb2, 0x59, 0x31, 0x27, 0xfd, 0x27, 0x01, 0x0a, 0x5e, 0xdf, 0x48, 0xb2, - 0x1b, 0xdf, 0x05, 0xd1, 0x32, 0xb1, 0xd2, 0x3d, 0x54, 0x1d, 0xcc, 0xdb, 0x92, 0xcf, 0x0e, 0x05, - 0xcb, 0xc4, 0xbb, 0x84, 0xcc, 0x5a, 0x06, 0xed, 0xc2, 0x82, 0xe3, 0xaa, 0x2d, 0xc3, 0x6c, 0x29, - 0xfe, 0x12, 0x3f, 0xf5, 0x2c, 0x26, 0x44, 0x02, 0x22, 0xe7, 0xf6, 0xe9, 0x11, 0x97, 0xe2, 0x0f, - 0x04, 0x58, 0x58, 0xd7, 0x3b, 0x86, 0xd9, 0xe8, 0xb6, 0x8d, 0x44, 0x17, 0x18, 0xde, 0x85, 0x9c, - 0x43, 0x64, 0x06, 0xd6, 0x39, 0x80, 0x8b, 0x59, 0x9a, 0x42, 0xcc, 0xf4, 0x53, 0x28, 0xe2, 0x93, - 0xae, 0xc1, 0xf6, 0x15, 0x18, 0xca, 0xc9, 0x4c, 0x5e, 0xb7, 0x42, 0xc0, 0x4b, 0x92, 0x78, 0x9d, - 0x3e, 0x05, 0x14, 0xae, 0x52, 0x92, 0x40, 0xe3, 0x53, 0x58, 0xa4, 0xa2, 0xf7, 0x4c, 0x27, 0x61, - 0x7d, 0x49, 0xbf, 0x02, 0x97, 0xa2, 0xa2, 0x93, 0x2c, 0xf7, 0x4b, 0xde, 0xca, 0xdb, 0xd8, 0x4e, - 0x14, 0xa1, 0xfa, 0xba, 0xe6, 0x82, 0x93, 0x2c, 0xf3, 0xaf, 0x0b, 0x70, 0x8d, 0xca, 0xa6, 0x5b, - 0x2f, 0x07, 0xd8, 0x7e, 0x8a, 0x55, 0x27, 0x51, 0x78, 0x7d, 0x13, 0x66, 0x18, 0x4c, 0xa6, 0xfd, - 0x73, 0xba, 0x9c, 0x27, 0x6e, 0x46, 0xc3, 0xb5, 0x6c, 0xe2, 0x66, 0xf0, 0x24, 0x49, 0x85, 0xe5, - 0xb8, 0x52, 0x24, 0x59, 0xd3, 0xbf, 0x2d, 0xc0, 0x02, 0xf7, 0xf0, 0x48, 0x57, 0xae, 0x1c, 0x12, - 0x07, 0x07, 0x55, 0x21, 0xaf, 0xd1, 0x5f, 0x8a, 0xdb, 0xef, 0x62, 0x2a, 0xbf, 0x30, 0xce, 0x39, - 0x64, 0x6c, 0xcd, 0x7e, 0x17, 0x13, 0x0f, 0xd3, 0xfb, 0x4d, 0x14, 0x15, 0xaa, 0xe4, 0x58, 0xf7, - 0x92, 0x8e, 0x23, 0x9a, 0xd7, 0xf3, 0xd3, 0xb8, 0x0e, 0x7e, 0x2f, 0xcd, 0x95, 0xc0, 0xde, 0xc1, - 0xb3, 0x27, 0xea, 0x50, 0x7c, 0x06, 0x57, 0x42, 0x4b, 0xe7, 0xe1, 0x8a, 0xa7, 0x2e, 0x50, 0xf1, - 0xd0, 0xf2, 0x7b, 0x40, 0x45, 0x9f, 0x42, 0x68, 0x81, 0x5d, 0x61, 0x75, 0xf2, 0xa0, 0xca, 0x45, - 0xd4, 0xb1, 0x10, 0x48, 0x61, 0x74, 0x07, 0x55, 0x20, 0x8b, 0x4f, 0xba, 0x8a, 0x8e, 0x1d, 0x8d, - 0x1b, 0x2e, 0x29, 0x4e, 0x20, 0x29, 0xca, 0x90, 0xf3, 0x3e, 0x8b, 0x4f, 0xba, 0x84, 0x88, 0xf6, - 0xc8, 0xbc, 0xe9, 0xcd, 0xeb, 0xb4, 0xd8, 0xce, 0xf9, 0x58, 0x20, 0xe8, 0x29, 0x5c, 0x5c, 0xd1, - 0x9f, 0xd2, 0x99, 0x08, 0xe9, 0x87, 0x02, 0xbc, 0x15, 0xdb, 0x6a, 0x49, 0x4e, 0x64, 0x1f, 0x43, - 0x86, 0x56, 0x3e, 0x75, 0xc1, 0xca, 0x53, 0x2e, 0xe9, 0xbb, 0x29, 0x3e, 0xc6, 0x65, 0xdc, 0xb6, - 0x88, 0x62, 0x13, 0x5f, 0x42, 0x7b, 0x06, 0xf3, 0xc7, 0x96, 0x8b, 0x6d, 0xbf, 0xd9, 0x53, 0x17, - 0x6e, 0xf6, 0x39, 0x2a, 0xc0, 0x6b, 0xf1, 0x17, 0xb0, 0x60, 0x5a, 0xa6, 0x12, 0x15, 0x7a, 0xf1, - 0xbe, 0x54, 0x34, 0x2d, 0xf3, 0x45, 0x48, 0xae, 0x6f, 0x67, 0x06, 0x34, 0x91, 0xa4, 0x9d, 0xf9, - 0x9e, 0x00, 0x8b, 0xbe, 0xa7, 0x93, 0xb0, 0xbb, 0xfb, 0x0d, 0x48, 0x9b, 0xd6, 0xeb, 0x8b, 0x2c, - 0x51, 0x92, 0xfc, 0x64, 0xd6, 0x8b, 0x96, 0x28, 0xc9, 0xfa, 0xfe, 0xab, 0x14, 0xe4, 0x9e, 0x54, - 0x92, 0xac, 0xe5, 0xc7, 0x7c, 0xf9, 0x9b, 0xb5, 0x77, 0x5c, 0x6f, 0xf7, 0xdf, 0x57, 0x7a, 0x52, - 0xd9, 0xc2, 0x7d, 0xaf, 0xb7, 0x13, 0x2e, 0xb4, 0x0e, 0xb9, 0xe8, 0x42, 0xe9, 0x84, 0x9a, 0x0a, - 0xb8, 0x96, 0x31, 0x4c, 0x53, 0xb9, 0x5e, 0xa8, 0x85, 0x10, 0x13, 0x6a, 0x41, 0x5e, 0xe3, 0x7b, - 0x8a, 0xa9, 0x8b, 0xbc, 0x26, 0xe4, 0x22, 0x4e, 0x8b, 0x33, 0xd2, 0x73, 0x00, 0x52, 0x9d, 0x24, - 0x9b, 0xe4, 0x37, 0xd2, 0x50, 0xd8, 0xed, 0x39, 0x87, 0x09, 0xf7, 0xbe, 0x0a, 0x40, 0xb7, 0xe7, - 0x1c, 0x92, 0x11, 0x79, 0x62, 0xf2, 0x3a, 0x9f, 0x13, 0xc5, 0xe1, 0x55, 0x9a, 0xf1, 0x35, 0x4f, - 0x4c, 0x54, 0xe3, 0x42, 0xb0, 0x12, 0x84, 0x82, 0xdc, 0x1c, 0x87, 0x2c, 0x9b, 0x27, 0xe6, 0x36, - 0xf6, 0x21, 0x25, 0x93, 0x84, 0x89, 0xa4, 0x8f, 0x61, 0x96, 0x3c, 0x28, 0xae, 0x75, 0x91, 0x66, - 0x9e, 0x21, 0x3c, 0x4d, 0x0b, 0x7d, 0x04, 0x39, 0xc6, 0x4d, 0x66, 0xbf, 0x19, 0x3a, 0xfb, 0xc5, - 0xd5, 0x85, 0xab, 0x91, 0xce, 0x7b, 0x59, 0xca, 0x4a, 0xe6, 0xba, 0x4b, 0x30, 0x7d, 0x60, 0xd9, - 0x9a, 0xb7, 0x99, 0xcb, 0x1e, 0x58, 0x7b, 0x32, 0x48, 0xb3, 0x99, 0xc9, 0xe6, 0x44, 0x90, 0x7e, - 0x4b, 0x80, 0xa2, 0xdf, 0x10, 0x49, 0x4e, 0x08, 0x95, 0x88, 0x16, 0x2f, 0xde, 0x14, 0x44, 0x81, - 0xd2, 0xbf, 0xa5, 0x1e, 0x91, 0x66, 0x1d, 0xd3, 0x96, 0x49, 0xb2, 0xa7, 0x7c, 0xc4, 0x02, 0x7d, - 0x52, 0x17, 0x6d, 0x5d, 0x1a, 0xf3, 0xf3, 0x00, 0x2e, 0x19, 0x1d, 0x62, 0xcf, 0x0d, 0xb7, 0xdd, - 0xe7, 0xb0, 0xcd, 0xc5, 0xde, 0xae, 0xf1, 0x62, 0x90, 0x56, 0xf1, 0x92, 0xa4, 0xdf, 0xa5, 0xab, - 0xd5, 0x41, 0x4d, 0x92, 0x54, 0x75, 0x1d, 0xe6, 0x6d, 0x26, 0x9a, 0xb8, 0x35, 0x17, 0xd4, 0xf6, - 0x9c, 0xcf, 0x4a, 0x14, 0xfe, 0xdb, 0x29, 0x28, 0x3e, 0xef, 0x61, 0xbb, 0xff, 0x55, 0x52, 0xf7, - 0x6d, 0x28, 0xbe, 0x56, 0x0d, 0x57, 0x39, 0xb0, 0x6c, 0xa5, 0xd7, 0xd5, 0x55, 0xd7, 0x8b, 0x36, - 0x99, 0x27, 0xe4, 0xc7, 0x96, 0xbd, 0x47, 0x89, 0x08, 0x03, 0x3a, 0x32, 0xad, 0xd7, 0xa6, 0x42, - 0xc8, 0x14, 0x28, 0x9f, 0x98, 0x7c, 0x09, 0xb9, 0xfc, 0xcd, 0xff, 0x78, 0xba, 0xfa, 0x68, 0xa2, - 0x18, 0x32, 0x1a, 0x2f, 0xd7, 0xeb, 0x19, 0x7a, 0x69, 0x6f, 0xaf, 0xbe, 0x21, 0x8b, 0x54, 0xe4, - 0x4b, 0x26, 0xb1, 0x79, 0x62, 0x3a, 0xd2, 0xdf, 0x4d, 0x81, 0x18, 0xe8, 0x28, 0xc9, 0x86, 0xac, - 0x42, 0xfe, 0x55, 0x0f, 0xdb, 0xc6, 0x1b, 0x34, 0x23, 0x70, 0x46, 0x62, 0x76, 0xee, 0xc3, 0x82, - 0x7b, 0x62, 0x2a, 0x2c, 0xc2, 0x8f, 0x05, 0x7e, 0x78, 0x01, 0x0b, 0x45, 0x97, 0x94, 0x99, 0xd0, - 0x69, 0xd0, 0x87, 0x83, 0x3e, 0x83, 0xb9, 0x88, 0xb6, 0xd2, 0x5f, 0x4e, 0x5b, 0xf9, 0xd7, 0x21, - 0x45, 0xfd, 0xbe, 0x00, 0x88, 0x2a, 0xaa, 0xce, 0xd6, 0xf8, 0xbf, 0x2a, 0xfd, 0xe9, 0x2e, 0x88, - 0x34, 0x1e, 0x53, 0x31, 0x0e, 0x94, 0x8e, 0xe1, 0x38, 0x86, 0xd9, 0xe2, 0x1d, 0xaa, 0x40, 0xe9, - 0xf5, 0x83, 0x6d, 0x46, 0x95, 0xfe, 0x12, 0x2c, 0x46, 0x2a, 0x90, 0x64, 0x63, 0xdf, 0x80, 0xb9, - 0x03, 0xb6, 0x05, 0x4b, 0x85, 0xf3, 0xe5, 0xc1, 0x3c, 0xa5, 0xb1, 0xf7, 0x49, 0x7f, 0x92, 0x82, - 0x4b, 0x32, 0x76, 0xac, 0xf6, 0x31, 0x4e, 0x5e, 0x85, 0x35, 0xe0, 0x7b, 0x2f, 0xca, 0x1b, 0x69, - 0x32, 0xc7, 0x98, 0xd9, 0x34, 0x17, 0x5d, 0x63, 0x7f, 0x77, 0x7c, 0x8f, 0x1d, 0x5e, 0x55, 0xe7, - 0x2b, 0x75, 0x99, 0xc8, 0x4a, 0x9d, 0x05, 0x45, 0xb6, 0x7b, 0xac, 0x2b, 0x0e, 0x7e, 0x65, 0xf6, - 0x3a, 0x1e, 0x18, 0x2a, 0x8d, 0x2b, 0x64, 0x9d, 0xb1, 0x34, 0xf0, 0xab, 0x9d, 0x5e, 0x87, 0xfa, - 0xce, 0xe5, 0x2b, 0xa4, 0xbc, 0x67, 0xa7, 0xab, 0x85, 0x48, 0x9a, 0x23, 0x17, 0x0c, 0xff, 0x99, - 0x48, 0x97, 0xbe, 0x0d, 0x97, 0x07, 0x94, 0x9d, 0xa4, 0xc7, 0xf3, 0x2f, 0xd2, 0x70, 0x2d, 0x2a, - 0x3e, 0x69, 0x88, 0xf3, 0x55, 0x6f, 0xd0, 0x1a, 0xcc, 0x77, 0x0c, 0xf3, 0xcd, 0x56, 0x2f, 0xe7, - 0x3a, 0x86, 0xe9, 0xd3, 0xe2, 0xba, 0xc6, 0xcc, 0xcf, 0xb5, 0x6b, 0xa8, 0xb0, 0x1c, 0xd7, 0x76, - 0x49, 0xf6, 0x8f, 0xef, 0x0a, 0x30, 0x97, 0xf4, 0xb2, 0xdc, 0x9b, 0x45, 0xc1, 0x49, 0x4d, 0x98, - 0xff, 0x39, 0xac, 0xe3, 0xfd, 0xb6, 0x00, 0xa8, 0x69, 0xf7, 0x4c, 0x02, 0x6a, 0x9f, 0x5a, 0xad, - 0x24, 0xab, 0x79, 0x09, 0xa6, 0x0d, 0x53, 0xc7, 0x27, 0xb4, 0x9a, 0x19, 0x99, 0x3d, 0x44, 0xb6, - 0x12, 0xd3, 0x13, 0x6d, 0x25, 0x4a, 0x9f, 0xc1, 0x62, 0xa4, 0x88, 0x49, 0xd6, 0xff, 0x8f, 0x53, - 0xb0, 0xc8, 0x2b, 0x92, 0xf8, 0x0a, 0xe6, 0xd7, 0x61, 0xba, 0x4d, 0x64, 0x8e, 0x69, 0x67, 0xfa, - 0x4e, 0xaf, 0x9d, 0x69, 0x66, 0xf4, 0x4b, 0x00, 0x5d, 0x1b, 0x1f, 0x2b, 0x8c, 0x35, 0x3d, 0x11, - 0x6b, 0x8e, 0x70, 0x50, 0x02, 0xfa, 0xbe, 0x00, 0x45, 0x32, 0xa0, 0xbb, 0xb6, 0xd5, 0xb5, 0x1c, - 0xe2, 0xb3, 0x38, 0x93, 0xc1, 0x9c, 0xe7, 0x67, 0xa7, 0xab, 0xf3, 0xdb, 0x86, 0xb9, 0xcb, 0x19, - 0x9b, 0x8d, 0x89, 0x03, 0xfc, 0xbd, 0x63, 0x0e, 0xa5, 0x4a, 0xdb, 0xd2, 0x8e, 0x82, 0xcd, 0x31, - 0x62, 0x59, 0x7c, 0x71, 0x8e, 0xf4, 0x13, 0x01, 0x2e, 0xfd, 0xdc, 0x96, 0x8b, 0xff, 0x2c, 0x94, - 0x2d, 0xbd, 0x00, 0x91, 0xfe, 0xa8, 0x9b, 0x07, 0x56, 0x92, 0x0b, 0xf7, 0xff, 0x47, 0x80, 0x85, - 0x90, 0xe0, 0x24, 0x1d, 0x9c, 0x37, 0xd5, 0xd3, 0x3c, 0x0b, 0x87, 0x71, 0x27, 0x53, 0x95, 0x3c, - 0xc7, 0xb3, 0xb3, 0x4e, 0x59, 0x82, 0x39, 0x4c, 0xac, 0x18, 0x5d, 0xe2, 0xdd, 0x67, 0x87, 0x4c, - 0x06, 0x56, 0xf4, 0xf3, 0x7e, 0x86, 0x72, 0x5f, 0xfa, 0x15, 0xe2, 0x61, 0x85, 0x07, 0x65, 0x92, - 0x43, 0xfe, 0x9f, 0xa6, 0xe0, 0x4a, 0x85, 0x6d, 0x81, 0x7b, 0x31, 0x21, 0x49, 0x76, 0xc4, 0x25, - 0x98, 0x3d, 0xc6, 0xb6, 0x63, 0x58, 0x6c, 0xb6, 0x9f, 0x97, 0xbd, 0x47, 0xb4, 0x0c, 0x59, 0xc7, - 0x54, 0xbb, 0xce, 0xa1, 0xe5, 0x6d, 0x27, 0xfa, 0xcf, 0x7e, 0xfc, 0xca, 0xf4, 0x9b, 0xc7, 0xaf, - 0xcc, 0x8c, 0x8f, 0x5f, 0x99, 0xfd, 0x12, 0xf1, 0x2b, 0x7c, 0xef, 0xee, 0xdf, 0x09, 0x70, 0x75, - 0x48, 0x73, 0x49, 0x76, 0xce, 0xef, 0x40, 0x5e, 0xe3, 0x82, 0xc9, 0xfc, 0xc0, 0x36, 0x26, 0xeb, - 0x24, 0xdb, 0x1b, 0x42, 0x9f, 0xb3, 0xd3, 0x55, 0xf0, 0x8a, 0x5a, 0xdf, 0xe0, 0xca, 0x21, 0xbf, - 0x75, 0xe9, 0xbf, 0x03, 0x14, 0xab, 0x27, 0x6c, 0x51, 0xbe, 0xc1, 0xbc, 0x12, 0xf4, 0x18, 0xb2, - 0x5d, 0xdb, 0x3a, 0x36, 0xbc, 0x6a, 0x14, 0x22, 0xc1, 0x0b, 0x5e, 0x35, 0x06, 0xb8, 0x76, 0x39, - 0x87, 0xec, 0xf3, 0xa2, 0x26, 0xe4, 0x9e, 0x5a, 0x9a, 0xda, 0x7e, 0x6c, 0xb4, 0xbd, 0x81, 0xf6, - 0xfe, 0xf9, 0x82, 0x4a, 0x3e, 0xcf, 0xae, 0xea, 0x1e, 0x7a, 0x8d, 0xe0, 0x13, 0x51, 0x1d, 0xb2, - 0x35, 0xd7, 0xed, 0x92, 0x44, 0x3e, 0xfe, 0xee, 0x4c, 0x20, 0x94, 0xb0, 0x78, 0x11, 0xb7, 0x1e, - 0x3b, 0x6a, 0xc2, 0xc2, 0x13, 0x7a, 0x7e, 0xac, 0xd2, 0xb6, 0x7a, 0x7a, 0xc5, 0x32, 0x0f, 0x8c, - 0x16, 0x9f, 0x26, 0x6e, 0x4f, 0x20, 0xf3, 0x49, 0xa5, 0x21, 0x0f, 0x0b, 0x40, 0xeb, 0x90, 0x6d, - 0x3c, 0xe2, 0xc2, 0x98, 0x1b, 0x79, 0x6b, 0x02, 0x61, 0x8d, 0x47, 0xb2, 0xcf, 0x86, 0x36, 0x21, - 0xbf, 0xfe, 0x79, 0xcf, 0xc6, 0x5c, 0xca, 0xcc, 0xc8, 0xc8, 0x89, 0x41, 0x29, 0x94, 0x4b, 0x0e, - 0x33, 0xa3, 0x6f, 0x43, 0x91, 0xe8, 0xad, 0xa9, 0xee, 0xb7, 0x3d, 0x79, 0x59, 0x2a, 0xef, 0x6b, - 0x13, 0xc8, 0xf3, 0x39, 0xbd, 0x2d, 0x81, 0x01, 0x51, 0xcb, 0x32, 0xcc, 0x47, 0xda, 0x0b, 0x21, - 0xc8, 0x74, 0x49, 0xd3, 0x08, 0x34, 0x0c, 0x89, 0xfe, 0x46, 0xef, 0xc1, 0xac, 0x69, 0xe9, 0xd8, - 0xeb, 0xcc, 0xf3, 0xe5, 0x4b, 0x67, 0xa7, 0xab, 0x33, 0x3b, 0x96, 0xce, 0x7c, 0x1d, 0xfe, 0x4b, - 0x9e, 0x21, 0x99, 0xea, 0xfa, 0xf2, 0x75, 0xc8, 0x90, 0x26, 0x22, 0x36, 0x64, 0x5f, 0x75, 0xf0, - 0x9e, 0x6d, 0x70, 0x69, 0xde, 0xe3, 0xf2, 0x3f, 0x48, 0x41, 0xaa, 0xf1, 0x88, 0x78, 0xf3, 0xfb, - 0x3d, 0xed, 0x08, 0xbb, 0x3c, 0x9d, 0x3f, 0x51, 0x2f, 0xdf, 0xc6, 0x07, 0x06, 0x73, 0xba, 0x72, - 0x32, 0x7f, 0x42, 0xef, 0x00, 0xa8, 0x9a, 0x86, 0x1d, 0x47, 0xf1, 0x8e, 0x00, 0xe6, 0xe4, 0x1c, - 0xa3, 0x6c, 0xe1, 0x3e, 0x61, 0x73, 0xb0, 0x66, 0x63, 0xd7, 0x8b, 0xa1, 0x62, 0x4f, 0x84, 0xcd, - 0xc5, 0x9d, 0xae, 0xe2, 0x5a, 0x47, 0xd8, 0xa4, 0x4d, 0x9a, 0x23, 0x56, 0xa1, 0xd3, 0x6d, 0x12, - 0x02, 0x31, 0x68, 0xd8, 0xd4, 0x03, 0xeb, 0x93, 0x93, 0xfd, 0x67, 0x22, 0xd2, 0xc6, 0x2d, 0x83, - 0x1f, 0xa0, 0xcb, 0xc9, 0xfc, 0x89, 0x68, 0x49, 0xed, 0xb9, 0x87, 0xb4, 0x25, 0x72, 0x32, 0xfd, - 0x8d, 0x6e, 0x43, 0x91, 0x85, 0x5d, 0x2a, 0xd8, 0xd4, 0x14, 0x6a, 0x07, 0x73, 0x34, 0x79, 0x9e, - 0x91, 0xab, 0xa6, 0x46, 0xac, 0x1e, 0x7a, 0x04, 0x9c, 0xa0, 0x1c, 0x75, 0x1c, 0xa2, 0x53, 0x20, - 0xb9, 0xca, 0xc5, 0xb3, 0xd3, 0xd5, 0x7c, 0x83, 0x26, 0x6c, 0x6d, 0x37, 0xc8, 0x5c, 0xc2, 0x72, - 0x6d, 0x75, 0x9c, 0xba, 0xbe, 0xfc, 0x37, 0x05, 0x48, 0x3f, 0xa9, 0x34, 0x2e, 0xac, 0x32, 0xaf, - 0xa0, 0xe9, 0x50, 0x41, 0xef, 0x40, 0x71, 0xdf, 0x68, 0xb7, 0x0d, 0xb3, 0x45, 0xfc, 0xab, 0xef, - 0x60, 0xcd, 0x53, 0x58, 0x81, 0x93, 0x77, 0x19, 0x15, 0x5d, 0x87, 0xbc, 0x66, 0x63, 0x1d, 0x9b, - 0xae, 0xa1, 0xb6, 0x1d, 0xae, 0xb9, 0x30, 0x69, 0xf9, 0x2f, 0x0b, 0x30, 0x4d, 0x3b, 0x2b, 0x7a, - 0x1b, 0x72, 0x9a, 0x65, 0xba, 0xaa, 0x61, 0x72, 0xab, 0x93, 0x93, 0x03, 0xc2, 0xc8, 0xe2, 0xdd, - 0x80, 0x39, 0x55, 0xd3, 0xac, 0x9e, 0xe9, 0x2a, 0xa6, 0xda, 0xc1, 0xbc, 0x98, 0x79, 0x4e, 0xdb, - 0x51, 0x3b, 0x18, 0xad, 0x82, 0xf7, 0xe8, 0x9f, 0xec, 0xcc, 0xc9, 0xc0, 0x49, 0x5b, 0xb8, 0xbf, - 0x8c, 0x21, 0xe7, 0xf7, 0x6a, 0x52, 0xdf, 0x9e, 0xe3, 0x97, 0x80, 0xfe, 0x46, 0xef, 0xc3, 0xa5, - 0x57, 0x3d, 0xb5, 0x6d, 0x1c, 0xd0, 0xc5, 0x2f, 0x1a, 0xa5, 0x4e, 0x5f, 0xc6, 0x8a, 0x82, 0xfc, - 0x34, 0x2a, 0x81, 0xbe, 0xd3, 0x1b, 0x04, 0xe9, 0x60, 0x10, 0xb0, 0x90, 0x1d, 0xa9, 0x0f, 0x0b, - 0x32, 0x76, 0xed, 0x7e, 0x93, 0x1d, 0x76, 0xad, 0x1e, 0x63, 0xd3, 0x25, 0x75, 0xb7, 0xba, 0x98, - 0x05, 0x89, 0x78, 0x75, 0xf7, 0x09, 0xe8, 0x16, 0x14, 0x54, 0x97, 0x74, 0x37, 0x57, 0x31, 0x7b, - 0x9d, 0x7d, 0x6c, 0xb3, 0x50, 0x00, 0x79, 0x9e, 0x53, 0x77, 0x28, 0x91, 0x9f, 0xc8, 0xb0, 0xfb, - 0x0a, 0x5d, 0x27, 0xe2, 0xaf, 0x06, 0x4a, 0xaa, 0x12, 0x8a, 0x74, 0x0f, 0x2e, 0x93, 0x7a, 0x56, - 0x4d, 0xcd, 0xee, 0x77, 0x89, 0xe4, 0x67, 0xf4, 0xaf, 0x83, 0xc4, 0xd0, 0x3e, 0x0d, 0xdd, 0x9e, - 0x91, 0x7e, 0x3c, 0x03, 0xf3, 0xd5, 0x93, 0xae, 0x65, 0x27, 0xba, 0xaa, 0x53, 0x86, 0x59, 0x0e, - 0x7c, 0xc7, 0x6c, 0xc5, 0x0e, 0x58, 0x20, 0x6f, 0x1f, 0x9a, 0x33, 0xa2, 0x32, 0x00, 0x0b, 0xa8, - 0xa4, 0x71, 0x38, 0xe9, 0x0b, 0xec, 0x1c, 0x51, 0x36, 0x7a, 0xd8, 0x60, 0x07, 0xf2, 0x9d, 0x63, - 0x4d, 0x53, 0x0e, 0x8c, 0xb6, 0xcb, 0xe3, 0xd2, 0xe2, 0x43, 0xa8, 0xb7, 0x5f, 0x54, 0x2a, 0x8f, - 0x69, 0x26, 0x16, 0xcf, 0x15, 0x3c, 0xcb, 0x40, 0x24, 0xb0, 0xdf, 0xe8, 0x6b, 0xc0, 0x0f, 0xbe, - 0x28, 0x8e, 0x77, 0x8c, 0xad, 0x3c, 0x7f, 0x76, 0xba, 0x9a, 0x93, 0x29, 0xb5, 0xd1, 0x68, 0xca, - 0x39, 0x96, 0xa1, 0xe1, 0xb8, 0x17, 0x39, 0xea, 0x30, 0x3b, 0xf9, 0x51, 0x87, 0xbf, 0x26, 0xc0, - 0x15, 0xae, 0x23, 0x65, 0x9f, 0x86, 0x77, 0xab, 0x6d, 0xc3, 0xed, 0x2b, 0x47, 0xc7, 0x4b, 0x59, - 0xea, 0xf2, 0xfc, 0x62, 0xac, 0xae, 0x43, 0x4d, 0x5c, 0xf2, 0x34, 0xde, 0x7f, 0xca, 0x99, 0xb7, - 0x8e, 0xab, 0xa6, 0x6b, 0xf7, 0xcb, 0x57, 0xcf, 0x4e, 0x57, 0x17, 0x87, 0x53, 0x5f, 0xc8, 0x8b, - 0xce, 0x30, 0x0b, 0xaa, 0x01, 0x60, 0xbf, 0x8b, 0x51, 0x0b, 0x16, 0x3f, 0x75, 0xc5, 0xf6, 0x45, - 0x39, 0xc4, 0x8b, 0xee, 0x82, 0xc8, 0x8f, 0x96, 0x1c, 0x18, 0x6d, 0xac, 0x38, 0xc6, 0xe7, 0x98, - 0xda, 0xba, 0xb4, 0x5c, 0x60, 0x74, 0x22, 0xa2, 0x61, 0x7c, 0x8e, 0xd1, 0x03, 0xb8, 0x1c, 0xb4, - 0x80, 0xb2, 0x8f, 0xdb, 0xd6, 0x6b, 0x96, 0x3d, 0x4f, 0xb3, 0x23, 0x5f, 0xfb, 0x65, 0x92, 0x44, - 0x58, 0x96, 0xbf, 0x03, 0x4b, 0xa3, 0x2a, 0x1c, 0x1e, 0x10, 0x39, 0xb6, 0x5f, 0xf9, 0x41, 0x74, - 0xb1, 0x62, 0x82, 0x8e, 0xcb, 0x17, 0x2c, 0x3e, 0x4c, 0x7d, 0x20, 0x48, 0x7f, 0x3f, 0x05, 0xf3, - 0xe5, 0x5e, 0xfb, 0xe8, 0x59, 0xb7, 0xc1, 0x8e, 0xe5, 0xa3, 0xb7, 0x20, 0xa7, 0xab, 0xae, 0xca, - 0x0a, 0x29, 0xb0, 0x23, 0x66, 0x84, 0x40, 0x6b, 0x73, 0x07, 0x8a, 0xa1, 0x58, 0x10, 0x1e, 0xf1, - 0x4e, 0xab, 0x1d, 0x90, 0x69, 0x50, 0xfa, 0x07, 0xb0, 0x14, 0xca, 0x48, 0x57, 0x16, 0x14, 0x6c, - 0xba, 0xb6, 0x81, 0xd9, 0xea, 0x58, 0x5a, 0x0e, 0x05, 0xac, 0xd4, 0x49, 0x72, 0x95, 0xa5, 0xa2, - 0x26, 0xcc, 0x91, 0x8c, 0x7d, 0x85, 0x5a, 0x41, 0x6f, 0xf5, 0xf2, 0x41, 0x4c, 0xb5, 0x22, 0xe5, - 0x2e, 0x51, 0xfd, 0x54, 0x28, 0x0f, 0xfd, 0x29, 0xe7, 0x71, 0x40, 0x59, 0xfe, 0x04, 0xc4, 0xc1, - 0x0c, 0x61, 0x5d, 0x66, 0x98, 0x2e, 0x2f, 0x85, 0x75, 0x99, 0x0e, 0xe9, 0x69, 0x33, 0x93, 0xcd, - 0x88, 0xd3, 0xd2, 0x4f, 0xd2, 0x50, 0xf0, 0x7a, 0x66, 0x92, 0x6e, 0x75, 0x19, 0xa6, 0x49, 0x3f, - 0xf2, 0xc2, 0x2b, 0x6e, 0x8f, 0x19, 0x10, 0x3c, 0xc6, 0x9a, 0xf4, 0x2f, 0x0f, 0x01, 0x52, 0xd6, - 0x24, 0xcc, 0xcf, 0xf2, 0xff, 0x10, 0x20, 0x43, 0x3d, 0xd9, 0x07, 0x90, 0xa1, 0xe7, 0xf2, 0x85, - 0xb1, 0xe7, 0xf2, 0xbd, 0xed, 0x79, 0x92, 0xd5, 0x9f, 0x58, 0x52, 0x21, 0xef, 0xaa, 0x4c, 0xe3, - 0x7b, 0x2c, 0xdb, 0xc5, 0x3a, 0xf7, 0x14, 0xaf, 0x9f, 0xd7, 0x8e, 0x9e, 0x27, 0xec, 0xf1, 0xa1, - 0x6b, 0x90, 0x26, 0xb6, 0x6b, 0x96, 0x6d, 0xd5, 0x9f, 0x9d, 0xae, 0xa6, 0x89, 0xd5, 0x22, 0x34, - 0xb4, 0x06, 0xf9, 0xa8, 0x35, 0x21, 0xce, 0x06, 0x35, 0x87, 0x21, 0x4b, 0x00, 0x6d, 0x7f, 0x08, - 0x31, 0x94, 0xc4, 0xda, 0x92, 0x6f, 0xd2, 0xff, 0xba, 0xc0, 0x63, 0x12, 0x1b, 0x1a, 0x99, 0xb3, - 0xec, 0x24, 0x27, 0x95, 0x7b, 0x20, 0xda, 0xaa, 0xa9, 0x5b, 0x1d, 0xe3, 0x73, 0xcc, 0x50, 0xb9, - 0xc3, 0xb7, 0x2b, 0x8a, 0x3e, 0x9d, 0xc2, 0x67, 0x47, 0xfa, 0x6f, 0x02, 0x8f, 0x5f, 0xf4, 0x8b, - 0x91, 0xec, 0xa6, 0x72, 0x9e, 0x2f, 0xe9, 0x99, 0x07, 0x96, 0x17, 0x7e, 0xf1, 0xf6, 0xa8, 0x60, - 0xa3, 0xba, 0x79, 0x60, 0x79, 0xdb, 0x63, 0xb6, 0x47, 0x70, 0x96, 0x7f, 0x19, 0xa6, 0x69, 0xf2, - 0x1b, 0xf4, 0x0d, 0x3f, 0x66, 0x36, 0x25, 0xa6, 0xa5, 0x3f, 0x4a, 0xc1, 0xbb, 0xb4, 0xaa, 0x2f, - 0xb0, 0x6d, 0x1c, 0xf4, 0x77, 0x6d, 0xcb, 0xc5, 0x9a, 0x8b, 0xf5, 0x60, 0x55, 0x2a, 0xc1, 0x26, - 0xd0, 0x21, 0xc7, 0xf7, 0xf3, 0x0c, 0x9d, 0xdf, 0x9c, 0xf1, 0xe4, 0xcb, 0xa1, 0xd5, 0x2c, 0xdb, - 0x07, 0xac, 0x6f, 0xc8, 0x59, 0x26, 0xb9, 0xae, 0xa3, 0x75, 0xc8, 0x75, 0xbd, 0x6a, 0x5c, 0x28, - 0x64, 0xc4, 0xe7, 0x42, 0x5b, 0x50, 0xe4, 0x05, 0x55, 0xdb, 0xc6, 0x31, 0x56, 0x54, 0xf7, 0x22, - 0x43, 0x78, 0x9e, 0xf1, 0xae, 0x13, 0xd6, 0x75, 0x57, 0xfa, 0x1b, 0x19, 0xb8, 0x75, 0x8e, 0x8a, - 0x93, 0xec, 0x5e, 0xcb, 0x90, 0x3d, 0x26, 0x2f, 0x32, 0x78, 0xed, 0xb3, 0xb2, 0xff, 0x8c, 0xf6, - 0x23, 0xf3, 0xc0, 0x81, 0x6a, 0xb4, 0xc9, 0xbc, 0xc1, 0x82, 0xf4, 0x46, 0x87, 0x01, 0xc5, 0x07, - 0xbd, 0x85, 0x66, 0x8c, 0xc7, 0x54, 0x10, 0xcd, 0xe6, 0xa0, 0xef, 0x0a, 0xb0, 0xcc, 0x5e, 0xc8, - 0x22, 0xc5, 0x06, 0x5e, 0x93, 0xa1, 0xaf, 0xd9, 0x88, 0x79, 0xcd, 0x44, 0x3a, 0x2a, 0x85, 0xde, - 0xc5, 0x0b, 0xb2, 0x14, 0x7e, 0x5b, 0xb8, 0x28, 0xcb, 0xbf, 0x29, 0x40, 0x3e, 0x44, 0x40, 0xb7, - 0x87, 0xce, 0xe5, 0xe4, 0xcf, 0xe2, 0x0e, 0xe3, 0xdc, 0x1a, 0x3a, 0x8c, 0x53, 0xce, 0x7e, 0x71, - 0xba, 0x9a, 0x91, 0x59, 0xbc, 0xb7, 0x77, 0x2c, 0xe7, 0x46, 0x70, 0x0d, 0x4c, 0x7a, 0x20, 0x93, - 0x77, 0x0f, 0x0c, 0x85, 0x75, 0xaa, 0xb7, 0x8d, 0x44, 0x61, 0x1d, 0x79, 0x92, 0x7e, 0x90, 0x82, - 0x85, 0x75, 0x5d, 0x6f, 0x34, 0x28, 0x14, 0x48, 0x72, 0x8c, 0x21, 0xc8, 0x10, 0xff, 0x80, 0x9f, - 0x21, 0xa2, 0xbf, 0xd1, 0x7b, 0x80, 0x74, 0xc3, 0x61, 0xd7, 0x29, 0x38, 0x87, 0xaa, 0x6e, 0xbd, - 0x0e, 0x76, 0x8b, 0x17, 0xbc, 0x94, 0x86, 0x97, 0x80, 0x1a, 0x40, 0x9d, 0x56, 0xc5, 0x71, 0x55, - 0x7f, 0x35, 0xfc, 0xd6, 0x44, 0xa7, 0x52, 0x98, 0x37, 0xeb, 0x3f, 0xca, 0x39, 0x22, 0x87, 0xfe, - 0x24, 0x3e, 0x9a, 0x41, 0x1a, 0xc5, 0x55, 0x54, 0xc7, 0x3b, 0x4f, 0xc1, 0x2e, 0x72, 0x28, 0x30, - 0xfa, 0xba, 0xc3, 0x8e, 0x49, 0xb0, 0x30, 0xec, 0x40, 0x35, 0x49, 0xae, 0x65, 0xfe, 0x1d, 0x01, - 0x0a, 0x32, 0x3e, 0xb0, 0xb1, 0x73, 0x98, 0xa4, 0xce, 0x1f, 0xc3, 0x9c, 0xcd, 0xa4, 0x2a, 0x07, - 0xb6, 0xd5, 0xb9, 0x88, 0xad, 0xc8, 0x73, 0xc6, 0xc7, 0xb6, 0xd5, 0xe1, 0x26, 0xf9, 0x05, 0x14, - 0xfd, 0x32, 0x26, 0x59, 0xf9, 0xbf, 0x47, 0x4f, 0x5c, 0x32, 0xc1, 0x49, 0x6f, 0xdb, 0x26, 0xab, - 0x01, 0xba, 0x9e, 0x1d, 0x2e, 0x68, 0x92, 0x6a, 0xf8, 0xaf, 0x02, 0x14, 0x1a, 0xbd, 0x7d, 0x76, - 0x4d, 0x50, 0x72, 0x1a, 0xa8, 0x42, 0xae, 0x8d, 0x0f, 0x5c, 0xe5, 0x8d, 0x02, 0x88, 0xb3, 0x84, - 0x95, 0x86, 0x4f, 0x3f, 0x01, 0xb0, 0xe9, 0x91, 0x23, 0x2a, 0x27, 0x7d, 0x41, 0x39, 0x39, 0xca, - 0x4b, 0xc8, 0x64, 0xd6, 0x29, 0xfa, 0xd5, 0x4c, 0x72, 0x7e, 0x79, 0x19, 0xb1, 0x0e, 0xe9, 0x8b, - 0x58, 0x87, 0x05, 0xbe, 0x53, 0x1d, 0x6f, 0x21, 0x4a, 0xb0, 0x48, 0xdd, 0x32, 0x45, 0xed, 0x76, - 0xdb, 0x86, 0x87, 0x53, 0xa8, 0xfd, 0xc9, 0xc8, 0x0b, 0x34, 0x69, 0x9d, 0xa5, 0x50, 0x84, 0x82, - 0x7e, 0x43, 0x80, 0xb9, 0x03, 0x1b, 0xe3, 0xcf, 0xb1, 0x42, 0x4d, 0xf2, 0x64, 0x5b, 0xf1, 0x1b, - 0xa4, 0x0c, 0x5f, 0x7a, 0xab, 0x2e, 0xcf, 0x5e, 0xdc, 0x20, 0xef, 0x45, 0x3b, 0x20, 0x6a, 0x6d, - 0xb6, 0x79, 0xe8, 0x87, 0x05, 0xcc, 0x4c, 0x3e, 0x00, 0x8a, 0x8c, 0x39, 0x88, 0x0c, 0x78, 0x4e, - 0x06, 0x93, 0xaa, 0x2b, 0xfc, 0x6a, 0x36, 0xea, 0x6c, 0x47, 0xc3, 0x02, 0xc2, 0x47, 0xaf, 0x43, - 0x37, 0xba, 0x95, 0x64, 0xac, 0xea, 0xdc, 0x73, 0x27, 0xe3, 0xca, 0x7f, 0xe0, 0xe3, 0xea, 0x25, - 0x2c, 0xd0, 0x7e, 0x93, 0xf4, 0x09, 0x4a, 0xe9, 0x1f, 0xa5, 0x01, 0x85, 0x25, 0xff, 0xfc, 0xfa, - 0x5b, 0x2a, 0xb9, 0xfe, 0xb6, 0x09, 0x52, 0xc8, 0x19, 0x6a, 0xab, 0x8e, 0xab, 0xb0, 0xf8, 0x33, - 0x47, 0xe9, 0x62, 0x5b, 0x71, 0xb0, 0x66, 0xf1, 0x4b, 0x74, 0x04, 0x79, 0x25, 0xc8, 0xf9, 0x54, - 0x75, 0xdc, 0xe7, 0x2c, 0xdf, 0x2e, 0xb6, 0x1b, 0x34, 0x17, 0x7a, 0x04, 0x57, 0x3a, 0xea, 0x49, - 0x1c, 0xff, 0x34, 0xe5, 0x5f, 0xec, 0xa8, 0x27, 0x43, 0x4c, 0x1f, 0xc2, 0x72, 0x3c, 0x93, 0xe2, - 0x60, 0x6f, 0x7f, 0xea, 0x4a, 0x0c, 0x63, 0x03, 0xbb, 0x68, 0x1d, 0x20, 0x00, 0x11, 0x7c, 0x8e, - 0x9e, 0x04, 0x43, 0xe4, 0x7c, 0x0c, 0x21, 0x7d, 0x4f, 0x80, 0xc2, 0xb6, 0xd1, 0xb2, 0xd5, 0x44, - 0xaf, 0xa8, 0x41, 0x1f, 0x46, 0x37, 0xf4, 0xf2, 0x0f, 0x97, 0xe3, 0x02, 0x36, 0x58, 0x0e, 0x6f, - 0xd1, 0x8e, 0x33, 0x90, 0xa9, 0xcf, 0x2f, 0x51, 0x92, 0x36, 0xff, 0x3f, 0x5c, 0x83, 0x39, 0x5e, - 0xee, 0x3d, 0xd3, 0xb0, 0x4c, 0xf4, 0x00, 0xd2, 0x2d, 0xbe, 0xb4, 0x9d, 0x8f, 0x5d, 0xd1, 0x0b, - 0x2e, 0x80, 0xab, 0x4d, 0xc9, 0x24, 0x2f, 0x61, 0xe9, 0xf6, 0xdc, 0x18, 0x40, 0x11, 0xc4, 0x30, - 0x87, 0x59, 0xba, 0x3d, 0x17, 0x35, 0xa0, 0xa8, 0x05, 0xb7, 0x4e, 0x29, 0x84, 0x3d, 0x3d, 0x72, - 0x99, 0x2b, 0xf6, 0xfe, 0xaf, 0xda, 0x94, 0x5c, 0xd0, 0x22, 0x09, 0xa8, 0x12, 0xbe, 0xec, 0x28, - 0x33, 0x14, 0x20, 0x15, 0x1c, 0x95, 0x8d, 0x5e, 0xb4, 0x54, 0x9b, 0x0a, 0xdd, 0x89, 0x84, 0x3e, - 0x84, 0x19, 0x9d, 0x5e, 0xab, 0xc3, 0x8d, 0x66, 0x5c, 0x43, 0x47, 0x6e, 0x2f, 0xaa, 0x4d, 0xc9, - 0x9c, 0x03, 0x6d, 0xc2, 0x1c, 0xfb, 0xc5, 0x5c, 0x7a, 0x6e, 0xea, 0x6e, 0x8d, 0x96, 0x10, 0x72, - 0x36, 0x6a, 0x53, 0x72, 0x5e, 0x0f, 0xa8, 0xe8, 0x09, 0xe4, 0xb5, 0x36, 0x56, 0x6d, 0x2e, 0xea, - 0xf6, 0xc8, 0x53, 0x5d, 0x43, 0x57, 0xf1, 0xd4, 0xa6, 0x64, 0xd0, 0x7c, 0x22, 0x29, 0x94, 0x4d, - 0x6f, 0x64, 0xe1, 0x92, 0xde, 0x1f, 0x59, 0xa8, 0xe1, 0xeb, 0x6d, 0x6a, 0xd4, 0x09, 0xf1, 0xa9, - 0xe8, 0xeb, 0x90, 0x71, 0x34, 0xd5, 0xe4, 0x76, 0x77, 0x65, 0xc4, 0x95, 0x19, 0x01, 0x33, 0xcd, - 0x8d, 0x3e, 0x62, 0x68, 0xc0, 0x3d, 0xf1, 0xd6, 0x32, 0xe3, 0x74, 0x1a, 0x39, 0x9a, 0x4d, 0x74, - 0x8a, 0x29, 0x81, 0xe8, 0x41, 0x25, 0xf0, 0x47, 0xa1, 0xe7, 0x25, 0xe9, 0xe2, 0x65, 0xbc, 0x1e, - 0x86, 0xce, 0xb7, 0xd6, 0xe8, 0xf9, 0x6f, 0x8f, 0x88, 0xb6, 0x61, 0x9e, 0x09, 0xea, 0xb1, 0xa3, - 0x97, 0x4b, 0x6b, 0x23, 0x77, 0x29, 0x63, 0x0e, 0x7f, 0xd6, 0xa6, 0xe4, 0x39, 0x35, 0x44, 0x0e, - 0xca, 0xd5, 0xc1, 0x76, 0x8b, 0xad, 0x92, 0x8e, 0x29, 0x57, 0x38, 0xf4, 0xcb, 0x2f, 0x17, 0x25, - 0xa2, 0x5f, 0x83, 0x4b, 0x4c, 0x90, 0xcb, 0x23, 0x5a, 0x78, 0x60, 0xc4, 0x3b, 0x23, 0x77, 0x18, - 0x47, 0x1e, 0x97, 0xac, 0x4d, 0xc9, 0x48, 0x1d, 0x4a, 0x44, 0x1a, 0x5c, 0x66, 0x6f, 0xe0, 0xe7, - 0xed, 0x6c, 0x7e, 0x44, 0x6c, 0xe9, 0x26, 0x7d, 0xc5, 0x7b, 0xa3, 0x5e, 0x11, 0x7b, 0x0c, 0xb0, - 0x36, 0x25, 0x2f, 0xaa, 0xc3, 0xa9, 0x41, 0x35, 0x6c, 0x7e, 0xb2, 0x89, 0x77, 0xb7, 0xf7, 0xc6, - 0x57, 0x23, 0xee, 0x44, 0x98, 0x5f, 0x8d, 0x48, 0x22, 0x69, 0x40, 0xff, 0x5c, 0x37, 0xed, 0x4c, - 0x73, 0x23, 0x1b, 0x30, 0xe6, 0xf8, 0x13, 0x69, 0xc0, 0xc3, 0x10, 0x19, 0x95, 0x20, 0xd5, 0xd2, - 0x96, 0xe6, 0x47, 0xce, 0x0f, 0xfe, 0x11, 0x9f, 0xda, 0x94, 0x9c, 0x6a, 0x69, 0xe8, 0x13, 0xc8, - 0xb2, 0xf3, 0x1a, 0x27, 0xe6, 0x52, 0x61, 0xa4, 0xc1, 0x8d, 0x9e, 0x7a, 0xa9, 0x4d, 0xc9, 0xf4, - 0x88, 0x08, 0xef, 0xc8, 0x3c, 0x16, 0x9f, 0x8a, 0x28, 0x8d, 0x39, 0xa6, 0x39, 0x70, 0x22, 0x82, - 0x74, 0x18, 0xdb, 0x27, 0xa2, 0x5d, 0x28, 0xd8, 0x2c, 0x5a, 0xd1, 0x8b, 0x2d, 0x16, 0x47, 0xee, - 0xe1, 0xc7, 0x85, 0x17, 0xd7, 0xe8, 0x3a, 0x4c, 0x88, 0x4e, 0xda, 0x2e, 0x2a, 0x91, 0xb7, 0xdd, - 0xc2, 0xc8, 0xb6, 0x1b, 0x19, 0xea, 0x4a, 0xda, 0xce, 0x1e, 0x4a, 0x44, 0xdf, 0x84, 0x69, 0x36, - 0x4e, 0x10, 0x15, 0x19, 0x17, 0x96, 0x32, 0x30, 0x44, 0x58, 0x7e, 0x62, 0xbd, 0x5c, 0x1e, 0xb2, - 0xa7, 0xb4, 0xad, 0xd6, 0xd2, 0xe2, 0x48, 0xeb, 0x35, 0x1c, 0x7c, 0x48, 0xac, 0x97, 0x1b, 0x50, - 0x49, 0x07, 0xb2, 0x59, 0x0a, 0x1f, 0x62, 0x97, 0x46, 0x76, 0xa0, 0x98, 0x48, 0xbe, 0x1a, 0x3d, - 0x4c, 0x11, 0x90, 0x7d, 0xc3, 0xea, 0x60, 0x85, 0x1a, 0xc5, 0xcb, 0xe3, 0x0d, 0x6b, 0xe4, 0x1e, - 0x23, 0xdf, 0xb0, 0x32, 0x2a, 0x7a, 0x01, 0x22, 0xbf, 0x4c, 0x43, 0xf1, 0x22, 0x4b, 0x96, 0xae, - 0x50, 0x79, 0xf7, 0x62, 0x27, 0xc4, 0xb8, 0xa0, 0xa3, 0x1a, 0x71, 0x98, 0xa3, 0x29, 0xe8, 0x53, - 0x58, 0xa0, 0xf2, 0x14, 0x2d, 0xb8, 0xff, 0x64, 0x69, 0x69, 0xe8, 0x36, 0x8d, 0xd1, 0x57, 0xa5, - 0x78, 0x92, 0x45, 0x6d, 0x20, 0x89, 0x8c, 0x07, 0xc3, 0x34, 0x5c, 0x3a, 0x77, 0x2f, 0x8f, 0x1c, - 0x0f, 0xd1, 0xbb, 0x1f, 0xc9, 0x78, 0x30, 0x18, 0x85, 0x74, 0xe3, 0x01, 0x8b, 0xf7, 0xf6, 0xc8, - 0x6e, 0x3c, 0xc2, 0xd8, 0xcd, 0xbb, 0x11, 0x3b, 0xb7, 0x01, 0xc0, 0x60, 0x12, 0xf5, 0xfc, 0x56, - 0x46, 0x3a, 0x00, 0x83, 0x91, 0x76, 0xc4, 0x01, 0x68, 0x7b, 0x34, 0xe2, 0x00, 0xb0, 0x35, 0xfd, - 0xa5, 0xeb, 0xa3, 0x27, 0xab, 0xf0, 0xae, 0x1f, 0x9d, 0xac, 0x28, 0x01, 0xad, 0x43, 0x8e, 0xf8, - 0xac, 0x7d, 0x3a, 0xc2, 0x6f, 0x8c, 0x84, 0xa8, 0x03, 0x47, 0x70, 0x6a, 0x53, 0x72, 0xf6, 0x15, - 0x27, 0x91, 0x5e, 0xc5, 0x44, 0xf0, 0xb1, 0x7d, 0x7f, 0x64, 0xaf, 0x1a, 0x3e, 0x7b, 0x41, 0x7a, - 0xd5, 0xab, 0x80, 0x1a, 0x4c, 0x79, 0x0e, 0x5b, 0xad, 0x5f, 0x7a, 0x77, 0xfc, 0x94, 0x17, 0xdd, - 0x5b, 0xf0, 0xa7, 0x3c, 0x4e, 0x66, 0x53, 0x9e, 0xae, 0x38, 0x0e, 0xdd, 0xc0, 0x5f, 0xba, 0x35, - 0x66, 0xca, 0x1b, 0x58, 0xbf, 0x63, 0x53, 0x9e, 0xde, 0x60, 0x9c, 0xc4, 0xfb, 0xb3, 0xbd, 0xcb, - 0x63, 0x38, 0x7a, 0xb9, 0x33, 0xd2, 0xfb, 0x8b, 0xbd, 0xdd, 0x86, 0x78, 0x7f, 0x76, 0x24, 0x01, - 0xfd, 0x12, 0xcc, 0xf2, 0xf5, 0x92, 0xa5, 0xbb, 0x63, 0xfc, 0xe1, 0xf0, 0x12, 0x17, 0xe9, 0x8e, - 0x9c, 0x87, 0x19, 0x07, 0xb6, 0x4e, 0xc3, 0x8c, 0xdf, 0xbd, 0x31, 0xc6, 0x61, 0x68, 0xa9, 0x88, - 0x19, 0x87, 0x80, 0x4c, 0x4a, 0xe3, 0xb0, 0x35, 0x86, 0xa5, 0x5f, 0x18, 0x59, 0x9a, 0xe8, 0x62, - 0x0b, 0x29, 0x0d, 0xe7, 0xa1, 0x93, 0x05, 0x9d, 0xab, 0x99, 0x76, 0xbe, 0x36, 0x7a, 0xb2, 0x18, - 0x44, 0xad, 0x35, 0x6f, 0x37, 0x84, 0x69, 0xe5, 0xaf, 0x08, 0x70, 0x9d, 0xf5, 0x01, 0xba, 0x16, - 0xdc, 0x57, 0xfc, 0xa5, 0xfc, 0x10, 0x24, 0x7f, 0x40, 0xc5, 0x7f, 0xf3, 0xe2, 0x2b, 0xcf, 0xde, - 0x1b, 0xdf, 0x51, 0xc7, 0xe5, 0x23, 0xca, 0xe8, 0x30, 0xf0, 0xb2, 0xf4, 0x70, 0xa4, 0x32, 0xa2, - 0x80, 0x8b, 0x28, 0x83, 0xf3, 0x94, 0x67, 0xf9, 0x6e, 0xa7, 0x7f, 0xb2, 0xb1, 0x28, 0x8a, 0x9b, - 0x99, 0xec, 0x55, 0x71, 0x69, 0x33, 0x93, 0xbd, 0x26, 0x2e, 0x6f, 0x66, 0xb2, 0x6f, 0x89, 0x6f, - 0x6f, 0x66, 0xb2, 0xab, 0xe2, 0xf5, 0xcd, 0x4c, 0x56, 0x12, 0x6f, 0x4a, 0xbf, 0x77, 0x0d, 0xe6, - 0x3d, 0xec, 0xc3, 0x70, 0xcd, 0xc3, 0x30, 0xae, 0x59, 0x19, 0x85, 0x6b, 0x38, 0x5a, 0xe2, 0xc0, - 0xe6, 0x61, 0x18, 0xd8, 0xac, 0x8c, 0x02, 0x36, 0x01, 0x0f, 0x41, 0x36, 0xcd, 0x51, 0xc8, 0xe6, - 0xde, 0x04, 0xc8, 0xc6, 0x17, 0x35, 0x08, 0x6d, 0x36, 0x86, 0xa1, 0xcd, 0xbb, 0xe3, 0xa1, 0x8d, - 0x2f, 0x2a, 0x84, 0x6d, 0x3e, 0x1a, 0xc0, 0x36, 0x37, 0xc6, 0x60, 0x1b, 0x9f, 0xdf, 0x03, 0x37, - 0x5b, 0xb1, 0xe0, 0xe6, 0xf6, 0x79, 0xe0, 0xc6, 0x97, 0x13, 0x41, 0x37, 0xb5, 0x38, 0x74, 0x73, - 0xeb, 0x1c, 0x74, 0xe3, 0x8b, 0x0a, 0xc3, 0x9b, 0xad, 0x58, 0x78, 0x73, 0xfb, 0x3c, 0x78, 0x13, - 0x14, 0x2b, 0x8c, 0x6f, 0xbe, 0x11, 0xc1, 0x37, 0xab, 0x23, 0xf1, 0x8d, 0xcf, 0xcd, 0x00, 0xce, - 0xc7, 0x83, 0x00, 0xe7, 0xc6, 0x18, 0x80, 0x13, 0x28, 0x96, 0x23, 0x9c, 0x5a, 0x1c, 0xc2, 0xb9, - 0x75, 0x0e, 0xc2, 0x09, 0x74, 0x11, 0x82, 0x38, 0x3b, 0xf1, 0x10, 0xe7, 0xce, 0xb9, 0x10, 0xc7, - 0x97, 0x16, 0xc5, 0x38, 0xb5, 0x38, 0x8c, 0x73, 0xeb, 0x1c, 0x8c, 0x33, 0x50, 0x32, 0x06, 0x72, + 0x19, 0x35, 0xe1, 0x36, 0x36, 0xd5, 0xfd, 0x36, 0xa6, 0x52, 0x94, 0x7d, 0xab, 0x67, 0xea, 0x8a, + 0xe1, 0x62, 0x5b, 0x75, 0x2d, 0x5b, 0xb1, 0xba, 0xae, 0xd1, 0x31, 0xbe, 0xa0, 0x8e, 0x3d, 0xef, + 0x6a, 0x6f, 0xb3, 0xec, 0x84, 0xb9, 0x4c, 0x32, 0xd7, 0x79, 0xde, 0xa7, 0xa1, 0xac, 0xa8, 0x04, + 0x8b, 0x46, 0xcb, 0xb4, 0x6c, 0xac, 0xb4, 0x34, 0xc5, 0x3d, 0xb4, 0xb1, 0x73, 0x68, 0xb5, 0xbd, + 0x09, 0x69, 0x81, 0x25, 0x3d, 0xd6, 0x9a, 0x5e, 0x82, 0xf4, 0x39, 0x2c, 0x46, 0xb4, 0x94, 0x64, + 0x13, 0xfc, 0x0f, 0x01, 0xf2, 0x0d, 0x4d, 0x35, 0x93, 0xd4, 0xfd, 0xa7, 0x90, 0x77, 0x34, 0xd5, + 0x54, 0x0e, 0x2c, 0xbb, 0xa3, 0xba, 0xb4, 0x5e, 0x85, 0x88, 0xee, 0x7d, 0xff, 0x5e, 0x53, 0xcd, + 0x47, 0x34, 0x93, 0x0c, 0x8e, 0xff, 0x7b, 0xd0, 0x7f, 0x9d, 0xfe, 0xea, 0xfe, 0x2b, 0x1b, 0xde, + 0x9b, 0x99, 0x6c, 0x5a, 0xcc, 0x48, 0x7f, 0x2a, 0xc0, 0x1c, 0xab, 0x72, 0x92, 0xc3, 0xfb, 0x9b, + 0x90, 0xb1, 0xad, 0x57, 0x6c, 0x78, 0xe7, 0x1f, 0xbc, 0x11, 0x23, 0x62, 0x0b, 0xf7, 0xc3, 0xf3, + 0x27, 0xcd, 0x8e, 0xca, 0xc0, 0xbd, 0x54, 0x85, 0x72, 0xa7, 0x27, 0xe5, 0x06, 0xc6, 0x25, 0x13, + 0x19, 0xb7, 0xa1, 0xb8, 0xaf, 0xba, 0xda, 0xa1, 0x62, 0xf3, 0x42, 0x92, 0xb9, 0x36, 0x7d, 0x67, + 0x4e, 0x2e, 0x50, 0xb2, 0x57, 0x74, 0x87, 0xd4, 0x9c, 0x8d, 0x37, 0x07, 0xff, 0x19, 0x6b, 0xf3, + 0xff, 0x23, 0xf0, 0x31, 0xe4, 0xd5, 0xfc, 0xcf, 0x5a, 0xd3, 0xff, 0x20, 0x05, 0x57, 0x2b, 0x87, + 0x58, 0x3b, 0xaa, 0x58, 0xa6, 0x63, 0x38, 0x2e, 0xd1, 0x5d, 0x92, 0xed, 0xff, 0x06, 0xe4, 0x5e, + 0x19, 0xee, 0xa1, 0xa2, 0x1b, 0x07, 0x07, 0xd4, 0xda, 0x66, 0xe5, 0x2c, 0x21, 0x6c, 0x18, 0x07, + 0x07, 0xe8, 0x21, 0x64, 0x3a, 0x96, 0xce, 0x9c, 0xf9, 0xc2, 0x83, 0xd5, 0x18, 0xf1, 0xb4, 0x68, + 0x4e, 0xaf, 0xb3, 0x6d, 0xe9, 0x58, 0xa6, 0x99, 0xd1, 0x0a, 0x80, 0x46, 0xa8, 0x5d, 0xcb, 0x30, + 0x5d, 0x6e, 0x1c, 0x43, 0x14, 0x54, 0x83, 0x9c, 0x8b, 0xed, 0x8e, 0x61, 0xaa, 0x2e, 0x5e, 0x9a, + 0xa6, 0xca, 0x7b, 0x27, 0xb6, 0xe0, 0xdd, 0xb6, 0xa1, 0xa9, 0x1b, 0xd8, 0xd1, 0x6c, 0xa3, 0xeb, + 0x5a, 0x36, 0xd7, 0x62, 0xc0, 0x2c, 0xfd, 0xd5, 0x0c, 0x2c, 0x0d, 0xeb, 0x26, 0xc9, 0x1e, 0xb2, + 0x0b, 0x33, 0x36, 0x76, 0x7a, 0x6d, 0x97, 0xf7, 0x91, 0x07, 0xa3, 0x54, 0x10, 0x53, 0x02, 0xba, + 0x74, 0xd1, 0x76, 0x79, 0xb1, 0xb9, 0x9c, 0xe5, 0x7f, 0x2e, 0xc0, 0x0c, 0x4b, 0x40, 0xf7, 0x21, + 0x6b, 0x93, 0x89, 0x41, 0x31, 0x74, 0x5a, 0xc6, 0x74, 0xf9, 0xca, 0xd9, 0xe9, 0xea, 0x2c, 0x9d, + 0x2c, 0xea, 0x1b, 0x5f, 0x06, 0x3f, 0xe5, 0x59, 0x9a, 0xaf, 0xae, 0x93, 0xd6, 0x72, 0x5c, 0xd5, + 0x76, 0xe9, 0xa2, 0x52, 0x8a, 0x21, 0x24, 0x4a, 0xd8, 0xc2, 0x7d, 0xb4, 0x09, 0x33, 0x8e, 0xab, + 0xba, 0x3d, 0x87, 0xb7, 0xd7, 0x85, 0x0a, 0xdb, 0xa0, 0x9c, 0x32, 0x97, 0x40, 0xdc, 0x2d, 0x1d, + 0xbb, 0xaa, 0xd1, 0xa6, 0x0d, 0x98, 0x93, 0xf9, 0x93, 0xf4, 0x5b, 0x02, 0xcc, 0xb0, 0xac, 0xe8, + 0x2a, 0x2c, 0xca, 0xeb, 0x3b, 0x8f, 0xab, 0x4a, 0x7d, 0x67, 0xa3, 0xda, 0xac, 0xca, 0xdb, 0xf5, + 0x9d, 0xf5, 0x66, 0x55, 0x9c, 0x42, 0x57, 0x00, 0x79, 0x09, 0x95, 0xa7, 0x3b, 0x8d, 0x7a, 0xa3, + 0x59, 0xdd, 0x69, 0x8a, 0x02, 0x5d, 0x53, 0xa1, 0xf4, 0x10, 0x35, 0x85, 0xde, 0x81, 0xeb, 0x83, + 0x54, 0xa5, 0xd1, 0x5c, 0x6f, 0x36, 0x94, 0x6a, 0xa3, 0x59, 0xdf, 0x5e, 0x6f, 0x56, 0x37, 0xc4, + 0xf4, 0x98, 0x5c, 0xe4, 0x25, 0xb2, 0x5c, 0xad, 0x34, 0xc5, 0x8c, 0xe4, 0xc2, 0x65, 0x19, 0x6b, + 0x56, 0xa7, 0xdb, 0x73, 0x31, 0x29, 0xa5, 0x93, 0xe4, 0x48, 0xb9, 0x0a, 0xb3, 0xba, 0xdd, 0x57, + 0xec, 0x9e, 0xc9, 0xc7, 0xc9, 0x8c, 0x6e, 0xf7, 0xe5, 0x9e, 0x29, 0xfd, 0x7d, 0x01, 0xae, 0x0c, + 0xbe, 0x36, 0xc9, 0x4e, 0xf8, 0x0c, 0xf2, 0xaa, 0xae, 0x63, 0x5d, 0xd1, 0x71, 0xdb, 0x55, 0xb9, + 0x4b, 0x74, 0x2f, 0x24, 0x89, 0x2f, 0x05, 0x96, 0xfc, 0xa5, 0xc0, 0xed, 0xe7, 0x95, 0x0a, 0x2d, + 0xc8, 0x06, 0xe1, 0xf0, 0xcc, 0x0f, 0x15, 0x42, 0x29, 0xd2, 0x0f, 0x32, 0x30, 0x5f, 0x35, 0xf5, + 0xe6, 0x49, 0xa2, 0x73, 0xc9, 0x15, 0x98, 0xd1, 0xac, 0x4e, 0xc7, 0x70, 0x3d, 0x05, 0xb1, 0x27, + 0xf4, 0x8b, 0x21, 0x57, 0x36, 0x3d, 0x81, 0x43, 0x17, 0x38, 0xb1, 0xe8, 0xd7, 0xe0, 0x2a, 0xb1, + 0x9a, 0xb6, 0xa9, 0xb6, 0x15, 0x26, 0x4d, 0x71, 0x6d, 0xa3, 0xd5, 0xc2, 0x36, 0x5f, 0x7e, 0xbc, + 0x13, 0x53, 0xce, 0x3a, 0xe7, 0xa8, 0x50, 0x86, 0x26, 0xcb, 0x2f, 0x5f, 0x36, 0xe2, 0xc8, 0xe8, + 0x13, 0x00, 0x32, 0x15, 0xd1, 0x25, 0x4d, 0x87, 0xdb, 0xa3, 0x51, 0x6b, 0x9a, 0x9e, 0x09, 0x22, + 0x0c, 0xe4, 0xd9, 0x41, 0xcf, 0x40, 0x34, 0x4c, 0xe5, 0xa0, 0x6d, 0xb4, 0x0e, 0x5d, 0xe5, 0x95, + 0x6d, 0xb8, 0xd8, 0x59, 0x5a, 0xa0, 0x32, 0xe2, 0x9a, 0xba, 0xc1, 0x97, 0x66, 0xf5, 0x17, 0x24, + 0x27, 0x97, 0x56, 0x30, 0xcc, 0x47, 0x94, 0x9f, 0x12, 0x1d, 0xb4, 0x46, 0xa0, 0xd0, 0xcb, 0x9e, + 0x61, 0x63, 0xe5, 0x7e, 0x57, 0xa3, 0xeb, 0x20, 0xd9, 0x72, 0xe1, 0xec, 0x74, 0x15, 0x64, 0x46, + 0xbe, 0xbf, 0x5b, 0x21, 0xd0, 0x88, 0xfd, 0xee, 0x6a, 0x44, 0xed, 0x5d, 0xcb, 0x70, 0x2c, 0x73, + 0x29, 0xc7, 0xd4, 0xce, 0x9e, 0xd0, 0x5d, 0x10, 0xdd, 0x13, 0x53, 0x39, 0xc4, 0xaa, 0xed, 0xee, + 0x63, 0xd5, 0x25, 0xf3, 0x33, 0xd0, 0x1c, 0x45, 0xf7, 0xc4, 0xac, 0x85, 0xc8, 0x9b, 0x99, 0xec, + 0xac, 0x98, 0xdd, 0xcc, 0x64, 0xb3, 0x62, 0x4e, 0xfa, 0x8f, 0x02, 0x14, 0xbc, 0xbe, 0x91, 0x64, + 0x37, 0xbe, 0x03, 0xa2, 0x65, 0x62, 0xa5, 0x7b, 0xa8, 0x3a, 0x98, 0xb7, 0x25, 0x9f, 0x1d, 0x0a, + 0x96, 0x89, 0x77, 0x09, 0x99, 0xb5, 0x0c, 0xda, 0x85, 0x05, 0xc7, 0x55, 0x5b, 0x86, 0xd9, 0x52, + 0xfc, 0x25, 0x7e, 0xea, 0x59, 0x4c, 0x88, 0x04, 0x44, 0xce, 0xed, 0xd3, 0x23, 0x2e, 0xc5, 0x1f, + 0x08, 0xb0, 0xb0, 0xae, 0x77, 0x0c, 0xb3, 0xd1, 0x6d, 0x1b, 0x89, 0x2e, 0x30, 0xbc, 0x03, 0x39, + 0x87, 0xc8, 0x0c, 0xac, 0x73, 0x00, 0x17, 0xb3, 0x34, 0x85, 0x98, 0xe9, 0x27, 0x50, 0xc4, 0x27, + 0x5d, 0x83, 0xed, 0x2b, 0x30, 0x94, 0x93, 0x99, 0xbc, 0x6e, 0x85, 0x80, 0x97, 0x24, 0xf1, 0x3a, + 0x7d, 0x06, 0x28, 0x5c, 0xa5, 0x24, 0x81, 0xc6, 0x67, 0xb0, 0x48, 0x45, 0xef, 0x99, 0x4e, 0xc2, + 0xfa, 0x92, 0x7e, 0x05, 0x2e, 0x45, 0x45, 0x27, 0x59, 0xee, 0x17, 0xbc, 0x95, 0xb7, 0xb1, 0x9d, + 0x28, 0x42, 0xf5, 0x75, 0xcd, 0x05, 0x27, 0x59, 0xe6, 0x5f, 0x17, 0xe0, 0x1a, 0x95, 0x4d, 0xb7, + 0x5e, 0x0e, 0xb0, 0xfd, 0x04, 0xab, 0x4e, 0xa2, 0xf0, 0xfa, 0x6d, 0x98, 0x61, 0x30, 0x99, 0xf6, + 0xcf, 0xe9, 0x72, 0x9e, 0xb8, 0x19, 0x0d, 0xd7, 0xb2, 0x89, 0x9b, 0xc1, 0x93, 0x24, 0x15, 0x96, + 0xe3, 0x4a, 0x91, 0x64, 0x4d, 0xff, 0xa6, 0x00, 0x0b, 0xdc, 0xc3, 0x23, 0x5d, 0xb9, 0x72, 0x48, + 0x1c, 0x1c, 0x54, 0x85, 0xbc, 0x46, 0x7f, 0x29, 0x6e, 0xbf, 0x8b, 0xa9, 0xfc, 0xc2, 0x38, 0xe7, + 0x90, 0xb1, 0x35, 0xfb, 0x5d, 0x4c, 0x3c, 0x4c, 0xef, 0x37, 0x51, 0x54, 0xa8, 0x92, 0x63, 0xdd, + 0x4b, 0x3a, 0x8e, 0x68, 0x5e, 0xcf, 0x4f, 0xe3, 0x3a, 0xf8, 0xbd, 0x34, 0x57, 0x02, 0x7b, 0x07, + 0xcf, 0x9e, 0xa8, 0x43, 0xf1, 0x39, 0x5c, 0x09, 0x2d, 0x9d, 0x87, 0x2b, 0x9e, 0xba, 0x40, 0xc5, + 0x43, 0xcb, 0xef, 0x01, 0x15, 0x7d, 0x06, 0xa1, 0x05, 0x76, 0x85, 0xd5, 0xc9, 0x83, 0x2a, 0x17, + 0x51, 0xc7, 0x42, 0x20, 0x85, 0xd1, 0x1d, 0x54, 0x81, 0x2c, 0x3e, 0xe9, 0x2a, 0x3a, 0x76, 0x34, + 0x6e, 0xb8, 0xa4, 0x38, 0x81, 0xa4, 0x28, 0x43, 0xce, 0xfb, 0x2c, 0x3e, 0xe9, 0x12, 0x22, 0xda, + 0x23, 0xf3, 0xa6, 0x37, 0xaf, 0xd3, 0x62, 0x3b, 0xe7, 0x63, 0x81, 0xa0, 0xa7, 0x70, 0x71, 0x45, + 0x7f, 0x4a, 0x67, 0x22, 0xa4, 0x1f, 0x0a, 0xf0, 0x46, 0x6c, 0xab, 0x25, 0x39, 0x91, 0x7d, 0x02, + 0x19, 0x5a, 0xf9, 0xd4, 0x05, 0x2b, 0x4f, 0xb9, 0xa4, 0xef, 0xa6, 0xf8, 0x18, 0x97, 0x71, 0xdb, + 0x22, 0x8a, 0x4d, 0x7c, 0x09, 0xed, 0x29, 0xcc, 0x1f, 0x5b, 0x2e, 0xb6, 0xfd, 0x66, 0x4f, 0x5d, + 0xb8, 0xd9, 0xe7, 0xa8, 0x00, 0xaf, 0xc5, 0x9f, 0xc3, 0x82, 0x69, 0x99, 0x4a, 0x54, 0xe8, 0xc5, + 0xfb, 0x52, 0xd1, 0xb4, 0xcc, 0xe7, 0x21, 0xb9, 0xbe, 0x9d, 0x19, 0xd0, 0x44, 0x92, 0x76, 0xe6, + 0x7b, 0x02, 0x2c, 0xfa, 0x9e, 0x4e, 0xc2, 0xee, 0xee, 0x37, 0x21, 0x6d, 0x5a, 0xaf, 0x2e, 0xb2, + 0x44, 0x49, 0xf2, 0x93, 0x59, 0x2f, 0x5a, 0xa2, 0x24, 0xeb, 0xfb, 0x2f, 0x52, 0x90, 0x7b, 0x5c, + 0x49, 0xb2, 0x96, 0x9f, 0xf0, 0xe5, 0x6f, 0xd6, 0xde, 0x71, 0xbd, 0xdd, 0x7f, 0x5f, 0xe9, 0x71, + 0x65, 0x0b, 0xf7, 0xbd, 0xde, 0x4e, 0xb8, 0xd0, 0x3a, 0xe4, 0xa2, 0x0b, 0xa5, 0x13, 0x6a, 0x2a, + 0xe0, 0x5a, 0xc6, 0x30, 0x4d, 0xe5, 0x7a, 0xa1, 0x16, 0x42, 0x4c, 0xa8, 0x05, 0x79, 0x8d, 0xef, + 0x29, 0xa6, 0x2e, 0xf2, 0x9a, 0x90, 0x8b, 0x38, 0x2d, 0xce, 0x48, 0xcf, 0x00, 0x48, 0x75, 0x92, + 0x6c, 0x92, 0xdf, 0x48, 0x43, 0x61, 0xb7, 0xe7, 0x1c, 0x26, 0xdc, 0xfb, 0x2a, 0x00, 0xdd, 0x9e, + 0x73, 0x48, 0x46, 0xe4, 0x89, 0xc9, 0xeb, 0x7c, 0x4e, 0x14, 0x87, 0x57, 0x69, 0xc6, 0xd7, 0x3c, + 0x31, 0x51, 0x8d, 0x0b, 0xc1, 0x4a, 0x10, 0x0a, 0xf2, 0xf6, 0x38, 0x64, 0xd9, 0x3c, 0x31, 0xb7, + 0xb1, 0x0f, 0x29, 0x99, 0x24, 0x4c, 0x24, 0x7d, 0x02, 0xb3, 0xe4, 0x41, 0x71, 0xad, 0x8b, 0x34, + 0xf3, 0x0c, 0xe1, 0x69, 0x5a, 0xe8, 0x63, 0xc8, 0x31, 0x6e, 0x32, 0xfb, 0xcd, 0xd0, 0xd9, 0x2f, + 0xae, 0x2e, 0x5c, 0x8d, 0x74, 0xde, 0xcb, 0x52, 0x56, 0x32, 0xd7, 0x5d, 0x82, 0xe9, 0x03, 0xcb, + 0xd6, 0xbc, 0xcd, 0x5c, 0xf6, 0xc0, 0xda, 0x93, 0x41, 0x9a, 0xcd, 0x4c, 0x36, 0x27, 0x82, 0xf4, + 0x5b, 0x02, 0x14, 0xfd, 0x86, 0x48, 0x72, 0x42, 0xa8, 0x44, 0xb4, 0x78, 0xf1, 0xa6, 0x20, 0x0a, + 0x94, 0xfe, 0x35, 0xf5, 0x88, 0x34, 0xeb, 0x98, 0xb6, 0x4c, 0x92, 0x3d, 0xe5, 0x63, 0x16, 0xe8, + 0x93, 0xba, 0x68, 0xeb, 0xd2, 0x98, 0x9f, 0xfb, 0x70, 0xc9, 0xe8, 0x10, 0x7b, 0x6e, 0xb8, 0xed, + 0x3e, 0x87, 0x6d, 0x2e, 0xf6, 0x76, 0x8d, 0x17, 0x83, 0xb4, 0x8a, 0x97, 0x24, 0xfd, 0x2e, 0x5d, + 0xad, 0x0e, 0x6a, 0x92, 0xa4, 0xaa, 0xeb, 0x30, 0x6f, 0x33, 0xd1, 0xc4, 0xad, 0xb9, 0xa0, 0xb6, + 0xe7, 0x7c, 0x56, 0xa2, 0xf0, 0xdf, 0x4e, 0x41, 0xf1, 0x59, 0x0f, 0xdb, 0xfd, 0xaf, 0x93, 0xba, + 0x6f, 0x41, 0xf1, 0x95, 0x6a, 0xb8, 0xca, 0x81, 0x65, 0x2b, 0xbd, 0xae, 0xae, 0xba, 0x5e, 0xb4, + 0xc9, 0x3c, 0x21, 0x3f, 0xb2, 0xec, 0x3d, 0x4a, 0x44, 0x18, 0xd0, 0x91, 0x69, 0xbd, 0x32, 0x15, + 0x42, 0xa6, 0x40, 0xf9, 0xc4, 0xe4, 0x4b, 0xc8, 0xe5, 0x0f, 0xfe, 0xc3, 0xe9, 0xea, 0xc3, 0x89, + 0x62, 0xc8, 0x68, 0xbc, 0x5c, 0xaf, 0x67, 0xe8, 0xa5, 0xbd, 0xbd, 0xfa, 0x86, 0x2c, 0x52, 0x91, + 0x2f, 0x98, 0xc4, 0xe6, 0x89, 0xe9, 0x48, 0x7f, 0x3b, 0x05, 0x62, 0xa0, 0xa3, 0x24, 0x1b, 0xb2, + 0x0a, 0xf9, 0x97, 0x3d, 0x6c, 0x1b, 0xaf, 0xd1, 0x8c, 0xc0, 0x19, 0x89, 0xd9, 0xb9, 0x07, 0x0b, + 0xee, 0x89, 0xa9, 0xb0, 0x08, 0x3f, 0x16, 0xf8, 0xe1, 0x05, 0x2c, 0x14, 0x5d, 0x52, 0x66, 0x42, + 0xa7, 0x41, 0x1f, 0x0e, 0xfa, 0x1c, 0xe6, 0x22, 0xda, 0x4a, 0x7f, 0x35, 0x6d, 0xe5, 0x5f, 0x85, + 0x14, 0xf5, 0xfb, 0x02, 0x20, 0xaa, 0xa8, 0x3a, 0x5b, 0xe3, 0xff, 0xba, 0xf4, 0xa7, 0x3b, 0x20, + 0xd2, 0x78, 0x4c, 0xc5, 0x38, 0x50, 0x3a, 0x86, 0xe3, 0x18, 0x66, 0x8b, 0x77, 0xa8, 0x02, 0xa5, + 0xd7, 0x0f, 0xb6, 0x19, 0x55, 0xfa, 0x0b, 0xb0, 0x18, 0xa9, 0x40, 0x92, 0x8d, 0x7d, 0x03, 0xe6, + 0x0e, 0xd8, 0x16, 0x2c, 0x15, 0xce, 0x97, 0x07, 0xf3, 0x94, 0xc6, 0xde, 0x27, 0xfd, 0x49, 0x0a, + 0x2e, 0xc9, 0xd8, 0xb1, 0xda, 0xc7, 0x38, 0x79, 0x15, 0xd6, 0x80, 0xef, 0xbd, 0x28, 0xaf, 0xa5, + 0xc9, 0x1c, 0x63, 0x66, 0xd3, 0x5c, 0x74, 0x8d, 0xfd, 0x9d, 0xf1, 0x3d, 0x76, 0x78, 0x55, 0x9d, + 0xaf, 0xd4, 0x65, 0x22, 0x2b, 0x75, 0x16, 0x14, 0xd9, 0xee, 0xb1, 0xae, 0x38, 0xf8, 0xa5, 0xd9, + 0xeb, 0x78, 0x60, 0xa8, 0x34, 0xae, 0x90, 0x75, 0xc6, 0xd2, 0xc0, 0x2f, 0x77, 0x7a, 0x1d, 0xea, + 0x3b, 0x97, 0xaf, 0x90, 0xf2, 0x9e, 0x9d, 0xae, 0x16, 0x22, 0x69, 0x8e, 0x5c, 0x30, 0xfc, 0x67, + 0x22, 0x5d, 0xfa, 0x36, 0x5c, 0x1e, 0x50, 0x76, 0x92, 0x1e, 0xcf, 0x3f, 0x4b, 0xc3, 0xb5, 0xa8, + 0xf8, 0xa4, 0x21, 0xce, 0xd7, 0xbd, 0x41, 0x6b, 0x30, 0xdf, 0x31, 0xcc, 0xd7, 0x5b, 0xbd, 0x9c, + 0xeb, 0x18, 0xa6, 0x4f, 0x8b, 0xeb, 0x1a, 0x33, 0x3f, 0xd7, 0xae, 0xa1, 0xc2, 0x72, 0x5c, 0xdb, + 0x25, 0xd9, 0x3f, 0xbe, 0x2b, 0xc0, 0x5c, 0xd2, 0xcb, 0x72, 0xaf, 0x17, 0x05, 0x27, 0x35, 0x61, + 0xfe, 0xe7, 0xb0, 0x8e, 0xf7, 0xdb, 0x02, 0xa0, 0xa6, 0xdd, 0x33, 0x09, 0xa8, 0x7d, 0x62, 0xb5, + 0x92, 0xac, 0xe6, 0x25, 0x98, 0x36, 0x4c, 0x1d, 0x9f, 0xd0, 0x6a, 0x66, 0x64, 0xf6, 0x10, 0xd9, + 0x4a, 0x4c, 0x4f, 0xb4, 0x95, 0x28, 0x7d, 0x0e, 0x8b, 0x91, 0x22, 0x26, 0x59, 0xff, 0x3f, 0x4e, + 0xc1, 0x22, 0xaf, 0x48, 0xe2, 0x2b, 0x98, 0xdf, 0x80, 0xe9, 0x36, 0x91, 0x39, 0xa6, 0x9d, 0xe9, + 0x3b, 0xbd, 0x76, 0xa6, 0x99, 0xd1, 0x2f, 0x01, 0x74, 0x6d, 0x7c, 0xac, 0x30, 0xd6, 0xf4, 0x44, + 0xac, 0x39, 0xc2, 0x41, 0x09, 0xe8, 0xfb, 0x02, 0x14, 0xc9, 0x80, 0xee, 0xda, 0x56, 0xd7, 0x72, + 0x88, 0xcf, 0xe2, 0x4c, 0x06, 0x73, 0x9e, 0x9d, 0x9d, 0xae, 0xce, 0x6f, 0x1b, 0xe6, 0x2e, 0x67, + 0x6c, 0x36, 0x26, 0x0e, 0xf0, 0xf7, 0x8e, 0x39, 0x94, 0x2a, 0x6d, 0x4b, 0x3b, 0x0a, 0x36, 0xc7, + 0x88, 0x65, 0xf1, 0xc5, 0x39, 0xd2, 0x4f, 0x04, 0xb8, 0xf4, 0x73, 0x5b, 0x2e, 0xfe, 0xff, 0xa1, + 0x6c, 0xe9, 0x39, 0x88, 0xf4, 0x47, 0xdd, 0x3c, 0xb0, 0x92, 0x5c, 0xb8, 0xff, 0xdf, 0x02, 0x2c, + 0x84, 0x04, 0x27, 0xe9, 0xe0, 0xbc, 0xae, 0x9e, 0xe6, 0x59, 0x38, 0x8c, 0x3b, 0x99, 0xaa, 0xe4, + 0x39, 0x9e, 0x9d, 0x75, 0xca, 0x12, 0xcc, 0x61, 0x62, 0xc5, 0xe8, 0x12, 0xef, 0x3e, 0x3b, 0x64, + 0x32, 0xb0, 0xa2, 0x9f, 0xf7, 0x33, 0x94, 0xfb, 0xd2, 0xaf, 0x10, 0x0f, 0x2b, 0x3c, 0x28, 0x93, + 0x1c, 0xf2, 0xff, 0x38, 0x05, 0x57, 0x2a, 0x6c, 0x0b, 0xdc, 0x8b, 0x09, 0x49, 0xb2, 0x23, 0x2e, + 0xc1, 0xec, 0x31, 0xb6, 0x1d, 0xc3, 0x62, 0xb3, 0xfd, 0xbc, 0xec, 0x3d, 0xa2, 0x65, 0xc8, 0x3a, + 0xa6, 0xda, 0x75, 0x0e, 0x2d, 0x6f, 0x3b, 0xd1, 0x7f, 0xf6, 0xe3, 0x57, 0xa6, 0x5f, 0x3f, 0x7e, + 0x65, 0x66, 0x7c, 0xfc, 0xca, 0xec, 0x57, 0x88, 0x5f, 0xe1, 0x7b, 0x77, 0xff, 0x46, 0x80, 0xab, + 0x43, 0x9a, 0x4b, 0xb2, 0x73, 0x7e, 0x07, 0xf2, 0x1a, 0x17, 0x4c, 0xe6, 0x07, 0xb6, 0x31, 0x59, + 0x27, 0xd9, 0x5e, 0x13, 0xfa, 0x9c, 0x9d, 0xae, 0x82, 0x57, 0xd4, 0xfa, 0x06, 0x57, 0x0e, 0xf9, + 0xad, 0x4b, 0xff, 0x0d, 0xa0, 0x58, 0x3d, 0x61, 0x8b, 0xf2, 0x0d, 0xe6, 0x95, 0xa0, 0x47, 0x90, + 0xed, 0xda, 0xd6, 0xb1, 0xe1, 0x55, 0xa3, 0x10, 0x09, 0x5e, 0xf0, 0xaa, 0x31, 0xc0, 0xb5, 0xcb, + 0x39, 0x64, 0x9f, 0x17, 0x35, 0x21, 0xf7, 0xc4, 0xd2, 0xd4, 0xf6, 0x23, 0xa3, 0xed, 0x0d, 0xb4, + 0xf7, 0xcf, 0x17, 0x54, 0xf2, 0x79, 0x76, 0x55, 0xf7, 0xd0, 0x6b, 0x04, 0x9f, 0x88, 0xea, 0x90, + 0xad, 0xb9, 0x6e, 0x97, 0x24, 0xf2, 0xf1, 0x77, 0x7b, 0x02, 0xa1, 0x84, 0xc5, 0x8b, 0xb8, 0xf5, + 0xd8, 0x51, 0x13, 0x16, 0x1e, 0xd3, 0xf3, 0x63, 0x95, 0xb6, 0xd5, 0xd3, 0x2b, 0x96, 0x79, 0x60, + 0xb4, 0xf8, 0x34, 0x71, 0x6b, 0x02, 0x99, 0x8f, 0x2b, 0x0d, 0x79, 0x58, 0x00, 0x5a, 0x87, 0x6c, + 0xe3, 0x21, 0x17, 0xc6, 0xdc, 0xc8, 0x9b, 0x13, 0x08, 0x6b, 0x3c, 0x94, 0x7d, 0x36, 0xb4, 0x09, + 0xf9, 0xf5, 0x2f, 0x7a, 0x36, 0xe6, 0x52, 0x66, 0x46, 0x46, 0x4e, 0x0c, 0x4a, 0xa1, 0x5c, 0x72, + 0x98, 0x19, 0x7d, 0x1b, 0x8a, 0x44, 0x6f, 0x4d, 0x75, 0xbf, 0xed, 0xc9, 0xcb, 0x52, 0x79, 0xef, + 0x4e, 0x20, 0xcf, 0xe7, 0xf4, 0xb6, 0x04, 0x06, 0x44, 0x2d, 0xcb, 0x30, 0x1f, 0x69, 0x2f, 0x84, + 0x20, 0xd3, 0x25, 0x4d, 0x23, 0xd0, 0x30, 0x24, 0xfa, 0x1b, 0xbd, 0x07, 0xb3, 0xa6, 0xa5, 0x63, + 0xaf, 0x33, 0xcf, 0x97, 0x2f, 0x9d, 0x9d, 0xae, 0xce, 0xec, 0x58, 0x3a, 0xf3, 0x75, 0xf8, 0x2f, + 0x79, 0x86, 0x64, 0xaa, 0xeb, 0xcb, 0xd7, 0x21, 0x43, 0x9a, 0x88, 0xd8, 0x90, 0x7d, 0xd5, 0xc1, + 0x7b, 0xb6, 0xc1, 0xa5, 0x79, 0x8f, 0xcb, 0x7f, 0x2f, 0x05, 0xa9, 0xc6, 0x43, 0xe2, 0xcd, 0xef, + 0xf7, 0xb4, 0x23, 0xec, 0xf2, 0x74, 0xfe, 0x44, 0xbd, 0x7c, 0x1b, 0x1f, 0x18, 0xcc, 0xe9, 0xca, + 0xc9, 0xfc, 0x09, 0xbd, 0x05, 0xa0, 0x6a, 0x1a, 0x76, 0x1c, 0xc5, 0x3b, 0x02, 0x98, 0x93, 0x73, + 0x8c, 0xb2, 0x85, 0xfb, 0x84, 0xcd, 0xc1, 0x9a, 0x8d, 0x5d, 0x2f, 0x86, 0x8a, 0x3d, 0x11, 0x36, + 0x17, 0x77, 0xba, 0x8a, 0x6b, 0x1d, 0x61, 0x93, 0x36, 0x69, 0x8e, 0x58, 0x85, 0x4e, 0xb7, 0x49, + 0x08, 0xc4, 0xa0, 0x61, 0x53, 0x0f, 0xac, 0x4f, 0x4e, 0xf6, 0x9f, 0x89, 0x48, 0x1b, 0xb7, 0x0c, + 0x7e, 0x80, 0x2e, 0x27, 0xf3, 0x27, 0xa2, 0x25, 0xb5, 0xe7, 0x1e, 0xd2, 0x96, 0xc8, 0xc9, 0xf4, + 0x37, 0xba, 0x05, 0x45, 0x16, 0x76, 0xa9, 0x60, 0x53, 0x53, 0xa8, 0x1d, 0xcc, 0xd1, 0xe4, 0x79, + 0x46, 0xae, 0x9a, 0x1a, 0xb1, 0x7a, 0xe8, 0x21, 0x70, 0x82, 0x72, 0xd4, 0x71, 0x88, 0x4e, 0x81, + 0xe4, 0x2a, 0x17, 0xcf, 0x4e, 0x57, 0xf3, 0x0d, 0x9a, 0xb0, 0xb5, 0xdd, 0x20, 0x73, 0x09, 0xcb, + 0xb5, 0xd5, 0x71, 0xea, 0xfa, 0xf2, 0x5f, 0x17, 0x20, 0xfd, 0xb8, 0xd2, 0xb8, 0xb0, 0xca, 0xbc, + 0x82, 0xa6, 0x43, 0x05, 0xbd, 0x0d, 0xc5, 0x7d, 0xa3, 0xdd, 0x36, 0xcc, 0x16, 0xf1, 0xaf, 0xbe, + 0x83, 0x35, 0x4f, 0x61, 0x05, 0x4e, 0xde, 0x65, 0x54, 0x74, 0x1d, 0xf2, 0x9a, 0x8d, 0x75, 0x6c, + 0xba, 0x86, 0xda, 0x76, 0xb8, 0xe6, 0xc2, 0xa4, 0xe5, 0xbf, 0x28, 0xc0, 0x34, 0xed, 0xac, 0xe8, + 0x4d, 0xc8, 0x69, 0x96, 0xe9, 0xaa, 0x86, 0xc9, 0xad, 0x4e, 0x4e, 0x0e, 0x08, 0x23, 0x8b, 0x77, + 0x03, 0xe6, 0x54, 0x4d, 0xb3, 0x7a, 0xa6, 0xab, 0x98, 0x6a, 0x07, 0xf3, 0x62, 0xe6, 0x39, 0x6d, + 0x47, 0xed, 0x60, 0xb4, 0x0a, 0xde, 0xa3, 0x7f, 0xb2, 0x33, 0x27, 0x03, 0x27, 0x6d, 0xe1, 0xfe, + 0x32, 0x86, 0x9c, 0xdf, 0xab, 0x49, 0x7d, 0x7b, 0x8e, 0x5f, 0x02, 0xfa, 0x1b, 0xbd, 0x0f, 0x97, + 0x5e, 0xf6, 0xd4, 0xb6, 0x71, 0x40, 0x17, 0xbf, 0x68, 0x94, 0x3a, 0x7d, 0x19, 0x2b, 0x0a, 0xf2, + 0xd3, 0xa8, 0x04, 0xfa, 0x4e, 0x6f, 0x10, 0xa4, 0x83, 0x41, 0xc0, 0x42, 0x76, 0xa4, 0x3e, 0x2c, + 0xc8, 0xd8, 0xb5, 0xfb, 0x4d, 0x76, 0xd8, 0xb5, 0x7a, 0x8c, 0x4d, 0x97, 0xd4, 0xdd, 0xea, 0x62, + 0x16, 0x24, 0xe2, 0xd5, 0xdd, 0x27, 0xa0, 0x9b, 0x50, 0x50, 0x5d, 0xd2, 0xdd, 0x5c, 0xc5, 0xec, + 0x75, 0xf6, 0xb1, 0xcd, 0x42, 0x01, 0xe4, 0x79, 0x4e, 0xdd, 0xa1, 0x44, 0x7e, 0x22, 0xc3, 0xee, + 0x2b, 0x74, 0x9d, 0x88, 0xbf, 0x1a, 0x28, 0xa9, 0x4a, 0x28, 0xd2, 0x5d, 0xb8, 0x4c, 0xea, 0x59, + 0x35, 0x35, 0xbb, 0xdf, 0x25, 0x92, 0x9f, 0xd2, 0xbf, 0x0e, 0x12, 0x43, 0xfb, 0x34, 0x74, 0x7b, + 0x46, 0xfa, 0xf1, 0x0c, 0xcc, 0x57, 0x4f, 0xba, 0x96, 0x9d, 0xe8, 0xaa, 0x4e, 0x19, 0x66, 0x39, + 0xf0, 0x1d, 0xb3, 0x15, 0x3b, 0x60, 0x81, 0xbc, 0x7d, 0x68, 0xce, 0x88, 0xca, 0x00, 0x2c, 0xa0, + 0x92, 0xc6, 0xe1, 0xa4, 0x2f, 0xb0, 0x73, 0x44, 0xd9, 0xe8, 0x61, 0x83, 0x1d, 0xc8, 0x77, 0x8e, + 0x35, 0x4d, 0x39, 0x30, 0xda, 0x2e, 0x8f, 0x4b, 0x8b, 0x0f, 0xa1, 0xde, 0x7e, 0x5e, 0xa9, 0x3c, + 0xa2, 0x99, 0x58, 0x3c, 0x57, 0xf0, 0x2c, 0x03, 0x91, 0xc0, 0x7e, 0xa3, 0x77, 0x81, 0x1f, 0x7c, + 0x51, 0x1c, 0xef, 0x18, 0x5b, 0x79, 0xfe, 0xec, 0x74, 0x35, 0x27, 0x53, 0x6a, 0xa3, 0xd1, 0x94, + 0x73, 0x2c, 0x43, 0xc3, 0x71, 0x2f, 0x72, 0xd4, 0x61, 0x76, 0xf2, 0xa3, 0x0e, 0x7f, 0x45, 0x80, + 0x2b, 0x5c, 0x47, 0xca, 0x3e, 0x0d, 0xef, 0x56, 0xdb, 0x86, 0xdb, 0x57, 0x8e, 0x8e, 0x97, 0xb2, + 0xd4, 0xe5, 0xf9, 0xc5, 0x58, 0x5d, 0x87, 0x9a, 0xb8, 0xe4, 0x69, 0xbc, 0xff, 0x84, 0x33, 0x6f, + 0x1d, 0x57, 0x4d, 0xd7, 0xee, 0x97, 0xaf, 0x9e, 0x9d, 0xae, 0x2e, 0x0e, 0xa7, 0x3e, 0x97, 0x17, + 0x9d, 0x61, 0x16, 0x54, 0x03, 0xc0, 0x7e, 0x17, 0xa3, 0x16, 0x2c, 0x7e, 0xea, 0x8a, 0xed, 0x8b, + 0x72, 0x88, 0x17, 0xdd, 0x01, 0x91, 0x1f, 0x2d, 0x39, 0x30, 0xda, 0x58, 0x71, 0x8c, 0x2f, 0x30, + 0xb5, 0x75, 0x69, 0xb9, 0xc0, 0xe8, 0x44, 0x44, 0xc3, 0xf8, 0x02, 0xa3, 0xfb, 0x70, 0x39, 0x68, + 0x01, 0x65, 0x1f, 0xb7, 0xad, 0x57, 0x2c, 0x7b, 0x9e, 0x66, 0x47, 0xbe, 0xf6, 0xcb, 0x24, 0x89, + 0xb0, 0x2c, 0x7f, 0x07, 0x96, 0x46, 0x55, 0x38, 0x3c, 0x20, 0x72, 0x6c, 0xbf, 0xf2, 0xc3, 0xe8, + 0x62, 0xc5, 0x04, 0x1d, 0x97, 0x2f, 0x58, 0x7c, 0x94, 0xfa, 0x50, 0x90, 0xfe, 0x6e, 0x0a, 0xe6, + 0xcb, 0xbd, 0xf6, 0xd1, 0xd3, 0x6e, 0x83, 0x1d, 0xcb, 0x47, 0x6f, 0x40, 0x4e, 0x57, 0x5d, 0x95, + 0x15, 0x52, 0x60, 0x47, 0xcc, 0x08, 0x81, 0xd6, 0xe6, 0x36, 0x14, 0x43, 0xb1, 0x20, 0x3c, 0xe2, + 0x9d, 0x56, 0x3b, 0x20, 0xd3, 0xa0, 0xf4, 0x0f, 0x61, 0x29, 0x94, 0x91, 0xae, 0x2c, 0x28, 0xd8, + 0x74, 0x6d, 0x03, 0xb3, 0xd5, 0xb1, 0xb4, 0x1c, 0x0a, 0x58, 0xa9, 0x93, 0xe4, 0x2a, 0x4b, 0x45, + 0x4d, 0x98, 0x23, 0x19, 0xfb, 0x0a, 0xb5, 0x82, 0xde, 0xea, 0xe5, 0xfd, 0x98, 0x6a, 0x45, 0xca, + 0x5d, 0xa2, 0xfa, 0xa9, 0x50, 0x1e, 0xfa, 0x53, 0xce, 0xe3, 0x80, 0xb2, 0xfc, 0x29, 0x88, 0x83, + 0x19, 0xc2, 0xba, 0xcc, 0x30, 0x5d, 0x5e, 0x0a, 0xeb, 0x32, 0x1d, 0xd2, 0xd3, 0x66, 0x26, 0x9b, + 0x11, 0xa7, 0xa5, 0x9f, 0xa4, 0xa1, 0xe0, 0xf5, 0xcc, 0x24, 0xdd, 0xea, 0x32, 0x4c, 0x93, 0x7e, + 0xe4, 0x85, 0x57, 0xdc, 0x1a, 0x33, 0x20, 0x78, 0x8c, 0x35, 0xe9, 0x5f, 0x1e, 0x02, 0xa4, 0xac, + 0x49, 0x98, 0x9f, 0xe5, 0xff, 0x2e, 0x40, 0x86, 0x7a, 0xb2, 0xf7, 0x21, 0x43, 0xcf, 0xe5, 0x0b, + 0x63, 0xcf, 0xe5, 0x7b, 0xdb, 0xf3, 0x24, 0xab, 0x3f, 0xb1, 0xa4, 0x42, 0xde, 0x55, 0x99, 0xc6, + 0xf7, 0x58, 0xb6, 0x8b, 0x75, 0xee, 0x29, 0x5e, 0x3f, 0xaf, 0x1d, 0x3d, 0x4f, 0xd8, 0xe3, 0x43, + 0xd7, 0x20, 0x4d, 0x6c, 0xd7, 0x2c, 0xdb, 0xaa, 0x3f, 0x3b, 0x5d, 0x4d, 0x13, 0xab, 0x45, 0x68, + 0x68, 0x0d, 0xf2, 0x51, 0x6b, 0x42, 0x9c, 0x0d, 0x6a, 0x0e, 0x43, 0x96, 0x00, 0xda, 0xfe, 0x10, + 0x62, 0x28, 0x89, 0xb5, 0x25, 0xdf, 0xa4, 0xff, 0x75, 0x81, 0xc7, 0x24, 0x36, 0x34, 0x32, 0x67, + 0xd9, 0x49, 0x4e, 0x2a, 0x77, 0x41, 0xb4, 0x55, 0x53, 0xb7, 0x3a, 0xc6, 0x17, 0x98, 0xa1, 0x72, + 0x87, 0x6f, 0x57, 0x14, 0x7d, 0x3a, 0x85, 0xcf, 0x8e, 0xf4, 0x5f, 0x05, 0x1e, 0xbf, 0xe8, 0x17, + 0x23, 0xd9, 0x4d, 0xe5, 0x3c, 0x5f, 0xd2, 0x33, 0x0f, 0x2c, 0x2f, 0xfc, 0xe2, 0xcd, 0x51, 0xc1, + 0x46, 0x75, 0xf3, 0xc0, 0xf2, 0xb6, 0xc7, 0x6c, 0x8f, 0xe0, 0x2c, 0xff, 0x32, 0x4c, 0xd3, 0xe4, + 0xd7, 0xe8, 0x1b, 0x7e, 0xcc, 0x6c, 0x4a, 0x4c, 0x4b, 0x7f, 0x94, 0x82, 0x77, 0x68, 0x55, 0x9f, + 0x63, 0xdb, 0x38, 0xe8, 0xef, 0xda, 0x96, 0x8b, 0x35, 0x17, 0xeb, 0xc1, 0xaa, 0x54, 0x82, 0x4d, + 0xa0, 0x43, 0x8e, 0xef, 0xe7, 0x19, 0x3a, 0xbf, 0x39, 0xe3, 0xf1, 0x57, 0x43, 0xab, 0x59, 0xb6, + 0x0f, 0x58, 0xdf, 0x90, 0xb3, 0x4c, 0x72, 0x5d, 0x47, 0xeb, 0x90, 0xeb, 0x7a, 0xd5, 0xb8, 0x50, + 0xc8, 0x88, 0xcf, 0x85, 0xb6, 0xa0, 0xc8, 0x0b, 0xaa, 0xb6, 0x8d, 0x63, 0xac, 0xa8, 0xee, 0x45, + 0x86, 0xf0, 0x3c, 0xe3, 0x5d, 0x27, 0xac, 0xeb, 0xae, 0xf4, 0xd7, 0x32, 0x70, 0xf3, 0x1c, 0x15, + 0x27, 0xd9, 0xbd, 0x96, 0x21, 0x7b, 0x4c, 0x5e, 0x64, 0xf0, 0xda, 0x67, 0x65, 0xff, 0x19, 0xed, + 0x47, 0xe6, 0x81, 0x03, 0xd5, 0x68, 0x93, 0x79, 0x83, 0x05, 0xe9, 0x8d, 0x0e, 0x03, 0x8a, 0x0f, + 0x7a, 0x0b, 0xcd, 0x18, 0x8f, 0xa8, 0x20, 0x9a, 0xcd, 0x41, 0xdf, 0x15, 0x60, 0x99, 0xbd, 0x90, + 0x45, 0x8a, 0x0d, 0xbc, 0x26, 0x43, 0x5f, 0xb3, 0x11, 0xf3, 0x9a, 0x89, 0x74, 0x54, 0x0a, 0xbd, + 0x8b, 0x17, 0x64, 0x29, 0xfc, 0xb6, 0x70, 0x51, 0x96, 0x7f, 0x53, 0x80, 0x7c, 0x88, 0x80, 0x6e, + 0x0d, 0x9d, 0xcb, 0xc9, 0x9f, 0xc5, 0x1d, 0xc6, 0xb9, 0x39, 0x74, 0x18, 0xa7, 0x9c, 0xfd, 0xf2, + 0x74, 0x35, 0x23, 0xb3, 0x78, 0x6f, 0xef, 0x58, 0xce, 0x8d, 0xe0, 0x1a, 0x98, 0xf4, 0x40, 0x26, + 0xef, 0x1e, 0x18, 0x0a, 0xeb, 0x54, 0x6f, 0x1b, 0x89, 0xc2, 0x3a, 0xf2, 0x24, 0xfd, 0x20, 0x05, + 0x0b, 0xeb, 0xba, 0xde, 0x68, 0x50, 0x28, 0x90, 0xe4, 0x18, 0x43, 0x90, 0x21, 0xfe, 0x01, 0x3f, + 0x43, 0x44, 0x7f, 0xa3, 0xf7, 0x00, 0xe9, 0x86, 0xc3, 0xae, 0x53, 0x70, 0x0e, 0x55, 0xdd, 0x7a, + 0x15, 0xec, 0x16, 0x2f, 0x78, 0x29, 0x0d, 0x2f, 0x01, 0x35, 0x80, 0x3a, 0xad, 0x8a, 0xe3, 0xaa, + 0xfe, 0x6a, 0xf8, 0xcd, 0x89, 0x4e, 0xa5, 0x30, 0x6f, 0xd6, 0x7f, 0x94, 0x73, 0x44, 0x0e, 0xfd, + 0x49, 0x7c, 0x34, 0x83, 0x34, 0x8a, 0xab, 0xa8, 0x8e, 0x77, 0x9e, 0x82, 0x5d, 0xe4, 0x50, 0x60, + 0xf4, 0x75, 0x87, 0x1d, 0x93, 0x60, 0x61, 0xd8, 0x81, 0x6a, 0x92, 0x5c, 0xcb, 0xfc, 0x5b, 0x02, + 0x14, 0x64, 0x7c, 0x60, 0x63, 0xe7, 0x30, 0x49, 0x9d, 0x3f, 0x82, 0x39, 0x9b, 0x49, 0x55, 0x0e, + 0x6c, 0xab, 0x73, 0x11, 0x5b, 0x91, 0xe7, 0x8c, 0x8f, 0x6c, 0xab, 0xc3, 0x4d, 0xf2, 0x73, 0x28, + 0xfa, 0x65, 0x4c, 0xb2, 0xf2, 0x7f, 0x87, 0x9e, 0xb8, 0x64, 0x82, 0x93, 0xde, 0xb6, 0x4d, 0x56, + 0x03, 0x74, 0x3d, 0x3b, 0x5c, 0xd0, 0x24, 0xd5, 0xf0, 0x5f, 0x04, 0x28, 0x34, 0x7a, 0xfb, 0xec, + 0x9a, 0xa0, 0xe4, 0x34, 0x50, 0x85, 0x5c, 0x1b, 0x1f, 0xb8, 0xca, 0x6b, 0x05, 0x10, 0x67, 0x09, + 0x2b, 0x0d, 0x9f, 0x7e, 0x0c, 0x60, 0xd3, 0x23, 0x47, 0x54, 0x4e, 0xfa, 0x82, 0x72, 0x72, 0x94, + 0x97, 0x90, 0xc9, 0xac, 0x53, 0xf4, 0xab, 0x99, 0xe4, 0xfc, 0xf2, 0x22, 0x62, 0x1d, 0xd2, 0x17, + 0xb1, 0x0e, 0x0b, 0x7c, 0xa7, 0x3a, 0xde, 0x42, 0x94, 0x60, 0x91, 0xba, 0x65, 0x8a, 0xda, 0xed, + 0xb6, 0x0d, 0x0f, 0xa7, 0x50, 0xfb, 0x93, 0x91, 0x17, 0x68, 0xd2, 0x3a, 0x4b, 0xa1, 0x08, 0x05, + 0xfd, 0x86, 0x00, 0x73, 0x07, 0x36, 0xc6, 0x5f, 0x60, 0x85, 0x9a, 0xe4, 0xc9, 0xb6, 0xe2, 0x37, + 0x48, 0x19, 0xbe, 0xf2, 0x56, 0x5d, 0x9e, 0xbd, 0xb8, 0x41, 0xde, 0x8b, 0x76, 0x40, 0xd4, 0xda, + 0x6c, 0xf3, 0xd0, 0x0f, 0x0b, 0x98, 0x99, 0x7c, 0x00, 0x14, 0x19, 0x73, 0x10, 0x19, 0xf0, 0x8c, + 0x0c, 0x26, 0x55, 0x57, 0xf8, 0xd5, 0x6c, 0xd4, 0xd9, 0x8e, 0x86, 0x05, 0x84, 0x8f, 0x5e, 0x87, + 0x6e, 0x74, 0x2b, 0xc9, 0x58, 0xd5, 0xb9, 0xe7, 0x4e, 0xc6, 0x95, 0xff, 0xc0, 0xc7, 0xd5, 0x0b, + 0x58, 0xa0, 0xfd, 0x26, 0xe9, 0x13, 0x94, 0xd2, 0x3f, 0x48, 0x03, 0x0a, 0x4b, 0xfe, 0xf9, 0xf5, + 0xb7, 0x54, 0x72, 0xfd, 0x6d, 0x13, 0xa4, 0x90, 0x33, 0xd4, 0x56, 0x1d, 0x57, 0x61, 0xf1, 0x67, + 0x8e, 0xd2, 0xc5, 0xb6, 0xe2, 0x60, 0xcd, 0xe2, 0x97, 0xe8, 0x08, 0xf2, 0x4a, 0x90, 0xf3, 0x89, + 0xea, 0xb8, 0xcf, 0x58, 0xbe, 0x5d, 0x6c, 0x37, 0x68, 0x2e, 0xf4, 0x10, 0xae, 0x74, 0xd4, 0x93, + 0x38, 0xfe, 0x69, 0xca, 0xbf, 0xd8, 0x51, 0x4f, 0x86, 0x98, 0x3e, 0x82, 0xe5, 0x78, 0x26, 0xc5, + 0xc1, 0xde, 0xfe, 0xd4, 0x95, 0x18, 0xc6, 0x06, 0x76, 0xd1, 0x3a, 0x40, 0x00, 0x22, 0xf8, 0x1c, + 0x3d, 0x09, 0x86, 0xc8, 0xf9, 0x18, 0x42, 0xfa, 0x9e, 0x00, 0x85, 0x6d, 0xa3, 0x65, 0xab, 0x89, + 0x5e, 0x51, 0x83, 0x3e, 0x8a, 0x6e, 0xe8, 0xe5, 0x1f, 0x2c, 0xc7, 0x05, 0x6c, 0xb0, 0x1c, 0xde, + 0xa2, 0x1d, 0x67, 0x20, 0x53, 0x9f, 0x5f, 0xa2, 0x24, 0x6d, 0xfe, 0xbf, 0xbf, 0x06, 0x73, 0xbc, + 0xdc, 0x7b, 0xa6, 0x61, 0x99, 0xe8, 0x3e, 0xa4, 0x5b, 0x7c, 0x69, 0x3b, 0x1f, 0xbb, 0xa2, 0x17, + 0x5c, 0x00, 0x57, 0x9b, 0x92, 0x49, 0x5e, 0xc2, 0xd2, 0xed, 0xb9, 0x31, 0x80, 0x22, 0x88, 0x61, + 0x0e, 0xb3, 0x74, 0x7b, 0x2e, 0x6a, 0x40, 0x51, 0x0b, 0x6e, 0x9d, 0x52, 0x08, 0x7b, 0x7a, 0xe4, + 0x32, 0x57, 0xec, 0xfd, 0x5f, 0xb5, 0x29, 0xb9, 0xa0, 0x45, 0x12, 0x50, 0x25, 0x7c, 0xd9, 0x51, + 0x66, 0x28, 0x40, 0x2a, 0x38, 0x2a, 0x1b, 0xbd, 0x68, 0xa9, 0x36, 0x15, 0xba, 0x13, 0x09, 0x7d, + 0x04, 0x33, 0x3a, 0xbd, 0x56, 0x87, 0x1b, 0xcd, 0xb8, 0x86, 0x8e, 0xdc, 0x5e, 0x54, 0x9b, 0x92, + 0x39, 0x07, 0xda, 0x84, 0x39, 0xf6, 0x8b, 0xb9, 0xf4, 0xdc, 0xd4, 0xdd, 0x1c, 0x2d, 0x21, 0xe4, + 0x6c, 0xd4, 0xa6, 0xe4, 0xbc, 0x1e, 0x50, 0xd1, 0x63, 0xc8, 0x6b, 0x6d, 0xac, 0xda, 0x5c, 0xd4, + 0xad, 0x91, 0xa7, 0xba, 0x86, 0xae, 0xe2, 0xa9, 0x4d, 0xc9, 0xa0, 0xf9, 0x44, 0x52, 0x28, 0x9b, + 0xde, 0xc8, 0xc2, 0x25, 0xbd, 0x3f, 0xb2, 0x50, 0xc3, 0xd7, 0xdb, 0xd4, 0xa8, 0x13, 0xe2, 0x53, + 0xd1, 0x37, 0x20, 0xe3, 0x68, 0xaa, 0xc9, 0xed, 0xee, 0xca, 0x88, 0x2b, 0x33, 0x02, 0x66, 0x9a, + 0x1b, 0x7d, 0xcc, 0xd0, 0x80, 0x7b, 0xe2, 0xad, 0x65, 0xc6, 0xe9, 0x34, 0x72, 0x34, 0x9b, 0xe8, + 0x14, 0x53, 0x02, 0xd1, 0x83, 0x4a, 0xe0, 0x8f, 0x42, 0xcf, 0x4b, 0xd2, 0xc5, 0xcb, 0x78, 0x3d, + 0x0c, 0x9d, 0x6f, 0xad, 0xd1, 0xf3, 0xdf, 0x1e, 0x11, 0x6d, 0xc3, 0x3c, 0x13, 0xd4, 0x63, 0x47, + 0x2f, 0x97, 0xd6, 0x46, 0xee, 0x52, 0xc6, 0x1c, 0xfe, 0xac, 0x4d, 0xc9, 0x73, 0x6a, 0x88, 0x1c, + 0x94, 0xab, 0x83, 0xed, 0x16, 0x5b, 0x25, 0x1d, 0x53, 0xae, 0x70, 0xe8, 0x97, 0x5f, 0x2e, 0x4a, + 0x44, 0xbf, 0x06, 0x97, 0x98, 0x20, 0x97, 0x47, 0xb4, 0xf0, 0xc0, 0x88, 0xb7, 0x46, 0xee, 0x30, + 0x8e, 0x3c, 0x2e, 0x59, 0x9b, 0x92, 0x91, 0x3a, 0x94, 0x88, 0x34, 0xb8, 0xcc, 0xde, 0xc0, 0xcf, + 0xdb, 0xd9, 0xfc, 0x88, 0xd8, 0xd2, 0xdb, 0xf4, 0x15, 0xef, 0x8d, 0x7a, 0x45, 0xec, 0x31, 0xc0, + 0xda, 0x94, 0xbc, 0xa8, 0x0e, 0xa7, 0x06, 0xd5, 0xb0, 0xf9, 0xc9, 0x26, 0xde, 0xdd, 0xde, 0x1b, + 0x5f, 0x8d, 0xb8, 0x13, 0x61, 0x7e, 0x35, 0x22, 0x89, 0xa4, 0x01, 0xfd, 0x73, 0xdd, 0xb4, 0x33, + 0xcd, 0x8d, 0x6c, 0xc0, 0x98, 0xe3, 0x4f, 0xa4, 0x01, 0x0f, 0x43, 0x64, 0x54, 0x82, 0x54, 0x4b, + 0x5b, 0x9a, 0x1f, 0x39, 0x3f, 0xf8, 0x47, 0x7c, 0x6a, 0x53, 0x72, 0xaa, 0xa5, 0xa1, 0x4f, 0x21, + 0xcb, 0xce, 0x6b, 0x9c, 0x98, 0x4b, 0x85, 0x91, 0x06, 0x37, 0x7a, 0xea, 0xa5, 0x36, 0x25, 0xd3, + 0x23, 0x22, 0xbc, 0x23, 0xf3, 0x58, 0x7c, 0x2a, 0xa2, 0x34, 0xe6, 0x98, 0xe6, 0xc0, 0x89, 0x08, + 0xd2, 0x61, 0x6c, 0x9f, 0x88, 0x76, 0xa1, 0x60, 0xb3, 0x68, 0x45, 0x2f, 0xb6, 0x58, 0x1c, 0xb9, + 0x87, 0x1f, 0x17, 0x5e, 0x5c, 0xa3, 0xeb, 0x30, 0x21, 0x3a, 0x69, 0xbb, 0xa8, 0x44, 0xde, 0x76, + 0x0b, 0x23, 0xdb, 0x6e, 0x64, 0xa8, 0x2b, 0x69, 0x3b, 0x7b, 0x28, 0x11, 0x7d, 0x00, 0xd3, 0x6c, + 0x9c, 0x20, 0x2a, 0x32, 0x2e, 0x2c, 0x65, 0x60, 0x88, 0xb0, 0xfc, 0xc4, 0x7a, 0xb9, 0x3c, 0x64, + 0x4f, 0x69, 0x5b, 0xad, 0xa5, 0xc5, 0x91, 0xd6, 0x6b, 0x38, 0xf8, 0x90, 0x58, 0x2f, 0x37, 0xa0, + 0x92, 0x0e, 0x64, 0xb3, 0x14, 0x3e, 0xc4, 0x2e, 0x8d, 0xec, 0x40, 0x31, 0x91, 0x7c, 0x35, 0x7a, + 0x98, 0x22, 0x20, 0xfb, 0x86, 0xd5, 0xc1, 0x0a, 0x35, 0x8a, 0x97, 0xc7, 0x1b, 0xd6, 0xc8, 0x3d, + 0x46, 0xbe, 0x61, 0x65, 0x54, 0xf4, 0x1c, 0x44, 0x7e, 0x99, 0x86, 0xe2, 0x45, 0x96, 0x2c, 0x5d, + 0xa1, 0xf2, 0xee, 0xc6, 0x4e, 0x88, 0x71, 0x41, 0x47, 0x35, 0xe2, 0x30, 0x47, 0x53, 0xd0, 0x67, + 0xb0, 0x40, 0xe5, 0x29, 0x5a, 0x70, 0xff, 0xc9, 0xd2, 0xd2, 0xd0, 0x6d, 0x1a, 0xa3, 0xaf, 0x4a, + 0xf1, 0x24, 0x8b, 0xda, 0x40, 0x12, 0x19, 0x0f, 0x86, 0x69, 0xb8, 0x74, 0xee, 0x5e, 0x1e, 0x39, + 0x1e, 0xa2, 0x77, 0x3f, 0x92, 0xf1, 0x60, 0x30, 0x0a, 0xe9, 0xc6, 0x03, 0x16, 0xef, 0xcd, 0x91, + 0xdd, 0x78, 0x84, 0xb1, 0x9b, 0x77, 0x23, 0x76, 0x6e, 0x03, 0x80, 0xc1, 0x24, 0xea, 0xf9, 0xad, + 0x8c, 0x74, 0x00, 0x06, 0x23, 0xed, 0x88, 0x03, 0xd0, 0xf6, 0x68, 0xc4, 0x01, 0x60, 0x6b, 0xfa, + 0x4b, 0xd7, 0x47, 0x4f, 0x56, 0xe1, 0x5d, 0x3f, 0x3a, 0x59, 0x51, 0x02, 0x5a, 0x87, 0x1c, 0xf1, + 0x59, 0xfb, 0x74, 0x84, 0xdf, 0x18, 0x09, 0x51, 0x07, 0x8e, 0xe0, 0xd4, 0xa6, 0xe4, 0xec, 0x4b, + 0x4e, 0x22, 0xbd, 0x8a, 0x89, 0xe0, 0x63, 0xfb, 0xde, 0xc8, 0x5e, 0x35, 0x7c, 0xf6, 0x82, 0xf4, + 0xaa, 0x97, 0x01, 0x35, 0x98, 0xf2, 0x1c, 0xb6, 0x5a, 0xbf, 0xf4, 0xce, 0xf8, 0x29, 0x2f, 0xba, + 0xb7, 0xe0, 0x4f, 0x79, 0x9c, 0xcc, 0xa6, 0x3c, 0x5d, 0x71, 0x1c, 0xba, 0x81, 0xbf, 0x74, 0x73, + 0xcc, 0x94, 0x37, 0xb0, 0x7e, 0xc7, 0xa6, 0x3c, 0xbd, 0xc1, 0x38, 0x89, 0xf7, 0x67, 0x7b, 0x97, + 0xc7, 0x70, 0xf4, 0x72, 0x7b, 0xa4, 0xf7, 0x17, 0x7b, 0xbb, 0x0d, 0xf1, 0xfe, 0xec, 0x48, 0x02, + 0xfa, 0x25, 0x98, 0xe5, 0xeb, 0x25, 0x4b, 0x77, 0xc6, 0xf8, 0xc3, 0xe1, 0x25, 0x2e, 0xd2, 0x1d, + 0x39, 0x0f, 0x33, 0x0e, 0x6c, 0x9d, 0x86, 0x19, 0xbf, 0xbb, 0x63, 0x8c, 0xc3, 0xd0, 0x52, 0x11, + 0x33, 0x0e, 0x01, 0x99, 0x94, 0xc6, 0x61, 0x6b, 0x0c, 0x4b, 0xbf, 0x30, 0xb2, 0x34, 0xd1, 0xc5, + 0x16, 0x52, 0x1a, 0xce, 0x43, 0x27, 0x0b, 0x3a, 0x57, 0x33, 0xed, 0xbc, 0x3b, 0x7a, 0xb2, 0x18, + 0x44, 0xad, 0x35, 0x6f, 0x37, 0x84, 0x69, 0xe5, 0x2f, 0x09, 0x70, 0x9d, 0xf5, 0x01, 0xba, 0x16, + 0xdc, 0x57, 0xfc, 0xa5, 0xfc, 0x10, 0x24, 0xbf, 0x4f, 0xc5, 0x7f, 0x70, 0xf1, 0x95, 0x67, 0xef, + 0x8d, 0x6f, 0xa9, 0xe3, 0xf2, 0x11, 0x65, 0x74, 0x18, 0x78, 0x59, 0x7a, 0x30, 0x52, 0x19, 0x51, + 0xc0, 0x45, 0x94, 0xc1, 0x79, 0xca, 0xb3, 0x7c, 0xb7, 0xd3, 0x3f, 0xd9, 0x58, 0x14, 0xc5, 0xcd, + 0x4c, 0xf6, 0xaa, 0xb8, 0xb4, 0x99, 0xc9, 0x5e, 0x13, 0x97, 0x37, 0x33, 0xd9, 0x37, 0xc4, 0x37, + 0x37, 0x33, 0xd9, 0x55, 0xf1, 0xfa, 0x66, 0x26, 0x2b, 0x89, 0x6f, 0x4b, 0xbf, 0x77, 0x0d, 0xe6, + 0x3d, 0xec, 0xc3, 0x70, 0xcd, 0x83, 0x30, 0xae, 0x59, 0x19, 0x85, 0x6b, 0x38, 0x5a, 0xe2, 0xc0, + 0xe6, 0x41, 0x18, 0xd8, 0xac, 0x8c, 0x02, 0x36, 0x01, 0x0f, 0x41, 0x36, 0xcd, 0x51, 0xc8, 0xe6, + 0xee, 0x04, 0xc8, 0xc6, 0x17, 0x35, 0x08, 0x6d, 0x36, 0x86, 0xa1, 0xcd, 0x3b, 0xe3, 0xa1, 0x8d, + 0x2f, 0x2a, 0x84, 0x6d, 0x3e, 0x1e, 0xc0, 0x36, 0x37, 0xc6, 0x60, 0x1b, 0x9f, 0xdf, 0x03, 0x37, + 0x5b, 0xb1, 0xe0, 0xe6, 0xd6, 0x79, 0xe0, 0xc6, 0x97, 0x13, 0x41, 0x37, 0xb5, 0x38, 0x74, 0x73, + 0xf3, 0x1c, 0x74, 0xe3, 0x8b, 0x0a, 0xc3, 0x9b, 0xad, 0x58, 0x78, 0x73, 0xeb, 0x3c, 0x78, 0x13, + 0x14, 0x2b, 0x8c, 0x6f, 0xbe, 0x19, 0xc1, 0x37, 0xab, 0x23, 0xf1, 0x8d, 0xcf, 0xcd, 0x00, 0xce, + 0x27, 0x83, 0x00, 0xe7, 0xc6, 0x18, 0x80, 0x13, 0x28, 0x96, 0x23, 0x9c, 0x5a, 0x1c, 0xc2, 0xb9, + 0x79, 0x0e, 0xc2, 0x09, 0x74, 0x11, 0x82, 0x38, 0x3b, 0xf1, 0x10, 0xe7, 0xf6, 0xb9, 0x10, 0xc7, + 0x97, 0x16, 0xc5, 0x38, 0xb5, 0x38, 0x8c, 0x73, 0xf3, 0x1c, 0x8c, 0x33, 0x50, 0x32, 0x06, 0x72, 0xd4, 0xb1, 0x20, 0xe7, 0xbd, 0x09, 0x41, 0x8e, 0x2f, 0x3a, 0x0e, 0xe5, 0xe8, 0xe3, 0x51, 0x4e, 0x69, 0x52, 0x94, 0xe3, 0xbf, 0x24, 0x16, 0xe6, 0xa8, 0x63, 0x61, 0xce, 0x7b, 0x13, 0xc2, 0x9c, - 0x81, 0x8a, 0x44, 0x71, 0xce, 0x4e, 0x3c, 0xce, 0xb9, 0x73, 0x2e, 0xce, 0x09, 0x5a, 0x31, 0x02, - 0x74, 0xd6, 0x42, 0x40, 0xe7, 0x9d, 0x11, 0x40, 0xc7, 0x67, 0x25, 0x48, 0xe7, 0x5b, 0x43, 0x48, - 0x47, 0x1a, 0x87, 0x74, 0x7c, 0x5e, 0x1f, 0xea, 0xd4, 0xe2, 0xa0, 0xce, 0xad, 0x73, 0xa0, 0x4e, - 0xd0, 0x6f, 0x42, 0x58, 0xe7, 0xf9, 0x08, 0xac, 0x73, 0xf7, 0x7c, 0xac, 0xe3, 0xcb, 0x1b, 0x00, - 0x3b, 0xea, 0x58, 0xb0, 0xf3, 0xde, 0x84, 0x60, 0x27, 0x68, 0xc1, 0x18, 0xb4, 0xf3, 0x41, 0x14, - 0xed, 0x5c, 0x1f, 0x8d, 0x76, 0x7c, 0x31, 0x1c, 0xee, 0x6c, 0xc5, 0xc2, 0x9d, 0xdb, 0xe7, 0xc1, - 0x9d, 0xc0, 0x9a, 0x85, 0xf1, 0xce, 0x4e, 0x3c, 0xde, 0xb9, 0x73, 0x2e, 0xde, 0x09, 0x3a, 0x52, - 0x04, 0xf0, 0x6c, 0xc5, 0x02, 0x9e, 0xdb, 0xe7, 0x01, 0x9e, 0x01, 0x53, 0xcb, 0x11, 0xcf, 0xcb, - 0x91, 0x88, 0xe7, 0xfe, 0x24, 0x88, 0xc7, 0x17, 0x3a, 0x04, 0x79, 0x3e, 0x1b, 0x0d, 0x79, 0x7e, + 0x81, 0x8a, 0x44, 0x71, 0xce, 0x4e, 0x3c, 0xce, 0xb9, 0x7d, 0x2e, 0xce, 0x09, 0x5a, 0x31, 0x02, + 0x74, 0xd6, 0x42, 0x40, 0xe7, 0xad, 0x11, 0x40, 0xc7, 0x67, 0x25, 0x48, 0xe7, 0x5b, 0x43, 0x48, + 0x47, 0x1a, 0x87, 0x74, 0x7c, 0x5e, 0x1f, 0xea, 0xd4, 0xe2, 0xa0, 0xce, 0xcd, 0x73, 0xa0, 0x4e, + 0xd0, 0x6f, 0x42, 0x58, 0xe7, 0xd9, 0x08, 0xac, 0x73, 0xe7, 0x7c, 0xac, 0xe3, 0xcb, 0x1b, 0x00, + 0x3b, 0xea, 0x58, 0xb0, 0xf3, 0xde, 0x84, 0x60, 0x27, 0x68, 0xc1, 0x18, 0xb4, 0xf3, 0x61, 0x14, + 0xed, 0x5c, 0x1f, 0x8d, 0x76, 0x7c, 0x31, 0x1c, 0xee, 0x6c, 0xc5, 0xc2, 0x9d, 0x5b, 0xe7, 0xc1, + 0x9d, 0xc0, 0x9a, 0x85, 0xf1, 0xce, 0x4e, 0x3c, 0xde, 0xb9, 0x7d, 0x2e, 0xde, 0x09, 0x3a, 0x52, + 0x04, 0xf0, 0x6c, 0xc5, 0x02, 0x9e, 0x5b, 0xe7, 0x01, 0x9e, 0x01, 0x53, 0xcb, 0x11, 0xcf, 0x8b, + 0x91, 0x88, 0xe7, 0xde, 0x24, 0x88, 0xc7, 0x17, 0x3a, 0x04, 0x79, 0x3e, 0x1f, 0x0d, 0x79, 0x7e, 0xe1, 0x02, 0xb7, 0x43, 0xc6, 0x62, 0x9e, 0x6f, 0x0d, 0x61, 0x1e, 0x69, 0x1c, 0xe6, 0x09, 0x46, - 0x86, 0x07, 0x7a, 0xaa, 0x31, 0x10, 0xe5, 0xdd, 0xf1, 0x10, 0x25, 0x98, 0xc8, 0x03, 0x8c, 0xf2, - 0xd1, 0x00, 0x46, 0xb9, 0x71, 0x6e, 0x20, 0x56, 0x08, 0xa4, 0x94, 0x87, 0x41, 0xca, 0xcd, 0xb1, - 0x20, 0xc5, 0x97, 0x10, 0xa0, 0x94, 0xad, 0x58, 0x94, 0x72, 0xfb, 0x3c, 0x94, 0x12, 0x74, 0x85, - 0x30, 0x4c, 0xd9, 0x89, 0x87, 0x29, 0x77, 0xce, 0x85, 0x29, 0x03, 0xd3, 0x96, 0x87, 0x53, 0x6a, - 0x71, 0x38, 0xe5, 0xd6, 0x39, 0x38, 0x25, 0x3c, 0x6d, 0xf9, 0x40, 0xa5, 0x39, 0x0a, 0xa8, 0xdc, - 0x9b, 0x00, 0xa8, 0x04, 0xce, 0xdc, 0x00, 0x52, 0xf9, 0x64, 0x10, 0xa9, 0x48, 0xe3, 0x90, 0x4a, - 0xd0, 0x89, 0x3c, 0xa8, 0xb2, 0x13, 0x0f, 0x55, 0xee, 0x9c, 0x0b, 0x55, 0xc2, 0xe3, 0x3a, 0x84, - 0x55, 0x3e, 0x19, 0xc4, 0x2a, 0xd2, 0x38, 0xac, 0x12, 0x94, 0xc7, 0x03, 0x2b, 0xb5, 0x38, 0xb0, - 0x72, 0xeb, 0x1c, 0xb0, 0x12, 0x32, 0xf7, 0x01, 0x5a, 0xf9, 0xab, 0x93, 0xa3, 0x95, 0x0f, 0xde, - 0x34, 0x4e, 0xe6, 0x7c, 0xb8, 0xf2, 0xc9, 0x20, 0x5c, 0x91, 0xc6, 0xc1, 0x95, 0x40, 0x1f, 0x17, - 0xc6, 0x2b, 0x6f, 0x8b, 0xef, 0x44, 0x50, 0xcb, 0x9f, 0xcc, 0xc0, 0x0c, 0xff, 0x52, 0x51, 0xe4, - 0x76, 0x1f, 0xe1, 0x4d, 0x6e, 0xf7, 0x41, 0x1b, 0xa4, 0x9b, 0x51, 0xb7, 0xe5, 0xfc, 0x3b, 0xe1, - 0x86, 0x6f, 0x2d, 0xe3, 0xac, 0x6f, 0x70, 0xcc, 0x16, 0x7d, 0x03, 0xe6, 0x7b, 0x0e, 0xb6, 0x95, - 0xae, 0x6d, 0x58, 0xb6, 0xe1, 0xb2, 0x03, 0x03, 0x42, 0x59, 0xfc, 0xe2, 0x74, 0x75, 0x6e, 0xcf, - 0xc1, 0xf6, 0x2e, 0xa7, 0xcb, 0x73, 0xbd, 0xd0, 0x93, 0xf7, 0x71, 0xa6, 0xe9, 0xc9, 0x3f, 0xce, - 0xf4, 0x1c, 0x44, 0xba, 0x1d, 0x1c, 0xb6, 0xf4, 0xec, 0x26, 0x9d, 0xf8, 0x49, 0x49, 0xd5, 0x43, - 0xc6, 0x9c, 0xde, 0xa8, 0x53, 0xb4, 0xa3, 0x44, 0xd4, 0x00, 0x7a, 0xc7, 0x85, 0xd2, 0xb5, 0xda, - 0x86, 0xd6, 0xa7, 0x13, 0x78, 0xf4, 0x56, 0xe1, 0xb1, 0x77, 0x7b, 0xbf, 0x54, 0x0d, 0x77, 0x97, - 0x72, 0xca, 0xf0, 0xda, 0xff, 0x8d, 0x1e, 0xc0, 0xe5, 0x8e, 0x7a, 0x42, 0xaf, 0x5b, 0x55, 0xbc, - 0x19, 0x99, 0x5e, 0x30, 0xc5, 0x3e, 0xd3, 0x84, 0x3a, 0xea, 0x09, 0xfd, 0x7c, 0x14, 0x4b, 0xa2, - 0xdf, 0x7e, 0xb8, 0x01, 0x73, 0x3c, 0x70, 0x9b, 0x7d, 0x1a, 0xa6, 0x48, 0x73, 0xf2, 0xef, 0x04, - 0xb0, 0xaf, 0xc3, 0xdc, 0x82, 0x82, 0x6e, 0x38, 0xae, 0x61, 0x6a, 0x2e, 0xbf, 0xc9, 0x95, 0xdd, - 0x85, 0x3a, 0xef, 0x51, 0xd9, 0x75, 0xad, 0x4d, 0x58, 0xd0, 0xda, 0x86, 0xef, 0xe7, 0xb0, 0x99, - 0x67, 0x61, 0x64, 0xbf, 0xae, 0xd0, 0xbc, 0x83, 0x9b, 0xa3, 0x45, 0x2d, 0x4a, 0x46, 0x15, 0x28, - 0xb6, 0x54, 0x17, 0xbf, 0x56, 0xfb, 0x8a, 0x77, 0x2e, 0x29, 0x4f, 0xcf, 0x62, 0xbe, 0x75, 0x76, - 0xba, 0x3a, 0xff, 0x84, 0x25, 0x0d, 0x1d, 0x4f, 0x9a, 0x6f, 0x85, 0x12, 0x74, 0x74, 0x07, 0x8a, - 0xaa, 0xd3, 0x37, 0x35, 0xda, 0x80, 0xd8, 0x74, 0x7a, 0x0e, 0x75, 0x53, 0xb3, 0x72, 0x81, 0x92, - 0x2b, 0x1e, 0x15, 0x7d, 0x04, 0xcb, 0xfc, 0xc2, 0xf6, 0xd7, 0xaa, 0xad, 0x2b, 0xb4, 0xd1, 0x83, - 0xe1, 0x21, 0x52, 0x9e, 0xab, 0xec, 0x82, 0x76, 0x92, 0x81, 0xb4, 0x74, 0xf8, 0x22, 0x54, 0x76, - 0xd1, 0x2b, 0x88, 0xf9, 0xcd, 0x4c, 0x76, 0x4e, 0x9c, 0xdf, 0xcc, 0x64, 0x0b, 0x62, 0x51, 0xfa, - 0x37, 0x02, 0x14, 0x89, 0xc5, 0x70, 0x1c, 0xc3, 0x32, 0x6b, 0x7e, 0x88, 0xa0, 0xdf, 0x6b, 0x05, - 0x7a, 0x44, 0xc4, 0x7f, 0x46, 0xab, 0xf4, 0x28, 0x0e, 0xf1, 0xcc, 0xfc, 0xcf, 0x34, 0xa4, 0x65, - 0x60, 0x24, 0x7a, 0x28, 0x62, 0x1d, 0x66, 0x1c, 0xab, 0x67, 0x6b, 0xde, 0xe5, 0xe1, 0xf7, 0x46, - 0x98, 0xa8, 0xd0, 0x0b, 0x4b, 0x0d, 0xca, 0x20, 0x73, 0x46, 0xa9, 0x04, 0x33, 0x8c, 0x82, 0x72, - 0x30, 0xfd, 0xac, 0x59, 0xab, 0xca, 0xe2, 0x14, 0x9a, 0x83, 0xec, 0x63, 0xf9, 0xd9, 0xb6, 0xd2, - 0x78, 0xfe, 0x54, 0x14, 0x50, 0x1e, 0x66, 0xe5, 0x67, 0xcf, 0x9a, 0xca, 0xd6, 0x0b, 0x31, 0x25, - 0xfd, 0xb1, 0x00, 0x73, 0x65, 0x76, 0x7b, 0x3a, 0xdb, 0xa7, 0xfe, 0x68, 0x60, 0x53, 0xf8, 0x5a, - 0x3c, 0x6a, 0x88, 0xdf, 0xa0, 0x5e, 0x87, 0x2c, 0xef, 0x9e, 0x5e, 0x84, 0xf7, 0xea, 0x68, 0x5f, - 0x91, 0x2e, 0xab, 0x78, 0x51, 0x3a, 0x1e, 0x1b, 0x6a, 0x80, 0xa8, 0x7a, 0x55, 0x54, 0x78, 0x49, - 0x46, 0xc7, 0xea, 0x0c, 0x68, 0xc3, 0xeb, 0x6c, 0x6a, 0x94, 0xfc, 0x61, 0xe6, 0xfb, 0x3f, 0x5c, - 0x9d, 0x92, 0xfe, 0x34, 0x03, 0xf3, 0xe5, 0xf0, 0x4d, 0xf1, 0xa8, 0x3e, 0x50, 0xd9, 0xb8, 0x19, - 0x30, 0xc2, 0x51, 0x1a, 0xf3, 0x0d, 0x8e, 0x5c, 0x70, 0x2d, 0x3d, 0xab, 0xfb, 0xf5, 0x31, 0xfb, - 0xe9, 0xe1, 0xca, 0x07, 0x8c, 0xcb, 0xff, 0x3e, 0xed, 0x1b, 0xf0, 0x12, 0x4c, 0xb3, 0x53, 0x44, - 0xc2, 0xd0, 0x01, 0x67, 0x6a, 0x42, 0x88, 0x87, 0x46, 0xd2, 0x65, 0x96, 0x8d, 0x18, 0xfc, 0xe6, - 0x1b, 0x5d, 0xe7, 0x16, 0xcc, 0x5b, 0x17, 0xff, 0xba, 0x5d, 0x8f, 0x5d, 0xe7, 0xf7, 0xff, 0x31, - 0x3c, 0x88, 0xbc, 0x0f, 0xfd, 0x2a, 0x14, 0x35, 0xab, 0xdd, 0x66, 0x13, 0x3b, 0x33, 0x5d, 0xc3, - 0x17, 0x7c, 0xd0, 0x22, 0xf0, 0x0f, 0x1a, 0x96, 0xfc, 0x0f, 0x1b, 0x96, 0x64, 0xfe, 0x61, 0xc3, - 0x50, 0xec, 0x76, 0xc1, 0x17, 0xc6, 0x2c, 0xde, 0x40, 0x18, 0xf9, 0xec, 0x9b, 0x84, 0x91, 0xb3, - 0xe0, 0x7b, 0xde, 0xf3, 0xfe, 0x40, 0xe0, 0x41, 0x3c, 0x4f, 0x2d, 0xeb, 0xa8, 0xe7, 0x07, 0x7e, - 0x2f, 0x87, 0x2f, 0xe7, 0x0b, 0x22, 0x5c, 0xe9, 0x09, 0x8d, 0xb8, 0xa9, 0x29, 0xf5, 0xe5, 0xa6, - 0xa6, 0x1b, 0x30, 0xd7, 0xb5, 0xf1, 0x01, 0x76, 0xb5, 0x43, 0xc5, 0xec, 0x75, 0xf8, 0xf1, 0x94, - 0xbc, 0x47, 0xdb, 0xe9, 0x75, 0xd0, 0x3d, 0x10, 0xfd, 0x2c, 0x1c, 0x6c, 0x79, 0x37, 0x43, 0x79, - 0x74, 0x0e, 0xcd, 0xa4, 0xff, 0x25, 0xc0, 0x62, 0xa4, 0x4e, 0x7c, 0x4c, 0x6d, 0x42, 0x5e, 0xf7, - 0x9d, 0x01, 0x67, 0x49, 0xb8, 0x60, 0xec, 0x73, 0x98, 0x19, 0x29, 0x70, 0xc5, 0x7b, 0x2d, 0xbd, - 0xca, 0x3d, 0x10, 0x9b, 0xba, 0xa0, 0xd8, 0xcb, 0x81, 0x9c, 0x8d, 0xd0, 0x0b, 0xfc, 0x41, 0x96, - 0x9e, 0x68, 0x90, 0x49, 0xff, 0x5b, 0x00, 0x91, 0xbe, 0xe0, 0x31, 0xc6, 0x7a, 0x22, 0x26, 0xd3, - 0x3b, 0x64, 0x90, 0x9a, 0xfc, 0x00, 0x4a, 0xe4, 0xf3, 0x13, 0xe9, 0x81, 0xcf, 0x4f, 0xc4, 0xd9, - 0xcf, 0xcc, 0x97, 0xb4, 0x9f, 0xd2, 0x0f, 0x05, 0x28, 0xf8, 0xd5, 0x66, 0xdf, 0x9d, 0x1b, 0x73, - 0xb1, 0xe4, 0x9b, 0x7d, 0x5b, 0xcd, 0xbb, 0x00, 0x63, 0xa2, 0x4f, 0xe1, 0x85, 0x2f, 0xc0, 0x60, - 0xdf, 0x04, 0xfb, 0x5b, 0x5e, 0x77, 0x24, 0x45, 0xac, 0x04, 0x37, 0x0f, 0xbc, 0xc1, 0x01, 0x1f, - 0x99, 0x7e, 0xb2, 0xd3, 0x6a, 0x1f, 0xb3, 0x3b, 0x4b, 0x26, 0xb2, 0xa5, 0x88, 0xc7, 0xc3, 0x01, - 0x5f, 0xeb, 0xd1, 0x9b, 0x0d, 0xfa, 0x31, 0x4f, 0xf6, 0xdb, 0x91, 0x1e, 0x87, 0x14, 0x48, 0x7b, - 0x14, 0xd1, 0xd2, 0x44, 0xf6, 0xdd, 0xd3, 0x12, 0xeb, 0x80, 0x3f, 0x0e, 0xb7, 0x04, 0x3b, 0xb9, - 0xfa, 0x08, 0xd2, 0xc7, 0x6a, 0x7b, 0x5c, 0x0c, 0x57, 0xa4, 0xe5, 0x64, 0x92, 0x1b, 0x3d, 0x8e, - 0x5c, 0xd8, 0x90, 0x1a, 0xbd, 0x10, 0x33, 0xac, 0xd2, 0xc8, 0xc5, 0x0e, 0xdf, 0x8c, 0x0e, 0xa0, - 0xb1, 0xaf, 0x0f, 0x8f, 0xa4, 0x0f, 0x33, 0x3f, 0xfa, 0xe1, 0xaa, 0x20, 0x7d, 0x0c, 0x48, 0xc6, - 0x0e, 0x76, 0x9f, 0xf7, 0x2c, 0x3b, 0xb8, 0xfc, 0x62, 0xf0, 0x30, 0xc1, 0x74, 0xfc, 0x61, 0x02, - 0xe9, 0x32, 0x2c, 0x46, 0xb8, 0x99, 0x05, 0x92, 0xbe, 0x09, 0xd7, 0x9e, 0x58, 0x8e, 0x63, 0x74, - 0x09, 0xe4, 0xa4, 0x43, 0x9d, 0xcc, 0x57, 0xbe, 0xcd, 0xcd, 0x76, 0x29, 0xca, 0x37, 0x99, 0x6d, - 0xca, 0xc9, 0xfe, 0xb3, 0xf4, 0xaf, 0x05, 0xb8, 0x3a, 0xcc, 0xc9, 0xb4, 0x1c, 0x77, 0x1e, 0x71, - 0x56, 0xb3, 0x82, 0xbb, 0xd9, 0xce, 0xef, 0xad, 0x5e, 0x76, 0xe2, 0xb6, 0xf2, 0x77, 0x2a, 0x1d, - 0x95, 0xda, 0x24, 0x7e, 0x54, 0xb8, 0xc0, 0xc9, 0xdb, 0x8c, 0x1a, 0x98, 0xa7, 0xcc, 0x64, 0xe6, - 0xa9, 0x09, 0xc5, 0x4d, 0xcb, 0x30, 0x89, 0x77, 0xec, 0xd5, 0x77, 0x1d, 0x0a, 0xfb, 0x86, 0xa9, - 0xda, 0x7d, 0xc5, 0x0b, 0x1d, 0x14, 0xce, 0x0b, 0x1d, 0x94, 0xe7, 0x19, 0x07, 0x7f, 0x94, 0x7e, - 0x2a, 0x80, 0x18, 0x88, 0xe5, 0x66, 0xfe, 0x6b, 0x00, 0x5a, 0xbb, 0xe7, 0xb8, 0xd8, 0xf6, 0x5a, - 0x69, 0x8e, 0x1d, 0x51, 0xa8, 0x30, 0x6a, 0x7d, 0x43, 0xce, 0xf1, 0x0c, 0x75, 0x1d, 0xdd, 0x8c, - 0xde, 0x3e, 0x30, 0x5d, 0x86, 0xb3, 0xa1, 0x3b, 0x07, 0x48, 0xb3, 0x3b, 0xae, 0x65, 0xfb, 0x48, - 0x91, 0x37, 0xbb, 0x77, 0x2f, 0x0b, 0x3d, 0x7f, 0x8c, 0xe9, 0x29, 0xa4, 0x02, 0xf1, 0x41, 0x8e, - 0xb1, 0x5f, 0xa5, 0xcc, 0xf9, 0x55, 0x62, 0x1c, 0x5e, 0x95, 0xfe, 0xb9, 0x00, 0xc5, 0x0a, 0x6b, - 0x0d, 0xbf, 0x85, 0xc7, 0x58, 0xb4, 0x0d, 0xc8, 0xba, 0x27, 0xa6, 0xd2, 0xc1, 0xfe, 0xa7, 0x44, - 0x2e, 0x70, 0x71, 0xda, 0xac, 0xcb, 0x1e, 0xe9, 0xd7, 0xe9, 0xf8, 0xa7, 0x91, 0xf9, 0x70, 0xb9, - 0x56, 0x62, 0xdf, 0x4e, 0x2e, 0x79, 0xdf, 0x4e, 0x2e, 0x6d, 0xf0, 0x0c, 0x6c, 0xa6, 0xf8, 0xfe, - 0x7f, 0x5e, 0x15, 0x64, 0x9f, 0x89, 0x39, 0x13, 0xf7, 0x1b, 0xa4, 0xd7, 0x0f, 0x4d, 0xf7, 0xa8, - 0x00, 0x10, 0xfa, 0x46, 0x0c, 0xff, 0x1a, 0xef, 0xfa, 0x86, 0xb2, 0xb7, 0x53, 0x79, 0xb6, 0xbd, - 0x5d, 0x6f, 0x36, 0xab, 0x1b, 0xa2, 0x80, 0x44, 0x98, 0x8b, 0x7c, 0x61, 0x26, 0xc5, 0xbe, 0xcf, - 0x7b, 0xff, 0x2f, 0x00, 0x04, 0x1f, 0xab, 0x22, 0xb2, 0xb6, 0xaa, 0x9f, 0x2a, 0x2f, 0xd6, 0x9f, - 0xee, 0x55, 0x1b, 0xe2, 0x14, 0x42, 0x50, 0x28, 0xaf, 0x37, 0x2b, 0x35, 0x45, 0xae, 0x36, 0x76, - 0x9f, 0xed, 0x34, 0xaa, 0xde, 0x77, 0x7d, 0xef, 0x6f, 0xc0, 0x5c, 0xf8, 0x3a, 0x18, 0xb4, 0x08, - 0xc5, 0x4a, 0xad, 0x5a, 0xd9, 0x52, 0x5e, 0xd4, 0xd7, 0x95, 0xe7, 0x7b, 0xd5, 0xbd, 0xaa, 0x38, - 0x45, 0x8b, 0x46, 0x89, 0x8f, 0xf7, 0x9e, 0x12, 0x04, 0x52, 0x84, 0x3c, 0x7b, 0xa6, 0x5f, 0xa3, - 0x11, 0x53, 0xf7, 0xb7, 0x21, 0x1f, 0xba, 0xa6, 0x96, 0xbc, 0x6e, 0x77, 0xaf, 0x51, 0x53, 0x9a, - 0xf5, 0xed, 0x6a, 0xa3, 0xb9, 0xbe, 0xbd, 0xcb, 0x64, 0x50, 0xda, 0x7a, 0xf9, 0x99, 0xdc, 0x14, - 0x05, 0xff, 0xb9, 0xf9, 0x6c, 0xaf, 0x52, 0xf3, 0xaa, 0x21, 0x65, 0xb2, 0x69, 0x31, 0x7d, 0xff, - 0x04, 0xae, 0x8e, 0xb8, 0x19, 0x85, 0x80, 0x9f, 0x3d, 0x93, 0x5e, 0xd9, 0x29, 0x4e, 0xa1, 0x79, - 0xc8, 0x91, 0xae, 0x47, 0xcf, 0x4d, 0x8a, 0x02, 0xca, 0x42, 0xe6, 0xd0, 0x75, 0xbb, 0x62, 0x0a, - 0xcd, 0x40, 0xca, 0x79, 0x24, 0xa6, 0xc9, 0xff, 0x96, 0x23, 0x66, 0x08, 0x96, 0x52, 0x3f, 0xef, - 0xd9, 0x58, 0x9c, 0x26, 0x58, 0xaa, 0xe7, 0x60, 0xfb, 0xc0, 0x68, 0x63, 0x71, 0x96, 0xb0, 0x98, - 0xbd, 0x76, 0x5b, 0xcc, 0x4a, 0x99, 0xec, 0x8c, 0x38, 0x73, 0xff, 0x06, 0x84, 0x0e, 0xa8, 0x23, - 0x80, 0x99, 0xa7, 0xaa, 0x8b, 0x1d, 0x57, 0x9c, 0x42, 0xb3, 0x90, 0x5e, 0x6f, 0xb7, 0x45, 0xe1, - 0xe1, 0x3f, 0xcb, 0x40, 0xd6, 0xfb, 0xd8, 0x0a, 0x7a, 0x0a, 0xd3, 0x14, 0x5f, 0xa0, 0xd5, 0xd1, - 0xc8, 0x83, 0x8e, 0xe3, 0xe5, 0xeb, 0xe7, 0x41, 0x13, 0x69, 0x0a, 0xfd, 0x45, 0xc8, 0x87, 0x3c, - 0x32, 0x34, 0x72, 0x05, 0x2d, 0xe2, 0x85, 0x2e, 0xdf, 0x3e, 0x2f, 0x9b, 0x2f, 0xff, 0x25, 0xe4, - 0x7c, 0x63, 0x8e, 0x6e, 0x8e, 0x33, 0xf5, 0x9e, 0xec, 0xf1, 0xf3, 0x01, 0x19, 0x76, 0xd2, 0xd4, - 0xfb, 0x02, 0xb2, 0x01, 0x0d, 0xdb, 0x5d, 0x14, 0x17, 0x37, 0x36, 0xd2, 0xb0, 0x2f, 0xdf, 0x9f, - 0x28, 0x77, 0xf0, 0x4e, 0xa2, 0xac, 0x60, 0xf2, 0x88, 0x57, 0xd6, 0xd0, 0xd4, 0x14, 0xaf, 0xac, - 0x98, 0x39, 0x68, 0x0a, 0x3d, 0x87, 0x0c, 0x31, 0x9a, 0x28, 0xce, 0xed, 0x1a, 0x30, 0xd2, 0xcb, - 0x37, 0xc7, 0xe6, 0xf1, 0x44, 0x96, 0xef, 0xfd, 0xe8, 0xbf, 0xac, 0x4c, 0xfd, 0xe8, 0x6c, 0x45, - 0xf8, 0xe9, 0xd9, 0x8a, 0xf0, 0x87, 0x67, 0x2b, 0xc2, 0x1f, 0x9d, 0xad, 0x08, 0xdf, 0xfb, 0xd9, - 0xca, 0xd4, 0x4f, 0x7f, 0xb6, 0x32, 0xf5, 0x87, 0x3f, 0x5b, 0x99, 0xfa, 0x6c, 0x96, 0x73, 0xef, - 0xcf, 0x50, 0x8b, 0xf2, 0xe8, 0xff, 0x05, 0x00, 0x00, 0xff, 0xff, 0x47, 0x4a, 0x72, 0x7d, 0xf4, - 0x7e, 0x00, 0x00, + 0x86, 0x07, 0x7a, 0xaa, 0x31, 0x10, 0xe5, 0x9d, 0xf1, 0x10, 0x25, 0x98, 0xc8, 0x03, 0x8c, 0xf2, + 0xf1, 0x00, 0x46, 0xb9, 0x71, 0x6e, 0x20, 0x56, 0x08, 0xa4, 0x94, 0x87, 0x41, 0xca, 0xdb, 0x63, + 0x41, 0x8a, 0x2f, 0x21, 0x40, 0x29, 0x5b, 0xb1, 0x28, 0xe5, 0xd6, 0x79, 0x28, 0x25, 0xe8, 0x0a, + 0x61, 0x98, 0xb2, 0x13, 0x0f, 0x53, 0x6e, 0x9f, 0x0b, 0x53, 0x06, 0xa6, 0x2d, 0x0f, 0xa7, 0xd4, + 0xe2, 0x70, 0xca, 0xcd, 0x73, 0x70, 0x4a, 0x78, 0xda, 0xf2, 0x81, 0x4a, 0x73, 0x14, 0x50, 0xb9, + 0x3b, 0x01, 0x50, 0x09, 0x9c, 0xb9, 0x01, 0xa4, 0xf2, 0xe9, 0x20, 0x52, 0x91, 0xc6, 0x21, 0x95, + 0xa0, 0x13, 0x79, 0x50, 0x65, 0x27, 0x1e, 0xaa, 0xdc, 0x3e, 0x17, 0xaa, 0x84, 0xc7, 0x75, 0x08, + 0xab, 0x7c, 0x3a, 0x88, 0x55, 0xa4, 0x71, 0x58, 0x25, 0x28, 0x8f, 0x07, 0x56, 0x6a, 0x71, 0x60, + 0xe5, 0xe6, 0x39, 0x60, 0x25, 0x64, 0xee, 0x03, 0xb4, 0xf2, 0x97, 0x27, 0x47, 0x2b, 0x1f, 0xbe, + 0x6e, 0x9c, 0xcc, 0xf9, 0x70, 0xe5, 0xd3, 0x41, 0xb8, 0x22, 0x8d, 0x83, 0x2b, 0x81, 0x3e, 0x2e, + 0x8c, 0x57, 0xde, 0x14, 0xdf, 0x8a, 0xa0, 0x96, 0x3f, 0x99, 0x81, 0x19, 0xfe, 0xa5, 0xa2, 0xc8, + 0xed, 0x3e, 0xc2, 0xeb, 0xdc, 0xee, 0x83, 0x36, 0x48, 0x37, 0xa3, 0x6e, 0xcb, 0xf9, 0x77, 0xc2, + 0x0d, 0xdf, 0x5a, 0xc6, 0x59, 0x5f, 0xe3, 0x98, 0x2d, 0xfa, 0x26, 0xcc, 0xf7, 0x1c, 0x6c, 0x2b, + 0x5d, 0xdb, 0xb0, 0x6c, 0xc3, 0x65, 0x07, 0x06, 0x84, 0xb2, 0xf8, 0xe5, 0xe9, 0xea, 0xdc, 0x9e, + 0x83, 0xed, 0x5d, 0x4e, 0x97, 0xe7, 0x7a, 0xa1, 0x27, 0xef, 0xe3, 0x4c, 0xd3, 0x93, 0x7f, 0x9c, + 0xe9, 0x19, 0x88, 0x74, 0x3b, 0x38, 0x6c, 0xe9, 0xd9, 0x4d, 0x3a, 0xf1, 0x93, 0x92, 0xaa, 0x87, + 0x8c, 0x39, 0xbd, 0x51, 0xa7, 0x68, 0x47, 0x89, 0xa8, 0x01, 0xf4, 0x8e, 0x0b, 0xa5, 0x6b, 0xb5, + 0x0d, 0xad, 0x4f, 0x27, 0xf0, 0xe8, 0xad, 0xc2, 0x63, 0xef, 0xf6, 0x7e, 0xa1, 0x1a, 0xee, 0x2e, + 0xe5, 0x94, 0xe1, 0x95, 0xff, 0x1b, 0xdd, 0x87, 0xcb, 0x1d, 0xf5, 0x84, 0x5e, 0xb7, 0xaa, 0x78, + 0x33, 0x32, 0xbd, 0x60, 0x8a, 0x7d, 0xa6, 0x09, 0x75, 0xd4, 0x13, 0xfa, 0xf9, 0x28, 0x96, 0x44, + 0xbf, 0xfd, 0x70, 0x03, 0xe6, 0x78, 0xe0, 0x36, 0xfb, 0x34, 0x4c, 0x91, 0xe6, 0xe4, 0xdf, 0x09, + 0x60, 0x5f, 0x87, 0xb9, 0x09, 0x05, 0xdd, 0x70, 0x5c, 0xc3, 0xd4, 0x5c, 0x7e, 0x93, 0x2b, 0xbb, + 0x0b, 0x75, 0xde, 0xa3, 0xb2, 0xeb, 0x5a, 0x9b, 0xb0, 0xa0, 0xb5, 0x0d, 0xdf, 0xcf, 0x61, 0x33, + 0xcf, 0xc2, 0xc8, 0x7e, 0x5d, 0xa1, 0x79, 0x07, 0x37, 0x47, 0x8b, 0x5a, 0x94, 0x8c, 0x2a, 0x50, + 0x6c, 0xa9, 0x2e, 0x7e, 0xa5, 0xf6, 0x15, 0xef, 0x5c, 0x52, 0x9e, 0x9e, 0xc5, 0x7c, 0xe3, 0xec, + 0x74, 0x75, 0xfe, 0x31, 0x4b, 0x1a, 0x3a, 0x9e, 0x34, 0xdf, 0x0a, 0x25, 0xe8, 0xe8, 0x36, 0x14, + 0x55, 0xa7, 0x6f, 0x6a, 0xb4, 0x01, 0xb1, 0xe9, 0xf4, 0x1c, 0xea, 0xa6, 0x66, 0xe5, 0x02, 0x25, + 0x57, 0x3c, 0x2a, 0xfa, 0x18, 0x96, 0xf9, 0x85, 0xed, 0xaf, 0x54, 0x5b, 0x57, 0x68, 0xa3, 0x07, + 0xc3, 0x43, 0xa4, 0x3c, 0x57, 0xd9, 0x05, 0xed, 0x24, 0x03, 0x69, 0xe9, 0xf0, 0x45, 0xa8, 0xec, + 0xa2, 0x57, 0x10, 0xf3, 0x9b, 0x99, 0xec, 0x9c, 0x38, 0xbf, 0x99, 0xc9, 0x16, 0xc4, 0xa2, 0xf4, + 0xaf, 0x04, 0x28, 0x12, 0x8b, 0xe1, 0x38, 0x86, 0x65, 0xd6, 0xfc, 0x10, 0x41, 0xbf, 0xd7, 0x0a, + 0xf4, 0x88, 0x88, 0xff, 0x8c, 0x56, 0xe9, 0x51, 0x1c, 0xe2, 0x99, 0xf9, 0x9f, 0x69, 0x48, 0xcb, + 0xc0, 0x48, 0xf4, 0x50, 0xc4, 0x3a, 0xcc, 0x38, 0x56, 0xcf, 0xd6, 0xbc, 0xcb, 0xc3, 0xef, 0x8e, + 0x30, 0x51, 0xa1, 0x17, 0x96, 0x1a, 0x94, 0x41, 0xe6, 0x8c, 0x52, 0x09, 0x66, 0x18, 0x05, 0xe5, + 0x60, 0xfa, 0x69, 0xb3, 0x56, 0x95, 0xc5, 0x29, 0x34, 0x07, 0xd9, 0x47, 0xf2, 0xd3, 0x6d, 0xa5, + 0xf1, 0xec, 0x89, 0x28, 0xa0, 0x3c, 0xcc, 0xca, 0x4f, 0x9f, 0x36, 0x95, 0xad, 0xe7, 0x62, 0x4a, + 0xfa, 0x63, 0x01, 0xe6, 0xca, 0xec, 0xf6, 0x74, 0xb6, 0x4f, 0xfd, 0xf1, 0xc0, 0xa6, 0xf0, 0xb5, + 0x78, 0xd4, 0x10, 0xbf, 0x41, 0xbd, 0x0e, 0x59, 0xde, 0x3d, 0xbd, 0x08, 0xef, 0xd5, 0xd1, 0xbe, + 0x22, 0x5d, 0x56, 0xf1, 0xa2, 0x74, 0x3c, 0x36, 0xd4, 0x00, 0x51, 0xf5, 0xaa, 0xa8, 0xf0, 0x92, + 0x8c, 0x8e, 0xd5, 0x19, 0xd0, 0x86, 0xd7, 0xd9, 0xd4, 0x28, 0xf9, 0xa3, 0xcc, 0xf7, 0x7f, 0xb8, + 0x3a, 0x25, 0xfd, 0x69, 0x06, 0xe6, 0xcb, 0xe1, 0x9b, 0xe2, 0x51, 0x7d, 0xa0, 0xb2, 0x71, 0x33, + 0x60, 0x84, 0xa3, 0x34, 0xe6, 0x1b, 0x1c, 0xb9, 0xe0, 0x5a, 0x7a, 0x56, 0xf7, 0xeb, 0x63, 0xf6, + 0xd3, 0xc3, 0x95, 0x0f, 0x18, 0x97, 0xff, 0x5d, 0xda, 0x37, 0xe0, 0x25, 0x98, 0x66, 0xa7, 0x88, + 0x84, 0xa1, 0x03, 0xce, 0xd4, 0x84, 0x10, 0x0f, 0x8d, 0xa4, 0xcb, 0x2c, 0x1b, 0x31, 0xf8, 0xcd, + 0xd7, 0xba, 0xce, 0x2d, 0x98, 0xb7, 0x2e, 0xfe, 0x75, 0xbb, 0x1e, 0xbb, 0xce, 0xef, 0xff, 0x61, + 0x78, 0x10, 0x79, 0x1f, 0xfa, 0x55, 0x28, 0x6a, 0x56, 0xbb, 0xcd, 0x26, 0x76, 0x66, 0xba, 0x86, + 0x2f, 0xf8, 0xa0, 0x45, 0xe0, 0x1f, 0x34, 0x2c, 0xf9, 0x1f, 0x36, 0x2c, 0xc9, 0xfc, 0xc3, 0x86, + 0xa1, 0xd8, 0xed, 0x82, 0x2f, 0x8c, 0x59, 0xbc, 0x81, 0x30, 0xf2, 0xd9, 0xd7, 0x09, 0x23, 0x67, + 0xc1, 0xf7, 0xbc, 0xe7, 0xfd, 0x81, 0xc0, 0x83, 0x78, 0x9e, 0x58, 0xd6, 0x51, 0xcf, 0x0f, 0xfc, + 0x5e, 0x0e, 0x5f, 0xce, 0x17, 0x44, 0xb8, 0xd2, 0x13, 0x1a, 0x71, 0x53, 0x53, 0xea, 0xab, 0x4d, + 0x4d, 0x37, 0x60, 0xae, 0x6b, 0xe3, 0x03, 0xec, 0x6a, 0x87, 0x8a, 0xd9, 0xeb, 0xf0, 0xe3, 0x29, + 0x79, 0x8f, 0xb6, 0xd3, 0xeb, 0xa0, 0xbb, 0x20, 0xfa, 0x59, 0x38, 0xd8, 0xf2, 0x6e, 0x86, 0xf2, + 0xe8, 0x1c, 0x9a, 0x49, 0xff, 0x53, 0x80, 0xc5, 0x48, 0x9d, 0xf8, 0x98, 0xda, 0x84, 0xbc, 0xee, + 0x3b, 0x03, 0xce, 0x92, 0x70, 0xc1, 0xd8, 0xe7, 0x30, 0x33, 0x52, 0xe0, 0x8a, 0xf7, 0x5a, 0x7a, + 0x95, 0x7b, 0x20, 0x36, 0x75, 0x41, 0xb1, 0x97, 0x03, 0x39, 0x1b, 0xa1, 0x17, 0xf8, 0x83, 0x2c, + 0x3d, 0xd1, 0x20, 0x93, 0xfe, 0x97, 0x00, 0x22, 0x7d, 0xc1, 0x23, 0x8c, 0xf5, 0x44, 0x4c, 0xa6, + 0x77, 0xc8, 0x20, 0x35, 0xf9, 0x01, 0x94, 0xc8, 0xe7, 0x27, 0xd2, 0x03, 0x9f, 0x9f, 0x88, 0xb3, + 0x9f, 0x99, 0xaf, 0x68, 0x3f, 0xa5, 0x1f, 0x0a, 0x50, 0xf0, 0xab, 0xcd, 0xbe, 0x3b, 0x37, 0xe6, + 0x62, 0xc9, 0xd7, 0xfb, 0xb6, 0x9a, 0x77, 0x01, 0xc6, 0x44, 0x9f, 0xc2, 0x0b, 0x5f, 0x80, 0xc1, + 0xbe, 0x09, 0xf6, 0x37, 0xbc, 0xee, 0x48, 0x8a, 0x58, 0x09, 0x6e, 0x1e, 0x78, 0x8d, 0x03, 0x3e, + 0x32, 0xfd, 0x64, 0xa7, 0xd5, 0x3e, 0x66, 0x77, 0x96, 0x4c, 0x64, 0x4b, 0x11, 0x8f, 0x87, 0x03, + 0xbe, 0xd6, 0xa3, 0x37, 0x1b, 0xf4, 0x63, 0x9e, 0xec, 0xb7, 0x23, 0x3d, 0x0a, 0x29, 0x90, 0xf6, + 0x28, 0xa2, 0xa5, 0x89, 0xec, 0xbb, 0xa7, 0x25, 0xd6, 0x01, 0x7f, 0x1c, 0x6e, 0x09, 0x76, 0x72, + 0xf5, 0x21, 0xa4, 0x8f, 0xd5, 0xf6, 0xb8, 0x18, 0xae, 0x48, 0xcb, 0xc9, 0x24, 0x37, 0x7a, 0x14, + 0xb9, 0xb0, 0x21, 0x35, 0x7a, 0x21, 0x66, 0x58, 0xa5, 0x91, 0x8b, 0x1d, 0x3e, 0x88, 0x0e, 0xa0, + 0xb1, 0xaf, 0x0f, 0x8f, 0xa4, 0x8f, 0x32, 0x3f, 0xfa, 0xe1, 0xaa, 0x20, 0x7d, 0x02, 0x48, 0xc6, + 0x0e, 0x76, 0x9f, 0xf5, 0x2c, 0x3b, 0xb8, 0xfc, 0x62, 0xf0, 0x30, 0xc1, 0x74, 0xfc, 0x61, 0x02, + 0xe9, 0x32, 0x2c, 0x46, 0xb8, 0x99, 0x05, 0x92, 0x3e, 0x80, 0x6b, 0x8f, 0x2d, 0xc7, 0x31, 0xba, + 0x04, 0x72, 0xd2, 0xa1, 0x4e, 0xe6, 0x2b, 0xdf, 0xe6, 0x66, 0xbb, 0x14, 0xe5, 0x9b, 0xcc, 0x36, + 0xe5, 0x64, 0xff, 0x59, 0xfa, 0x97, 0x02, 0x5c, 0x1d, 0xe6, 0x64, 0x5a, 0x8e, 0x3b, 0x8f, 0x38, + 0xab, 0x59, 0xc1, 0xdd, 0x6c, 0xe7, 0xf7, 0x56, 0x2f, 0x3b, 0x71, 0x5b, 0xf9, 0x3b, 0x95, 0x8e, + 0x4a, 0x6d, 0x12, 0x3f, 0x2a, 0x5c, 0xe0, 0xe4, 0x6d, 0x46, 0x0d, 0xcc, 0x53, 0x66, 0x32, 0xf3, + 0xd4, 0x84, 0xe2, 0xa6, 0x65, 0x98, 0xc4, 0x3b, 0xf6, 0xea, 0xbb, 0x0e, 0x85, 0x7d, 0xc3, 0x54, + 0xed, 0xbe, 0xe2, 0x85, 0x0e, 0x0a, 0xe7, 0x85, 0x0e, 0xca, 0xf3, 0x8c, 0x83, 0x3f, 0x4a, 0x3f, + 0x15, 0x40, 0x0c, 0xc4, 0x72, 0x33, 0xff, 0x2e, 0x80, 0xd6, 0xee, 0x39, 0x2e, 0xb6, 0xbd, 0x56, + 0x9a, 0x63, 0x47, 0x14, 0x2a, 0x8c, 0x5a, 0xdf, 0x90, 0x73, 0x3c, 0x43, 0x5d, 0x47, 0x6f, 0x47, + 0x6f, 0x1f, 0x98, 0x2e, 0xc3, 0xd9, 0xd0, 0x9d, 0x03, 0xa4, 0xd9, 0x1d, 0xd7, 0xb2, 0x7d, 0xa4, + 0xc8, 0x9b, 0xdd, 0xbb, 0x97, 0x85, 0x9e, 0x3f, 0xc6, 0xf4, 0x14, 0x52, 0x81, 0xf8, 0x20, 0xc7, + 0xd8, 0xaf, 0x52, 0xe6, 0xfc, 0x2a, 0x31, 0x0e, 0xaf, 0x4a, 0xff, 0x54, 0x80, 0x62, 0x85, 0xb5, + 0x86, 0xdf, 0xc2, 0x63, 0x2c, 0xda, 0x06, 0x64, 0xdd, 0x13, 0x53, 0xe9, 0x60, 0xff, 0x53, 0x22, + 0x17, 0xb8, 0x38, 0x6d, 0xd6, 0x65, 0x8f, 0xf4, 0xeb, 0x74, 0xfc, 0xd3, 0xc8, 0x7c, 0xb8, 0x5c, + 0x2b, 0xb1, 0x6f, 0x27, 0x97, 0xbc, 0x6f, 0x27, 0x97, 0x36, 0x78, 0x06, 0x36, 0x53, 0x7c, 0xff, + 0x3f, 0xad, 0x0a, 0xb2, 0xcf, 0xc4, 0x9d, 0x89, 0x7f, 0x2b, 0x40, 0xae, 0xa1, 0xa9, 0xa6, 0x1f, + 0xda, 0x6d, 0xf6, 0x3a, 0x74, 0x19, 0xcd, 0x3e, 0x50, 0x35, 0xac, 0x38, 0x18, 0x1f, 0x39, 0xfc, + 0xac, 0xe7, 0x82, 0xd9, 0xeb, 0xd4, 0xbd, 0x94, 0x06, 0x49, 0x40, 0xef, 0x02, 0xf2, 0xf3, 0x9b, + 0x6a, 0x9b, 0x67, 0x67, 0x17, 0x63, 0x89, 0x5e, 0x76, 0x53, 0x6d, 0xb3, 0xdc, 0xc3, 0xd2, 0x5d, + 0xdc, 0x65, 0xa1, 0xe9, 0x83, 0xd2, 0x49, 0xc2, 0xb0, 0x74, 0x9a, 0x3d, 0x33, 0x2c, 0x9d, 0xd0, + 0x59, 0x7d, 0xee, 0x35, 0xc8, 0x28, 0x1e, 0x72, 0x5f, 0x50, 0x01, 0x20, 0xf4, 0xcd, 0x1b, 0xfe, + 0x75, 0xe1, 0xf5, 0x0d, 0x65, 0x6f, 0xa7, 0xf2, 0x74, 0x7b, 0xbb, 0xde, 0x6c, 0x56, 0x37, 0x44, + 0x01, 0x89, 0x30, 0x17, 0xf9, 0x62, 0x4e, 0x8a, 0x7d, 0x6f, 0xf8, 0xde, 0x9f, 0x03, 0x08, 0x3e, + 0xbe, 0x45, 0x64, 0x6d, 0x55, 0x3f, 0x53, 0x9e, 0xaf, 0x3f, 0xd9, 0xab, 0x36, 0xc4, 0x29, 0x84, + 0xa0, 0x50, 0x5e, 0x6f, 0x56, 0x6a, 0x8a, 0x5c, 0x6d, 0xec, 0x3e, 0xdd, 0x69, 0x54, 0xbd, 0xef, + 0x14, 0xdf, 0xdb, 0x80, 0xb9, 0xf0, 0xf5, 0x36, 0x68, 0x11, 0x8a, 0x95, 0x5a, 0xb5, 0xb2, 0xa5, + 0x3c, 0xaf, 0xaf, 0x2b, 0xcf, 0xf6, 0xaa, 0x7b, 0x55, 0x71, 0x8a, 0x16, 0x8d, 0x12, 0x1f, 0xed, + 0x3d, 0x21, 0x88, 0xaa, 0x08, 0x79, 0xf6, 0x4c, 0xbf, 0xae, 0x23, 0xa6, 0xee, 0x6d, 0x43, 0x3e, + 0x74, 0xed, 0x2e, 0x79, 0xdd, 0xee, 0x5e, 0xa3, 0xa6, 0x34, 0xeb, 0xdb, 0xd5, 0x46, 0x73, 0x7d, + 0x7b, 0x97, 0xc9, 0xa0, 0xb4, 0xf5, 0xf2, 0x53, 0xb9, 0x29, 0x0a, 0xfe, 0x73, 0xf3, 0xe9, 0x5e, + 0xa5, 0xe6, 0x55, 0x43, 0xca, 0x64, 0xd3, 0x62, 0xfa, 0xde, 0x09, 0x5c, 0x1d, 0x71, 0xd3, 0x0b, + 0x01, 0x73, 0x7b, 0x26, 0xbd, 0x82, 0x54, 0x9c, 0x42, 0xf3, 0x90, 0x23, 0x43, 0x89, 0x9e, 0x03, + 0x15, 0x05, 0x94, 0x85, 0xcc, 0xa1, 0xeb, 0x76, 0xc5, 0x14, 0x9a, 0x81, 0x94, 0xf3, 0x50, 0x4c, + 0x93, 0xff, 0x2d, 0x47, 0xcc, 0x10, 0x6c, 0xa8, 0x7e, 0xd1, 0xb3, 0xb1, 0x38, 0x4d, 0xb0, 0x61, + 0xcf, 0xc1, 0xf6, 0x81, 0xd1, 0xc6, 0xe2, 0x2c, 0x61, 0x31, 0x7b, 0xed, 0xb6, 0x98, 0x95, 0x32, + 0xd9, 0x19, 0x71, 0xe6, 0xde, 0x0d, 0x08, 0x1d, 0xb8, 0x47, 0x00, 0x33, 0x4f, 0x54, 0x17, 0x3b, + 0xae, 0x38, 0x85, 0x66, 0x21, 0xbd, 0xde, 0x6e, 0x8b, 0xc2, 0x83, 0x7f, 0x92, 0x81, 0xac, 0xd7, + 0xac, 0xe8, 0x09, 0x4c, 0x53, 0xbc, 0x84, 0x56, 0x47, 0x23, 0x29, 0x6a, 0x97, 0x96, 0xaf, 0x9f, + 0x07, 0xb5, 0xa4, 0x29, 0xf4, 0xe7, 0x21, 0x1f, 0xf2, 0x30, 0xd1, 0xc8, 0x15, 0xc1, 0x88, 0x57, + 0xbd, 0x7c, 0xeb, 0xbc, 0x6c, 0xbe, 0xfc, 0x17, 0x90, 0xf3, 0x27, 0x27, 0xf4, 0xf6, 0xb8, 0xa9, + 0xcb, 0x93, 0x3d, 0x7e, 0x7e, 0x23, 0x66, 0x44, 0x9a, 0x7a, 0x5f, 0x40, 0x36, 0xa0, 0xe1, 0x79, + 0x04, 0xc5, 0xc5, 0xc1, 0x8d, 0x9c, 0xa8, 0x96, 0xef, 0x4d, 0x94, 0x3b, 0x78, 0x27, 0x51, 0x56, + 0x30, 0x19, 0xc6, 0x2b, 0x6b, 0x68, 0xaa, 0x8d, 0x57, 0x56, 0xcc, 0x9c, 0x3a, 0x85, 0x9e, 0x41, + 0x86, 0x4c, 0x02, 0x28, 0xce, 0x8d, 0x1c, 0x98, 0x74, 0x96, 0xdf, 0x1e, 0x9b, 0xc7, 0x13, 0x59, + 0xbe, 0xfb, 0xa3, 0xff, 0xbc, 0x32, 0xf5, 0xa3, 0xb3, 0x15, 0xe1, 0xa7, 0x67, 0x2b, 0xc2, 0x1f, + 0x9e, 0xad, 0x08, 0x7f, 0x74, 0xb6, 0x22, 0x7c, 0xef, 0x67, 0x2b, 0x53, 0x3f, 0xfd, 0xd9, 0xca, + 0xd4, 0x1f, 0xfe, 0x6c, 0x65, 0xea, 0xf3, 0x59, 0xce, 0xbd, 0x3f, 0x43, 0x2d, 0xe4, 0xc3, 0xff, + 0x1b, 0x00, 0x00, 0xff, 0xff, 0xc7, 0xe0, 0xa9, 0x41, 0xc4, 0x7f, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -16119,6 +16161,49 @@ func (m *ContentionEvent) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *ScanStats) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ScanStats) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ScanStats) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.NumInternalSteps != 0 { + i = encodeVarintApi(dAtA, i, uint64(m.NumInternalSteps)) + i-- + dAtA[i] = 0x20 + } + if m.NumInterfaceSteps != 0 { + i = encodeVarintApi(dAtA, i, uint64(m.NumInterfaceSteps)) + i-- + dAtA[i] = 0x18 + } + if m.NumInternalSeeks != 0 { + i = encodeVarintApi(dAtA, i, uint64(m.NumInternalSeeks)) + i-- + dAtA[i] = 0x10 + } + if m.NumInterfaceSeeks != 0 { + i = encodeVarintApi(dAtA, i, uint64(m.NumInterfaceSeeks)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + func encodeVarintApi(dAtA []byte, offset int, v uint64) int { offset -= sovApi(v) base := offset @@ -19373,6 +19458,27 @@ func (m *ContentionEvent) Size() (n int) { return n } +func (m *ScanStats) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.NumInterfaceSeeks != 0 { + n += 1 + sovApi(uint64(m.NumInterfaceSeeks)) + } + if m.NumInternalSeeks != 0 { + n += 1 + sovApi(uint64(m.NumInternalSeeks)) + } + if m.NumInterfaceSteps != 0 { + n += 1 + sovApi(uint64(m.NumInterfaceSteps)) + } + if m.NumInternalSteps != 0 { + n += 1 + sovApi(uint64(m.NumInternalSteps)) + } + return n +} + func sovApi(x uint64) (n int) { return (math_bits.Len64(x|1) + 6) / 7 } @@ -39374,6 +39480,132 @@ func (m *ContentionEvent) Unmarshal(dAtA []byte) error { } return nil } +func (m *ScanStats) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ScanStats: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ScanStats: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field NumInterfaceSeeks", wireType) + } + m.NumInterfaceSeeks = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.NumInterfaceSeeks |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field NumInternalSeeks", wireType) + } + m.NumInternalSeeks = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.NumInternalSeeks |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field NumInterfaceSteps", wireType) + } + m.NumInterfaceSteps = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.NumInterfaceSteps |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field NumInternalSteps", wireType) + } + m.NumInternalSteps = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.NumInternalSteps |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipApi(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthApi + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func skipApi(dAtA []byte) (n int, err error) { l := len(dAtA) iNdEx := 0 diff --git a/pkg/roachpb/api.proto b/pkg/roachpb/api.proto index 5ebe6346c4d5..2e9893818653 100644 --- a/pkg/roachpb/api.proto +++ b/pkg/roachpb/api.proto @@ -2245,3 +2245,14 @@ message ContentionEvent { google.protobuf.Duration duration = 3 [(gogoproto.nullable) = false, (gogoproto.stdduration) = true]; } + +// ScanStats is a message that will be attached to BatchResponses containing +// information about what happened during each scan and get in the request. +message ScanStats { + option (gogoproto.goproto_stringer) = false; + + uint64 num_interface_seeks = 1; + uint64 num_internal_seeks = 2; + uint64 num_interface_steps = 3; + uint64 num_internal_steps = 4; +} diff --git a/pkg/sql/colexecop/operator.go b/pkg/sql/colexecop/operator.go index 3ac46e47db84..fe1083797f6f 100644 --- a/pkg/sql/colexecop/operator.go +++ b/pkg/sql/colexecop/operator.go @@ -72,6 +72,9 @@ type KVReader interface { // GetCumulativeContentionTime returns the amount of time KV reads spent // contending. It must be safe for concurrent use. GetCumulativeContentionTime() time.Duration + // GetScanStats returns statistics about the scan that happened during the + // KV reads. It must be safe for concurrent use. + GetScanStats() execinfra.ScanStats } // ZeroInputNode is an execinfra.OpNode with no inputs. diff --git a/pkg/sql/colfetcher/colbatch_scan.go b/pkg/sql/colfetcher/colbatch_scan.go index 68345fa622c0..eec85318fd27 100644 --- a/pkg/sql/colfetcher/colbatch_scan.go +++ b/pkg/sql/colfetcher/colbatch_scan.go @@ -156,6 +156,11 @@ func (s *ColBatchScan) GetCumulativeContentionTime() time.Duration { return execinfra.GetCumulativeContentionTime(s.Ctx) } +// GetScanStats is part of the colexecop.KVReader interface. +func (s *ColBatchScan) GetScanStats() execinfra.ScanStats { + return execinfra.GetScanStats(s.Ctx) +} + var colBatchScanPool = sync.Pool{ New: func() interface{} { return &ColBatchScan{} diff --git a/pkg/sql/colflow/stats.go b/pkg/sql/colflow/stats.go index bd1e47b78d90..f2d73d5b3dec 100644 --- a/pkg/sql/colflow/stats.go +++ b/pkg/sql/colflow/stats.go @@ -19,6 +19,7 @@ import ( "github.com/cockroachdb/cockroach/pkg/sql/colexecerror" "github.com/cockroachdb/cockroach/pkg/sql/colexecop" "github.com/cockroachdb/cockroach/pkg/sql/colflow/colrpc" + "github.com/cockroachdb/cockroach/pkg/sql/execinfra" "github.com/cockroachdb/cockroach/pkg/sql/execinfrapb" "github.com/cockroachdb/cockroach/pkg/util" "github.com/cockroachdb/cockroach/pkg/util/mon" @@ -212,6 +213,8 @@ func (vsc *vectorizedStatsCollectorImpl) GetStats() *execinfrapb.ComponentStats s.KV.TuplesRead.Set(uint64(vsc.kvReader.GetRowsRead())) s.KV.BytesRead.Set(uint64(vsc.kvReader.GetBytesRead())) s.KV.ContentionTime.Set(vsc.kvReader.GetCumulativeContentionTime()) + scanStats := vsc.kvReader.GetScanStats() + execinfra.PopulateKVMVCCStats(&s.KV, &scanStats) } else { s.Exec.ExecTime.Set(time) } diff --git a/pkg/sql/execinfra/stats.go b/pkg/sql/execinfra/stats.go index 2873b5595f3c..cf43039a55ea 100644 --- a/pkg/sql/execinfra/stats.go +++ b/pkg/sql/execinfra/stats.go @@ -15,6 +15,8 @@ import ( "time" "github.com/cockroachdb/cockroach/pkg/roachpb" + "github.com/cockroachdb/cockroach/pkg/sql/execinfrapb" + "github.com/cockroachdb/cockroach/pkg/util/optional" "github.com/cockroachdb/cockroach/pkg/util/tracing" pbtypes "github.com/gogo/protobuf/types" ) @@ -50,3 +52,44 @@ func GetCumulativeContentionTime(ctx context.Context) time.Duration { } return cumulativeContentionTime } + +type ScanStats struct { + NumInterfaceSteps uint64 + NumInternalSteps uint64 + NumInterfaceSeeks uint64 + NumInternalSeeks uint64 +} + +// PopulateKVMVCCStats adds data from the input ScanStats to the input KVStats. +func PopulateKVMVCCStats(kvStats *execinfrapb.KVStats, ss *ScanStats) { + kvStats.NumInterfaceSteps = optional.MakeUint(ss.NumInterfaceSteps) + kvStats.NumInternalSteps = optional.MakeUint(ss.NumInternalSteps) + kvStats.NumInterfaceSeeks = optional.MakeUint(ss.NumInterfaceSeeks) + kvStats.NumInternalSeeks = optional.MakeUint(ss.NumInternalSeeks) +} + +// GetScanStats is a helper function to calculate scan stats from the tracing +// span from the context. +func GetScanStats(ctx context.Context) (ss ScanStats) { + recording := GetTraceData(ctx) + if recording == nil { + return ScanStats{} + } + var ev roachpb.ScanStats + for i := range recording { + recording[i].Structured(func(any *pbtypes.Any, _ time.Time) { + if !pbtypes.Is(any, &ev) { + return + } + if err := pbtypes.UnmarshalAny(any, &ev); err != nil { + return + } + + ss.NumInterfaceSteps += ev.NumInterfaceSteps + ss.NumInternalSteps += ev.NumInternalSteps + ss.NumInterfaceSeeks += ev.NumInterfaceSeeks + ss.NumInternalSeeks += ev.NumInternalSeeks + }) + } + return ss +} diff --git a/pkg/sql/execinfrapb/component_stats.go b/pkg/sql/execinfrapb/component_stats.go index 6175695a7d77..adec7c90a051 100644 --- a/pkg/sql/execinfrapb/component_stats.go +++ b/pkg/sql/execinfrapb/component_stats.go @@ -151,6 +151,12 @@ func (s *ComponentStats) formatStats(fn func(suffix string, value interface{})) if s.KV.BytesRead.HasValue() { fn("KV bytes read", humanize.IBytes(s.KV.BytesRead.Value())) } + if s.KV.NumInterfaceSteps.HasValue() { + fn("MVCC step count", humanizeutil.Count(s.KV.NumInterfaceSeeks.Value())) + } + if s.KV.NumInterfaceSeeks.HasValue() { + fn("MVCC seek count", humanizeutil.Count(s.KV.NumInterfaceSeeks.Value())) + } // Exec stats. if s.Exec.ExecTime.HasValue() { @@ -217,6 +223,18 @@ func (s *ComponentStats) Union(other *ComponentStats) *ComponentStats { if !result.KV.ContentionTime.HasValue() { result.KV.ContentionTime = other.KV.ContentionTime } + if !result.KV.NumInterfaceSteps.HasValue() { + result.KV.NumInterfaceSteps = other.KV.NumInterfaceSteps + } + if !result.KV.NumInternalSteps.HasValue() { + result.KV.NumInternalSteps = other.KV.NumInternalSteps + } + if !result.KV.NumInterfaceSeeks.HasValue() { + result.KV.NumInterfaceSeeks = other.KV.NumInterfaceSeeks + } + if !result.KV.NumInternalSeeks.HasValue() { + result.KV.NumInternalSeeks = other.KV.NumInternalSeeks + } if !result.KV.TuplesRead.HasValue() { result.KV.TuplesRead = other.KV.TuplesRead } @@ -306,6 +324,10 @@ func (s *ComponentStats) MakeDeterministic() { // KV. timeVal(&s.KV.KVTime) timeVal(&s.KV.ContentionTime) + resetUint(&s.KV.NumInterfaceSteps) + resetUint(&s.KV.NumInternalSteps) + resetUint(&s.KV.NumInterfaceSeeks) + resetUint(&s.KV.NumInternalSeeks) if s.KV.BytesRead.HasValue() { // BytesRead is overridden to a useful value for tests. s.KV.BytesRead.Set(8 * s.KV.TuplesRead.Value()) diff --git a/pkg/sql/execinfrapb/component_stats.pb.go b/pkg/sql/execinfrapb/component_stats.pb.go index 9cc827378011..147c0d27a80f 100644 --- a/pkg/sql/execinfrapb/component_stats.pb.go +++ b/pkg/sql/execinfrapb/component_stats.pb.go @@ -296,7 +296,11 @@ type KVStats struct { KVTime optional.Duration `protobuf:"bytes,3,opt,name=kv_time,json=kvTime" json:"kv_time"` // ContentionTime is the cumulative time a KV request spent contending with // other transactions. This time accounts for a portion of KVTime above. - ContentionTime optional.Duration `protobuf:"bytes,4,opt,name=contention_time,json=contentionTime" json:"contention_time"` + ContentionTime optional.Duration `protobuf:"bytes,4,opt,name=contention_time,json=contentionTime" json:"contention_time"` + NumInterfaceSteps optional.Uint `protobuf:"bytes,5,opt,name=num_interface_steps,json=numInterfaceSteps" json:"num_interface_steps"` + NumInternalSteps optional.Uint `protobuf:"bytes,6,opt,name=num_internal_steps,json=numInternalSteps" json:"num_internal_steps"` + NumInterfaceSeeks optional.Uint `protobuf:"bytes,7,opt,name=num_interface_seeks,json=numInterfaceSeeks" json:"num_interface_seeks"` + NumInternalSeeks optional.Uint `protobuf:"bytes,8,opt,name=num_internal_seeks,json=numInternalSeeks" json:"num_internal_seeks"` } func (m *KVStats) Reset() { *m = KVStats{} } @@ -457,70 +461,74 @@ func init() { } var fileDescriptor_11ea9e8b662a649a = []byte{ - // 1005 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x96, 0x4f, 0x6f, 0xe2, 0xc6, - 0x1b, 0xc7, 0xb1, 0x21, 0x26, 0x3c, 0x2c, 0x84, 0x9d, 0xdf, 0x1e, 0x50, 0xf4, 0x2b, 0xc9, 0xd2, - 0xae, 0x84, 0x2a, 0x15, 0x54, 0x0e, 0xed, 0x69, 0x0f, 0x21, 0xb0, 0x5d, 0x36, 0xc9, 0x92, 0x35, - 0x24, 0x95, 0xf6, 0x62, 0x0d, 0xf6, 0x84, 0x58, 0xf8, 0x1f, 0xf6, 0x98, 0x38, 0x7d, 0x15, 0x3d, - 0xb5, 0xc7, 0xbe, 0x86, 0x5e, 0xfb, 0x0a, 0x72, 0xdc, 0x43, 0x0f, 0xab, 0x1e, 0xa2, 0x2e, 0xe9, - 0x5b, 0xe8, 0xa5, 0xa7, 0x6a, 0xc6, 0xc6, 0x38, 0xa9, 0xd0, 0xe2, 0xaa, 0xb7, 0xc1, 0x9e, 0xef, - 0x67, 0x9e, 0x79, 0x9e, 0xe7, 0xfb, 0x18, 0x78, 0xe6, 0xcd, 0x8c, 0x16, 0x09, 0x88, 0xaa, 0x5b, - 0x17, 0x2e, 0x76, 0xc6, 0x2d, 0xd5, 0x36, 0x1d, 0xdb, 0x22, 0x16, 0x55, 0x3c, 0x8a, 0xa9, 0xd7, - 0x74, 0x5c, 0x9b, 0xda, 0xa8, 0xaa, 0xda, 0xea, 0xd4, 0xb5, 0xb1, 0x7a, 0xd9, 0xf4, 0x66, 0x46, - 0x53, 0xd3, 0x3d, 0xea, 0xcd, 0x0c, 0xd7, 0xb7, 0x76, 0x9f, 0x4c, 0xec, 0x89, 0xcd, 0x37, 0xb5, - 0xd8, 0x2a, 0xdc, 0xbf, 0xfb, 0x7f, 0x9f, 0xea, 0x46, 0xcb, 0x76, 0xa8, 0x6e, 0x5b, 0x78, 0xb5, - 0x08, 0xdf, 0xd6, 0x7f, 0x15, 0xa1, 0x78, 0xb8, 0x3c, 0xa7, 0xdf, 0x45, 0x5f, 0x42, 0xfe, 0xc2, - 0xb0, 0xaf, 0x14, 0x5d, 0xab, 0x0a, 0xfb, 0x42, 0xe3, 0x51, 0xa7, 0x7a, 0x73, 0xbb, 0x97, 0xf9, - 0xed, 0x76, 0x4f, 0x7a, 0x61, 0xd8, 0x57, 0xfd, 0xee, 0x22, 0x5e, 0xc9, 0x12, 0xdb, 0xd8, 0xd7, - 0x50, 0x17, 0x72, 0xf4, 0xda, 0x21, 0x55, 0x71, 0x5f, 0x68, 0x94, 0xdb, 0x9f, 0x37, 0xd7, 0xc5, - 0xd7, 0x4c, 0x9c, 0xd3, 0x1c, 0x5d, 0x3b, 0xa4, 0x93, 0x63, 0x6c, 0x99, 0xab, 0xd1, 0x2e, 0x88, - 0xba, 0x56, 0xcd, 0xee, 0x0b, 0x8d, 0xad, 0x0e, 0xb0, 0xe7, 0x8b, 0xdb, 0x3d, 0xb1, 0xdf, 0x95, - 0x45, 0x5d, 0x43, 0x01, 0xec, 0x78, 0x33, 0x43, 0xd1, 0x2d, 0x8f, 0x62, 0x4b, 0x25, 0x2c, 0xb8, - 0x1c, 0xdf, 0x78, 0x1a, 0x6d, 0x2c, 0x0d, 0xdf, 0x1c, 0xf7, 0xa3, 0xb7, 0xfd, 0xee, 0x5f, 0xb7, - 0x7b, 0x5f, 0x4f, 0x74, 0x7a, 0xe9, 0x8f, 0x9b, 0xaa, 0x6d, 0xb6, 0xe2, 0x78, 0xb4, 0xf1, 0x6a, - 0xdd, 0x72, 0xa6, 0x93, 0xd6, 0x18, 0x7b, 0xa4, 0x79, 0x4f, 0x2a, 0x97, 0xbc, 0x99, 0x11, 0xff, - 0xd4, 0xea, 0x5f, 0x41, 0x8e, 0x45, 0x8a, 0x0a, 0xb0, 0x75, 0xf6, 0x7a, 0xd8, 0x1b, 0x55, 0x32, - 0xa8, 0x04, 0x85, 0x53, 0x79, 0x70, 0xd8, 0x1b, 0x0e, 0x07, 0x72, 0x45, 0x40, 0x00, 0xd2, 0x70, - 0x24, 0xf7, 0x0e, 0x4e, 0x2a, 0x22, 0xda, 0x86, 0xdc, 0x8b, 0xe3, 0xc1, 0xb7, 0x95, 0x6c, 0xfd, - 0x97, 0x1c, 0x94, 0xe3, 0xeb, 0x0e, 0x59, 0xf5, 0x50, 0x1f, 0x0a, 0x71, 0x41, 0x79, 0x6e, 0x8b, - 0xed, 0x67, 0x1b, 0xe5, 0x2a, 0x4a, 0xd3, 0x4a, 0x8d, 0x7a, 0x20, 0x59, 0x84, 0x2a, 0x6e, 0xc0, - 0x73, 0x5e, 0x6c, 0x37, 0xd6, 0x73, 0x5e, 0x13, 0x7a, 0x65, 0xbb, 0x53, 0x39, 0xe0, 0x41, 0x44, - 0xa8, 0x2d, 0x8b, 0x50, 0x39, 0x58, 0x62, 0x68, 0xc0, 0xd3, 0xbe, 0x09, 0x66, 0xf4, 0x0f, 0xcc, - 0x28, 0x40, 0xcf, 0x41, 0x9c, 0xce, 0x79, 0x41, 0x8a, 0xed, 0xa7, 0xeb, 0x11, 0x47, 0xe7, 0xa1, - 0x36, 0x2e, 0xee, 0xd1, 0xb9, 0x2c, 0x4e, 0xe7, 0xe8, 0x39, 0xe4, 0x58, 0xd3, 0x57, 0xb7, 0x38, - 0xe0, 0xd3, 0xf5, 0x80, 0x5e, 0x40, 0xd4, 0xe4, 0xf1, 0x5c, 0x86, 0x0e, 0x41, 0xb2, 0x7d, 0xea, - 0xf8, 0xb4, 0x2a, 0x7d, 0x2c, 0xa7, 0x03, 0xbe, 0x2f, 0x89, 0x88, 0xa4, 0xa8, 0x03, 0x92, 0x6e, - 0x39, 0x3e, 0xf5, 0xaa, 0xf9, 0xfd, 0x6c, 0xa3, 0xd8, 0xfe, 0x6c, 0x3d, 0xa4, 0x6f, 0x3d, 0x64, - 0x84, 0x4a, 0xf4, 0x12, 0x80, 0x3b, 0x87, 0x7b, 0xb5, 0xba, 0xfd, 0xb1, 0xdb, 0x30, 0x13, 0x25, - 0x31, 0x85, 0x8b, 0xe5, 0x83, 0xfa, 0x0f, 0x02, 0xc0, 0xea, 0x18, 0xd4, 0x01, 0xb0, 0x7c, 0x53, - 0xa1, 0xbe, 0x63, 0x10, 0x2f, 0xea, 0x9c, 0x4f, 0x12, 0x60, 0xe6, 0xef, 0x66, 0x6c, 0xeb, 0x33, - 0xdd, 0xa2, 0x4b, 0xa4, 0xe5, 0x9b, 0x23, 0xae, 0x42, 0x5d, 0x28, 0x5c, 0x61, 0x9d, 0x2a, 0x54, - 0x37, 0x49, 0xd4, 0x34, 0x4f, 0xd7, 0x22, 0xba, 0xbe, 0x8b, 0xd9, 0x32, 0xc2, 0x6c, 0x33, 0xe5, - 0x48, 0x37, 0x49, 0xfd, 0x43, 0x16, 0xca, 0xf7, 0x1b, 0x0a, 0x1d, 0x40, 0xde, 0xc0, 0x94, 0x58, - 0xea, 0x75, 0x14, 0xd9, 0xc6, 0xd8, 0xa5, 0xee, 0xbf, 0x89, 0x0d, 0xbd, 0x85, 0x27, 0x1a, 0xf1, - 0x88, 0xab, 0x63, 0x43, 0xff, 0x8e, 0x6f, 0x09, 0x81, 0xd9, 0x74, 0xc0, 0xff, 0x3d, 0x80, 0x70, - 0xf6, 0x31, 0xec, 0x84, 0xd9, 0x57, 0x5c, 0xa2, 0x12, 0x7d, 0x4e, 0xb4, 0xa8, 0xdd, 0x37, 0x2a, - 0x43, 0x39, 0xd4, 0xca, 0x91, 0x14, 0xbd, 0x82, 0xf2, 0xf8, 0x9a, 0x26, 0x61, 0x5b, 0x9b, 0xc3, - 0x4a, 0x5c, 0x1a, 0xb3, 0x4e, 0xe1, 0xb1, 0x49, 0x3c, 0x0f, 0x4f, 0x92, 0x38, 0x69, 0x73, 0x5c, - 0x65, 0xa9, 0x5e, 0x12, 0xeb, 0x7f, 0x08, 0x71, 0x8d, 0x23, 0xb7, 0xa3, 0x2e, 0x14, 0xa3, 0xeb, - 0x7b, 0xab, 0xd9, 0xb5, 0x11, 0x1e, 0x42, 0xdd, 0x90, 0x0d, 0xad, 0x0e, 0x40, 0x78, 0x6d, 0x0e, - 0x11, 0x53, 0xb4, 0x31, 0x97, 0x71, 0xc6, 0x4b, 0x28, 0xc5, 0xd7, 0xe5, 0x98, 0xec, 0xe6, 0x98, - 0x47, 0x4b, 0x25, 0x23, 0xd5, 0x7f, 0x16, 0x21, 0x1f, 0x4d, 0xa4, 0x55, 0x64, 0x2e, 0xc1, 0x5a, - 0x2a, 0x83, 0x45, 0xc5, 0xc0, 0x5a, 0x22, 0x47, 0x1c, 0x22, 0xa6, 0xce, 0x11, 0xa7, 0xbc, 0x82, - 0xfc, 0x74, 0x9e, 0xb2, 0x6f, 0xcb, 0xd1, 0x3c, 0x95, 0x8e, 0xce, 0x59, 0xb3, 0xca, 0xd2, 0x74, - 0xce, 0x9b, 0xf6, 0x14, 0x76, 0x54, 0xdb, 0xa2, 0xc4, 0x5a, 0x79, 0x21, 0x97, 0xce, 0x0b, 0xe5, - 0x95, 0x9e, 0xdb, 0xff, 0x4f, 0x01, 0x0a, 0xf1, 0x10, 0x66, 0xb6, 0x65, 0x03, 0x38, 0x24, 0xa7, - 0xf4, 0xfe, 0x36, 0x53, 0xf2, 0x28, 0x07, 0xf0, 0xd8, 0xc4, 0x81, 0x82, 0x0d, 0xc3, 0x56, 0x31, - 0x25, 0x9a, 0x62, 0x12, 0x33, 0x4d, 0xf6, 0x76, 0x4c, 0x1c, 0x1c, 0x2c, 0xc5, 0x27, 0xc4, 0x44, - 0x6f, 0x00, 0xdd, 0x07, 0x6a, 0xba, 0x37, 0x4d, 0xd3, 0x27, 0x95, 0x24, 0xb1, 0xab, 0x7b, 0xd3, - 0xfa, 0x8f, 0x02, 0x14, 0x13, 0xdf, 0x0e, 0x56, 0x6b, 0x36, 0x90, 0xc7, 0x98, 0xaa, 0x97, 0xe9, - 0x26, 0x32, 0x1b, 0xe4, 0x9d, 0x50, 0xf6, 0x60, 0xac, 0x8b, 0xff, 0x66, 0xac, 0xd7, 0x7f, 0x12, - 0xa0, 0x10, 0x7f, 0x48, 0xd0, 0x37, 0x50, 0x62, 0x57, 0x37, 0x89, 0xa9, 0xf8, 0xac, 0xd3, 0xd3, - 0x44, 0x56, 0x34, 0x71, 0x70, 0x42, 0xcc, 0x33, 0xa6, 0x43, 0x7d, 0x28, 0x33, 0x10, 0xcb, 0x5c, - 0x44, 0x12, 0xd3, 0xf8, 0x0c, 0x07, 0x2c, 0x6d, 0x1c, 0xd5, 0xf9, 0xe2, 0xe6, 0x43, 0x2d, 0x73, - 0xb3, 0xa8, 0x09, 0xef, 0x16, 0x35, 0xe1, 0xfd, 0xa2, 0x26, 0xfc, 0xbe, 0xa8, 0x09, 0xdf, 0xdf, - 0xd5, 0x32, 0xef, 0xee, 0x6a, 0x99, 0xf7, 0x77, 0xb5, 0xcc, 0xdb, 0x62, 0xe2, 0x2f, 0xef, 0xdf, - 0x01, 0x00, 0x00, 0xff, 0xff, 0xe0, 0x60, 0x3a, 0x85, 0x04, 0x0b, 0x00, 0x00, + // 1066 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x97, 0x4d, 0x4f, 0xe3, 0x46, + 0x18, 0xc7, 0x63, 0xe7, 0x05, 0xf2, 0x64, 0x13, 0xb2, 0xb3, 0x7b, 0x88, 0x50, 0x1b, 0xd8, 0xb4, + 0x2b, 0xa1, 0x4a, 0x4d, 0x54, 0x0e, 0xed, 0x69, 0x0f, 0x84, 0xb0, 0xdd, 0x2c, 0xb0, 0xb0, 0x4e, + 0xa0, 0xd2, 0x5e, 0xac, 0x89, 0x3d, 0x80, 0x15, 0x7b, 0x6c, 0xec, 0x71, 0x30, 0xbd, 0xf5, 0x1b, + 0xf4, 0xd4, 0x1e, 0xfb, 0x3d, 0xfa, 0x09, 0x38, 0xee, 0xa1, 0x87, 0x55, 0x0f, 0xa8, 0x1b, 0xfa, + 0x15, 0x7a, 0xe9, 0xa9, 0x9a, 0xf1, 0x4b, 0x0c, 0x28, 0xda, 0x18, 0xf5, 0x36, 0xc4, 0xf3, 0xff, + 0xcd, 0xf3, 0xfe, 0x08, 0x78, 0xee, 0x9d, 0x9b, 0x1d, 0x12, 0x10, 0xcd, 0xa0, 0x27, 0x2e, 0x76, + 0x46, 0x1d, 0xcd, 0xb6, 0x1c, 0x9b, 0x12, 0xca, 0x54, 0x8f, 0x61, 0xe6, 0xb5, 0x1d, 0xd7, 0x66, + 0x36, 0x6a, 0x68, 0xb6, 0x36, 0x76, 0x6d, 0xac, 0x9d, 0xb5, 0xbd, 0x73, 0xb3, 0xad, 0x1b, 0x1e, + 0xf3, 0xce, 0x4d, 0xd7, 0xa7, 0xab, 0x4f, 0x4f, 0xed, 0x53, 0x5b, 0x5c, 0xea, 0xf0, 0x53, 0x78, + 0x7f, 0xf5, 0x33, 0x9f, 0x19, 0x66, 0xc7, 0x76, 0x98, 0x61, 0x53, 0x3c, 0x3b, 0x84, 0x5f, 0x5b, + 0x7f, 0xc8, 0x50, 0xd9, 0x8e, 0xdf, 0xe9, 0xf7, 0xd0, 0x37, 0xb0, 0x74, 0x62, 0xda, 0x17, 0xaa, + 0xa1, 0x37, 0xa4, 0x75, 0x69, 0xe3, 0x51, 0xb7, 0x71, 0x75, 0xbd, 0x96, 0xfb, 0xf3, 0x7a, 0xad, + 0xf4, 0xd2, 0xb4, 0x2f, 0xfa, 0xbd, 0x69, 0x72, 0x52, 0x4a, 0xfc, 0x62, 0x5f, 0x47, 0x3d, 0x28, + 0xb0, 0x4b, 0x87, 0x34, 0xe4, 0x75, 0x69, 0xa3, 0xb6, 0xf9, 0x55, 0x7b, 0x9e, 0x7d, 0xed, 0xd4, + 0x3b, 0xed, 0xe1, 0xa5, 0x43, 0xba, 0x05, 0xce, 0x56, 0x84, 0x1a, 0xad, 0x82, 0x6c, 0xe8, 0x8d, + 0xfc, 0xba, 0xb4, 0x51, 0xec, 0x02, 0xff, 0x7d, 0x7a, 0xbd, 0x26, 0xf7, 0x7b, 0x8a, 0x6c, 0xe8, + 0x28, 0x80, 0x15, 0xef, 0xdc, 0x54, 0x0d, 0xea, 0x31, 0x4c, 0x35, 0xc2, 0x8d, 0x2b, 0x88, 0x8b, + 0x87, 0xd1, 0xc5, 0xea, 0xe0, 0xed, 0x5e, 0x3f, 0xfa, 0xda, 0xef, 0xfd, 0x7b, 0xbd, 0xf6, 0xdd, + 0xa9, 0xc1, 0xce, 0xfc, 0x51, 0x5b, 0xb3, 0xad, 0x4e, 0x62, 0x8f, 0x3e, 0x9a, 0x9d, 0x3b, 0xce, + 0xf8, 0xb4, 0x33, 0xc2, 0x1e, 0x69, 0xdf, 0x92, 0x2a, 0x55, 0xef, 0xdc, 0x4c, 0xfe, 0xd4, 0x5b, + 0xdf, 0x42, 0x81, 0x5b, 0x8a, 0xca, 0x50, 0x3c, 0x7a, 0x33, 0xd8, 0x19, 0xd6, 0x73, 0xa8, 0x0a, + 0xe5, 0x43, 0xe5, 0x60, 0x7b, 0x67, 0x30, 0x38, 0x50, 0xea, 0x12, 0x02, 0x28, 0x0d, 0x86, 0xca, + 0xce, 0xd6, 0x7e, 0x5d, 0x46, 0xcb, 0x50, 0x78, 0xb9, 0x77, 0xf0, 0x43, 0x3d, 0xdf, 0xfa, 0xbd, + 0x00, 0xb5, 0xc4, 0xdd, 0x01, 0xcf, 0x1e, 0xea, 0x43, 0x39, 0x49, 0xa8, 0x88, 0x6d, 0x65, 0xf3, + 0xf9, 0x42, 0xb1, 0x8a, 0xc2, 0x34, 0x53, 0xa3, 0x1d, 0x28, 0x51, 0xc2, 0x54, 0x37, 0x10, 0x31, + 0xaf, 0x6c, 0x6e, 0xcc, 0xe7, 0xbc, 0x21, 0xec, 0xc2, 0x76, 0xc7, 0x4a, 0x20, 0x8c, 0x88, 0x50, + 0x45, 0x4a, 0x98, 0x12, 0xc4, 0x18, 0x16, 0x88, 0xb0, 0x2f, 0x82, 0x19, 0xde, 0xc3, 0x0c, 0x03, + 0xf4, 0x02, 0xe4, 0xf1, 0x44, 0x24, 0xa4, 0xb2, 0xf9, 0x6c, 0x3e, 0x62, 0xf7, 0x38, 0xd4, 0x26, + 0xc9, 0xdd, 0x3d, 0x56, 0xe4, 0xf1, 0x04, 0xbd, 0x80, 0x02, 0x2f, 0xfa, 0x46, 0x51, 0x00, 0xbe, + 0x98, 0x0f, 0xd8, 0x09, 0x88, 0x96, 0x7e, 0x5e, 0xc8, 0xd0, 0x36, 0x94, 0x6c, 0x9f, 0x39, 0x3e, + 0x6b, 0x94, 0x3e, 0x15, 0xd3, 0x03, 0x71, 0x2f, 0x8d, 0x88, 0xa4, 0xa8, 0x0b, 0x25, 0x83, 0x3a, + 0x3e, 0xf3, 0x1a, 0x4b, 0xeb, 0xf9, 0x8d, 0xca, 0xe6, 0x97, 0xf3, 0x21, 0x7d, 0x7a, 0x97, 0x11, + 0x2a, 0xd1, 0x2b, 0x00, 0xd1, 0x39, 0xa2, 0x57, 0x1b, 0xcb, 0x9f, 0xf2, 0x86, 0x37, 0x51, 0x1a, + 0x53, 0x3e, 0x89, 0x7f, 0x68, 0xfd, 0x22, 0x01, 0xcc, 0x9e, 0x41, 0x5d, 0x00, 0xea, 0x5b, 0x2a, + 0xf3, 0x1d, 0x93, 0x78, 0x51, 0xe5, 0x7c, 0x9e, 0x02, 0xf3, 0xfe, 0x6e, 0x27, 0x6d, 0x7d, 0x64, + 0x50, 0x16, 0x23, 0xa9, 0x6f, 0x0d, 0x85, 0x0a, 0xf5, 0xa0, 0x7c, 0x81, 0x0d, 0xa6, 0x32, 0xc3, + 0x22, 0x51, 0xd1, 0x3c, 0x9b, 0x8b, 0xe8, 0xf9, 0x2e, 0xe6, 0xc7, 0x08, 0xb3, 0xcc, 0x95, 0x43, + 0xc3, 0x22, 0xad, 0x8f, 0x79, 0xa8, 0xdd, 0x2e, 0x28, 0xb4, 0x05, 0x4b, 0x26, 0x66, 0x84, 0x6a, + 0x97, 0x91, 0x65, 0x0b, 0x63, 0x63, 0xdd, 0xff, 0x63, 0x1b, 0x7a, 0x07, 0x4f, 0x75, 0xe2, 0x11, + 0xd7, 0xc0, 0xa6, 0xf1, 0xa3, 0xb8, 0x12, 0x02, 0xf3, 0xd9, 0x80, 0x4f, 0xee, 0x40, 0x04, 0x7b, + 0x0f, 0x56, 0xc2, 0xe8, 0xab, 0x2e, 0xd1, 0x88, 0x31, 0x21, 0x7a, 0x54, 0xee, 0x0b, 0xa5, 0xa1, + 0x16, 0x6a, 0x95, 0x48, 0x8a, 0x5e, 0x43, 0x6d, 0x74, 0xc9, 0xd2, 0xb0, 0xe2, 0xe2, 0xb0, 0xaa, + 0x90, 0x26, 0xac, 0x43, 0x78, 0x6c, 0x11, 0xcf, 0xc3, 0xa7, 0x69, 0x5c, 0x69, 0x71, 0x5c, 0x3d, + 0x56, 0xc7, 0xc4, 0xd6, 0xdf, 0x52, 0x92, 0xe3, 0xa8, 0xdb, 0x51, 0x0f, 0x2a, 0x91, 0xfb, 0xde, + 0x6c, 0x76, 0x2d, 0x84, 0x87, 0x50, 0x37, 0xe0, 0x43, 0xab, 0x0b, 0x10, 0xba, 0x2d, 0x20, 0x72, + 0x86, 0x32, 0x16, 0x32, 0xc1, 0x78, 0x05, 0xd5, 0xc4, 0x5d, 0x81, 0xc9, 0x2f, 0x8e, 0x79, 0x14, + 0x2b, 0x39, 0xa9, 0xf5, 0x53, 0x11, 0x96, 0xa2, 0x89, 0x34, 0xb3, 0xcc, 0x25, 0x58, 0xcf, 0xd4, + 0x60, 0x51, 0x32, 0xb0, 0x9e, 0x8a, 0x91, 0x80, 0xc8, 0x99, 0x63, 0x24, 0x28, 0xaf, 0x61, 0x69, + 0x3c, 0xc9, 0x58, 0xb7, 0xb5, 0x68, 0x9e, 0x96, 0x76, 0x8f, 0x79, 0xb1, 0x2a, 0xa5, 0xf1, 0x44, + 0x14, 0xed, 0x21, 0xac, 0x68, 0x36, 0x65, 0x84, 0xce, 0x7a, 0xa1, 0x90, 0xad, 0x17, 0x6a, 0x33, + 0xbd, 0x20, 0x0e, 0xe0, 0x09, 0x1f, 0x44, 0x06, 0x65, 0xc4, 0x3d, 0xc1, 0x1a, 0x51, 0x3d, 0x46, + 0x1c, 0x2f, 0x4b, 0xf5, 0x3e, 0xa6, 0xbe, 0xd5, 0x8f, 0xe5, 0x03, 0xae, 0x46, 0x6f, 0x01, 0x25, + 0x50, 0x8a, 0xcd, 0x88, 0x99, 0xa5, 0x84, 0x63, 0x26, 0xc5, 0x66, 0x88, 0xbc, 0x6f, 0x27, 0x21, + 0x63, 0x3e, 0xda, 0x1f, 0x68, 0x27, 0x57, 0xdf, 0xb7, 0x53, 0x30, 0x97, 0x1f, 0x68, 0x27, 0x17, + 0xb7, 0xfe, 0x91, 0xa0, 0x9c, 0x2c, 0x35, 0x3e, 0x06, 0xf9, 0x42, 0x0b, 0x33, 0x95, 0x71, 0x96, + 0x2e, 0x73, 0xa5, 0xc8, 0xd1, 0x01, 0x3c, 0xb6, 0x70, 0xa0, 0x62, 0xd3, 0xb4, 0x35, 0xcc, 0x88, + 0xae, 0x5a, 0xc4, 0xca, 0x52, 0x8d, 0x2b, 0x16, 0x0e, 0xb6, 0x62, 0xf1, 0x3e, 0xb1, 0xb8, 0xdf, + 0xb7, 0x81, 0xba, 0xe1, 0x8d, 0xb3, 0xf4, 0x5d, 0x3d, 0x4d, 0xec, 0x19, 0xde, 0xb8, 0xf5, 0xab, + 0x04, 0x95, 0xd4, 0x2e, 0xe6, 0xbd, 0xc3, 0x43, 0x3b, 0xc2, 0x4c, 0x3b, 0xcb, 0xb6, 0xe1, 0xf8, + 0x62, 0xec, 0x86, 0xb2, 0x3b, 0x6b, 0x52, 0x7e, 0xc8, 0x9a, 0x6c, 0xfd, 0x26, 0x41, 0x39, 0x59, + 0xcc, 0xe8, 0x7b, 0xa8, 0x72, 0xd7, 0x2d, 0x62, 0xa9, 0x3e, 0x9f, 0x1c, 0x59, 0x2c, 0xab, 0x58, + 0x38, 0xd8, 0x27, 0xd6, 0x11, 0xd7, 0xa1, 0x3e, 0xd4, 0x38, 0x88, 0x47, 0x2e, 0x22, 0xc9, 0x59, + 0xe6, 0x16, 0x0e, 0x78, 0xd8, 0x04, 0xaa, 0xfb, 0xf5, 0xd5, 0xc7, 0x66, 0xee, 0x6a, 0xda, 0x94, + 0xde, 0x4f, 0x9b, 0xd2, 0x87, 0x69, 0x53, 0xfa, 0x6b, 0xda, 0x94, 0x7e, 0xbe, 0x69, 0xe6, 0xde, + 0xdf, 0x34, 0x73, 0x1f, 0x6e, 0x9a, 0xb9, 0x77, 0x95, 0xd4, 0xbf, 0x10, 0xff, 0x05, 0x00, 0x00, + 0xff, 0xff, 0xa2, 0xda, 0x3c, 0xa0, 0x54, 0x0c, 0x00, 0x00, } func (m *ComponentID) Marshal() (dAtA []byte, err error) { @@ -871,6 +879,46 @@ func (m *KVStats) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + { + size, err := m.NumInternalSeeks.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintComponentStats(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x42 + { + size, err := m.NumInterfaceSeeks.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintComponentStats(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x3a + { + size, err := m.NumInternalSteps.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintComponentStats(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x32 + { + size, err := m.NumInterfaceSteps.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintComponentStats(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2a { size, err := m.ContentionTime.MarshalToSizedBuffer(dAtA[:i]) if err != nil { @@ -1170,6 +1218,14 @@ func (m *KVStats) Size() (n int) { n += 1 + l + sovComponentStats(uint64(l)) l = m.ContentionTime.Size() n += 1 + l + sovComponentStats(uint64(l)) + l = m.NumInterfaceSteps.Size() + n += 1 + l + sovComponentStats(uint64(l)) + l = m.NumInternalSteps.Size() + n += 1 + l + sovComponentStats(uint64(l)) + l = m.NumInterfaceSeeks.Size() + n += 1 + l + sovComponentStats(uint64(l)) + l = m.NumInternalSeeks.Size() + n += 1 + l + sovComponentStats(uint64(l)) return n } @@ -2349,6 +2405,138 @@ func (m *KVStats) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NumInterfaceSteps", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowComponentStats + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthComponentStats + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthComponentStats + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.NumInterfaceSteps.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NumInternalSteps", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowComponentStats + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthComponentStats + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthComponentStats + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.NumInternalSteps.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NumInterfaceSeeks", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowComponentStats + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthComponentStats + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthComponentStats + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.NumInterfaceSeeks.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NumInternalSeeks", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowComponentStats + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthComponentStats + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthComponentStats + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.NumInternalSeeks.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipComponentStats(dAtA[iNdEx:]) diff --git a/pkg/sql/execinfrapb/component_stats.proto b/pkg/sql/execinfrapb/component_stats.proto index b98a023acfc5..5d01450cc058 100644 --- a/pkg/sql/execinfrapb/component_stats.proto +++ b/pkg/sql/execinfrapb/component_stats.proto @@ -130,6 +130,11 @@ message KVStats { // ContentionTime is the cumulative time a KV request spent contending with // other transactions. This time accounts for a portion of KVTime above. optional util.optional.Duration contention_time = 4 [(gogoproto.nullable) = false]; + + optional util.optional.Uint num_interface_steps = 5 [(gogoproto.nullable) = false]; + optional util.optional.Uint num_internal_steps = 6 [(gogoproto.nullable) = false]; + optional util.optional.Uint num_interface_seeks = 7 [(gogoproto.nullable) = false]; + optional util.optional.Uint num_internal_seeks = 8 [(gogoproto.nullable) = false]; } // ExecStats contains statistics about the execution of a component. diff --git a/pkg/sql/explain_test.go b/pkg/sql/explain_test.go index 17655ddb2f19..ff27612b4077 100644 --- a/pkg/sql/explain_test.go +++ b/pkg/sql/explain_test.go @@ -15,6 +15,7 @@ import ( "context" "fmt" "regexp" + "strconv" "strings" "testing" "time" @@ -23,10 +24,12 @@ import ( "github.com/cockroachdb/cockroach/pkg/sql/tests" "github.com/cockroachdb/cockroach/pkg/testutils" "github.com/cockroachdb/cockroach/pkg/testutils/serverutils" + "github.com/cockroachdb/cockroach/pkg/testutils/skip" "github.com/cockroachdb/cockroach/pkg/testutils/sqlutils" "github.com/cockroachdb/cockroach/pkg/util/leaktest" "github.com/cockroachdb/cockroach/pkg/util/log" "github.com/cockroachdb/cockroach/pkg/util/timeutil" + "github.com/stretchr/testify/assert" ) func TestStatementReuses(t *testing.T) { @@ -317,3 +320,72 @@ func TestExplainStatsCollected(t *testing.T) { } } } + +// TestExplainMVCCSteps makes sure that the MVCC stats are properly collected +// during explain analyze. This can't be a normal logic test because the MVCC +// stats are marked as nondeterministic (they change depending on number of +// nodes in the query). +func TestExplainMVCCSteps(t *testing.T) { + defer leaktest.AfterTest(t)() + defer log.Scope(t).Close(t) + + skip.UnderMetamorphic(t, + "this test expects a precise number of scan requests, which is not upheld "+ + "in the metamorphic configuration that edits the kv batch size.") + + ctx := context.Background() + srv, godb, _ := serverutils.StartServer(t, base.TestServerArgs{Insecure: true}) + defer srv.Stopper().Stop(ctx) + r := sqlutils.MakeSQLRunner(godb) + r.Exec(t, "CREATE TABLE ab (a PRIMARY KEY, b) AS SELECT g, g FROM generate_series(1,1000) g(g)") + + expectedSteps, expectedSeeks := 1000, 2 + foundSteps, foundSeeks := getMVCCStats(t, r) + + assert.Equal(t, expectedSteps, foundSteps) + assert.Equal(t, expectedSeeks, foundSeeks) + + // Update all rows. + r.Exec(t, "UPDATE ab SET b=b+1 WHERE true") + + expectedSteps, expectedSeeks = 2000, 2 + foundSteps, foundSeeks = getMVCCStats(t, r) + + assert.Equal(t, expectedSteps, foundSteps) + assert.Equal(t, expectedSeeks, foundSeeks) +} + +func getMVCCStats(t *testing.T, r *sqlutils.SQLRunner) (foundSteps, foundSeeks int) { + rows := r.Query(t, "EXPLAIN ANALYZE SELECT COUNT(*) FROM ab") + var output strings.Builder + var str string + var err error + for rows.Next() { + if err := rows.Scan(&str); err != nil { + t.Fatal(err) + } + output.WriteString(str) + output.WriteByte('\n') + str = strings.TrimSpace(str) + // Numbers are printed with commas to indicate 1000s places, remove them. + str = strings.ReplaceAll(str, ",", "") + stepStr := strings.TrimPrefix(str, "MVCC step count: ") + if len(stepStr) != len(str) { + foundSteps, err = strconv.Atoi(stepStr) + assert.NoError(t, err) + } + seekStr := strings.TrimPrefix(str, "MVCC seek count: ") + if len(seekStr) != len(str) { + foundSeeks, err = strconv.Atoi(seekStr) + assert.NoError(t, err) + } + } + if err := rows.Close(); err != nil { + t.Fatal(err) + } + if t.Failed() { + fmt.Println("Explain output:") + fmt.Println(output.String()) + } + return foundSteps, foundSeeks +} diff --git a/pkg/sql/instrumentation.go b/pkg/sql/instrumentation.go index 2d1ce4453b91..84c009f0bac5 100644 --- a/pkg/sql/instrumentation.go +++ b/pkg/sql/instrumentation.go @@ -558,6 +558,10 @@ func (m execNodeTraceMetadata) annotateExplain( nodeStats.KVContentionTime.MaybeAdd(stats.KV.ContentionTime) nodeStats.KVBytesRead.MaybeAdd(stats.KV.BytesRead) nodeStats.KVRowsRead.MaybeAdd(stats.KV.TuplesRead) + nodeStats.StepCount.MaybeAdd(stats.KV.NumInterfaceSteps) + nodeStats.InternalStepCount.MaybeAdd(stats.KV.NumInternalSteps) + nodeStats.SeekCount.MaybeAdd(stats.KV.NumInterfaceSeeks) + nodeStats.InternalSeekCount.MaybeAdd(stats.KV.NumInternalSeeks) nodeStats.VectorizedBatchCount.MaybeAdd(stats.Output.NumBatches) } // If we didn't get statistics for all processors, we don't show the diff --git a/pkg/sql/logictest/testdata/logic_test/dist_vectorize b/pkg/sql/logictest/testdata/logic_test/dist_vectorize index c1d498419829..fdf78d9d0ab7 100644 --- a/pkg/sql/logictest/testdata/logic_test/dist_vectorize +++ b/pkg/sql/logictest/testdata/logic_test/dist_vectorize @@ -73,11 +73,13 @@ regions: KV contention time: 0µs KV rows read: 5 KV bytes read: 40 B + MVCC step count: 0 + MVCC seek count: 0 missing stats table: kv@primary spans: FULL SCAN · -Diagram: https://cockroachdb.github.io/distsqlplan/decode.html#eJzsVd1u00wQvf-eYjVX7aeN_Js29VWhKlIFTVCSwgWKqq09MlacXbO7ThqiPBYvwJMh2zHESbGNEAoRvdwZH8-cc2Z3VqA-xeDB6PrN9dWY-CLl-uT_U_JqOLgl0zlQ4CLAPpuhAu8DWEDBBgoOUHCBQhcmFBIpfFRKyOyTVQ64CR7BMylEPEl1Fp5Q8IVE8FagIx0jeDBmDzEOkQUoDRMoBKhZFOdlpvPLREYzJpdAYZQwrjzSMbLCg1R7pC84AoXX74iOZugR8-sXVZx9wTVyHQm-l5JioYhEFnjEKiIPS41lqEdeAoUHpv2PqIhIdZIVytrKcWXAgsmaQnHa0FKahQietabtqb8IQ4kh00Ia3Srzq8Fdf3w_HLwfnZwCBXxEP92n8xt92j_t80d7KRcyQIlBpbfJup6JtWPi6O72_qY_Prm0_gwTp8LEaj9sVvOwGXbHcI5n3BrIb5l0dtBxs9ubZLcwyekY7vGY1EB-y6Tzg5rktDfJaWGS28nfuCMxqYH8lkm9g5rktjfJbWFSt3M8FjVQ37Lo4q_ZrU_0OUSVCK5wZ8c-_Wcz270YhFgsaiVS6eNbKfy8THEc5Lg8EKDSRdYqDje8SGUNboOtWrBdAVu7YLu-ckNppxbt1oPdX-k7VzEXFDjqhZBTEjON3F9-N72ML1ikq-MQoEIZsTj6zPZnpYRt5t_HaI6bO1CmyotQ5orLUGZnqBQLKx-YrWewKkm3VpKzej3PnvXcleS8VpJevZ69Zz13Jbmofy3Mhoeq_pn7NxSdrP_7FgAA__9xHjpe +Diagram: https://cockroachdb.github.io/distsqlplan/decode.html#eJzslk9u2zoQxvfvFMSskgca-uvE0SqtkQJBG7uwnXRRGAEjDVTBMqmSVBLX8LF6gZ6ssGSlkp1KKorChZslZ_Rphr9vSHAJ6nMMHowv3l30J8QXKddH_x-TN6PhFZndAwUuAhywOSrwPoIFFGyg4AAFFyh0YUohkcJHpYRcf7LMBJfBI3gmhYgnqV6HpxR8IRG8JehIxwgeTNhdjCNkAUrDBAoBahbFWZnZ_XkiozmTC6AwThhXHukY68LDVHtkIDgChbc3REdz9Ij57avK177gGrmOBN9JSfGgiEQWeMTKI3cLjUWoR14Dhaubfp8ojUkOwiPmUxBxVg7eMe1_QkVEqpN0E8sqFAELpisK-WoDQGkWInjWiraH9CoMJYZMC2l0q4z6w-vB5HY0_DA-OgYK-Ih-urvx3-jT_mmfP9pLuZABSgwqvU1X9TuxtuweX1_dXg4mR-fWn9mJU9mJ1X4sreaxNOyO4RziYDZgKtl5stfBtNvbabew0-kY7iHa2YCpZOfpXu102tvptLDT7WT35sHZ2YCpZGdvr3a67e10W9jZ7RyimQ2QSmae_TVvgGf6HKFKBFe49RZ4_s_m-o2AQYj5g0KJVPr4Xgo_K5Mvh5kuCwSodJ618sUlz1PrBstiq1ZsV8TWttiur9xQ2qlVu_Vi91f6zihmQIGjfhByRmKmkfuLJ9OL-AOLdHUcAlQoIxZHX9jurBSyzUnxMbrHzWkpUsWRKXL5sSmyc1SKhZUP2p-VKpJuLZKTep4nLzy3kZzWIunV8-y98NxGclZ_W5gNF1X9NfdvEJ2u_vseAAD__x7aeMo= query T EXPLAIN ANALYZE (DISTSQL) SELECT * FROM kv JOIN kw ON kv.k = kw.k @@ -107,6 +109,8 @@ regions: │ KV contention time: 0µs │ KV rows read: 5 │ KV bytes read: 40 B +│ MVCC step count: 0 +│ MVCC seek count: 0 │ missing stats │ table: kv@primary │ spans: FULL SCAN @@ -119,11 +123,13 @@ regions: KV contention time: 0µs KV rows read: 5 KV bytes read: 40 B + MVCC step count: 0 + MVCC seek count: 0 missing stats table: kw@primary spans: FULL SCAN · -Diagram: https://cockroachdb.github.io/distsqlplan/decode.html#eJzsmt1u2zYUx-_3FMS52la5MiU7TQQUMDZ0QLo1HtJiN4MvGOnMFiyLLknH8YI81l5gTzbImtv6Q19GG1Km7yLRlA5_-p-jv5jzCPJjAgG8f_Pbm58_kB_JL7fDd2R6T94Or2_IdEmGN2R6_3JKXpPp8uUUHEh5hDdshhKCP4GCAx444IMDPXCgDyMH5oKHKCUX2U8e1xOuowcIug7E6XyhstMjB0IuEIJHULFKEAL4wO4SvEUWoXC74ECEisXJ-jbT-8FcxDMmVuDA-zlLZUA6bnbjX_8gKp5hQLr__iPz45CnClMV83RvSPClJAJZFBCan7lbKdycuiQ_gQN3TIUTlIQv1HyhApKFsp63OUFh9ORAfpSvcLOCuxWZMDnZjn2Q_X7kgFRsjBDQJ-c4JBc7SJb7SFzaUiheIZTP1-EiQoHR7nVeZDeu9asDfN-hGONbHqcoXLqjuQT_Ut8P6IsfXot4PMn_BAeG2WoH1Bl4zsB3Bpno8QHDxT7aGXsgM5xxsSIsSXjIFEYB6a55ZmPyY0IUzuYkiuWULCQb42a4Me7PKP0aKBfpIUwHCd3wDp-7tL_NpmDFlWH3C8PubYVN66cFra4Urtdx_TamBT0WyqsataKtULxCKM9YK-gJ1gqvvr68Gknnd9xeG_VFj4VyWSPp2grFK4TyjEnnnWDS-fX15ddIul7H7bdRX_RYKFc1kq6tULxCKM-YdP4JJl2vvr56NZKu32mjuuixSPrVKddxKWFpRCjhaoKijXi8QjzPmHy9E0y-ii2PW5Rznkrc-TQ9fOVuRhCjMebPRfKFCPF3wcP1bfLD4Xre-kshQqnyUS8_uE43Q1IxVfZp-y3JdXO91I_-ojD6FNWSiylJmMI0XH0Kf3N-yWK1vbAIJYqYJfHfbH_Vm2n_52OI8f162V8MbRLz09h6zZvRGcoMxe7kr4_kSjMSWoLk8qsgoU2R0GKRWysT2reRCW1QCz3jamF59BeF0Vv7QK80I9FSC8uR0GKRWyuTnVpoCRNvl0n3Syb-9uthd7JfOplu16KucZW0d6QnPmE5lCMpNtpteKC6PbGBD9ROT1zBRLcn1uIX-kd64hOWSTmSYqNtRi0sj163JzbwgdrpiSuY6PbEWmrhRRNPbAeSV2er3AyJlXvS5UiK_bcZb8zy6LVbZQPzXrtV1qLyy7NVbobEyj3pciTF_tuMWlgevXarrKUWVjDRbZW1qPzqbJX3_stwbKvFCcukgolus2yiTqzcra5gUuLBzXhtVsVvpV-mx_Zb2MtEt2PWUxDNbuMwUSclRtyQgnjuuTgApVHThSXJv9dLYpRrNpGJbtesJ3fKmdjpmsuZaN-5NhJKsRU35M3ZpDvNFofYpD3NFjPRpOntzMSI7WsjoRRbcUMK4l6rioWuefT03X8BAAD__55xcPI= +Diagram: https://cockroachdb.github.io/distsqlplan/decode.html#eJzsmt1u2zYUx-_3FMS52la5MiU7TQQUMBZ0QLolGdKiN4MvGOnMFiSLLknH8YI81l5gTzbIqtP4Q5_oQlbyXUSK0uGP53_0N8MHkJ9j8ODDu9_fnX8kP5Nfb64vSXRH3l9fXJFoSa6vSHT3OiJvSbR8HYEFCQ_wis1QgvcnULDAAQtcsGAAFgxhbMFccB-l5CK95WE94CK4B69vQZjMFyptHlvgc4HgPYAKVYzgwUd2G-MNsgCF3QcLAlQsjNevie5GcxHOmFiBBR_mLJEe6dnpi3_7RFQ4Q4_0__1HZtc-TxQmKuTJXpfgS0kEssAjNGu5XSncNJ2SX8CCy0_n50QqnBOfLxLlkf5TI2L0vPGWKX-KkvCFmi--tK3fsGmgMH60ILvKWGzmersiUyan27McpfePLZCKTRA8-mg1g3eyA2-5D8-mrcfn5OL7-hwuAhQY7D7nVfriSncdWIlLFBN8z8MEhU138jjGv9SPI_rqp7cinEyzP8GC63S2I2qNHGvkWqNUSHiP_mJ_EWbsnsxwxsWKsDjmPlMYeKS_Jp_2yc8xUTibkyCUEVlINsFNd23cX1G6FVAukkOYDhK64j0-t-lwm03OjEvDHuaGPdgKm1YXEC2vPrbTs912C4g2xfemQv1pPz4nF98L1h_awvrjVM9Ep4KQ3Z49aHcm0qb4TisIuf34nFx8Lyhkp4VCdqtnoltByIOePWx3JtKm-M4qCLn9-JxcfC8oZLeFQh5Uz8RBBSEPe-3OQ9oU3rBcxj2bEpYEhBKupijaDdLJBfmCgh60UNAlm003KOc8kbjzU__wk_spQQwmmK2L5Avh4x-C--vXZJfX63HrX0kBSpX1OtnFRbLpkoqpoq2C_5NcP8uX6tGf5EafoFpyEZGYKUz81VP4m_YlC9X2xAKUKEIWh3-z_Vlvhn1Rro_h3Xraz7o2En7qW8950ztDmaLYHfztkZxpRkILkJx-EyS0LhKan-SdTRM67CITWqMWOsbVwuLoT3Kj7-yCnmlGoqUWFiOh-Une2TTZqYUdYeLsMuk_Z-Jufx52B7uFg-l2LeobV0kHDT1xi9OhGEm-0f4eFlS3JzZwQbvpiUuY6PbEWvzCsKEnbnGaFCPJN9pm1MLi6HV7YgMXtJueuISJbk-spRae1PHE3UDy5miV6yHp5J50MZJ8_23GF7M4eu1W2UDda7fKWrL89GiV6yHp5J50MZJ8_21GLSyOXrtV1lILS5jotspasvzsaJX3_svQ9KhFi9OkhIlus2xinnRyt7qESYEHN-OzWRZ_J_0ybXreortMdDtmPQXR7GMcJuZJgRE3pCAez1wcgFLr0EVHxL93lsQo12wiE92uWY92ipl00zUXM9G-c20klHwrbsiXs87ptK44xDrH07piJuocejsyMWL72kgo-VbckIK4d1Slg655_PjDfwEAAP__o-Ptyg== # Verify execution. statement ok diff --git a/pkg/sql/logictest/testdata/logic_test/explain_analyze b/pkg/sql/logictest/testdata/logic_test/explain_analyze index 8e5385a99453..8f674588eaca 100644 --- a/pkg/sql/logictest/testdata/logic_test/explain_analyze +++ b/pkg/sql/logictest/testdata/logic_test/explain_analyze @@ -28,6 +28,8 @@ regions: KV contention time: 0µs KV rows read: 0 KV bytes read: 0 B + MVCC step count: 0 + MVCC seek count: 0 missing stats table: kv@primary spans: [/2 - ] @@ -55,6 +57,8 @@ regions: KV contention time: 0µs KV rows read: 3 KV bytes read: 24 B + MVCC step count: 0 + MVCC seek count: 0 missing stats table: kv@primary spans: [/2 - ] @@ -95,6 +99,10 @@ regions: │ KV contention time: 0µs │ KV rows read: 4 │ KV bytes read: 32 B +│ MVCC step count: 0 +│ MVCC seek count: 0 +│ MVCC internal step count: 0 +│ MVCC internal seek count: 0 │ estimated row count: 1,000 (missing stats) │ table: kv@primary │ spans: FULL SCAN @@ -109,6 +117,10 @@ regions: KV contention time: 0µs KV rows read: 3 KV bytes read: 24 B + MVCC step count: 0 + MVCC seek count: 0 + MVCC internal step count: 0 + MVCC internal seek count: 0 estimated row count: 1,000 (missing stats) table: ab@primary spans: FULL SCAN diff --git a/pkg/sql/logictest/testdata/logic_test/explain_analyze_plans b/pkg/sql/logictest/testdata/logic_test/explain_analyze_plans index d17437e24c58..febbef36084a 100644 --- a/pkg/sql/logictest/testdata/logic_test/explain_analyze_plans +++ b/pkg/sql/logictest/testdata/logic_test/explain_analyze_plans @@ -92,6 +92,8 @@ regions: │ KV contention time: 0µs │ KV rows read: 5 │ KV bytes read: 40 B + │ MVCC step count: 0 + │ MVCC seek count: 0 │ missing stats │ table: kv@primary │ spans: FULL SCAN @@ -104,11 +106,13 @@ regions: KV contention time: 0µs KV rows read: 5 KV bytes read: 40 B + MVCC step count: 0 + MVCC seek count: 0 missing stats table: kw@primary spans: FULL SCAN · -Diagram: https://cockroachdb.github.io/distsqlplan/decode.html#eJzsm-9u2robx9__rsLyq04LC3ago0iT2Kb9jrqzwtQ_R5qOUOUSHxoBCXNMaU_Vyzo3cK7sKKGsQIidZF3txHnXxDF58vHXX8dPnt7D8PsUduHZpy-fPp6Dyc2biQXIzfhgsnwzeQX-fzo4AZMb8Hlw3AeTJRj040vAOxC1g99OBxdfwYdv8UloQT9waZ_MaAi7f0IELYihBR1owRa0YBsOLThnwYiGYcCiS-7jDsfuLew2Lej58wWPTg8tOAoYhd17yD0-pbALz8nVlJ5S4lJmN6EFXcqJN41vM7npzZk3I-wOWvBsTvywCxp2dOPBgndBLwrj9z8A92a0C5r__hOujkeBz6nPvcBPNLFgGQJGidsFj52v7jhdn-qAD9CCV4SPrmkIggWfR7eJgor7rU8gOHyw4Opo9azrZ7m6A9ckvN5-il50_dCCISdjCrvowSoG53AHzjIJx0alx4NT8Tz9TsBcyqi7-zuvoxtnumoP6RPKxvRz4PmU2WhHh1P6Fz_oodev3jFvfL3684my1YuQ01s6WiShzsgtmNFZwO4AmU6DEeHU7YJmTDJqC79PAaezOXC9cAIWIRnTdXNu0E8QnTwaez8eMzomPGA2aifGxoKDFcdHQb3vf7vsD84v-xdfvhz0UMTh7OLkoIejvz4OLvrnj3-nAPnF8mn9nHzEeHDz5_CcXZxcHkeAnOjolPouZbGCQA_bPecZoT0BaWcAsvD3IdlLox80grmNd3RSNOx2atiHW2Gj7C6J5EuIjRu2U26XREXxvM2wiJQfD07F84KLCKrUIiLR2OYiclitRSS3fCSLCCr7IoKz2w3O4MZOw26V225QUTydDG5cfjw4Fc8LujGulBtLNLbpxm-r5ca55SNxY1x2N3ay242TwY1bDbtdbrtBRfEcZXDj8uPBqXhe0I2dSrmxRGObbtyplhvnlo_EjZ2yu3Eru920Mrhxu1Fus0FF4bTlXtywESC-CxAI-DVl5QaFU0G9oCu3KuXKErVtuvJRtVw5t3wkrtwquytLvoCc0nAe-CHdSX_v_-VmRIu6Y7qiGwYLNqJfWTCKb7M6HMT94tSRS0O-asWrg2N_3RRywkXp8185iZor08gefSc1ep_yZcAmYEo49Ud3P8Jfn18Sj28_mEtDyjwy9f4myaded3s05RH1buLH3mhau_OPtviZ160zGkYodjs_PxLkKGaCBEw6z8IE5WZS6yQ58VXrRAkTlMMMsXZmKI6-kxq9sQO6Y4Yvz0SJGUqY1DqRmaEhTPAuk-Ymk20kzd3OjhBoS6fXyj1TRBw9apq4NkqYtGsmCduodZJkYqROWkIr3UGy27kt7IwPt41Yu7fSw4IJhgrLQYwkfTdahgFVnmDQcETNTDBIJr5qnSjZe70tmGCosEzESNJ3o3qYoTh65QkGDUfUzASDZOKr1okSM-wIX2yPxAmGo4IJhgprTIxEkLXQI-kiCd_IjaOYiZkJBgkTI3WCEl_zRBkGM5YXlOdrnik6yfONsGYiSWjosQWRxa96ULWc_KqzD2qUnvikV6cfJEyM3KxKmAiyGpo4oiR-1YOqxhElk191CkKN0hNfK7fem1FLnIRAiQ97dRZCwsTM4gkZlPQNmh65GUn8ZiYiZFBU77rVQBGXK6hmombprWsg8jIxc9Nal1bkh6J7uYxs8ps5qHUhRF4mZm5a6_qK_FB0r5mRTX4zB1VcDYEk5RCorodIIi1cEGEwFNUbNB2hCNIbmqRn6pqIPf-_VtdEJJnoXROhIxPVmQg1c6dwTYTBUGql5Epv6LEZwXrXRKhxxLomIi8TMzMRMii1UnKlNzRxRHFNBJbUROC6JiKJtK6JyA9F9QZNRyhmFlrIoOhePYPrmojhw_Dhf_8FAAD__2EN7jc= +Diagram: https://cockroachdb.github.io/distsqlplan/decode.html#eJzsm29v2jgcx5_fq7D8qNPCgh3oaKRJbNXu1N0KU_9Mmk5oSsnvaAQkzDGlvaov697AvbJTQmmBEDthXe3iPGvsmDgff_11_POvtzj-McIuPv34-ePhGRpevRlayLsa7A1nb4av0O8n3WM0vEKfukcdNJyhbie9Bb1DST3646R7_gV9-JYWYguHkQ8dbwwxdv_CBFuYYgs72MINbOEm7ll4wqI-xHHEkltu0wZH_jV26xYOwsmUJ8U9C_cjBti9xTzgI8AuPvMuRnACng_MrmML-8C9YJQ-ZnjVnrBg7LEbbOHTiRfGLqrZyYO7U-6idtKNP78iHozBRfX__o3n1_0o5BDyIAozVSyaxYiB57vovvHFDYdFUQt9wBY-_np4iGIOE9SPpiF3Uf2hEGC4XHjh8f4lxCia8sn0vix9wqKA4N6dhedXcyqLt764QZdefLn6vu3k_p6FY-4NALvkztoO4_4axlkWo00MAklzQT7-TsR8YOCv_87r5MGF7towJsfABvApCkJgNlnT9gj-5ntt8vrVOxYMLud_Po6H1U4GB66hP83iH3vXaAzjiN0gbzSK-h4H30X1lHlSF_8YIQ7jCfKDeIimsTeARXVp0I8QnTJqfD8YMBh4PGI2aWbGxsLdOcd76b3vfPve6Z5975x__rzXJgmH0_PjvTZN_jrsnnfO7v_OAfKL5dP4OfmI8dD6z-E5PT_-fpQAcpKrEwh9YKmCUJvabecJoT0CaRYAMg03IdlIoxPVoolN13Sybbebud3eX-k2Ke6nRL4s2bRmO6b4KdkW5NsCC5NJIGkuyGdcmMhOLUwSNS4vTPu7tTCVlo9kYSIvfWGixY2JFnB4p2Y3TDEmsi3IVgGHNwkkzQX5jA5Pd8rhJWpcdvi3u-XwpeUjcXj60h3eKW5MTgGHb9TspinGRLYFeVDA4U0CSXNBPqPDOzvl8BI1Ljt8a7ccvrR8JA7vvHSHbxQ3pkYBh2_WTLElsi3GptzfazZBXugjgiJ-CcwUpDQX6TM6fWOnnF6iy2WnP9gtpy8tH4nTN16600tOlE4gnkRhDGvHCZt_uZ7QAn8Ac7pxNGV9-MKifvqY-WU3bZeGzXyI-byWzi-OwkVVzD0uOo74lZOoPjeN4r1v5fY-BD6L2BCNPA5h_-ah-4vymRfw1RfzIQYWeKPgHy_71otm9_bdh-Aqfe2lqoWPP9Sl77yoHUOcoFhv_PRIiKOYCREwaT0JE1KaSaWT7MRXrRMlTEgJM6TamaG4963c3hs7oGtm-PxMlJihhEmlE5kZGsKErjOpLzNZRVJfb-wIgTZ0-qzcMEXEvSd1E9dGCZNmxSRjG5VOskyM1ElDaKVrSNYbN4WN6f6qEWv3Vbq_ZYBhh-UgRpK_G30JA6o8wKDhiJoZYJBMfNU6UbL3ertlgGGHZSJGkr8b1cMMxb1XHmDQcETNDDBIJr5qnSgxw5bww_ZAHGA42DLAsMMaEyMRRC30CLpIum_kxlHMxMwAg4SJkTohmdM8UYTBjOWFlDnNM0UnZc4IKyaSgIYeWxBZ_1UPqpaTX3X0QY3SM0d6VfhBwsTIzaqEiSCqoYkjSvqvelDVOKJk8qsOQahReua0cuW7mTTEQQiSOdirohASJmYmT8ig5G_Q9IjNSPpvZiBCBkX1rlsNFHG6gmomapbeKgeiLBMzN61VakV5KLqny8gmv5mDWiVClGVi5qa1yq8oD0X3nBnZ5DdzUMXZEESSDkGqfIgs0q0TIgyGonqDpiMUQXhDk_BMlROx4f_XqpyILBO9cyJ0ZKI6EqFm7mydE2EwlEoppcIbemxGqN45EWocscqJKMvEzEiEDEqllFLhDU0cUZwTQSU5EbTKicgirXIiykNRvUHTEYqZiRYyKLpnz9AqJ6J317v77f8AAAD__wKcax4= # This query verifies stats collection for the hashJoiner, distinct and sorter. query T @@ -150,6 +154,8 @@ regions: │ KV contention time: 0µs │ KV rows read: 5 │ KV bytes read: 40 B + │ MVCC step count: 0 + │ MVCC seek count: 0 │ missing stats │ table: kv@primary │ spans: FULL SCAN @@ -162,11 +168,13 @@ regions: KV contention time: 0µs KV rows read: 5 KV bytes read: 40 B + MVCC step count: 0 + MVCC seek count: 0 missing stats table: kw@primary spans: FULL SCAN · -Diagram: https://cockroachdb.github.io/distsqlplan/decode.html#eJzsm99u27YXx-9_T0HwqsVPrkxKdhwDBYL-GZZui4ckGDAMvlAsLhZsS65Ix8mCPNZeYE82SK7qyLR4pKQLWdF3kRna5Occni_1pXSP-ec5HuKLjz9_fH-JPpxeXJ6evb9Er2brN-vX6Ifz0S9odoM-jU7P0GyNRmdodvNmht6irB2Nzj98PEfvfs-vsIPjJGRnwYJxPPwDE-xgih3sYQf72ME9PHbwMk0mjPMkzf7lPu9wGt7iYdfBUbxciezjsYMnScrw8B6LSMwZHuLL4GrOzlkQstTtYgeHTATRPP-Z2c3JMo0WQXqHHXyxDGI-RB03--HRSgzRSTaMn35DIlqwIer-8zffXE-SWLBYREksNaXJmqOUBeEQfel8dSdY8dEAvcMOvgrEZMo4SlZimf1MNqi8X_EBweMHB2-uNnMt5nJ1h6YBn5ZncZL9_9jBXATXDA_Jg_M0OP0dOGsZjkse46HfIx5aiWf7Pas4SUOWsrD0TeOsJ_Qvexj_GPDppySKWeqSnQScsz_FqxPy-m0aXU_zv0pw2S2brGSQi-AWLdgiSe9QMJ8nk0CwcIi6Ob2sjX-eI8EWSxRGfIZWPLhmRXNjuFtwXpO8-hBxEcUT4ZKeFA0j5tUsafxnJI2KDu2aSWc7816TqF8kqWCpS6WY_9-0afVrBHRfOPO57I3pWdJJlq63E9CKSYMj71WO_Kg0clK_vBNY-1zacb02qV8DPEc11K-EpwXqR15Y_Uhb1A_Iq6369c2s789Rv2ZJo1Q_YiadKvUDol6onxRzw9WP1i-StIaGeB3Xb5OGNMAzqKEhJTwt0BD6whpC26IhQF5tNeTIzCr5HA1pljRKDaFm0qnSECDqhYZIMTdcQ7z6RdKroSF-x-21SUMa4DmuoSElPC3QEO-FNcRri4YAebXVkIGZVfI5GtIsaZQa4plJp0pDgKgXGiLF3HAN8esXSb-GhvQ6bVKQBnB6sIJ0XIKCOEQEJWLK0jZpif_CWuK3RUuADNtqybGZ1fI5WtIsaZRa4ptJp0pLgKgXWiLF3HAtAQ6qzhlfJjFnu9Vg7zd3s4Cz8JptsoMnq3TCfk2TSf4zm8tR3i-3CEPGxaaVbi5O46KJi0CojoX-S3JdnFe7-qM_rhx9zMQ6SWdoHggWT-6-Dr_4fB1EojyxkHGWRsE8-iuQZ110-yIlExbd5NN-1FRoyte2fM5F64LxDMVu52-PhPQ0MyEKJoNvwoQ0ZULJIU8kJkc2MiENiiE1rhiqR39cOXprA7pTDF-eiZZiCCQ5OeQJUAwtYUJ3mXQfM_FKSLq7nT0lUN-kbeWeJaIePbFyvwAwsXK_oGZCvQMTiYmV92S-spT21KW0p-zcL_Pc7dxXF_FyJesat6U9eqI70eJcUiOpXl7fQ0C1uxMGRtROdwJgonu3oeXGbfBEd6LFaaJGUm15mFEM1aPX7k4YGFE73QmAiW53QksxPFZubElXvacmave72p9ocZYBTBSuhxmmDTR-3XsGE4Nqp0UBQbHSoyCSB16uqBSoqGq7uG_jhp0AXpiVaaZmYufSA7z1alfEjPsYKM91OxhGLn47tyOSE37wMAAmdj63oWaisEYMqYhAnuu2MfRURACKbh9DT6arj_dIH9h2Swd8ByMDYGLn4xsQlOrtiCHujnr8lhoZABQ776aks8NyRR0AFVVy2w9GBpHc9oORATDRvfRMzBM7H--AFo9R5ypPGL-VRgZt8t6cJbcyABPdRoaWiggwsfMZD2jxVLsjZlREaPxWGhlUfX5IgfNDKp0fHowMgImdRgYExc7tiBqKwh0xw92Bxq_7bkpPUKUTxHJF9YGKqn7rxEojg0puu1FGholM7Fx6aiZ2GhnQ4rFzOwJAMepcZd_4gSMEK2_a1Ux0Gxl68hw4P7TTyAAWj-7HPIyEUu2OGFIR1eeHFDg_pOq3dew0MoA33ezcOQBQ7DQygHfdrHzMA4Ji1Ev_-_ZT6pf1POBlPU-y2y00MsYP__s3AAD__3E8wN4= +Diagram: https://cockroachdb.github.io/distsqlplan/decode.html#eJzsm9Fu2zYUhu_3FASvWkyuREp2HAEFgqYdlm6NhyQoMAy-UCQuFmxLrkjHyYI81l5gTzZYjuLIsnikpAs503exGNrkdw7PT_2U7jD_NsE-Pv_066fjC_Tx5Pzi5PT4Ar0ZL94t3qKfzgZf0PgafR6cnKLxAg1O0fj63Ri9R8t2NDj7-OkMffg9_4QtnKQROw2mjGP_D0ywhSm2sIst7GELd_HQwrMsDRnnabb8l7u8w0l0g33HwnEym4vl5aGFwzRj2L_DIhYThn18EVxO2BkLIpbZDrZwxEQQT_KfGV8fzbJ4GmS32MLnsyDhPurYyx8ezIWPjpbD-OUrEvGU-cj552---hymiWCJiNOk0pSlC44yFkQ-euh8eStYcamPPmALf_l6fIy4YDMUpvNE-Mh5vMjY-OnFy0CEI8ZROhez-cO1_BeKCwQP7y28-rSiUsz68haNAj4qz_do-f9DC3MRXDHsk3vreRh7GxgXVYw2eQqS7jZIWgty_T3zJM0ilrGo9E3DZU_oX7ZE4-eAjz6nccIym2wk9YT9Kd4ckbfvs_hqlP9VCgO7YeG8inwa3KApm6bZLQomkzQMBIt85OScl2382wQJNp2hKOZjNOfBFSuaW8Ndg3PbZODHmIs4CYVNupVoaDGvdknjvSBpZHSooyed9cy7baJ-nmaCZTatxPxH3abVaxDQbeHM57I1pqdpJ53Z7kZAayYNjrxbO_KD0shJcyEgsJ7atGO7ZipqC5AHDRS1BNIoRSWvrKhkVxQVyMC1ovb01IyXKGq7pJEqKtGTTp2iAlEvFLUSc80VlTYvp7SBLrkd2zNTl1qA7DfQpRJIo3SJvrIu0V3RJSAD17p0oGflfYkutUsaqS5RPenU6RIQ9UKXKjHXXJfc5uXUbaBLXsfumqlLLUAeNtClEkijdMl9ZV1yd0WXgAxc61Jfz8r7El1qlzRSXXL1pFOnS0DUC12qxFxzXfKal1OvgS51O2aqUguMXViVOjZBQRIhglIxYpmZ-uS9sj55u6JPQC6u9elQzwr8En1qlzRSffL0pFOnT0DUC32qxFxzfQIO_s4Yn6UJZ5vVYOs3O8uAs-iKrbKDp_MsZL9laZj_zOrjIO-X26MR42LVSlcfTpKiiYtAyI7Z_ktyDs6rXfPRH9aOPmFikWZjNAkES8Lbx-EX1xdBLMoTixhnWRxM4r-C6qyLbg-iE7L4Op_2k6ZCfR7b8jkXrVPGlyg2O39_JKSrmAmRMOl_FyakLRNK9nlSYXJgIhPSohhS7YqhfPSHtaM3NqAbxfD1mSgphkCSk32eAMXQECZ0k4nzlIlbQuJsdnalQD2dtpVbloh89MTI_QLAxMj9gpwJdfdMKkyMvCfzpKW0Ky-lXWnnXpnnZueevIiXK5mj3Zb24JnuxA7nkhxJ_fL6PwRUuTuhYUTNdCcAJqp3G0pu3PrPdCd2OE3kSOotDz2KoXz0yt0JDSNqpjsBMFHtTigphofSjS1x5HtqIne_6_2JHc4ygInE9dDDtIHGr3rPoGNQzbQoIChGehSk4oGXKyoFKqrcLu6ZuGEngBdmZJrJmZi59ABvvd4V0eM-Bspz1Q6GlovfzO1IxQnfexgAEzOf25AzkVgjmlREIM9V2xhqKiIARbWPoSbT5cd7pAdsuysHfHsjA2Bi5uMbEJT67Ygm7o58_IYaGQAUM--mKmeH5YraBypqxW3fGxmk4rbvjQyAieqlp2OemPl4B7R4tDpXecb4jTQyaJv35gy5lQGYqDYylFREgImZz3hAi6feHdGjIkLjN9LIoPLzQwqcH9LK-eHeyACYmGlkQFDM3I7IoUjcET3cHWj8qu-m1AS1coJYrqgeUFHlb50YaWTQituulZGhIxMzl56ciZlGBrR4zNyOAFC0OlfZNn7gCMHIm3Y5E9VGhpo8B84PzTQygMWj-jEPLaHUuyOaVET5-SEFzg-p_G0dM40M4E03M3cOABQzjQzgXTcjH_OAoGj10v-2_ZT8ZT0XeFnPrdjtBhoZw_sf_g0AAP__LVM9xQ== # This query verifies stats collection for WITH ORDINALITY and the hashJoiner. query T @@ -199,6 +207,8 @@ regions: │ KV contention time: 0µs │ KV rows read: 5 │ KV bytes read: 40 B +│ MVCC step count: 0 +│ MVCC seek count: 0 │ missing stats │ table: kv@primary │ spans: FULL SCAN @@ -216,11 +226,13 @@ regions: KV contention time: 0µs KV rows read: 5 KV bytes read: 40 B + MVCC step count: 0 + MVCC seek count: 0 missing stats table: kv@primary spans: FULL SCAN · -Diagram: https://cockroachdb.github.io/distsqlplan/decode.html#eJzUUcFu00AQvfMVozmiRYkdm8OeXKCohlKjJAIh5MPGO0pXsXfd3XVJFOWz-AG-DNkmokmblIA49Djv7dt5b94a3U2JHCfnl-evp_Ac3o6zD7C4hc_p9AKy8Zv06uwynX6BswkIdoCYIUNtJF2JihzyrxhgzrC2piDnjG2hdfcglUvkQ4ZK141v4ZxhYSwhX6NXviTkOBWzksYkJNnBEBlK8kKV3beL26S2qhJ2hQwntdCOwwtk-P4TeFURh-GP766fC6M9aa-MvkdZ882BJSE5xD0yW3naQtEQXiHDmfDFNTkwja8bz6F10gm3QIz5hmE__UrivJgT8mDD_jxtZqXSolR-NQh2w9KSiuZ-gH8wFp5i7G4N4VOsYfSXNYz-dw3RQWO__TTaWEmW5I6ZvFU-9uSBdBfCXb8zSpMdRLvpstZqErAkZMmIJRFLYpa8RHYodiWWUFFl7ApEWZpCeJIc-q5azt2U4KmqQSq3gMaJOW3pRy8WHj5ZfEqXY3K10Y72T_fgz8P2XiTn1N_fmcYW9NGaolvTj1mn6wBJzvds0A-p7qnW4F1xcFQc7YiDfXF4VDw6vnl0wuZwXxwdFcd7m_PNs58BAAD__1tGDfU= +Diagram: https://cockroachdb.github.io/distsqlplan/decode.html#eJzcUcFu00AQvfMVozmiRbEdh8OeXEJRA22DkqgIIR823lG6ir3r7q5LoiifxQ_wZch2A0napATEheO8t2_nzXsrdHc5chyfX573J_AS3o2GVzC_h0-DyQUMR28H12eXg8lnOBuDYAeIKTLURtK1KMgh_4IhpgxLazJyztgaWjUPBnKBPGCodFn5Gk4ZZsYS8hV65XNCjhMxzWlEQpLtBMhQkhcqb76d3yelVYWwS2Q4LoV2HF4hww834FVBHILv31w7Z0Z70l4Z_Yiy5qsDS0Jy6LXIdOlpA8UBvEGGVzf9PjhPJWSm0p5D8BMkmm-DU-GzW3JgKl9WD1izYgP0MF0zbKeHm50XM0Iertnv5zK0UmmRK7_shLux0IKy6vGpf2EsOsXYdmHR_11Y9w8L6_7rwuKDxn75qbSxkizJHTNprXzuyRPXXQh3-94oTbYT7143rK0mIUsilnRZErOkx5LXyA6dXYgFFFQYuwSR5yYTniSHttWac3c5eCpKkMrNoXJiRhv62cSiw5H1TulyRK402tF-dE_-HNR5kZxRm78zlc3oozVZs6Ydh42uASQ537JhOwx0S9UGt8XhUXG8Iw73xdFRcff45u4Jm6N9cXxU3NvbnK5f_AgAAP__518m7Q== # Verify that EXPLAIN ANALYZE on an unsupported query doesn't return an error. statement ok @@ -269,11 +281,13 @@ regions: KV contention time: 0µs KV rows read: 5 KV bytes read: 40 B + MVCC step count: 0 + MVCC seek count: 0 missing stats table: kv@primary spans: FULL SCAN · -Diagram: https://cockroachdb.github.io/distsqlplan/decode.html#eJzslU1u2zwQhvffKYhZJQAN_X8ouEpbpEXQHxdOkC4KLxhx4BKWSIWk7LiBj9UL9GSFKMuN7KRWlwa8nBm-Hr7P0KNHsPcFMLi-_Hj59obwxexsfk7Gt5cTcnZO3k3Gn8h8ARSUFviZl2iBfYMIKMRAIQEKKVDIYEqhMjpHa7Vpjjx6wZV4ABZSkKqqXZOeUsi1QWCP4KQrEBjc8LsCJ8gFmiAECgIdl4VvM19cVEaW3KyAwnXFlWVkFDSNx7Vj5KK5xodb4mSJjIS_fto2zrVyqJzUaq9k9NISg1wwshHfrRx2qVfkDVC44y7_jpbo2lVNm-ZSXtclIpiuKbTRxpR1fIbAojV9wfgfv7XSRqBB0fM6XT-D5qtUQi_RBFmfy-vb92cX0fmWQ0PEd_L-GMm2sXW8KPoU8AHzeh9OyR9IiaU2K8KLQufcoWAk9ESamr0viMOyIkLaOaktn2FXPggsexFY3AMWDX8p0eGXEsSjIDmWtxIPtx4PsJ6MgvRYrCfDrScDrKcj_3c5CuvpcOvpAOvZ6FiMH_gmTNBWWlncWZHP_3LYrE4UM2z3rNW1yfGL0blv04Zjr_MJgda11agNrpQv-Qs-FUd_Ff_fE4e74vhfOnsr3hUodEtt5qTgDlW-2g6oyy-5dP3RCbRoJC_kD74_1062GW6OcoGbAXelbspdrZ10Vy3RNqv-6YFw8EPoI0lOSHaRpCcku0iyE5L1dP3f7wAAAP__nafZkw== +Diagram: https://cockroachdb.github.io/distsqlplan/decode.html#eJzslU9u2zwQxfffKQazSgAalvznQ8FV2iAtgjZ14QTuovCCEQcuIYlUSMqOG_hYvUBPVoiy3MhJGnVreDnz9Dzkj8_kA7q7DDleX3y6OL8BsVycpKcwmV1M4eQU3k8nV5AukaE2kj6LnBzybxgjwwEyHCLDETIc45xhYU1CzhlbffIQDJfyHnnEUOmi9FV7zjAxlpA_oFc-I-R4I24zmpKQZPsRMpTkhcrCmHR5VliVC7tGhteF0I5Dr18NnpSew1m1jI8z8ConDtGvn66uE6M9aa-MfiJZs3JgSUgOW_Pt2lPTegPvkOHV7PwcnKcCElNqzyHaNYnSx81b4ZPv5MCUvii3vTChacQ43zCsq-32nRcLQh5v2AuI_pAptbGSLMkWlfnmGYhflZZmRbY_bhN8O_twchaf7ohV7MKkQILDeFc7L7KszYvuKSmfYszFPeSUG7sGkWUmEZ4khyiwqzR3l4GnvACpXAqlEwtq5FeBjV8ENmgBi7tnKn49U_1Brz88vFQNukMadIA07PVHhwdp2B3SsAOkUS_8BQ8M0qg7pFEHSOPe4SF65ZWbkiuMdrR3lT__y1F1xZNcUP0eOFPahL5Yk4QxdTkJvtCQ5HytxnVxqYMUFvjYHP_V_H_LHO2bB_8yOWwl7Ao1-ZWxKWTCk07Wu6Ns-iuhfPuQJTmySmTqh3iagMa2jUFCaknbKDRSk4dGqzPRqDm56kl6_EH3ILSRDI9I9pGMjkj2kYyPSDbzzX-_AwAA__9eWBgO # Very simple query to make it easier to spot regressions when rewriting results # in test files. @@ -296,11 +310,13 @@ regions: KV contention time: 0µs KV rows read: 0 KV bytes read: 0 B + MVCC step count: 0 + MVCC seek count: 0 missing stats table: kv@primary spans: [/0 - /0] · -Diagram: https://cockroachdb.github.io/distsqlplan/decode.html#eJyMkFFLwzAUhd_9FZfzHGn7GhCGUnFsbtLN-SB9yNrLLO2SmqTTMfqz_AP-MmkjiojgS-B8J_dczj3BPTeQWKXz9GpNNV1ny1uqD_Rwk2Yp1XRBMQS0KXmh9uwgH5EgF2itKdg5Ywd0Gj9My1fIWKDSbecHnAsUxjLkCb7yDUNirbYNZ6xKttEQXLJXVTPG1odJa6u9skcIrFqlnaQojuLz4YkW9_M5BJadlzRJIDDbkK_2LCl-f3NBF0Z71r4y-pdlzYsjy6qUY5_ZhrZHz1-ILiGwVb54Ykem8-2wZvg4zn2DvBcI6rOf82rHkEkv_n-DjF1rtOMf9f9KjvtcgMsdhzs709mC76wpxjVBLse5EZTsfHCTIKY6WH3en30EAAD___6pnbQ= +Diagram: https://cockroachdb.github.io/distsqlplan/decode.html#eJyMkU1qwzAQhfc9xTBrFdtbQSE0uDTkrzhpuiheKPaQGjuSK43ThuBj9QI9WbEU-kMpdCN43xu9QU8ndM8NSlyls3S8hhpusuUc6gM83KZZCjVcQYwCtSlpofbkUD5igrnA1pqCnDN2QCc_MClfUcYCK912POBcYGEsoTwhV9wQSlyrbUMZqZJsNASXxKpqfGx9GLW22it7RIGrVmknIYqj-HI4osX9bIYClx1LGCUocLoBrvYkIX5_c0EXRjNproz-ZVnz4sCSKqV_z3QD2yPTJ4JrFDjfjMfgmFooTKc5TAZIVH-HW8XFEzkwHbfdmfkNXyDvBQZ1bsKx2hHKpBf_bysj1xrt6EdRfyXHfS6Qyh2FH3GmswXdWVP4NUEu_T0PSnIc3CSIiQ5Wn_cXHwEAAP__kieqMA== # Test a query that has a subquery and a postquery. statement ok @@ -352,6 +368,8 @@ regions: │ KV contention time: 0µs │ KV rows read: 1 │ KV bytes read: 8 B +│ MVCC step count: 0 +│ MVCC seek count: 0 │ missing stats │ table: parent@primary │ spans: LIMITED SCAN @@ -372,6 +390,8 @@ regions: │ KV contention time: 0µs │ KV rows read: 1 │ KV bytes read: 8 B + │ MVCC step count: 0 + │ MVCC seek count: 0 │ table: parent@primary │ equality: (column2) = (p) │ equality cols are key @@ -389,6 +409,6 @@ regions: actual row count: 1 label: buffer 1 · -Diagram 1 (subquery): https://cockroachdb.github.io/distsqlplan/decode.html#eJysUtGK2zAQfO9XiH1KQEfsHIWip0tLCiGuUxJfoBRzKPLiE7UlV1o3l4Z8Vn-gX1Zsx-2Zo2lL71EzGmlmd47gPxcgYBFv5uuELeJkxdS9LjK2nUW38w0bhZyNNvNo_iZhpTajaszerlfvWCUdGhqPgYOxGcayRA_iI4TA4SWkHCpnFXpvXQMf20uL7AFEwEGbqqYGTjko6xDEEUhTgSAgtle2mkyBQ4YkddE-ig-oatLWMNIlChZ8_-aBw06SukfPbE1VTYIFwMHZ_S8ghPTEoTud__MkcwRxfeKPPIWXPSVyV-AaZYZuEgyddWO4qZwupTsAh00ljRfsCjhEutTEmoEst0Pjyy1T1hCap5mWW9ZGcCgz0Yt3B8IeesVe_1_08F-iz_LcYS7Jukk4TD6LP9zFq-Quvo2i0U3YFOH51zQdeP1DddboK2s8Dnz-7uXglHLALMeunt7WTuF7Z1X7TXdctboWyNBTx153h4XpqMbgY3F4UTy9LJ5eFAdDcRulTQUGaW_dJ1ZIQqMOPyff43upabiTDD06LQv9VT5dWC87F1Gh_oLnMvZU38ie61rZsyV6L_PBheBvi5CeXvwIAAD__2aUhTI= +Diagram 1 (subquery): https://cockroachdb.github.io/distsqlplan/decode.html#eJysUtGK2zAQfO9XLPuUAx2xcxSKny4NKYTknJLkAqWEQ5EXnzhbcqV1c2nIZ_UH-mXFdtzGHE1b2kfNaqSZ2Tmg_5RhhJN4OV6sYBKv5qAedZbAeji7Hy-hFwroLcez8WgFuTa94greLeZ3UEhHhq-uUKCxCcUyJ4_RRwxR4GvcCCycVeS9dRV8qC9NkmeMAoHaFCVX8Eagso4wOiBrzggjjO21LfoDFJgQS53Vj9IzqZK1NcA6pwiCb189CtxKVo_kwZZclBxBgAKd3f0EQtwcBTan03-eZUoY3RzFmabwsqaV3Ga0IJmQ6wddZU0Mt4XTuXR7FLgspPERXKPAmc41QxXIdN0VPl2DsobJvPQ0XUNtwZFMopa83TO10Bt4iwLv1qMReKYClC3NyXsDEj2dg_8QUvg3IQ3T1FEq2bp-2M1oGH94iOerh_h-NuvdhlVl_v9CBx2tvynZgnxhjaeOzl-9HBw3AilJqSmyt6VT9N5ZVX_THOc1rwYS8txMb5rDxDSjSuA5ObxIHlwmDy6Sgy65tlK7QkO8s-4JMslk1P5H8i2-k5q7O0nIk9My01_ky4W1tFNlFenPdKptO2q7286a_rbTnLyXaefCH5d2c3z1PQAA__9GdJGu Diagram 2 (main-query): https://cockroachdb.github.io/distsqlplan/decode.html#eJyMj89K80AUxfffU1zOqoWBL9nOTiRCoLbSVjeSRZxc2oF0bpy5wULJY_kCPpk0I4gLweX53Tl_5oL02sOiXu-q7Z7q9X5D7uj7jp5uVo_VjhalocWuWlW3ezr5sBiWdLfd3NPQRg66XMIgSMfr9sQJ9hklGoMhiuOUJF7RZX5Qd2fYwsCHYdQrbgycRIa9QL32DIteXNuTkzEoFf8LGHSsre_nYD6zG9VLIPUntlR8vCcYvLTqjpxIRh1GtXR1RXn7BiWaySCrr96k7YFhy8n8fduW0yAh8Y9RvyUXU2PA3YHz_5OM0fFDFDfXZLmZfTPoOGm-llnUIZ-mZvr3GQAA__9Sm4hi -Diagram 3 (postquery): https://cockroachdb.github.io/distsqlplan/decode.html#eJy0k9Fu2jAUhu_3FEfnCiRLJNCLyVd0E0gpWTJBys3EhXEOrbdgZ7ajFSEeay-wJ5sSt9pY1Who6x3_b__Hn3-TI7qvFXJMstVsWUCSFTnIe1WVsL5Ob2crGMQMBqtZOntfwF7pQT2E-TL_ALWwpP1wiAy1KSkTe3LIP2GMG4a1NZKcM7a1jt2GpHxAHjFUum58a28YSmMJ-RG98hUhx8pIUYGTQsO22e3IQjSKkGFJXqiqG583nsN0jAzpgWTjldHg1Z44RD--O2S4FV7ekwPT-Lrd2-at-fbLiHFzYhjUI4fz4o6Qxyf296xzVXmyZEfxOWDwOUxjSFaQ5QVkt2n6KrzjS3hvjNJLEiXZ0ficuDjUxCGdzQu4zooEbvIkQ4bhgae1VXthD8gwNeZLU8NnozQY3d4Q2eN7tL-6w6FFb5mftPOiqs5vvFg_09JoT_p5OYt1NxAsiTJMXaxhe_D0ZL2Fd_9QbfRitZNLqg1_W7LWWFC7QByPJuct_3_Gq0sYl-Rqox2dQb00OTptGFJ5R-Hzdaaxkj5aI7tjgsy7XGeU5HxYjYNIdFhqAX8Px73hcX943Bue9IcnveGrP8Kb05ufAQAA__9GX6z9 +Diagram 3 (postquery): https://cockroachdb.github.io/distsqlplan/decode.html#eJy0k9Fu2jAUhu_3FEfnCiRLJNCLKVd0CKSUNJkg5WbiwjiH1muwM9vRihCPtRfYk02JqVZWNRrTepfz2__xd_zHB7TfSowwTpfTRQ5xmmcgHmRZwOo6uZsuoRcy6C2nyXSSw06qXtWH2SK7hYobUq7fR4ZKF5TyHVmMvmCIa4aV0YKs1aaRDu2GuHjCKGAoVVW7Rl4zFNoQRgd00pWEEZZa8BKs4Ao29XZLBoJBgAwLclyWbfusdhGMh8iQnkjUTmoFTu4oguDnD4sMN9yJB7Kga1c1exu_0d9_CyGujwx9deKwjt8TRuGR_T3rTJaODJlBeA7o9QjGIcRLSLMc0rskeRfe4SW8N1qqBfGCzGB4TpzvK4ogmc5yuE7zGG6yOEWGPuBxZeSOmz0yTLR-rCv4qqUCrZoJkZ3yaL7aw6FBb5ifa-t4WZ5PPF-9qoVWjtTry5mv2oZgiBe-63wFm72jZ-kjfEKGt6vJBKyjCoSu1ekSvUj0-FL81xCCN0MYXRKC_8HJGG1Abv1s4WB0nsf_Z7y6hHFBttLK0hnUW52D45ohFffkH7rVtRH02WjRHuPLrPW1QkHW-dXQF7HySw3gS3PYaR52m4ed5lG3edRpvvrDvD5--BUAAP__ymy5eQ== diff --git a/pkg/sql/logictest/testdata/logic_test/inverted_index_geospatial b/pkg/sql/logictest/testdata/logic_test/inverted_index_geospatial index 47fb1476b34a..ec9459d6726e 100644 --- a/pkg/sql/logictest/testdata/logic_test/inverted_index_geospatial +++ b/pkg/sql/logictest/testdata/logic_test/inverted_index_geospatial @@ -57,6 +57,8 @@ regions: │ KV contention time: 0µs │ KV rows read: 2 │ KV bytes read: 16 B + │ MVCC step count: 0 + │ MVCC seek count: 0 │ table: geo_table@primary │ └── • inverted filter @@ -74,11 +76,13 @@ regions: KV contention time: 0µs KV rows read: 4 KV bytes read: 32 B + MVCC step count: 0 + MVCC seek count: 0 missing stats table: geo_table@geom_index spans: 31 spans · -Diagram: https://cockroachdb.github.io/distsqlplan/decode.html#eJzMleFO40YQx7_3KUbzBVBdZdc2adiqUgqYNm0hyIlaoTpCiz0NFrbX7G5aI5THuhe4JzvZJhwhirnc3YfLh41mxv_1zG9m149o7jMUOAn-DE6mcAdn4fgc5qSurbzJCP7-LQgDMPY6LSxpQ7E1-3uTcHT6s9s_4oOfLseji-m-zxhjHjR_zDvYE-LXYHweTMMrp94rP4BxeBqEcHwFd-hgoRK6kDkZFP8gx5mDpVYxGaN07XpsHhglFQrmYFqUC1u7Zw7GShOKR7SpzQgFTuscQ5IJ6R5DBxOyMs2abZ9LGNYJXKdFQhU6OCllYQT0IjyOourfJIoqzqKoYm8t-MOuGh4hyCIBj4Gyt6QNOvjHX2DTnASw9--e7FgVlgqbqmIjpNX_BjTJRIDfem4eLK1cngvH6OCNtPEtGVALWy6sgJpDI1w5fJwtHWytJ47Gyjmh4Evn01mPiv9IW0rO0sySJt3j68BX8aAqNagChlyAqWmDsVJb0dDzfjyMIuayKGLsrQWBimRXWQ19g_q4xjCs820KbLi2SFvbWJll6_Sponix2ZRcVpBTrvQDyCxTsbSUCGBNI-qYuc_AUl5Ckpo7WBg5p1X4zT65W_vk7tKn31VaPB0Jd9uRKHWaS_3wEY0zdF_RcbvofPYYu5tjzPsNni3Av4Catwu156n21pm1fvH6BmSc8fquc5nb7x-xl7-T_i984PPWGLABH_h-4PM98fJSHLoHW-eyk_zXx-TvgmmitCXd89chDfn339qROdylqpBMqQpDa1Vt25ktZw5SMqf2U2XUQsd0qVXcvKY1x42ucSRkbBvlrTEq2lCd4Esx7xS73WK3U-x1i71Osd8t9jvFh6_Es-V3HwIAAP___4y3QA== +Diagram: https://cockroachdb.github.io/distsqlplan/decode.html#eJzMVeFu40QQ_s9TjOZPr8Kou7YbcouQQns-CNDLyYkOnXBUbe0hZ8XedXc34KrKY_ECPBmynZSkUVwC_CA_Nppv8u3OfN_s5hHtfYECp9GP0fUMlvA2ntzAgvStk3cFwU_fRXEE1t3mypGxlDr76mwaj9987Q9e8-FX7yfjd7NXIWOMBdB-seD8TIhvo8lNNIs_es1e5TlM4jdRDFcfYYkeKp3RO1mSRfEzcpx7WBmdkrXaNNBj-4NxVqNgHuaqWrkGnnuYakMoHtHlriAUOGtqjElmZC4YepiRk3nRbvvUwqgp4DZXGdXo4bSSygq4SPAqSepfsiSpOUuSmr204BencniCIFUGAQPtPpGx6OEPH8DlJQlgf_y-iVOtHCmXa3WQMvo3C4ZkJiDskLsHR1so8OEKPbz5cH0N1lEFqV4pJ4A9gUTLXfBOuvQTWdArV602WHvEFghxvvawizaKWycXhIKvvb_vylj9SsZR9jYvHBkyF3zfmm0-qisDWsGIC7CNL2CdNE60OgdfXiYJ81mSMPbSgkAqO5XW2HPgz6SRYdTU2zbYOtCJ38XWyaLY94lqSleH9pWyhpJKbR5AFoVOpaNMAGsta3L2vgBHZQVZbpewsnJB2_SLPvlHffJP8el7navN5fGPXZ7K5KU0D39J4438Z-r4fer844H3DweeD04c-CPW_At9g1P0fZr_YF_dDhfPX1XGGW_eT5_5g8Frtvu5HnzDhyHvgiEb8mEYRiE_E7sP7cg_PzrBvR799zKFp8g01caRuQj3RRrxz_9vl-vylK5ispVWlva6OrYzW889pGxB3d-f1SuT0nuj0_aYLpy0vBbIyLouy7tgrLpUU-AumfeS_X6y30sO-slBLznsJ4e95Mtn5Pn6sz8DAAD__-dk0Dg= statement ok DROP TABLE geo_table @@ -143,6 +147,8 @@ regions: │ KV contention time: 0µs │ KV rows read: 2 │ KV bytes read: 16 B + │ MVCC step count: 0 + │ MVCC seek count: 0 │ table: geo_table@primary │ └── • inverted filter @@ -160,11 +166,13 @@ regions: KV contention time: 0µs KV rows read: 2 KV bytes read: 16 B + MVCC step count: 0 + MVCC seek count: 0 missing stats table: geo_table@geom_index spans: 31 spans · -Diagram: https://cockroachdb.github.io/distsqlplan/decode.html#eJzMleFO40YQx7_3KUbzBVBdZdc2adiqUgqYNm0hyIlaoTpCiz0NFrbX7G7aIJTHuhe4JzutTTgCwncRd9Llw0bzH__XO7_ZXd-juS1Q4CT6Mzqawg2cxONTmJO6tPKqIPj7tyiOwNjLvLKkDaXW7O5M4tHxz37_gA9-Oh-Pzqa7IWOMBdD8sWBvR4hfo_FpNI0vPDdXuQfj-DiK4fACbtDDSmV0JksyKP5BjjMPa61SMkZpJ903D4yyJQrmYV7VC-vkmYep0oTiHm1uC0KBU7fGmGRGusfQw4yszItm2scShm4Bl3mV0RI9nNSyMgJ6CR4myfLfLEmWLHAD-8SAP2zr4QmCrDIIGCh7Tdqgh3_8BTYvSQB7_-4hTlVlqbK5ql6ktPrfgCaZCfBb5erO0lrifThED6-kTa_JgFrYemEFOA6NcS34OFt52EYPHI2Vc0LBV97nsx5V_5G2lJ3khSVNusc3ga_z0bLWoCoYcgHG0QZjpbaioRf8uJ8kzNFjDlLngEBVtq3NQX9BfewwDN16mwIbri3SNjZWFsUmfVpSunjZlFIuoaRS6TuQRaFSaSkTwJpGuJy5LcBSWUOWmxtYGDmndfoNffK36dPvKq8ejoT_2pGodV5KffcRjTf0t6HzFbbxK8DfQC3Yhtrjrg42mbW6eH4DMs64u-t85vf7B-zp76j_Cx-EvA0GbMAHYRiFfEc8vRSH_t4X3ZdvwBRug2mitCXdCzchDfn339qR2d-mqphMrSpDG1W9NjNbzTykbE7tp8qohU7pXKu0eU0bjhtfI2RkbJvlbTCq2pRb4FMz7zT73Wa_0xx0m4NOc9htDjvN-8_Ms9V3HwIAAP__EHC3Qg== +Diagram: https://cockroachdb.github.io/distsqlplan/decode.html#eJzMVeFu6zQU_s9THJ0_uxNBtZOs9BohlfXmQoHdTmk1NJFq8pJDFzWxM9uFTlMfixfgyVCSdrSbFqiGBPnh6Hwnn33O99nOI9r7AgVOox-j0QyW8DGeXMCC9I2TtwXBT99FcQTW3eTKkbGUOvvuZBqPP3zt99_zwVeXk_Gn2buQMcYCaF4sOD0R4ttochHN4muvnqs8hUn8IYrh_BqW6KHSGX2SJVkUPyPHuYeV0SlZq00NPTYfjLM1CuZhrqqVq-G5h6k2hOIRXe4KQoGzusaYZEamx9DDjJzMi2bapxaGdQE3ucpojR5OK6msgF6C50my_iVLkjUL6oH9zYBfHMvhCYJUGQQMtLsjY9HDH67A5SUJYH_8vo1TrRwpl2v1ImX0bxYMyUyA3yK3D452EO_DOXp4cTUagXVUQapXyglgTyDRch-8lS69Iwt65arVFmuW2AE-zjcettFWcevkglDwjffPXRmrX8k4yj7mhSNDpscPrdnlo3VlQCsYcgG29gWsk8aJRufgy7MkYbXOrJazc0AglR1Lq-154c-klmFY19s02DjQit_G1smiOPSJ1pSuXtpXyjWUVGrzALIodCodZQJYY1mds_cFOCoryHK7hJWVC9ql3-CTf4xP3-tcbQ-P_9rhqUxeSvPwlzTe0D9Gnf90w79izRv0DY7R92n_B4fqtrh4fqsyznh9f_rM7_ffs_1n1P-GD0LeBgM24IMwjEJ-IvYv2qF_-q_u4DfIFB4j01QbR6YXHoo05J__3w7X2TFdxWQrrSwddPXazGwz95CyBbW_P6tXJqVLo9NmmTacNLwGyMi6NsvbYKzaVF3gPpl3kv1ust9JDrrJQSc57CaHneSzZ-T55rM_AwAA___5NdA6 # Also works when creating an index. statement ok @@ -205,6 +213,8 @@ regions: │ KV contention time: 0µs │ KV rows read: 2 │ KV bytes read: 16 B + │ MVCC step count: 0 + │ MVCC seek count: 0 │ table: geo_table@primary │ └── • inverted filter @@ -222,8 +232,10 @@ regions: KV contention time: 0µs KV rows read: 2 KV bytes read: 16 B + MVCC step count: 0 + MVCC seek count: 0 missing stats table: geo_table@geom_index spans: 31 spans · -Diagram: https://cockroachdb.github.io/distsqlplan/decode.html#eJzMleFO40YQx7_3KUbzBVBdZdc2adiqUgqYNm0hyIlaoTpCiz0NFrbX7G7aIJTHuhe4JzutTTgCwncRd9Llw0bzH__XO7_ZXd-juS1Q4CT6Mzqawg2cxONTmJO6tPKqIPj7tyiOwNjLvLKkDaXW7O5M4tHxz37_gA9-Oh-Pzqa7IWOMBdD8sWBvR4hfo_FpNI0vPDdXuQfj-DiK4fACbtDDSmV0JksyKP5BjjMPa61SMkZpJ903D4yyJQrmYV7VC-vkmYep0oTiHm1uC0KBU7fGmGRGusfQw4yszItm2scShm4Bl3mV0RI9nNSyMgJ6CR4myfLfLEmWLHAD-8SAP2zr4QmCrDIIGCh7Tdqgh3_8BTYvSQB7_-4hTlVlqbK5ql6ktPrfgCaZCfBb5erO0lrifThED6-kTa_JgFrYemEFOA6NcS34OFt52EYPHI2Vc0LBV97nsx5V_5G2lJ3khSVNusc3ga_z0bLWoCoYcgHG0QZjpbaioRf8uJ8kzNFjDlLngEBVtq3NQX9BfewwDN16mwIbri3SNjZWFsUmfVpSunjZlFIuoaRS6TuQRaFSaSkTwJpGuJy5LcBSWUOWmxtYGDmndfoNffK36dPvKq8ejoT_2pGodV5KffcRjTf0t6HzFbbxK8DfQC3Yhtrjrg42mbW6eH4DMs64u-t85vf7B-zp76j_Cx-EvA0GbMAHYRiFfEc8vRSH_t4X3ZdvwBRug2mitCXdCzchDfn339qR2d-mqphMrSpDG1W9NjNbzTykbE7tp8qohU7pXKu0eU0bjhtfI2RkbJvlbTCq2pRb4FMz7zT73Wa_0xx0m4NOc9htDjvN-8_Ms9V3HwIAAP__EHC3Qg== +Diagram: https://cockroachdb.github.io/distsqlplan/decode.html#eJzMVeFu6zQU_s9THJ0_uxNBtZOs9BohlfXmQoHdTmk1NJFq8pJDFzWxM9uFTlMfixfgyVCSdrSbFqiGBPnh6Hwnn33O99nOI9r7AgVOox-j0QyW8DGeXMCC9I2TtwXBT99FcQTW3eTKkbGUOvvuZBqPP3zt99_zwVeXk_Gn2buQMcYCaF4sOD0R4ttochHN4muvnqs8hUn8IYrh_BqW6KHSGX2SJVkUPyPHuYeV0SlZq00NPTYfjLM1CuZhrqqVq-G5h6k2hOIRXe4KQoGzusaYZEamx9DDjJzMi2bapxaGdQE3ucpojR5OK6msgF6C50my_iVLkjUL6oH9zYBfHMvhCYJUGQQMtLsjY9HDH67A5SUJYH_8vo1TrRwpl2v1ImX0bxYMyUyA3yK3D452EO_DOXp4cTUagXVUQapXyglgTyDRch-8lS69Iwt65arVFmuW2AE-zjcettFWcevkglDwjffPXRmrX8k4yj7mhSNDpscPrdnlo3VlQCsYcgG29gWsk8aJRufgy7MkYbXOrJazc0AglR1Lq-154c-klmFY19s02DjQit_G1smiOPSJ1pSuXtpXyjWUVGrzALIodCodZQJYY1mds_cFOCoryHK7hJWVC9ql3-CTf4xP3-tcbQ-P_9rhqUxeSvPwlzTe0D9Gnf90w79izRv0DY7R92n_B4fqtrh4fqsyznh9f_rM7_ffs_1n1P-GD0LeBgM24IMwjEJ-IvYv2qF_-q_u4DfIFB4j01QbR6YXHoo05J__3w7X2TFdxWQrrSwddPXazGwz95CyBbW_P6tXJqVLo9NmmTacNLwGyMi6NsvbYKzaVF3gPpl3kv1ust9JDrrJQSc57CaHneSzZ-T55rM_AwAA___5NdA6 diff --git a/pkg/sql/logictest/testdata/logic_test/vectorize_local b/pkg/sql/logictest/testdata/logic_test/vectorize_local index 6daff416a155..76d36ffde328 100644 --- a/pkg/sql/logictest/testdata/logic_test/vectorize_local +++ b/pkg/sql/logictest/testdata/logic_test/vectorize_local @@ -55,11 +55,13 @@ regions: KV contention time: 0µs KV rows read: 2,001 KV bytes read: 16 KiB + MVCC step count: 0 + MVCC seek count: 0 missing stats table: a@primary spans: FULL SCAN · -Diagram: https://cockroachdb.github.io/distsqlplan/decode.html#eJyMkMFO8zAQhO__U1hz9i8SDhx8qkBFqgoUtRUXlIMbr4ql1A7ejaCK8li8AE-GErcHhJA4zjfeWe_04NcGBpv53fxmq6y6Xa_ulYVGiI4e7IEY5hklKo02xZqYYxpRPz1YuHeYQsOHtpMRVxp1TATTQ7w0BIOt3TW0JusoXRTQcCTWN1OsnbXJH2w6QmPT2sBG_YfGqhOjZiU0lk9K_IGMKj4_OOs6BqEgPoYfVopvrBJZZ9SlLopTwO4odMbllVr6a2jsrNQvxCp20o7bxo9N42eQA6pBI5PTcSx2TzDloP9ewJq4jYHp2-2_JRdDpUFuT7lkjl2q6THFelqT5Wqam4AjluyWWSxCtoZq-PcVAAD__yPumVo= +Diagram: https://cockroachdb.github.io/distsqlplan/decode.html#eJyMkcFq40AQRO_7FU2dZ1lpD3uYk1njgHEcB9v4EnQYS40jIs8o0y0SY_RZ-YF8WbDGDgkhkGO9mqmC6iPksYHFanI9Ga_J0dVyMScHAx8qvnF7Ftg75CgM2hhKFgnxhI7Dg2n1DJsZ1L7t9IQLgzJEhj1Ca20YFmu3bXjJruL4J4NBxerqZoh1ozbWexcPMFi1zoul3zBYdGpplMNgtiGt92wpe32RpMvglb3WwX-xYngSiuwqS39Nlp0DtgflC87_0az-D4P5ZjwmUW6pDJ1XS9k7ZH74CLdOy3sWCp223ZkNRReQqoreIJHzDKJux7B5b34-1ZKlDV7400rfJWd9YcDVjtM5JHSx5NsYyqEmycXwbwAViyY3T2Lqk9UX_a-3AAAA__8TM6XW query T EXPLAIN ANALYZE (DISTSQL) SELECT c.a FROM c JOIN d ON d.b = c.b @@ -81,6 +83,8 @@ regions: │ KV contention time: 0µs │ KV rows read: 1 │ KV bytes read: 8 B +│ MVCC step count: 0 +│ MVCC seek count: 0 │ table: d@primary │ equality: (b) = (b) │ @@ -92,11 +96,13 @@ regions: KV contention time: 0µs KV rows read: 2 KV bytes read: 16 B + MVCC step count: 0 + MVCC seek count: 0 estimated row count: 1 (100% of the table; stats collected ago) table: c@sec spans: FULL SCAN · -Diagram: https://cockroachdb.github.io/distsqlplan/decode.html#eJykkl-L00AUxd_9FJfzPNamDyIDQlFW6Lo20l18kTxMZi5rNJ0bZya4S-nH8gv4ySQzWbAWxT-P59ycufd3yAHxcw-N64uri5c3ZBeGXu3qN2Tpst5syVG9Jbdo6TnZRQsFL463Zs8R-j0qNApDEMsxSpisQ_5g4-6glwqdH8Y02Y2ClcDQB6Qu9QyNG9P2vGPjODxZQsFxMl2fn7XryBYK14PxUdNjKNRj0rSu1HoFhdfvKHV71rT89jUWbcUn9qkTfzYK8iVSYOM0zeH2PvGDVT2lF1BoTbIfOJKMaZhWTRfl4IOxQnNUKGomisncMnR1VH9OfSmdn6GrU2i3HkK3N-EeClcin8aBPkrnSbymTD1XgHlB5ipIRcdk-v6M_t-Kqs6LepZ74ju243n6P-pb_U19O46D-Mgn1f3q5eWxUWB3y-XHjDIGy2-D2LymyDrnsuE4pjKtitj4MpoO_DFc_Ta8-incHB99DwAA__8TeBlu +Diagram: https://cockroachdb.github.io/distsqlplan/decode.html#eJykktFu0zAUhu95iqP_2pSkFwhZQqqohtSxNaibdoNy4dhHIyz1CbYjNlV9LF6AJ0ONM7RRgRi7_L-T3yf-5B3i1w4aFydnJ8tLsjND7zfVOVk6rVZrclStyc0aekt21kDBi-O12XKE_oQStUIfxHKMEg5oN36wcrfQhULr-yEdcK1gJTD0DqlNHUPj0jQdb9g4Dq8KKDhOpu3GY-0isoXCRW981PQSCtWQNC1KtZhD4cMVpXbLmoof32POVnxin1rxR6Mg3yIFNk7TVG7uEt-j8jW9g8L51XJJMXFPVgafNBW_IPPNQ9iYZD9zJBlSP0xsXHEP5qj3CjlNd4_JXDN0uVf_7udUWj_pKR_rcYs-tFsT7qBwJnIz9PRFWk_iNY1-JlmYFowG8uVzjsl03ZGn_1NaHit980SjfMt2ON7zDNHzp4jecOzFR34k-U8nF_tagd0158ceZQiWPwax45ocq7E3Ascx5WmZw8rn0eEHH5bLv5bnv5Xr_YufAQAA__8S5TJm query T EXPLAIN (OPT, VERBOSE) SELECT c.a FROM c INNER MERGE JOIN d ON c.a = d.b @@ -172,6 +178,8 @@ regions: │ KV contention time: 0µs │ KV rows read: 2 │ KV bytes read: 16 B +│ MVCC step count: 0 +│ MVCC seek count: 0 │ estimated row count: 1 (100% of the table; stats collected ago) │ table: c@sec │ spans: FULL SCAN @@ -184,11 +192,13 @@ regions: KV contention time: 0µs KV rows read: 2 KV bytes read: 16 B + MVCC step count: 0 + MVCC seek count: 0 missing stats table: d@primary spans: FULL SCAN · -Diagram: https://cockroachdb.github.io/distsqlplan/decode.html#eJzMk8GO0zAQhu88xWhOoDW7dbriYGmlChRQF5qgdMUF5eDaQzYisbO2I1pVfSxegCdDSajYdMtCxWVvmX_mt-ebcbbo7yoUuIw_xG9uQJ1LeJulC1AwT5I4g0WcvYvhOp0noCFN-oIr0OcrZGispkTW5FF8Ro45w8ZZRd5b10nbvmCu1ygmDEvTtKGTc4bKOkKxxVCGilDgjVxVlJHU5C4myFBTkGXVH6tmnhQyXDbSeAEvkWHaBgEzjgzff4JQ1iRg8uO7H2JlTSATSmsepJz95sGR1AKiQVltAu0l_gpeI8OVDOqWPNg2NN09XTu9cS9EmO8YDtEvHB9kQSj4jv078tK6QO6Cj2ln_AwZ0ppU-xChlmuoqbZuA7KqrJKBtIBJ33aX83cVBKob0KX_Cq2XBe3T_0EVnUJ1f5HRGE3PGlfW0m2OLTN6csuc_hH7N21rrNPkSI9I8875t5Ijs1uQK-jalobcxXQ8u4q-hOczfvbiypXF7fA5-hGe1Iu5POXFZOQbazwdjvDoyZNubqQLGvbgbesUfXRW9dcMYdr7ekGTD0OWD8HcDKmuwftm_qh5OjLzQ3N0gjk6NE8fNV8etJ3vnv0MAAD__xmY2Xc= +Diagram: https://cockroachdb.github.io/distsqlplan/decode.html#eJzUU9Fu0zAUfecrru4TaGaN04kHS5MqqoI6aIvaaS8oD659yaIldmY7olXVz-IH-DKUZIWmK4OKF_aWe849ts-5Nxv09zkKXIw-jobXoM4lvJvPJqBgPJ2O5jAZzd-P4Go2noKG2bRpuAR9vkSGxmqayoI8is_IMWFYOqvIe-tqaNM0jPUKRcQwM2UVajhhqKwjFBsMWcgJBV7LZU5zkppcL0KGmoLM8uZYNfCkkOGilMYLeI0MZ1UQMODI8MMNhKwgAdH3b76tlTWBTMiseUQ5-9WDI6kFxC2yXAfaQfwNvEWGk5vhEHygEpStTBAQ_QSJ7vbBpQzqljzYKpTVA9ZcsQNiTLYM2-rBuA8yJRR8y_4-nIV1gVyPd3MZ8DNkSCtS1WOzhVxBQYV1a5B5bpUMpAVEjcGa8_c5BCpK0Jm_g8rLlHb0P7iKT3G1P_K4a00PSpcV0q2PjT1-xmPv_zagX7lUxjpNjnQnk6RW_qnlSMoTcild2cyQ6_W7Kef0Jbwc8LNXly5Lb9vPzs_1X-3WxSm7NSdfWuPpMMKjJ0d1bqRTaufgbeUUfXJWNde05azRNYAmH1qWt8XYtFT9wH0xf1Lc74j5oTg-QRwfivtPii8Onp1sX_wIAAD__w2R8m8= statement ok RESET vectorize; RESET distsql diff --git a/pkg/sql/opt/exec/execbuilder/testdata/prepare b/pkg/sql/opt/exec/execbuilder/testdata/prepare index 38de30bc3fb0..44cff6c8a9ea 100644 --- a/pkg/sql/opt/exec/execbuilder/testdata/prepare +++ b/pkg/sql/opt/exec/execbuilder/testdata/prepare @@ -128,6 +128,8 @@ regions: KV contention time: 0µs KV rows read: 1 KV bytes read: 8 B + MVCC step count: 0 + MVCC seek count: 0 estimated row count: 0 table: ab@primary spans: [/1 - /1] @@ -151,6 +153,8 @@ regions: KV contention time: 0µs KV rows read: 0 KV bytes read: 0 B + MVCC step count: 0 + MVCC seek count: 0 estimated row count: 0 table: ab@primary spans: [/2 - /2] diff --git a/pkg/sql/opt/exec/explain/emit.go b/pkg/sql/opt/exec/explain/emit.go index 7f656a340029..ee659536db56 100644 --- a/pkg/sql/opt/exec/explain/emit.go +++ b/pkg/sql/opt/exec/explain/emit.go @@ -369,6 +369,20 @@ func (e *emitter) emitNodeAttributes(n *Node) error { if s.KVBytesRead.HasValue() { e.ob.AddField("KV bytes read", humanize.IBytes(s.KVBytesRead.Value())) } + if s.StepCount.HasValue() { + e.ob.AddField("MVCC step count", humanizeutil.Count(s.StepCount.Value())) + } + if s.SeekCount.HasValue() { + e.ob.AddField("MVCC seek count", humanizeutil.Count(s.SeekCount.Value())) + } + if e.ob.flags.Verbose { + if s.InternalStepCount.HasValue() { + e.ob.AddField("MVCC internal step count", humanizeutil.Count(s.InternalStepCount.Value())) + } + if s.InternalSeekCount.HasValue() { + e.ob.AddField("MVCC internal seek count", humanizeutil.Count(s.InternalSeekCount.Value())) + } + } } if stats, ok := n.annotations[exec.EstimatedStatsID]; ok { diff --git a/pkg/sql/opt/exec/factory.go b/pkg/sql/opt/exec/factory.go index 43b6d63f30bc..cf10fcdd9367 100644 --- a/pkg/sql/opt/exec/factory.go +++ b/pkg/sql/opt/exec/factory.go @@ -320,6 +320,11 @@ type ExecutionStats struct { KVBytesRead optional.Uint KVRowsRead optional.Uint + StepCount optional.Uint + InternalStepCount optional.Uint + SeekCount optional.Uint + InternalSeekCount optional.Uint + // Nodes on which this operator was executed. Nodes []string diff --git a/pkg/sql/rowexec/inverted_joiner.go b/pkg/sql/rowexec/inverted_joiner.go index 40f7fa23f395..e0a045c704ea 100644 --- a/pkg/sql/rowexec/inverted_joiner.go +++ b/pkg/sql/rowexec/inverted_joiner.go @@ -39,7 +39,7 @@ import ( // scanned rows to disk. The spilling cost will probably be dominated by // the de-duping cost, since it incurs a read. var invertedJoinerBatchSize = util.ConstantWithMetamorphicTestValue( - "invered-joiner-batch-size", + "inverted-joiner-batch-size", 100, /* defaultValue */ 1, /* metamorphicValue */ ) @@ -159,6 +159,8 @@ type invertedJoiner struct { spanBuilder *span.Builder outputContinuationCol bool + + scanStats execinfra.ScanStats } var _ execinfra.Processor = &invertedJoiner{} @@ -770,7 +772,8 @@ func (ij *invertedJoiner) execStatsForTrace() *execinfrapb.ComponentStats { if !ok { return nil } - return &execinfrapb.ComponentStats{ + ij.scanStats = execinfra.GetScanStats(ij.Ctx) + ret := execinfrapb.ComponentStats{ Inputs: []execinfrapb.InputStats{is}, KV: execinfrapb.KVStats{ BytesRead: optional.MakeUint(uint64(ij.fetcher.GetBytesRead())), @@ -784,6 +787,8 @@ func (ij *invertedJoiner) execStatsForTrace() *execinfrapb.ComponentStats { }, Output: ij.OutputHelper.Stats(), } + execinfra.PopulateKVMVCCStats(&ret.KV, &ij.scanStats) + return &ret } func (ij *invertedJoiner) generateMeta() []execinfrapb.ProducerMetadata { diff --git a/pkg/sql/rowexec/joinreader.go b/pkg/sql/rowexec/joinreader.go index f03d52086e83..df59dfc2df40 100644 --- a/pkg/sql/rowexec/joinreader.go +++ b/pkg/sql/rowexec/joinreader.go @@ -162,6 +162,10 @@ type joinReader struct { // detailed comment in the spec). This can never be true for index joins, // and requires that the spec has MaintainOrdering set to true. outputGroupContinuationForLeftRow bool + + // scanStats is collected from the trace after we finish doing work for this + // join. + scanStats execinfra.ScanStats } var _ execinfra.Processor = &joinReader{} @@ -810,6 +814,11 @@ func (jr *joinReader) ConsumerClosed() { } func (jr *joinReader) close() { + // Make sure to clone any tracing span so that stats can pick it up later. + // Stats are only collected after we finish closing the processor. + if !jr.Closed { + jr.scanStats = execinfra.GetScanStats(jr.Ctx) + } if jr.InternalClose() { if jr.fetcher != nil { jr.fetcher.Close(jr.Ctx) @@ -836,7 +845,7 @@ func (jr *joinReader) execStatsForTrace() *execinfrapb.ComponentStats { } // TODO(asubiotto): Add memory and disk usage to EXPLAIN ANALYZE. - return &execinfrapb.ComponentStats{ + ret := &execinfrapb.ComponentStats{ Inputs: []execinfrapb.InputStats{is}, KV: execinfrapb.KVStats{ BytesRead: optional.MakeUint(uint64(jr.fetcher.GetBytesRead())), @@ -846,6 +855,8 @@ func (jr *joinReader) execStatsForTrace() *execinfrapb.ComponentStats { }, Output: jr.OutputHelper.Stats(), } + execinfra.PopulateKVMVCCStats(&ret.KV, &jr.scanStats) + return ret } func (jr *joinReader) generateMeta() []execinfrapb.ProducerMetadata { diff --git a/pkg/sql/rowexec/tablereader.go b/pkg/sql/rowexec/tablereader.go index c95f9a5d6478..07640c1396a3 100644 --- a/pkg/sql/rowexec/tablereader.go +++ b/pkg/sql/rowexec/tablereader.go @@ -50,6 +50,8 @@ type tableReader struct { fetcher rowFetcher alloc rowenc.DatumAlloc + scanStats execinfra.ScanStats + // rowsRead is the number of rows read and is tracked unconditionally. rowsRead int64 } @@ -277,6 +279,9 @@ func (tr *tableReader) Next() (rowenc.EncDatumRow, *execinfrapb.ProducerMetadata func (tr *tableReader) close() { if tr.InternalClose() { + // scanStats is collected from the trace after we finish doing work for this + // join. + tr.scanStats = execinfra.GetScanStats(tr.Ctx) if tr.fetcher != nil { tr.fetcher.Close(tr.Ctx) } @@ -294,7 +299,7 @@ func (tr *tableReader) execStatsForTrace() *execinfrapb.ComponentStats { if !ok { return nil } - return &execinfrapb.ComponentStats{ + ret := &execinfrapb.ComponentStats{ KV: execinfrapb.KVStats{ BytesRead: optional.MakeUint(uint64(tr.fetcher.GetBytesRead())), TuplesRead: is.NumTuples, @@ -303,6 +308,8 @@ func (tr *tableReader) execStatsForTrace() *execinfrapb.ComponentStats { }, Output: tr.OutputHelper.Stats(), } + execinfra.PopulateKVMVCCStats(&ret.KV, &tr.scanStats) + return ret } func (tr *tableReader) generateMeta() []execinfrapb.ProducerMetadata { diff --git a/pkg/sql/rowexec/zigzagjoiner.go b/pkg/sql/rowexec/zigzagjoiner.go index 1997666307c8..559664bdd42f 100644 --- a/pkg/sql/rowexec/zigzagjoiner.go +++ b/pkg/sql/rowexec/zigzagjoiner.go @@ -246,6 +246,8 @@ type zigzagJoiner struct { rowAlloc rowenc.EncDatumRowAlloc fetchedInititalRow bool + + scanStats execinfra.ScanStats } // zigzagJoinerBatchSize is a parameter which determines how many rows should @@ -990,10 +992,13 @@ func (z *zigzagJoiner) ConsumerClosed() { // execStatsForTrace implements ProcessorBase.ExecStatsForTrace. func (z *zigzagJoiner) execStatsForTrace() *execinfrapb.ComponentStats { + z.scanStats = execinfra.GetScanStats(z.Ctx) + kvStats := execinfrapb.KVStats{ BytesRead: optional.MakeUint(uint64(z.getBytesRead())), ContentionTime: optional.MakeTimeValue(execinfra.GetCumulativeContentionTime(z.Ctx)), } + execinfra.PopulateKVMVCCStats(&kvStats, &z.scanStats) for i := range z.infos { fis, ok := getFetcherInputStats(z.infos[i].fetcher) if !ok { diff --git a/pkg/storage/mvcc.go b/pkg/storage/mvcc.go index 87526347b305..d81b0f1a680d 100644 --- a/pkg/storage/mvcc.go +++ b/pkg/storage/mvcc.go @@ -31,7 +31,9 @@ import ( "github.com/cockroachdb/cockroach/pkg/util/log" "github.com/cockroachdb/cockroach/pkg/util/protoutil" "github.com/cockroachdb/cockroach/pkg/util/timeutil" + "github.com/cockroachdb/cockroach/pkg/util/tracing" "github.com/cockroachdb/errors" + "github.com/cockroachdb/pebble" ) const ( @@ -893,6 +895,10 @@ func mvccGet( mvccScanner.init(opts.Txn, opts.LocalUncertaintyLimit) mvccScanner.get() + // If we have a trace, emit the scan stats that we produced. + traceSpan := tracing.SpanFromContext(ctx) + recordIteratorStats(traceSpan, mvccScanner.stats()) + if mvccScanner.err != nil { return optionalValue{}, nil, mvccScanner.err } @@ -2351,6 +2357,22 @@ func MVCCDeleteRange( return keys, res.ResumeSpan, res.NumKeys, nil } +func recordIteratorStats(traceSpan *tracing.Span, iteratorStats IteratorStats) { + stats := iteratorStats.Stats + if traceSpan != nil { + steps := stats.ReverseStepCount[pebble.InterfaceCall] + stats.ForwardStepCount[pebble.InterfaceCall] + seeks := stats.ReverseSeekCount[pebble.InterfaceCall] + stats.ForwardSeekCount[pebble.InterfaceCall] + internalSteps := stats.ReverseStepCount[pebble.InternalIterCall] + stats.ForwardStepCount[pebble.InternalIterCall] + internalSeeks := stats.ReverseSeekCount[pebble.InternalIterCall] + stats.ForwardSeekCount[pebble.InternalIterCall] + traceSpan.RecordStructured(&roachpb.ScanStats{ + NumInterfaceSeeks: uint64(seeks), + NumInternalSeeks: uint64(internalSeeks), + NumInterfaceSteps: uint64(steps), + NumInternalSteps: uint64(internalSteps), + }) + } +} + func mvccScanToBytes( ctx context.Context, iter MVCCIterator, @@ -2401,6 +2423,11 @@ func mvccScanToBytes( res.NumKeys = mvccScanner.results.count res.NumBytes = mvccScanner.results.bytes + // If we have a trace, emit the scan stats that we produced. + traceSpan := tracing.SpanFromContext(ctx) + + recordIteratorStats(traceSpan, mvccScanner.stats()) + res.Intents, err = buildScanIntents(mvccScanner.intentsRepr()) if err != nil { return MVCCScanResult{}, err diff --git a/pkg/storage/pebble_mvcc_scanner.go b/pkg/storage/pebble_mvcc_scanner.go index 0d4d5a977a30..84668dc60a86 100644 --- a/pkg/storage/pebble_mvcc_scanner.go +++ b/pkg/storage/pebble_mvcc_scanner.go @@ -888,3 +888,7 @@ func (p *pebbleMVCCScanner) intentsRepr() []byte { } return p.intents.Repr() } + +func (p *pebbleMVCCScanner) stats() IteratorStats { + return p.parent.Stats() +}