diff --git a/api/client/client_test.go b/api/client/client_test.go index 788ad961a8d8f..76181279b1e1a 100644 --- a/api/client/client_test.go +++ b/api/client/client_test.go @@ -46,7 +46,7 @@ func TestMain(m *testing.M) { } type pingService struct { - *proto.UnimplementedAuthServiceServer + proto.UnimplementedAuthServiceServer userAgentFromLastCallValue atomic.Value } @@ -192,7 +192,7 @@ func TestWaitForConnectionReady(t *testing.T) { } type listResourcesService struct { - *proto.UnimplementedAuthServiceServer + proto.UnimplementedAuthServiceServer } func (s *listResourcesService) ListResources(ctx context.Context, req *proto.ListResourcesRequest) (*proto.ListResourcesResponse, error) { diff --git a/api/client/joinservice_test.go b/api/client/joinservice_test.go index a8a8509866d67..c0068f4be47f7 100644 --- a/api/client/joinservice_test.go +++ b/api/client/joinservice_test.go @@ -34,7 +34,7 @@ import ( ) type mockJoinServiceServer struct { - *proto.UnimplementedJoinServiceServer + proto.UnimplementedJoinServiceServer registerUsingTPMMethod func(srv proto.JoinService_RegisterUsingTPMMethodServer) error } diff --git a/api/client/proto/authservice.pb.go b/api/client/proto/authservice.pb.go index 48752ecc17ad7..7a22ab12f0961 100644 --- a/api/client/proto/authservice.pb.go +++ b/api/client/proto/authservice.pb.go @@ -1302,7 +1302,9 @@ type RouteToApp struct { // AzureIdentity is the Azure identity to assume when accessing Azure API. AzureIdentity string `protobuf:"bytes,6,opt,name=AzureIdentity,proto3" json:"azure_identity,omitempty"` // GCPServiceAccount is the GCP service account to assume when accessing GCP API. - GCPServiceAccount string `protobuf:"bytes,7,opt,name=GCPServiceAccount,proto3" json:"gcp_service_account,omitempty"` + GCPServiceAccount string `protobuf:"bytes,7,opt,name=GCPServiceAccount,proto3" json:"gcp_service_account,omitempty"` + // URI is the URI of the app. This is the internal endpoint where the application is running and isn't user-facing. + URI string `protobuf:"bytes,8,opt,name=URI,proto3" json:"uri,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -1391,6 +1393,13 @@ func (m *RouteToApp) GetGCPServiceAccount() string { return "" } +func (m *RouteToApp) GetURI() string { + if m != nil { + return m.URI + } + return "" +} + // GetUserRequest specifies parameters for the GetUser method. type GetUserRequest struct { // Name is the name of the desired user. @@ -3986,10 +3995,16 @@ type CreateAppSessionRequest struct { // MFAResponse is a response to a challenge from a user's MFA device. // An optional field, that when provided, the response will be validated and // the ID of the validated MFA device will be stored in session's certificate. - MFAResponse *MFAAuthenticateResponse `protobuf:"bytes,8,opt,name=MFAResponse,proto3" json:"mfa_response,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + MFAResponse *MFAAuthenticateResponse `protobuf:"bytes,8,opt,name=MFAResponse,proto3" json:"mfa_response,omitempty"` + // AppName is the name of the application. + AppName string `protobuf:"bytes,9,opt,name=AppName,proto3" json:"app_name"` + // URI is the URI of the app. This is the internal endpoint where the application is running and isn't user-facing. + URI string `protobuf:"bytes,10,opt,name=URI,proto3" json:"uri"` + // ClientAddr is a client (user's) address. + ClientAddr string `protobuf:"bytes,11,opt,name=ClientAddr,proto3" json:"client_addr,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *CreateAppSessionRequest) Reset() { *m = CreateAppSessionRequest{} } @@ -4074,6 +4089,27 @@ func (m *CreateAppSessionRequest) GetMFAResponse() *MFAAuthenticateResponse { return nil } +func (m *CreateAppSessionRequest) GetAppName() string { + if m != nil { + return m.AppName + } + return "" +} + +func (m *CreateAppSessionRequest) GetURI() string { + if m != nil { + return m.URI + } + return "" +} + +func (m *CreateAppSessionRequest) GetClientAddr() string { + if m != nil { + return m.ClientAddr + } + return "" +} + // CreateAppSessionResponse contains the requested application web session. type CreateAppSessionResponse struct { // Session is the application web session. @@ -15575,931 +15611,935 @@ func init() { } var fileDescriptor_0ffcffcda38ae159 = []byte{ - // 14782 bytes of a gzipped FileDescriptorProto + // 14844 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0xbd, 0x5b, 0x8c, 0x1c, 0x49, - 0x76, 0x18, 0xda, 0xd5, 0xef, 0x3e, 0xfd, 0x60, 0x31, 0xba, 0x9b, 0x5d, 0x6c, 0x3e, 0x8a, 0xcc, - 0x79, 0x71, 0xb8, 0xb3, 0x7c, 0x34, 0x67, 0x66, 0xe7, 0xb5, 0x33, 0x53, 0xfd, 0x20, 0xbb, 0xc9, - 0x7e, 0x4d, 0x56, 0x77, 0x73, 0x66, 0x76, 0xb4, 0xb5, 0xc9, 0xaa, 0x60, 0x77, 0x8a, 0xd5, 0x99, - 0xb5, 0x99, 0x59, 0xe4, 0x70, 0x75, 0xa5, 0x0b, 0xad, 0xee, 0xc5, 0xd5, 0xcf, 0xb5, 0x25, 0xc0, - 0x32, 0x64, 0xe8, 0x43, 0x36, 0x60, 0x01, 0x86, 0x01, 0x1b, 0xfa, 0x31, 0xf4, 0x63, 0xc0, 0xf0, - 0x97, 0xd7, 0x02, 0x04, 0xdb, 0x90, 0xf4, 0xe3, 0x8f, 0x96, 0xbd, 0x80, 0x7f, 0x1a, 0xf6, 0x87, - 0x60, 0xd8, 0x80, 0x17, 0x10, 0x60, 0xc4, 0x89, 0x47, 0x46, 0xe4, 0xab, 0xba, 0x39, 0x9c, 0x95, - 0x7f, 0xc8, 0xae, 0x13, 0xe7, 0x9c, 0x88, 0x38, 0x11, 0x19, 0x71, 0xe2, 0xc4, 0x89, 0x73, 0xe0, - 0x46, 0x44, 0xdb, 0xb4, 0xe3, 0x07, 0xd1, 0xcd, 0x36, 0xdd, 0x77, 0x9a, 0xcf, 0x6f, 0x36, 0xdb, - 0x2e, 0xf5, 0xa2, 0x9b, 0x9d, 0xc0, 0x8f, 0xfc, 0x9b, 0x4e, 0x37, 0x3a, 0x08, 0x69, 0xf0, 0xd4, - 0x6d, 0xd2, 0x1b, 0x08, 0x21, 0x43, 0xf8, 0xdf, 0xfc, 0xcc, 0xbe, 0xbf, 0xef, 0x73, 0x1c, 0xf6, - 0x17, 0x2f, 0x9c, 0xbf, 0xb0, 0xef, 0xfb, 0xfb, 0x6d, 0xca, 0x89, 0x1f, 0x75, 0x1f, 0xdf, 0xa4, - 0x87, 0x9d, 0xe8, 0xb9, 0x28, 0xac, 0x26, 0x0b, 0x23, 0xf7, 0x90, 0x86, 0x91, 0x73, 0xd8, 0x11, - 0x08, 0x6f, 0xaa, 0xa6, 0x38, 0x51, 0xc4, 0x4a, 0x22, 0xd7, 0xf7, 0x6e, 0x3e, 0xbd, 0xad, 0xff, - 0x14, 0xa8, 0xd7, 0x0a, 0x5b, 0xdd, 0xa4, 0x41, 0x14, 0x9e, 0x08, 0x93, 0x3e, 0xa5, 0x5e, 0x94, - 0xaa, 0x5e, 0x60, 0x46, 0xcf, 0x3b, 0x34, 0xe4, 0x28, 0xf2, 0x3f, 0x81, 0x7a, 0x35, 0x1b, 0x15, - 0xff, 0x15, 0x28, 0xdf, 0xcd, 0x46, 0x79, 0x46, 0x1f, 0x31, 0x99, 0x7a, 0xea, 0x8f, 0x1e, 0xe8, - 0x81, 0xd3, 0xe9, 0xd0, 0x20, 0xfe, 0x43, 0xa0, 0x9f, 0x57, 0xe8, 0x87, 0x8f, 0x1d, 0x26, 0xa2, - 0xc3, 0xc7, 0x4e, 0xaa, 0x1b, 0xdd, 0xd0, 0xd9, 0xa7, 0xa2, 0xf9, 0x4f, 0x6f, 0xeb, 0x3f, 0x39, - 0xaa, 0xf5, 0x87, 0x25, 0x18, 0x7a, 0xe8, 0x44, 0xcd, 0x03, 0xf2, 0x09, 0x0c, 0x3d, 0x70, 0xbd, - 0x56, 0x58, 0x29, 0x5d, 0x19, 0xb8, 0x36, 0xbe, 0x50, 0xbe, 0xc1, 0xbb, 0x82, 0x85, 0xac, 0x60, - 0x71, 0xee, 0x67, 0x47, 0xd5, 0xbe, 0xe3, 0xa3, 0xea, 0x99, 0x27, 0x0c, 0xed, 0x2d, 0xff, 0xd0, - 0x8d, 0x70, 0x6c, 0x6d, 0x4e, 0x47, 0x76, 0x61, 0xba, 0xd6, 0x6e, 0xfb, 0xcf, 0xb6, 0x9d, 0x20, - 0x72, 0x9d, 0x76, 0xbd, 0xdb, 0x6c, 0xd2, 0x30, 0xac, 0xf4, 0x5f, 0x29, 0x5d, 0x1b, 0x5d, 0x7c, - 0xe5, 0xf8, 0xa8, 0x5a, 0x75, 0x58, 0x71, 0xa3, 0xc3, 0xcb, 0x1b, 0x21, 0x47, 0xd0, 0x18, 0x65, - 0xd1, 0x5b, 0x7f, 0x3a, 0x0c, 0xe5, 0x55, 0x3f, 0x8c, 0x96, 0xd8, 0x88, 0xda, 0xf4, 0xc7, 0x5d, - 0x1a, 0x46, 0xe4, 0x15, 0x18, 0x66, 0xb0, 0xb5, 0xe5, 0x4a, 0xe9, 0x4a, 0xe9, 0xda, 0xd8, 0xe2, - 0xf8, 0xf1, 0x51, 0x75, 0xe4, 0xc0, 0x0f, 0xa3, 0x86, 0xdb, 0xb2, 0x45, 0x11, 0x79, 0x13, 0x46, - 0x37, 0xfd, 0x16, 0xdd, 0x74, 0x0e, 0x29, 0xb6, 0x62, 0x6c, 0x71, 0xf2, 0xf8, 0xa8, 0x3a, 0xe6, - 0xf9, 0x2d, 0xda, 0xf0, 0x9c, 0x43, 0x6a, 0xab, 0x62, 0xb2, 0x07, 0x83, 0xb6, 0xdf, 0xa6, 0x95, - 0x01, 0x44, 0x5b, 0x3c, 0x3e, 0xaa, 0x0e, 0x06, 0x7e, 0x9b, 0xfe, 0xe2, 0xa8, 0xfa, 0xee, 0xbe, - 0x1b, 0x1d, 0x74, 0x1f, 0xdd, 0x68, 0xfa, 0x87, 0x37, 0xf7, 0x03, 0xe7, 0xa9, 0xcb, 0x27, 0xa1, - 0xd3, 0xbe, 0x19, 0x4f, 0xd5, 0x8e, 0x2b, 0xc6, 0xbd, 0xfe, 0x3c, 0x8c, 0xe8, 0x21, 0xe3, 0x64, - 0x23, 0x3f, 0xf2, 0x10, 0x66, 0x6a, 0xad, 0x96, 0xcb, 0x29, 0xb6, 0x03, 0xd7, 0x6b, 0xba, 0x1d, - 0xa7, 0x1d, 0x56, 0x06, 0xaf, 0x0c, 0x5c, 0x1b, 0x13, 0x42, 0x51, 0xe5, 0x8d, 0x8e, 0x42, 0xd0, - 0x84, 0x92, 0xc9, 0x80, 0xdc, 0x81, 0xd1, 0xe5, 0xcd, 0x3a, 0x6b, 0x7b, 0x58, 0x19, 0x42, 0x66, - 0x73, 0xc7, 0x47, 0xd5, 0xe9, 0x96, 0x17, 0x62, 0xd7, 0x74, 0x06, 0x0a, 0x91, 0xbc, 0x0b, 0x13, - 0xdb, 0xdd, 0x47, 0x6d, 0xb7, 0xb9, 0xb3, 0x5e, 0x7f, 0x40, 0x9f, 0x57, 0x86, 0xaf, 0x94, 0xae, - 0x4d, 0x2c, 0x92, 0xe3, 0xa3, 0xea, 0x54, 0x07, 0xe1, 0x8d, 0xa8, 0x1d, 0x36, 0x9e, 0xd0, 0xe7, - 0xb6, 0x81, 0x17, 0xd3, 0xd5, 0xeb, 0xab, 0x8c, 0x6e, 0x24, 0x45, 0x17, 0x86, 0x07, 0x3a, 0x1d, - 0xc7, 0x23, 0x37, 0x01, 0x6c, 0x7a, 0xe8, 0x47, 0xb4, 0xd6, 0x6a, 0x05, 0x95, 0x51, 0x94, 0xed, - 0x99, 0xe3, 0xa3, 0xea, 0x78, 0x80, 0xd0, 0x86, 0xd3, 0x6a, 0x05, 0xb6, 0x86, 0x42, 0x96, 0x60, - 0xd4, 0xf6, 0xb9, 0x80, 0x2b, 0x63, 0x57, 0x4a, 0xd7, 0xc6, 0x17, 0xce, 0x88, 0x69, 0x28, 0xc1, - 0x8b, 0xe7, 0x8e, 0x8f, 0xaa, 0x24, 0x10, 0xbf, 0xf4, 0x5e, 0x4a, 0x0c, 0x52, 0x85, 0x91, 0x4d, - 0x7f, 0xc9, 0x69, 0x1e, 0xd0, 0x0a, 0xe0, 0xdc, 0x1b, 0x3a, 0x3e, 0xaa, 0x96, 0xbe, 0x6b, 0x4b, - 0x28, 0x79, 0x0a, 0xe3, 0xf1, 0x40, 0x85, 0x95, 0x71, 0x14, 0xdf, 0xce, 0xf1, 0x51, 0xf5, 0x5c, - 0x88, 0xe0, 0x06, 0x1b, 0x7a, 0x4d, 0x82, 0xdf, 0x60, 0x16, 0xe8, 0x15, 0x91, 0xaf, 0x60, 0x36, - 0xfe, 0x59, 0x0b, 0x43, 0x1a, 0x30, 0x1e, 0x6b, 0xcb, 0x95, 0x49, 0x94, 0xcc, 0xeb, 0xc7, 0x47, - 0x55, 0x4b, 0x6b, 0x41, 0xc3, 0x91, 0x28, 0x0d, 0xb7, 0xa5, 0xf5, 0x34, 0x9b, 0xc9, 0xfd, 0xc1, - 0xd1, 0x89, 0xf2, 0xa4, 0x7d, 0x69, 0xd7, 0x0b, 0x23, 0xe7, 0x51, 0x9b, 0x66, 0x22, 0x59, 0x7f, - 0x53, 0x02, 0xb2, 0xd5, 0xa1, 0x5e, 0xbd, 0xbe, 0xca, 0xbe, 0x27, 0xf9, 0x39, 0xbd, 0x05, 0x63, - 0x7c, 0xe0, 0xd8, 0xe8, 0xf6, 0xe3, 0xe8, 0x4e, 0x1d, 0x1f, 0x55, 0x41, 0x8c, 0x2e, 0x1b, 0xd9, - 0x18, 0x81, 0xbc, 0x06, 0x03, 0x3b, 0x3b, 0xeb, 0xf8, 0xad, 0x0c, 0x2c, 0x4e, 0x1f, 0x1f, 0x55, - 0x07, 0xa2, 0xa8, 0xfd, 0x8b, 0xa3, 0xea, 0xe8, 0x72, 0x37, 0x40, 0xb1, 0xd8, 0xac, 0x9c, 0xbc, - 0x06, 0x23, 0x4b, 0xed, 0x6e, 0x18, 0xd1, 0xa0, 0x32, 0x18, 0x7f, 0xa4, 0x4d, 0x0e, 0xb2, 0x65, - 0x19, 0xf9, 0x0e, 0x0c, 0xee, 0x86, 0x34, 0xa8, 0x0c, 0xe1, 0x78, 0x4f, 0x8a, 0xf1, 0x66, 0xa0, - 0xbd, 0x85, 0xc5, 0x51, 0xf6, 0x25, 0x76, 0x43, 0x1a, 0xd8, 0x88, 0x44, 0x6e, 0xc0, 0x10, 0x1f, - 0xb4, 0x61, 0x5c, 0xa4, 0x26, 0xd5, 0xec, 0x68, 0xd3, 0xbd, 0x77, 0x17, 0xc7, 0x8e, 0x8f, 0xaa, - 0x43, 0x38, 0x78, 0x36, 0x47, 0xbb, 0x3f, 0x38, 0x5a, 0x2a, 0xf7, 0xdb, 0xa3, 0x8c, 0x96, 0x7d, - 0x16, 0xd6, 0x77, 0x60, 0x5c, 0xeb, 0x3e, 0xb9, 0x08, 0x83, 0xec, 0x7f, 0x5c, 0x44, 0x26, 0x78, - 0x65, 0x6c, 0xe3, 0xb0, 0x11, 0x6a, 0xfd, 0xc3, 0x69, 0x28, 0x33, 0x4a, 0x63, 0xe5, 0xb9, 0xa1, - 0x8b, 0x8a, 0xd3, 0x95, 0x4d, 0x51, 0x55, 0x4a, 0xba, 0xb0, 0xae, 0x81, 0xaa, 0x5d, 0x2c, 0x42, - 0x13, 0xc7, 0x47, 0xd5, 0xd1, 0xae, 0x80, 0xc5, 0x6d, 0x23, 0x75, 0x18, 0x59, 0xf9, 0xba, 0xe3, - 0x06, 0x34, 0x44, 0xd1, 0x8e, 0x2f, 0xcc, 0xdf, 0xe0, 0xdb, 0xe5, 0x0d, 0xb9, 0x5d, 0xde, 0xd8, - 0x91, 0xdb, 0xe5, 0xe2, 0x25, 0xb1, 0x18, 0x9f, 0xa5, 0x9c, 0x24, 0x9e, 0x1f, 0xbf, 0xf3, 0x57, - 0xd5, 0x92, 0x2d, 0x39, 0x91, 0xb7, 0x60, 0xf8, 0xae, 0x1f, 0x1c, 0x3a, 0x91, 0x18, 0x83, 0x99, - 0xe3, 0xa3, 0x6a, 0xf9, 0x31, 0x42, 0xb4, 0x29, 0x25, 0x70, 0xc8, 0x5d, 0x98, 0xb2, 0xfd, 0x6e, - 0x44, 0x77, 0x7c, 0x39, 0x72, 0x43, 0x48, 0x75, 0xf9, 0xf8, 0xa8, 0x3a, 0x1f, 0xb0, 0x92, 0x46, - 0xe4, 0x37, 0xc4, 0x10, 0x6a, 0xf4, 0x09, 0x2a, 0xb2, 0x02, 0x53, 0x35, 0x5c, 0xbd, 0x85, 0xd4, - 0xf8, 0x78, 0x8d, 0x2d, 0x5e, 0x3a, 0x3e, 0xaa, 0x9e, 0x77, 0xb0, 0xa4, 0x11, 0x88, 0x22, 0x9d, - 0x8d, 0x49, 0x44, 0x36, 0xe1, 0xec, 0x83, 0xee, 0x23, 0x1a, 0x78, 0x34, 0xa2, 0xa1, 0x6c, 0xd1, - 0x08, 0xb6, 0xe8, 0xca, 0xf1, 0x51, 0xf5, 0xe2, 0x13, 0x55, 0x98, 0xd1, 0xa6, 0x34, 0x29, 0xa1, - 0x70, 0x46, 0x34, 0x74, 0xd9, 0x89, 0x9c, 0x47, 0x4e, 0x48, 0x71, 0x51, 0x1a, 0x5f, 0x38, 0xc7, - 0x45, 0x7c, 0x23, 0x51, 0xba, 0xf8, 0x8a, 0x90, 0xf2, 0x05, 0xd5, 0xf7, 0x96, 0x28, 0xd2, 0x2a, - 0x4a, 0xf2, 0x64, 0x6b, 0xb3, 0xda, 0x77, 0xc6, 0xb0, 0xb5, 0xb8, 0x36, 0xab, 0x7d, 0x47, 0x5f, - 0xb5, 0xd4, 0x0e, 0xb4, 0x0e, 0x43, 0xbb, 0x6c, 0x77, 0xc6, 0x35, 0x6b, 0x6a, 0xe1, 0xaa, 0x68, - 0x51, 0x72, 0xfe, 0xdd, 0x60, 0x3f, 0x10, 0x11, 0xbf, 0xbc, 0x33, 0xb8, 0xa3, 0xeb, 0x7b, 0x31, - 0x96, 0x91, 0xcf, 0x00, 0x44, 0xab, 0x6a, 0x9d, 0x4e, 0x65, 0x1c, 0x3b, 0x79, 0xd6, 0xec, 0x64, - 0xad, 0xd3, 0x59, 0xbc, 0x2c, 0xfa, 0x77, 0x4e, 0xf5, 0xcf, 0xe9, 0x74, 0x34, 0x6e, 0x1a, 0x13, - 0xf2, 0x09, 0x4c, 0xe0, 0x92, 0x26, 0x47, 0x74, 0x02, 0x47, 0xf4, 0xc2, 0xf1, 0x51, 0x75, 0x0e, - 0x57, 0xab, 0x8c, 0xf1, 0x34, 0x08, 0xc8, 0x6f, 0xc0, 0xac, 0x60, 0xf7, 0xd0, 0xf5, 0x5a, 0xfe, - 0xb3, 0x70, 0x99, 0x86, 0x4f, 0x22, 0xbf, 0x83, 0xcb, 0xdf, 0xf8, 0xc2, 0x45, 0xb3, 0x79, 0x26, - 0xce, 0xe2, 0x75, 0xd1, 0x52, 0x4b, 0xb5, 0xf4, 0x19, 0x47, 0x68, 0xb4, 0x38, 0x86, 0xbe, 0x40, - 0x66, 0xb2, 0x20, 0x6b, 0x70, 0x66, 0x37, 0xa4, 0x46, 0x1f, 0xa6, 0x70, 0x7f, 0xa8, 0xb2, 0x11, - 0xee, 0x86, 0xb4, 0x91, 0xd7, 0x8f, 0x24, 0x1d, 0xb1, 0x81, 0x2c, 0x07, 0x7e, 0x27, 0x31, 0xc7, - 0xcf, 0xa0, 0x44, 0xac, 0xe3, 0xa3, 0xea, 0xe5, 0x56, 0xe0, 0x77, 0x1a, 0xf9, 0x13, 0x3d, 0x83, - 0x9a, 0xfc, 0x10, 0xce, 0x2d, 0xf9, 0x9e, 0x47, 0x9b, 0x6c, 0x05, 0x5d, 0x76, 0x9d, 0x7d, 0xcf, - 0x0f, 0x23, 0xb7, 0xb9, 0xb6, 0x5c, 0x29, 0xc7, 0xdb, 0x43, 0x53, 0x61, 0x34, 0x5a, 0x0a, 0xc5, - 0xdc, 0x1e, 0x72, 0xb8, 0x90, 0x1f, 0xc0, 0xa4, 0xa8, 0x8b, 0x06, 0x38, 0x35, 0xcf, 0x16, 0x4f, - 0x34, 0x85, 0xcc, 0x37, 0xfa, 0x40, 0xfe, 0xe4, 0xaa, 0x93, 0xc9, 0x8b, 0x7c, 0x05, 0xe3, 0x1b, - 0x77, 0x6b, 0x36, 0x0d, 0x3b, 0xbe, 0x17, 0xd2, 0x0a, 0xc1, 0x11, 0xbd, 0x2c, 0x58, 0x6f, 0xdc, - 0xad, 0xd5, 0xba, 0xd1, 0x01, 0xf5, 0x22, 0xb7, 0xe9, 0x44, 0x54, 0x62, 0x2d, 0xce, 0xb3, 0x99, - 0x77, 0xf8, 0xd8, 0x69, 0x04, 0x02, 0xa2, 0xf5, 0x42, 0x67, 0x47, 0xe6, 0x61, 0xb4, 0x5e, 0x5f, - 0x5d, 0xf7, 0xf7, 0x5d, 0xaf, 0x32, 0xcd, 0x84, 0x61, 0xab, 0xdf, 0xe4, 0x31, 0xcc, 0x6a, 0x67, - 0x83, 0x06, 0xfb, 0x9f, 0x1e, 0x52, 0x2f, 0xaa, 0xcc, 0x60, 0x1b, 0xbe, 0xab, 0x0e, 0x37, 0x37, - 0xf4, 0x23, 0xc4, 0xd3, 0xdb, 0x37, 0x6a, 0xf1, 0xcf, 0xba, 0x24, 0x5a, 0xec, 0xaf, 0x94, 0xec, - 0x19, 0x27, 0xa3, 0x84, 0xec, 0xc0, 0xc8, 0x76, 0x37, 0xe8, 0xf8, 0x21, 0xad, 0xcc, 0xa2, 0xe0, - 0x5e, 0x29, 0xfa, 0x42, 0x05, 0xea, 0xe2, 0x2c, 0x5b, 0xa2, 0x3b, 0xfc, 0x87, 0xd6, 0x3b, 0xc9, - 0x8a, 0x7c, 0x0a, 0x13, 0xf5, 0xfa, 0x6a, 0xbc, 0xa1, 0x9c, 0xc3, 0x0d, 0xe5, 0xe2, 0xf1, 0x51, - 0xb5, 0xc2, 0x54, 0xaa, 0x78, 0x53, 0xd1, 0xbf, 0x2a, 0x9d, 0x82, 0x71, 0xd8, 0x59, 0xaf, 0xc7, - 0x1c, 0xe6, 0x62, 0x0e, 0x4c, 0x99, 0xcb, 0xe6, 0xa0, 0x53, 0x90, 0x7f, 0x56, 0x82, 0x2b, 0x3a, - 0xcb, 0x2c, 0xc1, 0x54, 0xce, 0xbf, 0x88, 0x34, 0x17, 0x8e, 0x8f, 0xaa, 0x37, 0xcc, 0x7e, 0x34, - 0x32, 0x07, 0x4b, 0x6b, 0x5b, 0xcf, 0xa6, 0x60, 0x7b, 0xf5, 0x0e, 0x64, 0xb6, 0x77, 0xfe, 0x85, - 0xdb, 0x6b, 0x4a, 0xad, 0x77, 0x7b, 0x7b, 0x35, 0xc5, 0xfa, 0x1c, 0xc6, 0xd4, 0xa2, 0x4d, 0x46, - 0x60, 0xa0, 0xd6, 0x6e, 0x97, 0xfb, 0xd8, 0x1f, 0xf5, 0xfa, 0x6a, 0xb9, 0x44, 0xa6, 0x00, 0xe2, - 0x9d, 0xaa, 0xdc, 0x4f, 0x26, 0x60, 0x54, 0xee, 0x24, 0xe5, 0x01, 0xc4, 0xef, 0x74, 0xca, 0x83, - 0x84, 0xc0, 0x94, 0xb9, 0x9e, 0x95, 0x87, 0xac, 0xdf, 0x2d, 0xc1, 0x98, 0xfa, 0x0e, 0xc9, 0x19, - 0x18, 0xdf, 0xdd, 0xac, 0x6f, 0xaf, 0x2c, 0xad, 0xdd, 0x5d, 0x5b, 0x59, 0x2e, 0xf7, 0x91, 0x4b, - 0x70, 0x7e, 0xa7, 0xbe, 0xda, 0x58, 0x5e, 0x6c, 0xac, 0x6f, 0x2d, 0xd5, 0xd6, 0x1b, 0xdb, 0xf6, - 0xd6, 0xe7, 0x5f, 0x34, 0x76, 0x76, 0x37, 0x37, 0x57, 0xd6, 0xcb, 0x25, 0x52, 0x81, 0x19, 0x56, - 0xfc, 0x60, 0x77, 0x71, 0x45, 0x47, 0x28, 0xf7, 0x93, 0xab, 0x70, 0x29, 0xab, 0xa4, 0xb1, 0xba, - 0x52, 0x5b, 0x5e, 0x5f, 0xa9, 0xd7, 0xcb, 0x03, 0x64, 0x0e, 0xa6, 0x19, 0x4a, 0x6d, 0x7b, 0xdb, - 0xa0, 0x1d, 0xb4, 0xda, 0x30, 0xae, 0x7d, 0x00, 0xe4, 0x22, 0x54, 0x96, 0x56, 0xec, 0x9d, 0xc6, - 0xf6, 0xae, 0xbd, 0xbd, 0x55, 0x5f, 0x69, 0x98, 0x2d, 0x4c, 0x96, 0xae, 0x6f, 0xdd, 0x5b, 0xdb, - 0x6c, 0x30, 0x50, 0xbd, 0x5c, 0x62, 0xcd, 0x30, 0x4a, 0xeb, 0x6b, 0x9b, 0xf7, 0xd6, 0x57, 0x1a, - 0xbb, 0xf5, 0x15, 0x81, 0xd2, 0x6f, 0xfd, 0xb4, 0x3f, 0xb5, 0xa5, 0x93, 0x05, 0x18, 0xaf, 0x73, - 0x7b, 0x05, 0x2e, 0x73, 0xfc, 0x80, 0xc8, 0x74, 0xb4, 0x09, 0x61, 0xc6, 0xe0, 0x2b, 0x98, 0x8e, - 0xc4, 0xb4, 0xb4, 0x6d, 0xf6, 0x35, 0x37, 0xfd, 0xb6, 0xae, 0xa5, 0x75, 0x04, 0xcc, 0x56, 0xa5, - 0x64, 0x41, 0xd3, 0xe7, 0xf8, 0x69, 0x11, 0x4f, 0x24, 0x52, 0x9f, 0xd3, 0xf7, 0x76, 0xa5, 0xd9, - 0x2d, 0xc4, 0x43, 0x2a, 0xd4, 0x30, 0xa4, 0xc9, 0xd0, 0x25, 0x14, 0x1e, 0x79, 0x53, 0x6a, 0xba, - 0xfc, 0x74, 0x87, 0x9b, 0x7d, 0xe2, 0x5c, 0x22, 0x94, 0x5c, 0xab, 0x9b, 0xb3, 0xb1, 0x92, 0x0f, - 0x93, 0x73, 0x46, 0x08, 0x03, 0x99, 0x25, 0xf6, 0x4f, 0x3b, 0x81, 0x4a, 0xaa, 0x30, 0xc4, 0x57, - 0x5c, 0x2e, 0x0f, 0xd4, 0xad, 0xdb, 0x0c, 0x60, 0x73, 0xb8, 0xf5, 0x3b, 0x03, 0xba, 0x92, 0xc1, - 0x74, 0x69, 0x4d, 0xde, 0xa8, 0x4b, 0xa3, 0x9c, 0x11, 0xca, 0xd4, 0xe6, 0x3a, 0x0d, 0x43, 0x7e, - 0xde, 0xe9, 0x57, 0x43, 0x02, 0x21, 0x07, 0x36, 0xdc, 0x16, 0x53, 0x9b, 0x15, 0x0a, 0x3b, 0x3a, - 0xf2, 0xaf, 0x0a, 0x8f, 0x8e, 0x03, 0xf1, 0xd1, 0x51, 0x7c, 0x9a, 0xfc, 0xe8, 0x18, 0xa3, 0xb0, - 0x51, 0x17, 0x6a, 0x1e, 0xb6, 0x62, 0x30, 0x1e, 0x75, 0xa1, 0x1a, 0x8a, 0x51, 0xd7, 0x90, 0xc8, - 0x07, 0x00, 0xb5, 0x87, 0x75, 0x3c, 0x23, 0xd9, 0x9b, 0x42, 0xd5, 0xc5, 0x4d, 0xc9, 0x79, 0x16, - 0x8a, 0x23, 0x58, 0xa0, 0x9f, 0x31, 0x35, 0x6c, 0xb2, 0x08, 0x93, 0xb5, 0x9f, 0x74, 0x03, 0xba, - 0xd6, 0x62, 0xfb, 0x5a, 0xc4, 0x0f, 0xd3, 0x63, 0x7c, 0xe1, 0x75, 0x58, 0x41, 0xc3, 0x15, 0x25, - 0x1a, 0x03, 0x93, 0x84, 0x6c, 0xc1, 0xd9, 0x7b, 0x4b, 0xdb, 0x62, 0x1e, 0xd6, 0x9a, 0x4d, 0xbf, - 0xeb, 0x45, 0x42, 0xbf, 0xbd, 0x7a, 0x7c, 0x54, 0xbd, 0xb4, 0xdf, 0xec, 0x34, 0xe4, 0x9c, 0x75, - 0x78, 0xb1, 0xae, 0xe0, 0xa6, 0x68, 0xad, 0x36, 0x4c, 0xdd, 0xa3, 0x11, 0x9b, 0x77, 0xf2, 0xb8, - 0x52, 0x3c, 0x2a, 0x1f, 0xc1, 0xf8, 0x43, 0x37, 0x3a, 0xa8, 0xd3, 0x66, 0x40, 0x23, 0x69, 0xaa, - 0x41, 0x09, 0x3c, 0x73, 0xa3, 0x83, 0x46, 0xc8, 0xe1, 0xfa, 0xb6, 0xac, 0xa1, 0x5b, 0x2b, 0x70, - 0x46, 0xd4, 0xa6, 0x4e, 0x47, 0x0b, 0x26, 0xc3, 0x12, 0x32, 0xc4, 0x51, 0xd0, 0x19, 0x9a, 0x6c, - 0xfe, 0x45, 0x3f, 0xcc, 0x2e, 0x1d, 0x38, 0xde, 0x3e, 0xdd, 0x76, 0xc2, 0xf0, 0x99, 0x1f, 0xb4, - 0xb4, 0xc6, 0xe3, 0xd1, 0x30, 0xd5, 0x78, 0x3c, 0x0b, 0x2e, 0xc0, 0xf8, 0x56, 0xbb, 0x25, 0x69, - 0xc4, 0xb1, 0x15, 0xeb, 0xf2, 0xdb, 0xad, 0x46, 0x47, 0xf2, 0xd2, 0x91, 0x18, 0xcd, 0x26, 0x7d, - 0xa6, 0x68, 0x06, 0x62, 0x1a, 0x8f, 0x3e, 0xd3, 0x68, 0x34, 0x24, 0xb2, 0x02, 0x67, 0xeb, 0xb4, - 0xe9, 0x7b, 0xad, 0xbb, 0x4e, 0x33, 0xf2, 0x83, 0x1d, 0xff, 0x09, 0xf5, 0xc4, 0xfc, 0x42, 0xbd, - 0x3e, 0xc4, 0xc2, 0xc6, 0x63, 0x2c, 0x6d, 0x44, 0xac, 0xd8, 0x4e, 0x53, 0x90, 0x2d, 0x18, 0x7d, - 0x28, 0x0c, 0x7e, 0xe2, 0xac, 0xfb, 0xda, 0x0d, 0x65, 0x01, 0x5c, 0x0a, 0x28, 0x4e, 0x0a, 0xa7, - 0xad, 0x4e, 0xeb, 0x4a, 0x4d, 0xc2, 0x95, 0x48, 0x62, 0xda, 0x8a, 0x89, 0xb5, 0x0b, 0x93, 0xdb, - 0xed, 0xee, 0xbe, 0xeb, 0xb1, 0x35, 0xa3, 0x4e, 0x7f, 0x4c, 0x96, 0x01, 0x62, 0x80, 0x30, 0xe3, - 0x4d, 0x8b, 0x13, 0x72, 0x5c, 0xb0, 0x77, 0x47, 0x7c, 0x48, 0x08, 0xc1, 0x03, 0x8d, 0xad, 0xd1, - 0x59, 0xff, 0x6b, 0x00, 0x88, 0x18, 0x00, 0xdc, 0xc3, 0xea, 0x34, 0x62, 0xbb, 0xcb, 0x39, 0xe8, - 0x57, 0xd6, 0xb6, 0xe1, 0xe3, 0xa3, 0x6a, 0xbf, 0xdb, 0xb2, 0xfb, 0xd7, 0x96, 0xc9, 0xdb, 0x30, - 0x84, 0x68, 0x28, 0xff, 0x29, 0x55, 0x9f, 0xce, 0x81, 0xaf, 0x1d, 0xb8, 0x79, 0xda, 0x1c, 0x99, - 0xbc, 0x03, 0x63, 0xcb, 0xb4, 0x4d, 0xf7, 0x9d, 0xc8, 0x97, 0x5f, 0x37, 0xb7, 0x5f, 0x49, 0xa0, - 0x36, 0xe7, 0x62, 0x4c, 0x76, 0x9a, 0xb5, 0xa9, 0x13, 0xfa, 0x9e, 0x7e, 0x9a, 0x0d, 0x10, 0xa2, - 0x9f, 0x66, 0x39, 0x0e, 0xf9, 0xbd, 0x12, 0x8c, 0xd7, 0x3c, 0x4f, 0xd8, 0x85, 0x42, 0x21, 0xf5, - 0xd9, 0x1b, 0xca, 0x90, 0xba, 0xee, 0x3c, 0xa2, 0xed, 0x3d, 0xa7, 0xdd, 0xa5, 0xe1, 0xe2, 0x57, - 0xec, 0x80, 0xf1, 0x1f, 0x8f, 0xaa, 0x1f, 0x9e, 0xc2, 0xd2, 0x13, 0x9b, 0x64, 0x77, 0x02, 0xc7, - 0x8d, 0xc2, 0xe3, 0xa3, 0xea, 0xac, 0x13, 0x57, 0xa8, 0x7f, 0x37, 0x5a, 0x3b, 0xe2, 0xa5, 0x7d, - 0xb8, 0xd7, 0xd2, 0x4e, 0x0e, 0xe1, 0x4c, 0x2d, 0x0c, 0xbb, 0x87, 0xb4, 0x1e, 0x39, 0x41, 0xc4, - 0x8e, 0xff, 0xb8, 0x3e, 0x14, 0xdb, 0x06, 0xde, 0xf8, 0xd9, 0x51, 0xb5, 0xc4, 0xce, 0x34, 0x0e, - 0x92, 0x32, 0xb5, 0x25, 0x88, 0x1a, 0x91, 0xab, 0xef, 0x4e, 0x68, 0x25, 0x48, 0xf2, 0xb6, 0x5e, - 0x51, 0xfa, 0xc4, 0xda, 0x72, 0xde, 0x88, 0x5b, 0x4b, 0x70, 0xf1, 0x1e, 0x8d, 0x6c, 0x1a, 0xd2, - 0x48, 0x7e, 0x23, 0x38, 0xc3, 0x63, 0xdb, 0xec, 0x08, 0xfe, 0x56, 0xc4, 0x38, 0xfc, 0xfc, 0xbb, - 0x90, 0x25, 0xd6, 0xff, 0x53, 0x82, 0xea, 0x52, 0x40, 0xf9, 0x71, 0x20, 0x87, 0x51, 0xf1, 0xda, - 0x75, 0x11, 0x06, 0x77, 0x9e, 0x77, 0xa4, 0x51, 0x05, 0x4b, 0xd9, 0xa0, 0xd8, 0x08, 0x3d, 0xa1, - 0x8d, 0xca, 0x7a, 0x0c, 0xb3, 0x36, 0xf5, 0xe8, 0x33, 0xe7, 0x51, 0x9b, 0x1a, 0x66, 0x9e, 0x2a, - 0x0c, 0xf1, 0x0f, 0x3d, 0xd5, 0x05, 0x0e, 0x3f, 0x9d, 0xc9, 0xcc, 0x9a, 0x84, 0xf1, 0x6d, 0xd7, - 0xdb, 0x17, 0xdc, 0xad, 0x3f, 0x1e, 0x80, 0x09, 0xfe, 0x5b, 0x9c, 0x70, 0x12, 0xbb, 0x57, 0xe9, - 0x24, 0xbb, 0xd7, 0x7b, 0x30, 0xc9, 0x96, 0x7f, 0x1a, 0xec, 0xd1, 0x80, 0xed, 0x9a, 0x42, 0x12, - 0x78, 0x5a, 0x0b, 0xb1, 0xa0, 0xf1, 0x94, 0x97, 0xd8, 0x26, 0x22, 0x59, 0x87, 0x29, 0x0e, 0xb8, - 0x4b, 0x9d, 0xa8, 0x1b, 0x1b, 0x9c, 0xce, 0x88, 0x23, 0x8d, 0x04, 0xf3, 0xa9, 0x29, 0x78, 0x3d, - 0x16, 0x40, 0x3b, 0x41, 0x4b, 0x3e, 0x81, 0x33, 0xdb, 0x81, 0xff, 0xf5, 0x73, 0x6d, 0xbf, 0xe6, - 0x5f, 0x27, 0x3f, 0xfc, 0xb0, 0xa2, 0x86, 0xbe, 0x6b, 0x27, 0xb1, 0xc9, 0x9b, 0x30, 0xba, 0x16, - 0x2e, 0xfa, 0x81, 0xeb, 0xed, 0xe3, 0x37, 0x3a, 0xca, 0xed, 0xf4, 0x6e, 0xd8, 0x78, 0x84, 0x40, - 0x5b, 0x15, 0x27, 0x2c, 0xca, 0x23, 0xbd, 0x2d, 0xca, 0xb7, 0x00, 0xd6, 0x7d, 0xa7, 0x55, 0x6b, - 0xb7, 0x97, 0x6a, 0x21, 0x5a, 0x7b, 0xc4, 0x7e, 0xd4, 0xf6, 0x9d, 0x56, 0xc3, 0x69, 0xb7, 0x1b, - 0x4d, 0x27, 0xb4, 0x35, 0x9c, 0xfb, 0x83, 0xa3, 0xc3, 0xe5, 0x11, 0xfb, 0xcc, 0xba, 0xdb, 0xa4, - 0x5e, 0x48, 0x1f, 0x3a, 0x81, 0xe7, 0x7a, 0xfb, 0xa1, 0xf5, 0xcf, 0xcf, 0xc2, 0xa8, 0xea, 0xf2, - 0x0d, 0x5d, 0x67, 0x17, 0xbb, 0x1c, 0x8e, 0x7e, 0x6c, 0x91, 0xb2, 0x35, 0x0c, 0x72, 0x1e, 0xb5, - 0x78, 0xb1, 0xbf, 0x8e, 0xb0, 0xd9, 0xe8, 0x74, 0x3a, 0x36, 0x83, 0xb1, 0xaf, 0x6c, 0x79, 0x11, - 0xe5, 0x3f, 0xca, 0xbf, 0xb2, 0xd6, 0x23, 0xbb, 0x7f, 0x79, 0x91, 0x4d, 0xef, 0xad, 0xb5, 0xe5, - 0x25, 0x14, 0xe5, 0x28, 0x9f, 0xde, 0xbe, 0xdb, 0x6a, 0xda, 0x08, 0x65, 0xa5, 0xf5, 0xda, 0xc6, - 0xba, 0x10, 0x17, 0x96, 0x86, 0xce, 0x61, 0xdb, 0x46, 0x28, 0xd3, 0xfb, 0xb8, 0x71, 0x61, 0xc9, - 0xf7, 0xa2, 0xc0, 0x6f, 0x87, 0xa8, 0x9c, 0x8c, 0xf2, 0xe1, 0x14, 0x56, 0x89, 0xa6, 0x28, 0xb2, - 0x13, 0xa8, 0xe4, 0x21, 0xcc, 0xd5, 0x5a, 0x4f, 0x1d, 0xaf, 0x49, 0x5b, 0xbc, 0xe4, 0xa1, 0x1f, - 0x3c, 0x79, 0xdc, 0xf6, 0x9f, 0x85, 0x28, 0xef, 0x51, 0x61, 0xc4, 0x13, 0x28, 0xd2, 0xc8, 0xf1, - 0x4c, 0x22, 0xd9, 0x79, 0xd4, 0xec, 0x93, 0x5a, 0x6a, 0xfb, 0xdd, 0x96, 0x18, 0x05, 0xfc, 0xa4, - 0x9a, 0x0c, 0x60, 0x73, 0x38, 0x93, 0xd2, 0x6a, 0x7d, 0x03, 0x4d, 0x66, 0x42, 0x4a, 0x07, 0xe1, - 0xa1, 0xcd, 0x60, 0xe4, 0x35, 0x18, 0x91, 0x2a, 0x2c, 0xb7, 0xe9, 0xa3, 0x2d, 0x59, 0xaa, 0xae, - 0xb2, 0x8c, 0x7d, 0x12, 0x36, 0x6d, 0xfa, 0x4f, 0x69, 0xf0, 0x7c, 0xc9, 0x6f, 0x51, 0x69, 0xe0, - 0x11, 0x06, 0x0c, 0x5e, 0xd0, 0x68, 0xb2, 0x12, 0xdb, 0x44, 0x64, 0x15, 0xf0, 0x3d, 0x30, 0xac, - 0x9c, 0x89, 0x2b, 0xe0, 0x7b, 0x64, 0x68, 0xcb, 0x32, 0xb2, 0x0c, 0x67, 0x6b, 0xdd, 0xc8, 0x3f, - 0x74, 0x22, 0xb7, 0xb9, 0xdb, 0xd9, 0x0f, 0x1c, 0x56, 0x49, 0x19, 0x09, 0x50, 0xa5, 0x77, 0x64, - 0x61, 0xa3, 0x2b, 0x4a, 0xed, 0x34, 0x01, 0x79, 0x17, 0x26, 0xd6, 0x42, 0x6e, 0xc4, 0x73, 0x42, - 0xda, 0x42, 0x4b, 0x8c, 0x68, 0xa5, 0x1b, 0x36, 0xd0, 0xa4, 0xd7, 0x60, 0x87, 0x80, 0x96, 0x6d, - 0xe0, 0x11, 0x0b, 0x86, 0x6b, 0x61, 0xe8, 0x86, 0x11, 0x1a, 0x58, 0x46, 0x17, 0xe1, 0xf8, 0xa8, - 0x3a, 0xec, 0x20, 0xc4, 0x16, 0x25, 0xe4, 0x21, 0x8c, 0x2f, 0x53, 0xa6, 0x13, 0xee, 0x04, 0xdd, - 0x30, 0x42, 0x73, 0xc9, 0xf8, 0xc2, 0x79, 0xf1, 0x61, 0x6b, 0x25, 0x62, 0x2e, 0x73, 0x6d, 0xaf, - 0x85, 0xf0, 0x46, 0xc4, 0x0a, 0xf4, 0x5d, 0x4b, 0xc3, 0x67, 0x0a, 0xaf, 0xa0, 0x59, 0x75, 0x5b, - 0xec, 0x53, 0x9d, 0xc1, 0x36, 0xa0, 0xc2, 0x2b, 0xd6, 0x86, 0xc6, 0x01, 0x96, 0xe8, 0x0a, 0xaf, - 0x41, 0x42, 0x9a, 0x29, 0xbb, 0xf0, 0xac, 0x61, 0xfb, 0x33, 0x0b, 0x65, 0x13, 0x4f, 0x69, 0x35, - 0xfe, 0x08, 0xc6, 0x97, 0xba, 0x61, 0xe4, 0x1f, 0xee, 0x1c, 0xd0, 0x43, 0x8a, 0x26, 0x15, 0xa1, - 0xd6, 0x37, 0x11, 0xdc, 0x88, 0x18, 0x5c, 0xef, 0xa6, 0x86, 0x4e, 0x3e, 0x03, 0x22, 0xf5, 0xf3, - 0x7b, 0x6c, 0x7e, 0x78, 0x6c, 0x2e, 0xa3, 0x55, 0x65, 0x94, 0x2b, 0xe5, 0x52, 0xad, 0x6f, 0xec, - 0xab, 0x62, 0xdd, 0xb2, 0x97, 0x26, 0x66, 0x0d, 0xe2, 0x4d, 0xbc, 0x17, 0x38, 0x9d, 0x83, 0x4a, - 0x25, 0xd6, 0xb2, 0x45, 0xa7, 0xf6, 0x19, 0xdc, 0xd0, 0x16, 0x62, 0x74, 0x52, 0x07, 0xe0, 0x3f, - 0xd7, 0xd9, 0xc0, 0x73, 0x3b, 0x4c, 0xc5, 0x90, 0x17, 0x2b, 0x90, 0xb2, 0x3a, 0x8f, 0x3a, 0x08, - 0x67, 0xdb, 0x76, 0x8d, 0xd1, 0xd4, 0xd8, 0x90, 0x27, 0x50, 0xe6, 0xbf, 0x36, 0x7c, 0xcf, 0x8d, - 0xf8, 0xd2, 0x3b, 0x6f, 0x18, 0xed, 0x92, 0xc5, 0xb2, 0x02, 0x34, 0x96, 0x8a, 0x0a, 0x0e, 0x55, - 0xa9, 0x56, 0x4d, 0x8a, 0x31, 0xd9, 0x86, 0xf1, 0xed, 0xc0, 0x6f, 0x75, 0x9b, 0x11, 0x6e, 0xd8, - 0x17, 0x50, 0x51, 0x24, 0xa2, 0x1e, 0xad, 0x84, 0xcb, 0xa4, 0xc3, 0x01, 0x0d, 0xb6, 0x99, 0xeb, - 0x32, 0xd1, 0x10, 0xc9, 0x22, 0x0c, 0x6f, 0xfb, 0x6d, 0xb7, 0xf9, 0xbc, 0x72, 0x11, 0x1b, 0x3d, - 0x23, 0x99, 0x21, 0x50, 0x36, 0x15, 0xb5, 0xc3, 0x0e, 0x82, 0x74, 0xed, 0x90, 0x23, 0x91, 0x1a, - 0x4c, 0x7e, 0xc6, 0x26, 0x8c, 0xeb, 0x7b, 0x9e, 0xe3, 0x06, 0xb4, 0x72, 0x09, 0xc7, 0x05, 0x0d, - 0xda, 0x3f, 0xd6, 0x0b, 0xf4, 0xe9, 0x6c, 0x50, 0x90, 0x35, 0x38, 0xb3, 0x16, 0xd6, 0xa3, 0xc0, - 0xed, 0xd0, 0x0d, 0xc7, 0x73, 0xf6, 0x69, 0xab, 0x72, 0x39, 0xb6, 0x28, 0xbb, 0x61, 0x23, 0xc4, - 0xb2, 0xc6, 0x21, 0x2f, 0xd4, 0x2d, 0xca, 0x09, 0x3a, 0xf2, 0x39, 0xcc, 0xac, 0x7c, 0x1d, 0xb1, - 0x19, 0xd3, 0xae, 0x75, 0x5b, 0x6e, 0x54, 0x8f, 0xfc, 0xc0, 0xd9, 0xa7, 0x95, 0x2a, 0xf2, 0x7b, - 0xf5, 0xf8, 0xa8, 0x7a, 0x85, 0x8a, 0xf2, 0x86, 0xc3, 0x10, 0x1a, 0x21, 0xc7, 0xd0, 0x6f, 0x8a, - 0xb3, 0x38, 0x30, 0xe9, 0xd7, 0xbb, 0x1d, 0xa6, 0xb8, 0xa2, 0xf4, 0xaf, 0x18, 0xd2, 0xd7, 0x4a, - 0xb8, 0xf4, 0x43, 0x0e, 0x48, 0x49, 0x5f, 0x43, 0x24, 0x36, 0x90, 0xfb, 0xbe, 0xeb, 0xd5, 0x9a, - 0x91, 0xfb, 0x94, 0x8a, 0x23, 0x7b, 0x58, 0xb9, 0x8a, 0x2d, 0x45, 0xeb, 0xf7, 0xaf, 0xfa, 0xae, - 0xd7, 0x70, 0xb0, 0xb8, 0x21, 0x0e, 0xf8, 0x86, 0xf5, 0x3b, 0x4d, 0x4d, 0x7e, 0x08, 0xe7, 0x36, - 0xfc, 0x47, 0x6e, 0x9b, 0xf2, 0x25, 0x87, 0x8b, 0x05, 0x2d, 0x79, 0x16, 0xf2, 0x45, 0xeb, 0xf7, - 0x21, 0x62, 0x34, 0xc4, 0x6a, 0x75, 0xa8, 0x70, 0x74, 0xeb, 0x77, 0x36, 0x17, 0xb2, 0x02, 0x13, - 0xf8, 0x5d, 0xb6, 0xf1, 0x67, 0x58, 0x79, 0x05, 0x4f, 0x47, 0x57, 0x13, 0x0a, 0xcf, 0x8d, 0x15, - 0x0d, 0x67, 0xc5, 0x8b, 0x82, 0xe7, 0xb6, 0x41, 0x46, 0x3e, 0x86, 0xf9, 0xe4, 0xf4, 0x5e, 0xf2, - 0xbd, 0xc7, 0xee, 0x7e, 0x37, 0xa0, 0xad, 0xca, 0xab, 0xac, 0xa9, 0x76, 0x01, 0xc6, 0xfc, 0x43, - 0x38, 0x9b, 0xaa, 0x82, 0x94, 0x61, 0xe0, 0x89, 0xb8, 0x4c, 0x1c, 0xb3, 0xd9, 0x9f, 0xe4, 0x2d, - 0x18, 0x7a, 0xca, 0x8e, 0x25, 0xa8, 0x31, 0xc4, 0xd7, 0x53, 0x1a, 0xe9, 0x9a, 0xf7, 0xd8, 0xb7, - 0x39, 0xd2, 0x07, 0xfd, 0xef, 0x95, 0xee, 0x0f, 0x8e, 0x8e, 0x97, 0x27, 0xf8, 0x1d, 0xf0, 0xfd, - 0xc1, 0xd1, 0xc9, 0xf2, 0x94, 0x55, 0x83, 0x33, 0x09, 0x7c, 0x52, 0x81, 0x11, 0xea, 0x31, 0x55, - 0xb7, 0xc5, 0x75, 0x16, 0x5b, 0xfe, 0x24, 0x33, 0x30, 0xd4, 0x76, 0x0f, 0xdd, 0x08, 0x2b, 0x1c, - 0xb2, 0xf9, 0x0f, 0xeb, 0xf7, 0x4b, 0x40, 0xd2, 0x5b, 0x06, 0xb9, 0x99, 0x60, 0xc3, 0x15, 0x3d, - 0x01, 0xd2, 0xad, 0xdc, 0x92, 0xfb, 0x67, 0x30, 0xcd, 0xc7, 0x4c, 0x6e, 0x6e, 0x5a, 0x5d, 0x7c, - 0x51, 0xcd, 0x28, 0xd6, 0x2d, 0x1d, 0xa2, 0x18, 0xb7, 0xc2, 0x75, 0x6c, 0x5a, 0x17, 0x66, 0x33, - 0x37, 0x0b, 0xb2, 0x01, 0xb3, 0x87, 0xbe, 0x17, 0x1d, 0xb4, 0x9f, 0xcb, 0xbd, 0x42, 0xd4, 0x56, - 0xc2, 0xda, 0x70, 0x7d, 0xcc, 0x44, 0xb0, 0xa7, 0x05, 0x58, 0x70, 0xc4, 0x7a, 0xee, 0x0f, 0x8e, - 0xf6, 0x97, 0x07, 0x54, 0x4f, 0x2c, 0x1b, 0xce, 0xa6, 0xd6, 0x5c, 0xf2, 0x7d, 0x98, 0x68, 0xe2, - 0x51, 0xc6, 0xa8, 0x89, 0xef, 0x38, 0x1a, 0x5c, 0xff, 0x9c, 0x38, 0x9c, 0x77, 0xe5, 0x8f, 0x4a, - 0x30, 0x97, 0xb3, 0xda, 0x9e, 0x5e, 0xd4, 0x5f, 0xc0, 0xb9, 0x43, 0xe7, 0xeb, 0x46, 0x80, 0x27, - 0xd5, 0x46, 0xe0, 0x78, 0x09, 0x69, 0xe3, 0x4a, 0x92, 0x8d, 0xa1, 0x3b, 0xe2, 0x1c, 0x3a, 0x5f, - 0xdb, 0x88, 0x60, 0xb3, 0x72, 0xde, 0xce, 0x4f, 0x61, 0xd2, 0x58, 0x5f, 0x4f, 0xdd, 0x38, 0xeb, - 0x36, 0x9c, 0x65, 0x67, 0xf9, 0x88, 0x9e, 0xd8, 0x42, 0x65, 0x6d, 0x03, 0xd4, 0xe9, 0xa1, 0xd3, - 0x39, 0xf0, 0x99, 0xde, 0xbd, 0xa8, 0xff, 0x12, 0x16, 0x0e, 0x22, 0x2c, 0x0e, 0xaa, 0x60, 0xef, - 0x0e, 0xd7, 0xc5, 0x43, 0x85, 0x69, 0x6b, 0x54, 0xd6, 0x9f, 0xf5, 0x03, 0x11, 0x0b, 0x64, 0x40, - 0x9d, 0x43, 0xd9, 0x8c, 0xf7, 0x61, 0x82, 0x9f, 0x47, 0x39, 0x18, 0x9b, 0x33, 0xbe, 0x30, 0x2d, - 0xbe, 0x3c, 0xbd, 0x68, 0xb5, 0xcf, 0x36, 0x50, 0x19, 0xa9, 0x4d, 0xf9, 0x41, 0x1a, 0x49, 0xfb, - 0x0d, 0x52, 0xbd, 0x88, 0x91, 0xea, 0xbf, 0xc9, 0x27, 0x30, 0xb5, 0xe4, 0x1f, 0x76, 0x98, 0x4c, - 0x04, 0xf1, 0x80, 0x30, 0x52, 0x88, 0x7a, 0x8d, 0xc2, 0xd5, 0x3e, 0x3b, 0x81, 0x4e, 0x36, 0x61, - 0xfa, 0x6e, 0xbb, 0x1b, 0x1e, 0xd4, 0xbc, 0xd6, 0x52, 0xdb, 0x0f, 0x25, 0x97, 0x41, 0x61, 0x24, - 0x10, 0xcb, 0x5b, 0x1a, 0x63, 0xb5, 0xcf, 0xce, 0x22, 0x24, 0xaf, 0xc1, 0xd0, 0xca, 0x53, 0xb6, - 0xec, 0x4a, 0x77, 0x0c, 0xe1, 0x2d, 0xb6, 0xe5, 0xd1, 0xad, 0xc7, 0xab, 0x7d, 0x36, 0x2f, 0x5d, - 0x1c, 0x83, 0x11, 0x79, 0x96, 0xbd, 0xc9, 0x54, 0x62, 0x25, 0xce, 0x7a, 0xe4, 0x44, 0xdd, 0x90, - 0xcc, 0xc3, 0xe8, 0x6e, 0x87, 0x1d, 0xb1, 0xa4, 0x11, 0xc0, 0x56, 0xbf, 0xad, 0xb7, 0x4c, 0x49, - 0x93, 0x8b, 0xba, 0x69, 0x98, 0x23, 0xc7, 0x00, 0x6b, 0xd5, 0x14, 0x6e, 0x31, 0xb6, 0x51, 0x6f, - 0x7f, 0xa2, 0xde, 0x72, 0x52, 0xd6, 0xd6, 0x6c, 0xa6, 0xf0, 0xac, 0xcf, 0xe1, 0xf2, 0x6e, 0x27, - 0xa4, 0x41, 0x54, 0xeb, 0x74, 0xda, 0x6e, 0x93, 0x5f, 0xe7, 0xe0, 0x99, 0x57, 0x4e, 0x96, 0x77, - 0x61, 0x98, 0x03, 0xc4, 0x34, 0x91, 0x73, 0xb0, 0xd6, 0xe9, 0x88, 0x93, 0xf6, 0x1d, 0xae, 0x9c, - 0xf3, 0xb3, 0xb3, 0x2d, 0xb0, 0xad, 0xdf, 0x29, 0xc1, 0x65, 0xfe, 0x05, 0xe4, 0xb2, 0xfe, 0x0e, - 0x8c, 0xa1, 0xb3, 0x56, 0xc7, 0x69, 0xca, 0x6f, 0x82, 0x7b, 0xad, 0x49, 0xa0, 0x1d, 0x97, 0x6b, - 0x6e, 0x70, 0xfd, 0xf9, 0x6e, 0x70, 0xf2, 0x03, 0x1b, 0xc8, 0xfc, 0xc0, 0x3e, 0x03, 0x4b, 0xb4, - 0xa8, 0xdd, 0x4e, 0x35, 0x2a, 0x7c, 0x91, 0x56, 0x59, 0xff, 0xad, 0x1f, 0xe6, 0xee, 0x51, 0x8f, - 0x06, 0x0e, 0xf6, 0xd3, 0xb0, 0xe9, 0xe8, 0xee, 0x30, 0xa5, 0x42, 0x77, 0x98, 0xaa, 0xb4, 0x92, - 0xf5, 0xa3, 0x95, 0x2c, 0xe5, 0xdb, 0xc3, 0x8e, 0x8b, 0xbb, 0xf6, 0x9a, 0xe8, 0x16, 0x1e, 0x17, - 0xbb, 0x81, 0x6b, 0x33, 0x18, 0x59, 0x8b, 0x5d, 0x69, 0x06, 0x7b, 0x9a, 0xcb, 0xa6, 0x85, 0x6b, - 0xc1, 0x88, 0x70, 0xa5, 0x31, 0x1d, 0x68, 0x36, 0x61, 0x98, 0x1b, 0xf7, 0xf0, 0x22, 0x66, 0x7c, - 0xe1, 0xba, 0xf8, 0xa6, 0x72, 0x3a, 0x28, 0x2c, 0x81, 0xb8, 0xb1, 0xf3, 0x29, 0x10, 0x21, 0xc0, - 0x16, 0x5c, 0xe6, 0x3f, 0x83, 0x71, 0x0d, 0xe5, 0x24, 0x7b, 0xbf, 0x32, 0x32, 0x32, 0x8d, 0xd1, - 0xdb, 0xe7, 0xf6, 0x4a, 0x6d, 0xef, 0xb7, 0x3e, 0x84, 0x4a, 0xba, 0x35, 0xc2, 0xb0, 0xd4, 0xcb, - 0x8e, 0x65, 0x2d, 0xc3, 0xcc, 0x3d, 0x1a, 0xe1, 0xc4, 0xc5, 0x8f, 0x48, 0x73, 0x09, 0x4b, 0x7c, - 0x67, 0x72, 0x55, 0x95, 0x17, 0x36, 0xfa, 0x57, 0x5a, 0x87, 0xd9, 0x04, 0x17, 0x51, 0xff, 0x07, - 0x30, 0x22, 0x40, 0x6a, 0x45, 0x15, 0x7e, 0xa5, 0xf4, 0x91, 0x28, 0xd8, 0x5b, 0xe0, 0xf3, 0x56, - 0x70, 0xb6, 0x25, 0x81, 0x75, 0x00, 0xe7, 0xd8, 0x36, 0x1b, 0x73, 0x55, 0xd3, 0xf1, 0x02, 0x8c, - 0x75, 0x98, 0xa2, 0x10, 0xba, 0x3f, 0xe1, 0xd3, 0x68, 0xc8, 0x1e, 0x65, 0x80, 0xba, 0xfb, 0x13, - 0x4a, 0x2e, 0x01, 0x60, 0x21, 0x76, 0x53, 0xac, 0x02, 0x88, 0xce, 0x0d, 0x77, 0x04, 0xd0, 0xa1, - 0x8c, 0xcf, 0x1b, 0x1b, 0xff, 0xb6, 0x02, 0x98, 0x4b, 0xd5, 0x24, 0x3a, 0x70, 0x13, 0x46, 0xa5, - 0x0a, 0x9b, 0x30, 0xa9, 0xeb, 0x3d, 0xb0, 0x15, 0x12, 0x79, 0x1d, 0xce, 0x78, 0xf4, 0xeb, 0xa8, - 0x91, 0x6a, 0xc3, 0x24, 0x03, 0x6f, 0xcb, 0x76, 0x58, 0xbf, 0x82, 0x66, 0xd4, 0xba, 0xe7, 0x3f, - 0x7b, 0xdc, 0x76, 0x9e, 0xd0, 0x54, 0xc5, 0xdf, 0x87, 0xd1, 0x7a, 0xef, 0x8a, 0xf9, 0xe7, 0x23, - 0x2b, 0xb7, 0x15, 0x89, 0xd5, 0x86, 0x79, 0xd6, 0xa5, 0x7a, 0x6d, 0x63, 0x7d, 0xad, 0xb5, 0xfd, - 0x6d, 0x0b, 0xf0, 0x29, 0x5c, 0xc8, 0xac, 0xed, 0xdb, 0x16, 0xe2, 0xbf, 0x1a, 0x80, 0x39, 0xbe, - 0x99, 0xa4, 0x67, 0xf0, 0xc9, 0x97, 0x9a, 0x5f, 0xca, 0x65, 0xe3, 0xad, 0x8c, 0xcb, 0x46, 0x24, - 0xd1, 0x2f, 0x1b, 0x8d, 0x2b, 0xc6, 0xf7, 0xb2, 0xaf, 0x18, 0xd1, 0x4e, 0x64, 0x5e, 0x31, 0x26, - 0x2f, 0x16, 0x57, 0xf2, 0x2f, 0x16, 0xf1, 0x9a, 0x25, 0xe3, 0x62, 0x31, 0xe3, 0x3a, 0x31, 0xe9, - 0xd5, 0x33, 0xfa, 0x52, 0xbd, 0x7a, 0xb8, 0x6a, 0x6d, 0xed, 0x41, 0x25, 0x3d, 0x80, 0x2f, 0x61, - 0xf1, 0xf8, 0x93, 0x12, 0x5c, 0x12, 0x6a, 0x46, 0xe2, 0x13, 0x3b, 0xfd, 0xfc, 0x78, 0x07, 0x26, - 0x04, 0xed, 0x4e, 0x3c, 0x15, 0x17, 0xcf, 0x1e, 0x1f, 0x55, 0x27, 0xe5, 0x72, 0xc8, 0xd7, 0x54, - 0x03, 0x8d, 0xbc, 0x03, 0xa3, 0xf8, 0x47, 0x7c, 0x11, 0xc1, 0x4e, 0x1f, 0x63, 0x88, 0xda, 0x48, - 0x5e, 0x47, 0x28, 0x54, 0xeb, 0x2b, 0xb8, 0x9c, 0xd7, 0xf0, 0x97, 0x20, 0x97, 0x7f, 0x5d, 0x82, - 0x0b, 0x82, 0xbd, 0xf1, 0xb1, 0xbe, 0xd0, 0xba, 0x7f, 0x0a, 0xef, 0xd6, 0xfb, 0x30, 0xce, 0x2a, - 0x94, 0xed, 0x1e, 0x10, 0x9b, 0x9b, 0xd0, 0xdd, 0xe3, 0x92, 0x65, 0x27, 0x72, 0x84, 0xb7, 0x86, - 0x73, 0xd8, 0x96, 0xe6, 0x03, 0x5b, 0x27, 0xb6, 0xbe, 0x84, 0x8b, 0xd9, 0x5d, 0x78, 0x09, 0xf2, - 0xb9, 0x0f, 0xf3, 0x19, 0xcb, 0xf2, 0x8b, 0xed, 0x8a, 0x5f, 0xc0, 0x85, 0x4c, 0x5e, 0x2f, 0xa1, - 0x99, 0xab, 0x6c, 0xcf, 0x8f, 0x5e, 0xc2, 0x10, 0x5a, 0x0f, 0xe1, 0x7c, 0x06, 0xa7, 0x97, 0xd0, - 0xc4, 0x7b, 0x30, 0xa7, 0x74, 0xdd, 0x6f, 0xd4, 0xc2, 0x0d, 0xb8, 0xc4, 0x19, 0xbd, 0x9c, 0x51, - 0x79, 0x00, 0x17, 0x04, 0xbb, 0x97, 0x20, 0xbd, 0x55, 0xb8, 0x18, 0x1f, 0x69, 0x33, 0x34, 0x95, - 0x13, 0x2f, 0x32, 0xd6, 0x3a, 0x5c, 0x89, 0x39, 0xe5, 0x6c, 0xdb, 0x27, 0xe7, 0xc6, 0x15, 0xb2, - 0x78, 0x94, 0x5e, 0xca, 0x88, 0x3e, 0x84, 0x73, 0x06, 0xd3, 0x97, 0xa6, 0xac, 0xac, 0xc1, 0x34, - 0x67, 0x6c, 0x2a, 0xaf, 0x0b, 0xba, 0xf2, 0x3a, 0xbe, 0x70, 0x36, 0x66, 0x89, 0xe0, 0xbd, 0x3b, - 0x19, 0xfa, 0xec, 0x06, 0xea, 0xb3, 0x12, 0x25, 0x6e, 0xe1, 0x3b, 0x30, 0xcc, 0x21, 0xa2, 0x7d, - 0x19, 0xcc, 0xb8, 0xba, 0xce, 0xc9, 0x04, 0xb2, 0xf5, 0x43, 0xb8, 0xc4, 0xcf, 0x82, 0xf1, 0x6d, - 0x9e, 0x79, 0x5e, 0xfb, 0x7e, 0xe2, 0x28, 0x78, 0x5e, 0xf0, 0x4d, 0xe2, 0xe7, 0x9c, 0x08, 0x1f, - 0xc9, 0xb9, 0x9d, 0xc7, 0xff, 0x44, 0x2f, 0x9d, 0xe4, 0x11, 0xaf, 0x3f, 0xf3, 0x88, 0xf7, 0x0a, - 0x5c, 0x55, 0x47, 0xbc, 0x64, 0x35, 0x72, 0x6a, 0x59, 0x5f, 0xc2, 0x05, 0xde, 0x51, 0xe9, 0x81, - 0x66, 0x36, 0xe3, 0xc3, 0x44, 0x37, 0xe7, 0x44, 0x37, 0x4d, 0xec, 0x9c, 0x4e, 0xfe, 0xff, 0x25, - 0xf9, 0xc9, 0x65, 0x33, 0xff, 0x65, 0x9f, 0x79, 0x37, 0xa1, 0xaa, 0x04, 0x62, 0xb6, 0xe8, 0xc5, - 0x0e, 0xbc, 0x1b, 0x30, 0xab, 0xb3, 0x71, 0x9b, 0x74, 0xef, 0x36, 0x5e, 0xb3, 0xbc, 0xcd, 0x3e, - 0x0b, 0x04, 0xc8, 0x69, 0x57, 0xc9, 0x90, 0x1b, 0xe2, 0xdb, 0x0a, 0xd3, 0x6a, 0xc0, 0xc5, 0xf4, - 0x50, 0xb8, 0x4d, 0xe9, 0x7e, 0x4e, 0x3e, 0x61, 0x9f, 0x30, 0x42, 0xc4, 0x60, 0xe4, 0x32, 0x95, - 0xdf, 0x31, 0x27, 0x97, 0x54, 0x96, 0x25, 0x97, 0x9a, 0x44, 0xff, 0x59, 0xed, 0x72, 0x3e, 0xfc, - 0x3a, 0x10, 0x59, 0xb4, 0x54, 0xb7, 0x65, 0xd5, 0xe7, 0x61, 0x60, 0xa9, 0x6e, 0x8b, 0x77, 0x2f, - 0x78, 0xe6, 0x6e, 0x86, 0x81, 0xcd, 0x60, 0x49, 0x9d, 0xb8, 0xff, 0x04, 0x3a, 0xf1, 0xfd, 0xc1, - 0xd1, 0x81, 0xf2, 0xa0, 0x4d, 0xea, 0xee, 0xbe, 0xf7, 0xd0, 0x8d, 0x0e, 0x54, 0x85, 0x35, 0xeb, - 0x07, 0x30, 0x6d, 0x54, 0x2f, 0xbe, 0xe2, 0xc2, 0x07, 0x3b, 0xe4, 0x75, 0x18, 0x59, 0xaa, 0xa1, - 0x1b, 0x07, 0x1a, 0x0d, 0x26, 0xf8, 0x7a, 0xd3, 0x74, 0x1a, 0xf8, 0x1a, 0xd4, 0x96, 0x85, 0xd6, - 0x3f, 0x1e, 0xd4, 0xb8, 0x6b, 0xcf, 0xa0, 0x0a, 0x7a, 0x77, 0x1b, 0x80, 0xcf, 0x10, 0xad, 0x73, - 0x4c, 0x01, 0x1c, 0x17, 0xde, 0x11, 0x7c, 0x49, 0xb6, 0x35, 0xa4, 0x93, 0x3e, 0x93, 0x12, 0xee, - 0xaa, 0x9c, 0x48, 0xbe, 0x0c, 0x54, 0xee, 0xaa, 0x82, 0x75, 0x68, 0xeb, 0x48, 0xe4, 0x87, 0x49, - 0x5f, 0xfe, 0x21, 0xbc, 0xd5, 0x79, 0x55, 0x5e, 0xf3, 0xa6, 0xfb, 0x76, 0x3a, 0x77, 0xfe, 0x67, - 0x30, 0xcb, 0x68, 0xdd, 0xc7, 0xa8, 0xda, 0xaf, 0x7c, 0x1d, 0x51, 0x8f, 0xaf, 0xed, 0xc3, 0x58, - 0xcf, 0x6b, 0x05, 0xf5, 0xc4, 0xc8, 0xc2, 0x02, 0x1e, 0xf3, 0x69, 0x50, 0x55, 0x66, 0x67, 0xf3, - 0xc7, 0x49, 0x64, 0xaf, 0xaf, 0x78, 0xad, 0x8e, 0xef, 0xaa, 0x23, 0x0b, 0x9f, 0x44, 0x41, 0xbb, - 0x41, 0x05, 0xdc, 0xd6, 0x91, 0xac, 0xd7, 0x0b, 0x9d, 0xa0, 0x47, 0x61, 0x70, 0x67, 0x69, 0x67, - 0xbd, 0x5c, 0xb2, 0x6e, 0x02, 0x68, 0x35, 0x01, 0x0c, 0x6f, 0x6e, 0xd9, 0x1b, 0xb5, 0xf5, 0x72, - 0x1f, 0x99, 0x85, 0xb3, 0x0f, 0xd7, 0x36, 0x97, 0xb7, 0x1e, 0xd6, 0x1b, 0xf5, 0x8d, 0x9a, 0xbd, - 0xb3, 0x54, 0xb3, 0x97, 0xcb, 0x25, 0xeb, 0x2b, 0x98, 0x31, 0x7b, 0xf8, 0x52, 0x27, 0x61, 0x04, - 0xd3, 0x4a, 0x9f, 0xb9, 0xff, 0x70, 0x47, 0xf3, 0xa0, 0x14, 0xc7, 0xaf, 0xa4, 0x27, 0x90, 0x38, - 0xa8, 0x89, 0xcf, 0x48, 0x43, 0x22, 0x6f, 0x72, 0xb5, 0x20, 0xf9, 0xd0, 0x95, 0xa9, 0x05, 0x8d, - 0x58, 0x2f, 0xc0, 0xa5, 0xef, 0x7b, 0x30, 0x63, 0xd6, 0x7a, 0x52, 0x3b, 0xd1, 0xab, 0xe8, 0x5a, - 0xaa, 0xbd, 0x82, 0x21, 0x44, 0x37, 0xdc, 0x8b, 0x95, 0xf5, 0x7b, 0x50, 0x16, 0x58, 0xf1, 0xce, - 0xfb, 0x8a, 0x34, 0xe4, 0x95, 0x32, 0xde, 0xec, 0x49, 0x1f, 0x66, 0x1f, 0xca, 0x6c, 0xc5, 0x14, - 0x94, 0xbc, 0x82, 0x19, 0x18, 0x5a, 0x8f, 0x2f, 0x54, 0x6c, 0xfe, 0x03, 0x1f, 0x83, 0x44, 0x4e, - 0x10, 0x49, 0xbf, 0xab, 0x31, 0x5b, 0xfd, 0x26, 0x6f, 0xc2, 0xf0, 0x5d, 0xb7, 0x1d, 0x09, 0xe3, - 0x44, 0xbc, 0xc9, 0x33, 0xb6, 0xbc, 0xc0, 0x16, 0x08, 0x96, 0x0d, 0x67, 0xb5, 0x0a, 0x4f, 0xd1, - 0x54, 0x52, 0x81, 0x91, 0x4d, 0xfa, 0xb5, 0x56, 0xbf, 0xfc, 0x69, 0xbd, 0x0b, 0x67, 0x85, 0x4f, - 0x9b, 0x26, 0xa6, 0xab, 0xe2, 0x69, 0x71, 0xc9, 0x78, 0xdf, 0x28, 0x58, 0x62, 0x11, 0xa3, 0xdb, - 0xed, 0xb4, 0x5e, 0x90, 0x8e, 0x6d, 0x14, 0xa7, 0xa4, 0x7b, 0x43, 0xde, 0xc3, 0xf4, 0x1a, 0xce, - 0x3f, 0x2b, 0x41, 0x25, 0x71, 0xce, 0x5f, 0x3a, 0x70, 0xda, 0x6d, 0xea, 0xed, 0x53, 0x72, 0x0d, - 0x06, 0x77, 0xb6, 0x76, 0xb6, 0x85, 0x9d, 0x52, 0x5e, 0xc1, 0x33, 0x90, 0xc2, 0xb1, 0x11, 0x83, - 0x3c, 0x80, 0xb3, 0xd2, 0x6b, 0x55, 0x15, 0x89, 0x11, 0xba, 0x54, 0xec, 0x03, 0x9b, 0xa6, 0x23, - 0x6f, 0x0b, 0xa3, 0xc4, 0x8f, 0xbb, 0x6e, 0x40, 0x5b, 0x68, 0x7b, 0x89, 0xef, 0xb3, 0xb5, 0x12, - 0x5b, 0x47, 0xe3, 0x0f, 0x41, 0xad, 0xdf, 0x2b, 0xc1, 0x5c, 0x8e, 0xdd, 0x82, 0xbc, 0x69, 0x74, - 0x67, 0x5a, 0xeb, 0x8e, 0x44, 0x59, 0xed, 0x13, 0xfd, 0x59, 0xd2, 0x5c, 0x79, 0x07, 0x4e, 0xe1, - 0xca, 0xbb, 0xda, 0x17, 0xbb, 0xef, 0x2e, 0x02, 0x8c, 0x4a, 0xb8, 0x75, 0x06, 0x26, 0x0d, 0xb9, - 0x59, 0x16, 0x4c, 0xe8, 0x35, 0xb3, 0xc1, 0x59, 0xf2, 0x5b, 0x6a, 0x70, 0xd8, 0xdf, 0xd6, 0xef, - 0x96, 0x60, 0x06, 0xbb, 0xb8, 0xef, 0xb2, 0xa5, 0x2f, 0x96, 0xd0, 0x82, 0xd1, 0x93, 0x8b, 0x46, - 0x4f, 0x12, 0xb8, 0xaa, 0x4b, 0x1f, 0xa4, 0xba, 0x74, 0x31, 0xab, 0x4b, 0x38, 0xbd, 0x5d, 0xdf, - 0x33, 0x7a, 0xa2, 0x5d, 0x06, 0xfd, 0x7e, 0x09, 0xa6, 0xb5, 0x36, 0xa9, 0xf6, 0xdf, 0x36, 0x9a, - 0x74, 0x21, 0xa3, 0x49, 0x29, 0x21, 0x2f, 0xa6, 0x5a, 0xf4, 0x6a, 0x51, 0x8b, 0x7a, 0xca, 0xf8, - 0xbf, 0x94, 0x60, 0x36, 0x53, 0x06, 0xe4, 0x1c, 0xd3, 0x6d, 0x9b, 0x01, 0x8d, 0x84, 0x78, 0xc5, - 0x2f, 0x06, 0x5f, 0x0b, 0xc3, 0x2e, 0x0d, 0xc4, 0x77, 0x2e, 0x7e, 0x91, 0x57, 0x61, 0x72, 0x9b, - 0x06, 0xae, 0xdf, 0xe2, 0x4e, 0xde, 0xdc, 0x7b, 0x72, 0xd2, 0x36, 0x81, 0xe4, 0x22, 0x8c, 0xd5, - 0xda, 0xfb, 0x7e, 0xe0, 0x46, 0x07, 0xfc, 0x3e, 0x6e, 0xcc, 0x8e, 0x01, 0x8c, 0xf7, 0xb2, 0xbb, - 0xcf, 0xaf, 0x15, 0x18, 0xb1, 0xf8, 0xc5, 0x16, 0x17, 0x69, 0xaf, 0x1b, 0xe6, 0x8b, 0x8b, 0x34, - 0xc6, 0x9d, 0x83, 0xe1, 0xcf, 0x6c, 0x9c, 0x04, 0xf8, 0xfc, 0xde, 0x16, 0xbf, 0xc8, 0x14, 0xba, - 0xe9, 0xe2, 0xe3, 0x7a, 0x74, 0xcf, 0xfd, 0x00, 0x66, 0xb2, 0xe4, 0x9a, 0x35, 0x85, 0x04, 0x6d, - 0xbf, 0xa2, 0xfd, 0x12, 0xa6, 0x6b, 0xad, 0xd6, 0xc6, 0xdd, 0x1a, 0xbf, 0xf5, 0x17, 0xa3, 0xca, - 0x3f, 0x1e, 0x6e, 0xaf, 0x13, 0x2a, 0xdb, 0xe0, 0x9a, 0xe7, 0x46, 0xf6, 0xf4, 0xca, 0xd7, 0x6e, - 0x18, 0xb9, 0xde, 0xbe, 0x66, 0xd6, 0xb3, 0xcf, 0x6d, 0xd2, 0x67, 0x19, 0x53, 0x80, 0xed, 0xa6, - 0x26, 0x6f, 0x65, 0x06, 0x4c, 0x32, 0x9f, 0xd1, 0xd8, 0xc6, 0x4b, 0xc9, 0x9c, 0xc9, 0x37, 0x2e, - 0x18, 0xa8, 0x35, 0x9f, 0x58, 0xdf, 0x83, 0x73, 0x7c, 0x49, 0x2b, 0x6a, 0xbc, 0x68, 0xb6, 0x6e, - 0x85, 0xb4, 0xde, 0x93, 0x56, 0x8a, 0xc2, 0x96, 0xd9, 0x13, 0x46, 0x5b, 0xb0, 0xca, 0xff, 0x5a, - 0x82, 0xf9, 0x04, 0x69, 0xfd, 0xb9, 0xd7, 0x94, 0xeb, 0xe9, 0xeb, 0x49, 0x37, 0x68, 0xd4, 0x03, - 0xb8, 0xf1, 0xcf, 0x6d, 0x29, 0x4f, 0x68, 0x72, 0x13, 0x80, 0x13, 0x6b, 0xdb, 0x37, 0x1a, 0x9f, - 0x85, 0x9b, 0x0b, 0x6e, 0xe0, 0x1a, 0x0a, 0xe9, 0x42, 0x96, 0xdc, 0xc5, 0x37, 0xd2, 0xcb, 0x3a, - 0x8b, 0x21, 0x27, 0xa8, 0x20, 0x6f, 0xe4, 0x98, 0x69, 0xb3, 0xf8, 0x5b, 0x7f, 0x67, 0x00, 0xe6, - 0xf4, 0x01, 0x7c, 0x91, 0xbe, 0x6e, 0xc3, 0xf8, 0x92, 0xef, 0x45, 0xf4, 0xeb, 0x48, 0x7b, 0xf2, - 0x4f, 0xd4, 0x5d, 0xb7, 0x2a, 0x11, 0xaa, 0x23, 0x07, 0x34, 0x98, 0x1e, 0x63, 0xb8, 0xeb, 0xc5, - 0x88, 0x64, 0x09, 0x26, 0x37, 0xe9, 0xb3, 0x94, 0x00, 0xd1, 0x65, 0xd0, 0xa3, 0xcf, 0x1a, 0x9a, - 0x10, 0x75, 0x3f, 0x2e, 0x83, 0x86, 0x3c, 0x82, 0x29, 0x39, 0xb9, 0x0c, 0x61, 0xce, 0xeb, 0xbb, - 0x8a, 0x39, 0x9d, 0xf9, 0x93, 0x78, 0x56, 0x43, 0x8e, 0x0c, 0x13, 0x1c, 0x59, 0xd7, 0x79, 0x8d, - 0xfc, 0x95, 0xb7, 0xb9, 0x6d, 0x69, 0x25, 0x86, 0x43, 0x66, 0xf2, 0x75, 0xb7, 0xce, 0xc2, 0xda, - 0x86, 0x4a, 0x7a, 0x3c, 0x44, 0x6d, 0x6f, 0xc3, 0x30, 0x87, 0x0a, 0x35, 0x40, 0x46, 0x73, 0x51, - 0xd8, 0xfc, 0x9c, 0xce, 0xab, 0xb1, 0x05, 0xae, 0xb5, 0x8a, 0xb6, 0x13, 0x85, 0xa3, 0x14, 0xb1, - 0x5b, 0xc9, 0xe1, 0x45, 0x5f, 0x57, 0x39, 0xbc, 0xba, 0xa7, 0x87, 0x74, 0xef, 0x5f, 0x42, 0xf3, - 0x93, 0xce, 0x49, 0x34, 0xec, 0x3a, 0x8c, 0x08, 0x50, 0x22, 0xce, 0x4c, 0xfc, 0xf9, 0x49, 0x04, - 0xeb, 0x03, 0x38, 0x8f, 0xb6, 0x30, 0xd7, 0xdb, 0x6f, 0xd3, 0xdd, 0xd0, 0x70, 0xd0, 0xef, 0xf5, - 0x59, 0x7f, 0x04, 0xf3, 0x59, 0xb4, 0x3d, 0xbf, 0x6c, 0x1e, 0xf9, 0xe1, 0x2f, 0xfb, 0x61, 0x66, - 0x2d, 0xd4, 0x95, 0x09, 0x15, 0xfd, 0x21, 0x23, 0x22, 0x01, 0xca, 0x64, 0xb5, 0x2f, 0x2b, 0xe2, - 0xc0, 0xdb, 0xda, 0xcb, 0xbf, 0xfe, 0xa2, 0x50, 0x03, 0x6c, 0xdb, 0x52, 0x6f, 0xff, 0x5e, 0x87, - 0xc1, 0x4d, 0xb6, 0x54, 0x0f, 0x88, 0xb1, 0xe3, 0x14, 0x0c, 0x84, 0x2f, 0xef, 0xd8, 0x16, 0xc9, - 0x7e, 0x90, 0xbb, 0xa9, 0xf7, 0x7d, 0x83, 0xbd, 0x9f, 0xd2, 0xaf, 0xf6, 0xa5, 0x9e, 0xfa, 0xbd, - 0x0b, 0xe3, 0xb5, 0xd6, 0x21, 0xf7, 0xc9, 0xf3, 0xbd, 0xc4, 0x67, 0xa9, 0x95, 0xac, 0xf6, 0xd9, - 0x3a, 0x22, 0x3b, 0xe1, 0xd6, 0x3a, 0x1d, 0xdc, 0xa8, 0xb2, 0xc2, 0x0b, 0xac, 0xf6, 0xa1, 0x8b, - 0xfb, 0xe2, 0x28, 0x0c, 0xef, 0x38, 0xc1, 0x3e, 0x8d, 0xac, 0x2f, 0x61, 0x5e, 0xb8, 0x89, 0x70, - 0xcb, 0x1f, 0x3a, 0x93, 0x84, 0xb1, 0x27, 0x50, 0x91, 0x6b, 0xc7, 0x65, 0x00, 0xd4, 0xf3, 0xd7, - 0xbc, 0x16, 0xfd, 0x5a, 0xf8, 0xa9, 0x69, 0x10, 0xeb, 0x1d, 0x18, 0x53, 0x12, 0x42, 0x65, 0x56, - 0xdb, 0xec, 0x50, 0x5a, 0x33, 0xc6, 0x83, 0x46, 0xf9, 0x8a, 0xf1, 0xbc, 0xd1, 0x77, 0x11, 0x30, - 0x84, 0x6b, 0xbf, 0x2e, 0xcc, 0x26, 0x26, 0x41, 0xfc, 0x1e, 0x5d, 0xe9, 0x9f, 0xdc, 0x91, 0x4e, - 0xfd, 0x4e, 0xaa, 0xa7, 0xfd, 0x27, 0x52, 0x4f, 0xad, 0x7f, 0xda, 0x8f, 0x07, 0xa7, 0x94, 0x3c, - 0x12, 0x36, 0x28, 0xdd, 0x0e, 0xb6, 0x08, 0x63, 0xd8, 0xfb, 0x65, 0xf9, 0xf8, 0xaa, 0xd8, 0xcb, - 0x61, 0xf4, 0x67, 0x47, 0xd5, 0x3e, 0x74, 0x6d, 0x88, 0xc9, 0xc8, 0xc7, 0x30, 0xb2, 0xe2, 0xb5, - 0x90, 0xc3, 0xc0, 0x29, 0x38, 0x48, 0x22, 0x36, 0x26, 0xd8, 0xe4, 0x1d, 0xf6, 0x09, 0x73, 0xd3, - 0x85, 0xad, 0x41, 0xe2, 0x13, 0xdc, 0x50, 0xde, 0x09, 0x6e, 0x38, 0x71, 0x82, 0xb3, 0x60, 0x68, - 0x2b, 0x68, 0x89, 0x30, 0x1f, 0x53, 0x0b, 0x13, 0x42, 0x70, 0x08, 0xb3, 0x79, 0x91, 0xf5, 0xdf, - 0x4b, 0x30, 0x77, 0x8f, 0x46, 0x99, 0x73, 0xc8, 0x90, 0x4a, 0xe9, 0x1b, 0x4b, 0xa5, 0xff, 0x45, - 0xa4, 0xa2, 0x7a, 0x3d, 0x90, 0xd7, 0xeb, 0xc1, 0xbc, 0x5e, 0x0f, 0xe5, 0xf7, 0xfa, 0x1e, 0x0c, - 0xf3, 0xae, 0xb2, 0x53, 0xea, 0x5a, 0x44, 0x0f, 0xe3, 0x53, 0xaa, 0xee, 0xa3, 0x65, 0xf3, 0x32, - 0xa6, 0x48, 0xae, 0x3b, 0xa1, 0x7e, 0x4a, 0x15, 0x3f, 0xad, 0x1f, 0xe1, 0xb3, 0xcd, 0x75, 0xbf, - 0xf9, 0x44, 0xb3, 0x76, 0x8e, 0xf0, 0x2f, 0x34, 0x69, 0x1d, 0x67, 0x58, 0xbc, 0xc4, 0x96, 0x18, - 0xe4, 0x0a, 0x8c, 0xaf, 0x79, 0x77, 0xfd, 0xa0, 0x49, 0xb7, 0xbc, 0x36, 0xe7, 0x3e, 0x6a, 0xeb, - 0x20, 0x61, 0x05, 0x10, 0x35, 0xc4, 0x47, 0x6b, 0x04, 0x24, 0x8e, 0xd6, 0x0c, 0xb6, 0xb7, 0x60, - 0xf3, 0x32, 0x61, 0x64, 0x60, 0x7f, 0x17, 0x9d, 0x4a, 0xd5, 0xf1, 0xb5, 0x17, 0xe2, 0x23, 0x38, - 0x6f, 0xd3, 0x4e, 0xdb, 0x61, 0x3a, 0xdd, 0xa1, 0xcf, 0xf1, 0x55, 0x9f, 0xaf, 0x64, 0x3c, 0xb9, - 0x32, 0x6f, 0xec, 0x55, 0x93, 0xfb, 0x0b, 0x9a, 0x7c, 0x08, 0x57, 0xef, 0xd1, 0xc8, 0x5c, 0x50, - 0x63, 0x5b, 0xaa, 0xe8, 0xfc, 0x2a, 0x8c, 0x86, 0xa6, 0x1d, 0xf8, 0xb2, 0xbc, 0x7e, 0xc8, 0x22, - 0xdc, 0xbb, 0x23, 0x6f, 0x4a, 0x04, 0x1f, 0xf5, 0x97, 0xf5, 0x09, 0x54, 0xf3, 0xaa, 0x3b, 0x99, - 0x43, 0xa5, 0x0b, 0x57, 0xf2, 0x19, 0x88, 0xe6, 0xae, 0x80, 0xb4, 0x19, 0x8b, 0x4f, 0xa8, 0x57, - 0x6b, 0x4d, 0x33, 0xb3, 0xf8, 0xc3, 0x5a, 0x94, 0xae, 0x65, 0xdf, 0xa0, 0xb9, 0x0d, 0xbc, 0x8e, - 0x35, 0x19, 0xc4, 0x72, 0xad, 0xc1, 0xa8, 0x84, 0x09, 0xb9, 0xce, 0x65, 0xb6, 0x54, 0x0a, 0xb4, - 0x25, 0x19, 0x28, 0x32, 0xeb, 0x47, 0xf2, 0x6a, 0xc2, 0xa4, 0x38, 0xd9, 0x1b, 0xc4, 0x93, 0xdc, - 0x45, 0x58, 0x3e, 0x9c, 0x37, 0x79, 0xeb, 0x26, 0xe7, 0xb2, 0x66, 0x72, 0xe6, 0x96, 0xe6, 0x2b, - 0xa6, 0x09, 0xb4, 0x5f, 0xcc, 0xcb, 0x18, 0x44, 0x2e, 0xeb, 0x86, 0xe5, 0x89, 0xf4, 0xa3, 0xc6, - 0x5b, 0x30, 0x9f, 0x55, 0xa1, 0x76, 0x0e, 0x54, 0xd6, 0x4b, 0xa1, 0xef, 0x2c, 0xc3, 0x65, 0x19, - 0x68, 0xc7, 0xf7, 0xa3, 0x30, 0x0a, 0x9c, 0x4e, 0xbd, 0x19, 0xb8, 0x9d, 0x98, 0xca, 0x82, 0x61, - 0x0e, 0x11, 0x92, 0xe0, 0xd7, 0x3c, 0x1c, 0x47, 0x94, 0x58, 0xbf, 0x59, 0x02, 0xcb, 0xf0, 0x02, - 0xc2, 0x71, 0xde, 0x0e, 0xfc, 0xa7, 0x6e, 0x4b, 0xbb, 0x5a, 0x79, 0xd3, 0x30, 0xeb, 0xf1, 0x47, - 0x69, 0x49, 0x07, 0x64, 0xb1, 0x66, 0xde, 0x4a, 0x98, 0xda, 0xb8, 0xe2, 0x89, 0x9e, 0x41, 0x66, - 0x44, 0x13, 0x65, 0x82, 0xfb, 0x9f, 0x25, 0x78, 0xa5, 0xb0, 0x0d, 0xa2, 0x3f, 0x8f, 0xa0, 0x9c, - 0x2c, 0x13, 0x33, 0xa8, 0xaa, 0xf9, 0x24, 0xa4, 0x39, 0xec, 0xdd, 0xe6, 0x5e, 0xce, 0xd2, 0x7b, - 0xa6, 0xa3, 0x38, 0xa7, 0xf8, 0x9d, 0xbe, 0xf5, 0xe4, 0x7d, 0x80, 0x1d, 0x3f, 0x72, 0xda, 0x4b, - 0x68, 0x00, 0x18, 0x88, 0x3d, 0xd6, 0x23, 0x06, 0x6d, 0x24, 0x23, 0x00, 0x68, 0xc8, 0xd6, 0xa7, - 0xf8, 0x5d, 0x67, 0x37, 0xfa, 0x64, 0x9f, 0xda, 0x12, 0xbc, 0x92, 0xb8, 0x17, 0x7f, 0x01, 0x26, - 0x11, 0xcc, 0x32, 0xf1, 0x33, 0xdd, 0xfb, 0x5e, 0xe0, 0x77, 0x3b, 0xbf, 0x9c, 0x51, 0xff, 0xd3, - 0x12, 0x77, 0x15, 0xd4, 0xab, 0x15, 0x03, 0xbd, 0x04, 0x10, 0x43, 0x13, 0x2e, 0xe3, 0xaa, 0x60, - 0xef, 0x36, 0x3f, 0x72, 0xa3, 0xc5, 0x7c, 0x9f, 0x33, 0xd0, 0xc8, 0x7e, 0xb9, 0x23, 0x79, 0x07, - 0x2f, 0xc3, 0x55, 0xed, 0x27, 0x93, 0xfb, 0xbb, 0xd2, 0xfe, 0x71, 0x4a, 0xba, 0x03, 0x98, 0x61, - 0x2b, 0x40, 0xad, 0x1b, 0x1d, 0xf8, 0x81, 0x1b, 0xc9, 0xc7, 0x0f, 0x64, 0x5b, 0xbc, 0xae, 0xe6, - 0x54, 0x1f, 0xfd, 0xe2, 0xa8, 0xfa, 0xde, 0x69, 0x42, 0x20, 0x4a, 0x9e, 0x3b, 0xea, 0x45, 0xb6, - 0x35, 0x07, 0x03, 0x4b, 0xf6, 0x3a, 0x2e, 0x78, 0xf6, 0xba, 0x5a, 0xf0, 0xec, 0x75, 0xeb, 0xaf, - 0xfb, 0xa1, 0xca, 0xe3, 0x3f, 0xa0, 0x0f, 0x45, 0x6c, 0xb5, 0xd0, 0x9c, 0x32, 0x4e, 0x6a, 0x60, - 0x48, 0xc4, 0x77, 0xe8, 0x3f, 0x49, 0x7c, 0x87, 0x5f, 0x83, 0x1c, 0x93, 0xd5, 0x09, 0xac, 0x00, - 0x6f, 0x1c, 0x1f, 0x55, 0x5f, 0x89, 0xad, 0x00, 0xbc, 0x34, 0xcb, 0x1c, 0x90, 0x53, 0x45, 0xda, - 0x7e, 0x31, 0xf8, 0x02, 0xf6, 0x8b, 0x5b, 0x30, 0x82, 0x87, 0x99, 0xb5, 0x6d, 0xe1, 0x57, 0x88, - 0xd3, 0x13, 0x83, 0xb5, 0x34, 0x5c, 0x3d, 0x32, 0x9a, 0x44, 0xb3, 0xfe, 0x7e, 0x3f, 0x5c, 0xc9, - 0x97, 0xb9, 0x68, 0xdb, 0x32, 0x40, 0xec, 0xbd, 0x51, 0xe4, 0x2d, 0x82, 0xdf, 0xce, 0x33, 0xfa, - 0x48, 0x79, 0x6b, 0x69, 0x74, 0x4c, 0xf7, 0x91, 0x4f, 0x6d, 0x13, 0x57, 0x05, 0xc6, 0x0b, 0x5c, - 0x11, 0xd8, 0x53, 0x80, 0x8c, 0xc0, 0x9e, 0x02, 0x46, 0x1e, 0xc1, 0xdc, 0x76, 0xe0, 0x3e, 0x75, - 0x22, 0xfa, 0x80, 0x3e, 0xe7, 0x4f, 0x51, 0x56, 0xc4, 0xfb, 0x13, 0xfe, 0x7e, 0xfa, 0xda, 0xf1, - 0x51, 0xf5, 0xd5, 0x0e, 0x47, 0xc1, 0xe0, 0x4d, 0xfc, 0xf1, 0x5f, 0x23, 0xfd, 0x24, 0x25, 0x8f, - 0x91, 0xf5, 0x6f, 0x4b, 0x70, 0x01, 0xd5, 0x72, 0x61, 0x76, 0x95, 0x95, 0xbf, 0x90, 0xd3, 0xa0, - 0xde, 0x41, 0x31, 0x17, 0xd1, 0x69, 0xd0, 0x78, 0x8a, 0x6c, 0x1b, 0x68, 0x64, 0x0d, 0xc6, 0xc5, - 0x6f, 0xfc, 0xfe, 0x06, 0xf0, 0x40, 0x30, 0xab, 0x2d, 0x58, 0x38, 0xd5, 0xb9, 0xa9, 0x08, 0x27, - 0xb6, 0x60, 0x86, 0x2f, 0xf6, 0x6c, 0x9d, 0xd6, 0xfa, 0x79, 0x3f, 0x5c, 0xdc, 0xa3, 0x81, 0xfb, - 0xf8, 0x79, 0x4e, 0x67, 0xb6, 0x60, 0x46, 0x82, 0x78, 0x0c, 0x08, 0xe3, 0x13, 0xe3, 0xa1, 0xfd, - 0x64, 0x53, 0x45, 0x10, 0x09, 0xf9, 0xc5, 0x65, 0x12, 0x9e, 0xc2, 0x1d, 0xf0, 0x6d, 0x18, 0x4d, - 0x44, 0x61, 0xc1, 0xf1, 0x97, 0x5f, 0x68, 0x3c, 0x54, 0xab, 0x7d, 0xb6, 0xc2, 0x24, 0xbf, 0x95, - 0x7f, 0x7f, 0x23, 0x4c, 0x1f, 0xbd, 0xec, 0x9f, 0xf8, 0xc1, 0xb2, 0x8f, 0xd5, 0xd1, 0x4a, 0x33, - 0x3e, 0xd8, 0xd5, 0x3e, 0x3b, 0xaf, 0xa6, 0xc5, 0x71, 0x18, 0xab, 0xe1, 0x9d, 0x14, 0x3b, 0xb9, - 0xff, 0x8f, 0x7e, 0xb8, 0x2c, 0x9f, 0x95, 0xe4, 0x88, 0xf9, 0x73, 0x98, 0x93, 0xa0, 0x5a, 0x87, - 0x29, 0x0c, 0xb4, 0x65, 0x4a, 0x9a, 0x87, 0xd7, 0x94, 0x92, 0x76, 0x04, 0x4e, 0x2c, 0xec, 0x3c, - 0xf2, 0x97, 0x63, 0xfd, 0xfc, 0x38, 0x2b, 0x26, 0x0e, 0x5a, 0x21, 0xf5, 0x35, 0xd3, 0x10, 0x8d, - 0xb1, 0x7e, 0xb6, 0x52, 0xd6, 0xd3, 0xc1, 0x6f, 0x6a, 0x3d, 0x5d, 0xed, 0x4b, 0xda, 0x4f, 0x17, - 0xa7, 0x60, 0x62, 0x93, 0x3e, 0x8b, 0xe5, 0xfe, 0xff, 0x96, 0x12, 0x6f, 0xfd, 0x99, 0x86, 0xc1, - 0x1f, 0xfd, 0x97, 0xe2, 0xb0, 0x2a, 0xf8, 0xd6, 0x5f, 0xd7, 0x30, 0x38, 0xea, 0x1a, 0x8c, 0xf0, - 0x8b, 0xda, 0xd6, 0x09, 0x4e, 0xf8, 0xea, 0x7d, 0x08, 0x7f, 0xb4, 0xd7, 0xe2, 0x87, 0x7d, 0x41, - 0x6f, 0x3d, 0x80, 0xab, 0xc2, 0x7f, 0xd9, 0x1c, 0x7c, 0xac, 0xe8, 0x94, 0xdb, 0x97, 0xe5, 0xc0, - 0xe5, 0x7b, 0x34, 0xb9, 0xf4, 0x18, 0xef, 0x67, 0x3e, 0x81, 0x33, 0x06, 0x5c, 0x71, 0x44, 0xad, - 0x54, 0xcd, 0x21, 0xc5, 0x3a, 0x89, 0x6d, 0x5d, 0xc9, 0xaa, 0x42, 0x6f, 0xac, 0x45, 0x31, 0x4e, - 0x66, 0x10, 0x5f, 0xb1, 0x85, 0xa7, 0x58, 0xf5, 0xae, 0x69, 0xdf, 0x35, 0x5f, 0xf1, 0x78, 0x20, - 0x35, 0xb9, 0xf3, 0xaa, 0x52, 0x6b, 0xd2, 0xb8, 0x0b, 0xb0, 0xa6, 0x60, 0x42, 0x16, 0xb5, 0x69, - 0x18, 0x5a, 0x3f, 0x1d, 0x02, 0x4b, 0x08, 0x36, 0xeb, 0xf6, 0x59, 0xca, 0xe3, 0x51, 0xaa, 0xb1, - 0x62, 0xa3, 0x3a, 0xa7, 0x87, 0x67, 0x8c, 0x4b, 0xf9, 0xcc, 0x43, 0x3d, 0xaf, 0x19, 0x43, 0x8d, - 0x99, 0x97, 0xea, 0xfd, 0x0f, 0x72, 0x96, 0x49, 0xfe, 0xb1, 0xbd, 0x76, 0x7c, 0x54, 0xbd, 0x9a, - 0xb3, 0x4c, 0x1a, 0x7c, 0xb3, 0x97, 0x4c, 0xdb, 0xbc, 0x12, 0x19, 0x78, 0x91, 0x2b, 0x11, 0xf6, - 0x45, 0xea, 0x97, 0x22, 0xbb, 0xa6, 0x2c, 0xc5, 0xf7, 0x28, 0xaf, 0xb4, 0xf5, 0x22, 0xf1, 0xe4, - 0x5e, 0x83, 0x18, 0x5c, 0x0d, 0x36, 0xc4, 0x85, 0xb2, 0x66, 0xb3, 0x5c, 0x3a, 0xa0, 0xcd, 0x27, - 0xc2, 0x56, 0x2c, 0x2f, 0x74, 0xb3, 0x6c, 0xe6, 0x3c, 0x54, 0x2f, 0xff, 0xce, 0x79, 0x41, 0xa3, - 0xc9, 0x48, 0xf5, 0x90, 0x01, 0x49, 0xb6, 0xe4, 0x27, 0x30, 0xad, 0x86, 0x3a, 0xe1, 0x7e, 0x34, - 0xbe, 0xf0, 0x6a, 0x1c, 0xd5, 0xf1, 0xf0, 0xb1, 0x73, 0xe3, 0xe9, 0xed, 0x1b, 0x19, 0xb8, 0xfc, - 0x25, 0x7a, 0x53, 0x16, 0x68, 0xbe, 0x47, 0xfa, 0x45, 0x57, 0x16, 0xa1, 0x76, 0x9d, 0xfd, 0xf7, - 0x94, 0xb3, 0x3c, 0xd3, 0x17, 0xdc, 0x36, 0x15, 0xef, 0x4e, 0xe4, 0xec, 0xcb, 0xb9, 0x8a, 0x2b, - 0x7d, 0xcb, 0x57, 0x71, 0x7f, 0xdc, 0x2f, 0x9f, 0x08, 0xa4, 0x6f, 0x43, 0x4f, 0x7d, 0x23, 0x97, - 0xd9, 0x83, 0x13, 0x6d, 0xa6, 0x99, 0x8d, 0x23, 0x8b, 0xf2, 0x3e, 0x53, 0x45, 0x67, 0x9a, 0x52, - 0x77, 0x03, 0x71, 0x81, 0x71, 0xc5, 0x89, 0xaa, 0x8b, 0x46, 0x95, 0xbc, 0x2c, 0x1b, 0xf8, 0xe6, - 0x97, 0x65, 0xff, 0x72, 0x0c, 0xce, 0x6e, 0x3b, 0xfb, 0xae, 0xc7, 0x16, 0x6d, 0x9b, 0x86, 0x7e, - 0x37, 0x68, 0x52, 0x52, 0x83, 0x29, 0xd3, 0xff, 0xb3, 0x87, 0x77, 0x2b, 0xdb, 0x97, 0x4c, 0x18, - 0x59, 0x80, 0x31, 0xf5, 0xea, 0x53, 0x6c, 0x26, 0x19, 0xaf, 0x41, 0x57, 0xfb, 0xec, 0x18, 0x8d, - 0xbc, 0x6f, 0xdc, 0xef, 0x9c, 0x51, 0x0f, 0x98, 0x11, 0x77, 0x81, 0x3b, 0xe8, 0x79, 0x7e, 0xcb, - 0xdc, 0x10, 0xf9, 0x25, 0xc6, 0x8f, 0x52, 0x57, 0x3e, 0x43, 0x46, 0x8b, 0x53, 0x76, 0x2f, 0xd4, - 0x05, 0x72, 0x63, 0x25, 0x67, 0x5c, 0x06, 0x7d, 0x09, 0xe3, 0x0f, 0xba, 0x8f, 0xa8, 0xbc, 0xdc, - 0x1a, 0x16, 0xfb, 0x63, 0xd2, 0xab, 0x59, 0x94, 0xef, 0xdd, 0xe1, 0x63, 0xf0, 0xa4, 0xfb, 0x88, - 0xa6, 0x83, 0x70, 0xb3, 0x85, 0x49, 0x63, 0x46, 0x0e, 0xa0, 0x9c, 0x74, 0x40, 0x16, 0xf1, 0xcc, - 0x0a, 0xdc, 0xa6, 0x31, 0x98, 0x86, 0x16, 0xea, 0x9b, 0xbb, 0x45, 0x1a, 0x95, 0xa4, 0xb8, 0x92, - 0x5f, 0x87, 0xd9, 0x4c, 0xab, 0xa3, 0x7a, 0xc4, 0x54, 0x6c, 0xd0, 0xc4, 0x45, 0x3d, 0x21, 0x35, - 0xf9, 0x62, 0xca, 0xa8, 0x39, 0xbb, 0x16, 0xd2, 0x82, 0x33, 0x09, 0xc7, 0x5a, 0x91, 0xcf, 0x20, - 0xdf, 0x55, 0x17, 0x37, 0x26, 0x19, 0x12, 0x34, 0xb3, 0xae, 0x24, 0x4b, 0xb2, 0x0e, 0x63, 0xea, - 0xb8, 0x8f, 0x71, 0x91, 0xb2, 0x4d, 0x1b, 0x95, 0xe3, 0xa3, 0xea, 0x4c, 0x6c, 0xda, 0x30, 0x78, - 0xc6, 0x0c, 0xc8, 0x6f, 0xc0, 0x55, 0x35, 0x45, 0xb7, 0x82, 0x6c, 0x23, 0x90, 0x08, 0x25, 0x7e, - 0x3d, 0x39, 0xc3, 0xf3, 0xf0, 0xf7, 0x6e, 0x2f, 0xf6, 0x57, 0x4a, 0xab, 0x7d, 0x76, 0x6f, 0xd6, - 0xe4, 0xa7, 0x25, 0x38, 0x97, 0x53, 0xeb, 0x04, 0xd6, 0xda, 0xd3, 0x32, 0x87, 0xca, 0x3d, 0x3e, - 0x1b, 0x72, 0x5b, 0xf1, 0x03, 0x37, 0x69, 0xa2, 0x33, 0xfa, 0x9d, 0x53, 0x13, 0x79, 0x0b, 0x86, - 0xf1, 0x8c, 0x1c, 0x56, 0x26, 0x51, 0x8b, 0xc4, 0x18, 0x32, 0x78, 0x92, 0xd6, 0xf7, 0x0d, 0x81, - 0x43, 0x56, 0x99, 0x36, 0x86, 0xfb, 0x96, 0xd4, 0x9e, 0x44, 0xc4, 0x29, 0xa1, 0xd1, 0xf3, 0x22, - 0x19, 0x67, 0xc2, 0x88, 0x19, 0x6f, 0x92, 0x2d, 0x02, 0x8c, 0x06, 0x62, 0x55, 0xba, 0x3f, 0x38, - 0x3a, 0x58, 0x1e, 0xe2, 0x1f, 0x8e, 0xf4, 0xd8, 0xfe, 0xed, 0x51, 0xfe, 0xc0, 0x72, 0xd7, 0x73, - 0x1f, 0xbb, 0xf1, 0x02, 0xa6, 0x5b, 0xd7, 0xe2, 0xe4, 0x2d, 0x42, 0xf7, 0xcd, 0x49, 0xd3, 0xa2, - 0x0c, 0x71, 0xfd, 0x3d, 0x0d, 0x71, 0x77, 0xb4, 0x2b, 0x2b, 0x2d, 0x48, 0x23, 0xd7, 0x71, 0x4c, - 0xc3, 0x57, 0x7c, 0x97, 0xf5, 0x15, 0x0c, 0x63, 0x5c, 0x45, 0x7e, 0x1f, 0x38, 0xbe, 0x70, 0x43, - 0x2c, 0xdb, 0x05, 0xcd, 0xe7, 0x81, 0x18, 0xc5, 0xa3, 0x69, 0x2e, 0x71, 0x04, 0x18, 0x12, 0x47, - 0x08, 0xd9, 0x81, 0xe9, 0xed, 0x80, 0xb6, 0x84, 0xdf, 0x70, 0x27, 0x10, 0xc6, 0x09, 0x6e, 0xf6, - 0xc0, 0x2d, 0xbf, 0x23, 0x8b, 0x1b, 0x54, 0x95, 0xeb, 0x1b, 0x6a, 0x06, 0x39, 0x59, 0x81, 0xa9, - 0x3a, 0x75, 0x82, 0xe6, 0xc1, 0x03, 0xfa, 0x9c, 0xa9, 0x3b, 0x46, 0xbe, 0x82, 0x10, 0x4b, 0x58, - 0x7f, 0xb1, 0x48, 0xf7, 0xf1, 0x30, 0x89, 0xc8, 0xa7, 0x30, 0x5c, 0xf7, 0x83, 0x68, 0xf1, 0xb9, - 0x58, 0xd4, 0xe4, 0x8d, 0x11, 0x07, 0x2e, 0x9e, 0x97, 0x39, 0x1b, 0x42, 0x3f, 0x88, 0x1a, 0x8f, - 0x8c, 0xa0, 0x44, 0x1c, 0x85, 0x3c, 0x87, 0x19, 0x73, 0x41, 0x11, 0xee, 0xac, 0xa3, 0x42, 0xcd, - 0xca, 0x5a, 0xb5, 0x38, 0xca, 0xe2, 0x35, 0xc1, 0xfd, 0x4a, 0x72, 0xd9, 0x7a, 0x8c, 0xe5, 0x7a, - 0x9c, 0xa0, 0x2c, 0x7a, 0xb2, 0x81, 0xc9, 0x2e, 0x78, 0x8f, 0x6a, 0x21, 0x77, 0x83, 0x1d, 0x8b, - 0xc3, 0x5e, 0x75, 0x71, 0x51, 0x42, 0x49, 0x38, 0x61, 0x32, 0x43, 0x8a, 0x9d, 0x22, 0x25, 0xdb, - 0x70, 0x76, 0x37, 0xa4, 0xdb, 0x01, 0x7d, 0xea, 0xd2, 0x67, 0x92, 0x1f, 0xc4, 0x31, 0x82, 0x18, - 0xbf, 0x0e, 0x2f, 0xcd, 0x62, 0x98, 0x26, 0x26, 0xef, 0x03, 0x6c, 0xbb, 0x9e, 0x47, 0x5b, 0x78, - 0xed, 0x38, 0x8e, 0xac, 0xd0, 0xa4, 0xda, 0x41, 0x68, 0xc3, 0xf7, 0xda, 0xba, 0x48, 0x35, 0x64, - 0xb2, 0x08, 0x93, 0x6b, 0x5e, 0xb3, 0xdd, 0x15, 0xee, 0x01, 0x21, 0x2e, 0x28, 0x22, 0x76, 0x99, - 0xcb, 0x0b, 0x1a, 0xa9, 0x8f, 0xdc, 0x24, 0x21, 0x0f, 0x80, 0x08, 0x80, 0x98, 0xb5, 0xce, 0xa3, - 0x36, 0x15, 0x9f, 0x3b, 0x9a, 0x4a, 0x24, 0x23, 0x9c, 0xee, 0x46, 0x48, 0xb0, 0x14, 0xd9, 0xfc, - 0xfb, 0x30, 0xae, 0xcd, 0xf9, 0x8c, 0x28, 0x00, 0x33, 0x7a, 0x14, 0x80, 0x31, 0xfd, 0xb5, 0xff, - 0x3f, 0x2a, 0xc1, 0xc5, 0xec, 0x6f, 0x49, 0x28, 0x60, 0x5b, 0x30, 0xa6, 0x80, 0xea, 0xd5, 0x89, - 0x54, 0xfd, 0x13, 0x1a, 0x10, 0xff, 0xa0, 0xe5, 0xca, 0xa3, 0xf7, 0x3e, 0xe6, 0xf1, 0x02, 0xf6, - 0xf8, 0xff, 0x6f, 0x14, 0x66, 0xd0, 0xbb, 0x3a, 0xb9, 0x4e, 0x7d, 0x82, 0xd1, 0x3c, 0x10, 0xa6, - 0x99, 0x97, 0x85, 0xa5, 0x89, 0xc3, 0x93, 0xa1, 0xa7, 0x0c, 0x02, 0xf2, 0x8e, 0xee, 0x13, 0xd1, - 0xaf, 0x25, 0xd7, 0x90, 0x40, 0xbd, 0x0b, 0xb1, 0xb3, 0xc4, 0x9b, 0xc6, 0x95, 0xfc, 0x89, 0x17, - 0xbd, 0xc1, 0x93, 0x2e, 0x7a, 0xbb, 0x6a, 0xd1, 0xe3, 0x51, 0x22, 0xde, 0xd0, 0x16, 0xbd, 0x97, - 0xbf, 0xda, 0x0d, 0xbf, 0xec, 0xd5, 0x6e, 0xe4, 0x9b, 0xad, 0x76, 0xa3, 0x2f, 0xb8, 0xda, 0xdd, - 0x85, 0xa9, 0x4d, 0x4a, 0x5b, 0xda, 0x45, 0xc9, 0x58, 0xbc, 0x7b, 0x7a, 0x14, 0x4d, 0x60, 0x59, - 0xb7, 0x25, 0x09, 0xaa, 0xdc, 0x55, 0x13, 0xfe, 0x76, 0x56, 0xcd, 0xf1, 0x97, 0xbc, 0x6a, 0x4e, - 0x7c, 0x93, 0x55, 0x33, 0xb5, 0xf4, 0x4d, 0x9e, 0x7a, 0xe9, 0xfb, 0x26, 0xab, 0xd5, 0xc7, 0xe8, - 0x52, 0x58, 0xaf, 0xaf, 0x0a, 0xef, 0x11, 0xcd, 0x5d, 0x63, 0xd5, 0x0f, 0xa5, 0xc7, 0x35, 0xfe, - 0xcd, 0x60, 0xdb, 0x7e, 0x20, 0xaf, 0xbc, 0xf1, 0x6f, 0x6b, 0x11, 0x1d, 0x09, 0x75, 0x7a, 0xe5, - 0xae, 0x3f, 0x22, 0x9e, 0xec, 0x89, 0x35, 0x2e, 0x79, 0x8c, 0xb2, 0x65, 0xb9, 0xf5, 0x97, 0x25, - 0x7e, 0x29, 0xf9, 0x7f, 0xe2, 0x52, 0xf9, 0x4d, 0x2e, 0x0a, 0x7f, 0x2b, 0x7e, 0xca, 0x2f, 0xc2, - 0x0e, 0x04, 0x4e, 0xf3, 0x49, 0x7c, 0x53, 0xfb, 0x43, 0xf6, 0x9d, 0xeb, 0x05, 0x18, 0xda, 0x34, - 0x3e, 0x2b, 0x9a, 0x85, 0x7b, 0xb7, 0xe5, 0x02, 0x20, 0x22, 0x1a, 0x70, 0xb0, 0xb9, 0x00, 0xe8, - 0x04, 0xe8, 0x2b, 0x77, 0xc6, 0xb2, 0xf9, 0x4b, 0xf4, 0xcc, 0x16, 0xbc, 0x9b, 0x7e, 0x4b, 0x8d, - 0x87, 0x91, 0xf8, 0x2d, 0xb5, 0x2e, 0xc6, 0xf8, 0x55, 0xf5, 0x2e, 0x5c, 0xb0, 0xe9, 0xa1, 0xff, - 0x94, 0xbe, 0x5c, 0xb6, 0x3f, 0x80, 0xf3, 0x26, 0x43, 0xfe, 0xea, 0x86, 0x87, 0x24, 0xff, 0x38, - 0x3b, 0x90, 0xb9, 0x20, 0xe0, 0x81, 0xcc, 0x79, 0x3c, 0x64, 0xf6, 0xa7, 0xbe, 0x6f, 0x60, 0x99, - 0xe5, 0xc3, 0x45, 0x93, 0x79, 0xad, 0xd5, 0xc2, 0x54, 0x86, 0x4d, 0xb7, 0xe3, 0x78, 0x11, 0xd9, - 0x82, 0x71, 0xed, 0x67, 0xc2, 0x54, 0xa0, 0x95, 0x08, 0x9d, 0x26, 0x06, 0x18, 0x41, 0x30, 0x63, - 0xb0, 0x45, 0xa1, 0x9a, 0x14, 0x0f, 0x13, 0x99, 0x5e, 0xe7, 0x22, 0x4c, 0x6a, 0x3f, 0x95, 0xc9, - 0x12, 0x3f, 0x7e, 0xad, 0x06, 0x53, 0x60, 0x26, 0x89, 0xd5, 0x84, 0xf9, 0x2c, 0xa1, 0x61, 0x7c, - 0xa4, 0xe7, 0x64, 0x25, 0x8e, 0xb4, 0xd4, 0xdb, 0xdb, 0xee, 0x4c, 0x5e, 0x94, 0x25, 0xeb, 0xef, - 0x0e, 0xc2, 0x05, 0x31, 0x18, 0x2f, 0x73, 0xc4, 0xc9, 0x8f, 0x60, 0x5c, 0x1b, 0x63, 0x21, 0xf4, - 0x2b, 0x32, 0xf8, 0x65, 0xde, 0x5c, 0xe0, 0x26, 0x8d, 0x2e, 0x02, 0x1a, 0x89, 0xe1, 0x5e, 0xed, - 0xb3, 0x75, 0x96, 0xa4, 0x0d, 0x53, 0xe6, 0x40, 0x0b, 0xab, 0xce, 0x2b, 0x99, 0x95, 0x98, 0xa8, - 0x32, 0x94, 0x72, 0xab, 0x91, 0x39, 0xdc, 0xab, 0x7d, 0x76, 0x82, 0x37, 0xf9, 0x1a, 0xce, 0xa6, - 0x46, 0x59, 0x18, 0xeb, 0x5e, 0xcf, 0xac, 0x30, 0x85, 0xcd, 0xcd, 0xb1, 0x01, 0x82, 0x73, 0xab, - 0x4d, 0x57, 0x42, 0x5a, 0x30, 0xa1, 0x0f, 0xbc, 0x30, 0x3b, 0x5d, 0x2d, 0x10, 0x25, 0x47, 0xe4, - 0xca, 0x9d, 0x90, 0x25, 0x8e, 0xfd, 0x73, 0xd3, 0xc4, 0x6c, 0x20, 0x8f, 0xc2, 0x30, 0xff, 0xcd, - 0x96, 0x80, 0xed, 0x80, 0x86, 0xd4, 0x6b, 0x52, 0xc3, 0x41, 0xfb, 0x1b, 0x2e, 0x01, 0xff, 0xa6, - 0x04, 0x95, 0x2c, 0xbe, 0x75, 0xea, 0xb5, 0xc8, 0x36, 0x94, 0x93, 0x15, 0x89, 0x59, 0x6d, 0xa9, - 0x68, 0xb5, 0xb9, 0x4d, 0x5a, 0xed, 0xb3, 0x53, 0xd4, 0x64, 0x13, 0xce, 0x6a, 0x30, 0x61, 0x5c, - 0xed, 0x3f, 0x89, 0x71, 0x95, 0x8d, 0x42, 0x8a, 0x54, 0xb7, 0x4d, 0xaf, 0xe2, 0xce, 0xb8, 0xec, - 0x1f, 0x3a, 0xae, 0xc7, 0x14, 0x5d, 0x2d, 0xd8, 0x12, 0xc4, 0x50, 0x21, 0x1b, 0x6e, 0x6d, 0x45, - 0xa8, 0x7c, 0x50, 0xa2, 0x50, 0xac, 0x8f, 0x70, 0x05, 0x17, 0x36, 0x3a, 0xfe, 0x3c, 0x55, 0x31, - 0xbb, 0x02, 0x43, 0x3b, 0xeb, 0xf5, 0xa5, 0x9a, 0x78, 0xec, 0xca, 0x43, 0x24, 0xb4, 0xc3, 0x46, - 0xd3, 0xb1, 0x79, 0x81, 0xf5, 0x21, 0x90, 0x7b, 0x34, 0x12, 0xe1, 0xd2, 0x15, 0xdd, 0x6b, 0x30, - 0x22, 0x40, 0x82, 0x12, 0x5d, 0xe3, 0xda, 0x02, 0x4b, 0x96, 0x59, 0xdb, 0xf2, 0x9c, 0xd0, 0xa6, - 0x4e, 0xa8, 0x6d, 0xcc, 0xef, 0xc1, 0x68, 0x20, 0x60, 0x62, 0x5f, 0x9e, 0x52, 0x89, 0x25, 0x10, - 0xcc, 0xed, 0xd9, 0x12, 0xc7, 0x56, 0x7f, 0x59, 0xeb, 0x18, 0xce, 0x64, 0x6b, 0x6d, 0x79, 0x89, - 0x49, 0x55, 0x08, 0x4b, 0x0e, 0xc7, 0x4d, 0xf4, 0x21, 0x8f, 0xa8, 0xfe, 0xd4, 0x15, 0x45, 0x83, - 0x1f, 0xb9, 0x08, 0xe2, 0xa3, 0xa1, 0x58, 0x77, 0x54, 0x70, 0x94, 0x0c, 0x6e, 0x79, 0x09, 0x12, - 0x36, 0x31, 0xec, 0xcb, 0x3d, 0x74, 0x97, 0x79, 0x19, 0x8d, 0x70, 0x60, 0x9e, 0x6f, 0xf3, 0xac, - 0x57, 0x22, 0xbb, 0x9b, 0xaf, 0x96, 0xc6, 0x25, 0x18, 0x53, 0x30, 0x75, 0xf7, 0xc5, 0x65, 0x65, - 0xe0, 0xef, 0xdd, 0xe1, 0xaf, 0x82, 0x9b, 0x8a, 0x41, 0x4c, 0xc7, 0xaa, 0xe0, 0xdf, 0xdd, 0xb7, - 0x5c, 0x45, 0x48, 0x83, 0xe8, 0x5b, 0xad, 0x22, 0x8e, 0x0b, 0x74, 0x9a, 0x2a, 0x0c, 0xfc, 0xbd, - 0x85, 0x93, 0x08, 0xea, 0x5b, 0xae, 0x82, 0x09, 0xea, 0xdb, 0xab, 0x82, 0xca, 0x00, 0x4a, 0x7c, - 0x92, 0xa6, 0x2a, 0x59, 0x49, 0x57, 0x22, 0x0d, 0xd7, 0x09, 0x8a, 0xc2, 0xf1, 0xa0, 0x70, 0x91, - 0x0b, 0xeb, 0x97, 0x50, 0x0d, 0x13, 0xd8, 0xb7, 0x5b, 0xcd, 0x3f, 0x28, 0xf1, 0x70, 0x4e, 0xf5, - 0x2d, 0x2d, 0xaf, 0xa2, 0xf7, 0xd8, 0xd7, 0xae, 0xe6, 0xb5, 0xaf, 0xfd, 0x81, 0xeb, 0xb5, 0xf4, - 0xab, 0x79, 0xa7, 0x1b, 0x1d, 0xa8, 0x80, 0xc3, 0x4f, 0x5c, 0xaf, 0x65, 0x27, 0xb1, 0xc9, 0xfb, - 0x30, 0xa9, 0x81, 0x94, 0xb6, 0xc6, 0xb3, 0x36, 0xe8, 0xe4, 0x6e, 0xcb, 0x36, 0x31, 0xad, 0xbf, - 0x29, 0xc1, 0x74, 0x46, 0xc6, 0x5f, 0x34, 0x66, 0xe0, 0x29, 0x48, 0x2d, 0x54, 0x22, 0x65, 0x11, - 0x46, 0x96, 0x30, 0x36, 0x49, 0x85, 0x88, 0xf1, 0xea, 0xb5, 0xec, 0xc4, 0xfd, 0x5a, 0x5e, 0xac, - 0xec, 0x8c, 0xc4, 0x3a, 0x3a, 0x09, 0x01, 0xe2, 0x96, 0x08, 0xb3, 0x71, 0x9d, 0xa9, 0xb4, 0x5a, - 0x6a, 0xe3, 0x97, 0x92, 0x5b, 0x59, 0xab, 0xc6, 0xfa, 0xad, 0x7e, 0x38, 0x97, 0xd1, 0xff, 0x3a, - 0x8d, 0xfe, 0x36, 0x44, 0x90, 0x48, 0x30, 0x3d, 0xf0, 0x4b, 0x4a, 0x30, 0x6d, 0xfd, 0x87, 0x7e, - 0x38, 0xb7, 0xdb, 0x09, 0xf1, 0x85, 0xd5, 0x9a, 0xf7, 0x94, 0x7a, 0x91, 0x1f, 0x3c, 0xc7, 0x57, - 0x21, 0xe4, 0x1d, 0x18, 0x5a, 0xa5, 0xed, 0xb6, 0x2f, 0xe6, 0xff, 0x25, 0xe9, 0x1d, 0x91, 0xc4, - 0x46, 0xa4, 0xd5, 0x3e, 0x9b, 0x63, 0x93, 0xf7, 0x61, 0x6c, 0x95, 0x3a, 0x41, 0xf4, 0x88, 0x3a, - 0xf2, 0xc8, 0x22, 0x73, 0x49, 0x68, 0x24, 0x02, 0x61, 0xb5, 0xcf, 0x8e, 0xb1, 0xc9, 0x02, 0x3b, - 0xcd, 0x7b, 0xfb, 0xea, 0x35, 0x79, 0x4e, 0x85, 0x0c, 0x67, 0xb5, 0xcf, 0x46, 0x5c, 0xb2, 0x01, - 0x93, 0xb5, 0x7d, 0xea, 0x45, 0x1b, 0x34, 0x72, 0x5a, 0x4e, 0xe4, 0x08, 0xd5, 0xf6, 0xb5, 0x3c, - 0x62, 0x03, 0x79, 0xb5, 0xcf, 0x36, 0xa9, 0xc9, 0x87, 0x30, 0x72, 0xcf, 0xf7, 0x5b, 0x8f, 0x9e, - 0x53, 0xa1, 0xae, 0x56, 0xf3, 0x18, 0x09, 0xb4, 0xd5, 0x3e, 0x5b, 0x52, 0x2c, 0x0e, 0xc1, 0xc0, - 0x46, 0xb8, 0x6f, 0x1d, 0x95, 0xa0, 0xb2, 0xec, 0x3f, 0xf3, 0x32, 0xa5, 0xfa, 0x3d, 0x53, 0xaa, - 0x92, 0x7d, 0x06, 0x7e, 0x42, 0xae, 0x6f, 0xc3, 0xe0, 0xb6, 0xeb, 0xed, 0x27, 0x54, 0xc1, 0x0c, - 0x3a, 0x86, 0x85, 0xe2, 0x71, 0xbd, 0x7d, 0xb2, 0x2e, 0x75, 0x70, 0x61, 0x6b, 0x1c, 0x30, 0x14, - 0xff, 0x0c, 0x6a, 0x1d, 0x3b, 0xd6, 0xb5, 0xf9, 0x6f, 0xd9, 0xc1, 0x37, 0x61, 0x2e, 0xa7, 0x5e, - 0xf1, 0x3c, 0x9c, 0xf5, 0x6d, 0x10, 0x15, 0x9b, 0x37, 0x60, 0x36, 0x73, 0xfc, 0x52, 0x88, 0xff, - 0x24, 0x6b, 0x22, 0xf2, 0x9e, 0x57, 0x60, 0x44, 0xe6, 0x2b, 0xe2, 0xb6, 0x1f, 0xf9, 0x13, 0x1f, - 0x48, 0xc9, 0x0f, 0x55, 0x06, 0xf6, 0x90, 0xdf, 0xe3, 0x9e, 0x16, 0x48, 0x89, 0x7f, 0x4e, 0x1f, - 0x7c, 0x83, 0x8f, 0x46, 0xf1, 0x62, 0x75, 0xae, 0xfa, 0x61, 0xe4, 0x29, 0xcf, 0x5b, 0x5b, 0xfd, - 0x26, 0xd7, 0xa1, 0x2c, 0x13, 0x2a, 0x88, 0xcc, 0x2d, 0x22, 0x1d, 0xb6, 0x9d, 0x82, 0x93, 0xf7, - 0x60, 0x2e, 0x09, 0x93, 0xbd, 0xe4, 0x2f, 0xdc, 0xf2, 0x8a, 0xad, 0xbf, 0xe8, 0xc7, 0x68, 0xd3, - 0x05, 0xf3, 0x9a, 0x49, 0x77, 0xab, 0x2e, 0xa4, 0xd5, 0xbf, 0x55, 0x27, 0x17, 0x61, 0x6c, 0xab, - 0x6e, 0x24, 0x7d, 0xb2, 0x63, 0x00, 0x6b, 0x36, 0xeb, 0x42, 0x2d, 0x68, 0x1e, 0xb8, 0x11, 0x6d, - 0x46, 0xdd, 0x40, 0xac, 0xc2, 0x76, 0x0a, 0x4e, 0x2c, 0x98, 0xb8, 0xd7, 0x76, 0x1f, 0x35, 0x25, - 0x33, 0x2e, 0x02, 0x03, 0x46, 0x5e, 0x87, 0xa9, 0x35, 0x2f, 0x8c, 0x9c, 0x76, 0x7b, 0x83, 0x46, - 0x07, 0x7e, 0x4b, 0x64, 0xa4, 0xb4, 0x13, 0x50, 0x56, 0xef, 0x92, 0xef, 0x45, 0x8e, 0xeb, 0xd1, - 0xc0, 0xee, 0x7a, 0x91, 0x7b, 0x48, 0x45, 0xdf, 0x53, 0x70, 0xf2, 0x36, 0xcc, 0x2a, 0xd8, 0x56, - 0xd0, 0x3c, 0xa0, 0x61, 0x14, 0x60, 0x2a, 0x38, 0x0c, 0xf8, 0x63, 0x67, 0x17, 0x62, 0x0d, 0x6d, - 0xbf, 0xdb, 0x5a, 0xf1, 0x9e, 0xba, 0x81, 0xef, 0x61, 0x76, 0x88, 0x51, 0x51, 0x43, 0x02, 0x6e, - 0xfd, 0xe1, 0x68, 0xe6, 0x67, 0xfb, 0x4d, 0xe6, 0xe0, 0x17, 0x30, 0xb1, 0xe4, 0x74, 0x9c, 0x47, - 0x6e, 0xdb, 0x8d, 0x5c, 0x95, 0x33, 0xeb, 0x9d, 0x1e, 0xdf, 0xbc, 0x4c, 0xb1, 0x41, 0x5b, 0x3a, - 0xb1, 0x6d, 0xb0, 0x9a, 0xff, 0xeb, 0x61, 0x98, 0xcd, 0xc4, 0x23, 0xd7, 0x44, 0x72, 0x2d, 0xb5, - 0xae, 0x8a, 0x74, 0x53, 0x76, 0x12, 0xcc, 0xc6, 0x12, 0x41, 0x4b, 0x6d, 0xea, 0x78, 0x5d, 0x91, - 0x6c, 0xca, 0x36, 0x60, 0x6c, 0x2c, 0x99, 0xde, 0xa0, 0x31, 0x43, 0xc7, 0x69, 0x3b, 0x01, 0x25, - 0x57, 0x60, 0x9c, 0x41, 0x24, 0xab, 0x41, 0xfe, 0xc4, 0x4f, 0x03, 0x31, 0x4e, 0x9b, 0x7e, 0x8b, - 0x6a, 0x9c, 0x86, 0x38, 0x27, 0x13, 0xca, 0x38, 0x31, 0x88, 0xe4, 0x34, 0xcc, 0x39, 0x69, 0x20, - 0xf2, 0x2a, 0x4c, 0xd6, 0x3a, 0x1d, 0x8d, 0x11, 0x66, 0x99, 0xb2, 0x4d, 0x20, 0xb9, 0x0c, 0x50, - 0xeb, 0x74, 0x24, 0x1b, 0xcc, 0x20, 0x65, 0x6b, 0x10, 0x72, 0x23, 0x0e, 0x57, 0xa6, 0xb1, 0xc2, - 0xeb, 0x04, 0x3b, 0xa3, 0x84, 0xc9, 0x55, 0xc5, 0x76, 0x12, 0x4c, 0x81, 0xcb, 0x35, 0x01, 0x26, - 0x1f, 0xc1, 0xf9, 0x84, 0xdf, 0x85, 0x56, 0x01, 0x9a, 0xfa, 0xed, 0x7c, 0x04, 0xf2, 0x2e, 0x9c, - 0x4b, 0x14, 0xca, 0xea, 0xd0, 0xaa, 0x6f, 0xe7, 0x94, 0x92, 0x0f, 0xa0, 0x92, 0x78, 0xb6, 0x1d, - 0x57, 0x8a, 0x16, 0x7c, 0x3b, 0xb7, 0x9c, 0x7d, 0x5d, 0x89, 0xf7, 0x5f, 0xa2, 0x4a, 0xbc, 0xac, - 0xb4, 0xb3, 0x0b, 0xc9, 0x2a, 0x54, 0x33, 0x7d, 0x59, 0xb4, 0x8a, 0x31, 0x33, 0x96, 0xdd, 0x0b, - 0x8d, 0x2c, 0xc2, 0xc5, 0x4c, 0x14, 0xd9, 0x0c, 0xcc, 0x97, 0x65, 0x17, 0xe2, 0x90, 0x05, 0x98, - 0x89, 0x7d, 0x7a, 0xb4, 0x26, 0x60, 0xaa, 0x2c, 0x3b, 0xb3, 0x8c, 0xbc, 0x65, 0x3e, 0xce, 0xe7, - 0x95, 0x61, 0xa6, 0x2c, 0x3b, 0x5d, 0x60, 0x1d, 0x97, 0xe0, 0x62, 0xe6, 0x46, 0x29, 0xf5, 0xf9, - 0xf9, 0xa4, 0xe2, 0xa8, 0xad, 0x05, 0xd7, 0x61, 0x10, 0x15, 0x7c, 0x6e, 0x2b, 0x96, 0xbe, 0xa6, - 0x48, 0xcf, 0x59, 0xb1, 0x52, 0x1b, 0x71, 0xc8, 0x3d, 0x75, 0x37, 0x38, 0x80, 0x96, 0x8c, 0x9b, - 0x49, 0x05, 0x2a, 0xa3, 0x72, 0xfd, 0x8e, 0x50, 0xde, 0x06, 0x7e, 0x93, 0x6b, 0x98, 0xbf, 0x28, - 0x41, 0xb5, 0x87, 0x7e, 0xa0, 0xfa, 0x54, 0x3a, 0x41, 0x9f, 0xee, 0xab, 0x3e, 0xf1, 0xb7, 0xb1, - 0x0b, 0x27, 0xd3, 0x41, 0x5e, 0x76, 0xb7, 0xba, 0x40, 0xd2, 0x6a, 0x28, 0xf9, 0x2e, 0x8c, 0xd5, - 0xeb, 0xab, 0x86, 0x43, 0x5f, 0xea, 0x72, 0x28, 0xc6, 0x20, 0xb7, 0x4e, 0xe4, 0xc1, 0xa7, 0xf9, - 0xef, 0x59, 0xcb, 0x50, 0xc9, 0xd3, 0x20, 0x71, 0x61, 0xe1, 0xb1, 0xb5, 0xb4, 0x8b, 0x25, 0xbe, - 0xb0, 0x98, 0x60, 0xeb, 0x5d, 0x38, 0xa7, 0xa8, 0x79, 0xda, 0x0c, 0xed, 0xe1, 0xbf, 0x38, 0x76, - 0xaa, 0x00, 0x03, 0x31, 0xc0, 0xfa, 0xf3, 0xc1, 0x14, 0x61, 0xbd, 0x7b, 0x78, 0xe8, 0x04, 0xcf, - 0x49, 0xcd, 0x24, 0x1c, 0xe8, 0xa9, 0xe9, 0x2f, 0x0e, 0xfe, 0xec, 0xa8, 0xda, 0xa7, 0x71, 0x67, - 0xcb, 0x31, 0x6e, 0xec, 0x5e, 0x93, 0xf2, 0x2b, 0xa9, 0x7e, 0x1e, 0xdc, 0xc8, 0x00, 0x92, 0x3d, - 0x98, 0x14, 0x5b, 0x26, 0xfe, 0x96, 0x53, 0xfb, 0x56, 0x72, 0x6a, 0x1b, 0xcd, 0xbb, 0x61, 0x90, - 0xf0, 0x49, 0x60, 0xb2, 0x21, 0x5f, 0xc0, 0x94, 0x54, 0x90, 0x04, 0x63, 0xee, 0x44, 0x74, 0xbb, - 0x98, 0xb1, 0x49, 0xc3, 0x39, 0x27, 0x18, 0xb1, 0x26, 0xcb, 0x35, 0x86, 0x73, 0x1e, 0x3a, 0x49, - 0x93, 0x0d, 0x12, 0xd1, 0x64, 0x03, 0x36, 0xff, 0x29, 0x90, 0x74, 0xbf, 0x7a, 0xcd, 0xe2, 0x49, - 0x6d, 0x16, 0xcf, 0xd7, 0x60, 0x3a, 0xa3, 0x03, 0xa7, 0x62, 0xf1, 0x29, 0x90, 0x74, 0x4b, 0x4f, - 0xc3, 0xc1, 0xba, 0x06, 0xaf, 0x2b, 0x11, 0xa8, 0xd9, 0x60, 0xf0, 0x94, 0x86, 0xe7, 0xdf, 0xec, - 0x87, 0x6a, 0x0f, 0x54, 0xf2, 0x07, 0xa5, 0xa4, 0xb4, 0xf9, 0x6c, 0x7c, 0x3f, 0x29, 0xed, 0x6c, - 0xfa, 0x0c, 0xb1, 0x2f, 0x7e, 0xf0, 0xd3, 0xbf, 0x7a, 0x61, 0x85, 0x3f, 0x3d, 0x64, 0xa7, 0x97, - 0xd6, 0xa0, 0x2e, 0x2d, 0x1b, 0x66, 0x8c, 0xa3, 0xd2, 0x49, 0xf6, 0x8c, 0xcb, 0x00, 0x22, 0xc9, - 0xe6, 0xba, 0xbf, 0x2f, 0xd4, 0x33, 0x0d, 0x62, 0xdd, 0x85, 0xd9, 0x04, 0x4f, 0x61, 0x0c, 0xff, - 0x2e, 0xa8, 0x07, 0xde, 0xc8, 0x74, 0x60, 0xf1, 0xec, 0x2f, 0x8e, 0xaa, 0x93, 0x4c, 0x93, 0xbe, - 0x11, 0xc7, 0x8f, 0x97, 0x7f, 0x59, 0x1b, 0xba, 0x39, 0xbf, 0xd6, 0xd6, 0x03, 0xdf, 0x90, 0xdb, - 0x30, 0xcc, 0x21, 0x89, 0x28, 0xcd, 0x3a, 0xb6, 0x58, 0x13, 0x04, 0xa2, 0x35, 0x8b, 0xcf, 0x51, - 0xf1, 0x47, 0x2d, 0x0e, 0x9f, 0x60, 0xed, 0xf2, 0xbc, 0x21, 0x31, 0x58, 0x45, 0x82, 0x1e, 0xac, - 0xc5, 0x61, 0x1e, 0xa4, 0xef, 0x85, 0xc4, 0xf3, 0xfc, 0x67, 0x6d, 0xda, 0xe2, 0x39, 0xd9, 0x16, - 0x27, 0x84, 0xef, 0xc5, 0xa0, 0xc3, 0x18, 0x20, 0x99, 0xf5, 0x09, 0xcc, 0xb2, 0x0d, 0x3a, 0x48, - 0xd6, 0x47, 0x5e, 0x87, 0x11, 0x84, 0x99, 0x0e, 0xed, 0x0e, 0x03, 0xa1, 0x43, 0xbb, 0x28, 0xb4, - 0xd6, 0xe1, 0x3c, 0x37, 0x06, 0xea, 0x5d, 0x8a, 0x4d, 0xef, 0x43, 0xf8, 0x3b, 0xf1, 0x98, 0x31, - 0xa3, 0xf7, 0x1c, 0xcf, 0xfa, 0x18, 0x5f, 0xcb, 0x88, 0x49, 0xea, 0xfa, 0x5e, 0x6c, 0xf9, 0x3b, - 0xd9, 0xf3, 0xda, 0xff, 0x1b, 0x2e, 0xd6, 0x3a, 0x1d, 0xea, 0xb5, 0x62, 0xc2, 0x9d, 0xc0, 0x39, - 0x61, 0xf0, 0x03, 0x52, 0x83, 0x21, 0xc4, 0x56, 0xf7, 0x96, 0xa2, 0xb9, 0x19, 0xcd, 0x41, 0x3c, - 0x11, 0xb6, 0x13, 0x2b, 0xe0, 0x94, 0x56, 0x0b, 0xe6, 0xea, 0xdd, 0x47, 0x87, 0x6e, 0x84, 0x6e, - 0xf0, 0x18, 0x40, 0x44, 0xd6, 0xbd, 0x26, 0x53, 0x3d, 0x71, 0x61, 0x5c, 0x8b, 0x5f, 0x55, 0xa0, - 0x27, 0xbd, 0x08, 0x2a, 0xf2, 0xf4, 0xf6, 0x8d, 0x98, 0x14, 0xad, 0x1e, 0xbc, 0x16, 0x2c, 0x16, - 0xe9, 0xa0, 0xac, 0x69, 0x38, 0xab, 0xdf, 0x01, 0xf1, 0x19, 0x32, 0x0b, 0xd3, 0xe6, 0xdd, 0x0e, - 0x07, 0x7f, 0x05, 0x33, 0xdc, 0xf6, 0xcc, 0xc3, 0x6e, 0x2f, 0xc4, 0x11, 0xa6, 0xfb, 0xf7, 0x16, - 0x12, 0xfe, 0xf7, 0xe8, 0x96, 0xab, 0x12, 0x2a, 0xec, 0x2d, 0xf0, 0x17, 0x8f, 0x4f, 0x17, 0x8c, - 0x1b, 0xc4, 0xfe, 0xbd, 0x85, 0xc5, 0x11, 0x11, 0xbe, 0x94, 0x71, 0xe7, 0xc3, 0xff, 0xad, 0x70, - 0x5f, 0xc0, 0x47, 0xf6, 0xab, 0xd4, 0xc1, 0x07, 0x31, 0xd9, 0x4f, 0x95, 0xa7, 0xa0, 0xdf, 0x6d, - 0xc9, 0xd3, 0xba, 0xdb, 0xb2, 0xfe, 0xa4, 0x04, 0xd7, 0xb8, 0x0e, 0x94, 0x4d, 0x87, 0x17, 0x3d, - 0x39, 0xc4, 0xe4, 0x3d, 0xe0, 0x79, 0xd3, 0x85, 0xa2, 0x69, 0x89, 0x96, 0x17, 0x71, 0xe2, 0x04, - 0xa4, 0x06, 0x13, 0xfa, 0x93, 0x92, 0x93, 0x85, 0x87, 0xb3, 0xc7, 0x0f, 0x1f, 0x3b, 0xea, 0x99, - 0xc9, 0x13, 0xb8, 0xb0, 0xf2, 0x35, 0x9b, 0x10, 0x62, 0x77, 0x12, 0x0a, 0x7b, 0xfc, 0x14, 0xf6, - 0xcc, 0x8e, 0x98, 0x31, 0xe6, 0x69, 0x3a, 0x09, 0x66, 0x47, 0x53, 0xb9, 0xc1, 0x29, 0xad, 0x79, - 0xcc, 0x36, 0x60, 0xd6, 0x9f, 0x97, 0xe0, 0x62, 0x76, 0x6d, 0x62, 0x61, 0x59, 0x83, 0xb3, 0x4b, - 0x8e, 0xe7, 0x7b, 0x6e, 0xd3, 0x69, 0xd7, 0x9b, 0x07, 0xb4, 0xd5, 0x55, 0x41, 0x4e, 0xd5, 0x2a, - 0xb3, 0x4f, 0x3d, 0x49, 0x2e, 0x51, 0xec, 0x34, 0x15, 0x3b, 0x94, 0xe1, 0xab, 0x04, 0xbe, 0xf6, - 0xb6, 0x69, 0xa0, 0xf8, 0xf1, 0x96, 0xe5, 0x94, 0x92, 0x5b, 0xd2, 0xc8, 0xde, 0xda, 0xf5, 0xdc, - 0x48, 0x11, 0x71, 0xeb, 0x4a, 0x56, 0x91, 0xf5, 0xef, 0x4a, 0x70, 0x1e, 0x33, 0x0b, 0x19, 0xb9, - 0x0a, 0xe3, 0x58, 0xbf, 0x32, 0x5c, 0x6d, 0xc9, 0x78, 0x65, 0x61, 0x60, 0x9b, 0x71, 0x6b, 0xc9, - 0x5b, 0x30, 0x58, 0x97, 0x4e, 0x52, 0x53, 0x89, 0x44, 0xb0, 0x32, 0xe9, 0xbe, 0x1f, 0x44, 0x36, - 0x62, 0xb1, 0x3d, 0x67, 0x99, 0x86, 0x4d, 0xea, 0x61, 0xc6, 0x5e, 0x7e, 0xd8, 0xd7, 0x20, 0x71, - 0xa8, 0xa2, 0xc1, 0xbc, 0x50, 0x45, 0x43, 0x66, 0xa8, 0x22, 0xeb, 0x29, 0xcf, 0x2b, 0x94, 0xec, - 0x90, 0x18, 0xa4, 0x8f, 0x53, 0x09, 0x7e, 0xf9, 0x3e, 0x70, 0x2e, 0xab, 0x67, 0x7b, 0x77, 0x52, - 0xb9, 0x7b, 0xf3, 0x63, 0xeb, 0x6e, 0xc3, 0xab, 0x06, 0x6e, 0xad, 0xdd, 0xf6, 0x9f, 0xd1, 0xd6, - 0x76, 0xe0, 0x1f, 0xfa, 0x91, 0x91, 0xd5, 0x45, 0x64, 0xb8, 0x8e, 0xaf, 0x51, 0xc4, 0xac, 0x4c, - 0x80, 0xad, 0xff, 0x0b, 0x5e, 0xeb, 0xc1, 0x51, 0x74, 0xaa, 0x0e, 0x67, 0x9d, 0x44, 0x99, 0xf4, - 0x76, 0x79, 0x2d, 0xab, 0x5f, 0x49, 0x46, 0xa1, 0x9d, 0xa6, 0xbf, 0xbe, 0x63, 0x24, 0xc5, 0x25, - 0x15, 0x98, 0xd9, 0xb6, 0xb7, 0x96, 0x77, 0x97, 0x76, 0x1a, 0x3b, 0x5f, 0x6c, 0xaf, 0x34, 0x76, - 0x37, 0x1f, 0x6c, 0x6e, 0x3d, 0xdc, 0xe4, 0xc1, 0xa9, 0x8d, 0x92, 0x9d, 0x95, 0xda, 0x46, 0xb9, - 0x44, 0x66, 0xa0, 0x6c, 0x80, 0x57, 0x76, 0x17, 0xcb, 0xfd, 0xd7, 0xbf, 0x32, 0x92, 0xbd, 0x92, - 0x8b, 0x50, 0xa9, 0xef, 0x6e, 0x6f, 0x6f, 0xd9, 0x8a, 0xab, 0x1e, 0x1a, 0x7b, 0x16, 0xce, 0x1a, - 0xa5, 0x77, 0xed, 0x95, 0x95, 0x72, 0x89, 0x35, 0xc5, 0x00, 0x6f, 0xdb, 0x2b, 0x1b, 0x6b, 0xbb, - 0x1b, 0xe5, 0xfe, 0xeb, 0x0d, 0xfd, 0x69, 0x17, 0xb9, 0x00, 0x73, 0xcb, 0x2b, 0x7b, 0x6b, 0x4b, - 0x2b, 0x59, 0xbc, 0x67, 0xa0, 0xac, 0x17, 0xee, 0x6c, 0xed, 0x6c, 0x73, 0xd6, 0x3a, 0xf4, 0xe1, - 0xca, 0x62, 0x6d, 0x77, 0x67, 0x75, 0xb3, 0x3c, 0x60, 0x0d, 0x8e, 0xf6, 0x97, 0xfb, 0xaf, 0xff, - 0xc8, 0x78, 0xf7, 0xc5, 0x9a, 0x2f, 0xd0, 0x77, 0xeb, 0xb5, 0x7b, 0xf9, 0x55, 0xf0, 0xd2, 0x8d, - 0xbb, 0xb5, 0x72, 0x89, 0x5c, 0x82, 0xf3, 0x06, 0x74, 0xbb, 0x56, 0xaf, 0x3f, 0xdc, 0xb2, 0x97, - 0xd7, 0x57, 0xea, 0xf5, 0x72, 0xff, 0xf5, 0x3d, 0x23, 0x3c, 0x1b, 0xab, 0x61, 0xe3, 0x6e, 0xad, - 0x61, 0xaf, 0x7c, 0xb6, 0xbb, 0x66, 0xaf, 0x2c, 0xa7, 0x6b, 0x30, 0x4a, 0xbf, 0x58, 0xa9, 0x97, - 0x4b, 0x64, 0x1a, 0xce, 0x18, 0xd0, 0xcd, 0xad, 0x72, 0xff, 0xf5, 0xd7, 0x45, 0x04, 0x2f, 0x32, - 0x05, 0xb0, 0xbc, 0x52, 0x5f, 0x5a, 0xd9, 0x5c, 0x5e, 0xdb, 0xbc, 0x57, 0xee, 0x23, 0x93, 0x30, - 0x56, 0x53, 0x3f, 0x4b, 0xd7, 0x3f, 0x80, 0x33, 0x89, 0x13, 0x35, 0xc3, 0x50, 0x87, 0xd1, 0x72, - 0x1f, 0x8a, 0x5f, 0xfe, 0x44, 0xb3, 0x26, 0x3f, 0x1c, 0x97, 0x4b, 0xd7, 0x17, 0x65, 0xf2, 0x51, - 0xed, 0x3b, 0x27, 0xe3, 0x30, 0xb2, 0xbc, 0x72, 0xb7, 0xb6, 0xbb, 0xbe, 0x53, 0xee, 0x63, 0x3f, - 0x96, 0xec, 0x95, 0xda, 0xce, 0xca, 0x72, 0xb9, 0x44, 0xc6, 0x60, 0xa8, 0xbe, 0x53, 0xdb, 0x59, - 0x29, 0xf7, 0x93, 0x51, 0x18, 0xdc, 0xad, 0xaf, 0xd8, 0xe5, 0x81, 0x85, 0x3f, 0xfa, 0x83, 0x12, - 0xb7, 0xed, 0xc9, 0x37, 0x44, 0x5f, 0x69, 0x87, 0x49, 0xb1, 0xe4, 0x89, 0x4c, 0x8b, 0xb9, 0x27, - 0x47, 0xd4, 0x02, 0xe6, 0x0b, 0x2e, 0x3b, 0x10, 0xe1, 0x5a, 0xe9, 0x56, 0x89, 0xd8, 0xe8, 0x1c, - 0x92, 0x38, 0x5b, 0x29, 0xce, 0xd9, 0xc7, 0xdf, 0xf9, 0x4b, 0x85, 0x47, 0x32, 0xf2, 0x6b, 0x60, - 0xe9, 0x3c, 0x73, 0x4e, 0x20, 0xdf, 0x3d, 0xd9, 0x49, 0x43, 0xd6, 0xf9, 0xfa, 0xc9, 0xd0, 0xc9, - 0x7d, 0x98, 0x64, 0xba, 0xb9, 0x42, 0x23, 0x17, 0x92, 0x84, 0xda, 0x71, 0x60, 0xfe, 0x62, 0x76, - 0xa1, 0x4a, 0xc5, 0x32, 0x81, 0x1d, 0xe1, 0x07, 0xeb, 0x90, 0xc8, 0x28, 0x0f, 0x12, 0xc2, 0x57, - 0xfc, 0xf9, 0xb3, 0x09, 0xf0, 0xde, 0xed, 0x5b, 0x25, 0x52, 0xc7, 0x10, 0x6b, 0x86, 0x92, 0x4f, - 0xe4, 0xa3, 0xb6, 0xb4, 0xf6, 0xcf, 0x5b, 0x53, 0x55, 0xa9, 0x0b, 0x73, 0x4e, 0x07, 0x9b, 0x40, - 0xd2, 0xba, 0x33, 0xb9, 0x12, 0xcf, 0x83, 0x6c, 0xb5, 0x7a, 0xfe, 0x5c, 0xca, 0xe7, 0x6f, 0x85, - 0x69, 0x4f, 0x64, 0x05, 0xa6, 0xc4, 0x13, 0x6e, 0xa1, 0xcd, 0x93, 0xa2, 0xf3, 0x40, 0x2e, 0x9b, - 0x7b, 0x28, 0x27, 0x75, 0x22, 0x20, 0xf3, 0x71, 0x3f, 0x92, 0xc7, 0x84, 0xf9, 0x0b, 0x99, 0x65, - 0xa2, 0x7f, 0x77, 0x61, 0xca, 0x3c, 0x5c, 0x10, 0x39, 0x40, 0x99, 0x67, 0x8e, 0xdc, 0x06, 0x35, - 0x60, 0x6e, 0xc3, 0x71, 0xf1, 0x8a, 0x42, 0x78, 0x96, 0x49, 0xbf, 0x30, 0x52, 0x2d, 0x70, 0x14, - 0xab, 0x53, 0xaf, 0xa5, 0x06, 0x21, 0x2f, 0xac, 0x3a, 0x7e, 0x36, 0x75, 0xa9, 0x23, 0x9b, 0x7e, - 0x75, 0xc4, 0x32, 0xd3, 0xd1, 0x66, 0xb9, 0x4a, 0xce, 0xe7, 0x79, 0xf7, 0x92, 0x0d, 0x54, 0xd2, - 0x13, 0x1c, 0xb5, 0x39, 0x71, 0x6a, 0x76, 0x15, 0x0c, 0x24, 0xa0, 0xa5, 0xf1, 0x16, 0x85, 0x21, - 0xc9, 0x11, 0x5c, 0x2e, 0xb3, 0x5b, 0x25, 0xf2, 0x15, 0x7e, 0xd5, 0x99, 0xec, 0x1e, 0xba, 0xd1, - 0x81, 0xd0, 0x7e, 0x2e, 0x64, 0x32, 0x10, 0x1f, 0x4a, 0x01, 0x77, 0x1b, 0x66, 0xb2, 0x1c, 0x8a, - 0x95, 0x40, 0x0b, 0xbc, 0x8d, 0x73, 0x67, 0x81, 0xcd, 0x8e, 0x1a, 0xad, 0xfc, 0x41, 0x2a, 0xf0, - 0x67, 0xcd, 0xe5, 0xf9, 0x11, 0x4c, 0xb1, 0x59, 0xf2, 0x80, 0xd2, 0x4e, 0xad, 0xed, 0x3e, 0xa5, - 0x21, 0x91, 0xf1, 0x71, 0x15, 0x28, 0x8f, 0xf6, 0x5a, 0x89, 0x7c, 0x07, 0xc6, 0x1f, 0x3a, 0x51, - 0xf3, 0x40, 0xc4, 0x89, 0x94, 0x61, 0x24, 0x11, 0x36, 0x2f, 0x7f, 0x61, 0xe1, 0xad, 0x12, 0xf9, - 0x3e, 0x8c, 0xdc, 0xa3, 0x11, 0x3e, 0x2a, 0xbe, 0xaa, 0x7c, 0xeb, 0xb8, 0x6d, 0x72, 0xcd, 0x53, - 0x2f, 0x67, 0x64, 0x83, 0x93, 0x06, 0x54, 0x72, 0x13, 0x80, 0x2f, 0x08, 0xc8, 0x21, 0x59, 0x3c, - 0x9f, 0x6a, 0x36, 0xb9, 0xc7, 0x94, 0x87, 0x36, 0x8d, 0xe8, 0x49, 0xab, 0xcc, 0x93, 0xd1, 0x3a, - 0x4c, 0xa9, 0xec, 0x35, 0x9b, 0x18, 0xce, 0xc3, 0x4a, 0x30, 0x0b, 0x4f, 0xc1, 0xed, 0x03, 0xf6, - 0x55, 0xf0, 0xe4, 0xa9, 0x18, 0xf7, 0x01, 0x57, 0xd2, 0x39, 0x3d, 0x78, 0x84, 0xbe, 0x84, 0x4a, - 0x21, 0x72, 0x34, 0x8d, 0x76, 0xd5, 0x0f, 0x23, 0x93, 0x56, 0x41, 0xb2, 0x69, 0x7f, 0x15, 0xe6, - 0xf5, 0x7a, 0xcd, 0x40, 0xc5, 0xf1, 0x9a, 0x9b, 0x17, 0xff, 0x78, 0xfe, 0x6a, 0x01, 0x86, 0x38, - 0xbf, 0x0d, 0xfc, 0x76, 0x7f, 0x09, 0x97, 0x93, 0x65, 0x98, 0x96, 0x75, 0x6d, 0x75, 0xa8, 0x57, - 0xaf, 0xaf, 0x62, 0xa6, 0x12, 0xe9, 0xc9, 0xa1, 0xc1, 0x24, 0x77, 0x92, 0x2e, 0x62, 0x5b, 0x9f, - 0x11, 0xdf, 0x81, 0x14, 0x45, 0x7d, 0x88, 0xb7, 0xbe, 0xcc, 0x08, 0xba, 0x0f, 0xb8, 0x51, 0xc9, - 0x50, 0xfe, 0xf7, 0x16, 0x48, 0xc1, 0x01, 0x68, 0x3e, 0xe7, 0x08, 0x71, 0xab, 0x44, 0xbe, 0x00, - 0x92, 0x3e, 0x92, 0x28, 0x11, 0xe6, 0x1e, 0xbf, 0x94, 0x08, 0x0b, 0xce, 0x33, 0x2b, 0x30, 0xad, - 0xa2, 0xbb, 0xc4, 0xe5, 0x24, 0xa7, 0x2d, 0x05, 0x3b, 0xd8, 0x6c, 0x06, 0x9b, 0xbd, 0x85, 0x02, - 0x46, 0x99, 0x70, 0xf2, 0x09, 0x4c, 0x8b, 0xb9, 0x6f, 0xb4, 0xa7, 0xac, 0x96, 0x31, 0x71, 0xb8, - 0xc9, 0x6d, 0xc9, 0x7d, 0x98, 0xad, 0x27, 0x04, 0xcf, 0xfd, 0xd8, 0xcf, 0x9b, 0x2c, 0x10, 0x58, - 0xa7, 0x11, 0x97, 0x7c, 0x36, 0xaf, 0x07, 0x40, 0xb8, 0x6d, 0x49, 0xb2, 0x7b, 0xea, 0xd2, 0x67, - 0xe4, 0x52, 0xa2, 0xe9, 0x0c, 0x88, 0x68, 0xb8, 0x0e, 0xe6, 0xf6, 0x6c, 0x87, 0x67, 0x10, 0x46, - 0xa8, 0x71, 0x03, 0x7e, 0xc5, 0x20, 0x30, 0x2e, 0xd1, 0xc5, 0x38, 0x9e, 0xcf, 0xc5, 0x20, 0xbf, - 0x81, 0xd1, 0x59, 0x8b, 0x4f, 0x67, 0xe4, 0x3b, 0x59, 0x87, 0xe8, 0x9c, 0xf3, 0xe5, 0xfc, 0x5b, - 0x27, 0x43, 0x56, 0xe7, 0xe1, 0xc9, 0x7b, 0x34, 0xda, 0x6e, 0x77, 0xf7, 0x5d, 0xcc, 0x6c, 0x49, - 0x94, 0xed, 0x49, 0x81, 0xc4, 0xf4, 0x96, 0x41, 0xd1, 0xe2, 0x82, 0x3a, 0xfd, 0x31, 0x59, 0x83, - 0x32, 0xdf, 0x46, 0x34, 0x16, 0x97, 0x52, 0x2c, 0x04, 0x8a, 0x13, 0x38, 0x87, 0x61, 0xee, 0x68, - 0xdd, 0xe4, 0x2e, 0x47, 0x44, 0x7e, 0xda, 0xba, 0x9e, 0x3a, 0x6d, 0xc0, 0x54, 0xc4, 0x7a, 0x36, - 0x22, 0x36, 0x0d, 0x69, 0x24, 0xc3, 0xc0, 0xf0, 0xbc, 0xa6, 0xaf, 0xc4, 0x3a, 0x43, 0xba, 0x34, - 0x5e, 0x41, 0x12, 0x21, 0xcb, 0xf6, 0xee, 0x10, 0x95, 0xeb, 0x35, 0x83, 0xe9, 0xeb, 0x86, 0x6a, - 0x73, 0x3a, 0xbe, 0x6f, 0xe3, 0x56, 0x86, 0xa1, 0x6f, 0x66, 0xe3, 0xb6, 0xb1, 0xdf, 0x92, 0x6a, - 0x52, 0xa3, 0xda, 0x5b, 0xc0, 0x95, 0x91, 0xed, 0xb5, 0x4c, 0x13, 0xee, 0x06, 0x01, 0xf5, 0x38, - 0x71, 0x9e, 0xda, 0x92, 0x45, 0xfd, 0x31, 0xae, 0x60, 0x1a, 0x35, 0x7f, 0x6e, 0xd7, 0x8b, 0x05, - 0xcf, 0xc3, 0x73, 0xab, 0x44, 0xde, 0x83, 0x51, 0xd1, 0x46, 0x46, 0x64, 0x34, 0x3a, 0x2c, 0x68, - 0x35, 0x52, 0x02, 0x17, 0x12, 0xb6, 0xd9, 0xc4, 0xc9, 0x1b, 0x7d, 0xde, 0xe6, 0xf7, 0xd8, 0x9e, - 0xdd, 0x7a, 0x11, 0xca, 0x25, 0xb9, 0x79, 0x23, 0x65, 0x45, 0x45, 0x62, 0x91, 0xa0, 0x1e, 0xbb, - 0x2c, 0x67, 0xc2, 0xd4, 0x6f, 0x8c, 0x39, 0xa8, 0x42, 0x87, 0x29, 0xf5, 0xdb, 0x00, 0xf7, 0xda, - 0xb2, 0xd7, 0xa0, 0x5c, 0x6b, 0xe2, 0x86, 0x52, 0xa7, 0x87, 0x4e, 0xe7, 0xc0, 0x0f, 0xa8, 0x3a, - 0xfb, 0x24, 0x0b, 0x24, 0xaf, 0x59, 0xa5, 0xa0, 0x88, 0x82, 0x75, 0xea, 0x60, 0x60, 0xe6, 0x39, - 0xa5, 0xa1, 0x24, 0x8a, 0xb2, 0x29, 0x0a, 0xce, 0x3a, 0x33, 0x4b, 0xec, 0x74, 0xd6, 0xfe, 0x66, - 0x6c, 0x3e, 0xc0, 0x05, 0x43, 0x21, 0x87, 0x6a, 0x87, 0x50, 0x20, 0x75, 0x2a, 0x94, 0x2f, 0x6f, - 0x14, 0x6a, 0x4d, 0x5e, 0x3d, 0xc7, 0x62, 0xc9, 0xa3, 0xce, 0xab, 0xfe, 0x7b, 0x30, 0xb5, 0xc2, - 0x16, 0xf4, 0x6e, 0xcb, 0xe5, 0xc1, 0xe8, 0x89, 0x19, 0x5d, 0x3c, 0x97, 0x70, 0x55, 0xa6, 0xbe, - 0x42, 0x52, 0x61, 0x41, 0x90, 0x7b, 0x8a, 0x06, 0x93, 0xe3, 0x31, 0x23, 0xd9, 0x8a, 0x7c, 0x00, - 0x78, 0xc2, 0x17, 0x26, 0x83, 0x39, 0xae, 0x58, 0xd6, 0x3a, 0x9d, 0xb6, 0xb4, 0x6c, 0xf3, 0x9b, - 0xfa, 0xd7, 0x8c, 0x93, 0x68, 0xaa, 0x5c, 0xf2, 0x4e, 0xeb, 0x9e, 0x9f, 0x6b, 0xa9, 0x68, 0x73, - 0x78, 0xe6, 0x94, 0xf7, 0x9a, 0x8b, 0x2a, 0x7c, 0x74, 0xad, 0xdd, 0x4e, 0x11, 0x87, 0xe4, 0x4d, - 0x93, 0x7b, 0x16, 0x4e, 0xaf, 0x1a, 0xf0, 0xa4, 0x6f, 0x66, 0xf7, 0x27, 0x97, 0xd5, 0x82, 0x91, - 0x4c, 0xfb, 0x9f, 0x3c, 0xe9, 0x27, 0xcb, 0xc5, 0xda, 0x7e, 0x1f, 0xa7, 0x59, 0x9c, 0xaf, 0x96, - 0xe8, 0xe7, 0xe6, 0x64, 0xba, 0x5e, 0xa5, 0xcb, 0x65, 0xa7, 0xf8, 0xdf, 0x86, 0x33, 0x89, 0xe4, - 0xf9, 0xca, 0xc0, 0x93, 0x9d, 0xbe, 0x7f, 0xfe, 0x72, 0x5e, 0xb1, 0x32, 0xb8, 0x96, 0x93, 0x39, - 0xc1, 0x55, 0x97, 0x73, 0xb2, 0xbd, 0xab, 0x2e, 0xe7, 0x26, 0x13, 0xbf, 0x0f, 0xe5, 0x64, 0x3a, - 0x62, 0xc5, 0x34, 0x27, 0x4f, 0x71, 0xee, 0x98, 0xdc, 0x85, 0x19, 0x7d, 0x44, 0x55, 0xbf, 0xf3, - 0x56, 0xff, 0x3c, 0x3e, 0x3b, 0x30, 0x9b, 0x99, 0x3d, 0x58, 0x6d, 0xb1, 0x45, 0xb9, 0x85, 0x73, - 0xb9, 0x52, 0x38, 0x97, 0x9d, 0x40, 0x9c, 0xbc, 0x6a, 0xda, 0x0f, 0xb2, 0xd3, 0x29, 0xcf, 0xbf, - 0xd6, 0x03, 0x4b, 0x08, 0xf4, 0x2b, 0xdc, 0x01, 0x53, 0x75, 0x5c, 0xd5, 0x2c, 0x0a, 0x39, 0x15, - 0x58, 0x45, 0x28, 0x6a, 0x0e, 0xcc, 0x64, 0x14, 0xe7, 0x8b, 0xf8, 0x95, 0x7c, 0x9e, 0xf1, 0xc4, - 0xda, 0x93, 0x51, 0x92, 0x73, 0x25, 0x53, 0x98, 0x68, 0xba, 0xe0, 0x48, 0x3a, 0xaf, 0xe6, 0xc3, - 0xc9, 0x9b, 0x9c, 0x6f, 0x5e, 0x9a, 0xc9, 0x4a, 0x6f, 0x9e, 0xb4, 0xfe, 0x64, 0x65, 0xaf, 0x56, - 0x62, 0x28, 0xcc, 0x8f, 0xbe, 0xc7, 0x2d, 0x41, 0x26, 0x77, 0xdd, 0x12, 0x94, 0xc9, 0xfa, 0x4a, - 0x3e, 0x42, 0x3c, 0x23, 0x8c, 0xd8, 0xeb, 0xa2, 0xff, 0xfa, 0x39, 0x2b, 0x3b, 0xb1, 0xb5, 0x9a, - 0x11, 0x99, 0x28, 0x82, 0xbb, 0x2d, 0x3f, 0xba, 0x1c, 0xb1, 0x14, 0x24, 0xf5, 0x2e, 0x38, 0x0e, - 0x55, 0xe2, 0x81, 0x4b, 0x34, 0xfb, 0xb4, 0xc3, 0xf6, 0x15, 0x9c, 0xcf, 0x4d, 0xe0, 0x4d, 0xde, - 0x48, 0x7d, 0xd0, 0x39, 0x92, 0xc8, 0x6f, 0xe9, 0xa4, 0x91, 0x7b, 0x5b, 0x99, 0xc2, 0x12, 0x69, - 0xbe, 0x53, 0x2b, 0x76, 0x46, 0x0e, 0xf0, 0x7b, 0xa8, 0xf9, 0x6a, 0x79, 0xbc, 0x73, 0xfb, 0x7a, - 0x29, 0x8b, 0x4f, 0x98, 0x5e, 0x53, 0xb5, 0x76, 0x49, 0x4d, 0x2c, 0x59, 0x70, 0x9a, 0x35, 0xf5, - 0x24, 0x4d, 0xcb, 0xe3, 0xb3, 0x0c, 0xe3, 0x5a, 0x02, 0x70, 0x72, 0xde, 0x10, 0x93, 0xb1, 0x4b, - 0xce, 0x1b, 0x9d, 0x33, 0x37, 0xc8, 0x25, 0xb4, 0x39, 0xab, 0x34, 0xe2, 0xb9, 0xad, 0xb8, 0x90, - 0xe6, 0x61, 0xd8, 0x9b, 0x95, 0x14, 0x78, 0x6b, 0x2e, 0x26, 0x85, 0x63, 0x34, 0x28, 0xbf, 0x4b, - 0x44, 0x17, 0x4d, 0x8f, 0x26, 0xe5, 0x6b, 0xa8, 0xd3, 0x22, 0xcb, 0x28, 0x26, 0x43, 0x91, 0x31, - 0xf9, 0xce, 0x29, 0xe3, 0x99, 0x06, 0x2d, 0xb0, 0x65, 0x6c, 0xe3, 0xd3, 0x8e, 0x8c, 0x8c, 0xe8, - 0x6a, 0x0d, 0x2d, 0x4c, 0x98, 0x9e, 0xa1, 0x9d, 0xa9, 0x55, 0x39, 0x97, 0x63, 0x61, 0x8a, 0xf4, - 0xdc, 0x96, 0xfe, 0x50, 0x5b, 0x95, 0x53, 0x79, 0xcf, 0xc9, 0xb5, 0xa4, 0x6a, 0x96, 0x97, 0x1a, - 0xbd, 0x60, 0xd5, 0x9f, 0xc9, 0x4a, 0x99, 0xae, 0x19, 0x80, 0x73, 0xf3, 0xa9, 0x67, 0x48, 0x41, - 0x2d, 0x6f, 0x39, 0xdc, 0x0a, 0x12, 0xa8, 0xe7, 0xb6, 0xf0, 0x4b, 0x6d, 0x79, 0x4b, 0x24, 0x3a, - 0x57, 0x07, 0xee, 0x1e, 0x99, 0xd0, 0x73, 0x79, 0x6f, 0xe2, 0x63, 0xa0, 0x74, 0x96, 0x72, 0xa5, - 0xbb, 0x14, 0xe5, 0x30, 0xcf, 0xb4, 0x0f, 0xcf, 0xa6, 0xbb, 0xc8, 0xf8, 0x9d, 0x4b, 0x58, 0x77, - 0x7b, 0x35, 0x4c, 0xad, 0xc3, 0x19, 0xd9, 0xcd, 0x13, 0xeb, 0x70, 0x7e, 0xfe, 0xf3, 0x82, 0x83, - 0xce, 0x99, 0xba, 0xbb, 0xef, 0x69, 0xc9, 0xc9, 0xd5, 0x31, 0x27, 0x9d, 0x2f, 0x5d, 0x2d, 0x31, - 0x59, 0xb9, 0xcc, 0xb7, 0x98, 0x86, 0xc3, 0xf5, 0x73, 0x3d, 0xcd, 0x34, 0x99, 0xcf, 0xcf, 0xae, - 0xad, 0x96, 0x9b, 0xcc, 0xbc, 0xd4, 0x1a, 0x43, 0x3d, 0xc7, 0xb3, 0x62, 0x98, 0x91, 0x6e, 0x5a, - 0x31, 0xcc, 0x4c, 0x0a, 0x7d, 0x13, 0xed, 0x2a, 0xb6, 0xdf, 0xa6, 0xba, 0x5d, 0x45, 0x4b, 0x1a, - 0x9c, 0x30, 0x6b, 0x90, 0x0f, 0xd1, 0xa8, 0x51, 0x6c, 0x09, 0x99, 0x33, 0x39, 0xe9, 0xbe, 0x23, - 0x63, 0x2a, 0x23, 0xb3, 0xb2, 0xa2, 0x27, 0x93, 0x42, 0xcf, 0x57, 0xd2, 0x05, 0x82, 0xfe, 0x1d, - 0x69, 0x17, 0xc1, 0x06, 0x57, 0x4c, 0x7b, 0x52, 0x7e, 0x9b, 0xdf, 0x91, 0x46, 0x11, 0x83, 0x2c, - 0x95, 0x8f, 0x39, 0x49, 0xf6, 0x3d, 0x98, 0x88, 0x73, 0x2f, 0xef, 0x2d, 0x68, 0x84, 0x89, 0x84, - 0xcc, 0x49, 0xc2, 0xf7, 0xe4, 0xc5, 0x09, 0xd6, 0x67, 0x16, 0x16, 0xdb, 0x4f, 0x3e, 0x96, 0x46, - 0x18, 0xa3, 0xa5, 0xa9, 0x4c, 0xce, 0x05, 0x2b, 0xf7, 0x84, 0x9e, 0x30, 0x52, 0xcd, 0x8b, 0x8c, - 0x94, 0xaf, 0x6a, 0x5e, 0x64, 0xa5, 0x6c, 0x8d, 0x2f, 0x16, 0xbe, 0x90, 0x16, 0x87, 0x98, 0xe9, - 0x25, 0xa3, 0x59, 0x29, 0xbe, 0x97, 0xf3, 0x8a, 0x93, 0xac, 0xeb, 0x50, 0x4e, 0x66, 0xb7, 0x54, - 0xc7, 0xb5, 0x9c, 0x34, 0xa4, 0xea, 0x0c, 0x98, 0x9b, 0x16, 0x73, 0x5b, 0x9a, 0xcf, 0x4d, 0xbe, - 0x57, 0xb3, 0x1b, 0xa5, 0xb3, 0x2e, 0x56, 0xcb, 0xe2, 0x44, 0x97, 0xfa, 0x41, 0x3a, 0x95, 0x48, - 0x53, 0x57, 0xcb, 0x32, 0x72, 0x63, 0xba, 0x32, 0x9c, 0x53, 0x76, 0xbe, 0xed, 0x37, 0xcd, 0x13, - 0x6e, 0x41, 0x54, 0xf4, 0x9e, 0x97, 0xcc, 0xe4, 0x57, 0x60, 0x2e, 0x27, 0x80, 0x34, 0x79, 0x2d, - 0x61, 0x88, 0xcd, 0x0e, 0x30, 0xad, 0x26, 0x48, 0x66, 0x06, 0xea, 0x0d, 0xf4, 0x4e, 0x30, 0x02, - 0x37, 0xa4, 0x6e, 0xfc, 0x1e, 0xba, 0xd1, 0x01, 0x4f, 0xb4, 0xac, 0xad, 0xb9, 0x99, 0x11, 0x1f, - 0x48, 0x1d, 0xcf, 0x2b, 0x06, 0x34, 0xe3, 0xd2, 0x2f, 0x83, 0xe1, 0x7c, 0x36, 0x43, 0xb6, 0x76, - 0xb0, 0xb9, 0x90, 0x11, 0x55, 0x43, 0xcd, 0x85, 0xfc, 0x88, 0x1b, 0xb9, 0xcd, 0xdc, 0x96, 0x0a, - 0x56, 0x36, 0xc7, 0xfc, 0x00, 0x1b, 0xb9, 0x1c, 0xef, 0x33, 0x8e, 0xa9, 0x98, 0x19, 0x24, 0x07, - 0xbd, 0x78, 0xf5, 0xb0, 0xe5, 0x7e, 0x6d, 0x52, 0x2d, 0x68, 0xed, 0xcb, 0x8b, 0xce, 0x91, 0xdb, - 0xbe, 0x15, 0xf9, 0x3d, 0x65, 0xb7, 0xef, 0xa4, 0x3b, 0xb6, 0xba, 0x1e, 0x4b, 0x84, 0x6d, 0x31, - 0x3a, 0xaa, 0xc1, 0xe7, 0x73, 0xe0, 0x64, 0x13, 0xdd, 0x8d, 0x92, 0x50, 0xed, 0xe0, 0x9a, 0x1d, - 0x17, 0x26, 0x97, 0x1f, 0x9f, 0xc7, 0x46, 0x5c, 0x8d, 0xd3, 0xcc, 0xe3, 0x44, 0x40, 0x0e, 0x31, - 0x8f, 0x0d, 0xe8, 0xe9, 0xe6, 0x71, 0x82, 0xa1, 0x39, 0x8f, 0x93, 0xcd, 0x4c, 0x1a, 0x02, 0x72, - 0x47, 0x35, 0xd9, 0x4c, 0x35, 0x8f, 0xb3, 0x39, 0xe6, 0xc7, 0x3f, 0xc9, 0xe5, 0xa8, 0xe6, 0xb1, - 0xc9, 0x31, 0x07, 0xfd, 0x84, 0xf3, 0x38, 0x59, 0x89, 0x39, 0x8f, 0x4f, 0xd5, 0x3e, 0x35, 0x8f, - 0xb3, 0xdb, 0x77, 0xea, 0x79, 0x9c, 0x08, 0x18, 0x64, 0x74, 0x34, 0x6b, 0x1e, 0x27, 0xf1, 0xf9, - 0x3c, 0x4e, 0x42, 0x13, 0x06, 0x98, 0x82, 0x79, 0x9c, 0xa4, 0xfc, 0x0c, 0xf9, 0x25, 0x82, 0x9d, - 0x9c, 0x64, 0x26, 0xe7, 0xc6, 0x49, 0x21, 0x0f, 0xd1, 0xfa, 0x97, 0x80, 0x9f, 0x6c, 0x36, 0x5f, - 0xcc, 0x63, 0x8a, 0xf3, 0x79, 0x4f, 0x0a, 0x31, 0xd9, 0x5c, 0xd3, 0xb4, 0x95, 0x1d, 0xeb, 0xa5, - 0xa0, 0xc1, 0x7b, 0x6c, 0xde, 0xb4, 0x0a, 0xf8, 0x16, 0x85, 0xaa, 0x29, 0xe0, 0xab, 0xce, 0x41, - 0x49, 0xbe, 0xb9, 0x24, 0xc5, 0xf3, 0xfb, 0x73, 0x79, 0xff, 0x91, 0xa4, 0x5b, 0x48, 0x9c, 0xac, - 0x4e, 0xdd, 0x52, 0x75, 0xc2, 0x4a, 0xb6, 0xf4, 0xb4, 0xf3, 0x7c, 0x43, 0x6a, 0x0f, 0xa9, 0x18, - 0x57, 0x89, 0x4e, 0xeb, 0x73, 0x3d, 0xb7, 0x84, 0xec, 0xa0, 0xa9, 0x37, 0x0d, 0xd7, 0xcc, 0xc4, - 0x79, 0xc1, 0xb4, 0x7a, 0x72, 0x4d, 0x45, 0xeb, 0xd1, 0xb9, 0xe6, 0x85, 0xf2, 0x51, 0x5c, 0xd3, - 0xd4, 0x9f, 0xa0, 0xe9, 0x4c, 0xbc, 0xe9, 0xf2, 0x1e, 0xfb, 0xf9, 0xe7, 0x9c, 0x69, 0xc3, 0x25, - 0x8a, 0xe1, 0xa2, 0x27, 0xda, 0x47, 0xe2, 0x82, 0x4f, 0x02, 0x73, 0x85, 0x9f, 0x45, 0x4f, 0x3e, - 0x81, 0xb2, 0x58, 0xde, 0x62, 0x06, 0x59, 0x88, 0xb9, 0x43, 0xb7, 0x28, 0x2d, 0x76, 0x27, 0x68, - 0xc1, 0x49, 0x2c, 0x75, 0x27, 0x91, 0x44, 0xbe, 0x59, 0x8b, 0x6d, 0x87, 0x3b, 0x41, 0x37, 0x8c, - 0x68, 0x2b, 0x6d, 0x8e, 0x32, 0x1b, 0x23, 0x1d, 0x27, 0x4c, 0xf4, 0xbd, 0x05, 0xb2, 0x86, 0x6b, - 0x9b, 0x09, 0x2e, 0xb2, 0xd7, 0x65, 0xb3, 0xc1, 0xa5, 0x67, 0x55, 0x3d, 0x1e, 0x32, 0xdb, 0x94, - 0x57, 0x77, 0x7e, 0xa3, 0x94, 0x88, 0x4e, 0xd8, 0xbb, 0x3c, 0x11, 0xf1, 0x03, 0x35, 0xb7, 0x1d, - 0xf6, 0x92, 0x4c, 0xf2, 0x39, 0x13, 0xf9, 0x14, 0xc6, 0x24, 0x71, 0x6f, 0x81, 0x24, 0xa9, 0x51, - 0x20, 0xcb, 0x30, 0x69, 0xbc, 0xd5, 0x52, 0xa7, 0x9b, 0xac, 0x17, 0x5c, 0x05, 0xe3, 0x3c, 0x69, - 0xbc, 0xc9, 0x52, 0x5c, 0xb2, 0x5e, 0x6a, 0xe5, 0x72, 0xf9, 0x3e, 0x8c, 0x0b, 0x91, 0x16, 0x4a, - 0x23, 0xdf, 0x58, 0x37, 0xab, 0xf9, 0x3d, 0x77, 0x5b, 0x6e, 0xb4, 0xe4, 0x7b, 0x8f, 0xdd, 0xfd, - 0x9e, 0x82, 0x49, 0x93, 0xec, 0x2d, 0x90, 0x1f, 0x60, 0x5a, 0x62, 0x99, 0x2c, 0x9a, 0x46, 0xcf, - 0xfc, 0xe0, 0x89, 0xeb, 0xed, 0xf7, 0x60, 0x79, 0xc5, 0x64, 0x99, 0xa4, 0x93, 0xae, 0x25, 0x3f, - 0x80, 0xf9, 0x7a, 0x3e, 0xf3, 0x9e, 0x4c, 0x8a, 0xb7, 0x97, 0x3a, 0x5c, 0x44, 0xe7, 0x9a, 0xd3, - 0xb6, 0xbd, 0x90, 0xe9, 0x17, 0x3c, 0x4c, 0xa2, 0x34, 0xf4, 0x37, 0xfd, 0xa0, 0xd5, 0x9b, 0x63, - 0xd5, 0x74, 0xd7, 0x4d, 0x90, 0x49, 0x61, 0x7c, 0x01, 0xe7, 0xeb, 0xb9, 0xac, 0x7b, 0xb1, 0xe8, - 0xa5, 0x49, 0x5e, 0x40, 0x51, 0x9c, 0xb2, 0xdd, 0x85, 0x3c, 0xd7, 0x70, 0x4d, 0x63, 0xfb, 0xd0, - 0x76, 0x40, 0x1f, 0xd3, 0x00, 0x9d, 0xc2, 0x7b, 0xb9, 0x43, 0x9b, 0xe8, 0xb2, 0xe7, 0x6b, 0x70, - 0xb6, 0x9e, 0x62, 0x95, 0x47, 0x52, 0xdc, 0xaa, 0xfb, 0x30, 0x8d, 0x3d, 0x3d, 0x61, 0xbb, 0x7a, - 0x38, 0x11, 0x8d, 0xdf, 0xa3, 0xd1, 0xee, 0x5a, 0x0f, 0x29, 0xc9, 0x57, 0x0b, 0x12, 0x71, 0xef, - 0x36, 0xa3, 0xac, 0x6b, 0x94, 0x69, 0x8c, 0xdc, 0x8f, 0xf7, 0x53, 0x79, 0x91, 0xd2, 0xb3, 0xda, - 0x3c, 0x0e, 0x77, 0x70, 0x2d, 0x14, 0x8e, 0xd1, 0x9a, 0x09, 0x92, 0x43, 0x62, 0x53, 0x9d, 0xe6, - 0x23, 0x1d, 0x92, 0x1a, 0x3f, 0xfe, 0xf1, 0xe9, 0x21, 0x60, 0x97, 0x53, 0x0e, 0xf3, 0x85, 0x2c, - 0xb8, 0x09, 0x75, 0xdd, 0x6f, 0x3e, 0xd1, 0x4d, 0xa8, 0x5a, 0xe2, 0xfa, 0x79, 0x33, 0xad, 0xbc, - 0x58, 0xf1, 0x31, 0xb7, 0xbc, 0xee, 0x17, 0xa6, 0xa7, 0xae, 0xd7, 0x4d, 0xa8, 0x66, 0x92, 0xfd, - 0x3b, 0xd2, 0xb6, 0x88, 0x15, 0x9a, 0x9c, 0x73, 0x45, 0xa3, 0xcc, 0x8a, 0x48, 0x64, 0x9a, 0x15, - 0xf5, 0x86, 0xe6, 0x5f, 0x04, 0x90, 0x74, 0x96, 0x7d, 0x75, 0x58, 0xc9, 0x4d, 0xc0, 0x5f, 0xe0, - 0xde, 0x35, 0x2d, 0x9c, 0x82, 0x0c, 0xc1, 0xab, 0x50, 0xc3, 0xe9, 0xb2, 0x58, 0x94, 0xba, 0xaf, - 0xd2, 0xad, 0x12, 0xd9, 0x84, 0x73, 0xf7, 0x68, 0x24, 0xd6, 0x38, 0x9b, 0x86, 0x51, 0xe0, 0x36, - 0xa3, 0xc2, 0x5b, 0x45, 0x79, 0x36, 0xc9, 0xa0, 0xd9, 0x7b, 0x9b, 0xf1, 0xab, 0x67, 0xf3, 0x2b, - 0xa4, 0x2b, 0xf0, 0xa0, 0x15, 0x57, 0x15, 0xa7, 0x69, 0x62, 0xfe, 0x14, 0x1f, 0xe1, 0x0e, 0x3a, - 0xf9, 0xa4, 0xe5, 0x38, 0xae, 0x89, 0x38, 0x6d, 0xdd, 0x80, 0x61, 0x4e, 0x94, 0xbb, 0xa1, 0x4e, - 0xe8, 0x34, 0xe4, 0x36, 0x8c, 0x29, 0x0f, 0x1b, 0x62, 0x14, 0xe5, 0xb6, 0xeb, 0x36, 0x8c, 0xf1, - 0xa3, 0xd5, 0xc9, 0x49, 0x3e, 0x84, 0x31, 0xe5, 0x92, 0x73, 0xea, 0x9d, 0xfe, 0x13, 0x98, 0xd4, - 0x9d, 0x73, 0x4e, 0x2f, 0xc8, 0xef, 0xe3, 0xdd, 0xaf, 0xbc, 0x62, 0xc9, 0xa7, 0x9f, 0x4d, 0xe4, - 0xf2, 0x12, 0x22, 0xe5, 0x0b, 0xa4, 0x04, 0xe6, 0x36, 0xff, 0x6c, 0x8a, 0x9a, 0x7c, 0x28, 0xdf, - 0x4b, 0x29, 0xe2, 0x34, 0x52, 0x81, 0xcc, 0xa6, 0xb8, 0x98, 0x5f, 0x84, 0x58, 0x2d, 0xb0, 0x3d, - 0x9b, 0x7d, 0x92, 0x3b, 0xea, 0xde, 0xa2, 0xcb, 0xe3, 0xb2, 0x85, 0x5a, 0x5a, 0x2a, 0xcb, 0x5c, - 0x3e, 0xa3, 0xcb, 0xf9, 0x89, 0xe9, 0x70, 0x30, 0xee, 0xe3, 0x29, 0x30, 0x55, 0x9a, 0xdb, 0xbd, - 0x82, 0x44, 0x77, 0xf1, 0xb1, 0x37, 0xcd, 0xae, 0x80, 0xac, 0xe8, 0x14, 0x2d, 0x5e, 0x81, 0xbe, - 0x14, 0x76, 0x6b, 0xd2, 0xc7, 0xf1, 0xe4, 0x9d, 0xcd, 0x6f, 0xd9, 0x85, 0x8c, 0x5b, 0xf1, 0x9e, - 0x63, 0x91, 0xc7, 0xee, 0x57, 0x50, 0x3b, 0xcc, 0x0c, 0xf7, 0x95, 0xcf, 0xec, 0x9a, 0xe6, 0x58, - 0x91, 0x49, 0xa9, 0x36, 0xbd, 0x27, 0xf8, 0x10, 0x2d, 0x3b, 0x0f, 0xdf, 0xeb, 0x3d, 0xb8, 0x48, - 0x49, 0xbc, 0xd1, 0x13, 0x4f, 0xdd, 0xb1, 0x5e, 0xe0, 0x3b, 0x6c, 0x76, 0x7d, 0x3d, 0xf2, 0x0a, - 0x66, 0x5c, 0x7b, 0x2b, 0x07, 0xd2, 0x6c, 0x86, 0xa6, 0x03, 0x69, 0x61, 0x1f, 0xf2, 0xc4, 0xff, - 0x19, 0x54, 0x63, 0xef, 0x91, 0xd3, 0x0d, 0x42, 0xbe, 0xdf, 0x22, 0x49, 0x49, 0x2a, 0x24, 0x45, - 0x89, 0x76, 0xe6, 0xaf, 0xe6, 0x49, 0x38, 0xd4, 0xdc, 0x92, 0x84, 0xdf, 0x5b, 0x22, 0x23, 0x65, - 0x5e, 0x6e, 0xcb, 0x02, 0x3b, 0xac, 0x78, 0x99, 0xf7, 0x52, 0x18, 0xa5, 0x47, 0xfb, 0xf4, 0x8c, - 0x94, 0x73, 0x47, 0x82, 0x91, 0x55, 0x30, 0xbc, 0xa7, 0xf1, 0x5d, 0x4b, 0x0e, 0xc5, 0x69, 0x07, - 0xd4, 0x89, 0x5f, 0xa3, 0x25, 0xa2, 0x03, 0xea, 0x2f, 0x80, 0xd3, 0x45, 0xc9, 0xa7, 0x54, 0x59, - 0x18, 0xca, 0xa3, 0xaa, 0x22, 0xab, 0x60, 0x70, 0x76, 0x14, 0xf1, 0x03, 0x37, 0x7a, 0xbe, 0x64, - 0xaf, 0xc7, 0x66, 0x05, 0xbd, 0x40, 0xf2, 0x06, 0x59, 0x68, 0xaf, 0x93, 0x2f, 0x71, 0x29, 0x11, - 0xec, 0x17, 0x7d, 0x3f, 0x0a, 0xa3, 0xc0, 0xe9, 0xd4, 0x9b, 0x81, 0xdb, 0x89, 0x72, 0x3b, 0x1d, - 0xbb, 0x78, 0x67, 0x91, 0x69, 0x1e, 0xa7, 0x22, 0x7a, 0x7c, 0x56, 0x7c, 0x1d, 0xf5, 0xea, 0x26, - 0xab, 0xb0, 0xe0, 0xe4, 0x52, 0x97, 0xf1, 0xe2, 0x5f, 0x26, 0xd3, 0x06, 0xcc, 0xe5, 0x44, 0x25, - 0x52, 0xb7, 0xb7, 0xc5, 0x51, 0x8b, 0xe6, 0x8b, 0x2b, 0x26, 0x3f, 0x80, 0xd9, 0xcc, 0xb0, 0x45, - 0xca, 0x02, 0x5d, 0x14, 0xd4, 0xa8, 0x17, 0xf3, 0x27, 0x50, 0xe1, 0xef, 0x3d, 0xd0, 0xad, 0xd9, - 0x88, 0x60, 0x13, 0xbf, 0x02, 0xca, 0x41, 0x48, 0xae, 0xd7, 0xf9, 0x78, 0xea, 0x49, 0xfb, 0x0c, - 0x86, 0x2e, 0x49, 0x24, 0x3c, 0x57, 0x1f, 0x5e, 0x56, 0x61, 0xd1, 0x53, 0xa3, 0x6d, 0x98, 0xdd, - 0xa3, 0x81, 0xfb, 0xf8, 0x79, 0x92, 0xa1, 0x94, 0x4c, 0x66, 0x69, 0x11, 0xc7, 0xcf, 0x61, 0x6e, - 0xc9, 0x3f, 0xec, 0x88, 0x47, 0x7d, 0x06, 0x4f, 0x75, 0x15, 0x9f, 0x5d, 0xde, 0xdb, 0x11, 0x6a, - 0x3e, 0x3f, 0x35, 0xbd, 0xf2, 0x7f, 0xeb, 0x99, 0xbd, 0x5e, 0x3d, 0x4d, 0x33, 0xe9, 0x77, 0x70, - 0x12, 0x66, 0xe5, 0xaa, 0xd7, 0x27, 0x61, 0x41, 0x2e, 0xfb, 0x9c, 0x27, 0x62, 0x73, 0x39, 0xe9, - 0xe9, 0x0b, 0xb8, 0x9e, 0xa0, 0xb5, 0x9b, 0x72, 0x6f, 0x31, 0x13, 0x79, 0x27, 0x7c, 0xaa, 0x33, - 0xb3, 0x7c, 0x67, 0xb6, 0x53, 0x8b, 0xdd, 0xd0, 0x6e, 0x17, 0xa8, 0x58, 0x44, 0x0f, 0xde, 0xc0, - 0x30, 0xd1, 0x88, 0x3f, 0xa9, 0xd3, 0x16, 0xad, 0xd6, 0x29, 0x62, 0x54, 0x6a, 0x3f, 0x80, 0x89, - 0xba, 0x5e, 0x79, 0x46, 0x25, 0xb9, 0x93, 0x42, 0x3d, 0x12, 0xea, 0xdd, 0xf6, 0x02, 0x47, 0x52, - 0xb5, 0xf1, 0x9c, 0xa8, 0x17, 0xb9, 0xae, 0x33, 0x46, 0x56, 0x36, 0xb5, 0x0b, 0x64, 0x25, 0x4d, - 0x54, 0xae, 0x33, 0xd9, 0x89, 0xdc, 0x1a, 0x3c, 0x8f, 0x4c, 0x32, 0x27, 0x26, 0xb1, 0x7a, 0x27, - 0x9f, 0x55, 0x2e, 0xf3, 0x85, 0x49, 0x35, 0xb9, 0x9f, 0x4f, 0x9c, 0x87, 0x4e, 0xf7, 0xf3, 0x49, - 0x65, 0xb7, 0xd3, 0xfd, 0x7c, 0x32, 0x52, 0xd7, 0xad, 0x20, 0xaf, 0x38, 0x01, 0x4f, 0x81, 0x31, - 0x42, 0xb1, 0xc9, 0xc8, 0xf3, 0xf3, 0x40, 0x0f, 0x01, 0xc2, 0xd3, 0xf6, 0x14, 0xd8, 0x5a, 0x93, - 0xa1, 0x3f, 0x12, 0x79, 0x7e, 0xee, 0x42, 0x99, 0x67, 0x30, 0x88, 0xa3, 0x26, 0xc6, 0x7e, 0x83, - 0xe9, 0xc4, 0x0a, 0x05, 0x83, 0x5a, 0x4e, 0xc6, 0x9b, 0x53, 0x26, 0xb3, 0x9c, 0x40, 0x74, 0x05, - 0x53, 0x15, 0xe2, 0xa8, 0x72, 0xca, 0x30, 0x95, 0x0a, 0x34, 0x37, 0x7f, 0x3e, 0xa3, 0x44, 0xa9, - 0x94, 0x13, 0x7a, 0x0c, 0x3a, 0xd5, 0xa5, 0x8c, 0xc0, 0x74, 0xf3, 0x17, 0x32, 0xcb, 0x04, 0xa3, - 0x88, 0xe7, 0x5f, 0xce, 0xce, 0x1a, 0x1d, 0xbf, 0xf3, 0x2a, 0xc0, 0x91, 0xd5, 0x5c, 0x3f, 0x09, - 0xaa, 0xa8, 0x95, 0xaa, 0xf4, 0x43, 0x19, 0xa9, 0xaa, 0xdf, 0xc8, 0x78, 0x8f, 0x61, 0x60, 0xc4, - 0xde, 0x60, 0xc5, 0x79, 0xb3, 0xc9, 0x43, 0x99, 0x0e, 0x26, 0xa7, 0xa6, 0x5e, 0x0c, 0x72, 0x47, - 0xf0, 0xa1, 0x4c, 0x00, 0xf3, 0xb2, 0x19, 0x3f, 0x82, 0x8b, 0x89, 0xe7, 0x1e, 0x26, 0xe3, 0xeb, - 0xd9, 0x6f, 0x42, 0x32, 0xc5, 0x93, 0xaf, 0xb3, 0x5f, 0x49, 0xbf, 0x0d, 0x49, 0x8c, 0xfb, 0x69, - 0xd7, 0xbc, 0x0d, 0x98, 0xc2, 0x65, 0x46, 0x26, 0x5d, 0x8f, 0x23, 0xd0, 0x98, 0xe0, 0x64, 0x28, - 0xa4, 0x64, 0xa9, 0x72, 0x99, 0x9d, 0x10, 0x6f, 0x86, 0x79, 0x0a, 0xf7, 0x79, 0xf3, 0x21, 0x31, - 0x02, 0xb3, 0x76, 0x31, 0x91, 0x19, 0x9e, 0x7c, 0x1f, 0xce, 0xc4, 0x4f, 0x89, 0x39, 0x8b, 0x0c, - 0xb4, 0x02, 0x43, 0xd9, 0x99, 0xf8, 0x3d, 0xf1, 0xe9, 0xc9, 0x57, 0xe5, 0x56, 0x14, 0x93, 0x5f, - 0x4a, 0x3d, 0x93, 0x31, 0xfa, 0x70, 0x92, 0x1d, 0x49, 0x93, 0xed, 0x69, 0x47, 0xa7, 0x89, 0x9f, - 0x5b, 0x76, 0x70, 0x45, 0xfd, 0x73, 0x2b, 0x0c, 0x00, 0xa9, 0xd4, 0xdf, 0x1c, 0x3e, 0x1b, 0xf0, - 0x0a, 0x06, 0x64, 0xd9, 0xe6, 0x21, 0xf8, 0xb2, 0xb1, 0xf2, 0xdb, 0x9e, 0x0c, 0xe3, 0xd2, 0x86, - 0xab, 0x3d, 0xa3, 0x4b, 0x92, 0x9b, 0x86, 0x8b, 0x4b, 0xef, 0x38, 0x94, 0x45, 0x4f, 0xd3, 0xb2, - 0x82, 0x34, 0xaa, 0x7d, 0xb6, 0x20, 0x5e, 0xa4, 0xda, 0x67, 0x0b, 0xa3, 0x3c, 0x7e, 0x8e, 0x39, - 0x96, 0xc4, 0x1e, 0x85, 0x41, 0x96, 0xa8, 0xc7, 0xc3, 0x4e, 0x17, 0x5e, 0xfb, 0x5c, 0x35, 0x2f, - 0x45, 0x53, 0x84, 0x78, 0xa6, 0xb9, 0x2c, 0x4e, 0x62, 0x79, 0xcc, 0x7b, 0x33, 0x29, 0x70, 0xad, - 0xbe, 0xcc, 0x27, 0xe0, 0xa9, 0x5b, 0x9e, 0x03, 0x5f, 0x5c, 0xfe, 0xd9, 0x7f, 0xbe, 0x5c, 0xfa, - 0xd9, 0xcf, 0x2f, 0x97, 0xfe, 0xfd, 0xcf, 0x2f, 0x97, 0xfe, 0xd3, 0xcf, 0x2f, 0x97, 0xbe, 0x5c, - 0x38, 0x59, 0xf0, 0xe3, 0x66, 0xdb, 0xa5, 0x5e, 0x74, 0x93, 0xb3, 0x1b, 0xc6, 0xff, 0xee, 0xfc, - 0xef, 0x00, 0x00, 0x00, 0xff, 0xff, 0x92, 0x68, 0xf6, 0x62, 0xe3, 0xe7, 0x00, 0x00, + 0x76, 0x18, 0xda, 0x55, 0xfd, 0x3e, 0xfd, 0x60, 0x31, 0xba, 0x9b, 0x5d, 0x6c, 0x3e, 0x8a, 0x4c, + 0xce, 0x83, 0xc3, 0x9d, 0xe5, 0xa3, 0x39, 0x33, 0x3b, 0xaf, 0x9d, 0x99, 0xea, 0x07, 0xd9, 0x4d, + 0xf6, 0x6b, 0xb2, 0xba, 0x9b, 0x33, 0xb3, 0xa3, 0xad, 0xcd, 0xae, 0x0a, 0x76, 0xa7, 0x58, 0x9d, + 0x59, 0x9b, 0x99, 0x45, 0x0e, 0x57, 0x57, 0xba, 0xd0, 0xea, 0x5e, 0x5c, 0xfd, 0xdc, 0x7b, 0x25, + 0xc0, 0x32, 0x64, 0xe8, 0x43, 0x36, 0x60, 0x01, 0x86, 0x01, 0x1b, 0xfa, 0x11, 0xf4, 0x63, 0x7f, + 0xf8, 0xcb, 0x6b, 0x01, 0x82, 0x6d, 0x48, 0xfa, 0xf1, 0x47, 0xcb, 0x5e, 0xc0, 0x3f, 0x0d, 0xfb, + 0x43, 0x30, 0x6c, 0xc0, 0x0b, 0x08, 0x30, 0xe2, 0xc4, 0x23, 0x23, 0xf2, 0x51, 0xd5, 0x4d, 0x72, + 0x56, 0xfe, 0x21, 0xbb, 0x4e, 0x9c, 0x73, 0x22, 0xe2, 0x44, 0x64, 0xc4, 0x89, 0x13, 0x27, 0xce, + 0x81, 0x9b, 0x11, 0x6d, 0xd1, 0xb6, 0x1f, 0x44, 0xb7, 0x5a, 0x74, 0xdf, 0x69, 0x3c, 0xbf, 0xd5, + 0x68, 0xb9, 0xd4, 0x8b, 0x6e, 0xb5, 0x03, 0x3f, 0xf2, 0x6f, 0x39, 0x9d, 0xe8, 0x20, 0xa4, 0xc1, + 0x53, 0xb7, 0x41, 0x6f, 0x22, 0x84, 0x0c, 0xe2, 0x7f, 0x73, 0xd3, 0xfb, 0xfe, 0xbe, 0xcf, 0x71, + 0xd8, 0x5f, 0xbc, 0x70, 0xee, 0xc2, 0xbe, 0xef, 0xef, 0xb7, 0x28, 0x27, 0xde, 0xeb, 0x3c, 0xbe, + 0x45, 0x0f, 0xdb, 0xd1, 0x73, 0x51, 0x58, 0x49, 0x16, 0x46, 0xee, 0x21, 0x0d, 0x23, 0xe7, 0xb0, + 0x2d, 0x10, 0xde, 0x52, 0x4d, 0x71, 0xa2, 0x88, 0x95, 0x44, 0xae, 0xef, 0xdd, 0x7a, 0x7a, 0x47, + 0xff, 0x29, 0x50, 0xaf, 0x77, 0x6d, 0x75, 0x83, 0x06, 0x51, 0x78, 0x22, 0x4c, 0xfa, 0x94, 0x7a, + 0x51, 0xaa, 0x7a, 0x81, 0x19, 0x3d, 0x6f, 0xd3, 0x90, 0xa3, 0xc8, 0xff, 0x04, 0xea, 0xd5, 0x6c, + 0x54, 0xfc, 0x57, 0xa0, 0x7c, 0x37, 0x1b, 0xe5, 0x19, 0xdd, 0x63, 0x32, 0xf5, 0xd4, 0x1f, 0x3d, + 0xd0, 0x03, 0xa7, 0xdd, 0xa6, 0x41, 0xfc, 0x87, 0x40, 0x3f, 0xaf, 0xd0, 0x0f, 0x1f, 0x3b, 0x4c, + 0x44, 0x87, 0x8f, 0x9d, 0x54, 0x37, 0x3a, 0xa1, 0xb3, 0x4f, 0x45, 0xf3, 0x9f, 0xde, 0xd1, 0x7f, + 0x72, 0x54, 0xeb, 0x0f, 0x0b, 0x30, 0xf8, 0xc8, 0x89, 0x1a, 0x07, 0xe4, 0x53, 0x18, 0x7c, 0xe8, + 0x7a, 0xcd, 0xb0, 0x5c, 0xb8, 0xd2, 0x7f, 0x7d, 0x6c, 0xbe, 0x74, 0x93, 0x77, 0x05, 0x0b, 0x59, + 0xc1, 0xc2, 0xec, 0xcf, 0x8e, 0x2a, 0x7d, 0xc7, 0x47, 0x95, 0x33, 0x4f, 0x18, 0xda, 0xdb, 0xfe, + 0xa1, 0x1b, 0xe1, 0xd8, 0xda, 0x9c, 0x8e, 0xec, 0xc0, 0x54, 0xb5, 0xd5, 0xf2, 0x9f, 0x6d, 0x39, + 0x41, 0xe4, 0x3a, 0xad, 0x5a, 0xa7, 0xd1, 0xa0, 0x61, 0x58, 0x2e, 0x5e, 0x29, 0x5c, 0x1f, 0x59, + 0xb8, 0x76, 0x7c, 0x54, 0xa9, 0x38, 0xac, 0xb8, 0xde, 0xe6, 0xe5, 0xf5, 0x90, 0x23, 0x68, 0x8c, + 0xb2, 0xe8, 0xad, 0x3f, 0x1b, 0x82, 0xd2, 0x8a, 0x1f, 0x46, 0x8b, 0x6c, 0x44, 0x6d, 0xfa, 0xe3, + 0x0e, 0x0d, 0x23, 0x72, 0x0d, 0x86, 0x18, 0x6c, 0x75, 0xa9, 0x5c, 0xb8, 0x52, 0xb8, 0x3e, 0xba, + 0x30, 0x76, 0x7c, 0x54, 0x19, 0x3e, 0xf0, 0xc3, 0xa8, 0xee, 0x36, 0x6d, 0x51, 0x44, 0xde, 0x82, + 0x91, 0x0d, 0xbf, 0x49, 0x37, 0x9c, 0x43, 0x8a, 0xad, 0x18, 0x5d, 0x98, 0x38, 0x3e, 0xaa, 0x8c, + 0x7a, 0x7e, 0x93, 0xd6, 0x3d, 0xe7, 0x90, 0xda, 0xaa, 0x98, 0xec, 0xc2, 0x80, 0xed, 0xb7, 0x68, + 0xb9, 0x1f, 0xd1, 0x16, 0x8e, 0x8f, 0x2a, 0x03, 0x81, 0xdf, 0xa2, 0xbf, 0x38, 0xaa, 0xbc, 0xb7, + 0xef, 0x46, 0x07, 0x9d, 0xbd, 0x9b, 0x0d, 0xff, 0xf0, 0xd6, 0x7e, 0xe0, 0x3c, 0x75, 0xf9, 0x24, + 0x74, 0x5a, 0xb7, 0xe2, 0xa9, 0xda, 0x76, 0xc5, 0xb8, 0xd7, 0x9e, 0x87, 0x11, 0x3d, 0x64, 0x9c, + 0x6c, 0xe4, 0x47, 0x1e, 0xc1, 0x74, 0xb5, 0xd9, 0x74, 0x39, 0xc5, 0x56, 0xe0, 0x7a, 0x0d, 0xb7, + 0xed, 0xb4, 0xc2, 0xf2, 0xc0, 0x95, 0xfe, 0xeb, 0xa3, 0x42, 0x28, 0xaa, 0xbc, 0xde, 0x56, 0x08, + 0x9a, 0x50, 0x32, 0x19, 0x90, 0xbb, 0x30, 0xb2, 0xb4, 0x51, 0x63, 0x6d, 0x0f, 0xcb, 0x83, 0xc8, + 0x6c, 0xf6, 0xf8, 0xa8, 0x32, 0xd5, 0xf4, 0x42, 0xec, 0x9a, 0xce, 0x40, 0x21, 0x92, 0xf7, 0x60, + 0x7c, 0xab, 0xb3, 0xd7, 0x72, 0x1b, 0xdb, 0x6b, 0xb5, 0x87, 0xf4, 0x79, 0x79, 0xe8, 0x4a, 0xe1, + 0xfa, 0xf8, 0x02, 0x39, 0x3e, 0xaa, 0x4c, 0xb6, 0x11, 0x5e, 0x8f, 0x5a, 0x61, 0xfd, 0x09, 0x7d, + 0x6e, 0x1b, 0x78, 0x31, 0x5d, 0xad, 0xb6, 0xc2, 0xe8, 0x86, 0x53, 0x74, 0x61, 0x78, 0xa0, 0xd3, + 0x71, 0x3c, 0x72, 0x0b, 0xc0, 0xa6, 0x87, 0x7e, 0x44, 0xab, 0xcd, 0x66, 0x50, 0x1e, 0x41, 0xd9, + 0x9e, 0x39, 0x3e, 0xaa, 0x8c, 0x05, 0x08, 0xad, 0x3b, 0xcd, 0x66, 0x60, 0x6b, 0x28, 0x64, 0x11, + 0x46, 0x6c, 0x9f, 0x0b, 0xb8, 0x3c, 0x7a, 0xa5, 0x70, 0x7d, 0x6c, 0xfe, 0x8c, 0x98, 0x86, 0x12, + 0xbc, 0x70, 0xee, 0xf8, 0xa8, 0x42, 0x02, 0xf1, 0x4b, 0xef, 0xa5, 0xc4, 0x20, 0x15, 0x18, 0xde, + 0xf0, 0x17, 0x9d, 0xc6, 0x01, 0x2d, 0x03, 0xce, 0xbd, 0xc1, 0xe3, 0xa3, 0x4a, 0xe1, 0xbb, 0xb6, + 0x84, 0x92, 0xa7, 0x30, 0x16, 0x0f, 0x54, 0x58, 0x1e, 0x43, 0xf1, 0x6d, 0x1f, 0x1f, 0x55, 0xce, + 0x85, 0x08, 0xae, 0xb3, 0xa1, 0xd7, 0x24, 0xf8, 0x12, 0xb3, 0x40, 0xaf, 0x88, 0x7c, 0x0d, 0x33, + 0xf1, 0xcf, 0x6a, 0x18, 0xd2, 0x80, 0xf1, 0x58, 0x5d, 0x2a, 0x4f, 0xa0, 0x64, 0xde, 0x38, 0x3e, + 0xaa, 0x58, 0x5a, 0x0b, 0xea, 0x8e, 0x44, 0xa9, 0xbb, 0x4d, 0xad, 0xa7, 0xd9, 0x4c, 0x1e, 0x0c, + 0x8c, 0x8c, 0x97, 0x26, 0xec, 0x4b, 0x3b, 0x5e, 0x18, 0x39, 0x7b, 0x2d, 0x9a, 0x89, 0x64, 0xfd, + 0x6d, 0x01, 0xc8, 0x66, 0x9b, 0x7a, 0xb5, 0xda, 0x0a, 0xfb, 0x9e, 0xe4, 0xe7, 0xf4, 0x36, 0x8c, + 0xf2, 0x81, 0x63, 0xa3, 0x5b, 0xc4, 0xd1, 0x9d, 0x3c, 0x3e, 0xaa, 0x80, 0x18, 0x5d, 0x36, 0xb2, + 0x31, 0x02, 0x79, 0x1d, 0xfa, 0xb7, 0xb7, 0xd7, 0xf0, 0x5b, 0xe9, 0x5f, 0x98, 0x3a, 0x3e, 0xaa, + 0xf4, 0x47, 0x51, 0xeb, 0x17, 0x47, 0x95, 0x91, 0xa5, 0x4e, 0x80, 0x62, 0xb1, 0x59, 0x39, 0x79, + 0x1d, 0x86, 0x17, 0x5b, 0x9d, 0x30, 0xa2, 0x41, 0x79, 0x20, 0xfe, 0x48, 0x1b, 0x1c, 0x64, 0xcb, + 0x32, 0xf2, 0x1d, 0x18, 0xd8, 0x09, 0x69, 0x50, 0x1e, 0xc4, 0xf1, 0x9e, 0x10, 0xe3, 0xcd, 0x40, + 0xbb, 0xf3, 0x0b, 0x23, 0xec, 0x4b, 0xec, 0x84, 0x34, 0xb0, 0x11, 0x89, 0xdc, 0x84, 0x41, 0x3e, + 0x68, 0x43, 0xb8, 0x48, 0x4d, 0xa8, 0xd9, 0xd1, 0xa2, 0xbb, 0xef, 0x2d, 0x8c, 0x1e, 0x1f, 0x55, + 0x06, 0x71, 0xf0, 0x6c, 0x8e, 0xf6, 0x60, 0x60, 0xa4, 0x50, 0x2a, 0xda, 0x23, 0x8c, 0x96, 0x7d, + 0x16, 0xd6, 0x77, 0x60, 0x4c, 0xeb, 0x3e, 0xb9, 0x08, 0x03, 0xec, 0x7f, 0x5c, 0x44, 0xc6, 0x79, + 0x65, 0x6c, 0xe3, 0xb0, 0x11, 0x6a, 0xfd, 0xc3, 0x29, 0x28, 0x31, 0x4a, 0x63, 0xe5, 0xb9, 0xa9, + 0x8b, 0x8a, 0xd3, 0x95, 0x4c, 0x51, 0x95, 0x0b, 0xba, 0xb0, 0xae, 0x83, 0xaa, 0x5d, 0x2c, 0x42, + 0xe3, 0xc7, 0x47, 0x95, 0x91, 0x8e, 0x80, 0xc5, 0x6d, 0x23, 0x35, 0x18, 0x5e, 0xfe, 0xa6, 0xed, + 0x06, 0x34, 0x44, 0xd1, 0x8e, 0xcd, 0xcf, 0xdd, 0xe4, 0xdb, 0xe5, 0x4d, 0xb9, 0x5d, 0xde, 0xdc, + 0x96, 0xdb, 0xe5, 0xc2, 0x25, 0xb1, 0x18, 0x9f, 0xa5, 0x9c, 0x24, 0x9e, 0x1f, 0xbf, 0xf3, 0xd7, + 0x95, 0x82, 0x2d, 0x39, 0x91, 0xb7, 0x61, 0xe8, 0x9e, 0x1f, 0x1c, 0x3a, 0x91, 0x18, 0x83, 0xe9, + 0xe3, 0xa3, 0x4a, 0xe9, 0x31, 0x42, 0xb4, 0x29, 0x25, 0x70, 0xc8, 0x3d, 0x98, 0xb4, 0xfd, 0x4e, + 0x44, 0xb7, 0x7d, 0x39, 0x72, 0x83, 0x48, 0x75, 0xf9, 0xf8, 0xa8, 0x32, 0x17, 0xb0, 0x92, 0x7a, + 0xe4, 0xd7, 0xc5, 0x10, 0x6a, 0xf4, 0x09, 0x2a, 0xb2, 0x0c, 0x93, 0x55, 0x5c, 0xbd, 0x85, 0xd4, + 0xf8, 0x78, 0x8d, 0x2e, 0x5c, 0x3a, 0x3e, 0xaa, 0x9c, 0x77, 0xb0, 0xa4, 0x1e, 0x88, 0x22, 0x9d, + 0x8d, 0x49, 0x44, 0x36, 0xe0, 0xec, 0xc3, 0xce, 0x1e, 0x0d, 0x3c, 0x1a, 0xd1, 0x50, 0xb6, 0x68, + 0x18, 0x5b, 0x74, 0xe5, 0xf8, 0xa8, 0x72, 0xf1, 0x89, 0x2a, 0xcc, 0x68, 0x53, 0x9a, 0x94, 0x50, + 0x38, 0x23, 0x1a, 0xba, 0xe4, 0x44, 0xce, 0x9e, 0x13, 0x52, 0x5c, 0x94, 0xc6, 0xe6, 0xcf, 0x71, + 0x11, 0xdf, 0x4c, 0x94, 0x2e, 0x5c, 0x13, 0x52, 0xbe, 0xa0, 0xfa, 0xde, 0x14, 0x45, 0x5a, 0x45, + 0x49, 0x9e, 0x6c, 0x6d, 0x56, 0xfb, 0xce, 0x28, 0xb6, 0x16, 0xd7, 0x66, 0xb5, 0xef, 0xe8, 0xab, + 0x96, 0xda, 0x81, 0xd6, 0x60, 0x70, 0x87, 0xed, 0xce, 0xb8, 0x66, 0x4d, 0xce, 0x5f, 0x15, 0x2d, + 0x4a, 0xce, 0xbf, 0x9b, 0xec, 0x07, 0x22, 0xe2, 0x97, 0x77, 0x06, 0x77, 0x74, 0x7d, 0x2f, 0xc6, + 0x32, 0xf2, 0x39, 0x80, 0x68, 0x55, 0xb5, 0xdd, 0x2e, 0x8f, 0x61, 0x27, 0xcf, 0x9a, 0x9d, 0xac, + 0xb6, 0xdb, 0x0b, 0x97, 0x45, 0xff, 0xce, 0xa9, 0xfe, 0x39, 0xed, 0xb6, 0xc6, 0x4d, 0x63, 0x42, + 0x3e, 0x85, 0x71, 0x5c, 0xd2, 0xe4, 0x88, 0x8e, 0xe3, 0x88, 0x5e, 0x38, 0x3e, 0xaa, 0xcc, 0xe2, + 0x6a, 0x95, 0x31, 0x9e, 0x06, 0x01, 0xf9, 0x0d, 0x98, 0x11, 0xec, 0x1e, 0xb9, 0x5e, 0xd3, 0x7f, + 0x16, 0x2e, 0xd1, 0xf0, 0x49, 0xe4, 0xb7, 0x71, 0xf9, 0x1b, 0x9b, 0xbf, 0x68, 0x36, 0xcf, 0xc4, + 0x59, 0xb8, 0x21, 0x5a, 0x6a, 0xa9, 0x96, 0x3e, 0xe3, 0x08, 0xf5, 0x26, 0xc7, 0xd0, 0x17, 0xc8, + 0x4c, 0x16, 0x64, 0x15, 0xce, 0xec, 0x84, 0xd4, 0xe8, 0xc3, 0x24, 0xee, 0x0f, 0x15, 0x36, 0xc2, + 0x9d, 0x90, 0xd6, 0xf3, 0xfa, 0x91, 0xa4, 0x23, 0x36, 0x90, 0xa5, 0xc0, 0x6f, 0x27, 0xe6, 0xf8, + 0x19, 0x94, 0x88, 0x75, 0x7c, 0x54, 0xb9, 0xdc, 0x0c, 0xfc, 0x76, 0x3d, 0x7f, 0xa2, 0x67, 0x50, + 0x93, 0x1f, 0xc2, 0xb9, 0x45, 0xdf, 0xf3, 0x68, 0x83, 0xad, 0xa0, 0x4b, 0xae, 0xb3, 0xef, 0xf9, + 0x61, 0xe4, 0x36, 0x56, 0x97, 0xca, 0xa5, 0x78, 0x7b, 0x68, 0x28, 0x8c, 0x7a, 0x53, 0xa1, 0x98, + 0xdb, 0x43, 0x0e, 0x17, 0xf2, 0x03, 0x98, 0x10, 0x75, 0xd1, 0x00, 0xa7, 0xe6, 0xd9, 0xee, 0x13, + 0x4d, 0x21, 0xf3, 0x8d, 0x3e, 0x90, 0x3f, 0xb9, 0xea, 0x64, 0xf2, 0x22, 0x5f, 0xc3, 0xd8, 0xfa, + 0xbd, 0xaa, 0x4d, 0xc3, 0xb6, 0xef, 0x85, 0xb4, 0x4c, 0x70, 0x44, 0x2f, 0x0b, 0xd6, 0xeb, 0xf7, + 0xaa, 0xd5, 0x4e, 0x74, 0x40, 0xbd, 0xc8, 0x6d, 0x38, 0x11, 0x95, 0x58, 0x0b, 0x73, 0x6c, 0xe6, + 0x1d, 0x3e, 0x76, 0xea, 0x81, 0x80, 0x68, 0xbd, 0xd0, 0xd9, 0x91, 0x39, 0x18, 0xa9, 0xd5, 0x56, + 0xd6, 0xfc, 0x7d, 0xd7, 0x2b, 0x4f, 0x31, 0x61, 0xd8, 0xea, 0x37, 0x79, 0x0c, 0x33, 0xda, 0xd9, + 0xa0, 0xce, 0xfe, 0xa7, 0x87, 0xd4, 0x8b, 0xca, 0xd3, 0xd8, 0x86, 0xef, 0xaa, 0xc3, 0xcd, 0x4d, + 0xfd, 0x08, 0xf1, 0xf4, 0xce, 0xcd, 0x6a, 0xfc, 0xb3, 0x26, 0x89, 0x16, 0x8a, 0xe5, 0x82, 0x3d, + 0xed, 0x64, 0x94, 0x90, 0x6d, 0x18, 0xde, 0xea, 0x04, 0x6d, 0x3f, 0xa4, 0xe5, 0x19, 0x14, 0xdc, + 0xb5, 0x6e, 0x5f, 0xa8, 0x40, 0x5d, 0x98, 0x61, 0x4b, 0x74, 0x9b, 0xff, 0xd0, 0x7a, 0x27, 0x59, + 0x91, 0xcf, 0x60, 0xbc, 0x56, 0x5b, 0x89, 0x37, 0x94, 0x73, 0xb8, 0xa1, 0x5c, 0x3c, 0x3e, 0xaa, + 0x94, 0x99, 0x4a, 0x15, 0x6f, 0x2a, 0xfa, 0x57, 0xa5, 0x53, 0x30, 0x0e, 0xdb, 0x6b, 0xb5, 0x98, + 0xc3, 0x6c, 0xcc, 0x81, 0x29, 0x73, 0xd9, 0x1c, 0x74, 0x0a, 0xf2, 0xcf, 0x0a, 0x70, 0x45, 0x67, + 0x99, 0x25, 0x98, 0xf2, 0xf9, 0x17, 0x91, 0xe6, 0xfc, 0xf1, 0x51, 0xe5, 0xa6, 0xd9, 0x8f, 0x7a, + 0xe6, 0x60, 0x69, 0x6d, 0xeb, 0xd9, 0x14, 0x6c, 0xaf, 0xde, 0x81, 0xcc, 0xf6, 0xce, 0xbd, 0x70, + 0x7b, 0x4d, 0xa9, 0xf5, 0x6e, 0x6f, 0xaf, 0xa6, 0x58, 0x5f, 0xc0, 0xa8, 0x5a, 0xb4, 0xc9, 0x30, + 0xf4, 0x57, 0x5b, 0xad, 0x52, 0x1f, 0xfb, 0xa3, 0x56, 0x5b, 0x29, 0x15, 0xc8, 0x24, 0x40, 0xbc, + 0x53, 0x95, 0x8a, 0x64, 0x1c, 0x46, 0xe4, 0x4e, 0x52, 0xea, 0x47, 0xfc, 0x76, 0xbb, 0x34, 0x40, + 0x08, 0x4c, 0x9a, 0xeb, 0x59, 0x69, 0xd0, 0xfa, 0xdd, 0x02, 0x8c, 0xaa, 0xef, 0x90, 0x9c, 0x81, + 0xb1, 0x9d, 0x8d, 0xda, 0xd6, 0xf2, 0xe2, 0xea, 0xbd, 0xd5, 0xe5, 0xa5, 0x52, 0x1f, 0xb9, 0x04, + 0xe7, 0xb7, 0x6b, 0x2b, 0xf5, 0xa5, 0x85, 0xfa, 0xda, 0xe6, 0x62, 0x75, 0xad, 0xbe, 0x65, 0x6f, + 0x7e, 0xf1, 0x65, 0x7d, 0x7b, 0x67, 0x63, 0x63, 0x79, 0xad, 0x54, 0x20, 0x65, 0x98, 0x66, 0xc5, + 0x0f, 0x77, 0x16, 0x96, 0x75, 0x84, 0x52, 0x91, 0x5c, 0x85, 0x4b, 0x59, 0x25, 0xf5, 0x95, 0xe5, + 0xea, 0xd2, 0xda, 0x72, 0xad, 0x56, 0xea, 0x27, 0xb3, 0x30, 0xc5, 0x50, 0xaa, 0x5b, 0x5b, 0x06, + 0xed, 0x80, 0xd5, 0x82, 0x31, 0xed, 0x03, 0x20, 0x17, 0xa1, 0xbc, 0xb8, 0x6c, 0x6f, 0xd7, 0xb7, + 0x76, 0xec, 0xad, 0xcd, 0xda, 0x72, 0xdd, 0x6c, 0x61, 0xb2, 0x74, 0x6d, 0xf3, 0xfe, 0xea, 0x46, + 0x9d, 0x81, 0x6a, 0xa5, 0x02, 0x6b, 0x86, 0x51, 0x5a, 0x5b, 0xdd, 0xb8, 0xbf, 0xb6, 0x5c, 0xdf, + 0xa9, 0x2d, 0x0b, 0x94, 0xa2, 0xf5, 0xd3, 0x62, 0x6a, 0x4b, 0x27, 0xf3, 0x30, 0x56, 0xe3, 0xf6, + 0x0a, 0x5c, 0xe6, 0xf8, 0x01, 0x91, 0xe9, 0x68, 0xe3, 0xc2, 0x8c, 0xc1, 0x57, 0x30, 0x1d, 0x89, + 0x69, 0x69, 0x5b, 0xec, 0x6b, 0x6e, 0xf8, 0x2d, 0x5d, 0x4b, 0x6b, 0x0b, 0x98, 0xad, 0x4a, 0xc9, + 0xbc, 0xa6, 0xcf, 0xf1, 0xd3, 0x22, 0x9e, 0x48, 0xa4, 0x3e, 0xa7, 0xef, 0xed, 0x4a, 0xb3, 0x9b, + 0x8f, 0x87, 0x54, 0xa8, 0x61, 0x48, 0x93, 0xa1, 0x4b, 0x28, 0x3c, 0xf2, 0x96, 0xd4, 0x74, 0xf9, + 0xe9, 0x0e, 0x37, 0xfb, 0xc4, 0xb9, 0x44, 0x28, 0xb9, 0x56, 0x27, 0x67, 0x63, 0x25, 0x1f, 0x25, + 0xe7, 0x8c, 0x10, 0x06, 0x32, 0x4b, 0xec, 0x9f, 0x76, 0x02, 0x95, 0x54, 0x60, 0x90, 0xaf, 0xb8, + 0x5c, 0x1e, 0xa8, 0x5b, 0xb7, 0x18, 0xc0, 0xe6, 0x70, 0xeb, 0x4f, 0xfa, 0x75, 0x25, 0x83, 0xe9, + 0xd2, 0x9a, 0xbc, 0x51, 0x97, 0x46, 0x39, 0x23, 0x94, 0xa9, 0xcd, 0x35, 0x1a, 0x86, 0xfc, 0xbc, + 0x53, 0x54, 0x43, 0x02, 0x21, 0x07, 0xd6, 0xdd, 0x26, 0x53, 0x9b, 0x15, 0x0a, 0x3b, 0x3a, 0xf2, + 0xaf, 0x0a, 0x8f, 0x8e, 0xfd, 0xf1, 0xd1, 0x51, 0x7c, 0x9a, 0xfc, 0xe8, 0x18, 0xa3, 0xb0, 0x51, + 0x17, 0x6a, 0x1e, 0xb6, 0x62, 0x20, 0x1e, 0x75, 0xa1, 0x1a, 0x8a, 0x51, 0xd7, 0x90, 0xc8, 0x87, + 0x00, 0xd5, 0x47, 0x35, 0x3c, 0x23, 0xd9, 0x1b, 0x42, 0xd5, 0xc5, 0x4d, 0xc9, 0x79, 0x16, 0x8a, + 0x23, 0x58, 0xa0, 0x9f, 0x31, 0x35, 0x6c, 0xb2, 0x00, 0x13, 0xd5, 0x9f, 0x74, 0x02, 0xba, 0xda, + 0x64, 0xfb, 0x5a, 0xc4, 0x0f, 0xd3, 0xa3, 0x7c, 0xe1, 0x75, 0x58, 0x41, 0xdd, 0x15, 0x25, 0x1a, + 0x03, 0x93, 0x84, 0x6c, 0xc2, 0xd9, 0xfb, 0x8b, 0x5b, 0x62, 0x1e, 0x56, 0x1b, 0x0d, 0xbf, 0xe3, + 0x45, 0x42, 0xbf, 0xbd, 0x7a, 0x7c, 0x54, 0xb9, 0xb4, 0xdf, 0x68, 0xd7, 0xe5, 0x9c, 0x75, 0x78, + 0xb1, 0xae, 0xe0, 0xa6, 0x68, 0xc9, 0x35, 0xe8, 0xdf, 0xb1, 0x57, 0xc5, 0x49, 0xfb, 0xec, 0xf1, + 0x51, 0x65, 0xa2, 0x13, 0xb8, 0x1a, 0x09, 0x2b, 0xb5, 0x5a, 0x30, 0x79, 0x9f, 0x46, 0x6c, 0x72, + 0xca, 0x33, 0x4d, 0xf7, 0xa1, 0xfb, 0x18, 0xc6, 0x1e, 0xb9, 0xd1, 0x41, 0x8d, 0x36, 0x02, 0x1a, + 0x49, 0x7b, 0x0e, 0x8a, 0xe9, 0x99, 0x1b, 0x1d, 0xd4, 0x43, 0x0e, 0xd7, 0xf7, 0x6e, 0x0d, 0xdd, + 0x5a, 0x86, 0x33, 0xa2, 0x36, 0x75, 0x84, 0x9a, 0x37, 0x19, 0x16, 0x90, 0x21, 0x0e, 0x95, 0xce, + 0xd0, 0x64, 0xf3, 0x27, 0x45, 0x98, 0x59, 0x3c, 0x70, 0xbc, 0x7d, 0xba, 0xe5, 0x84, 0xe1, 0x33, + 0x3f, 0x68, 0x6a, 0x8d, 0xc7, 0xf3, 0x63, 0xaa, 0xf1, 0x78, 0x60, 0x9c, 0x87, 0xb1, 0xcd, 0x56, + 0x53, 0xd2, 0x88, 0xb3, 0x2d, 0xd6, 0xe5, 0xb7, 0x9a, 0xf5, 0xb6, 0xe4, 0xa5, 0x23, 0x31, 0x9a, + 0x0d, 0xfa, 0x4c, 0xd1, 0xf4, 0xc7, 0x34, 0x1e, 0x7d, 0xa6, 0xd1, 0x68, 0x48, 0x64, 0x19, 0xce, + 0xd6, 0x68, 0xc3, 0xf7, 0x9a, 0xf7, 0x9c, 0x46, 0xe4, 0x07, 0xdb, 0xfe, 0x13, 0xea, 0x89, 0x49, + 0x88, 0xca, 0x7f, 0x88, 0x85, 0xf5, 0xc7, 0x58, 0x5a, 0x8f, 0x58, 0xb1, 0x9d, 0xa6, 0x20, 0x9b, + 0x30, 0xf2, 0x48, 0x58, 0x05, 0xc5, 0x81, 0xf8, 0xf5, 0x9b, 0xca, 0x4c, 0xb8, 0x18, 0x50, 0x9c, + 0x39, 0x4e, 0x4b, 0x1d, 0xe9, 0x95, 0x2e, 0x85, 0xcb, 0x95, 0xc4, 0xb4, 0x15, 0x13, 0x6b, 0x07, + 0x26, 0xb6, 0x5a, 0x9d, 0x7d, 0xd7, 0x63, 0x0b, 0x4b, 0x8d, 0xfe, 0x98, 0x2c, 0x01, 0xc4, 0x00, + 0x61, 0xeb, 0x9b, 0x12, 0xc7, 0xe8, 0xb8, 0x60, 0xf7, 0xae, 0xf8, 0xda, 0x10, 0x82, 0xa7, 0x1e, + 0x5b, 0xa3, 0xb3, 0xfe, 0x67, 0x3f, 0x10, 0x31, 0x00, 0xb8, 0xd1, 0xd5, 0x68, 0xc4, 0xb6, 0xa0, + 0x73, 0x50, 0x54, 0x26, 0xb9, 0xa1, 0xe3, 0xa3, 0x4a, 0xd1, 0x6d, 0xda, 0xc5, 0xd5, 0x25, 0xf2, + 0x0e, 0x0c, 0x22, 0x1a, 0xca, 0x7f, 0x52, 0xd5, 0xa7, 0x73, 0xe0, 0x0b, 0x0c, 0xee, 0xb0, 0x36, + 0x47, 0x26, 0xef, 0xc2, 0xe8, 0x12, 0x6d, 0xd1, 0x7d, 0x27, 0xf2, 0xe5, 0x12, 0xc0, 0x8d, 0x5c, + 0x12, 0xa8, 0xcd, 0xb9, 0x18, 0x93, 0x1d, 0x79, 0x6d, 0xea, 0x84, 0xbe, 0xa7, 0x1f, 0x79, 0x03, + 0x84, 0xe8, 0x47, 0x5e, 0x8e, 0x43, 0x7e, 0xaf, 0x00, 0x63, 0x55, 0xcf, 0x13, 0xc6, 0xa3, 0x50, + 0x48, 0x7d, 0xe6, 0xa6, 0xb2, 0xb6, 0xae, 0x39, 0x7b, 0xb4, 0xb5, 0xeb, 0xb4, 0x3a, 0x34, 0x5c, + 0xf8, 0x9a, 0x9d, 0x42, 0xfe, 0xc3, 0x51, 0xe5, 0xa3, 0x53, 0x98, 0x83, 0x62, 0xbb, 0xed, 0x76, + 0xe0, 0xb8, 0x51, 0x78, 0x7c, 0x54, 0x99, 0x71, 0xe2, 0x0a, 0xf5, 0xef, 0x46, 0x6b, 0x47, 0xbc, + 0xfe, 0x0f, 0xf5, 0x5a, 0xff, 0xc9, 0x21, 0x9c, 0xa9, 0x86, 0x61, 0xe7, 0x90, 0xd6, 0x22, 0x27, + 0x88, 0xb6, 0xdd, 0x43, 0x8a, 0x8b, 0x48, 0x77, 0x03, 0xc2, 0x9b, 0x3f, 0x3b, 0xaa, 0x14, 0xd8, + 0xc1, 0xc7, 0x41, 0x52, 0xa6, 0xdb, 0x04, 0x51, 0x3d, 0x72, 0xf5, 0x2d, 0x0c, 0x4d, 0x09, 0x49, + 0xde, 0xd6, 0x35, 0xa5, 0x74, 0xac, 0x2e, 0xe5, 0x8d, 0xb8, 0xb5, 0x08, 0x17, 0xef, 0xd3, 0xc8, + 0xa6, 0x21, 0x8d, 0xe4, 0x37, 0x82, 0x33, 0x3c, 0x36, 0xe0, 0x0e, 0xe3, 0x6f, 0x45, 0x8c, 0xc3, + 0xcf, 0xbf, 0x0b, 0x59, 0x62, 0xfd, 0x5f, 0x05, 0xa8, 0x2c, 0x06, 0x94, 0x9f, 0x19, 0x72, 0x18, + 0x75, 0x5f, 0xbb, 0x2e, 0xc2, 0xc0, 0xf6, 0xf3, 0xb6, 0xb4, 0xbc, 0x60, 0x29, 0x1b, 0x14, 0x1b, + 0xa1, 0x27, 0x34, 0x64, 0x59, 0x8f, 0x61, 0xc6, 0xa6, 0x1e, 0x7d, 0xe6, 0xec, 0xb5, 0xa8, 0x61, + 0x0b, 0xaa, 0xc0, 0x20, 0xff, 0xd0, 0x53, 0x5d, 0xe0, 0xf0, 0xd3, 0xd9, 0xd5, 0xac, 0x09, 0x18, + 0xdb, 0x72, 0xbd, 0x7d, 0xc1, 0xdd, 0xfa, 0xe3, 0x7e, 0x18, 0xe7, 0xbf, 0xc5, 0x31, 0x28, 0xb1, + 0xc5, 0x15, 0x4e, 0xb2, 0xc5, 0xbd, 0x0f, 0x13, 0x6c, 0x8f, 0xa0, 0xc1, 0x2e, 0x0d, 0xd8, 0xd6, + 0x2a, 0x24, 0x81, 0x47, 0xba, 0x10, 0x0b, 0xea, 0x4f, 0x79, 0x89, 0x6d, 0x22, 0x92, 0x35, 0x98, + 0xe4, 0x80, 0x7b, 0xd4, 0x89, 0x3a, 0xb1, 0x55, 0xea, 0x8c, 0x38, 0xf7, 0x48, 0x30, 0x9f, 0x9a, + 0x82, 0xd7, 0x63, 0x01, 0xb4, 0x13, 0xb4, 0xe4, 0x53, 0x38, 0xb3, 0x15, 0xf8, 0xdf, 0x3c, 0xd7, + 0x36, 0x75, 0xfe, 0x75, 0xf2, 0x13, 0x12, 0x2b, 0xaa, 0xeb, 0x5b, 0x7b, 0x12, 0x9b, 0xbc, 0x05, + 0x23, 0xab, 0xe1, 0x82, 0x1f, 0xb8, 0xde, 0x3e, 0x7e, 0xa3, 0x23, 0xdc, 0x98, 0xef, 0x86, 0xf5, + 0x3d, 0x04, 0xda, 0xaa, 0x38, 0x61, 0x76, 0x1e, 0xee, 0x6d, 0x76, 0xbe, 0x0d, 0xb0, 0xe6, 0x3b, + 0xcd, 0x6a, 0xab, 0xb5, 0x58, 0x0d, 0x71, 0xf7, 0x14, 0xfb, 0x51, 0xcb, 0x77, 0x9a, 0x75, 0xa7, + 0xd5, 0xaa, 0x37, 0x9c, 0xd0, 0xd6, 0x70, 0x1e, 0x0c, 0x8c, 0x0c, 0x95, 0x86, 0xed, 0x33, 0x6b, + 0x6e, 0x83, 0x7a, 0x21, 0x7d, 0xe4, 0x04, 0x9e, 0xeb, 0xed, 0x87, 0xd6, 0x3f, 0x3f, 0x0b, 0x23, + 0xaa, 0xcb, 0x37, 0x75, 0xc5, 0x5e, 0xec, 0x72, 0x38, 0xfa, 0xb1, 0xd9, 0xca, 0xd6, 0x30, 0xc8, + 0x79, 0x54, 0xf5, 0xc5, 0xfe, 0x3a, 0xcc, 0x66, 0xa3, 0xd3, 0x6e, 0xdb, 0x0c, 0xc6, 0xbe, 0xb2, + 0xa5, 0x05, 0x94, 0xff, 0x08, 0xff, 0xca, 0x9a, 0x7b, 0x76, 0x71, 0x69, 0x81, 0x4d, 0xef, 0xcd, + 0xd5, 0xa5, 0x45, 0x14, 0xe5, 0x08, 0x9f, 0xde, 0xbe, 0xdb, 0x6c, 0xd8, 0x08, 0x65, 0xa5, 0xb5, + 0xea, 0xfa, 0x9a, 0x10, 0x17, 0x96, 0x86, 0xce, 0x61, 0xcb, 0x46, 0x28, 0x53, 0x0e, 0xb9, 0x05, + 0x62, 0xd1, 0xf7, 0xa2, 0xc0, 0x6f, 0x85, 0xa8, 0xc1, 0x8c, 0xf0, 0xe1, 0x14, 0xa6, 0x8b, 0x86, + 0x28, 0xb2, 0x13, 0xa8, 0xe4, 0x11, 0xcc, 0x56, 0x9b, 0x4f, 0x1d, 0xaf, 0x41, 0x9b, 0xbc, 0xe4, + 0x91, 0x1f, 0x3c, 0x79, 0xdc, 0xf2, 0x9f, 0x85, 0x28, 0xef, 0x11, 0x61, 0xe9, 0x13, 0x28, 0xd2, + 0x12, 0xf2, 0x4c, 0x22, 0xd9, 0x79, 0xd4, 0xec, 0x93, 0x5a, 0x6c, 0xf9, 0x9d, 0xa6, 0x18, 0x05, + 0xfc, 0xa4, 0x1a, 0x0c, 0x60, 0x73, 0x38, 0x93, 0xd2, 0x4a, 0x6d, 0x1d, 0xed, 0x6a, 0x42, 0x4a, + 0x07, 0xe1, 0xa1, 0xcd, 0x60, 0xe4, 0x75, 0x18, 0x96, 0x7a, 0x2e, 0x37, 0xfc, 0xa3, 0xc1, 0x59, + 0xea, 0xb7, 0xb2, 0x8c, 0x7d, 0x12, 0x36, 0x6d, 0xf8, 0x4f, 0x69, 0xf0, 0x7c, 0xd1, 0x6f, 0x52, + 0x69, 0x05, 0x12, 0x56, 0x0e, 0x5e, 0x50, 0x6f, 0xb0, 0x12, 0xdb, 0x44, 0x64, 0x15, 0xf0, 0x3d, + 0x30, 0x2c, 0x9f, 0x89, 0x2b, 0xe0, 0x7b, 0x64, 0x68, 0xcb, 0x32, 0xb2, 0x04, 0x67, 0xab, 0x9d, + 0xc8, 0x3f, 0x74, 0x22, 0xb7, 0xb1, 0xd3, 0xde, 0x0f, 0x1c, 0x56, 0x49, 0x09, 0x09, 0x50, 0xef, + 0x77, 0x64, 0x61, 0xbd, 0x23, 0x4a, 0xed, 0x34, 0x01, 0x79, 0x0f, 0xc6, 0x57, 0x43, 0x6e, 0xe9, + 0x73, 0x42, 0xda, 0x44, 0x73, 0x8d, 0x68, 0xa5, 0x1b, 0xd6, 0xd1, 0xee, 0x57, 0x67, 0x27, 0x85, + 0xa6, 0x6d, 0xe0, 0x11, 0x0b, 0x86, 0xaa, 0x61, 0xe8, 0x86, 0x11, 0x5a, 0x61, 0x46, 0x16, 0xe0, + 0xf8, 0xa8, 0x32, 0xe4, 0x20, 0xc4, 0x16, 0x25, 0xe4, 0x11, 0x8c, 0x2d, 0x51, 0xa6, 0x38, 0x6e, + 0x07, 0x9d, 0x30, 0x42, 0x9b, 0xca, 0xd8, 0xfc, 0x79, 0xf1, 0x61, 0x6b, 0x25, 0x62, 0x2e, 0x73, + 0x6d, 0xaf, 0x89, 0xf0, 0x7a, 0xc4, 0x0a, 0xf4, 0x5d, 0x4b, 0xc3, 0x67, 0x5a, 0xb1, 0xa0, 0x59, + 0x71, 0x9b, 0xec, 0x53, 0x9d, 0xc6, 0x36, 0xa0, 0x56, 0x2c, 0xd6, 0x86, 0xfa, 0x01, 0x96, 0xe8, + 0x5a, 0xb1, 0x41, 0x42, 0x1a, 0x29, 0xe3, 0xf1, 0x8c, 0x61, 0x20, 0x34, 0x0b, 0x65, 0x13, 0x4f, + 0x69, 0x5a, 0xfe, 0x18, 0xc6, 0x16, 0x3b, 0x61, 0xe4, 0x1f, 0x6e, 0x1f, 0xd0, 0x43, 0x8a, 0x76, + 0x17, 0xa1, 0xfb, 0x37, 0x10, 0x5c, 0x8f, 0x18, 0x5c, 0xef, 0xa6, 0x86, 0x4e, 0x3e, 0x07, 0x22, + 0x95, 0xf8, 0xfb, 0x6c, 0x7e, 0x78, 0x6c, 0x2e, 0xa3, 0xe9, 0x65, 0x84, 0x6b, 0xee, 0x52, 0xf7, + 0xaf, 0xef, 0xab, 0x62, 0xdd, 0xfc, 0x97, 0x26, 0x66, 0x0d, 0xe2, 0x4d, 0xbc, 0x1f, 0x38, 0xed, + 0x83, 0x72, 0x39, 0xd6, 0xb2, 0x45, 0xa7, 0xf6, 0x19, 0xdc, 0xd0, 0x16, 0x62, 0x74, 0x52, 0x03, + 0xe0, 0x3f, 0xd7, 0xd8, 0xc0, 0x73, 0x63, 0x4d, 0xd9, 0x90, 0x17, 0x2b, 0x90, 0xb2, 0x3a, 0x8f, + 0x3a, 0x08, 0x67, 0xdb, 0x72, 0x8d, 0xd1, 0xd4, 0xd8, 0x90, 0x27, 0x50, 0xe2, 0xbf, 0xd6, 0x7d, + 0xcf, 0x8d, 0xf8, 0xd2, 0x3b, 0x67, 0x58, 0xf6, 0x92, 0xc5, 0xb2, 0x02, 0xb4, 0xa8, 0x8a, 0x0a, + 0x0e, 0x55, 0xa9, 0x56, 0x4d, 0x8a, 0x31, 0xd9, 0x82, 0xb1, 0xad, 0xc0, 0x6f, 0x76, 0x1a, 0x11, + 0x6e, 0xd8, 0x17, 0x50, 0x51, 0x24, 0xa2, 0x1e, 0xad, 0x84, 0xcb, 0xa4, 0xcd, 0x01, 0x75, 0xb6, + 0x99, 0xeb, 0x32, 0xd1, 0x10, 0xc9, 0x02, 0x0c, 0x6d, 0xf9, 0x2d, 0xb7, 0xf1, 0xbc, 0x7c, 0x11, + 0x1b, 0x3d, 0x2d, 0x99, 0x21, 0x50, 0x36, 0x15, 0xb5, 0xc3, 0x36, 0x82, 0x74, 0xed, 0x90, 0x23, + 0x91, 0x2a, 0x4c, 0x7c, 0xce, 0x26, 0x8c, 0xeb, 0x7b, 0x9e, 0xe3, 0x06, 0xb4, 0x7c, 0x09, 0xc7, + 0x05, 0xad, 0xde, 0x3f, 0xd6, 0x0b, 0xf4, 0xe9, 0x6c, 0x50, 0x90, 0x55, 0x38, 0xb3, 0x1a, 0xd6, + 0xa2, 0xc0, 0x6d, 0xd3, 0x75, 0xc7, 0x73, 0xf6, 0x69, 0xb3, 0x7c, 0x39, 0x36, 0x3b, 0xbb, 0x61, + 0x3d, 0xc4, 0xb2, 0xfa, 0x21, 0x2f, 0xd4, 0xcd, 0xce, 0x09, 0x3a, 0xf2, 0x05, 0x4c, 0x2f, 0x7f, + 0x13, 0xb1, 0x19, 0xd3, 0xaa, 0x76, 0x9a, 0x6e, 0x54, 0x8b, 0xfc, 0xc0, 0xd9, 0xa7, 0xe5, 0x0a, + 0xf2, 0x7b, 0xed, 0xf8, 0xa8, 0x72, 0x85, 0x8a, 0xf2, 0xba, 0xc3, 0x10, 0xea, 0x21, 0xc7, 0xd0, + 0xaf, 0x93, 0xb3, 0x38, 0x30, 0xe9, 0xd7, 0x3a, 0x6d, 0xa6, 0xb8, 0xa2, 0xf4, 0xaf, 0x18, 0xd2, + 0xd7, 0x4a, 0xb8, 0xf4, 0x43, 0x0e, 0x48, 0x49, 0x5f, 0x43, 0x24, 0x36, 0x90, 0x07, 0xbe, 0xeb, + 0x55, 0x1b, 0x91, 0xfb, 0x94, 0x8a, 0x73, 0x7d, 0x58, 0xbe, 0x8a, 0x2d, 0x45, 0x13, 0xf9, 0xaf, + 0xfa, 0xae, 0x57, 0x77, 0xb0, 0xb8, 0x2e, 0xac, 0x00, 0x86, 0x89, 0x3c, 0x4d, 0x4d, 0x7e, 0x08, + 0xe7, 0xd6, 0xfd, 0x3d, 0xb7, 0x45, 0xf9, 0x92, 0xc3, 0xc5, 0x82, 0xe6, 0x3e, 0x0b, 0xf9, 0xa2, + 0x89, 0xfc, 0x10, 0x31, 0xea, 0x62, 0xb5, 0x3a, 0x54, 0x38, 0xba, 0x89, 0x3c, 0x9b, 0x0b, 0x59, + 0x86, 0x71, 0xfc, 0x2e, 0x5b, 0xf8, 0x33, 0x2c, 0x5f, 0xc3, 0xd3, 0xd1, 0xd5, 0x84, 0xc2, 0x73, + 0x73, 0x59, 0xc3, 0x59, 0xf6, 0xa2, 0xe0, 0xb9, 0x6d, 0x90, 0x91, 0x4f, 0x60, 0x2e, 0x39, 0xbd, + 0x17, 0x7d, 0xef, 0xb1, 0xbb, 0xdf, 0x09, 0x68, 0xb3, 0xfc, 0x1a, 0x6b, 0xaa, 0xdd, 0x05, 0x63, + 0xee, 0x11, 0x9c, 0x4d, 0x55, 0x41, 0x4a, 0xd0, 0xff, 0x44, 0xdc, 0x38, 0x8e, 0xda, 0xec, 0x4f, + 0xf2, 0x36, 0x0c, 0x3e, 0x65, 0xc7, 0x12, 0xd4, 0x18, 0xe2, 0x3b, 0x2c, 0x8d, 0x74, 0xd5, 0x7b, + 0xec, 0xdb, 0x1c, 0xe9, 0xc3, 0xe2, 0xfb, 0x85, 0x07, 0x03, 0x23, 0x63, 0xa5, 0x71, 0x7e, 0x51, + 0xfc, 0x60, 0x60, 0x64, 0xa2, 0x34, 0x69, 0x55, 0xe1, 0x4c, 0x02, 0x9f, 0x94, 0x61, 0x98, 0x7a, + 0x4c, 0xd5, 0x6d, 0x72, 0x9d, 0xc5, 0x96, 0x3f, 0xc9, 0x34, 0x0c, 0xb6, 0xdc, 0x43, 0x37, 0xc2, + 0x0a, 0x07, 0x6d, 0xfe, 0xc3, 0xfa, 0xfd, 0x02, 0x90, 0xf4, 0x96, 0x41, 0x6e, 0x25, 0xd8, 0x70, + 0x45, 0x4f, 0x80, 0x74, 0x53, 0xb8, 0xe4, 0xfe, 0x39, 0x4c, 0xf1, 0x31, 0x93, 0x9b, 0x9b, 0x56, + 0x17, 0x5f, 0x54, 0x33, 0x8a, 0x75, 0x73, 0x88, 0x28, 0xc6, 0xad, 0x70, 0x0d, 0x9b, 0xd6, 0x81, + 0x99, 0xcc, 0xcd, 0x82, 0xac, 0xc3, 0xcc, 0xa1, 0xef, 0x45, 0x07, 0xad, 0xe7, 0x72, 0xaf, 0x10, + 0xb5, 0x15, 0xb0, 0x36, 0x5c, 0x1f, 0x33, 0x11, 0xec, 0x29, 0x01, 0x16, 0x1c, 0xb1, 0x9e, 0x07, + 0x03, 0x23, 0xc5, 0x52, 0xbf, 0xea, 0x89, 0x65, 0xc3, 0xd9, 0xd4, 0x9a, 0x4b, 0xbe, 0x0f, 0xe3, + 0x0d, 0x3c, 0xca, 0x18, 0x35, 0xf1, 0x1d, 0x47, 0x83, 0xeb, 0x9f, 0x13, 0x87, 0xf3, 0xae, 0xfc, + 0x51, 0x01, 0x66, 0x73, 0x56, 0xdb, 0xd3, 0x8b, 0xfa, 0x4b, 0x38, 0x77, 0xe8, 0x7c, 0x53, 0x0f, + 0xf0, 0xa4, 0x5a, 0x0f, 0x1c, 0x2f, 0x21, 0x6d, 0x5c, 0x49, 0xb2, 0x31, 0x74, 0x6f, 0x9d, 0x43, + 0xe7, 0x1b, 0x1b, 0x11, 0x6c, 0x56, 0xce, 0xdb, 0xf9, 0x19, 0x4c, 0x18, 0xeb, 0xeb, 0xa9, 0x1b, + 0x67, 0xdd, 0x81, 0xb3, 0xec, 0x2c, 0x1f, 0xd1, 0x13, 0x5b, 0xa8, 0xac, 0x2d, 0x80, 0x1a, 0x3d, + 0x74, 0xda, 0x07, 0x3e, 0xd3, 0xbb, 0x17, 0xf4, 0x5f, 0xc2, 0xc2, 0x41, 0x84, 0xc5, 0x41, 0x15, + 0xec, 0xde, 0xe5, 0xba, 0x78, 0xa8, 0x30, 0x6d, 0x8d, 0xca, 0xfa, 0xf3, 0x22, 0x10, 0xb1, 0x40, + 0x06, 0xd4, 0x39, 0x94, 0xcd, 0xf8, 0x00, 0xc6, 0xf9, 0x79, 0x94, 0x83, 0xb1, 0x39, 0x63, 0xf3, + 0x53, 0xe2, 0xcb, 0xd3, 0x8b, 0x56, 0xfa, 0x6c, 0x03, 0x95, 0x91, 0xda, 0x94, 0x1f, 0xa4, 0x91, + 0xb4, 0x68, 0x90, 0xea, 0x45, 0x8c, 0x54, 0xff, 0x4d, 0x3e, 0x85, 0xc9, 0x45, 0xff, 0xb0, 0xcd, + 0x64, 0x22, 0x88, 0xfb, 0x85, 0x91, 0x42, 0xd4, 0x6b, 0x14, 0xae, 0xf4, 0xd9, 0x09, 0x74, 0xb2, + 0x01, 0x53, 0xf7, 0x5a, 0x9d, 0xf0, 0xa0, 0xea, 0x35, 0x17, 0x5b, 0x7e, 0x28, 0xb9, 0x0c, 0x08, + 0x23, 0x81, 0x58, 0xde, 0xd2, 0x18, 0x2b, 0x7d, 0x76, 0x16, 0x21, 0x79, 0x1d, 0x06, 0x97, 0x9f, + 0xb2, 0x65, 0x57, 0xfa, 0x6c, 0x08, 0x97, 0xb2, 0x4d, 0x8f, 0x6e, 0x3e, 0x5e, 0xe9, 0xb3, 0x79, + 0xe9, 0xc2, 0x28, 0x0c, 0xcb, 0xb3, 0xec, 0x2d, 0xa6, 0x12, 0x2b, 0x71, 0xd6, 0x22, 0x27, 0xea, + 0x84, 0x64, 0x0e, 0x46, 0x76, 0xda, 0xec, 0x88, 0x25, 0x8d, 0x00, 0xb6, 0xfa, 0x6d, 0xbd, 0x6d, + 0x4a, 0x9a, 0x5c, 0xd4, 0xed, 0xc7, 0x1c, 0x39, 0x06, 0x58, 0x2b, 0xa6, 0x70, 0xbb, 0x63, 0x1b, + 0xf5, 0x16, 0x13, 0xf5, 0x96, 0x92, 0xb2, 0xb6, 0x66, 0x32, 0x85, 0x67, 0x7d, 0x01, 0x97, 0x77, + 0xda, 0x21, 0x0d, 0xa2, 0x6a, 0xbb, 0xdd, 0x72, 0x1b, 0xfc, 0xce, 0x07, 0xcf, 0xbc, 0x72, 0xb2, + 0xbc, 0x07, 0x43, 0x1c, 0x20, 0xa6, 0x89, 0x9c, 0x83, 0xd5, 0x76, 0x5b, 0x9c, 0xb4, 0xef, 0x72, + 0xe5, 0x9c, 0x9f, 0x9d, 0x6d, 0x81, 0x6d, 0xfd, 0x4e, 0x01, 0x2e, 0xf3, 0x2f, 0x20, 0x97, 0xf5, + 0x77, 0x60, 0x14, 0x3d, 0xba, 0xda, 0x4e, 0x43, 0x7e, 0x13, 0xdc, 0xb5, 0x4d, 0x02, 0xed, 0xb8, + 0x5c, 0xf3, 0x95, 0x2b, 0xe6, 0xfb, 0xca, 0xc9, 0x0f, 0xac, 0x3f, 0xf3, 0x03, 0xfb, 0x1c, 0x2c, + 0xd1, 0xa2, 0x56, 0x2b, 0xd5, 0xa8, 0xf0, 0x45, 0x5a, 0x65, 0xfd, 0xd7, 0x22, 0xcc, 0xde, 0xa7, + 0x1e, 0x0d, 0x1c, 0xec, 0xa7, 0x61, 0xd3, 0xd1, 0x7d, 0x66, 0x0a, 0x5d, 0x7d, 0x66, 0x2a, 0xd2, + 0x4a, 0x56, 0x44, 0x2b, 0x59, 0xca, 0x01, 0x88, 0x1d, 0x17, 0x77, 0xec, 0x55, 0xd1, 0x2d, 0x3c, + 0x2e, 0x76, 0x02, 0x17, 0xed, 0xe0, 0x64, 0x35, 0xf6, 0xb7, 0x19, 0xe8, 0x69, 0x2e, 0x9b, 0x12, + 0xfe, 0x07, 0xc3, 0xc2, 0xdf, 0xc6, 0xf4, 0xb2, 0xd9, 0x80, 0x21, 0x6e, 0xdc, 0xc3, 0xdb, 0x9a, + 0xb1, 0xf9, 0x1b, 0xe2, 0x9b, 0xca, 0xe9, 0xa0, 0xb0, 0x04, 0xe2, 0xc6, 0xce, 0xa7, 0x40, 0x84, + 0x00, 0x5b, 0x70, 0x99, 0xfb, 0x1c, 0xc6, 0x34, 0x94, 0x93, 0xec, 0xfd, 0xca, 0xc8, 0xc8, 0x34, + 0x46, 0x6f, 0x9f, 0xdb, 0x2b, 0xb5, 0xbd, 0xdf, 0xfa, 0x08, 0xca, 0xe9, 0xd6, 0x08, 0xc3, 0x52, + 0x2f, 0x3b, 0x96, 0xb5, 0x04, 0xd3, 0xf7, 0x69, 0x84, 0x13, 0x17, 0x3f, 0x22, 0xcd, 0x6f, 0x2c, + 0xf1, 0x9d, 0xc9, 0x55, 0x55, 0xde, 0xea, 0xe8, 0x5f, 0x69, 0x0d, 0x66, 0x12, 0x5c, 0x44, 0xfd, + 0x1f, 0xc2, 0xb0, 0x00, 0xa9, 0x15, 0x55, 0x38, 0x9f, 0xd2, 0x3d, 0x51, 0xb0, 0x3b, 0xcf, 0xe7, + 0xad, 0xe0, 0x6c, 0x4b, 0x02, 0xeb, 0x00, 0xce, 0xb1, 0x6d, 0x36, 0xe6, 0xaa, 0xa6, 0xe3, 0x05, + 0x18, 0x6d, 0x33, 0x45, 0x21, 0x74, 0x7f, 0xc2, 0xa7, 0xd1, 0xa0, 0x3d, 0xc2, 0x00, 0x35, 0xf7, + 0x27, 0x94, 0x5c, 0x02, 0xc0, 0x42, 0xec, 0xa6, 0x58, 0x05, 0x10, 0x9d, 0x1b, 0xee, 0x08, 0xa0, + 0xd7, 0x19, 0x9f, 0x37, 0x36, 0xfe, 0x6d, 0x05, 0x30, 0x9b, 0xaa, 0x49, 0x74, 0xe0, 0x16, 0x8c, + 0x48, 0x15, 0x36, 0x61, 0x52, 0xd7, 0x7b, 0x60, 0x2b, 0x24, 0xf2, 0x06, 0x9c, 0xf1, 0xe8, 0x37, + 0x51, 0x3d, 0xd5, 0x86, 0x09, 0x06, 0xde, 0x92, 0xed, 0xb0, 0x7e, 0x05, 0xcd, 0xa8, 0x35, 0xcf, + 0x7f, 0xf6, 0xb8, 0xe5, 0x3c, 0xa1, 0xa9, 0x8a, 0xbf, 0x0f, 0x23, 0xb5, 0xde, 0x15, 0xf3, 0xcf, + 0x47, 0x56, 0x6e, 0x2b, 0x12, 0xab, 0x05, 0x73, 0xac, 0x4b, 0xb5, 0xea, 0xfa, 0xda, 0x6a, 0x73, + 0xeb, 0xdb, 0x16, 0xe0, 0x53, 0xb8, 0x90, 0x59, 0xdb, 0xb7, 0x2d, 0xc4, 0x7f, 0x39, 0x00, 0xb3, + 0x7c, 0x33, 0x49, 0xcf, 0xe0, 0x93, 0x2f, 0x35, 0xbf, 0x94, 0x1b, 0xc9, 0xdb, 0x19, 0x37, 0x92, + 0x48, 0xa2, 0xdf, 0x48, 0x1a, 0xf7, 0x90, 0xef, 0x67, 0xdf, 0x43, 0xa2, 0x9d, 0xc8, 0xbc, 0x87, + 0x4c, 0xde, 0x3e, 0x2e, 0xe7, 0xdf, 0x3e, 0xe2, 0x35, 0x4b, 0xc6, 0xed, 0x63, 0xd6, 0x9d, 0x63, + 0xc2, 0xf5, 0x67, 0xe4, 0xd5, 0xba, 0xfe, 0xbc, 0x01, 0xc3, 0xd5, 0x76, 0x5b, 0x73, 0xa5, 0xc3, + 0xe1, 0x71, 0xda, 0x6d, 0x2e, 0x3c, 0x59, 0x28, 0xd7, 0x79, 0xc8, 0x58, 0xe7, 0x3f, 0x00, 0x58, + 0x44, 0x87, 0x7f, 0x1c, 0xb8, 0x31, 0xc4, 0x40, 0x0d, 0x9f, 0x3f, 0x03, 0xc0, 0x81, 0xd3, 0x2d, + 0x20, 0x31, 0x32, 0x57, 0xec, 0xad, 0x5d, 0x28, 0xa7, 0xa7, 0xcf, 0x2b, 0x58, 0xba, 0xfe, 0xb4, + 0x00, 0x97, 0x84, 0x92, 0x93, 0xf8, 0xc0, 0x4f, 0x3f, 0x3b, 0xdf, 0x85, 0x71, 0x41, 0xbb, 0x1d, + 0x7f, 0x08, 0xfc, 0x0a, 0x58, 0x2e, 0xc6, 0x7c, 0x45, 0x37, 0xd0, 0xc8, 0xbb, 0x30, 0x82, 0x7f, + 0xc4, 0xd7, 0x20, 0x4c, 0x32, 0xa3, 0x88, 0x5a, 0x4f, 0x5e, 0x86, 0x28, 0x54, 0xeb, 0x6b, 0xb8, + 0x9c, 0xd7, 0xf0, 0x57, 0x20, 0x97, 0x7f, 0x55, 0x80, 0x0b, 0x82, 0xbd, 0xb1, 0x54, 0xbc, 0xd0, + 0xae, 0x73, 0x0a, 0x07, 0xdc, 0x07, 0x30, 0xc6, 0x2a, 0x94, 0xed, 0xee, 0x17, 0x5b, 0xab, 0x38, + 0x39, 0xc4, 0x25, 0x4b, 0x4e, 0xe4, 0x08, 0x87, 0x12, 0xe7, 0xb0, 0x25, 0x8d, 0x17, 0xb6, 0x4e, + 0x6c, 0x7d, 0x05, 0x17, 0xb3, 0xbb, 0xf0, 0x0a, 0xe4, 0xf3, 0x00, 0xe6, 0x32, 0x36, 0x85, 0x17, + 0xdb, 0x93, 0xbf, 0x84, 0x0b, 0x99, 0xbc, 0x5e, 0x41, 0x33, 0x57, 0x98, 0xc6, 0x11, 0xbd, 0x82, + 0x21, 0xb4, 0x1e, 0xc1, 0xf9, 0x0c, 0x4e, 0xaf, 0xa0, 0x89, 0xf7, 0x61, 0x56, 0x69, 0xda, 0x2f, + 0xd5, 0xc2, 0x75, 0xb8, 0xc4, 0x19, 0xbd, 0x9a, 0x51, 0x79, 0x08, 0x17, 0x04, 0xbb, 0x57, 0x20, + 0xbd, 0x15, 0xb8, 0x18, 0x1f, 0xa8, 0x33, 0xf4, 0xa4, 0x13, 0x2f, 0x32, 0xd6, 0x1a, 0x5c, 0x89, + 0x39, 0xe5, 0x28, 0x0d, 0x27, 0xe7, 0xc6, 0xd5, 0xc1, 0x78, 0x94, 0x5e, 0xc9, 0x88, 0x3e, 0x82, + 0x73, 0x06, 0xd3, 0x57, 0xa6, 0x2a, 0xad, 0xc2, 0x14, 0x67, 0x6c, 0xaa, 0xce, 0xf3, 0xba, 0xea, + 0x3c, 0x36, 0x7f, 0x36, 0x66, 0x89, 0xe0, 0xdd, 0xbb, 0x19, 0xda, 0xf4, 0x3a, 0x6a, 0xd3, 0x12, + 0x25, 0x6e, 0xe1, 0xbb, 0x30, 0xc4, 0x21, 0xa2, 0x7d, 0x19, 0xcc, 0xf8, 0x61, 0x81, 0x93, 0x09, + 0x64, 0xeb, 0x87, 0x70, 0x89, 0x9f, 0x44, 0xe3, 0xbb, 0x44, 0xf3, 0xb4, 0xf8, 0xfd, 0xc4, 0x41, + 0xf4, 0xbc, 0xe0, 0x9b, 0xc4, 0xcf, 0x39, 0x8f, 0xee, 0xc9, 0xb9, 0x9d, 0xc7, 0xff, 0x44, 0x8f, + 0xb1, 0xe4, 0x01, 0xb3, 0x98, 0x79, 0xc0, 0xbc, 0x06, 0x57, 0xd5, 0x01, 0x33, 0x59, 0x8d, 0x9c, + 0x5a, 0xd6, 0x57, 0x70, 0x81, 0x77, 0x54, 0x3a, 0xc9, 0x99, 0xcd, 0xf8, 0x28, 0xd1, 0xcd, 0x59, + 0xd1, 0x4d, 0x13, 0x3b, 0xa7, 0x93, 0xff, 0x6f, 0x41, 0x7e, 0x72, 0xd9, 0xcc, 0x7f, 0xd9, 0x27, + 0xee, 0x0d, 0xa8, 0x28, 0x81, 0x98, 0x2d, 0x7a, 0xb1, 0xe3, 0xf6, 0x3a, 0xcc, 0xe8, 0x6c, 0xdc, + 0x06, 0xdd, 0xbd, 0x83, 0x97, 0x3c, 0xef, 0xb0, 0xcf, 0x02, 0x01, 0x72, 0xda, 0x95, 0x33, 0xe4, + 0x86, 0xf8, 0xb6, 0xc2, 0xb4, 0xea, 0x70, 0x31, 0x3d, 0x14, 0x6e, 0x43, 0x7a, 0xc8, 0x93, 0x4f, + 0xd9, 0x27, 0x8c, 0x10, 0x31, 0x18, 0xb9, 0x4c, 0xe5, 0x77, 0xcc, 0xc9, 0x25, 0x95, 0x65, 0xc9, + 0xa5, 0x26, 0xd1, 0x7f, 0x56, 0xbb, 0x9c, 0x0f, 0xbf, 0x0e, 0x44, 0x16, 0x2d, 0xd6, 0x6c, 0x59, + 0xf5, 0x79, 0xe8, 0x5f, 0xac, 0xd9, 0xe2, 0x69, 0x0e, 0x6a, 0x82, 0x8d, 0x30, 0xb0, 0x19, 0x2c, + 0xa9, 0x91, 0x17, 0x4f, 0xa0, 0x91, 0x3f, 0x18, 0x18, 0xe9, 0x2f, 0x0d, 0xd8, 0xa4, 0xe6, 0xee, + 0x7b, 0x8f, 0xdc, 0xe8, 0x40, 0x55, 0x58, 0xb5, 0x7e, 0x00, 0x53, 0x46, 0xf5, 0xe2, 0x2b, 0xee, + 0xfa, 0xa6, 0x88, 0xe9, 0xb3, 0x8b, 0x55, 0x74, 0x22, 0x41, 0x93, 0xc5, 0x38, 0x5f, 0x6f, 0x1a, + 0x4e, 0x1d, 0x1f, 0xac, 0xda, 0xb2, 0xd0, 0xfa, 0xc7, 0x03, 0x1a, 0x77, 0xed, 0xa5, 0x56, 0x97, + 0xde, 0xdd, 0x01, 0xe0, 0x33, 0x44, 0xeb, 0x1c, 0x53, 0x00, 0xc7, 0x84, 0x6f, 0x06, 0x5f, 0x92, + 0x6d, 0x0d, 0xe9, 0xa4, 0x2f, 0xb9, 0x84, 0x47, 0x2d, 0x27, 0x92, 0x8f, 0x17, 0x95, 0x47, 0xad, + 0x60, 0x1d, 0xda, 0x3a, 0x12, 0xf9, 0x61, 0xf2, 0xb9, 0xc1, 0x20, 0xde, 0x29, 0xbd, 0x26, 0x2f, + 0x99, 0xd3, 0x7d, 0x3b, 0xdd, 0x8b, 0x83, 0x67, 0x30, 0xc3, 0x68, 0xdd, 0xc7, 0x78, 0xb0, 0x58, + 0xfe, 0x26, 0xa2, 0x1e, 0x5f, 0xdb, 0x87, 0xb0, 0x9e, 0xd7, 0xbb, 0xd4, 0x13, 0x23, 0x0b, 0xfb, + 0x7b, 0xcc, 0xa7, 0x4e, 0x55, 0x99, 0x9d, 0xcd, 0x1f, 0x27, 0x91, 0xbd, 0xb6, 0xec, 0x35, 0xdb, + 0xbe, 0xab, 0x0e, 0x4c, 0x7c, 0x12, 0x05, 0xad, 0x3a, 0x15, 0x70, 0x5b, 0x47, 0xb2, 0xde, 0xe8, + 0xea, 0xa7, 0x3d, 0x02, 0x03, 0xdb, 0x8b, 0xdb, 0x6b, 0xa5, 0x82, 0x75, 0x0b, 0x40, 0xab, 0x09, + 0x60, 0x68, 0x63, 0xd3, 0x5e, 0xaf, 0xae, 0x95, 0xfa, 0xc8, 0x0c, 0x9c, 0x7d, 0xb4, 0xba, 0xb1, + 0xb4, 0xf9, 0xa8, 0x56, 0xaf, 0xad, 0x57, 0xed, 0xed, 0xc5, 0xaa, 0xbd, 0x54, 0x2a, 0x58, 0x5f, + 0xc3, 0xb4, 0xd9, 0xc3, 0x57, 0x3a, 0x09, 0x23, 0x98, 0x52, 0xfa, 0xcc, 0x83, 0x47, 0xdb, 0x9a, + 0xff, 0xa6, 0x38, 0xfc, 0x25, 0xfd, 0x90, 0xc4, 0x31, 0x51, 0x7c, 0x46, 0x1a, 0x12, 0x79, 0x8b, + 0xab, 0x05, 0xc9, 0xb7, 0xb8, 0x4c, 0x2d, 0xa8, 0xc7, 0x7a, 0x01, 0x2e, 0x7d, 0xdf, 0x83, 0x69, + 0xb3, 0xd6, 0x93, 0x5a, 0xa9, 0x5e, 0x43, 0xc7, 0x56, 0xed, 0xa1, 0x0e, 0x21, 0xfa, 0xb5, 0x81, + 0x58, 0x59, 0xbf, 0x07, 0x25, 0x81, 0x15, 0xef, 0xbc, 0xd7, 0xa4, 0x19, 0xb1, 0x90, 0xf1, 0xac, + 0x50, 0xba, 0x59, 0xfb, 0x50, 0x62, 0x2b, 0xa6, 0xa0, 0xe4, 0x15, 0x4c, 0xc3, 0xe0, 0x5a, 0x7c, + 0x9d, 0x63, 0xf3, 0x1f, 0xf8, 0x5e, 0x25, 0x72, 0x82, 0x48, 0x7a, 0x7d, 0x8d, 0xda, 0xea, 0x37, + 0x79, 0x0b, 0x86, 0xee, 0xb9, 0xad, 0x48, 0x98, 0x46, 0xe2, 0x4d, 0x9e, 0xb1, 0xe5, 0x05, 0xb6, + 0x40, 0xb0, 0x6c, 0x38, 0xab, 0x55, 0x78, 0x8a, 0xa6, 0x92, 0x32, 0x0c, 0x6f, 0xd0, 0x6f, 0xb4, + 0xfa, 0xe5, 0x4f, 0xeb, 0x3d, 0x38, 0x2b, 0x3c, 0xea, 0x34, 0x31, 0x5d, 0x15, 0xaf, 0x9f, 0x0b, + 0xc6, 0x13, 0x4c, 0xc1, 0x12, 0x8b, 0x18, 0xdd, 0x4e, 0xbb, 0xf9, 0x82, 0x74, 0x6c, 0xa3, 0x38, + 0x25, 0xdd, 0x9b, 0xf2, 0x16, 0xa8, 0xd7, 0x70, 0xfe, 0x79, 0x01, 0xca, 0x09, 0x2b, 0xc3, 0xe2, + 0x81, 0xd3, 0x6a, 0x51, 0x6f, 0x9f, 0x92, 0xeb, 0x30, 0xb0, 0xbd, 0xb9, 0xbd, 0x25, 0xac, 0xa4, + 0xd2, 0x01, 0x80, 0x81, 0x14, 0x8e, 0x8d, 0x18, 0xe4, 0x21, 0x9c, 0x95, 0x3e, 0xb3, 0xaa, 0x48, + 0x8c, 0xd0, 0xa5, 0xee, 0x1e, 0xb8, 0x69, 0x3a, 0xf2, 0x8e, 0x30, 0x89, 0xfc, 0xb8, 0xe3, 0x06, + 0xb4, 0x89, 0x96, 0x9f, 0xf8, 0x36, 0x5d, 0x2b, 0xb1, 0x75, 0x34, 0xfe, 0x56, 0xd5, 0xfa, 0xbd, + 0x02, 0xcc, 0xe6, 0x58, 0x4d, 0xc8, 0x5b, 0x46, 0x77, 0xa6, 0xb4, 0xee, 0x48, 0x94, 0x95, 0x3e, + 0xd1, 0x9f, 0x45, 0xcd, 0x91, 0xb8, 0xff, 0x14, 0x8e, 0xc4, 0x2b, 0x7d, 0xb1, 0xf3, 0xf0, 0x02, + 0xc0, 0x88, 0x84, 0x5b, 0x67, 0x60, 0xc2, 0x90, 0x9b, 0x65, 0xc1, 0xb8, 0x5e, 0x33, 0x1b, 0x9c, + 0x45, 0xbf, 0xa9, 0x06, 0x87, 0xfd, 0x6d, 0xfd, 0x6e, 0x01, 0xa6, 0xb1, 0x8b, 0xfb, 0x2e, 0x5b, + 0xfa, 0x62, 0x09, 0xcd, 0x1b, 0x3d, 0xb9, 0x68, 0xf4, 0x24, 0x81, 0xab, 0xba, 0xf4, 0x61, 0xaa, + 0x4b, 0x17, 0xb3, 0xba, 0x84, 0xd3, 0xdb, 0xf5, 0x3d, 0xa3, 0x27, 0xda, 0x55, 0xd4, 0xef, 0x17, + 0x60, 0x4a, 0x6b, 0x93, 0x6a, 0xff, 0x1d, 0xa3, 0x49, 0x17, 0x32, 0x9a, 0x94, 0x12, 0xf2, 0x42, + 0xaa, 0x45, 0xaf, 0x75, 0x6b, 0x51, 0x4f, 0x19, 0xff, 0xe7, 0x02, 0xcc, 0x64, 0xca, 0x80, 0x9c, + 0x63, 0xba, 0x6d, 0x23, 0xa0, 0x91, 0x10, 0xaf, 0xf8, 0xc5, 0xe0, 0xab, 0x61, 0xd8, 0xa1, 0x81, + 0xf8, 0xce, 0xc5, 0x2f, 0xf2, 0x1a, 0x4c, 0x6c, 0xd1, 0xc0, 0xf5, 0x9b, 0xdc, 0xc5, 0x9c, 0xfb, + 0x6e, 0x4e, 0xd8, 0x26, 0x90, 0x5c, 0x84, 0xd1, 0x6a, 0x6b, 0xdf, 0x0f, 0xdc, 0xe8, 0x80, 0xdf, + 0x06, 0x8e, 0xda, 0x31, 0x80, 0xf1, 0x5e, 0x72, 0xf7, 0xf9, 0xa5, 0x06, 0x23, 0x16, 0xbf, 0xd8, + 0xe2, 0x22, 0xad, 0x85, 0x43, 0x7c, 0x71, 0x91, 0xa6, 0xc0, 0x73, 0x30, 0xf4, 0xb9, 0x8d, 0x93, + 0x00, 0x23, 0x04, 0xd8, 0xe2, 0x17, 0x99, 0x44, 0x27, 0x61, 0x7c, 0x95, 0x80, 0xce, 0xc1, 0x1f, + 0xc2, 0x74, 0x96, 0x5c, 0xb3, 0xa6, 0x90, 0xa0, 0x2d, 0x2a, 0xda, 0xaf, 0x60, 0xaa, 0xda, 0x6c, + 0xae, 0xdf, 0xab, 0x72, 0x9f, 0x03, 0x31, 0xaa, 0xfc, 0xe3, 0xe1, 0xf6, 0x3a, 0xa1, 0xb2, 0x0d, + 0xac, 0x7a, 0x6e, 0x64, 0x4f, 0x2d, 0x7f, 0xe3, 0x86, 0x91, 0xeb, 0xed, 0x6b, 0x46, 0x45, 0xfb, + 0xdc, 0x06, 0x7d, 0x96, 0x31, 0x05, 0xd8, 0x6e, 0x6a, 0xf2, 0xe6, 0xf0, 0x0c, 0xe6, 0xd3, 0x1a, + 0xdb, 0x78, 0x29, 0x99, 0x35, 0xf9, 0xc6, 0x05, 0xfd, 0xd5, 0xc6, 0x13, 0xeb, 0x7b, 0x70, 0x8e, + 0x2f, 0x69, 0xdd, 0x1a, 0x2f, 0x9a, 0xad, 0xdb, 0x40, 0xad, 0xf7, 0xa5, 0x95, 0xa2, 0x6b, 0xcb, + 0xec, 0x71, 0xa3, 0x2d, 0x58, 0xe5, 0x7f, 0x29, 0xc0, 0x5c, 0x82, 0xb4, 0xf6, 0xdc, 0x6b, 0xc8, + 0xf5, 0xf4, 0x8d, 0xa4, 0x13, 0x36, 0xea, 0x01, 0xdc, 0xf8, 0xe7, 0x36, 0x95, 0x1f, 0x36, 0xb9, + 0x05, 0xc0, 0x89, 0xb5, 0xed, 0x1b, 0x4d, 0xdf, 0xc2, 0xc9, 0x06, 0x37, 0x70, 0x0d, 0x85, 0x74, + 0x20, 0x4b, 0xee, 0xe2, 0x1b, 0xe9, 0x65, 0x1b, 0xc6, 0xa8, 0x18, 0x54, 0x90, 0xd7, 0x73, 0x8c, + 0xc4, 0x59, 0xfc, 0xad, 0xff, 0xaf, 0x1f, 0x66, 0xf5, 0x01, 0x7c, 0x91, 0xbe, 0x6e, 0xc1, 0xd8, + 0xa2, 0xef, 0x45, 0xf4, 0x9b, 0x48, 0x8b, 0x4a, 0x40, 0xd4, 0x4d, 0xbb, 0x2a, 0x11, 0xaa, 0x23, + 0x07, 0xd4, 0x99, 0x1e, 0x63, 0x38, 0x0b, 0xc6, 0x88, 0x64, 0x11, 0x26, 0x36, 0xe8, 0xb3, 0x94, + 0x00, 0xd1, 0x61, 0xd1, 0xa3, 0xcf, 0xea, 0x9a, 0x10, 0x75, 0x2f, 0x32, 0x83, 0x86, 0xec, 0xc1, + 0xa4, 0x9c, 0x5c, 0x86, 0x30, 0xe7, 0xf4, 0x5d, 0xc5, 0x9c, 0xce, 0xfc, 0xd5, 0x3e, 0xab, 0x21, + 0x47, 0x86, 0x09, 0x8e, 0xac, 0xeb, 0xbc, 0x46, 0xfe, 0x10, 0xdd, 0xdc, 0xb6, 0xb4, 0x12, 0xc3, + 0x1d, 0x34, 0xf9, 0x00, 0x5d, 0x67, 0x61, 0x6d, 0x41, 0x39, 0x3d, 0x1e, 0xa2, 0xb6, 0x77, 0x60, + 0x88, 0x43, 0x85, 0x1a, 0x20, 0x03, 0xce, 0x28, 0x6c, 0x7e, 0x4e, 0xe7, 0xd5, 0xd8, 0x02, 0xd7, + 0x5a, 0x41, 0xdb, 0x89, 0xc2, 0x51, 0x8a, 0xd8, 0xed, 0xe4, 0xf0, 0xa2, 0xa7, 0xad, 0x1c, 0x5e, + 0xdd, 0xcf, 0x44, 0x3e, 0x2e, 0x58, 0x44, 0xf3, 0x93, 0xce, 0x49, 0x34, 0xec, 0x06, 0x0c, 0x0b, + 0x50, 0x22, 0x14, 0x4e, 0xfc, 0xf9, 0x49, 0x04, 0xeb, 0x43, 0x38, 0x8f, 0xb6, 0x30, 0xd7, 0xdb, + 0x6f, 0xd1, 0x9d, 0xd0, 0x78, 0x1e, 0xd0, 0xeb, 0xb3, 0xfe, 0x18, 0xe6, 0xb2, 0x68, 0x7b, 0x7e, + 0xd9, 0x3c, 0x38, 0xc5, 0x5f, 0x15, 0x61, 0x7a, 0x35, 0xd4, 0x95, 0x09, 0x15, 0xa0, 0x22, 0x23, + 0x68, 0x02, 0xca, 0x64, 0xa5, 0x2f, 0x2b, 0x28, 0xc2, 0x3b, 0xda, 0xe3, 0xc4, 0x62, 0xb7, 0x68, + 0x08, 0x6c, 0xdb, 0x52, 0xcf, 0x13, 0xdf, 0x80, 0x81, 0x0d, 0xb6, 0x54, 0xf7, 0x8b, 0xb1, 0xe3, + 0x14, 0x0c, 0x84, 0x8f, 0x03, 0xd9, 0x16, 0xc9, 0x7e, 0x90, 0x7b, 0xa9, 0x27, 0x88, 0x03, 0xbd, + 0x5f, 0xfb, 0xaf, 0xf4, 0xa5, 0x5e, 0x23, 0xbe, 0x07, 0x63, 0xd5, 0xe6, 0x21, 0xf7, 0x08, 0xf4, + 0xbd, 0xc4, 0x67, 0xa9, 0x95, 0xac, 0xf4, 0xd9, 0x3a, 0x22, 0x3b, 0xe1, 0x56, 0xdb, 0x6d, 0xdc, + 0xa8, 0xb2, 0x22, 0x20, 0xac, 0xf4, 0xa1, 0x83, 0xfd, 0xc2, 0x08, 0x0c, 0x6d, 0x3b, 0xc1, 0x3e, + 0x8d, 0xac, 0xaf, 0x60, 0x4e, 0x38, 0xa9, 0x70, 0xcb, 0x1f, 0xba, 0xb2, 0x84, 0xb1, 0x1f, 0x52, + 0x37, 0xc7, 0x92, 0xcb, 0x00, 0xa8, 0xe7, 0xaf, 0x7a, 0x4d, 0xfa, 0x8d, 0xf0, 0x92, 0xd3, 0x20, + 0xd6, 0xbb, 0x30, 0xaa, 0x24, 0x84, 0xca, 0xac, 0xb6, 0xd9, 0xa1, 0xb4, 0xa6, 0x8d, 0x37, 0x97, + 0xf2, 0xa1, 0xe5, 0x79, 0xa3, 0xef, 0x22, 0xa6, 0x09, 0xd7, 0x7e, 0x5d, 0x98, 0x49, 0x4c, 0x82, + 0xf8, 0xc9, 0xbc, 0xd2, 0x3f, 0xb9, 0x1b, 0x9f, 0xfa, 0x9d, 0x54, 0x4f, 0x8b, 0x27, 0x52, 0x4f, + 0xad, 0x7f, 0x5a, 0xc4, 0x83, 0x53, 0x4a, 0x1e, 0x09, 0x1b, 0x94, 0x6e, 0x07, 0x5b, 0x80, 0x51, + 0xec, 0xfd, 0x92, 0x7c, 0xfa, 0xd5, 0xdd, 0xc7, 0x62, 0xe4, 0x67, 0x47, 0x95, 0x3e, 0x74, 0xac, + 0x88, 0xc9, 0xc8, 0x27, 0x30, 0xbc, 0xec, 0x35, 0x91, 0x43, 0xff, 0x29, 0x38, 0x48, 0x22, 0x36, + 0x26, 0xd8, 0xe4, 0x6d, 0xf6, 0x09, 0x73, 0xd3, 0x85, 0xad, 0x41, 0xe2, 0x13, 0xdc, 0x60, 0xde, + 0x09, 0x6e, 0x28, 0x71, 0x82, 0xb3, 0x60, 0x70, 0x33, 0x68, 0x8a, 0x48, 0x24, 0x93, 0xf3, 0xe3, + 0x42, 0x70, 0x08, 0xb3, 0x79, 0x91, 0xf5, 0xdf, 0x0a, 0x30, 0x7b, 0x9f, 0x46, 0x99, 0x73, 0xc8, + 0x90, 0x4a, 0xe1, 0xa5, 0xa5, 0x52, 0x7c, 0x11, 0xa9, 0xa8, 0x5e, 0xf7, 0xe7, 0xf5, 0x7a, 0x20, + 0xaf, 0xd7, 0x83, 0xf9, 0xbd, 0xbe, 0x0f, 0x43, 0xbc, 0xab, 0xec, 0x94, 0xba, 0x1a, 0xd1, 0xc3, + 0xf8, 0x94, 0xaa, 0x7b, 0x88, 0xd9, 0xbc, 0x8c, 0x29, 0x92, 0x6b, 0x4e, 0xa8, 0x9f, 0x52, 0xc5, + 0x4f, 0xeb, 0x47, 0xf8, 0x68, 0x74, 0xcd, 0x6f, 0x3c, 0xd1, 0xac, 0x9d, 0xc3, 0xfc, 0x0b, 0x4d, + 0x5a, 0xc7, 0x19, 0x16, 0x2f, 0xb1, 0x25, 0x06, 0xb9, 0x02, 0x63, 0xab, 0xde, 0x3d, 0x3f, 0x68, + 0xd0, 0x4d, 0xaf, 0xc5, 0xb9, 0x8f, 0xd8, 0x3a, 0x48, 0x58, 0x01, 0x44, 0x0d, 0xf1, 0xd1, 0x1a, + 0x01, 0x89, 0xa3, 0x35, 0x83, 0xed, 0xce, 0xdb, 0xbc, 0x4c, 0x18, 0x19, 0xd8, 0xdf, 0xdd, 0x4e, + 0xa5, 0xea, 0xf8, 0xda, 0x0b, 0x71, 0x0f, 0xce, 0xdb, 0xb4, 0xdd, 0x72, 0x98, 0x4e, 0x77, 0xe8, + 0x73, 0x7c, 0xd5, 0xe7, 0x2b, 0x19, 0x0f, 0xbe, 0x4c, 0x7f, 0x01, 0xd5, 0xe4, 0x62, 0x97, 0x26, + 0x1f, 0xc2, 0xd5, 0xfb, 0x34, 0x32, 0x17, 0xd4, 0xd8, 0x96, 0x2a, 0x3a, 0xbf, 0x02, 0x23, 0xa1, + 0x69, 0x07, 0xbe, 0x2c, 0xaf, 0x1f, 0xb2, 0x08, 0x77, 0xef, 0xca, 0x9b, 0x12, 0xc1, 0x47, 0xfd, + 0x65, 0x7d, 0x0a, 0x95, 0xbc, 0xea, 0x4e, 0xe6, 0xce, 0xe9, 0xc2, 0x95, 0x7c, 0x06, 0xa2, 0xb9, + 0xcb, 0x20, 0x6d, 0xc6, 0xe2, 0x13, 0xea, 0xd5, 0x5a, 0xd3, 0xcc, 0x2c, 0xfe, 0xb0, 0x16, 0xa4, + 0x63, 0xdb, 0x4b, 0x34, 0xb7, 0x8e, 0xd7, 0xb1, 0x26, 0x83, 0x58, 0xae, 0x55, 0x18, 0x91, 0x30, + 0x21, 0xd7, 0xd9, 0xcc, 0x96, 0x4a, 0x81, 0x36, 0x25, 0x03, 0x45, 0x66, 0xfd, 0x48, 0x5e, 0x4d, + 0x98, 0x14, 0x27, 0x7b, 0x01, 0x79, 0x92, 0xbb, 0x08, 0xcb, 0x87, 0xf3, 0x26, 0x6f, 0xdd, 0xe4, + 0x5c, 0xd2, 0x4c, 0xce, 0xdc, 0xd2, 0x7c, 0xc5, 0x34, 0x81, 0x16, 0xc5, 0xbc, 0x8c, 0x41, 0xe4, + 0xb2, 0x6e, 0x58, 0x1e, 0x4f, 0x3f, 0xa9, 0xbc, 0x0d, 0x73, 0x59, 0x15, 0x6a, 0xe7, 0x40, 0x65, + 0xbd, 0x14, 0xfa, 0xce, 0x12, 0x5c, 0x96, 0xb1, 0x80, 0x7c, 0x3f, 0x0a, 0xa3, 0xc0, 0x69, 0xd7, + 0x1a, 0x81, 0xdb, 0x8e, 0xa9, 0x2c, 0x18, 0xe2, 0x10, 0x21, 0x09, 0x7e, 0xcd, 0xc3, 0x71, 0x44, + 0x89, 0xf5, 0x9b, 0x05, 0xb0, 0x0c, 0x1f, 0x24, 0x1c, 0xe7, 0xad, 0xc0, 0x7f, 0xea, 0x36, 0xb5, + 0xab, 0x95, 0xb7, 0x0c, 0xb3, 0x1e, 0x7f, 0x12, 0x97, 0x74, 0x7f, 0x16, 0x6b, 0xe6, 0xed, 0x84, + 0xa9, 0x8d, 0x2b, 0x9e, 0xe8, 0x97, 0x64, 0x06, 0x5d, 0x51, 0x26, 0xb8, 0xff, 0x51, 0x80, 0x6b, + 0x5d, 0xdb, 0x20, 0xfa, 0xb3, 0x07, 0xa5, 0x64, 0x99, 0x98, 0x41, 0x15, 0xcd, 0x27, 0x21, 0xcd, + 0x61, 0xf7, 0x0e, 0xf7, 0xb1, 0x96, 0xbe, 0x3b, 0x6d, 0xc5, 0x39, 0xc5, 0xef, 0xf4, 0xad, 0x27, + 0x1f, 0x00, 0x6c, 0xfb, 0x91, 0xd3, 0x5a, 0x44, 0x03, 0x40, 0x7f, 0xec, 0x2f, 0x1f, 0x31, 0x68, + 0x3d, 0x19, 0xa4, 0x40, 0x43, 0xb6, 0x3e, 0xc3, 0xef, 0x3a, 0xbb, 0xd1, 0x27, 0xfb, 0xd4, 0x16, + 0xe1, 0x5a, 0xe2, 0x5e, 0xfc, 0x05, 0x98, 0x44, 0x30, 0xc3, 0xc4, 0xcf, 0x74, 0xef, 0xfb, 0x81, + 0xdf, 0x69, 0xff, 0x72, 0x46, 0xfd, 0xcf, 0x0a, 0xdc, 0x51, 0x51, 0xaf, 0x56, 0x0c, 0xf4, 0x22, + 0x40, 0x0c, 0x4d, 0x38, 0xac, 0xab, 0x82, 0xdd, 0x3b, 0xfc, 0xc8, 0x8d, 0x16, 0xf3, 0x7d, 0xce, + 0x40, 0x23, 0xfb, 0xe5, 0x8e, 0xe4, 0x5d, 0xbc, 0x0c, 0x57, 0xb5, 0x9f, 0x4c, 0xee, 0xef, 0x49, + 0xfb, 0xc7, 0x29, 0xe9, 0x0e, 0x60, 0x9a, 0xad, 0x00, 0xd5, 0x4e, 0x74, 0xe0, 0x07, 0x6e, 0x24, + 0x9f, 0x5e, 0x90, 0x2d, 0xf1, 0xb6, 0x9b, 0x53, 0x7d, 0xfc, 0x8b, 0xa3, 0xca, 0xfb, 0xa7, 0x89, + 0xd2, 0x28, 0x79, 0x6e, 0xab, 0xf7, 0xe0, 0xd6, 0x2c, 0xf4, 0x2f, 0xda, 0x6b, 0xb8, 0xe0, 0xd9, + 0x6b, 0x6a, 0xc1, 0xb3, 0xd7, 0xac, 0xbf, 0x29, 0x42, 0x85, 0x47, 0x9f, 0x40, 0x1f, 0x8a, 0xd8, + 0x6a, 0xa1, 0x39, 0x65, 0x9c, 0xd4, 0xc0, 0x90, 0x88, 0x2e, 0x51, 0x3c, 0x49, 0x74, 0x89, 0x5f, + 0x83, 0x1c, 0x93, 0xd5, 0x09, 0xac, 0x00, 0x6f, 0x1e, 0x1f, 0x55, 0xae, 0xc5, 0x56, 0x00, 0x5e, + 0x9a, 0x65, 0x0e, 0xc8, 0xa9, 0x22, 0x6d, 0xbf, 0x18, 0x78, 0x01, 0xfb, 0xc5, 0x6d, 0x18, 0xc6, + 0xc3, 0xcc, 0xea, 0x96, 0xf0, 0x6a, 0xc4, 0xe9, 0x89, 0xf1, 0x64, 0xea, 0xae, 0x1e, 0xbc, 0x4d, + 0xa2, 0x59, 0x7f, 0xbf, 0x08, 0x57, 0xf2, 0x65, 0x2e, 0xda, 0xb6, 0x04, 0x10, 0x7b, 0x6f, 0x74, + 0xf3, 0x16, 0xc1, 0x6f, 0xe7, 0x19, 0xdd, 0x53, 0xde, 0x5a, 0x1a, 0x1d, 0xd3, 0x7d, 0xe4, 0x43, + 0xdf, 0xc4, 0x55, 0x81, 0xf1, 0xfe, 0x57, 0xc4, 0x1e, 0x15, 0x20, 0x23, 0xf6, 0xa8, 0x80, 0x91, + 0x3d, 0x98, 0xdd, 0x0a, 0xdc, 0xa7, 0x4e, 0x44, 0x1f, 0xd2, 0xe7, 0xfc, 0x21, 0xcc, 0xb2, 0x78, + 0xfd, 0xc2, 0x5f, 0x6f, 0x5f, 0x3f, 0x3e, 0xaa, 0xbc, 0xd6, 0xe6, 0x28, 0x18, 0x5f, 0x8a, 0x3f, + 0x3d, 0xac, 0xa7, 0x1f, 0xc4, 0xe4, 0x31, 0xb2, 0xfe, 0x4d, 0x01, 0x2e, 0xa0, 0x5a, 0x2e, 0xcc, + 0xae, 0xb2, 0xf2, 0x17, 0x72, 0x1a, 0xd4, 0x3b, 0x28, 0xe6, 0x22, 0x3a, 0x0d, 0x1a, 0x0f, 0xa1, + 0x6d, 0x03, 0x8d, 0xac, 0xc2, 0x98, 0xf8, 0x8d, 0xdf, 0x5f, 0x3f, 0x1e, 0x08, 0x66, 0xb4, 0x05, + 0x0b, 0xa7, 0x3a, 0x37, 0x15, 0xe1, 0xc4, 0x16, 0xcc, 0xf0, 0xbd, 0xa0, 0xad, 0xd3, 0x5a, 0x3f, + 0x2f, 0xc2, 0xc5, 0x5d, 0x1a, 0xb8, 0x8f, 0x9f, 0xe7, 0x74, 0x66, 0x13, 0xa6, 0x25, 0x88, 0x47, + 0xa0, 0x30, 0x3e, 0x31, 0x1e, 0x7d, 0x50, 0x36, 0x55, 0x84, 0xb0, 0x90, 0x5f, 0x5c, 0x26, 0xe1, + 0x29, 0xdc, 0x01, 0xdf, 0x81, 0x91, 0x44, 0x0c, 0x18, 0x1c, 0x7f, 0xf9, 0x85, 0xc6, 0x43, 0xb5, + 0xd2, 0x67, 0x2b, 0x4c, 0xf2, 0x5b, 0xf9, 0xf7, 0x37, 0xc2, 0xf4, 0xd1, 0xcb, 0xfe, 0x89, 0x1f, + 0x2c, 0xfb, 0x58, 0x1d, 0xad, 0x34, 0xe3, 0x83, 0x5d, 0xe9, 0xb3, 0xf3, 0x6a, 0x5a, 0x18, 0x83, + 0xd1, 0x2a, 0xde, 0x49, 0xb1, 0x93, 0xfb, 0x7f, 0x2f, 0xc2, 0x65, 0xf9, 0xa8, 0x25, 0x47, 0xcc, + 0x5f, 0xc0, 0xac, 0x04, 0x55, 0xdb, 0x4c, 0x61, 0xa0, 0x4d, 0x53, 0xd2, 0x3c, 0x02, 0xa8, 0x94, + 0xb4, 0x23, 0x70, 0x62, 0x61, 0xe7, 0x91, 0xbf, 0x1a, 0xeb, 0xe7, 0x27, 0x59, 0x11, 0x79, 0xd0, + 0x0a, 0xa9, 0xaf, 0x99, 0x86, 0x68, 0x8c, 0xf5, 0xb3, 0x99, 0xb2, 0x9e, 0x0e, 0xbc, 0xac, 0xf5, + 0x74, 0xa5, 0x2f, 0x69, 0x3f, 0x5d, 0x98, 0x84, 0xf1, 0x0d, 0xfa, 0x2c, 0x96, 0xfb, 0xff, 0x5d, + 0x48, 0x44, 0x1a, 0x60, 0x1a, 0x06, 0x0f, 0x39, 0x50, 0x88, 0x83, 0xba, 0x60, 0xa4, 0x01, 0x5d, + 0xc3, 0xe0, 0xa8, 0xab, 0x30, 0xcc, 0x2f, 0x6a, 0x9b, 0x27, 0x38, 0xe1, 0xab, 0xd7, 0x29, 0xfc, + 0xc9, 0x60, 0x93, 0x1f, 0xf6, 0x05, 0xbd, 0xf5, 0x10, 0xae, 0x0a, 0xff, 0x65, 0x73, 0xf0, 0xb1, + 0xa2, 0x53, 0x6e, 0x5f, 0x96, 0x03, 0x97, 0xef, 0xd3, 0xe4, 0xd2, 0x63, 0xbc, 0xde, 0xf9, 0x14, + 0xce, 0x18, 0x70, 0xc5, 0x11, 0xb5, 0x52, 0x35, 0x87, 0x14, 0xeb, 0x24, 0xb6, 0x75, 0x25, 0xab, + 0x0a, 0xbd, 0xb1, 0x16, 0xc5, 0x50, 0x9e, 0x41, 0x7c, 0xc5, 0x16, 0x9e, 0x62, 0xd5, 0xbb, 0xae, + 0x7d, 0xd7, 0x7c, 0xc5, 0xe3, 0xb1, 0xde, 0xe4, 0xce, 0xab, 0x4a, 0xad, 0x09, 0xe3, 0x2e, 0xc0, + 0x9a, 0x84, 0x71, 0x59, 0xd4, 0xa2, 0x61, 0x68, 0xfd, 0x74, 0x10, 0x2c, 0x21, 0xd8, 0xac, 0xdb, + 0x67, 0x29, 0x8f, 0xbd, 0x54, 0x63, 0xc5, 0x46, 0x75, 0x4e, 0x8f, 0x20, 0x19, 0x97, 0xf2, 0x99, + 0x87, 0x7a, 0x5e, 0x23, 0x86, 0x1a, 0x33, 0x2f, 0xd5, 0xfb, 0x1f, 0xe4, 0x2c, 0x93, 0xfc, 0x63, + 0x7b, 0xfd, 0xf8, 0xa8, 0x72, 0x35, 0x67, 0x99, 0x34, 0xf8, 0x66, 0x2f, 0x99, 0xb6, 0x79, 0x25, + 0xd2, 0xff, 0x22, 0x57, 0x22, 0xec, 0x8b, 0xd4, 0x2f, 0x45, 0x76, 0x4c, 0x59, 0x8a, 0xef, 0x51, + 0x5e, 0x69, 0xeb, 0x45, 0xe2, 0xc1, 0xbf, 0x06, 0x31, 0xb8, 0x1a, 0x6c, 0x88, 0x0b, 0x25, 0xcd, + 0x66, 0xb9, 0x78, 0x40, 0x1b, 0x4f, 0x84, 0xad, 0x58, 0x5e, 0xe8, 0x66, 0xd9, 0xcc, 0x79, 0x34, + 0x61, 0xfe, 0x9d, 0xf3, 0x82, 0x7a, 0x83, 0x91, 0xea, 0x01, 0x0b, 0x92, 0x6c, 0xc9, 0x4f, 0x60, + 0x4a, 0x0d, 0x75, 0xc2, 0xfd, 0x68, 0x6c, 0xfe, 0xb5, 0x38, 0xf0, 0xe4, 0xe1, 0x63, 0xe7, 0xe6, + 0xd3, 0x3b, 0x37, 0x33, 0x70, 0xf9, 0x3b, 0xf8, 0x86, 0x2c, 0xd0, 0x7c, 0x8f, 0xf4, 0x8b, 0xae, + 0x2c, 0x42, 0xed, 0x3a, 0xfb, 0xef, 0x29, 0x67, 0x79, 0xa6, 0x2f, 0xb8, 0x2d, 0x2a, 0x5e, 0xbd, + 0xc8, 0xd9, 0x97, 0x73, 0x15, 0x57, 0xf8, 0x96, 0xaf, 0xe2, 0xfe, 0xb8, 0x28, 0x9f, 0x08, 0xa4, + 0x6f, 0x43, 0x4f, 0x7d, 0x23, 0x97, 0xd9, 0x83, 0x13, 0x6d, 0xa6, 0x99, 0x8d, 0x23, 0x0b, 0xf2, + 0x3e, 0x53, 0xc5, 0x86, 0x9a, 0x54, 0x77, 0x03, 0x71, 0x81, 0x71, 0xc5, 0x89, 0xaa, 0x8b, 0x46, + 0x95, 0xbc, 0x2c, 0xeb, 0x7f, 0xf9, 0xcb, 0xb2, 0x7f, 0x31, 0x0a, 0x67, 0xb7, 0x9c, 0x7d, 0xd7, + 0x63, 0x8b, 0xb6, 0x4d, 0x43, 0xbf, 0x13, 0x34, 0x28, 0xa9, 0xc2, 0xa4, 0xe9, 0xff, 0xd9, 0xc3, + 0xbb, 0x95, 0xed, 0x4b, 0x26, 0x8c, 0xcc, 0xc3, 0xa8, 0x7a, 0x73, 0x2a, 0x36, 0x93, 0x8c, 0xb7, + 0xa8, 0x2b, 0x7d, 0x76, 0x8c, 0x46, 0x3e, 0x30, 0xee, 0x77, 0xce, 0xa8, 0xe7, 0xd3, 0x88, 0x3b, + 0xcf, 0x1d, 0xf4, 0x3c, 0xbf, 0x69, 0x6e, 0x88, 0xfc, 0x12, 0xe3, 0x47, 0xa9, 0x2b, 0x9f, 0x41, + 0xa3, 0xc5, 0x29, 0xbb, 0x17, 0xea, 0x02, 0xb9, 0xe1, 0x9c, 0x33, 0x2e, 0x83, 0xbe, 0x82, 0xb1, + 0x87, 0x9d, 0x3d, 0x2a, 0x2f, 0xb7, 0x86, 0xc4, 0xfe, 0x98, 0xf4, 0x6a, 0x16, 0xe5, 0xbb, 0x77, + 0xf9, 0x18, 0x3c, 0xe9, 0xec, 0xd1, 0x74, 0x9c, 0x70, 0xb6, 0x30, 0x69, 0xcc, 0xc8, 0x01, 0x94, + 0x92, 0x0e, 0xc8, 0x22, 0x9a, 0x5a, 0x17, 0xb7, 0x69, 0x0c, 0xe5, 0xa1, 0x45, 0x23, 0xe7, 0x6e, + 0x91, 0x46, 0x25, 0x29, 0xae, 0xe4, 0xd7, 0x61, 0x26, 0xd3, 0xea, 0xa8, 0x9e, 0x50, 0x75, 0x37, + 0x68, 0xe2, 0xa2, 0x9e, 0x90, 0x9a, 0x7c, 0xaf, 0x65, 0xd4, 0x9c, 0x5d, 0x0b, 0x69, 0xc2, 0x99, + 0x84, 0x63, 0xad, 0x48, 0xb9, 0x90, 0xef, 0xaa, 0x8b, 0x1b, 0x93, 0x8c, 0x5a, 0x9a, 0x59, 0x57, + 0x92, 0x25, 0x59, 0x83, 0x51, 0x75, 0xdc, 0xc7, 0xd7, 0x59, 0xd9, 0xa6, 0x8d, 0xf2, 0xf1, 0x51, + 0x65, 0x3a, 0x36, 0x6d, 0x18, 0x3c, 0x63, 0x06, 0xe4, 0x37, 0xe0, 0xaa, 0x9a, 0xa2, 0x9b, 0x41, + 0xb6, 0x11, 0x48, 0x44, 0x3b, 0xbf, 0x91, 0x9c, 0xe1, 0x79, 0xf8, 0xbb, 0x77, 0x16, 0x8a, 0xe5, + 0xc2, 0x4a, 0x9f, 0xdd, 0x9b, 0x35, 0xf9, 0x69, 0x01, 0xce, 0xe5, 0xd4, 0x3a, 0x8e, 0xb5, 0xf6, + 0xb4, 0xcc, 0xa1, 0x72, 0x8f, 0xcf, 0x86, 0xdc, 0x66, 0xfc, 0xbc, 0x4e, 0x9a, 0xe8, 0x8c, 0x7e, + 0xe7, 0xd4, 0x44, 0xde, 0x86, 0x21, 0x3c, 0x23, 0x87, 0xe5, 0x09, 0xd4, 0x22, 0x31, 0x82, 0x0d, + 0x9e, 0xa4, 0xf5, 0x7d, 0x43, 0xe0, 0x90, 0x15, 0xa6, 0x8d, 0xe1, 0xbe, 0x25, 0xb5, 0x27, 0x11, + 0xef, 0x4a, 0x68, 0xf4, 0xbc, 0x48, 0x46, 0xb9, 0x30, 0xc2, 0xda, 0x9b, 0x64, 0x0b, 0x00, 0x23, + 0x81, 0x58, 0x95, 0x1e, 0x0c, 0x8c, 0x0c, 0x94, 0x06, 0xf9, 0x87, 0x23, 0x3d, 0xb6, 0x7f, 0x7b, + 0x84, 0x3f, 0xef, 0xdc, 0xf1, 0xdc, 0xc7, 0x6e, 0xbc, 0x80, 0xe9, 0xd6, 0xb5, 0x38, 0xbf, 0x8c, + 0xd0, 0x7d, 0x73, 0x32, 0xc9, 0x28, 0x43, 0x5c, 0xb1, 0xa7, 0x21, 0xee, 0xae, 0x76, 0x65, 0xa5, + 0x85, 0x88, 0xe4, 0x3a, 0x8e, 0x69, 0xf8, 0x8a, 0xef, 0xb2, 0xbe, 0x86, 0x21, 0x8c, 0xea, 0xc8, + 0xef, 0x03, 0xc7, 0xe6, 0x6f, 0x8a, 0x65, 0xbb, 0x4b, 0xf3, 0x79, 0x18, 0x48, 0xf1, 0x64, 0x9b, + 0x4b, 0x1c, 0x01, 0x86, 0xc4, 0x11, 0x42, 0xb6, 0x61, 0x6a, 0x2b, 0xa0, 0x4d, 0xe1, 0x37, 0xdc, + 0x0e, 0x84, 0x71, 0x82, 0x9b, 0x3d, 0x70, 0xcb, 0x6f, 0xcb, 0xe2, 0x3a, 0x55, 0xe5, 0xfa, 0x86, + 0x9a, 0x41, 0x4e, 0x96, 0x61, 0xb2, 0x46, 0x9d, 0xa0, 0x71, 0xf0, 0x90, 0x3e, 0x67, 0xea, 0x8e, + 0x91, 0x52, 0x21, 0xc4, 0x12, 0xd6, 0x5f, 0x2c, 0xd2, 0x7d, 0x3c, 0x4c, 0x22, 0xf2, 0x19, 0x0c, + 0xd5, 0xfc, 0x20, 0x5a, 0x78, 0x2e, 0x16, 0x35, 0x79, 0x63, 0xc4, 0x81, 0x0b, 0xe7, 0x65, 0x5a, + 0x89, 0xd0, 0x0f, 0xa2, 0xfa, 0x9e, 0x11, 0x12, 0x89, 0xa3, 0x90, 0xe7, 0x30, 0x6d, 0x2e, 0x28, + 0xc2, 0x9d, 0x75, 0x44, 0xa8, 0x59, 0x59, 0xab, 0x16, 0x47, 0x59, 0xb8, 0x2e, 0xb8, 0x5f, 0x49, + 0x2e, 0x5b, 0x8f, 0xb1, 0x5c, 0x8f, 0x52, 0x94, 0x45, 0x4f, 0xd6, 0x31, 0x1f, 0x07, 0xef, 0x51, + 0x35, 0xe4, 0x6e, 0xb0, 0xa3, 0x71, 0xd0, 0xad, 0x0e, 0x2e, 0x4a, 0x28, 0x09, 0x27, 0x4c, 0x26, + 0x71, 0xb1, 0x53, 0xa4, 0x64, 0x0b, 0xce, 0xee, 0x84, 0x74, 0x2b, 0xa0, 0x4f, 0x5d, 0xfa, 0x4c, + 0xf2, 0x83, 0x38, 0x42, 0x11, 0xe3, 0xd7, 0xe6, 0xa5, 0x59, 0x0c, 0xd3, 0xc4, 0xe4, 0x03, 0x80, + 0x2d, 0xd7, 0xf3, 0x68, 0x13, 0xaf, 0x1d, 0xc7, 0x90, 0x15, 0x9a, 0x54, 0xdb, 0x08, 0xad, 0xfb, + 0x5e, 0x4b, 0x17, 0xa9, 0x86, 0x4c, 0x16, 0x60, 0x62, 0xd5, 0x6b, 0xb4, 0x3a, 0xc2, 0x3d, 0x20, + 0xc4, 0x05, 0x45, 0x44, 0x4e, 0x73, 0x79, 0x41, 0x3d, 0xf5, 0x91, 0x9b, 0x24, 0xe4, 0x21, 0x10, + 0x01, 0x10, 0xb3, 0xd6, 0xd9, 0x6b, 0x51, 0xf1, 0xb9, 0xa3, 0xa9, 0x44, 0x32, 0xc2, 0xe9, 0x6e, + 0x04, 0x24, 0x4b, 0x91, 0xcd, 0x7d, 0x00, 0x63, 0xda, 0x9c, 0xcf, 0x88, 0x41, 0x30, 0xad, 0xc7, + 0x20, 0x18, 0xd5, 0x63, 0x0d, 0xfc, 0xa3, 0x02, 0x5c, 0xcc, 0xfe, 0x96, 0x84, 0x02, 0xb6, 0x09, + 0xa3, 0x0a, 0xa8, 0x5e, 0x9d, 0x48, 0xd5, 0x3f, 0xa1, 0x01, 0xf1, 0x0f, 0x5a, 0xae, 0x3c, 0x7a, + 0xef, 0x63, 0x1e, 0x2f, 0x60, 0x8f, 0xff, 0x7f, 0x46, 0x60, 0x1a, 0xbd, 0xab, 0x93, 0xeb, 0xd4, + 0xa7, 0x18, 0x4b, 0x04, 0x61, 0x9a, 0x79, 0x59, 0x58, 0x9a, 0x38, 0x3c, 0x19, 0xf8, 0xca, 0x20, + 0x20, 0xef, 0xea, 0x3e, 0x11, 0x45, 0x2d, 0xff, 0x87, 0x04, 0xea, 0x5d, 0x88, 0x9d, 0x25, 0xde, + 0x32, 0xae, 0xe4, 0x4f, 0xbc, 0xe8, 0x0d, 0x9c, 0x74, 0xd1, 0xdb, 0x51, 0x8b, 0x1e, 0x8f, 0x51, + 0xf1, 0xa6, 0xb6, 0xe8, 0xbd, 0xfa, 0xd5, 0x6e, 0xe8, 0x55, 0xaf, 0x76, 0xc3, 0x2f, 0xb7, 0xda, + 0x8d, 0xbc, 0xe0, 0x6a, 0x77, 0x0f, 0x26, 0x37, 0x28, 0x6d, 0x6a, 0x17, 0x25, 0xa3, 0xf1, 0xee, + 0xe9, 0x51, 0x34, 0x81, 0x65, 0xdd, 0x96, 0x24, 0xa8, 0x72, 0x57, 0x4d, 0xf8, 0xbb, 0x59, 0x35, + 0xc7, 0x5e, 0xf1, 0xaa, 0x39, 0xfe, 0x32, 0xab, 0x66, 0x6a, 0xe9, 0x9b, 0x38, 0xf5, 0xd2, 0xf7, + 0x32, 0xab, 0xd5, 0x27, 0xe8, 0x52, 0x58, 0xab, 0xad, 0x08, 0xef, 0x11, 0xcd, 0x5d, 0x63, 0xc5, + 0x0f, 0xa5, 0xc7, 0x35, 0xfe, 0xcd, 0x60, 0x5b, 0x7e, 0x20, 0xaf, 0xbc, 0xf1, 0x6f, 0x6b, 0x01, + 0x1d, 0x09, 0x75, 0x7a, 0xe5, 0xae, 0x3f, 0x2c, 0x9e, 0xec, 0x89, 0x35, 0x2e, 0x79, 0x8c, 0xb2, + 0x65, 0xb9, 0xf5, 0x57, 0x05, 0x7e, 0x29, 0xf9, 0xbf, 0xe3, 0x52, 0xf9, 0x32, 0x17, 0x85, 0xbf, + 0x15, 0x3f, 0xe5, 0x17, 0x61, 0x07, 0x02, 0xa7, 0xf1, 0x24, 0xbe, 0xa9, 0xfd, 0x21, 0xfb, 0xce, + 0xf5, 0x02, 0x0c, 0xac, 0x1a, 0x9f, 0x15, 0xcd, 0xc2, 0xdd, 0x3b, 0x72, 0x01, 0x10, 0x11, 0x0d, + 0x38, 0xd8, 0x5c, 0x00, 0x74, 0x02, 0xf4, 0x95, 0x3b, 0x63, 0xd9, 0xfc, 0x25, 0x7a, 0x66, 0x0b, + 0xde, 0x4b, 0xbf, 0xa5, 0xc6, 0xc3, 0x48, 0xfc, 0x96, 0x5a, 0x17, 0x63, 0xfc, 0xaa, 0x7a, 0x07, + 0x2e, 0xd8, 0xf4, 0xd0, 0x7f, 0x4a, 0x5f, 0x2d, 0xdb, 0x1f, 0xc0, 0x79, 0x93, 0x21, 0x7f, 0x75, + 0xc3, 0x03, 0xa2, 0x7f, 0x92, 0x1d, 0x46, 0x5d, 0x10, 0xf0, 0x30, 0xea, 0x3c, 0x1a, 0x33, 0xfb, + 0x53, 0xdf, 0x37, 0xb0, 0xcc, 0xf2, 0xe1, 0xa2, 0xc9, 0xbc, 0xda, 0x6c, 0x62, 0xb6, 0xc5, 0x86, + 0xdb, 0x76, 0xbc, 0x88, 0x6c, 0xc2, 0x98, 0xf6, 0x33, 0x61, 0x2a, 0xd0, 0x4a, 0x84, 0x4e, 0x13, + 0x03, 0x8c, 0x10, 0x9c, 0x31, 0xd8, 0xa2, 0x50, 0x49, 0x8a, 0x87, 0x89, 0x4c, 0xaf, 0x73, 0x01, + 0x26, 0xb4, 0x9f, 0xca, 0x64, 0x89, 0x1f, 0xbf, 0x56, 0x83, 0x29, 0x30, 0x93, 0xc4, 0x6a, 0xc0, + 0x5c, 0x96, 0xd0, 0x30, 0x3a, 0xd3, 0x73, 0xb2, 0x1c, 0xc7, 0x79, 0xea, 0xed, 0x6d, 0x77, 0x26, + 0x2f, 0xc6, 0x93, 0xf5, 0xff, 0x0f, 0xc0, 0x05, 0x31, 0x18, 0xaf, 0x72, 0xc4, 0xc9, 0x8f, 0x60, + 0x4c, 0x1b, 0x63, 0x21, 0xf4, 0x2b, 0x32, 0xf4, 0x66, 0xde, 0x5c, 0xe0, 0x26, 0x8d, 0x0e, 0x02, + 0xea, 0x89, 0xe1, 0x5e, 0xe9, 0xb3, 0x75, 0x96, 0xa4, 0x05, 0x93, 0xe6, 0x40, 0x0b, 0xab, 0xce, + 0xb5, 0xcc, 0x4a, 0x4c, 0x54, 0x19, 0xc8, 0xb9, 0x59, 0xcf, 0x1c, 0xee, 0x95, 0x3e, 0x3b, 0xc1, + 0x9b, 0x7c, 0x03, 0x67, 0x53, 0xa3, 0x2c, 0x8c, 0x75, 0x6f, 0x64, 0x56, 0x98, 0xc2, 0xe6, 0xe6, + 0xd8, 0x00, 0xc1, 0xb9, 0xd5, 0xa6, 0x2b, 0x21, 0x4d, 0x18, 0xd7, 0x07, 0x5e, 0x98, 0x9d, 0xae, + 0x76, 0x11, 0x25, 0x47, 0xe4, 0xca, 0x9d, 0x90, 0x25, 0x8e, 0xfd, 0x73, 0xd3, 0xc4, 0x6c, 0x20, + 0x8f, 0xc0, 0x10, 0xff, 0xcd, 0x96, 0x80, 0xad, 0x80, 0x86, 0xd4, 0x6b, 0x50, 0xc3, 0x41, 0xfb, + 0x25, 0x97, 0x80, 0x7f, 0x5d, 0x80, 0x72, 0x16, 0xdf, 0x1a, 0xf5, 0x9a, 0x64, 0x0b, 0x4a, 0xc9, + 0x8a, 0xc4, 0xac, 0xb6, 0x54, 0xac, 0xdc, 0xdc, 0x26, 0xad, 0xf4, 0xd9, 0x29, 0x6a, 0xb2, 0x01, + 0x67, 0x35, 0x98, 0x30, 0xae, 0x16, 0x4f, 0x62, 0x5c, 0x65, 0xa3, 0x90, 0x22, 0xd5, 0x6d, 0xd3, + 0x2b, 0xb8, 0x33, 0x2e, 0xf9, 0x87, 0x8e, 0xeb, 0x31, 0x45, 0x57, 0x0b, 0xf5, 0x04, 0x31, 0x54, + 0xc8, 0x86, 0x5b, 0x5b, 0x11, 0x2a, 0x1f, 0x94, 0x28, 0x14, 0xeb, 0x63, 0x5c, 0xc1, 0x85, 0x8d, + 0x8e, 0x3f, 0x4f, 0x55, 0xcc, 0xae, 0xc0, 0xe0, 0xf6, 0x5a, 0x6d, 0xb1, 0x2a, 0x1e, 0xbb, 0xf2, + 0x10, 0x09, 0xad, 0xb0, 0xde, 0x70, 0x6c, 0x5e, 0x60, 0x7d, 0x04, 0xe4, 0x3e, 0x8d, 0x44, 0xb0, + 0x76, 0x45, 0xf7, 0x3a, 0x0c, 0x0b, 0x90, 0xa0, 0x44, 0xd7, 0xb8, 0x96, 0xc0, 0x92, 0x65, 0xd6, + 0x96, 0x3c, 0x27, 0xb4, 0xa8, 0x13, 0x6a, 0x1b, 0xf3, 0xfb, 0x30, 0x12, 0x08, 0x98, 0xd8, 0x97, + 0x27, 0x55, 0x5a, 0x0b, 0x04, 0x73, 0x7b, 0xb6, 0xc4, 0xb1, 0xd5, 0x5f, 0xd6, 0x1a, 0x86, 0x33, + 0xd9, 0x5c, 0x5d, 0x5a, 0x64, 0x52, 0x15, 0xc2, 0x92, 0xc3, 0x71, 0x0b, 0x7d, 0xc8, 0x23, 0xaa, + 0x3f, 0x75, 0x45, 0xd1, 0xe0, 0x47, 0x2e, 0x82, 0xf8, 0x68, 0x28, 0xd6, 0x5d, 0x15, 0x1c, 0x25, + 0x83, 0x5b, 0x5e, 0x7a, 0x86, 0x0d, 0x0c, 0xfb, 0x72, 0x1f, 0xdd, 0x65, 0x5e, 0x45, 0x23, 0x1c, + 0x98, 0xe3, 0xdb, 0x3c, 0xeb, 0x95, 0x48, 0x40, 0xe7, 0xab, 0xa5, 0x71, 0x11, 0x46, 0x15, 0x4c, + 0xdd, 0x7d, 0x71, 0x59, 0x19, 0xf8, 0xbb, 0x77, 0xf9, 0xab, 0xe0, 0x86, 0x62, 0x10, 0xd3, 0xb1, + 0x2a, 0xf8, 0x77, 0xf7, 0x2d, 0x57, 0x11, 0xd2, 0x20, 0xfa, 0x56, 0xab, 0x88, 0xe3, 0x02, 0x9d, + 0xa6, 0x0a, 0x03, 0x7f, 0x77, 0xfe, 0x24, 0x82, 0xfa, 0x96, 0xab, 0x60, 0x82, 0xfa, 0xf6, 0xaa, + 0xa0, 0x32, 0x80, 0x12, 0x9f, 0xa4, 0xa9, 0x4a, 0x96, 0xd3, 0x95, 0x48, 0xc3, 0x75, 0x82, 0xa2, + 0xeb, 0x78, 0x50, 0xb8, 0xc8, 0x85, 0xf5, 0x4b, 0xa8, 0x86, 0x09, 0xec, 0xdb, 0xad, 0xe6, 0x1f, + 0x14, 0x78, 0x38, 0xa7, 0xda, 0xa6, 0x96, 0xfa, 0xd1, 0x7b, 0xec, 0x6b, 0x57, 0xf3, 0xda, 0xd7, + 0xfe, 0xd0, 0xf5, 0x9a, 0xfa, 0xd5, 0xbc, 0xd3, 0x89, 0x0e, 0x54, 0xb8, 0xe3, 0x27, 0xae, 0xd7, + 0xb4, 0x93, 0xd8, 0xe4, 0x03, 0x98, 0xd0, 0x40, 0x4a, 0x5b, 0xe3, 0x39, 0x23, 0x74, 0x72, 0xb7, + 0x69, 0x9b, 0x98, 0xd6, 0xdf, 0x16, 0x60, 0x2a, 0x23, 0x29, 0x31, 0x1a, 0x33, 0xf0, 0x14, 0xa4, + 0x16, 0x2a, 0x91, 0x30, 0x09, 0x23, 0x4b, 0x18, 0x9b, 0xa4, 0x42, 0xc4, 0x68, 0xf9, 0x5a, 0x02, + 0xe5, 0xa2, 0x96, 0xba, 0x2b, 0x3b, 0x69, 0xb2, 0x8e, 0x4e, 0x42, 0x80, 0xb8, 0x25, 0xc2, 0x6c, + 0x5c, 0x63, 0x2a, 0xad, 0x96, 0x7d, 0xf9, 0x95, 0xa4, 0x7f, 0xd6, 0xaa, 0xb1, 0x7e, 0xab, 0x08, + 0xe7, 0x32, 0xfa, 0x5f, 0xa3, 0xd1, 0xdf, 0x85, 0x08, 0x12, 0x39, 0xb0, 0xfb, 0x7f, 0x49, 0x39, + 0xb0, 0xad, 0x7f, 0x5f, 0x84, 0x73, 0x3b, 0xed, 0x10, 0x5f, 0x58, 0xad, 0x7a, 0x4f, 0xa9, 0x17, + 0xf9, 0xc1, 0x73, 0x7c, 0x15, 0x42, 0xde, 0x85, 0xc1, 0x15, 0xda, 0x6a, 0xf9, 0x62, 0xfe, 0x5f, + 0x92, 0xde, 0x11, 0x49, 0x6c, 0x44, 0x5a, 0xe9, 0xb3, 0x39, 0x36, 0xf9, 0x00, 0x46, 0x57, 0xa8, + 0x13, 0x44, 0x7b, 0xd4, 0x91, 0x47, 0x16, 0x99, 0xc9, 0x42, 0x23, 0x11, 0x08, 0x2b, 0x7d, 0x76, + 0x8c, 0x4d, 0xe6, 0xd9, 0x69, 0xde, 0xdb, 0x57, 0xaf, 0xc9, 0x73, 0x2a, 0x64, 0x38, 0x2b, 0x7d, + 0x36, 0xe2, 0x92, 0x75, 0x98, 0xa8, 0xee, 0x53, 0x2f, 0x5a, 0xa7, 0x91, 0xd3, 0x74, 0x22, 0x47, + 0xa8, 0xb6, 0xaf, 0xe7, 0x11, 0x1b, 0xc8, 0x2b, 0x7d, 0xb6, 0x49, 0x4d, 0x3e, 0x82, 0xe1, 0xfb, + 0xbe, 0xdf, 0xdc, 0x7b, 0x4e, 0x85, 0xba, 0x5a, 0xc9, 0x63, 0x24, 0xd0, 0x56, 0xfa, 0x6c, 0x49, + 0xb1, 0x30, 0x08, 0xfd, 0xeb, 0xe1, 0xbe, 0x75, 0x54, 0x80, 0xf2, 0x92, 0xff, 0xcc, 0xcb, 0x94, + 0xea, 0xf7, 0x4c, 0xa9, 0x4a, 0xf6, 0x19, 0xf8, 0x09, 0xb9, 0xbe, 0x03, 0x03, 0x5b, 0xae, 0xb7, + 0x9f, 0x50, 0x05, 0x33, 0xe8, 0x18, 0x16, 0x8a, 0xc7, 0xf5, 0xf6, 0xc9, 0x9a, 0xd4, 0xc1, 0x85, + 0xad, 0xb1, 0xdf, 0x50, 0xfc, 0x33, 0xa8, 0x75, 0xec, 0x58, 0xd7, 0xe6, 0xbf, 0x65, 0x07, 0xdf, + 0x82, 0xd9, 0x9c, 0x7a, 0xc5, 0xf3, 0x70, 0xd6, 0xb7, 0x01, 0x54, 0x6c, 0xde, 0x84, 0x99, 0xcc, + 0xf1, 0x4b, 0x21, 0xfe, 0x93, 0xac, 0x89, 0xc8, 0x7b, 0x5e, 0x86, 0x61, 0x99, 0x2d, 0x89, 0xdb, + 0x7e, 0xe4, 0x4f, 0x7c, 0x20, 0x25, 0x3f, 0x54, 0x19, 0xd8, 0x43, 0x7e, 0x8f, 0xbb, 0x5a, 0x20, + 0x25, 0xfe, 0x39, 0x7d, 0xf8, 0x12, 0x1f, 0x8d, 0xe2, 0xc5, 0xea, 0x5c, 0xf1, 0xc3, 0xc8, 0x53, + 0x9e, 0xb7, 0xb6, 0xfa, 0x4d, 0x6e, 0x40, 0x49, 0xa6, 0x73, 0x10, 0x79, 0x63, 0x44, 0xc6, 0x6e, + 0x3b, 0x05, 0x27, 0xef, 0xc3, 0x6c, 0x12, 0x26, 0x7b, 0xc9, 0x5f, 0xb8, 0xe5, 0x15, 0x5b, 0x7f, + 0x59, 0xc4, 0x58, 0xd7, 0x5d, 0xe6, 0x35, 0x93, 0xee, 0x66, 0x4d, 0x48, 0xab, 0xb8, 0x59, 0x23, + 0x17, 0x61, 0x74, 0xb3, 0x66, 0xa4, 0x9c, 0xb2, 0x63, 0x00, 0x6b, 0x36, 0xeb, 0x42, 0x35, 0x68, + 0x1c, 0xb8, 0x11, 0x6d, 0x44, 0x9d, 0x40, 0xac, 0xc2, 0x76, 0x0a, 0x4e, 0x2c, 0x18, 0xbf, 0xdf, + 0x72, 0xf7, 0x1a, 0x92, 0x19, 0x17, 0x81, 0x01, 0x23, 0x6f, 0xc0, 0xe4, 0xaa, 0x17, 0x46, 0x4e, + 0xab, 0xb5, 0x4e, 0xa3, 0x03, 0xbf, 0x29, 0x92, 0x66, 0xda, 0x09, 0x28, 0xab, 0x77, 0xd1, 0xf7, + 0x22, 0xc7, 0xf5, 0x68, 0x60, 0x77, 0xbc, 0xc8, 0x3d, 0xa4, 0xa2, 0xef, 0x29, 0x38, 0x79, 0x07, + 0x66, 0x14, 0x6c, 0x33, 0x68, 0x1c, 0xd0, 0x30, 0x0a, 0x30, 0x11, 0x1d, 0x06, 0xfc, 0xb1, 0xb3, + 0x0b, 0xb1, 0x86, 0x96, 0xdf, 0x69, 0x2e, 0x7b, 0x4f, 0xdd, 0xc0, 0xf7, 0x30, 0x37, 0xc5, 0x88, + 0xa8, 0x21, 0x01, 0xb7, 0xfe, 0x70, 0x24, 0xf3, 0xb3, 0x7d, 0x99, 0x39, 0xf8, 0x25, 0x8c, 0x2f, + 0x3a, 0x6d, 0x67, 0xcf, 0x6d, 0xb9, 0x91, 0xab, 0x32, 0x76, 0xbd, 0xdb, 0xe3, 0x9b, 0x97, 0x09, + 0x3e, 0x68, 0x53, 0x27, 0xb6, 0x0d, 0x56, 0x73, 0x7f, 0x33, 0x04, 0x33, 0x99, 0x78, 0xe4, 0xba, + 0x48, 0xed, 0xa5, 0xd6, 0x55, 0x91, 0xec, 0xca, 0x4e, 0x82, 0xd9, 0x58, 0x22, 0x68, 0xb1, 0x45, + 0x1d, 0xaf, 0x23, 0x52, 0x5d, 0xd9, 0x06, 0x8c, 0x8d, 0x25, 0xd3, 0x1b, 0x34, 0x66, 0xe8, 0x38, + 0x6d, 0x27, 0xa0, 0xe4, 0x0a, 0x8c, 0x31, 0x88, 0x64, 0x35, 0xc0, 0x9f, 0xf8, 0x69, 0x20, 0xc6, + 0x69, 0xc3, 0x6f, 0x52, 0x8d, 0xd3, 0x20, 0xe7, 0x64, 0x42, 0x19, 0x27, 0x06, 0x91, 0x9c, 0x86, + 0x38, 0x27, 0x0d, 0x44, 0x5e, 0x83, 0x89, 0x6a, 0xbb, 0xad, 0x31, 0xc2, 0x1c, 0x57, 0xb6, 0x09, + 0x24, 0x97, 0x01, 0xaa, 0xed, 0xb6, 0x64, 0x83, 0xf9, 0xab, 0x6c, 0x0d, 0x42, 0x6e, 0xc6, 0xe1, + 0xca, 0x34, 0x56, 0x78, 0x9d, 0x60, 0x67, 0x94, 0x30, 0xb9, 0xaa, 0xd8, 0x4e, 0x82, 0x29, 0x70, + 0xb9, 0x26, 0xc0, 0xe4, 0x63, 0x38, 0x9f, 0xf0, 0xbb, 0xd0, 0x2a, 0x40, 0x53, 0xbf, 0x9d, 0x8f, + 0x40, 0xde, 0x83, 0x73, 0x89, 0x42, 0x59, 0x1d, 0x5a, 0xf5, 0xed, 0x9c, 0x52, 0xf2, 0x21, 0x94, + 0x13, 0xcf, 0xb6, 0xe3, 0x4a, 0xd1, 0x82, 0x6f, 0xe7, 0x96, 0xb3, 0xaf, 0x2b, 0xf1, 0xfe, 0x4b, + 0x54, 0x89, 0x97, 0x95, 0x76, 0x76, 0x21, 0x59, 0x81, 0x4a, 0xa6, 0x2f, 0x8b, 0x56, 0x31, 0xe6, + 0xe5, 0xb2, 0x7b, 0xa1, 0x91, 0x05, 0xb8, 0x98, 0x89, 0x22, 0x9b, 0x81, 0xd9, 0xba, 0xec, 0xae, + 0x38, 0x64, 0x1e, 0xa6, 0x63, 0x9f, 0x1e, 0xad, 0x09, 0x98, 0xa8, 0xcb, 0xce, 0x2c, 0x23, 0x6f, + 0x9b, 0x8f, 0xf3, 0x79, 0x65, 0x98, 0xa7, 0xcb, 0x4e, 0x17, 0x58, 0xc7, 0x05, 0xb8, 0x98, 0xb9, + 0x51, 0x4a, 0x7d, 0x7e, 0x2e, 0xa9, 0x38, 0x6a, 0x6b, 0xc1, 0x0d, 0x18, 0x40, 0x05, 0x9f, 0xdb, + 0x8a, 0xa5, 0xaf, 0x29, 0xd2, 0x73, 0x56, 0xac, 0xd4, 0x46, 0x1c, 0x72, 0x5f, 0xdd, 0x0d, 0xf6, + 0xa3, 0x25, 0xe3, 0x56, 0x52, 0x81, 0xca, 0xa8, 0x5c, 0xbf, 0x23, 0x94, 0xb7, 0x81, 0x2f, 0x73, + 0x0d, 0xf3, 0x97, 0x05, 0xa8, 0xf4, 0xd0, 0x0f, 0x54, 0x9f, 0x0a, 0x27, 0xe8, 0xd3, 0x03, 0xd5, + 0x27, 0xfe, 0x36, 0x76, 0xfe, 0x64, 0x3a, 0xc8, 0xab, 0xee, 0x56, 0x07, 0x48, 0x5a, 0x0d, 0x25, + 0xdf, 0x85, 0xd1, 0x5a, 0x6d, 0xc5, 0x70, 0xe8, 0x4b, 0x5d, 0x0e, 0xc5, 0x18, 0xe4, 0xf6, 0x89, + 0x3c, 0xf8, 0x34, 0xff, 0x3d, 0x6b, 0x09, 0xca, 0x79, 0x1a, 0x24, 0x2e, 0x2c, 0x3c, 0xb6, 0x96, + 0x76, 0xb1, 0xc4, 0x17, 0x16, 0x13, 0x6c, 0xbd, 0x07, 0xe7, 0x14, 0x35, 0x4f, 0xda, 0xa1, 0x3d, + 0xfc, 0x17, 0xc7, 0x4e, 0x15, 0x60, 0x20, 0x06, 0x58, 0x7f, 0x31, 0x90, 0x22, 0xac, 0x75, 0x0e, + 0x0f, 0x9d, 0xe0, 0x39, 0xa9, 0x9a, 0x84, 0xfd, 0x3d, 0x35, 0xfd, 0x85, 0x81, 0x9f, 0x1d, 0x55, + 0xfa, 0x34, 0xee, 0x6c, 0x39, 0xc6, 0x8d, 0xdd, 0x6b, 0x50, 0x7e, 0x25, 0x55, 0xe4, 0xc1, 0x8d, + 0x0c, 0x20, 0xd9, 0x85, 0x09, 0xb1, 0x65, 0xe2, 0x6f, 0x39, 0xb5, 0x6f, 0x27, 0xa7, 0xb6, 0xd1, + 0xbc, 0x9b, 0x06, 0x09, 0x9f, 0x04, 0x26, 0x1b, 0xf2, 0x25, 0x4c, 0x4a, 0x05, 0x49, 0x30, 0xe6, + 0x4e, 0x44, 0x77, 0xba, 0x33, 0x36, 0x69, 0x38, 0xe7, 0x04, 0x23, 0xd6, 0x64, 0xb9, 0xc6, 0x70, + 0xce, 0x83, 0x27, 0x69, 0xb2, 0x41, 0x22, 0x9a, 0x6c, 0xc0, 0xe6, 0x3e, 0x03, 0x92, 0xee, 0x57, + 0xaf, 0x59, 0x3c, 0xa1, 0xcd, 0xe2, 0xb9, 0x2a, 0x4c, 0x65, 0x74, 0xe0, 0x54, 0x2c, 0x3e, 0x03, + 0x92, 0x6e, 0xe9, 0x69, 0x38, 0x58, 0xd7, 0xe1, 0x0d, 0x25, 0x02, 0x35, 0x1b, 0x0c, 0x9e, 0xd2, + 0xf0, 0xfc, 0x9b, 0x45, 0xa8, 0xf4, 0x40, 0x25, 0x7f, 0x50, 0x48, 0x4a, 0x9b, 0xcf, 0xc6, 0x0f, + 0x92, 0xd2, 0xce, 0xa6, 0xcf, 0x10, 0xfb, 0xc2, 0x87, 0x3f, 0xfd, 0xeb, 0x17, 0x56, 0xf8, 0xd3, + 0x43, 0x76, 0x7a, 0x69, 0x0d, 0xe8, 0xd2, 0xb2, 0x61, 0xda, 0x38, 0x2a, 0x9d, 0x64, 0xcf, 0xb8, + 0x0c, 0x20, 0x52, 0x7c, 0xae, 0xf9, 0xfb, 0x42, 0x3d, 0xd3, 0x20, 0xd6, 0x3d, 0x98, 0x49, 0xf0, + 0x14, 0xc6, 0xf0, 0xef, 0x82, 0x7a, 0xe0, 0x8d, 0x4c, 0xfb, 0x17, 0xce, 0xfe, 0xe2, 0xa8, 0x32, + 0xc1, 0x34, 0xe9, 0x9b, 0x71, 0xfc, 0x78, 0xf9, 0x97, 0xb5, 0xae, 0x9b, 0xf3, 0xab, 0x2d, 0x3d, + 0xf0, 0x0d, 0xb9, 0x03, 0x43, 0x1c, 0x92, 0x88, 0xd2, 0xac, 0x63, 0x8b, 0x35, 0x41, 0x20, 0x5a, + 0x33, 0xf8, 0x1c, 0x15, 0x7f, 0x54, 0xe3, 0xf0, 0x09, 0xd6, 0x0e, 0xcf, 0x5a, 0x12, 0x83, 0x55, + 0x24, 0xe8, 0x81, 0x6a, 0x1c, 0xe6, 0x41, 0xfa, 0x5e, 0x48, 0x3c, 0xcf, 0x7f, 0xd6, 0xa2, 0x4d, + 0x9e, 0x11, 0x6e, 0x61, 0x5c, 0xf8, 0x5e, 0x0c, 0x38, 0x8c, 0x01, 0x92, 0x59, 0x9f, 0xc2, 0x0c, + 0xdb, 0xa0, 0x83, 0x64, 0x7d, 0x98, 0xab, 0x80, 0xc1, 0x4c, 0x87, 0x76, 0x87, 0x81, 0xd0, 0xa1, + 0x5d, 0x14, 0x5a, 0x6b, 0x70, 0x9e, 0x1b, 0x03, 0xf5, 0x2e, 0xc5, 0xa6, 0xf7, 0x41, 0xfc, 0x9d, + 0x78, 0xcc, 0x98, 0xd1, 0x7b, 0x8e, 0x67, 0x7d, 0x82, 0xaf, 0x65, 0xc4, 0x24, 0x75, 0x7d, 0x2f, + 0xb6, 0xfc, 0x9d, 0xec, 0x79, 0xed, 0xff, 0x09, 0x17, 0xab, 0xed, 0x36, 0xf5, 0x9a, 0x31, 0xe1, + 0x76, 0xe0, 0x9c, 0x30, 0xf8, 0x01, 0xa9, 0xc2, 0x20, 0x62, 0xab, 0x7b, 0x4b, 0xd1, 0xdc, 0x8c, + 0xe6, 0x20, 0x9e, 0x08, 0xdb, 0x89, 0x15, 0x70, 0x4a, 0xab, 0x09, 0xb3, 0xb5, 0xce, 0xde, 0xa1, + 0x1b, 0xa1, 0x1b, 0x3c, 0x06, 0x10, 0x91, 0x75, 0xaf, 0xca, 0x44, 0x53, 0x5c, 0x18, 0xd7, 0xe3, + 0x57, 0x15, 0xe8, 0x49, 0x2f, 0x82, 0x8a, 0x3c, 0xbd, 0x73, 0x33, 0x26, 0x45, 0xab, 0x07, 0xaf, + 0x05, 0x8b, 0x45, 0x32, 0x2a, 0x6b, 0x0a, 0xce, 0xea, 0x77, 0x40, 0x7c, 0x86, 0xcc, 0xc0, 0x94, + 0x79, 0xb7, 0xc3, 0xc1, 0x5f, 0xc3, 0x34, 0xb7, 0x3d, 0xf3, 0xb0, 0xdb, 0xf3, 0x71, 0x84, 0xe9, + 0xe2, 0xee, 0x7c, 0xc2, 0xff, 0x1e, 0xdd, 0x72, 0x55, 0x42, 0x85, 0xdd, 0x79, 0xfe, 0xe2, 0xf1, + 0xe9, 0xbc, 0x71, 0x83, 0x58, 0xdc, 0x9d, 0x5f, 0x18, 0x16, 0xe1, 0x4b, 0x19, 0x77, 0x3e, 0xfc, + 0xdf, 0x0a, 0xf7, 0x79, 0x7c, 0x64, 0xbf, 0x42, 0x1d, 0x7c, 0x10, 0x93, 0xfd, 0x54, 0x79, 0x12, + 0x8a, 0x6e, 0x53, 0x9e, 0xd6, 0xdd, 0xa6, 0xf5, 0xa7, 0x05, 0xb8, 0xce, 0x75, 0xa0, 0x6c, 0x3a, + 0xbc, 0xe8, 0xc9, 0x21, 0x26, 0xef, 0x03, 0xcf, 0xda, 0x2e, 0x14, 0x4d, 0x4b, 0xb4, 0xbc, 0x1b, + 0x27, 0x4e, 0x40, 0xaa, 0x30, 0xae, 0x3f, 0x29, 0x39, 0x59, 0x78, 0x38, 0x7b, 0xec, 0xf0, 0xb1, + 0xa3, 0x9e, 0x99, 0x3c, 0x81, 0x0b, 0xcb, 0xdf, 0xb0, 0x09, 0x21, 0x76, 0x27, 0xa1, 0xb0, 0xc7, + 0x4f, 0x61, 0xcf, 0x6c, 0x8b, 0x19, 0x63, 0x9e, 0xa6, 0x93, 0x60, 0x76, 0x34, 0x95, 0x1b, 0x9c, + 0xd2, 0x9a, 0x47, 0x6d, 0x03, 0x66, 0xfd, 0x45, 0x01, 0x2e, 0x66, 0xd7, 0x26, 0x16, 0x96, 0x55, + 0x38, 0xbb, 0xe8, 0x78, 0xbe, 0xe7, 0x36, 0x9c, 0x56, 0xad, 0x71, 0x40, 0x9b, 0x1d, 0x15, 0xe4, + 0x54, 0xad, 0x32, 0xfb, 0xd4, 0x93, 0xe4, 0x12, 0xc5, 0x4e, 0x53, 0xb1, 0x43, 0x19, 0xbe, 0x4a, + 0xe0, 0x6b, 0x6f, 0x8b, 0x06, 0x8a, 0x1f, 0x6f, 0x59, 0x4e, 0x29, 0xb9, 0x2d, 0x8d, 0xec, 0xcd, + 0x1d, 0xcf, 0x8d, 0x14, 0x11, 0xb7, 0xae, 0x64, 0x15, 0x59, 0xff, 0xb6, 0x00, 0xe7, 0x31, 0xaf, + 0x91, 0x91, 0x29, 0x31, 0x8e, 0xf5, 0x2b, 0xc3, 0xd5, 0x16, 0x8c, 0x57, 0x16, 0x06, 0xb6, 0x19, + 0xb7, 0x96, 0xbc, 0x0d, 0x03, 0x35, 0xe9, 0x24, 0x35, 0x99, 0x48, 0x43, 0x2b, 0x53, 0xfe, 0xfb, + 0x41, 0x64, 0x23, 0x16, 0xdb, 0x73, 0x96, 0x68, 0xd8, 0xa0, 0x1e, 0xe6, 0x0b, 0xe6, 0x87, 0x7d, + 0x0d, 0x12, 0x87, 0x2a, 0x1a, 0xc8, 0x0b, 0x55, 0x34, 0x68, 0x86, 0x2a, 0xb2, 0x9e, 0xf2, 0xac, + 0x46, 0xc9, 0x0e, 0x89, 0x41, 0xfa, 0x24, 0x95, 0x5e, 0x98, 0xef, 0x03, 0xe7, 0xb2, 0x7a, 0xb6, + 0x7b, 0x37, 0x95, 0x39, 0x38, 0x3f, 0xb6, 0xee, 0x16, 0xbc, 0x66, 0xe0, 0x56, 0x5b, 0x2d, 0xff, + 0x19, 0x6d, 0x6e, 0x05, 0xfe, 0xa1, 0x1f, 0x19, 0x59, 0x5d, 0x44, 0x7e, 0xed, 0xf8, 0x1a, 0x45, + 0xcc, 0xca, 0x04, 0xd8, 0xfa, 0x3f, 0xe0, 0xf5, 0x1e, 0x1c, 0x45, 0xa7, 0x6a, 0x70, 0xd6, 0x49, + 0x94, 0x49, 0x6f, 0x97, 0xd7, 0xb3, 0xfa, 0x95, 0x64, 0x14, 0xda, 0x69, 0xfa, 0x1b, 0xdb, 0x46, + 0x4a, 0x5e, 0x52, 0x86, 0xe9, 0x2d, 0x7b, 0x73, 0x69, 0x67, 0x71, 0xbb, 0xbe, 0xfd, 0xe5, 0xd6, + 0x72, 0x7d, 0x67, 0xe3, 0xe1, 0xc6, 0xe6, 0xa3, 0x0d, 0x1e, 0x9c, 0xda, 0x28, 0xd9, 0x5e, 0xae, + 0xae, 0x97, 0x0a, 0x64, 0x1a, 0x4a, 0x06, 0x78, 0x79, 0x67, 0xa1, 0x54, 0xbc, 0xf1, 0xb5, 0x91, + 0x6a, 0x96, 0x5c, 0x84, 0x72, 0x6d, 0x67, 0x6b, 0x6b, 0xd3, 0x56, 0x5c, 0xf5, 0xd0, 0xd8, 0x33, + 0x70, 0xd6, 0x28, 0xbd, 0x67, 0x2f, 0x2f, 0x97, 0x0a, 0xac, 0x29, 0x06, 0x78, 0xcb, 0x5e, 0x5e, + 0x5f, 0xdd, 0x59, 0x2f, 0x15, 0x6f, 0xd4, 0xf5, 0xa7, 0x5d, 0xe4, 0x02, 0xcc, 0x2e, 0x2d, 0xef, + 0xae, 0x2e, 0x2e, 0x67, 0xf1, 0x9e, 0x86, 0x92, 0x5e, 0xb8, 0xbd, 0xb9, 0xbd, 0xc5, 0x59, 0xeb, + 0xd0, 0x47, 0xcb, 0x0b, 0xd5, 0x9d, 0xed, 0x95, 0x8d, 0x52, 0xbf, 0x35, 0x30, 0x52, 0x2c, 0x15, + 0x6f, 0xfc, 0xc8, 0x78, 0xf7, 0xc5, 0x9a, 0x2f, 0xd0, 0x77, 0x6a, 0xd5, 0xfb, 0xf9, 0x55, 0xf0, + 0xd2, 0xf5, 0x7b, 0xd5, 0x52, 0x81, 0x5c, 0x82, 0xf3, 0x06, 0x74, 0xab, 0x5a, 0xab, 0x3d, 0xda, + 0xb4, 0x97, 0xd6, 0x96, 0x6b, 0xb5, 0x52, 0xf1, 0xc6, 0xae, 0x11, 0x9e, 0x8d, 0xd5, 0xb0, 0x7e, + 0xaf, 0x5a, 0xb7, 0x97, 0x3f, 0xdf, 0x59, 0xb5, 0x97, 0x97, 0xd2, 0x35, 0x18, 0xa5, 0x5f, 0x2e, + 0xd7, 0x4a, 0x05, 0x32, 0x05, 0x67, 0x0c, 0xe8, 0xc6, 0x66, 0xa9, 0x78, 0xe3, 0x0d, 0x11, 0xc1, + 0x8b, 0x4c, 0x02, 0x2c, 0x2d, 0xd7, 0x16, 0x97, 0x37, 0x96, 0x56, 0x37, 0xee, 0x97, 0xfa, 0xc8, + 0x04, 0x8c, 0x56, 0xd5, 0xcf, 0xc2, 0x8d, 0x0f, 0xe1, 0x4c, 0xe2, 0x44, 0xcd, 0x30, 0xd4, 0x61, + 0xb4, 0xd4, 0x87, 0xe2, 0x97, 0x3f, 0xd1, 0xac, 0xc9, 0x0f, 0xc7, 0xa5, 0xc2, 0x8d, 0x05, 0x99, + 0xfa, 0x54, 0xfb, 0xce, 0xc9, 0x18, 0x0c, 0x2f, 0x2d, 0xdf, 0xab, 0xee, 0xac, 0x6d, 0x97, 0xfa, + 0xd8, 0x8f, 0x45, 0x7b, 0xb9, 0xba, 0xbd, 0xbc, 0x54, 0x2a, 0x90, 0x51, 0x18, 0xac, 0x6d, 0x57, + 0xb7, 0x97, 0x4b, 0x45, 0x32, 0x02, 0x03, 0x3b, 0xb5, 0x65, 0xbb, 0xd4, 0x3f, 0xff, 0x47, 0x7f, + 0x50, 0xe0, 0xb6, 0x3d, 0xf9, 0x86, 0xe8, 0x6b, 0xed, 0x30, 0x29, 0x96, 0x3c, 0x91, 0xe7, 0x31, + 0xf7, 0xe4, 0x88, 0x5a, 0xc0, 0x5c, 0x97, 0xcb, 0x0e, 0x44, 0xb8, 0x5e, 0xb8, 0x5d, 0x20, 0x36, + 0x3a, 0x87, 0x24, 0xce, 0x56, 0x8a, 0x73, 0xf6, 0xf1, 0x77, 0xee, 0x52, 0xd7, 0x23, 0x19, 0xf9, + 0x35, 0xb0, 0x74, 0x9e, 0x39, 0x27, 0x90, 0xef, 0x9e, 0xec, 0xa4, 0x21, 0xeb, 0x7c, 0xe3, 0x64, + 0xe8, 0xe4, 0x01, 0x4c, 0x30, 0xdd, 0x5c, 0xa1, 0x91, 0x0b, 0x49, 0x42, 0xed, 0x38, 0x30, 0x77, + 0x31, 0xbb, 0x50, 0xa5, 0x62, 0x19, 0xc7, 0x8e, 0xf0, 0x83, 0x75, 0x48, 0x64, 0x94, 0x07, 0x09, + 0xe1, 0x2b, 0xfe, 0xdc, 0xd9, 0x04, 0x78, 0xf7, 0xce, 0xed, 0x02, 0xa9, 0x61, 0x88, 0x35, 0x43, + 0xc9, 0x27, 0xf2, 0x51, 0x5b, 0x5a, 0xfb, 0xe7, 0xad, 0xa9, 0xa8, 0xc4, 0x89, 0x39, 0xa7, 0x83, + 0x0d, 0x20, 0x69, 0xdd, 0x99, 0x5c, 0x89, 0xe7, 0x41, 0xb6, 0x5a, 0x3d, 0x77, 0x2e, 0xe5, 0xf3, + 0xb7, 0xcc, 0xb4, 0x27, 0xb2, 0x0c, 0x93, 0xe2, 0x09, 0xb7, 0xd0, 0xe6, 0x49, 0xb7, 0xf3, 0x40, + 0x2e, 0x9b, 0xfb, 0x28, 0x27, 0x75, 0x22, 0x20, 0x73, 0x71, 0x3f, 0x92, 0xc7, 0x84, 0xb9, 0x0b, + 0x99, 0x65, 0xa2, 0x7f, 0xf7, 0x60, 0xd2, 0x3c, 0x5c, 0x10, 0x39, 0x40, 0x99, 0x67, 0x8e, 0xdc, + 0x06, 0xd5, 0x61, 0x76, 0xdd, 0x71, 0xf1, 0x8a, 0x42, 0x78, 0x96, 0x49, 0xbf, 0x30, 0x52, 0xe9, + 0xe2, 0x28, 0x56, 0xa3, 0x5e, 0x53, 0x0d, 0x42, 0x5e, 0x58, 0x75, 0xfc, 0x6c, 0x6a, 0x52, 0x47, + 0x36, 0xfd, 0xea, 0x88, 0x65, 0x26, 0xc3, 0xcd, 0x72, 0x95, 0x9c, 0xcb, 0xf3, 0xee, 0x25, 0xeb, + 0xa8, 0xa4, 0x27, 0x38, 0x6a, 0x73, 0xe2, 0xd4, 0xec, 0xca, 0x18, 0x48, 0x40, 0x4b, 0x22, 0x2e, + 0x0a, 0x43, 0x92, 0x23, 0xb8, 0x5c, 0x66, 0xb7, 0x0b, 0xe4, 0x6b, 0xfc, 0xaa, 0x33, 0xd9, 0x3d, + 0x72, 0xa3, 0x03, 0xa1, 0xfd, 0x5c, 0xc8, 0x64, 0x20, 0x3e, 0x94, 0x2e, 0xdc, 0x6d, 0x98, 0xce, + 0x72, 0x28, 0x56, 0x02, 0xed, 0xe2, 0x6d, 0x9c, 0x3b, 0x0b, 0x6c, 0x76, 0xd4, 0x68, 0xe6, 0x0f, + 0x52, 0x17, 0x7f, 0xd6, 0x5c, 0x9e, 0x1f, 0xc3, 0x24, 0x9b, 0x25, 0x0f, 0x29, 0x6d, 0x57, 0x5b, + 0xee, 0x53, 0x1a, 0x12, 0x19, 0x1f, 0x57, 0x81, 0xf2, 0x68, 0xaf, 0x17, 0xc8, 0x77, 0x60, 0xec, + 0x91, 0x13, 0x35, 0x0e, 0x44, 0x9c, 0x48, 0x19, 0x46, 0x12, 0x61, 0x73, 0xf2, 0x17, 0x16, 0xde, + 0x2e, 0x90, 0xef, 0xc3, 0xf0, 0x7d, 0x1a, 0xe1, 0xa3, 0xe2, 0xab, 0xca, 0xb7, 0x8e, 0xdb, 0x26, + 0x57, 0x3d, 0xf5, 0x72, 0x46, 0x36, 0x38, 0x69, 0x40, 0x25, 0xb7, 0x00, 0xf8, 0x82, 0x80, 0x1c, + 0x92, 0xc5, 0x73, 0xa9, 0x66, 0x93, 0xfb, 0x4c, 0x79, 0x68, 0xd1, 0x88, 0x9e, 0xb4, 0xca, 0x3c, + 0x19, 0xad, 0xc1, 0xa4, 0xca, 0x5e, 0xb3, 0x81, 0xe1, 0x3c, 0xac, 0x04, 0xb3, 0xf0, 0x14, 0xdc, + 0x3e, 0x64, 0x5f, 0x05, 0x4f, 0xdd, 0x8a, 0x71, 0x1f, 0x70, 0x25, 0x9d, 0xd5, 0x83, 0x47, 0xe8, + 0x4b, 0xa8, 0x14, 0x22, 0x47, 0xd3, 0x68, 0x57, 0xfc, 0x30, 0x32, 0x69, 0x15, 0x24, 0x9b, 0xf6, + 0x57, 0x61, 0x4e, 0xaf, 0xd7, 0x0c, 0x54, 0x1c, 0xaf, 0xb9, 0x79, 0xf1, 0x8f, 0xe7, 0xae, 0x76, + 0xc1, 0x10, 0xe7, 0xb7, 0xfe, 0xdf, 0x2e, 0x16, 0x70, 0x39, 0x59, 0x82, 0x29, 0x59, 0xd7, 0x66, + 0x9b, 0x7a, 0xb5, 0xda, 0x0a, 0x66, 0x2a, 0x91, 0x9e, 0x1c, 0x1a, 0x4c, 0x72, 0x27, 0xe9, 0x22, + 0xb6, 0xf5, 0x19, 0xf1, 0x1d, 0x48, 0xb7, 0xa8, 0x0f, 0xf1, 0xd6, 0x97, 0x19, 0x41, 0xf7, 0x21, + 0x37, 0x2a, 0x19, 0xca, 0xff, 0xee, 0x3c, 0xe9, 0x72, 0x00, 0x9a, 0xcb, 0x39, 0x42, 0xdc, 0x2e, + 0x90, 0x2f, 0x81, 0xa4, 0x8f, 0x24, 0x4a, 0x84, 0xb9, 0xc7, 0x2f, 0x25, 0xc2, 0x2e, 0xe7, 0x99, + 0x65, 0x98, 0x52, 0xd1, 0x5d, 0xe2, 0x72, 0x92, 0xd3, 0x96, 0x2e, 0x3b, 0xd8, 0x4c, 0x06, 0x9b, + 0xdd, 0xf9, 0x2e, 0x8c, 0x32, 0xe1, 0xe4, 0x53, 0x98, 0x12, 0x73, 0xdf, 0x68, 0x4f, 0x49, 0x2d, + 0x63, 0xe2, 0x70, 0x93, 0xdb, 0x92, 0x07, 0x30, 0x53, 0x4b, 0x08, 0x9e, 0xfb, 0xb1, 0x9f, 0x37, + 0x59, 0x20, 0xb0, 0x46, 0x23, 0x2e, 0xf9, 0x6c, 0x5e, 0x0f, 0x81, 0x70, 0xdb, 0x92, 0x64, 0xf7, + 0xd4, 0xa5, 0xcf, 0xc8, 0xa5, 0x44, 0xd3, 0x19, 0x10, 0xd1, 0x70, 0x1d, 0xcc, 0xed, 0xd9, 0x36, + 0xcf, 0x5f, 0x8c, 0x50, 0xe3, 0x06, 0xfc, 0x8a, 0x41, 0x60, 0x5c, 0xa2, 0x8b, 0x71, 0x3c, 0x9f, + 0x8b, 0x41, 0x7e, 0x03, 0xa3, 0xb3, 0x76, 0x3f, 0x9d, 0x91, 0xef, 0x64, 0x1d, 0xa2, 0x73, 0xce, + 0x97, 0x73, 0x6f, 0x9f, 0x0c, 0x59, 0x9d, 0x87, 0x27, 0xee, 0xd3, 0x68, 0xab, 0xd5, 0xd9, 0x77, + 0x31, 0xb3, 0x25, 0x51, 0xb6, 0x27, 0x05, 0x12, 0xd3, 0x5b, 0x06, 0x45, 0x8b, 0x0b, 0x6a, 0xf4, + 0xc7, 0x64, 0x15, 0x4a, 0x7c, 0x1b, 0xd1, 0x58, 0x5c, 0x4a, 0xb1, 0x10, 0x28, 0x4e, 0xe0, 0x1c, + 0x86, 0xb9, 0xa3, 0x75, 0x8b, 0xbb, 0x1c, 0x11, 0xf9, 0x69, 0xeb, 0x7a, 0xea, 0x94, 0x01, 0x53, + 0x11, 0xeb, 0xd9, 0x88, 0xd8, 0x34, 0xa4, 0x91, 0x0c, 0x03, 0xc3, 0xf3, 0x9a, 0x5e, 0x8b, 0x75, + 0x86, 0x74, 0x69, 0xbc, 0x82, 0x24, 0x42, 0x96, 0xed, 0xde, 0x25, 0x2a, 0xd7, 0x6b, 0x06, 0xd3, + 0x37, 0x0c, 0xd5, 0xe6, 0x74, 0x7c, 0xdf, 0xc1, 0xad, 0x0c, 0x43, 0xdf, 0xcc, 0xc4, 0x6d, 0x63, + 0xbf, 0x25, 0xd5, 0x84, 0x46, 0xb5, 0x3b, 0x8f, 0x2b, 0x23, 0xdb, 0x6b, 0x99, 0x26, 0xdc, 0x09, + 0x02, 0xea, 0x71, 0xe2, 0x3c, 0xb5, 0x25, 0x8b, 0xfa, 0x13, 0x5c, 0xc1, 0x34, 0x6a, 0xfe, 0xdc, + 0xae, 0x17, 0x0b, 0x9e, 0x87, 0xe7, 0x76, 0x81, 0xbc, 0x0f, 0x23, 0xa2, 0x8d, 0x8c, 0xc8, 0x68, + 0x74, 0xd8, 0xa5, 0xd5, 0x48, 0x09, 0x5c, 0x48, 0xd8, 0x66, 0x13, 0x27, 0x6f, 0xf4, 0x79, 0x9b, + 0xdf, 0x67, 0x7b, 0x76, 0xf3, 0x45, 0x28, 0x17, 0xe5, 0xe6, 0x8d, 0x94, 0x65, 0x15, 0x89, 0x45, + 0x82, 0x7a, 0xec, 0xb2, 0x9c, 0x09, 0x53, 0xbf, 0x31, 0xe6, 0xa0, 0x0a, 0x1d, 0xa6, 0xd4, 0x6f, + 0x03, 0xdc, 0x6b, 0xcb, 0x5e, 0x85, 0x52, 0xb5, 0x81, 0x1b, 0x4a, 0x8d, 0x1e, 0x3a, 0xed, 0x03, + 0x3f, 0xa0, 0xea, 0xec, 0x93, 0x2c, 0x90, 0xbc, 0x66, 0x94, 0x82, 0x22, 0x0a, 0xd6, 0xa8, 0x83, + 0x81, 0x99, 0x67, 0x95, 0x86, 0x92, 0x28, 0xca, 0xa6, 0xe8, 0x72, 0xd6, 0x99, 0x5e, 0x64, 0xa7, + 0xb3, 0xd6, 0xcb, 0xb1, 0xf9, 0x10, 0x17, 0x0c, 0x85, 0x1c, 0xaa, 0x1d, 0x42, 0x81, 0xd4, 0xa9, + 0x50, 0xbe, 0xbc, 0x51, 0xa8, 0x55, 0x79, 0xf5, 0x1c, 0x8b, 0x25, 0x8f, 0x3a, 0xaf, 0xfa, 0xef, + 0xc1, 0xe4, 0x32, 0x5b, 0xd0, 0x3b, 0x4d, 0x97, 0x07, 0xa3, 0x27, 0x66, 0x74, 0xf1, 0x5c, 0xc2, + 0x15, 0x99, 0xfa, 0x0a, 0x49, 0x85, 0x05, 0x41, 0xee, 0x29, 0x1a, 0x4c, 0x8e, 0xc7, 0xb4, 0x64, + 0x2b, 0xf2, 0x01, 0xe0, 0x09, 0x5f, 0x98, 0x0c, 0x66, 0xb9, 0x62, 0x59, 0x6d, 0xb7, 0x5b, 0xd2, + 0xb2, 0xcd, 0x6f, 0xea, 0x5f, 0x37, 0x4e, 0xa2, 0xa9, 0x72, 0xc9, 0x3b, 0xad, 0x7b, 0x7e, 0xa1, + 0xa5, 0xa2, 0xcd, 0xe1, 0x99, 0x53, 0xde, 0x6b, 0x2e, 0xaa, 0xf0, 0xd1, 0xd5, 0x56, 0x2b, 0x45, + 0x1c, 0x92, 0xb7, 0x4c, 0xee, 0x59, 0x38, 0xbd, 0x6a, 0xc0, 0x93, 0x3e, 0x57, 0xde, 0xaa, 0xed, + 0x36, 0x5f, 0x2c, 0x2f, 0xab, 0x05, 0xc3, 0x2c, 0x48, 0x9f, 0xf4, 0x93, 0xe5, 0x62, 0x6d, 0x7f, + 0x80, 0xd3, 0x2c, 0xce, 0x57, 0x4b, 0xf4, 0x73, 0x73, 0x32, 0x5d, 0xaf, 0xd2, 0xe5, 0x12, 0x85, + 0x6a, 0x9f, 0x38, 0x93, 0x48, 0xdd, 0xaf, 0x0c, 0x3c, 0xa9, 0x94, 0xfe, 0x9c, 0xdf, 0xe5, 0xbc, + 0x62, 0x65, 0x70, 0x2d, 0x25, 0x73, 0x82, 0xab, 0x2e, 0xe7, 0xe4, 0x9a, 0x57, 0x5d, 0xce, 0x4d, + 0x26, 0xfe, 0x00, 0x4a, 0xc9, 0x74, 0xc4, 0x8a, 0x69, 0x4e, 0x9e, 0xe2, 0xdc, 0x31, 0xb9, 0x07, + 0xd3, 0xfa, 0x88, 0xaa, 0x7e, 0xe7, 0xad, 0xfe, 0x79, 0x7c, 0xb6, 0x61, 0x26, 0x33, 0x7b, 0xb0, + 0xda, 0x62, 0xbb, 0xe5, 0x16, 0xce, 0xe5, 0x4a, 0xe1, 0x5c, 0x76, 0x02, 0x71, 0xf2, 0x9a, 0x69, + 0x3f, 0xc8, 0x4e, 0xa7, 0x3c, 0xf7, 0x7a, 0x0f, 0x2c, 0x21, 0xd0, 0xaf, 0x71, 0x07, 0x4c, 0xd5, + 0x71, 0x55, 0xb3, 0x28, 0xe4, 0x54, 0x60, 0x75, 0x43, 0x51, 0x73, 0x60, 0x3a, 0xa3, 0x38, 0x5f, + 0xc4, 0xd7, 0xf2, 0x79, 0xc6, 0x13, 0x6b, 0x57, 0x46, 0x49, 0xce, 0x95, 0x4c, 0xd7, 0x44, 0xd3, + 0x5d, 0x8e, 0xa4, 0x73, 0x6a, 0x3e, 0x9c, 0xbc, 0xc9, 0xf9, 0xe6, 0xa5, 0xe9, 0xac, 0xf4, 0xe6, + 0x49, 0xeb, 0x4f, 0x56, 0xf6, 0x6a, 0x25, 0x86, 0xae, 0xf9, 0xd1, 0x77, 0xb9, 0x25, 0xc8, 0xe4, + 0xae, 0x5b, 0x82, 0x32, 0x59, 0x5f, 0xc9, 0x47, 0x88, 0x67, 0x84, 0x11, 0x7b, 0x5d, 0xf4, 0x5f, + 0x3f, 0x67, 0x65, 0x27, 0xb6, 0x56, 0x33, 0x22, 0x13, 0x45, 0x70, 0xb7, 0xe5, 0x47, 0x97, 0x23, + 0x96, 0x2e, 0x49, 0xbd, 0xbb, 0x1c, 0x87, 0xca, 0xf1, 0xc0, 0x25, 0x9a, 0x7d, 0xda, 0x61, 0xfb, + 0x1a, 0xce, 0xe7, 0x26, 0xf0, 0x26, 0x6f, 0xa6, 0x3e, 0xe8, 0x1c, 0x49, 0xe4, 0xb7, 0x74, 0xc2, + 0xc8, 0xbd, 0xad, 0x4c, 0x61, 0x89, 0x34, 0xdf, 0xa9, 0x15, 0x3b, 0x23, 0x07, 0xf8, 0x7d, 0xd4, + 0x7c, 0xb5, 0x3c, 0xde, 0xb9, 0x7d, 0xbd, 0x94, 0xc5, 0x27, 0x4c, 0xaf, 0xa9, 0x5a, 0xbb, 0xa4, + 0x26, 0x96, 0x2c, 0x38, 0xcd, 0x9a, 0x7a, 0x92, 0xa6, 0xe5, 0xf1, 0x59, 0x82, 0x31, 0x2d, 0x01, + 0x38, 0x39, 0x6f, 0x88, 0xc9, 0xd8, 0x25, 0xe7, 0x8c, 0xce, 0x99, 0x1b, 0xe4, 0x22, 0xda, 0x9c, + 0x55, 0x1a, 0xf1, 0xdc, 0x56, 0x5c, 0x48, 0xf3, 0x30, 0xec, 0xcd, 0x4a, 0x0a, 0xbc, 0x35, 0x17, + 0x93, 0xc2, 0x31, 0x1a, 0x94, 0xdf, 0x25, 0xa2, 0x8b, 0xa6, 0x47, 0x93, 0xf2, 0x35, 0xd4, 0x29, + 0x91, 0x65, 0x14, 0x93, 0xa1, 0xc8, 0x98, 0x7c, 0xe7, 0x94, 0xf1, 0x4c, 0x83, 0x76, 0xb1, 0x65, + 0x6c, 0xe1, 0xd3, 0x8e, 0x8c, 0x8c, 0xe8, 0x6a, 0x0d, 0xed, 0x9a, 0x30, 0x3d, 0x43, 0x3b, 0x53, + 0xab, 0x72, 0x2e, 0xc7, 0xae, 0x29, 0xd2, 0x73, 0x5b, 0xfa, 0x43, 0x6d, 0x55, 0x4e, 0xe5, 0x3d, + 0x27, 0xd7, 0x93, 0xaa, 0x59, 0x5e, 0x6a, 0xf4, 0x2e, 0xab, 0xfe, 0x74, 0x56, 0xca, 0x74, 0xcd, + 0x00, 0x9c, 0x9b, 0x4f, 0x3d, 0x43, 0x0a, 0x6a, 0x79, 0xcb, 0xe1, 0xd6, 0x25, 0x81, 0x7a, 0x6e, + 0x0b, 0xbf, 0xd2, 0x96, 0xb7, 0x44, 0xa2, 0x73, 0x75, 0xe0, 0xee, 0x91, 0x09, 0x3d, 0x97, 0xf7, + 0x06, 0x3e, 0x06, 0x4a, 0x67, 0x29, 0x57, 0xba, 0x4b, 0xb7, 0x1c, 0xe6, 0x99, 0xf6, 0xe1, 0x99, + 0x74, 0x17, 0x19, 0xbf, 0x73, 0x09, 0xeb, 0x6e, 0xaf, 0x86, 0xa9, 0x75, 0x38, 0x23, 0xbb, 0x79, + 0x62, 0x1d, 0xce, 0xcf, 0x7f, 0xde, 0xe5, 0xa0, 0x73, 0xa6, 0xe6, 0xee, 0x7b, 0x5a, 0x72, 0x72, + 0x75, 0xcc, 0x49, 0xe7, 0x4b, 0x57, 0x4b, 0x4c, 0x56, 0x2e, 0xf3, 0x4d, 0xa6, 0xe1, 0x70, 0xfd, + 0x5c, 0x4f, 0x33, 0x4d, 0xe6, 0xf2, 0xb3, 0x6b, 0xab, 0xe5, 0x26, 0x33, 0x2f, 0xb5, 0xc6, 0x50, + 0xcf, 0xf1, 0xac, 0x18, 0x66, 0xa4, 0x9b, 0x56, 0x0c, 0x33, 0x93, 0x42, 0xdf, 0x42, 0xbb, 0x8a, + 0xed, 0xb7, 0xa8, 0x6e, 0x57, 0xd1, 0x92, 0x06, 0x27, 0xcc, 0x1a, 0xe4, 0x23, 0x34, 0x6a, 0x74, + 0xb7, 0x84, 0xcc, 0x9a, 0x9c, 0x74, 0xdf, 0x91, 0x51, 0x95, 0x91, 0x59, 0x59, 0xd1, 0x93, 0x49, + 0xa1, 0xe7, 0xca, 0xe9, 0x02, 0x41, 0xff, 0xae, 0xb4, 0x8b, 0x60, 0x83, 0xcb, 0xa6, 0x3d, 0x29, + 0xbf, 0xcd, 0xef, 0x4a, 0xa3, 0x88, 0x41, 0x96, 0xca, 0xc7, 0x9c, 0x24, 0xfb, 0x1e, 0x8c, 0xc7, + 0xb9, 0x97, 0x77, 0xe7, 0x35, 0xc2, 0x44, 0x42, 0xe6, 0x24, 0xe1, 0xfb, 0xf2, 0xe2, 0x04, 0xeb, + 0x33, 0x0b, 0xbb, 0xdb, 0x4f, 0x3e, 0x91, 0x46, 0x18, 0xa3, 0xa5, 0xa9, 0x4c, 0xce, 0x5d, 0x56, + 0xee, 0x71, 0x3d, 0x61, 0xa4, 0x9a, 0x17, 0x19, 0x29, 0x5f, 0xd5, 0xbc, 0xc8, 0x4a, 0xd9, 0x1a, + 0x5f, 0x2c, 0x7c, 0x29, 0x2d, 0x0e, 0x31, 0xd3, 0x4b, 0x46, 0xb3, 0x52, 0x7c, 0x2f, 0xe7, 0x15, + 0x27, 0x59, 0xd7, 0xa0, 0x94, 0xcc, 0x6e, 0xa9, 0x8e, 0x6b, 0x39, 0x69, 0x48, 0xd5, 0x19, 0x30, + 0x37, 0x2d, 0xe6, 0x96, 0x34, 0x9f, 0x9b, 0x7c, 0xaf, 0x66, 0x37, 0x4a, 0x67, 0xdd, 0x5d, 0x2d, + 0x8b, 0x13, 0x5d, 0xea, 0x07, 0xe9, 0x54, 0x22, 0x4d, 0x5d, 0x2d, 0xcb, 0xc8, 0x8d, 0xe9, 0xca, + 0x70, 0x4e, 0xd9, 0xf9, 0xb6, 0xdf, 0x32, 0x4f, 0xb8, 0x5d, 0xa2, 0xa2, 0xf7, 0xbc, 0x64, 0x26, + 0xbf, 0x02, 0xb3, 0x39, 0x01, 0xa4, 0xc9, 0xeb, 0x09, 0x43, 0x6c, 0x76, 0x80, 0x69, 0x35, 0x41, + 0x32, 0x33, 0x50, 0xaf, 0xa3, 0x77, 0x82, 0x11, 0xb8, 0x21, 0x75, 0xe3, 0xf7, 0xc8, 0x8d, 0x0e, + 0x78, 0xa2, 0x65, 0x6d, 0xcd, 0xcd, 0x8c, 0xf8, 0x40, 0x6a, 0x78, 0x5e, 0x31, 0xa0, 0x19, 0x97, + 0x7e, 0x19, 0x0c, 0xe7, 0xb2, 0x19, 0xb2, 0xb5, 0x83, 0xcd, 0x85, 0x8c, 0xa8, 0x1a, 0x6a, 0x2e, + 0xe4, 0x47, 0xdc, 0xc8, 0x6d, 0xe6, 0x96, 0x54, 0xb0, 0xb2, 0x39, 0xe6, 0x07, 0xd8, 0xc8, 0xe5, + 0xf8, 0x80, 0x71, 0x4c, 0xc5, 0xcc, 0x20, 0x39, 0xe8, 0xdd, 0x57, 0x0f, 0x5b, 0xee, 0xd7, 0x26, + 0xd5, 0xbc, 0xd6, 0xbe, 0xbc, 0xe8, 0x1c, 0xb9, 0xed, 0x5b, 0x96, 0xdf, 0x53, 0x76, 0xfb, 0x4e, + 0xba, 0x63, 0xab, 0xeb, 0xb1, 0x44, 0xd8, 0x16, 0xa3, 0xa3, 0x1a, 0x7c, 0x2e, 0x07, 0x4e, 0x36, + 0xd0, 0xdd, 0x28, 0x09, 0xd5, 0x0e, 0xae, 0xd9, 0x71, 0x61, 0x72, 0xf9, 0xf1, 0x79, 0x6c, 0xc4, + 0xd5, 0x38, 0xcd, 0x3c, 0x4e, 0x04, 0xe4, 0x10, 0xf3, 0xd8, 0x80, 0x9e, 0x6e, 0x1e, 0x27, 0x18, + 0x9a, 0xf3, 0x38, 0xd9, 0xcc, 0xa4, 0x21, 0x20, 0x77, 0x54, 0x93, 0xcd, 0x54, 0xf3, 0x38, 0x9b, + 0x63, 0x7e, 0xfc, 0x93, 0x5c, 0x8e, 0x6a, 0x1e, 0x9b, 0x1c, 0x73, 0xd0, 0x4f, 0x38, 0x8f, 0x93, + 0x95, 0x98, 0xf3, 0xf8, 0x54, 0xed, 0x53, 0xf3, 0x38, 0xbb, 0x7d, 0xa7, 0x9e, 0xc7, 0x89, 0x80, + 0x41, 0x46, 0x47, 0xb3, 0xe6, 0x71, 0x12, 0x9f, 0xcf, 0xe3, 0x24, 0x34, 0x61, 0x80, 0xe9, 0x32, + 0x8f, 0x93, 0x94, 0x9f, 0x23, 0xbf, 0x44, 0xb0, 0x93, 0x93, 0xcc, 0xe4, 0xdc, 0x38, 0x29, 0xe4, + 0x11, 0x5a, 0xff, 0x12, 0xf0, 0x93, 0xcd, 0xe6, 0x8b, 0x79, 0x4c, 0x71, 0x3e, 0xef, 0x4a, 0x21, + 0x26, 0x9b, 0x6b, 0x9a, 0xb6, 0xb2, 0x63, 0xbd, 0x74, 0x69, 0xf0, 0x2e, 0x9b, 0x37, 0xcd, 0x2e, + 0x7c, 0xbb, 0x85, 0xaa, 0xe9, 0xc2, 0x57, 0x9d, 0x83, 0x92, 0x7c, 0x73, 0x49, 0xba, 0xcf, 0xef, + 0x2f, 0xe4, 0xfd, 0x47, 0x92, 0x6e, 0x3e, 0x71, 0xb2, 0x3a, 0x75, 0x4b, 0xd5, 0x09, 0x2b, 0xd9, + 0xd2, 0xd3, 0xce, 0xf3, 0x75, 0xa9, 0x3d, 0xa4, 0x62, 0x5c, 0x25, 0x3a, 0xad, 0xcf, 0xf5, 0xdc, + 0x12, 0xb2, 0x8d, 0xa6, 0xde, 0x34, 0x5c, 0x33, 0x13, 0xe7, 0x05, 0xd3, 0xea, 0xc9, 0x35, 0x15, + 0xad, 0x47, 0xe7, 0x9a, 0x17, 0xca, 0x47, 0x71, 0x4d, 0x53, 0x7f, 0x8a, 0xa6, 0x33, 0xf1, 0xa6, + 0xcb, 0x7b, 0xec, 0xe7, 0x9f, 0x73, 0xa6, 0x0c, 0x97, 0x28, 0x86, 0x8b, 0x9e, 0x68, 0x1f, 0x8b, + 0x0b, 0x3e, 0x09, 0xcc, 0x15, 0x7e, 0x16, 0x3d, 0xf9, 0x14, 0x4a, 0x62, 0x79, 0x8b, 0x19, 0x64, + 0x21, 0xe6, 0x0e, 0xdd, 0x82, 0xb4, 0xd8, 0x9d, 0xa0, 0x05, 0x27, 0xb1, 0xd4, 0x9d, 0x44, 0x12, + 0xf9, 0x66, 0x2d, 0xb6, 0x1d, 0x6e, 0x07, 0x9d, 0x30, 0xa2, 0xcd, 0xb4, 0x39, 0xca, 0x6c, 0x8c, + 0x74, 0x9c, 0x30, 0xd1, 0x77, 0xe7, 0xc9, 0x2a, 0xae, 0x6d, 0x26, 0xb8, 0x9b, 0xbd, 0x2e, 0x9b, + 0x0d, 0x2e, 0x3d, 0x2b, 0xea, 0xf1, 0x90, 0xd9, 0xa6, 0xbc, 0xba, 0xf3, 0x1b, 0xa5, 0x44, 0x74, + 0xc2, 0xde, 0xe5, 0x89, 0x88, 0x1f, 0xa8, 0xb9, 0xed, 0xb0, 0x97, 0x64, 0x92, 0xcf, 0x99, 0xc8, + 0x67, 0x30, 0x2a, 0x89, 0x7b, 0x0b, 0x24, 0x49, 0x8d, 0x02, 0x59, 0x82, 0x09, 0xe3, 0xad, 0x96, + 0x3a, 0xdd, 0x64, 0xbd, 0xe0, 0xea, 0x32, 0xce, 0x13, 0xc6, 0x9b, 0x2c, 0xc5, 0x25, 0xeb, 0xa5, + 0x56, 0x2e, 0x97, 0xef, 0xc3, 0x98, 0x10, 0x69, 0x57, 0x69, 0xe4, 0x1b, 0xeb, 0x66, 0x34, 0xbf, + 0xe7, 0x4e, 0xd3, 0x8d, 0x16, 0x7d, 0xef, 0xb1, 0xbb, 0xdf, 0x53, 0x30, 0x69, 0x92, 0xdd, 0x79, + 0xf2, 0x03, 0x4c, 0x4b, 0x2c, 0x93, 0x45, 0xd3, 0xe8, 0x99, 0x1f, 0x3c, 0x71, 0xbd, 0xfd, 0x1e, + 0x2c, 0xaf, 0x98, 0x2c, 0x93, 0x74, 0xd2, 0xb5, 0xe4, 0x07, 0x30, 0x57, 0xcb, 0x67, 0xde, 0x93, + 0x49, 0xf7, 0xed, 0xa5, 0x06, 0x17, 0xd1, 0xb9, 0xe6, 0xb4, 0x6d, 0xef, 0xca, 0xf4, 0x4b, 0x1e, + 0x26, 0x51, 0x1a, 0xfa, 0x1b, 0x7e, 0xd0, 0xec, 0xcd, 0xb1, 0x62, 0xba, 0xeb, 0x26, 0xc8, 0xa4, + 0x30, 0xbe, 0x84, 0xf3, 0xb5, 0x5c, 0xd6, 0xbd, 0x58, 0xf4, 0xd2, 0x24, 0x2f, 0xa0, 0x28, 0x4e, + 0xd9, 0xee, 0xae, 0x3c, 0x57, 0x71, 0x4d, 0x63, 0xfb, 0xd0, 0x56, 0x40, 0x1f, 0xd3, 0x00, 0x9d, + 0xc2, 0x7b, 0xb9, 0x43, 0x9b, 0xe8, 0xb2, 0xe7, 0xab, 0x70, 0xb6, 0x96, 0x62, 0x95, 0x47, 0xd2, + 0xbd, 0x55, 0x0f, 0x60, 0x0a, 0x7b, 0x7a, 0xc2, 0x76, 0xf5, 0x70, 0x22, 0x1a, 0xbb, 0x4f, 0xa3, + 0x9d, 0xd5, 0x1e, 0x52, 0x92, 0xaf, 0x16, 0x24, 0xe2, 0xee, 0x1d, 0x46, 0x59, 0xd3, 0x28, 0xd3, + 0x18, 0xb9, 0x1f, 0xef, 0x67, 0xf2, 0x22, 0xa5, 0x67, 0xb5, 0x79, 0x1c, 0xee, 0xe2, 0x5a, 0x28, + 0x1c, 0xa3, 0x35, 0x13, 0x24, 0x87, 0xc4, 0xa6, 0x3a, 0xcd, 0x47, 0x3a, 0x24, 0x55, 0x7e, 0xfc, + 0xe3, 0xd3, 0x43, 0xc0, 0x2e, 0xa7, 0x1c, 0xe6, 0xbb, 0xb2, 0xe0, 0x26, 0xd4, 0x35, 0xbf, 0xf1, + 0x44, 0x37, 0xa1, 0x6a, 0x89, 0xeb, 0xe7, 0xcc, 0xb4, 0xf2, 0x62, 0xc5, 0xc7, 0xdc, 0xf2, 0xba, + 0x5f, 0x98, 0x9e, 0xba, 0x5e, 0x37, 0xa1, 0x9a, 0x49, 0xf6, 0xef, 0x4a, 0xdb, 0x22, 0x56, 0x68, + 0x72, 0xce, 0x15, 0x8d, 0x32, 0x2b, 0x22, 0x91, 0x69, 0x56, 0xd4, 0x1b, 0x9a, 0x7f, 0x11, 0x40, + 0xd2, 0x59, 0xf6, 0xd5, 0x61, 0x25, 0x37, 0x01, 0x7f, 0x17, 0xf7, 0xae, 0x29, 0xe1, 0x14, 0x64, + 0x08, 0x5e, 0x85, 0x1a, 0x4e, 0x97, 0xc5, 0xa2, 0xd4, 0x7d, 0x95, 0x6e, 0x17, 0xc8, 0x06, 0x9c, + 0xbb, 0x4f, 0x23, 0xb1, 0xc6, 0xd9, 0x34, 0x8c, 0x02, 0xb7, 0x11, 0x75, 0xbd, 0x55, 0x94, 0x67, + 0x93, 0x0c, 0x9a, 0xdd, 0x77, 0x18, 0xbf, 0x5a, 0x36, 0xbf, 0xae, 0x74, 0x5d, 0x3c, 0x68, 0xc5, + 0x55, 0xc5, 0x69, 0x9a, 0x98, 0x3f, 0xc5, 0x87, 0xb9, 0x83, 0x4e, 0x3e, 0x69, 0x29, 0x8e, 0x6b, + 0x22, 0x4e, 0x5b, 0x37, 0x61, 0x88, 0x13, 0xe5, 0x6e, 0xa8, 0xe3, 0x3a, 0x0d, 0xb9, 0x03, 0xa3, + 0xca, 0xc3, 0x86, 0x18, 0x45, 0xb9, 0xed, 0xba, 0x03, 0xa3, 0xfc, 0x68, 0x75, 0x72, 0x92, 0x8f, + 0x60, 0x54, 0xb9, 0xe4, 0x9c, 0x7a, 0xa7, 0xff, 0x14, 0x26, 0x74, 0xe7, 0x9c, 0xd3, 0x0b, 0xf2, + 0xfb, 0x78, 0xf7, 0x2b, 0xaf, 0x58, 0xf2, 0xe9, 0x67, 0x12, 0xb9, 0xbc, 0x84, 0x48, 0xf9, 0x02, + 0x29, 0x81, 0xb9, 0xcd, 0x3f, 0x9b, 0xa2, 0x26, 0x1f, 0xc9, 0xf7, 0x52, 0x8a, 0x38, 0x8d, 0xd4, + 0x45, 0x66, 0x93, 0x5c, 0xcc, 0x2f, 0x42, 0xac, 0x16, 0xd8, 0x9e, 0xcd, 0x3e, 0xc9, 0x1d, 0x75, + 0x6f, 0xd1, 0xe5, 0x71, 0xd9, 0x44, 0x2d, 0x2d, 0x95, 0x65, 0x2e, 0x9f, 0xd1, 0xe5, 0xfc, 0xc4, + 0x74, 0x38, 0x18, 0x0f, 0xf0, 0x14, 0x98, 0x2a, 0xcd, 0xed, 0x5e, 0x97, 0x44, 0x77, 0xf1, 0xb1, + 0x37, 0xcd, 0xae, 0x0b, 0x59, 0xb7, 0x53, 0xb4, 0x78, 0x05, 0xfa, 0x4a, 0xd8, 0xad, 0x4a, 0x1f, + 0xc7, 0x93, 0x77, 0x36, 0xbf, 0x65, 0x17, 0x32, 0x6e, 0xc5, 0x7b, 0x8e, 0x45, 0x1e, 0xbb, 0x5f, + 0x41, 0xed, 0x30, 0x33, 0xdc, 0x57, 0x3e, 0xb3, 0xeb, 0x9a, 0x63, 0x45, 0x26, 0xa5, 0xda, 0xf4, + 0x9e, 0xe0, 0x43, 0xb4, 0xec, 0x3c, 0x7c, 0x6f, 0xf4, 0xe0, 0x22, 0x25, 0xf1, 0x66, 0x4f, 0x3c, + 0x75, 0xc7, 0x7a, 0x81, 0xef, 0xb0, 0xd9, 0xf5, 0xf5, 0xc8, 0x2b, 0x98, 0x71, 0xed, 0xad, 0x1c, + 0x48, 0xb3, 0x19, 0x9a, 0x0e, 0xa4, 0x5d, 0xfb, 0x90, 0x27, 0xfe, 0xcf, 0xa1, 0x12, 0x7b, 0x8f, + 0x9c, 0x6e, 0x10, 0xf2, 0xfd, 0x16, 0x49, 0x4a, 0x52, 0x21, 0xe9, 0x96, 0x68, 0x67, 0xee, 0x6a, + 0x9e, 0x84, 0x43, 0xcd, 0x2d, 0x49, 0xf8, 0xbd, 0x25, 0x32, 0x52, 0xe6, 0xe5, 0xb6, 0xec, 0x62, + 0x87, 0x15, 0x2f, 0xf3, 0x5e, 0x09, 0xa3, 0xf4, 0x68, 0x9f, 0x9e, 0x91, 0x72, 0xee, 0x48, 0x30, + 0xb2, 0xba, 0x0c, 0xef, 0x69, 0x7c, 0xd7, 0x92, 0x43, 0x71, 0xda, 0x01, 0x75, 0xe2, 0xd7, 0x68, + 0x89, 0xe8, 0x80, 0xfa, 0x0b, 0xe0, 0x74, 0x51, 0xf2, 0x29, 0x55, 0x16, 0x86, 0xf2, 0xa8, 0x2a, + 0xcb, 0x2a, 0x18, 0x9c, 0x1d, 0x45, 0xfc, 0xc0, 0x8d, 0x9e, 0x2f, 0xda, 0x6b, 0xb1, 0x59, 0x41, + 0x2f, 0x90, 0xbc, 0x41, 0x16, 0xda, 0x6b, 0xe4, 0x2b, 0x5c, 0x4a, 0x04, 0xfb, 0x05, 0xdf, 0x8f, + 0xc2, 0x28, 0x70, 0xda, 0xb5, 0x46, 0xe0, 0xb6, 0xa3, 0xdc, 0x4e, 0xc7, 0x2e, 0xde, 0x59, 0x64, + 0x9a, 0xc7, 0xa9, 0x88, 0x1e, 0x9f, 0x15, 0x5f, 0x47, 0xbd, 0xba, 0xc9, 0x2a, 0xec, 0x72, 0x72, + 0xa9, 0xc9, 0x78, 0xf1, 0xaf, 0x92, 0x69, 0x1d, 0x66, 0x73, 0xa2, 0x12, 0xa9, 0xdb, 0xdb, 0xee, + 0x51, 0x8b, 0xe6, 0xba, 0x57, 0x4c, 0x7e, 0x00, 0x33, 0x99, 0x61, 0x8b, 0x94, 0x05, 0xba, 0x5b, + 0x50, 0xa3, 0x5e, 0xcc, 0x9f, 0x40, 0x99, 0xbf, 0xf7, 0x40, 0xb7, 0x66, 0x23, 0x82, 0x4d, 0xfc, + 0x0a, 0x28, 0x07, 0x21, 0xb9, 0x5e, 0xe7, 0xe3, 0xa9, 0x27, 0xed, 0xd3, 0x18, 0xba, 0x24, 0x91, + 0xf0, 0x5c, 0x7d, 0x78, 0x59, 0x85, 0xdd, 0x9e, 0x1a, 0x6d, 0xc1, 0xcc, 0x2e, 0x0d, 0xdc, 0xc7, + 0xcf, 0x93, 0x0c, 0xa5, 0x64, 0x32, 0x4b, 0xbb, 0x71, 0xfc, 0x02, 0x66, 0x17, 0xfd, 0xc3, 0xb6, + 0x78, 0xd4, 0x67, 0xf0, 0x54, 0x57, 0xf1, 0xd9, 0xe5, 0xbd, 0x1d, 0xa1, 0xe6, 0xf2, 0x53, 0xd3, + 0x2b, 0xff, 0xb7, 0x9e, 0xd9, 0xeb, 0xd5, 0xd3, 0x34, 0x93, 0x7e, 0x1b, 0x27, 0x61, 0x56, 0xae, + 0x7a, 0x7d, 0x12, 0x76, 0xc9, 0x65, 0x9f, 0xf3, 0x44, 0x6c, 0x36, 0x27, 0x3d, 0x7d, 0x17, 0xae, + 0x27, 0x68, 0xed, 0x86, 0xdc, 0x5b, 0xcc, 0x44, 0xde, 0x09, 0x9f, 0xea, 0xcc, 0x2c, 0xdf, 0x99, + 0xed, 0xd4, 0x62, 0x37, 0xb4, 0x5a, 0x5d, 0x54, 0x2c, 0xa2, 0x07, 0x6f, 0x60, 0x98, 0x68, 0xc4, + 0x9f, 0xd0, 0x69, 0xbb, 0xad, 0xd6, 0x29, 0x62, 0x54, 0x6a, 0x3f, 0x84, 0xf1, 0x9a, 0x5e, 0x79, + 0x46, 0x25, 0xb9, 0x93, 0x42, 0x3d, 0x12, 0xea, 0xdd, 0xf6, 0x2e, 0x8e, 0xa4, 0x6a, 0xe3, 0x39, + 0x51, 0x2f, 0x72, 0x5d, 0x67, 0x8c, 0xac, 0x6c, 0x6a, 0x17, 0xc8, 0x4a, 0x9a, 0xa8, 0x5c, 0x67, + 0xb2, 0x13, 0xb9, 0xd5, 0x79, 0x1e, 0x99, 0x64, 0x4e, 0x4c, 0x62, 0xf5, 0x4e, 0x3e, 0xab, 0x5c, + 0xe6, 0xbb, 0x26, 0xd5, 0xe4, 0x7e, 0x3e, 0x71, 0x1e, 0x3a, 0xdd, 0xcf, 0x27, 0x95, 0xdd, 0x4e, + 0xf7, 0xf3, 0xc9, 0x48, 0x5d, 0xb7, 0x8c, 0xbc, 0xe2, 0x04, 0x3c, 0x5d, 0x8c, 0x11, 0x8a, 0x4d, + 0x46, 0x9e, 0x9f, 0x87, 0x7a, 0x08, 0x10, 0x9e, 0xb6, 0xa7, 0x8b, 0xad, 0x35, 0x19, 0xfa, 0x23, + 0x91, 0xe7, 0xe7, 0x1e, 0x94, 0x78, 0x06, 0x83, 0x38, 0x6a, 0x62, 0xec, 0x37, 0x98, 0x4e, 0xac, + 0xd0, 0x65, 0x50, 0x4b, 0xc9, 0x78, 0x73, 0xca, 0x64, 0x96, 0x13, 0x88, 0xae, 0xcb, 0x54, 0x85, + 0x38, 0xaa, 0x9c, 0x32, 0x4c, 0xa5, 0x02, 0xcd, 0xcd, 0x9d, 0xcf, 0x28, 0x51, 0x2a, 0xe5, 0xb8, + 0x1e, 0x83, 0x4e, 0x75, 0x29, 0x23, 0x30, 0xdd, 0xdc, 0x85, 0xcc, 0x32, 0xc1, 0x28, 0xe2, 0xf9, + 0x97, 0xb3, 0xb3, 0x46, 0xc7, 0xef, 0xbc, 0xba, 0xe0, 0xc8, 0x6a, 0x6e, 0x9c, 0x04, 0x55, 0xd4, + 0x4a, 0x55, 0xfa, 0xa1, 0x8c, 0x54, 0xd5, 0x6f, 0x66, 0xbc, 0xc7, 0x30, 0x30, 0x62, 0x6f, 0xb0, + 0xee, 0x79, 0xb3, 0xc9, 0x23, 0x99, 0x0e, 0x26, 0xa7, 0xa6, 0x5e, 0x0c, 0x72, 0x47, 0xf0, 0x91, + 0x4c, 0x00, 0xf3, 0xaa, 0x19, 0xef, 0xc1, 0xc5, 0xc4, 0x73, 0x0f, 0x93, 0xf1, 0x8d, 0xec, 0x37, + 0x21, 0x99, 0xe2, 0xc9, 0xd7, 0xd9, 0xaf, 0xa4, 0xdf, 0x86, 0x24, 0xc6, 0xfd, 0xb4, 0x6b, 0xde, + 0x3a, 0x4c, 0xe2, 0x32, 0x23, 0x93, 0xae, 0xc7, 0x11, 0x68, 0x4c, 0x70, 0x32, 0x14, 0x52, 0xb2, + 0x54, 0xb9, 0xcc, 0x8e, 0x8b, 0x37, 0xc3, 0x3c, 0x85, 0xfb, 0x9c, 0xf9, 0x90, 0x18, 0x81, 0x59, + 0xbb, 0x98, 0xc8, 0x0c, 0x4f, 0xbe, 0x0f, 0x67, 0xe2, 0xa7, 0xc4, 0x9c, 0x45, 0x06, 0x5a, 0x17, + 0x43, 0xd9, 0x99, 0xf8, 0x3d, 0xf1, 0xe9, 0xc9, 0x57, 0xe4, 0x56, 0x14, 0x93, 0x5f, 0x4a, 0x3d, + 0x93, 0x31, 0xfa, 0x70, 0x92, 0x1d, 0x49, 0x93, 0xed, 0x69, 0x47, 0xa7, 0x81, 0x9f, 0x5b, 0x76, + 0x70, 0x45, 0xfd, 0x73, 0xeb, 0x1a, 0x00, 0x52, 0xa9, 0xbf, 0x39, 0x7c, 0xd6, 0xe1, 0x1a, 0x06, + 0x64, 0xd9, 0xe2, 0x21, 0xf8, 0xb2, 0xb1, 0xf2, 0xdb, 0x9e, 0x0c, 0xe3, 0xd2, 0x82, 0xab, 0x3d, + 0xa3, 0x4b, 0x92, 0x5b, 0x86, 0x8b, 0x4b, 0xef, 0x38, 0x94, 0xdd, 0x9e, 0xa6, 0x65, 0x05, 0x69, + 0x54, 0xfb, 0x6c, 0x97, 0x78, 0x91, 0x6a, 0x9f, 0xed, 0x1a, 0xe5, 0xf1, 0x0b, 0xcc, 0xb1, 0x24, + 0xf6, 0x28, 0x0c, 0xb2, 0x44, 0x3d, 0x1e, 0x76, 0xba, 0xeb, 0xb5, 0xcf, 0x55, 0xf3, 0x52, 0x34, + 0x45, 0x88, 0x67, 0x9a, 0xcb, 0xe2, 0x24, 0x96, 0xc7, 0xbc, 0x37, 0x93, 0x2e, 0xae, 0xd5, 0x97, + 0xf9, 0x04, 0x3c, 0x75, 0xcb, 0x73, 0xe0, 0x0b, 0x4b, 0x3f, 0xfb, 0x4f, 0x97, 0x0b, 0x3f, 0xfb, + 0xf9, 0xe5, 0xc2, 0xbf, 0xfb, 0xf9, 0xe5, 0xc2, 0x7f, 0xfc, 0xf9, 0xe5, 0xc2, 0x57, 0xf3, 0x27, + 0x0b, 0x7e, 0xdc, 0x68, 0xb9, 0xd4, 0x8b, 0x6e, 0x71, 0x76, 0x43, 0xf8, 0xdf, 0xdd, 0xff, 0x15, + 0x00, 0x00, 0xff, 0xff, 0x3a, 0x0f, 0x03, 0x99, 0x86, 0xe8, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -27797,6 +27837,13 @@ func (m *RouteToApp) MarshalToSizedBuffer(dAtA []byte) (int, error) { i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } + if len(m.URI) > 0 { + i -= len(m.URI) + copy(dAtA[i:], m.URI) + i = encodeVarintAuthservice(dAtA, i, uint64(len(m.URI))) + i-- + dAtA[i] = 0x42 + } if len(m.GCPServiceAccount) > 0 { i -= len(m.GCPServiceAccount) copy(dAtA[i:], m.GCPServiceAccount) @@ -29972,6 +30019,27 @@ func (m *CreateAppSessionRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } + if len(m.ClientAddr) > 0 { + i -= len(m.ClientAddr) + copy(dAtA[i:], m.ClientAddr) + i = encodeVarintAuthservice(dAtA, i, uint64(len(m.ClientAddr))) + i-- + dAtA[i] = 0x5a + } + if len(m.URI) > 0 { + i -= len(m.URI) + copy(dAtA[i:], m.URI) + i = encodeVarintAuthservice(dAtA, i, uint64(len(m.URI))) + i-- + dAtA[i] = 0x52 + } + if len(m.AppName) > 0 { + i -= len(m.AppName) + copy(dAtA[i:], m.AppName) + i = encodeVarintAuthservice(dAtA, i, uint64(len(m.AppName))) + i-- + dAtA[i] = 0x4a + } if m.MFAResponse != nil { { size, err := m.MFAResponse.MarshalToSizedBuffer(dAtA[:i]) @@ -39137,6 +39205,10 @@ func (m *RouteToApp) Size() (n int) { if l > 0 { n += 1 + l + sovAuthservice(uint64(l)) } + l = len(m.URI) + if l > 0 { + n += 1 + l + sovAuthservice(uint64(l)) + } if m.XXX_unrecognized != nil { n += len(m.XXX_unrecognized) } @@ -40089,6 +40161,18 @@ func (m *CreateAppSessionRequest) Size() (n int) { l = m.MFAResponse.Size() n += 1 + l + sovAuthservice(uint64(l)) } + l = len(m.AppName) + if l > 0 { + n += 1 + l + sovAuthservice(uint64(l)) + } + l = len(m.URI) + if l > 0 { + n += 1 + l + sovAuthservice(uint64(l)) + } + l = len(m.ClientAddr) + if l > 0 { + n += 1 + l + sovAuthservice(uint64(l)) + } if m.XXX_unrecognized != nil { n += len(m.XXX_unrecognized) } @@ -46384,6 +46468,38 @@ func (m *RouteToApp) Unmarshal(dAtA []byte) error { } m.GCPServiceAccount = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field URI", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAuthservice + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthAuthservice + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthAuthservice + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.URI = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipAuthservice(dAtA[iNdEx:]) @@ -51765,6 +51881,102 @@ func (m *CreateAppSessionRequest) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AppName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAuthservice + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthAuthservice + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthAuthservice + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.AppName = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 10: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field URI", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAuthservice + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthAuthservice + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthAuthservice + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.URI = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 11: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ClientAddr", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAuthservice + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthAuthservice + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthAuthservice + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ClientAddr = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipAuthservice(dAtA[iNdEx:]) diff --git a/api/client/proxy/client_test.go b/api/client/proxy/client_test.go index 7cb788e5e76af..6a1671aaf8f37 100644 --- a/api/client/proxy/client_test.go +++ b/api/client/proxy/client_test.go @@ -114,16 +114,15 @@ type fakeGRPCServer struct { } type fakeAuthServer struct { - *proto.UnimplementedAuthServiceServer + proto.UnimplementedAuthServiceServer listener net.Listener srv *grpc.Server } func newFakeAuthServer(t *testing.T, conn net.Conn) *fakeAuthServer { f := &fakeAuthServer{ - listener: newOneShotListener(conn), - UnimplementedAuthServiceServer: &proto.UnimplementedAuthServiceServer{}, - srv: grpc.NewServer(), + listener: newOneShotListener(conn), + srv: grpc.NewServer(), } t.Cleanup(f.Stop) diff --git a/api/gen/proto/go/teleport/accessgraph/v1/authorized_key.pb.go b/api/gen/proto/go/teleport/accessgraph/v1/authorized_key.pb.go index 4d7e460994779..a80ab32c12d25 100644 --- a/api/gen/proto/go/teleport/accessgraph/v1/authorized_key.pb.go +++ b/api/gen/proto/go/teleport/accessgraph/v1/authorized_key.pb.go @@ -133,6 +133,12 @@ type AuthorizedKeySpec struct { KeyFingerprint string `protobuf:"bytes,2,opt,name=key_fingerprint,json=keyFingerprint,proto3" json:"key_fingerprint,omitempty"` // host_user is the user who can be accessed using the fingerprint above. HostUser string `protobuf:"bytes,3,opt,name=host_user,json=hostUser,proto3" json:"host_user,omitempty"` + // key_comment is the authorized key's comment. + // Authorized keys consist of the following space-separated fields: + // options, keytype, base64-encoded key, comment. The options field is optional. + KeyComment string `protobuf:"bytes,4,opt,name=key_comment,json=keyComment,proto3" json:"key_comment,omitempty"` + // key_type is the ssh's key type. + KeyType string `protobuf:"bytes,5,opt,name=key_type,json=keyType,proto3" json:"key_type,omitempty"` } func (x *AuthorizedKeySpec) Reset() { @@ -188,6 +194,20 @@ func (x *AuthorizedKeySpec) GetHostUser() string { return "" } +func (x *AuthorizedKeySpec) GetKeyComment() string { + if x != nil { + return x.KeyComment + } + return "" +} + +func (x *AuthorizedKeySpec) GetKeyType() string { + if x != nil { + return x.KeyType + } + return "" +} + var File_teleport_access_graph_v1_authorized_key_proto protoreflect.FileDescriptor var file_teleport_access_graph_v1_authorized_key_proto_rawDesc = []byte{ @@ -211,20 +231,24 @@ var file_teleport_access_graph_v1_authorized_key_proto_rawDesc = []byte{ 0x2b, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x64, 0x4b, 0x65, 0x79, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, - 0x65, 0x63, 0x22, 0x72, 0x0a, 0x11, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x64, - 0x4b, 0x65, 0x79, 0x53, 0x70, 0x65, 0x63, 0x12, 0x17, 0x0a, 0x07, 0x68, 0x6f, 0x73, 0x74, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x68, 0x6f, 0x73, 0x74, 0x49, 0x64, - 0x12, 0x27, 0x0a, 0x0f, 0x6b, 0x65, 0x79, 0x5f, 0x66, 0x69, 0x6e, 0x67, 0x65, 0x72, 0x70, 0x72, - 0x69, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6b, 0x65, 0x79, 0x46, 0x69, - 0x6e, 0x67, 0x65, 0x72, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x68, 0x6f, 0x73, - 0x74, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x68, 0x6f, - 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x42, 0x5a, 0x5a, 0x58, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, - 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x61, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x61, 0x6c, 0x2f, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2f, 0x61, 0x70, 0x69, 0x2f, - 0x67, 0x65, 0x6e, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x74, 0x65, 0x6c, - 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x67, 0x72, 0x61, 0x70, - 0x68, 0x2f, 0x76, 0x31, 0x3b, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x67, 0x72, 0x61, 0x70, 0x68, - 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x65, 0x63, 0x22, 0xae, 0x01, 0x0a, 0x11, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, + 0x64, 0x4b, 0x65, 0x79, 0x53, 0x70, 0x65, 0x63, 0x12, 0x17, 0x0a, 0x07, 0x68, 0x6f, 0x73, 0x74, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x68, 0x6f, 0x73, 0x74, 0x49, + 0x64, 0x12, 0x27, 0x0a, 0x0f, 0x6b, 0x65, 0x79, 0x5f, 0x66, 0x69, 0x6e, 0x67, 0x65, 0x72, 0x70, + 0x72, 0x69, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6b, 0x65, 0x79, 0x46, + 0x69, 0x6e, 0x67, 0x65, 0x72, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x68, 0x6f, + 0x73, 0x74, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x68, + 0x6f, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x12, 0x1f, 0x0a, 0x0b, 0x6b, 0x65, 0x79, 0x5f, 0x63, + 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6b, 0x65, + 0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x5f, + 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6b, 0x65, 0x79, 0x54, + 0x79, 0x70, 0x65, 0x42, 0x5a, 0x5a, 0x58, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, + 0x6d, 0x2f, 0x67, 0x72, 0x61, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x2f, + 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x65, 0x6e, + 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, + 0x72, 0x74, 0x2f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x67, 0x72, 0x61, 0x70, 0x68, 0x2f, 0x76, + 0x31, 0x3b, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x67, 0x72, 0x61, 0x70, 0x68, 0x76, 0x31, 0x62, + 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/api/gen/proto/go/teleport/accessgraph/v1/secrets_service_grpc.pb.go b/api/gen/proto/go/teleport/accessgraph/v1/secrets_service_grpc.pb.go index bc1e09264f36a..3c131c843dd49 100644 --- a/api/gen/proto/go/teleport/accessgraph/v1/secrets_service_grpc.pb.go +++ b/api/gen/proto/go/teleport/accessgraph/v1/secrets_service_grpc.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: -// - protoc-gen-go-grpc v1.4.0 +// - protoc-gen-go-grpc v1.5.0 // - protoc (unknown) // source: teleport/access_graph/v1/secrets_service.proto @@ -29,8 +29,8 @@ import ( // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. -// Requires gRPC-Go v1.62.0 or later. -const _ = grpc.SupportPackageIsVersion8 +// Requires gRPC-Go v1.64.0 or later. +const _ = grpc.SupportPackageIsVersion9 const ( SecretsScannerService_ReportAuthorizedKeys_FullMethodName = "/teleport.access_graph.v1.SecretsScannerService/ReportAuthorizedKeys" @@ -46,7 +46,7 @@ type SecretsScannerServiceClient interface { // ReportAuthorizedKeys is used by Teleport SSH nodes to report authorized keys // that could be used to bypass Teleport. // The client (Teleport SSH Node) should authenticate using the certificate-key pair signed by Teleport HostCA. - ReportAuthorizedKeys(ctx context.Context, opts ...grpc.CallOption) (SecretsScannerService_ReportAuthorizedKeysClient, error) + ReportAuthorizedKeys(ctx context.Context, opts ...grpc.CallOption) (grpc.BidiStreamingClient[ReportAuthorizedKeysRequest, ReportAuthorizedKeysResponse], error) // ReportSecrets is used by trusted devices to report secrets found on the host that could be used to bypass Teleport. // The client (device) should first authenticate using the [ReportSecretsRequest.device_assertion] flow. Please refer to // the [teleport.devicetrust.v1.AssertDeviceRequest] and [teleport.devicetrust.v1.AssertDeviceResponse] messages for more details. @@ -60,7 +60,7 @@ type SecretsScannerServiceClient interface { // // Any failure in the assertion ceremony will result in the stream being terminated by the server. All secrets // reported by the client before the assertion terminates will be ignored and result in the stream being terminated. - ReportSecrets(ctx context.Context, opts ...grpc.CallOption) (SecretsScannerService_ReportSecretsClient, error) + ReportSecrets(ctx context.Context, opts ...grpc.CallOption) (grpc.BidiStreamingClient[ReportSecretsRequest, ReportSecretsResponse], error) } type secretsScannerServiceClient struct { @@ -71,80 +71,42 @@ func NewSecretsScannerServiceClient(cc grpc.ClientConnInterface) SecretsScannerS return &secretsScannerServiceClient{cc} } -func (c *secretsScannerServiceClient) ReportAuthorizedKeys(ctx context.Context, opts ...grpc.CallOption) (SecretsScannerService_ReportAuthorizedKeysClient, error) { +func (c *secretsScannerServiceClient) ReportAuthorizedKeys(ctx context.Context, opts ...grpc.CallOption) (grpc.BidiStreamingClient[ReportAuthorizedKeysRequest, ReportAuthorizedKeysResponse], error) { cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) stream, err := c.cc.NewStream(ctx, &SecretsScannerService_ServiceDesc.Streams[0], SecretsScannerService_ReportAuthorizedKeys_FullMethodName, cOpts...) if err != nil { return nil, err } - x := &secretsScannerServiceReportAuthorizedKeysClient{ClientStream: stream} + x := &grpc.GenericClientStream[ReportAuthorizedKeysRequest, ReportAuthorizedKeysResponse]{ClientStream: stream} return x, nil } -type SecretsScannerService_ReportAuthorizedKeysClient interface { - Send(*ReportAuthorizedKeysRequest) error - Recv() (*ReportAuthorizedKeysResponse, error) - grpc.ClientStream -} - -type secretsScannerServiceReportAuthorizedKeysClient struct { - grpc.ClientStream -} - -func (x *secretsScannerServiceReportAuthorizedKeysClient) Send(m *ReportAuthorizedKeysRequest) error { - return x.ClientStream.SendMsg(m) -} +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type SecretsScannerService_ReportAuthorizedKeysClient = grpc.BidiStreamingClient[ReportAuthorizedKeysRequest, ReportAuthorizedKeysResponse] -func (x *secretsScannerServiceReportAuthorizedKeysClient) Recv() (*ReportAuthorizedKeysResponse, error) { - m := new(ReportAuthorizedKeysResponse) - if err := x.ClientStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} - -func (c *secretsScannerServiceClient) ReportSecrets(ctx context.Context, opts ...grpc.CallOption) (SecretsScannerService_ReportSecretsClient, error) { +func (c *secretsScannerServiceClient) ReportSecrets(ctx context.Context, opts ...grpc.CallOption) (grpc.BidiStreamingClient[ReportSecretsRequest, ReportSecretsResponse], error) { cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) stream, err := c.cc.NewStream(ctx, &SecretsScannerService_ServiceDesc.Streams[1], SecretsScannerService_ReportSecrets_FullMethodName, cOpts...) if err != nil { return nil, err } - x := &secretsScannerServiceReportSecretsClient{ClientStream: stream} + x := &grpc.GenericClientStream[ReportSecretsRequest, ReportSecretsResponse]{ClientStream: stream} return x, nil } -type SecretsScannerService_ReportSecretsClient interface { - Send(*ReportSecretsRequest) error - Recv() (*ReportSecretsResponse, error) - grpc.ClientStream -} - -type secretsScannerServiceReportSecretsClient struct { - grpc.ClientStream -} - -func (x *secretsScannerServiceReportSecretsClient) Send(m *ReportSecretsRequest) error { - return x.ClientStream.SendMsg(m) -} - -func (x *secretsScannerServiceReportSecretsClient) Recv() (*ReportSecretsResponse, error) { - m := new(ReportSecretsResponse) - if err := x.ClientStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type SecretsScannerService_ReportSecretsClient = grpc.BidiStreamingClient[ReportSecretsRequest, ReportSecretsResponse] // SecretsScannerServiceServer is the server API for SecretsScannerService service. // All implementations must embed UnimplementedSecretsScannerServiceServer -// for forward compatibility +// for forward compatibility. // // SecretsScannerService provides methods for Access Graph Secret Scanner functionality. type SecretsScannerServiceServer interface { // ReportAuthorizedKeys is used by Teleport SSH nodes to report authorized keys // that could be used to bypass Teleport. // The client (Teleport SSH Node) should authenticate using the certificate-key pair signed by Teleport HostCA. - ReportAuthorizedKeys(SecretsScannerService_ReportAuthorizedKeysServer) error + ReportAuthorizedKeys(grpc.BidiStreamingServer[ReportAuthorizedKeysRequest, ReportAuthorizedKeysResponse]) error // ReportSecrets is used by trusted devices to report secrets found on the host that could be used to bypass Teleport. // The client (device) should first authenticate using the [ReportSecretsRequest.device_assertion] flow. Please refer to // the [teleport.devicetrust.v1.AssertDeviceRequest] and [teleport.devicetrust.v1.AssertDeviceResponse] messages for more details. @@ -158,21 +120,25 @@ type SecretsScannerServiceServer interface { // // Any failure in the assertion ceremony will result in the stream being terminated by the server. All secrets // reported by the client before the assertion terminates will be ignored and result in the stream being terminated. - ReportSecrets(SecretsScannerService_ReportSecretsServer) error + ReportSecrets(grpc.BidiStreamingServer[ReportSecretsRequest, ReportSecretsResponse]) error mustEmbedUnimplementedSecretsScannerServiceServer() } -// UnimplementedSecretsScannerServiceServer must be embedded to have forward compatible implementations. -type UnimplementedSecretsScannerServiceServer struct { -} +// UnimplementedSecretsScannerServiceServer must be embedded to have +// forward compatible implementations. +// +// NOTE: this should be embedded by value instead of pointer to avoid a nil +// pointer dereference when methods are called. +type UnimplementedSecretsScannerServiceServer struct{} -func (UnimplementedSecretsScannerServiceServer) ReportAuthorizedKeys(SecretsScannerService_ReportAuthorizedKeysServer) error { +func (UnimplementedSecretsScannerServiceServer) ReportAuthorizedKeys(grpc.BidiStreamingServer[ReportAuthorizedKeysRequest, ReportAuthorizedKeysResponse]) error { return status.Errorf(codes.Unimplemented, "method ReportAuthorizedKeys not implemented") } -func (UnimplementedSecretsScannerServiceServer) ReportSecrets(SecretsScannerService_ReportSecretsServer) error { +func (UnimplementedSecretsScannerServiceServer) ReportSecrets(grpc.BidiStreamingServer[ReportSecretsRequest, ReportSecretsResponse]) error { return status.Errorf(codes.Unimplemented, "method ReportSecrets not implemented") } func (UnimplementedSecretsScannerServiceServer) mustEmbedUnimplementedSecretsScannerServiceServer() {} +func (UnimplementedSecretsScannerServiceServer) testEmbeddedByValue() {} // UnsafeSecretsScannerServiceServer may be embedded to opt out of forward compatibility for this service. // Use of this interface is not recommended, as added methods to SecretsScannerServiceServer will @@ -182,60 +148,29 @@ type UnsafeSecretsScannerServiceServer interface { } func RegisterSecretsScannerServiceServer(s grpc.ServiceRegistrar, srv SecretsScannerServiceServer) { + // If the following call pancis, it indicates UnimplementedSecretsScannerServiceServer was + // embedded by pointer and is nil. This will cause panics if an + // unimplemented method is ever invoked, so we test this at initialization + // time to prevent it from happening at runtime later due to I/O. + if t, ok := srv.(interface{ testEmbeddedByValue() }); ok { + t.testEmbeddedByValue() + } s.RegisterService(&SecretsScannerService_ServiceDesc, srv) } func _SecretsScannerService_ReportAuthorizedKeys_Handler(srv interface{}, stream grpc.ServerStream) error { - return srv.(SecretsScannerServiceServer).ReportAuthorizedKeys(&secretsScannerServiceReportAuthorizedKeysServer{ServerStream: stream}) -} - -type SecretsScannerService_ReportAuthorizedKeysServer interface { - Send(*ReportAuthorizedKeysResponse) error - Recv() (*ReportAuthorizedKeysRequest, error) - grpc.ServerStream -} - -type secretsScannerServiceReportAuthorizedKeysServer struct { - grpc.ServerStream + return srv.(SecretsScannerServiceServer).ReportAuthorizedKeys(&grpc.GenericServerStream[ReportAuthorizedKeysRequest, ReportAuthorizedKeysResponse]{ServerStream: stream}) } -func (x *secretsScannerServiceReportAuthorizedKeysServer) Send(m *ReportAuthorizedKeysResponse) error { - return x.ServerStream.SendMsg(m) -} - -func (x *secretsScannerServiceReportAuthorizedKeysServer) Recv() (*ReportAuthorizedKeysRequest, error) { - m := new(ReportAuthorizedKeysRequest) - if err := x.ServerStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type SecretsScannerService_ReportAuthorizedKeysServer = grpc.BidiStreamingServer[ReportAuthorizedKeysRequest, ReportAuthorizedKeysResponse] func _SecretsScannerService_ReportSecrets_Handler(srv interface{}, stream grpc.ServerStream) error { - return srv.(SecretsScannerServiceServer).ReportSecrets(&secretsScannerServiceReportSecretsServer{ServerStream: stream}) + return srv.(SecretsScannerServiceServer).ReportSecrets(&grpc.GenericServerStream[ReportSecretsRequest, ReportSecretsResponse]{ServerStream: stream}) } -type SecretsScannerService_ReportSecretsServer interface { - Send(*ReportSecretsResponse) error - Recv() (*ReportSecretsRequest, error) - grpc.ServerStream -} - -type secretsScannerServiceReportSecretsServer struct { - grpc.ServerStream -} - -func (x *secretsScannerServiceReportSecretsServer) Send(m *ReportSecretsResponse) error { - return x.ServerStream.SendMsg(m) -} - -func (x *secretsScannerServiceReportSecretsServer) Recv() (*ReportSecretsRequest, error) { - m := new(ReportSecretsRequest) - if err := x.ServerStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type SecretsScannerService_ReportSecretsServer = grpc.BidiStreamingServer[ReportSecretsRequest, ReportSecretsResponse] // SecretsScannerService_ServiceDesc is the grpc.ServiceDesc for SecretsScannerService service. // It's only intended for direct use with grpc.RegisterService, diff --git a/api/gen/proto/go/teleport/accesslist/v1/accesslist_service_grpc.pb.go b/api/gen/proto/go/teleport/accesslist/v1/accesslist_service_grpc.pb.go index 13c53d238ee29..ae47a9a39038c 100644 --- a/api/gen/proto/go/teleport/accesslist/v1/accesslist_service_grpc.pb.go +++ b/api/gen/proto/go/teleport/accesslist/v1/accesslist_service_grpc.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: -// - protoc-gen-go-grpc v1.4.0 +// - protoc-gen-go-grpc v1.5.0 // - protoc (unknown) // source: teleport/accesslist/v1/accesslist_service.proto @@ -30,8 +30,8 @@ import ( // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. -// Requires gRPC-Go v1.62.0 or later. -const _ = grpc.SupportPackageIsVersion8 +// Requires gRPC-Go v1.64.0 or later. +const _ = grpc.SupportPackageIsVersion9 const ( AccessListService_GetAccessLists_FullMethodName = "/teleport.accesslist.v1.AccessListService/GetAccessLists" @@ -377,7 +377,7 @@ func (c *accessListServiceClient) GetSuggestedAccessLists(ctx context.Context, i // AccessListServiceServer is the server API for AccessListService service. // All implementations must embed UnimplementedAccessListServiceServer -// for forward compatibility +// for forward compatibility. // // AccessListService provides CRUD methods for Access List resources. type AccessListServiceServer interface { @@ -443,9 +443,12 @@ type AccessListServiceServer interface { mustEmbedUnimplementedAccessListServiceServer() } -// UnimplementedAccessListServiceServer must be embedded to have forward compatible implementations. -type UnimplementedAccessListServiceServer struct { -} +// UnimplementedAccessListServiceServer must be embedded to have +// forward compatible implementations. +// +// NOTE: this should be embedded by value instead of pointer to avoid a nil +// pointer dereference when methods are called. +type UnimplementedAccessListServiceServer struct{} func (UnimplementedAccessListServiceServer) GetAccessLists(context.Context, *GetAccessListsRequest) (*GetAccessListsResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method GetAccessLists not implemented") @@ -520,6 +523,7 @@ func (UnimplementedAccessListServiceServer) GetSuggestedAccessLists(context.Cont return nil, status.Errorf(codes.Unimplemented, "method GetSuggestedAccessLists not implemented") } func (UnimplementedAccessListServiceServer) mustEmbedUnimplementedAccessListServiceServer() {} +func (UnimplementedAccessListServiceServer) testEmbeddedByValue() {} // UnsafeAccessListServiceServer may be embedded to opt out of forward compatibility for this service. // Use of this interface is not recommended, as added methods to AccessListServiceServer will @@ -529,6 +533,13 @@ type UnsafeAccessListServiceServer interface { } func RegisterAccessListServiceServer(s grpc.ServiceRegistrar, srv AccessListServiceServer) { + // If the following call pancis, it indicates UnimplementedAccessListServiceServer was + // embedded by pointer and is nil. This will cause panics if an + // unimplemented method is ever invoked, so we test this at initialization + // time to prevent it from happening at runtime later due to I/O. + if t, ok := srv.(interface{ testEmbeddedByValue() }); ok { + t.testEmbeddedByValue() + } s.RegisterService(&AccessListService_ServiceDesc, srv) } diff --git a/api/gen/proto/go/teleport/accessmonitoringrules/v1/access_monitoring_rules_service_grpc.pb.go b/api/gen/proto/go/teleport/accessmonitoringrules/v1/access_monitoring_rules_service_grpc.pb.go index 71c4bbcd01f27..d1e98293dacba 100644 --- a/api/gen/proto/go/teleport/accessmonitoringrules/v1/access_monitoring_rules_service_grpc.pb.go +++ b/api/gen/proto/go/teleport/accessmonitoringrules/v1/access_monitoring_rules_service_grpc.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: -// - protoc-gen-go-grpc v1.4.0 +// - protoc-gen-go-grpc v1.5.0 // - protoc (unknown) // source: teleport/accessmonitoringrules/v1/access_monitoring_rules_service.proto @@ -30,8 +30,8 @@ import ( // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. -// Requires gRPC-Go v1.62.0 or later. -const _ = grpc.SupportPackageIsVersion8 +// Requires gRPC-Go v1.64.0 or later. +const _ = grpc.SupportPackageIsVersion9 const ( AccessMonitoringRulesService_CreateAccessMonitoringRule_FullMethodName = "/teleport.accessmonitoringrules.v1.AccessMonitoringRulesService/CreateAccessMonitoringRule" @@ -145,7 +145,7 @@ func (c *accessMonitoringRulesServiceClient) ListAccessMonitoringRulesWithFilter // AccessMonitoringRulesServiceServer is the server API for AccessMonitoringRulesService service. // All implementations must embed UnimplementedAccessMonitoringRulesServiceServer -// for forward compatibility +// for forward compatibility. // // AccessMonitoringRulesService provides CRUD methods for Access Monitoring Rules resources. type AccessMonitoringRulesServiceServer interface { @@ -166,9 +166,12 @@ type AccessMonitoringRulesServiceServer interface { mustEmbedUnimplementedAccessMonitoringRulesServiceServer() } -// UnimplementedAccessMonitoringRulesServiceServer must be embedded to have forward compatible implementations. -type UnimplementedAccessMonitoringRulesServiceServer struct { -} +// UnimplementedAccessMonitoringRulesServiceServer must be embedded to have +// forward compatible implementations. +// +// NOTE: this should be embedded by value instead of pointer to avoid a nil +// pointer dereference when methods are called. +type UnimplementedAccessMonitoringRulesServiceServer struct{} func (UnimplementedAccessMonitoringRulesServiceServer) CreateAccessMonitoringRule(context.Context, *CreateAccessMonitoringRuleRequest) (*AccessMonitoringRule, error) { return nil, status.Errorf(codes.Unimplemented, "method CreateAccessMonitoringRule not implemented") @@ -193,6 +196,7 @@ func (UnimplementedAccessMonitoringRulesServiceServer) ListAccessMonitoringRules } func (UnimplementedAccessMonitoringRulesServiceServer) mustEmbedUnimplementedAccessMonitoringRulesServiceServer() { } +func (UnimplementedAccessMonitoringRulesServiceServer) testEmbeddedByValue() {} // UnsafeAccessMonitoringRulesServiceServer may be embedded to opt out of forward compatibility for this service. // Use of this interface is not recommended, as added methods to AccessMonitoringRulesServiceServer will @@ -202,6 +206,13 @@ type UnsafeAccessMonitoringRulesServiceServer interface { } func RegisterAccessMonitoringRulesServiceServer(s grpc.ServiceRegistrar, srv AccessMonitoringRulesServiceServer) { + // If the following call pancis, it indicates UnimplementedAccessMonitoringRulesServiceServer was + // embedded by pointer and is nil. This will cause panics if an + // unimplemented method is ever invoked, so we test this at initialization + // time to prevent it from happening at runtime later due to I/O. + if t, ok := srv.(interface{ testEmbeddedByValue() }); ok { + t.testEmbeddedByValue() + } s.RegisterService(&AccessMonitoringRulesService_ServiceDesc, srv) } diff --git a/api/gen/proto/go/teleport/auditlog/v1/auditlog_grpc.pb.go b/api/gen/proto/go/teleport/auditlog/v1/auditlog_grpc.pb.go index e72abf53a92c6..f8a7779af753a 100644 --- a/api/gen/proto/go/teleport/auditlog/v1/auditlog_grpc.pb.go +++ b/api/gen/proto/go/teleport/auditlog/v1/auditlog_grpc.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: -// - protoc-gen-go-grpc v1.4.0 +// - protoc-gen-go-grpc v1.5.0 // - protoc (unknown) // source: teleport/auditlog/v1/auditlog.proto @@ -29,8 +29,8 @@ import ( // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. -// Requires gRPC-Go v1.62.0 or later. -const _ = grpc.SupportPackageIsVersion8 +// Requires gRPC-Go v1.64.0 or later. +const _ = grpc.SupportPackageIsVersion9 const ( AuditLogService_StreamUnstructuredSessionEvents_FullMethodName = "/teleport.auditlog.v1.AuditLogService/StreamUnstructuredSessionEvents" @@ -45,7 +45,7 @@ const ( type AuditLogServiceClient interface { // StreamUnstructuredSessionEvents streams audit events from a given session recording in an unstructured format. // This endpoint is used by the event handler to retrieve the session events as JSON. - StreamUnstructuredSessionEvents(ctx context.Context, in *StreamUnstructuredSessionEventsRequest, opts ...grpc.CallOption) (AuditLogService_StreamUnstructuredSessionEventsClient, error) + StreamUnstructuredSessionEvents(ctx context.Context, in *StreamUnstructuredSessionEventsRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[EventUnstructured], error) // GetUnstructuredEvents gets events from the audit log in an unstructured format. // This endpoint is used by the event handler to retrieve the events as JSON. GetUnstructuredEvents(ctx context.Context, in *GetUnstructuredEventsRequest, opts ...grpc.CallOption) (*EventsUnstructured, error) @@ -59,13 +59,13 @@ func NewAuditLogServiceClient(cc grpc.ClientConnInterface) AuditLogServiceClient return &auditLogServiceClient{cc} } -func (c *auditLogServiceClient) StreamUnstructuredSessionEvents(ctx context.Context, in *StreamUnstructuredSessionEventsRequest, opts ...grpc.CallOption) (AuditLogService_StreamUnstructuredSessionEventsClient, error) { +func (c *auditLogServiceClient) StreamUnstructuredSessionEvents(ctx context.Context, in *StreamUnstructuredSessionEventsRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[EventUnstructured], error) { cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) stream, err := c.cc.NewStream(ctx, &AuditLogService_ServiceDesc.Streams[0], AuditLogService_StreamUnstructuredSessionEvents_FullMethodName, cOpts...) if err != nil { return nil, err } - x := &auditLogServiceStreamUnstructuredSessionEventsClient{ClientStream: stream} + x := &grpc.GenericClientStream[StreamUnstructuredSessionEventsRequest, EventUnstructured]{ClientStream: stream} if err := x.ClientStream.SendMsg(in); err != nil { return nil, err } @@ -75,22 +75,8 @@ func (c *auditLogServiceClient) StreamUnstructuredSessionEvents(ctx context.Cont return x, nil } -type AuditLogService_StreamUnstructuredSessionEventsClient interface { - Recv() (*EventUnstructured, error) - grpc.ClientStream -} - -type auditLogServiceStreamUnstructuredSessionEventsClient struct { - grpc.ClientStream -} - -func (x *auditLogServiceStreamUnstructuredSessionEventsClient) Recv() (*EventUnstructured, error) { - m := new(EventUnstructured) - if err := x.ClientStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type AuditLogService_StreamUnstructuredSessionEventsClient = grpc.ServerStreamingClient[EventUnstructured] func (c *auditLogServiceClient) GetUnstructuredEvents(ctx context.Context, in *GetUnstructuredEventsRequest, opts ...grpc.CallOption) (*EventsUnstructured, error) { cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) @@ -104,30 +90,34 @@ func (c *auditLogServiceClient) GetUnstructuredEvents(ctx context.Context, in *G // AuditLogServiceServer is the server API for AuditLogService service. // All implementations must embed UnimplementedAuditLogServiceServer -// for forward compatibility +// for forward compatibility. // // AuditLogService provides methods to access audit log. type AuditLogServiceServer interface { // StreamUnstructuredSessionEvents streams audit events from a given session recording in an unstructured format. // This endpoint is used by the event handler to retrieve the session events as JSON. - StreamUnstructuredSessionEvents(*StreamUnstructuredSessionEventsRequest, AuditLogService_StreamUnstructuredSessionEventsServer) error + StreamUnstructuredSessionEvents(*StreamUnstructuredSessionEventsRequest, grpc.ServerStreamingServer[EventUnstructured]) error // GetUnstructuredEvents gets events from the audit log in an unstructured format. // This endpoint is used by the event handler to retrieve the events as JSON. GetUnstructuredEvents(context.Context, *GetUnstructuredEventsRequest) (*EventsUnstructured, error) mustEmbedUnimplementedAuditLogServiceServer() } -// UnimplementedAuditLogServiceServer must be embedded to have forward compatible implementations. -type UnimplementedAuditLogServiceServer struct { -} +// UnimplementedAuditLogServiceServer must be embedded to have +// forward compatible implementations. +// +// NOTE: this should be embedded by value instead of pointer to avoid a nil +// pointer dereference when methods are called. +type UnimplementedAuditLogServiceServer struct{} -func (UnimplementedAuditLogServiceServer) StreamUnstructuredSessionEvents(*StreamUnstructuredSessionEventsRequest, AuditLogService_StreamUnstructuredSessionEventsServer) error { +func (UnimplementedAuditLogServiceServer) StreamUnstructuredSessionEvents(*StreamUnstructuredSessionEventsRequest, grpc.ServerStreamingServer[EventUnstructured]) error { return status.Errorf(codes.Unimplemented, "method StreamUnstructuredSessionEvents not implemented") } func (UnimplementedAuditLogServiceServer) GetUnstructuredEvents(context.Context, *GetUnstructuredEventsRequest) (*EventsUnstructured, error) { return nil, status.Errorf(codes.Unimplemented, "method GetUnstructuredEvents not implemented") } func (UnimplementedAuditLogServiceServer) mustEmbedUnimplementedAuditLogServiceServer() {} +func (UnimplementedAuditLogServiceServer) testEmbeddedByValue() {} // UnsafeAuditLogServiceServer may be embedded to opt out of forward compatibility for this service. // Use of this interface is not recommended, as added methods to AuditLogServiceServer will @@ -137,6 +127,13 @@ type UnsafeAuditLogServiceServer interface { } func RegisterAuditLogServiceServer(s grpc.ServiceRegistrar, srv AuditLogServiceServer) { + // If the following call pancis, it indicates UnimplementedAuditLogServiceServer was + // embedded by pointer and is nil. This will cause panics if an + // unimplemented method is ever invoked, so we test this at initialization + // time to prevent it from happening at runtime later due to I/O. + if t, ok := srv.(interface{ testEmbeddedByValue() }); ok { + t.testEmbeddedByValue() + } s.RegisterService(&AuditLogService_ServiceDesc, srv) } @@ -145,21 +142,11 @@ func _AuditLogService_StreamUnstructuredSessionEvents_Handler(srv interface{}, s if err := stream.RecvMsg(m); err != nil { return err } - return srv.(AuditLogServiceServer).StreamUnstructuredSessionEvents(m, &auditLogServiceStreamUnstructuredSessionEventsServer{ServerStream: stream}) -} - -type AuditLogService_StreamUnstructuredSessionEventsServer interface { - Send(*EventUnstructured) error - grpc.ServerStream + return srv.(AuditLogServiceServer).StreamUnstructuredSessionEvents(m, &grpc.GenericServerStream[StreamUnstructuredSessionEventsRequest, EventUnstructured]{ServerStream: stream}) } -type auditLogServiceStreamUnstructuredSessionEventsServer struct { - grpc.ServerStream -} - -func (x *auditLogServiceStreamUnstructuredSessionEventsServer) Send(m *EventUnstructured) error { - return x.ServerStream.SendMsg(m) -} +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type AuditLogService_StreamUnstructuredSessionEventsServer = grpc.ServerStreamingServer[EventUnstructured] func _AuditLogService_GetUnstructuredEvents_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(GetUnstructuredEventsRequest) diff --git a/api/gen/proto/go/teleport/clusterconfig/v1/clusterconfig_service_grpc.pb.go b/api/gen/proto/go/teleport/clusterconfig/v1/clusterconfig_service_grpc.pb.go index 905e77dac9543..e0863476c8118 100644 --- a/api/gen/proto/go/teleport/clusterconfig/v1/clusterconfig_service_grpc.pb.go +++ b/api/gen/proto/go/teleport/clusterconfig/v1/clusterconfig_service_grpc.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: -// - protoc-gen-go-grpc v1.4.0 +// - protoc-gen-go-grpc v1.5.0 // - protoc (unknown) // source: teleport/clusterconfig/v1/clusterconfig_service.proto @@ -30,8 +30,8 @@ import ( // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. -// Requires gRPC-Go v1.62.0 or later. -const _ = grpc.SupportPackageIsVersion8 +// Requires gRPC-Go v1.64.0 or later. +const _ = grpc.SupportPackageIsVersion9 const ( ClusterConfigService_GetClusterNetworkingConfig_FullMethodName = "/teleport.clusterconfig.v1.ClusterConfigService/GetClusterNetworkingConfig" @@ -301,7 +301,7 @@ func (c *clusterConfigServiceClient) ResetAccessGraphSettings(ctx context.Contex // ClusterConfigServiceServer is the server API for ClusterConfigService service. // All implementations must embed UnimplementedClusterConfigServiceServer -// for forward compatibility +// for forward compatibility. // // ClusterConfigService provides methods to manage cluster configuration resources. type ClusterConfigServiceServer interface { @@ -346,9 +346,12 @@ type ClusterConfigServiceServer interface { mustEmbedUnimplementedClusterConfigServiceServer() } -// UnimplementedClusterConfigServiceServer must be embedded to have forward compatible implementations. -type UnimplementedClusterConfigServiceServer struct { -} +// UnimplementedClusterConfigServiceServer must be embedded to have +// forward compatible implementations. +// +// NOTE: this should be embedded by value instead of pointer to avoid a nil +// pointer dereference when methods are called. +type UnimplementedClusterConfigServiceServer struct{} func (UnimplementedClusterConfigServiceServer) GetClusterNetworkingConfig(context.Context, *GetClusterNetworkingConfigRequest) (*types.ClusterNetworkingConfigV2, error) { return nil, status.Errorf(codes.Unimplemented, "method GetClusterNetworkingConfig not implemented") @@ -408,6 +411,7 @@ func (UnimplementedClusterConfigServiceServer) ResetAccessGraphSettings(context. return nil, status.Errorf(codes.Unimplemented, "method ResetAccessGraphSettings not implemented") } func (UnimplementedClusterConfigServiceServer) mustEmbedUnimplementedClusterConfigServiceServer() {} +func (UnimplementedClusterConfigServiceServer) testEmbeddedByValue() {} // UnsafeClusterConfigServiceServer may be embedded to opt out of forward compatibility for this service. // Use of this interface is not recommended, as added methods to ClusterConfigServiceServer will @@ -417,6 +421,13 @@ type UnsafeClusterConfigServiceServer interface { } func RegisterClusterConfigServiceServer(s grpc.ServiceRegistrar, srv ClusterConfigServiceServer) { + // If the following call pancis, it indicates UnimplementedClusterConfigServiceServer was + // embedded by pointer and is nil. This will cause panics if an + // unimplemented method is ever invoked, so we test this at initialization + // time to prevent it from happening at runtime later due to I/O. + if t, ok := srv.(interface{ testEmbeddedByValue() }); ok { + t.testEmbeddedByValue() + } s.RegisterService(&ClusterConfigService_ServiceDesc, srv) } diff --git a/api/gen/proto/go/teleport/crownjewel/v1/crownjewel_service_grpc.pb.go b/api/gen/proto/go/teleport/crownjewel/v1/crownjewel_service_grpc.pb.go index 5098686592a34..653a5bf5e4295 100644 --- a/api/gen/proto/go/teleport/crownjewel/v1/crownjewel_service_grpc.pb.go +++ b/api/gen/proto/go/teleport/crownjewel/v1/crownjewel_service_grpc.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: -// - protoc-gen-go-grpc v1.4.0 +// - protoc-gen-go-grpc v1.5.0 // - protoc (unknown) // source: teleport/crownjewel/v1/crownjewel_service.proto @@ -30,8 +30,8 @@ import ( // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. -// Requires gRPC-Go v1.62.0 or later. -const _ = grpc.SupportPackageIsVersion8 +// Requires gRPC-Go v1.64.0 or later. +const _ = grpc.SupportPackageIsVersion9 const ( CrownJewelService_CreateCrownJewel_FullMethodName = "/teleport.crownjewel.v1.CrownJewelService/CreateCrownJewel" @@ -132,7 +132,7 @@ func (c *crownJewelServiceClient) DeleteCrownJewel(ctx context.Context, in *Dele // CrownJewelServiceServer is the server API for CrownJewelService service. // All implementations must embed UnimplementedCrownJewelServiceServer -// for forward compatibility +// for forward compatibility. // // CrownJewelService is a service that provides methods to manage CrownJewels. type CrownJewelServiceServer interface { @@ -151,9 +151,12 @@ type CrownJewelServiceServer interface { mustEmbedUnimplementedCrownJewelServiceServer() } -// UnimplementedCrownJewelServiceServer must be embedded to have forward compatible implementations. -type UnimplementedCrownJewelServiceServer struct { -} +// UnimplementedCrownJewelServiceServer must be embedded to have +// forward compatible implementations. +// +// NOTE: this should be embedded by value instead of pointer to avoid a nil +// pointer dereference when methods are called. +type UnimplementedCrownJewelServiceServer struct{} func (UnimplementedCrownJewelServiceServer) CreateCrownJewel(context.Context, *CreateCrownJewelRequest) (*CrownJewel, error) { return nil, status.Errorf(codes.Unimplemented, "method CreateCrownJewel not implemented") @@ -174,6 +177,7 @@ func (UnimplementedCrownJewelServiceServer) DeleteCrownJewel(context.Context, *D return nil, status.Errorf(codes.Unimplemented, "method DeleteCrownJewel not implemented") } func (UnimplementedCrownJewelServiceServer) mustEmbedUnimplementedCrownJewelServiceServer() {} +func (UnimplementedCrownJewelServiceServer) testEmbeddedByValue() {} // UnsafeCrownJewelServiceServer may be embedded to opt out of forward compatibility for this service. // Use of this interface is not recommended, as added methods to CrownJewelServiceServer will @@ -183,6 +187,13 @@ type UnsafeCrownJewelServiceServer interface { } func RegisterCrownJewelServiceServer(s grpc.ServiceRegistrar, srv CrownJewelServiceServer) { + // If the following call pancis, it indicates UnimplementedCrownJewelServiceServer was + // embedded by pointer and is nil. This will cause panics if an + // unimplemented method is ever invoked, so we test this at initialization + // time to prevent it from happening at runtime later due to I/O. + if t, ok := srv.(interface{ testEmbeddedByValue() }); ok { + t.testEmbeddedByValue() + } s.RegisterService(&CrownJewelService_ServiceDesc, srv) } diff --git a/api/gen/proto/go/teleport/dbobject/v1/dbobject_service_grpc.pb.go b/api/gen/proto/go/teleport/dbobject/v1/dbobject_service_grpc.pb.go index 9b87181d0a7e9..05c0e34682bef 100644 --- a/api/gen/proto/go/teleport/dbobject/v1/dbobject_service_grpc.pb.go +++ b/api/gen/proto/go/teleport/dbobject/v1/dbobject_service_grpc.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: -// - protoc-gen-go-grpc v1.4.0 +// - protoc-gen-go-grpc v1.5.0 // - protoc (unknown) // source: teleport/dbobject/v1/dbobject_service.proto @@ -30,8 +30,8 @@ import ( // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. -// Requires gRPC-Go v1.62.0 or later. -const _ = grpc.SupportPackageIsVersion8 +// Requires gRPC-Go v1.64.0 or later. +const _ = grpc.SupportPackageIsVersion9 const ( DatabaseObjectService_GetDatabaseObject_FullMethodName = "/teleport.dbobject.v1.DatabaseObjectService/GetDatabaseObject" @@ -143,7 +143,7 @@ func (c *databaseObjectServiceClient) DeleteDatabaseObject(ctx context.Context, // DatabaseObjectServiceServer is the server API for DatabaseObjectService service. // All implementations must embed UnimplementedDatabaseObjectServiceServer -// for forward compatibility +// for forward compatibility. // // DatabaseObjectService provides methods to manage Teleport DatabaseObjects type DatabaseObjectServiceServer interface { @@ -173,9 +173,12 @@ type DatabaseObjectServiceServer interface { mustEmbedUnimplementedDatabaseObjectServiceServer() } -// UnimplementedDatabaseObjectServiceServer must be embedded to have forward compatible implementations. -type UnimplementedDatabaseObjectServiceServer struct { -} +// UnimplementedDatabaseObjectServiceServer must be embedded to have +// forward compatible implementations. +// +// NOTE: this should be embedded by value instead of pointer to avoid a nil +// pointer dereference when methods are called. +type UnimplementedDatabaseObjectServiceServer struct{} func (UnimplementedDatabaseObjectServiceServer) GetDatabaseObject(context.Context, *GetDatabaseObjectRequest) (*DatabaseObject, error) { return nil, status.Errorf(codes.Unimplemented, "method GetDatabaseObject not implemented") @@ -196,6 +199,7 @@ func (UnimplementedDatabaseObjectServiceServer) DeleteDatabaseObject(context.Con return nil, status.Errorf(codes.Unimplemented, "method DeleteDatabaseObject not implemented") } func (UnimplementedDatabaseObjectServiceServer) mustEmbedUnimplementedDatabaseObjectServiceServer() {} +func (UnimplementedDatabaseObjectServiceServer) testEmbeddedByValue() {} // UnsafeDatabaseObjectServiceServer may be embedded to opt out of forward compatibility for this service. // Use of this interface is not recommended, as added methods to DatabaseObjectServiceServer will @@ -205,6 +209,13 @@ type UnsafeDatabaseObjectServiceServer interface { } func RegisterDatabaseObjectServiceServer(s grpc.ServiceRegistrar, srv DatabaseObjectServiceServer) { + // If the following call pancis, it indicates UnimplementedDatabaseObjectServiceServer was + // embedded by pointer and is nil. This will cause panics if an + // unimplemented method is ever invoked, so we test this at initialization + // time to prevent it from happening at runtime later due to I/O. + if t, ok := srv.(interface{ testEmbeddedByValue() }); ok { + t.testEmbeddedByValue() + } s.RegisterService(&DatabaseObjectService_ServiceDesc, srv) } diff --git a/api/gen/proto/go/teleport/dbobjectimportrule/v1/dbobjectimportrule_service_grpc.pb.go b/api/gen/proto/go/teleport/dbobjectimportrule/v1/dbobjectimportrule_service_grpc.pb.go index f92f31efe1ff6..33a30ef154567 100644 --- a/api/gen/proto/go/teleport/dbobjectimportrule/v1/dbobjectimportrule_service_grpc.pb.go +++ b/api/gen/proto/go/teleport/dbobjectimportrule/v1/dbobjectimportrule_service_grpc.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: -// - protoc-gen-go-grpc v1.4.0 +// - protoc-gen-go-grpc v1.5.0 // - protoc (unknown) // source: teleport/dbobjectimportrule/v1/dbobjectimportrule_service.proto @@ -30,8 +30,8 @@ import ( // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. -// Requires gRPC-Go v1.62.0 or later. -const _ = grpc.SupportPackageIsVersion8 +// Requires gRPC-Go v1.64.0 or later. +const _ = grpc.SupportPackageIsVersion9 const ( DatabaseObjectImportRuleService_GetDatabaseObjectImportRule_FullMethodName = "/teleport.dbobjectimportrule.v1.DatabaseObjectImportRuleService/GetDatabaseObjectImportRule" @@ -143,7 +143,7 @@ func (c *databaseObjectImportRuleServiceClient) DeleteDatabaseObjectImportRule(c // DatabaseObjectImportRuleServiceServer is the server API for DatabaseObjectImportRuleService service. // All implementations must embed UnimplementedDatabaseObjectImportRuleServiceServer -// for forward compatibility +// for forward compatibility. // // DatabaseObjectImportRuleService provides methods to manage Teleport DatabaseObjectImportRules type DatabaseObjectImportRuleServiceServer interface { @@ -173,9 +173,12 @@ type DatabaseObjectImportRuleServiceServer interface { mustEmbedUnimplementedDatabaseObjectImportRuleServiceServer() } -// UnimplementedDatabaseObjectImportRuleServiceServer must be embedded to have forward compatible implementations. -type UnimplementedDatabaseObjectImportRuleServiceServer struct { -} +// UnimplementedDatabaseObjectImportRuleServiceServer must be embedded to have +// forward compatible implementations. +// +// NOTE: this should be embedded by value instead of pointer to avoid a nil +// pointer dereference when methods are called. +type UnimplementedDatabaseObjectImportRuleServiceServer struct{} func (UnimplementedDatabaseObjectImportRuleServiceServer) GetDatabaseObjectImportRule(context.Context, *GetDatabaseObjectImportRuleRequest) (*DatabaseObjectImportRule, error) { return nil, status.Errorf(codes.Unimplemented, "method GetDatabaseObjectImportRule not implemented") @@ -197,6 +200,7 @@ func (UnimplementedDatabaseObjectImportRuleServiceServer) DeleteDatabaseObjectIm } func (UnimplementedDatabaseObjectImportRuleServiceServer) mustEmbedUnimplementedDatabaseObjectImportRuleServiceServer() { } +func (UnimplementedDatabaseObjectImportRuleServiceServer) testEmbeddedByValue() {} // UnsafeDatabaseObjectImportRuleServiceServer may be embedded to opt out of forward compatibility for this service. // Use of this interface is not recommended, as added methods to DatabaseObjectImportRuleServiceServer will @@ -206,6 +210,13 @@ type UnsafeDatabaseObjectImportRuleServiceServer interface { } func RegisterDatabaseObjectImportRuleServiceServer(s grpc.ServiceRegistrar, srv DatabaseObjectImportRuleServiceServer) { + // If the following call pancis, it indicates UnimplementedDatabaseObjectImportRuleServiceServer was + // embedded by pointer and is nil. This will cause panics if an + // unimplemented method is ever invoked, so we test this at initialization + // time to prevent it from happening at runtime later due to I/O. + if t, ok := srv.(interface{ testEmbeddedByValue() }); ok { + t.testEmbeddedByValue() + } s.RegisterService(&DatabaseObjectImportRuleService_ServiceDesc, srv) } diff --git a/api/gen/proto/go/teleport/devicetrust/v1/devicetrust_service_grpc.pb.go b/api/gen/proto/go/teleport/devicetrust/v1/devicetrust_service_grpc.pb.go index 86be79eb248cf..efe987efc84da 100644 --- a/api/gen/proto/go/teleport/devicetrust/v1/devicetrust_service_grpc.pb.go +++ b/api/gen/proto/go/teleport/devicetrust/v1/devicetrust_service_grpc.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: -// - protoc-gen-go-grpc v1.4.0 +// - protoc-gen-go-grpc v1.5.0 // - protoc (unknown) // source: teleport/devicetrust/v1/devicetrust_service.proto @@ -30,8 +30,8 @@ import ( // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. -// Requires gRPC-Go v1.62.0 or later. -const _ = grpc.SupportPackageIsVersion8 +// Requires gRPC-Go v1.64.0 or later. +const _ = grpc.SupportPackageIsVersion9 const ( DeviceTrustService_CreateDevice_FullMethodName = "/teleport.devicetrust.v1.DeviceTrustService/CreateDevice" @@ -141,7 +141,7 @@ type DeviceTrustServiceClient interface { // <- TPMEnrollChallenge (server) // -> TPMEnrollChallengeResponse // <- EnrollDeviceSuccess - EnrollDevice(ctx context.Context, opts ...grpc.CallOption) (DeviceTrustService_EnrollDeviceClient, error) + EnrollDevice(ctx context.Context, opts ...grpc.CallOption) (grpc.BidiStreamingClient[EnrollDeviceRequest, EnrollDeviceResponse], error) // AuthenticateDevice performs the device authentication ceremony. // // Device authentication exchanges existing user certificates without device @@ -149,7 +149,7 @@ type DeviceTrustServiceClient interface { // certificates allow the user to perform device-aware actions. // // Only registered and enrolled devices may perform device authentication. - AuthenticateDevice(ctx context.Context, opts ...grpc.CallOption) (DeviceTrustService_AuthenticateDeviceClient, error) + AuthenticateDevice(ctx context.Context, opts ...grpc.CallOption) (grpc.BidiStreamingClient[AuthenticateDeviceRequest, AuthenticateDeviceResponse], error) // ConfirmDeviceWebAuthentication finalizes the device web authentication // ceremony started by the creation of a DeviceWebToken and subsequent // AuthenticateDevice call. @@ -171,7 +171,7 @@ type DeviceTrustServiceClient interface { // the external inventory are handled as specified. // Authorized either by a valid MDM service certificate or the appropriate // "device" permissions (create/update/delete). - SyncInventory(ctx context.Context, opts ...grpc.CallOption) (DeviceTrustService_SyncInventoryClient, error) + SyncInventory(ctx context.Context, opts ...grpc.CallOption) (grpc.BidiStreamingClient[SyncInventoryRequest, SyncInventoryResponse], error) // Deprecated: Do not use. // Superseded by ResourceUsageService.GetUsage. GetDevicesUsage(ctx context.Context, in *GetDevicesUsageRequest, opts ...grpc.CallOption) (*DevicesUsage, error) @@ -275,69 +275,31 @@ func (c *deviceTrustServiceClient) CreateDeviceEnrollToken(ctx context.Context, return out, nil } -func (c *deviceTrustServiceClient) EnrollDevice(ctx context.Context, opts ...grpc.CallOption) (DeviceTrustService_EnrollDeviceClient, error) { +func (c *deviceTrustServiceClient) EnrollDevice(ctx context.Context, opts ...grpc.CallOption) (grpc.BidiStreamingClient[EnrollDeviceRequest, EnrollDeviceResponse], error) { cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) stream, err := c.cc.NewStream(ctx, &DeviceTrustService_ServiceDesc.Streams[0], DeviceTrustService_EnrollDevice_FullMethodName, cOpts...) if err != nil { return nil, err } - x := &deviceTrustServiceEnrollDeviceClient{ClientStream: stream} + x := &grpc.GenericClientStream[EnrollDeviceRequest, EnrollDeviceResponse]{ClientStream: stream} return x, nil } -type DeviceTrustService_EnrollDeviceClient interface { - Send(*EnrollDeviceRequest) error - Recv() (*EnrollDeviceResponse, error) - grpc.ClientStream -} - -type deviceTrustServiceEnrollDeviceClient struct { - grpc.ClientStream -} - -func (x *deviceTrustServiceEnrollDeviceClient) Send(m *EnrollDeviceRequest) error { - return x.ClientStream.SendMsg(m) -} +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type DeviceTrustService_EnrollDeviceClient = grpc.BidiStreamingClient[EnrollDeviceRequest, EnrollDeviceResponse] -func (x *deviceTrustServiceEnrollDeviceClient) Recv() (*EnrollDeviceResponse, error) { - m := new(EnrollDeviceResponse) - if err := x.ClientStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} - -func (c *deviceTrustServiceClient) AuthenticateDevice(ctx context.Context, opts ...grpc.CallOption) (DeviceTrustService_AuthenticateDeviceClient, error) { +func (c *deviceTrustServiceClient) AuthenticateDevice(ctx context.Context, opts ...grpc.CallOption) (grpc.BidiStreamingClient[AuthenticateDeviceRequest, AuthenticateDeviceResponse], error) { cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) stream, err := c.cc.NewStream(ctx, &DeviceTrustService_ServiceDesc.Streams[1], DeviceTrustService_AuthenticateDevice_FullMethodName, cOpts...) if err != nil { return nil, err } - x := &deviceTrustServiceAuthenticateDeviceClient{ClientStream: stream} + x := &grpc.GenericClientStream[AuthenticateDeviceRequest, AuthenticateDeviceResponse]{ClientStream: stream} return x, nil } -type DeviceTrustService_AuthenticateDeviceClient interface { - Send(*AuthenticateDeviceRequest) error - Recv() (*AuthenticateDeviceResponse, error) - grpc.ClientStream -} - -type deviceTrustServiceAuthenticateDeviceClient struct { - grpc.ClientStream -} - -func (x *deviceTrustServiceAuthenticateDeviceClient) Send(m *AuthenticateDeviceRequest) error { - return x.ClientStream.SendMsg(m) -} - -func (x *deviceTrustServiceAuthenticateDeviceClient) Recv() (*AuthenticateDeviceResponse, error) { - m := new(AuthenticateDeviceResponse) - if err := x.ClientStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type DeviceTrustService_AuthenticateDeviceClient = grpc.BidiStreamingClient[AuthenticateDeviceRequest, AuthenticateDeviceResponse] func (c *deviceTrustServiceClient) ConfirmDeviceWebAuthentication(ctx context.Context, in *ConfirmDeviceWebAuthenticationRequest, opts ...grpc.CallOption) (*ConfirmDeviceWebAuthenticationResponse, error) { cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) @@ -349,37 +311,18 @@ func (c *deviceTrustServiceClient) ConfirmDeviceWebAuthentication(ctx context.Co return out, nil } -func (c *deviceTrustServiceClient) SyncInventory(ctx context.Context, opts ...grpc.CallOption) (DeviceTrustService_SyncInventoryClient, error) { +func (c *deviceTrustServiceClient) SyncInventory(ctx context.Context, opts ...grpc.CallOption) (grpc.BidiStreamingClient[SyncInventoryRequest, SyncInventoryResponse], error) { cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) stream, err := c.cc.NewStream(ctx, &DeviceTrustService_ServiceDesc.Streams[2], DeviceTrustService_SyncInventory_FullMethodName, cOpts...) if err != nil { return nil, err } - x := &deviceTrustServiceSyncInventoryClient{ClientStream: stream} + x := &grpc.GenericClientStream[SyncInventoryRequest, SyncInventoryResponse]{ClientStream: stream} return x, nil } -type DeviceTrustService_SyncInventoryClient interface { - Send(*SyncInventoryRequest) error - Recv() (*SyncInventoryResponse, error) - grpc.ClientStream -} - -type deviceTrustServiceSyncInventoryClient struct { - grpc.ClientStream -} - -func (x *deviceTrustServiceSyncInventoryClient) Send(m *SyncInventoryRequest) error { - return x.ClientStream.SendMsg(m) -} - -func (x *deviceTrustServiceSyncInventoryClient) Recv() (*SyncInventoryResponse, error) { - m := new(SyncInventoryResponse) - if err := x.ClientStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type DeviceTrustService_SyncInventoryClient = grpc.BidiStreamingClient[SyncInventoryRequest, SyncInventoryResponse] // Deprecated: Do not use. func (c *deviceTrustServiceClient) GetDevicesUsage(ctx context.Context, in *GetDevicesUsageRequest, opts ...grpc.CallOption) (*DevicesUsage, error) { @@ -394,7 +337,7 @@ func (c *deviceTrustServiceClient) GetDevicesUsage(ctx context.Context, in *GetD // DeviceTrustServiceServer is the server API for DeviceTrustService service. // All implementations must embed UnimplementedDeviceTrustServiceServer -// for forward compatibility +// for forward compatibility. // // DeviceTrustService provides methods to manage, enroll and authenticate // trusted devices. @@ -483,7 +426,7 @@ type DeviceTrustServiceServer interface { // <- TPMEnrollChallenge (server) // -> TPMEnrollChallengeResponse // <- EnrollDeviceSuccess - EnrollDevice(DeviceTrustService_EnrollDeviceServer) error + EnrollDevice(grpc.BidiStreamingServer[EnrollDeviceRequest, EnrollDeviceResponse]) error // AuthenticateDevice performs the device authentication ceremony. // // Device authentication exchanges existing user certificates without device @@ -491,7 +434,7 @@ type DeviceTrustServiceServer interface { // certificates allow the user to perform device-aware actions. // // Only registered and enrolled devices may perform device authentication. - AuthenticateDevice(DeviceTrustService_AuthenticateDeviceServer) error + AuthenticateDevice(grpc.BidiStreamingServer[AuthenticateDeviceRequest, AuthenticateDeviceResponse]) error // ConfirmDeviceWebAuthentication finalizes the device web authentication // ceremony started by the creation of a DeviceWebToken and subsequent // AuthenticateDevice call. @@ -513,16 +456,19 @@ type DeviceTrustServiceServer interface { // the external inventory are handled as specified. // Authorized either by a valid MDM service certificate or the appropriate // "device" permissions (create/update/delete). - SyncInventory(DeviceTrustService_SyncInventoryServer) error + SyncInventory(grpc.BidiStreamingServer[SyncInventoryRequest, SyncInventoryResponse]) error // Deprecated: Do not use. // Superseded by ResourceUsageService.GetUsage. GetDevicesUsage(context.Context, *GetDevicesUsageRequest) (*DevicesUsage, error) mustEmbedUnimplementedDeviceTrustServiceServer() } -// UnimplementedDeviceTrustServiceServer must be embedded to have forward compatible implementations. -type UnimplementedDeviceTrustServiceServer struct { -} +// UnimplementedDeviceTrustServiceServer must be embedded to have +// forward compatible implementations. +// +// NOTE: this should be embedded by value instead of pointer to avoid a nil +// pointer dereference when methods are called. +type UnimplementedDeviceTrustServiceServer struct{} func (UnimplementedDeviceTrustServiceServer) CreateDevice(context.Context, *CreateDeviceRequest) (*Device, error) { return nil, status.Errorf(codes.Unimplemented, "method CreateDevice not implemented") @@ -551,22 +497,23 @@ func (UnimplementedDeviceTrustServiceServer) BulkCreateDevices(context.Context, func (UnimplementedDeviceTrustServiceServer) CreateDeviceEnrollToken(context.Context, *CreateDeviceEnrollTokenRequest) (*DeviceEnrollToken, error) { return nil, status.Errorf(codes.Unimplemented, "method CreateDeviceEnrollToken not implemented") } -func (UnimplementedDeviceTrustServiceServer) EnrollDevice(DeviceTrustService_EnrollDeviceServer) error { +func (UnimplementedDeviceTrustServiceServer) EnrollDevice(grpc.BidiStreamingServer[EnrollDeviceRequest, EnrollDeviceResponse]) error { return status.Errorf(codes.Unimplemented, "method EnrollDevice not implemented") } -func (UnimplementedDeviceTrustServiceServer) AuthenticateDevice(DeviceTrustService_AuthenticateDeviceServer) error { +func (UnimplementedDeviceTrustServiceServer) AuthenticateDevice(grpc.BidiStreamingServer[AuthenticateDeviceRequest, AuthenticateDeviceResponse]) error { return status.Errorf(codes.Unimplemented, "method AuthenticateDevice not implemented") } func (UnimplementedDeviceTrustServiceServer) ConfirmDeviceWebAuthentication(context.Context, *ConfirmDeviceWebAuthenticationRequest) (*ConfirmDeviceWebAuthenticationResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method ConfirmDeviceWebAuthentication not implemented") } -func (UnimplementedDeviceTrustServiceServer) SyncInventory(DeviceTrustService_SyncInventoryServer) error { +func (UnimplementedDeviceTrustServiceServer) SyncInventory(grpc.BidiStreamingServer[SyncInventoryRequest, SyncInventoryResponse]) error { return status.Errorf(codes.Unimplemented, "method SyncInventory not implemented") } func (UnimplementedDeviceTrustServiceServer) GetDevicesUsage(context.Context, *GetDevicesUsageRequest) (*DevicesUsage, error) { return nil, status.Errorf(codes.Unimplemented, "method GetDevicesUsage not implemented") } func (UnimplementedDeviceTrustServiceServer) mustEmbedUnimplementedDeviceTrustServiceServer() {} +func (UnimplementedDeviceTrustServiceServer) testEmbeddedByValue() {} // UnsafeDeviceTrustServiceServer may be embedded to opt out of forward compatibility for this service. // Use of this interface is not recommended, as added methods to DeviceTrustServiceServer will @@ -576,6 +523,13 @@ type UnsafeDeviceTrustServiceServer interface { } func RegisterDeviceTrustServiceServer(s grpc.ServiceRegistrar, srv DeviceTrustServiceServer) { + // If the following call pancis, it indicates UnimplementedDeviceTrustServiceServer was + // embedded by pointer and is nil. This will cause panics if an + // unimplemented method is ever invoked, so we test this at initialization + // time to prevent it from happening at runtime later due to I/O. + if t, ok := srv.(interface{ testEmbeddedByValue() }); ok { + t.testEmbeddedByValue() + } s.RegisterService(&DeviceTrustService_ServiceDesc, srv) } @@ -742,56 +696,18 @@ func _DeviceTrustService_CreateDeviceEnrollToken_Handler(srv interface{}, ctx co } func _DeviceTrustService_EnrollDevice_Handler(srv interface{}, stream grpc.ServerStream) error { - return srv.(DeviceTrustServiceServer).EnrollDevice(&deviceTrustServiceEnrollDeviceServer{ServerStream: stream}) -} - -type DeviceTrustService_EnrollDeviceServer interface { - Send(*EnrollDeviceResponse) error - Recv() (*EnrollDeviceRequest, error) - grpc.ServerStream -} - -type deviceTrustServiceEnrollDeviceServer struct { - grpc.ServerStream -} - -func (x *deviceTrustServiceEnrollDeviceServer) Send(m *EnrollDeviceResponse) error { - return x.ServerStream.SendMsg(m) + return srv.(DeviceTrustServiceServer).EnrollDevice(&grpc.GenericServerStream[EnrollDeviceRequest, EnrollDeviceResponse]{ServerStream: stream}) } -func (x *deviceTrustServiceEnrollDeviceServer) Recv() (*EnrollDeviceRequest, error) { - m := new(EnrollDeviceRequest) - if err := x.ServerStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type DeviceTrustService_EnrollDeviceServer = grpc.BidiStreamingServer[EnrollDeviceRequest, EnrollDeviceResponse] func _DeviceTrustService_AuthenticateDevice_Handler(srv interface{}, stream grpc.ServerStream) error { - return srv.(DeviceTrustServiceServer).AuthenticateDevice(&deviceTrustServiceAuthenticateDeviceServer{ServerStream: stream}) -} - -type DeviceTrustService_AuthenticateDeviceServer interface { - Send(*AuthenticateDeviceResponse) error - Recv() (*AuthenticateDeviceRequest, error) - grpc.ServerStream -} - -type deviceTrustServiceAuthenticateDeviceServer struct { - grpc.ServerStream + return srv.(DeviceTrustServiceServer).AuthenticateDevice(&grpc.GenericServerStream[AuthenticateDeviceRequest, AuthenticateDeviceResponse]{ServerStream: stream}) } -func (x *deviceTrustServiceAuthenticateDeviceServer) Send(m *AuthenticateDeviceResponse) error { - return x.ServerStream.SendMsg(m) -} - -func (x *deviceTrustServiceAuthenticateDeviceServer) Recv() (*AuthenticateDeviceRequest, error) { - m := new(AuthenticateDeviceRequest) - if err := x.ServerStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type DeviceTrustService_AuthenticateDeviceServer = grpc.BidiStreamingServer[AuthenticateDeviceRequest, AuthenticateDeviceResponse] func _DeviceTrustService_ConfirmDeviceWebAuthentication_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(ConfirmDeviceWebAuthenticationRequest) @@ -812,30 +728,11 @@ func _DeviceTrustService_ConfirmDeviceWebAuthentication_Handler(srv interface{}, } func _DeviceTrustService_SyncInventory_Handler(srv interface{}, stream grpc.ServerStream) error { - return srv.(DeviceTrustServiceServer).SyncInventory(&deviceTrustServiceSyncInventoryServer{ServerStream: stream}) -} - -type DeviceTrustService_SyncInventoryServer interface { - Send(*SyncInventoryResponse) error - Recv() (*SyncInventoryRequest, error) - grpc.ServerStream + return srv.(DeviceTrustServiceServer).SyncInventory(&grpc.GenericServerStream[SyncInventoryRequest, SyncInventoryResponse]{ServerStream: stream}) } -type deviceTrustServiceSyncInventoryServer struct { - grpc.ServerStream -} - -func (x *deviceTrustServiceSyncInventoryServer) Send(m *SyncInventoryResponse) error { - return x.ServerStream.SendMsg(m) -} - -func (x *deviceTrustServiceSyncInventoryServer) Recv() (*SyncInventoryRequest, error) { - m := new(SyncInventoryRequest) - if err := x.ServerStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type DeviceTrustService_SyncInventoryServer = grpc.BidiStreamingServer[SyncInventoryRequest, SyncInventoryResponse] func _DeviceTrustService_GetDevicesUsage_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(GetDevicesUsageRequest) diff --git a/api/gen/proto/go/teleport/discoveryconfig/v1/discoveryconfig_service_grpc.pb.go b/api/gen/proto/go/teleport/discoveryconfig/v1/discoveryconfig_service_grpc.pb.go index 931e454d0d742..aec7605c5ed80 100644 --- a/api/gen/proto/go/teleport/discoveryconfig/v1/discoveryconfig_service_grpc.pb.go +++ b/api/gen/proto/go/teleport/discoveryconfig/v1/discoveryconfig_service_grpc.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: -// - protoc-gen-go-grpc v1.4.0 +// - protoc-gen-go-grpc v1.5.0 // - protoc (unknown) // source: teleport/discoveryconfig/v1/discoveryconfig_service.proto @@ -30,8 +30,8 @@ import ( // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. -// Requires gRPC-Go v1.62.0 or later. -const _ = grpc.SupportPackageIsVersion8 +// Requires gRPC-Go v1.64.0 or later. +const _ = grpc.SupportPackageIsVersion9 const ( DiscoveryConfigService_ListDiscoveryConfigs_FullMethodName = "/teleport.discoveryconfig.v1.DiscoveryConfigService/ListDiscoveryConfigs" @@ -162,7 +162,7 @@ func (c *discoveryConfigServiceClient) UpdateDiscoveryConfigStatus(ctx context.C // DiscoveryConfigServiceServer is the server API for DiscoveryConfigService service. // All implementations must embed UnimplementedDiscoveryConfigServiceServer -// for forward compatibility +// for forward compatibility. // // DiscoveryConfigService provides methods to manage Discovery Configs. // @@ -189,9 +189,12 @@ type DiscoveryConfigServiceServer interface { mustEmbedUnimplementedDiscoveryConfigServiceServer() } -// UnimplementedDiscoveryConfigServiceServer must be embedded to have forward compatible implementations. -type UnimplementedDiscoveryConfigServiceServer struct { -} +// UnimplementedDiscoveryConfigServiceServer must be embedded to have +// forward compatible implementations. +// +// NOTE: this should be embedded by value instead of pointer to avoid a nil +// pointer dereference when methods are called. +type UnimplementedDiscoveryConfigServiceServer struct{} func (UnimplementedDiscoveryConfigServiceServer) ListDiscoveryConfigs(context.Context, *ListDiscoveryConfigsRequest) (*ListDiscoveryConfigsResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method ListDiscoveryConfigs not implemented") @@ -219,6 +222,7 @@ func (UnimplementedDiscoveryConfigServiceServer) UpdateDiscoveryConfigStatus(con } func (UnimplementedDiscoveryConfigServiceServer) mustEmbedUnimplementedDiscoveryConfigServiceServer() { } +func (UnimplementedDiscoveryConfigServiceServer) testEmbeddedByValue() {} // UnsafeDiscoveryConfigServiceServer may be embedded to opt out of forward compatibility for this service. // Use of this interface is not recommended, as added methods to DiscoveryConfigServiceServer will @@ -228,6 +232,13 @@ type UnsafeDiscoveryConfigServiceServer interface { } func RegisterDiscoveryConfigServiceServer(s grpc.ServiceRegistrar, srv DiscoveryConfigServiceServer) { + // If the following call pancis, it indicates UnimplementedDiscoveryConfigServiceServer was + // embedded by pointer and is nil. This will cause panics if an + // unimplemented method is ever invoked, so we test this at initialization + // time to prevent it from happening at runtime later due to I/O. + if t, ok := srv.(interface{ testEmbeddedByValue() }); ok { + t.testEmbeddedByValue() + } s.RegisterService(&DiscoveryConfigService_ServiceDesc, srv) } diff --git a/api/gen/proto/go/teleport/externalauditstorage/v1/externalauditstorage_service_grpc.pb.go b/api/gen/proto/go/teleport/externalauditstorage/v1/externalauditstorage_service_grpc.pb.go index 4daf16e04b176..ae7b61b886d61 100644 --- a/api/gen/proto/go/teleport/externalauditstorage/v1/externalauditstorage_service_grpc.pb.go +++ b/api/gen/proto/go/teleport/externalauditstorage/v1/externalauditstorage_service_grpc.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: -// - protoc-gen-go-grpc v1.4.0 +// - protoc-gen-go-grpc v1.5.0 // - protoc (unknown) // source: teleport/externalauditstorage/v1/externalauditstorage_service.proto @@ -30,8 +30,8 @@ import ( // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. -// Requires gRPC-Go v1.62.0 or later. -const _ = grpc.SupportPackageIsVersion8 +// Requires gRPC-Go v1.64.0 or later. +const _ = grpc.SupportPackageIsVersion9 const ( ExternalAuditStorageService_GetDraftExternalAuditStorage_FullMethodName = "/teleport.externalauditstorage.v1.ExternalAuditStorageService/GetDraftExternalAuditStorage" @@ -214,7 +214,7 @@ func (c *externalAuditStorageServiceClient) TestDraftExternalAuditStorageAthena( // ExternalAuditStorageServiceServer is the server API for ExternalAuditStorageService service. // All implementations must embed UnimplementedExternalAuditStorageServiceServer -// for forward compatibility +// for forward compatibility. // // ExternalAuditStorageService provides methods to manage External Audit Storage. // @@ -260,9 +260,12 @@ type ExternalAuditStorageServiceServer interface { mustEmbedUnimplementedExternalAuditStorageServiceServer() } -// UnimplementedExternalAuditStorageServiceServer must be embedded to have forward compatible implementations. -type UnimplementedExternalAuditStorageServiceServer struct { -} +// UnimplementedExternalAuditStorageServiceServer must be embedded to have +// forward compatible implementations. +// +// NOTE: this should be embedded by value instead of pointer to avoid a nil +// pointer dereference when methods are called. +type UnimplementedExternalAuditStorageServiceServer struct{} func (UnimplementedExternalAuditStorageServiceServer) GetDraftExternalAuditStorage(context.Context, *GetDraftExternalAuditStorageRequest) (*GetDraftExternalAuditStorageResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method GetDraftExternalAuditStorage not implemented") @@ -299,6 +302,7 @@ func (UnimplementedExternalAuditStorageServiceServer) TestDraftExternalAuditStor } func (UnimplementedExternalAuditStorageServiceServer) mustEmbedUnimplementedExternalAuditStorageServiceServer() { } +func (UnimplementedExternalAuditStorageServiceServer) testEmbeddedByValue() {} // UnsafeExternalAuditStorageServiceServer may be embedded to opt out of forward compatibility for this service. // Use of this interface is not recommended, as added methods to ExternalAuditStorageServiceServer will @@ -308,6 +312,13 @@ type UnsafeExternalAuditStorageServiceServer interface { } func RegisterExternalAuditStorageServiceServer(s grpc.ServiceRegistrar, srv ExternalAuditStorageServiceServer) { + // If the following call pancis, it indicates UnimplementedExternalAuditStorageServiceServer was + // embedded by pointer and is nil. This will cause panics if an + // unimplemented method is ever invoked, so we test this at initialization + // time to prevent it from happening at runtime later due to I/O. + if t, ok := srv.(interface{ testEmbeddedByValue() }); ok { + t.testEmbeddedByValue() + } s.RegisterService(&ExternalAuditStorageService_ServiceDesc, srv) } diff --git a/api/gen/proto/go/teleport/integration/v1/awsoidc_service_grpc.pb.go b/api/gen/proto/go/teleport/integration/v1/awsoidc_service_grpc.pb.go index d629021b2887b..06710804553d6 100644 --- a/api/gen/proto/go/teleport/integration/v1/awsoidc_service_grpc.pb.go +++ b/api/gen/proto/go/teleport/integration/v1/awsoidc_service_grpc.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: -// - protoc-gen-go-grpc v1.4.0 +// - protoc-gen-go-grpc v1.5.0 // - protoc (unknown) // source: teleport/integration/v1/awsoidc_service.proto @@ -29,8 +29,8 @@ import ( // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. -// Requires gRPC-Go v1.62.0 or later. -const _ = grpc.SupportPackageIsVersion8 +// Requires gRPC-Go v1.64.0 or later. +const _ = grpc.SupportPackageIsVersion9 const ( AWSOIDCService_ListEICE_FullMethodName = "/teleport.integration.v1.AWSOIDCService/ListEICE" @@ -215,7 +215,7 @@ func (c *aWSOIDCServiceClient) ListEKSClusters(ctx context.Context, in *ListEKSC // AWSOIDCServiceServer is the server API for AWSOIDCService service. // All implementations must embed UnimplementedAWSOIDCServiceServer -// for forward compatibility +// for forward compatibility. // // AWSOIDCService provides access to AWS APIs using the AWS OIDC Integration. type AWSOIDCServiceServer interface { @@ -263,9 +263,12 @@ type AWSOIDCServiceServer interface { mustEmbedUnimplementedAWSOIDCServiceServer() } -// UnimplementedAWSOIDCServiceServer must be embedded to have forward compatible implementations. -type UnimplementedAWSOIDCServiceServer struct { -} +// UnimplementedAWSOIDCServiceServer must be embedded to have +// forward compatible implementations. +// +// NOTE: this should be embedded by value instead of pointer to avoid a nil +// pointer dereference when methods are called. +type UnimplementedAWSOIDCServiceServer struct{} func (UnimplementedAWSOIDCServiceServer) ListEICE(context.Context, *ListEICERequest) (*ListEICEResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method ListEICE not implemented") @@ -301,6 +304,7 @@ func (UnimplementedAWSOIDCServiceServer) ListEKSClusters(context.Context, *ListE return nil, status.Errorf(codes.Unimplemented, "method ListEKSClusters not implemented") } func (UnimplementedAWSOIDCServiceServer) mustEmbedUnimplementedAWSOIDCServiceServer() {} +func (UnimplementedAWSOIDCServiceServer) testEmbeddedByValue() {} // UnsafeAWSOIDCServiceServer may be embedded to opt out of forward compatibility for this service. // Use of this interface is not recommended, as added methods to AWSOIDCServiceServer will @@ -310,6 +314,13 @@ type UnsafeAWSOIDCServiceServer interface { } func RegisterAWSOIDCServiceServer(s grpc.ServiceRegistrar, srv AWSOIDCServiceServer) { + // If the following call pancis, it indicates UnimplementedAWSOIDCServiceServer was + // embedded by pointer and is nil. This will cause panics if an + // unimplemented method is ever invoked, so we test this at initialization + // time to prevent it from happening at runtime later due to I/O. + if t, ok := srv.(interface{ testEmbeddedByValue() }); ok { + t.testEmbeddedByValue() + } s.RegisterService(&AWSOIDCService_ServiceDesc, srv) } diff --git a/api/gen/proto/go/teleport/integration/v1/integration_service_grpc.pb.go b/api/gen/proto/go/teleport/integration/v1/integration_service_grpc.pb.go index dac1038e618ab..2a4bbdb3f9563 100644 --- a/api/gen/proto/go/teleport/integration/v1/integration_service_grpc.pb.go +++ b/api/gen/proto/go/teleport/integration/v1/integration_service_grpc.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: -// - protoc-gen-go-grpc v1.4.0 +// - protoc-gen-go-grpc v1.5.0 // - protoc (unknown) // source: teleport/integration/v1/integration_service.proto @@ -31,8 +31,8 @@ import ( // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. -// Requires gRPC-Go v1.62.0 or later. -const _ = grpc.SupportPackageIsVersion8 +// Requires gRPC-Go v1.64.0 or later. +const _ = grpc.SupportPackageIsVersion9 const ( IntegrationService_ListIntegrations_FullMethodName = "/teleport.integration.v1.IntegrationService/ListIntegrations" @@ -147,7 +147,7 @@ func (c *integrationServiceClient) GenerateAWSOIDCToken(ctx context.Context, in // IntegrationServiceServer is the server API for IntegrationService service. // All implementations must embed UnimplementedIntegrationServiceServer -// for forward compatibility +// for forward compatibility. // // IntegrationService provides methods to manage Integrations with 3rd party APIs. type IntegrationServiceServer interface { @@ -169,9 +169,12 @@ type IntegrationServiceServer interface { mustEmbedUnimplementedIntegrationServiceServer() } -// UnimplementedIntegrationServiceServer must be embedded to have forward compatible implementations. -type UnimplementedIntegrationServiceServer struct { -} +// UnimplementedIntegrationServiceServer must be embedded to have +// forward compatible implementations. +// +// NOTE: this should be embedded by value instead of pointer to avoid a nil +// pointer dereference when methods are called. +type UnimplementedIntegrationServiceServer struct{} func (UnimplementedIntegrationServiceServer) ListIntegrations(context.Context, *ListIntegrationsRequest) (*ListIntegrationsResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method ListIntegrations not implemented") @@ -195,6 +198,7 @@ func (UnimplementedIntegrationServiceServer) GenerateAWSOIDCToken(context.Contex return nil, status.Errorf(codes.Unimplemented, "method GenerateAWSOIDCToken not implemented") } func (UnimplementedIntegrationServiceServer) mustEmbedUnimplementedIntegrationServiceServer() {} +func (UnimplementedIntegrationServiceServer) testEmbeddedByValue() {} // UnsafeIntegrationServiceServer may be embedded to opt out of forward compatibility for this service. // Use of this interface is not recommended, as added methods to IntegrationServiceServer will @@ -204,6 +208,13 @@ type UnsafeIntegrationServiceServer interface { } func RegisterIntegrationServiceServer(s grpc.ServiceRegistrar, srv IntegrationServiceServer) { + // If the following call pancis, it indicates UnimplementedIntegrationServiceServer was + // embedded by pointer and is nil. This will cause panics if an + // unimplemented method is ever invoked, so we test this at initialization + // time to prevent it from happening at runtime later due to I/O. + if t, ok := srv.(interface{ testEmbeddedByValue() }); ok { + t.testEmbeddedByValue() + } s.RegisterService(&IntegrationService_ServiceDesc, srv) } diff --git a/api/gen/proto/go/teleport/kube/v1/kube_service_grpc.pb.go b/api/gen/proto/go/teleport/kube/v1/kube_service_grpc.pb.go index 2be5ac46ee7d6..95cd7d1cfcbb4 100644 --- a/api/gen/proto/go/teleport/kube/v1/kube_service_grpc.pb.go +++ b/api/gen/proto/go/teleport/kube/v1/kube_service_grpc.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: -// - protoc-gen-go-grpc v1.4.0 +// - protoc-gen-go-grpc v1.5.0 // - protoc (unknown) // source: teleport/kube/v1/kube_service.proto @@ -29,8 +29,8 @@ import ( // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. -// Requires gRPC-Go v1.62.0 or later. -const _ = grpc.SupportPackageIsVersion8 +// Requires gRPC-Go v1.64.0 or later. +const _ = grpc.SupportPackageIsVersion9 const ( KubeService_ListKubernetesResources_FullMethodName = "/teleport.kube.v1.KubeService/ListKubernetesResources" @@ -67,7 +67,7 @@ func (c *kubeServiceClient) ListKubernetesResources(ctx context.Context, in *Lis // KubeServiceServer is the server API for KubeService service. // All implementations must embed UnimplementedKubeServiceServer -// for forward compatibility +// for forward compatibility. // // KubeService provides methods to list Kubernetes resources when users are not allowed // to access the underlying cluster or resources but their `search_as_roles` allow. @@ -77,14 +77,18 @@ type KubeServiceServer interface { mustEmbedUnimplementedKubeServiceServer() } -// UnimplementedKubeServiceServer must be embedded to have forward compatible implementations. -type UnimplementedKubeServiceServer struct { -} +// UnimplementedKubeServiceServer must be embedded to have +// forward compatible implementations. +// +// NOTE: this should be embedded by value instead of pointer to avoid a nil +// pointer dereference when methods are called. +type UnimplementedKubeServiceServer struct{} func (UnimplementedKubeServiceServer) ListKubernetesResources(context.Context, *ListKubernetesResourcesRequest) (*ListKubernetesResourcesResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method ListKubernetesResources not implemented") } func (UnimplementedKubeServiceServer) mustEmbedUnimplementedKubeServiceServer() {} +func (UnimplementedKubeServiceServer) testEmbeddedByValue() {} // UnsafeKubeServiceServer may be embedded to opt out of forward compatibility for this service. // Use of this interface is not recommended, as added methods to KubeServiceServer will @@ -94,6 +98,13 @@ type UnsafeKubeServiceServer interface { } func RegisterKubeServiceServer(s grpc.ServiceRegistrar, srv KubeServiceServer) { + // If the following call pancis, it indicates UnimplementedKubeServiceServer was + // embedded by pointer and is nil. This will cause panics if an + // unimplemented method is ever invoked, so we test this at initialization + // time to prevent it from happening at runtime later due to I/O. + if t, ok := srv.(interface{ testEmbeddedByValue() }); ok { + t.testEmbeddedByValue() + } s.RegisterService(&KubeService_ServiceDesc, srv) } diff --git a/api/gen/proto/go/teleport/kubewaitingcontainer/v1/kubewaitingcontainer_service_grpc.pb.go b/api/gen/proto/go/teleport/kubewaitingcontainer/v1/kubewaitingcontainer_service_grpc.pb.go index 5d7ce460c5e50..bc81c2103f607 100644 --- a/api/gen/proto/go/teleport/kubewaitingcontainer/v1/kubewaitingcontainer_service_grpc.pb.go +++ b/api/gen/proto/go/teleport/kubewaitingcontainer/v1/kubewaitingcontainer_service_grpc.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: -// - protoc-gen-go-grpc v1.4.0 +// - protoc-gen-go-grpc v1.5.0 // - protoc (unknown) // source: teleport/kubewaitingcontainer/v1/kubewaitingcontainer_service.proto @@ -30,8 +30,8 @@ import ( // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. -// Requires gRPC-Go v1.62.0 or later. -const _ = grpc.SupportPackageIsVersion8 +// Requires gRPC-Go v1.64.0 or later. +const _ = grpc.SupportPackageIsVersion9 const ( KubeWaitingContainersService_ListKubernetesWaitingContainers_FullMethodName = "/teleport.kubewaitingcontainer.v1.KubeWaitingContainersService/ListKubernetesWaitingContainers" @@ -112,7 +112,7 @@ func (c *kubeWaitingContainersServiceClient) DeleteKubernetesWaitingContainer(ct // KubeWaitingContainersServiceServer is the server API for KubeWaitingContainersService service. // All implementations must embed UnimplementedKubeWaitingContainersServiceServer -// for forward compatibility +// for forward compatibility. // // KubeWaitingContainersService manages Kubernetes ephemeral // containers that are waiting to be created until moderated @@ -133,9 +133,12 @@ type KubeWaitingContainersServiceServer interface { mustEmbedUnimplementedKubeWaitingContainersServiceServer() } -// UnimplementedKubeWaitingContainersServiceServer must be embedded to have forward compatible implementations. -type UnimplementedKubeWaitingContainersServiceServer struct { -} +// UnimplementedKubeWaitingContainersServiceServer must be embedded to have +// forward compatible implementations. +// +// NOTE: this should be embedded by value instead of pointer to avoid a nil +// pointer dereference when methods are called. +type UnimplementedKubeWaitingContainersServiceServer struct{} func (UnimplementedKubeWaitingContainersServiceServer) ListKubernetesWaitingContainers(context.Context, *ListKubernetesWaitingContainersRequest) (*ListKubernetesWaitingContainersResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method ListKubernetesWaitingContainers not implemented") @@ -151,6 +154,7 @@ func (UnimplementedKubeWaitingContainersServiceServer) DeleteKubernetesWaitingCo } func (UnimplementedKubeWaitingContainersServiceServer) mustEmbedUnimplementedKubeWaitingContainersServiceServer() { } +func (UnimplementedKubeWaitingContainersServiceServer) testEmbeddedByValue() {} // UnsafeKubeWaitingContainersServiceServer may be embedded to opt out of forward compatibility for this service. // Use of this interface is not recommended, as added methods to KubeWaitingContainersServiceServer will @@ -160,6 +164,13 @@ type UnsafeKubeWaitingContainersServiceServer interface { } func RegisterKubeWaitingContainersServiceServer(s grpc.ServiceRegistrar, srv KubeWaitingContainersServiceServer) { + // If the following call pancis, it indicates UnimplementedKubeWaitingContainersServiceServer was + // embedded by pointer and is nil. This will cause panics if an + // unimplemented method is ever invoked, so we test this at initialization + // time to prevent it from happening at runtime later due to I/O. + if t, ok := srv.(interface{ testEmbeddedByValue() }); ok { + t.testEmbeddedByValue() + } s.RegisterService(&KubeWaitingContainersService_ServiceDesc, srv) } diff --git a/api/gen/proto/go/teleport/loginrule/v1/loginrule_service_grpc.pb.go b/api/gen/proto/go/teleport/loginrule/v1/loginrule_service_grpc.pb.go index fd138656fadf4..06dbd7c99cde0 100644 --- a/api/gen/proto/go/teleport/loginrule/v1/loginrule_service_grpc.pb.go +++ b/api/gen/proto/go/teleport/loginrule/v1/loginrule_service_grpc.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: -// - protoc-gen-go-grpc v1.4.0 +// - protoc-gen-go-grpc v1.5.0 // - protoc (unknown) // source: teleport/loginrule/v1/loginrule_service.proto @@ -30,8 +30,8 @@ import ( // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. -// Requires gRPC-Go v1.62.0 or later. -const _ = grpc.SupportPackageIsVersion8 +// Requires gRPC-Go v1.64.0 or later. +const _ = grpc.SupportPackageIsVersion9 const ( LoginRuleService_CreateLoginRule_FullMethodName = "/teleport.loginrule.v1.LoginRuleService/CreateLoginRule" @@ -136,7 +136,7 @@ func (c *loginRuleServiceClient) TestLoginRule(ctx context.Context, in *TestLogi // LoginRuleServiceServer is the server API for LoginRuleService service. // All implementations must embed UnimplementedLoginRuleServiceServer -// for forward compatibility +// for forward compatibility. // // LoginRuleService provides CRUD methods for the LoginRule resource. type LoginRuleServiceServer interface { @@ -159,9 +159,12 @@ type LoginRuleServiceServer interface { mustEmbedUnimplementedLoginRuleServiceServer() } -// UnimplementedLoginRuleServiceServer must be embedded to have forward compatible implementations. -type UnimplementedLoginRuleServiceServer struct { -} +// UnimplementedLoginRuleServiceServer must be embedded to have +// forward compatible implementations. +// +// NOTE: this should be embedded by value instead of pointer to avoid a nil +// pointer dereference when methods are called. +type UnimplementedLoginRuleServiceServer struct{} func (UnimplementedLoginRuleServiceServer) CreateLoginRule(context.Context, *CreateLoginRuleRequest) (*LoginRule, error) { return nil, status.Errorf(codes.Unimplemented, "method CreateLoginRule not implemented") @@ -182,6 +185,7 @@ func (UnimplementedLoginRuleServiceServer) TestLoginRule(context.Context, *TestL return nil, status.Errorf(codes.Unimplemented, "method TestLoginRule not implemented") } func (UnimplementedLoginRuleServiceServer) mustEmbedUnimplementedLoginRuleServiceServer() {} +func (UnimplementedLoginRuleServiceServer) testEmbeddedByValue() {} // UnsafeLoginRuleServiceServer may be embedded to opt out of forward compatibility for this service. // Use of this interface is not recommended, as added methods to LoginRuleServiceServer will @@ -191,6 +195,13 @@ type UnsafeLoginRuleServiceServer interface { } func RegisterLoginRuleServiceServer(s grpc.ServiceRegistrar, srv LoginRuleServiceServer) { + // If the following call pancis, it indicates UnimplementedLoginRuleServiceServer was + // embedded by pointer and is nil. This will cause panics if an + // unimplemented method is ever invoked, so we test this at initialization + // time to prevent it from happening at runtime later due to I/O. + if t, ok := srv.(interface{ testEmbeddedByValue() }); ok { + t.testEmbeddedByValue() + } s.RegisterService(&LoginRuleService_ServiceDesc, srv) } diff --git a/api/gen/proto/go/teleport/machineid/v1/bot_instance_service_grpc.pb.go b/api/gen/proto/go/teleport/machineid/v1/bot_instance_service_grpc.pb.go index 94d2617a7231e..520fa3209acae 100644 --- a/api/gen/proto/go/teleport/machineid/v1/bot_instance_service_grpc.pb.go +++ b/api/gen/proto/go/teleport/machineid/v1/bot_instance_service_grpc.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: -// - protoc-gen-go-grpc v1.4.0 +// - protoc-gen-go-grpc v1.5.0 // - protoc (unknown) // source: teleport/machineid/v1/bot_instance_service.proto @@ -30,8 +30,8 @@ import ( // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. -// Requires gRPC-Go v1.62.0 or later. -const _ = grpc.SupportPackageIsVersion8 +// Requires gRPC-Go v1.64.0 or later. +const _ = grpc.SupportPackageIsVersion9 const ( BotInstanceService_GetBotInstance_FullMethodName = "/teleport.machineid.v1.BotInstanceService/GetBotInstance" @@ -106,7 +106,7 @@ func (c *botInstanceServiceClient) SubmitHeartbeat(ctx context.Context, in *Subm // BotInstanceServiceServer is the server API for BotInstanceService service. // All implementations must embed UnimplementedBotInstanceServiceServer -// for forward compatibility +// for forward compatibility. // // BotInstanceService provides functions to record and manage bot instances. type BotInstanceServiceServer interface { @@ -121,9 +121,12 @@ type BotInstanceServiceServer interface { mustEmbedUnimplementedBotInstanceServiceServer() } -// UnimplementedBotInstanceServiceServer must be embedded to have forward compatible implementations. -type UnimplementedBotInstanceServiceServer struct { -} +// UnimplementedBotInstanceServiceServer must be embedded to have +// forward compatible implementations. +// +// NOTE: this should be embedded by value instead of pointer to avoid a nil +// pointer dereference when methods are called. +type UnimplementedBotInstanceServiceServer struct{} func (UnimplementedBotInstanceServiceServer) GetBotInstance(context.Context, *GetBotInstanceRequest) (*BotInstance, error) { return nil, status.Errorf(codes.Unimplemented, "method GetBotInstance not implemented") @@ -138,6 +141,7 @@ func (UnimplementedBotInstanceServiceServer) SubmitHeartbeat(context.Context, *S return nil, status.Errorf(codes.Unimplemented, "method SubmitHeartbeat not implemented") } func (UnimplementedBotInstanceServiceServer) mustEmbedUnimplementedBotInstanceServiceServer() {} +func (UnimplementedBotInstanceServiceServer) testEmbeddedByValue() {} // UnsafeBotInstanceServiceServer may be embedded to opt out of forward compatibility for this service. // Use of this interface is not recommended, as added methods to BotInstanceServiceServer will @@ -147,6 +151,13 @@ type UnsafeBotInstanceServiceServer interface { } func RegisterBotInstanceServiceServer(s grpc.ServiceRegistrar, srv BotInstanceServiceServer) { + // If the following call pancis, it indicates UnimplementedBotInstanceServiceServer was + // embedded by pointer and is nil. This will cause panics if an + // unimplemented method is ever invoked, so we test this at initialization + // time to prevent it from happening at runtime later due to I/O. + if t, ok := srv.(interface{ testEmbeddedByValue() }); ok { + t.testEmbeddedByValue() + } s.RegisterService(&BotInstanceService_ServiceDesc, srv) } diff --git a/api/gen/proto/go/teleport/machineid/v1/bot_service_grpc.pb.go b/api/gen/proto/go/teleport/machineid/v1/bot_service_grpc.pb.go index cad254d963677..2223fcc4bd3aa 100644 --- a/api/gen/proto/go/teleport/machineid/v1/bot_service_grpc.pb.go +++ b/api/gen/proto/go/teleport/machineid/v1/bot_service_grpc.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: -// - protoc-gen-go-grpc v1.4.0 +// - protoc-gen-go-grpc v1.5.0 // - protoc (unknown) // source: teleport/machineid/v1/bot_service.proto @@ -30,8 +30,8 @@ import ( // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. -// Requires gRPC-Go v1.62.0 or later. -const _ = grpc.SupportPackageIsVersion8 +// Requires gRPC-Go v1.64.0 or later. +const _ = grpc.SupportPackageIsVersion9 const ( BotService_GetBot_FullMethodName = "/teleport.machineid.v1.BotService/GetBot" @@ -143,7 +143,7 @@ func (c *botServiceClient) DeleteBot(ctx context.Context, in *DeleteBotRequest, // BotServiceServer is the server API for BotService service. // All implementations must embed UnimplementedBotServiceServer -// for forward compatibility +// for forward compatibility. // // BotService provides methods to manage Teleport Bots type BotServiceServer interface { @@ -173,9 +173,12 @@ type BotServiceServer interface { mustEmbedUnimplementedBotServiceServer() } -// UnimplementedBotServiceServer must be embedded to have forward compatible implementations. -type UnimplementedBotServiceServer struct { -} +// UnimplementedBotServiceServer must be embedded to have +// forward compatible implementations. +// +// NOTE: this should be embedded by value instead of pointer to avoid a nil +// pointer dereference when methods are called. +type UnimplementedBotServiceServer struct{} func (UnimplementedBotServiceServer) GetBot(context.Context, *GetBotRequest) (*Bot, error) { return nil, status.Errorf(codes.Unimplemented, "method GetBot not implemented") @@ -196,6 +199,7 @@ func (UnimplementedBotServiceServer) DeleteBot(context.Context, *DeleteBotReques return nil, status.Errorf(codes.Unimplemented, "method DeleteBot not implemented") } func (UnimplementedBotServiceServer) mustEmbedUnimplementedBotServiceServer() {} +func (UnimplementedBotServiceServer) testEmbeddedByValue() {} // UnsafeBotServiceServer may be embedded to opt out of forward compatibility for this service. // Use of this interface is not recommended, as added methods to BotServiceServer will @@ -205,6 +209,13 @@ type UnsafeBotServiceServer interface { } func RegisterBotServiceServer(s grpc.ServiceRegistrar, srv BotServiceServer) { + // If the following call pancis, it indicates UnimplementedBotServiceServer was + // embedded by pointer and is nil. This will cause panics if an + // unimplemented method is ever invoked, so we test this at initialization + // time to prevent it from happening at runtime later due to I/O. + if t, ok := srv.(interface{ testEmbeddedByValue() }); ok { + t.testEmbeddedByValue() + } s.RegisterService(&BotService_ServiceDesc, srv) } diff --git a/api/gen/proto/go/teleport/machineid/v1/workload_identity_service_grpc.pb.go b/api/gen/proto/go/teleport/machineid/v1/workload_identity_service_grpc.pb.go index 5d600458af5c8..aba1cac59fba5 100644 --- a/api/gen/proto/go/teleport/machineid/v1/workload_identity_service_grpc.pb.go +++ b/api/gen/proto/go/teleport/machineid/v1/workload_identity_service_grpc.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: -// - protoc-gen-go-grpc v1.4.0 +// - protoc-gen-go-grpc v1.5.0 // - protoc (unknown) // source: teleport/machineid/v1/workload_identity_service.proto @@ -29,8 +29,8 @@ import ( // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. -// Requires gRPC-Go v1.62.0 or later. -const _ = grpc.SupportPackageIsVersion8 +// Requires gRPC-Go v1.64.0 or later. +const _ = grpc.SupportPackageIsVersion9 const ( WorkloadIdentityService_SignX509SVIDs_FullMethodName = "/teleport.machineid.v1.WorkloadIdentityService/SignX509SVIDs" @@ -68,7 +68,7 @@ func (c *workloadIdentityServiceClient) SignX509SVIDs(ctx context.Context, in *S // WorkloadIdentityServiceServer is the server API for WorkloadIdentityService service. // All implementations must embed UnimplementedWorkloadIdentityServiceServer -// for forward compatibility +// for forward compatibility. // // WorkloadIdentityService provides the signing of workload identity documents. // It currently only supports signing SPIFFE x509 SVIDs. @@ -79,15 +79,19 @@ type WorkloadIdentityServiceServer interface { mustEmbedUnimplementedWorkloadIdentityServiceServer() } -// UnimplementedWorkloadIdentityServiceServer must be embedded to have forward compatible implementations. -type UnimplementedWorkloadIdentityServiceServer struct { -} +// UnimplementedWorkloadIdentityServiceServer must be embedded to have +// forward compatible implementations. +// +// NOTE: this should be embedded by value instead of pointer to avoid a nil +// pointer dereference when methods are called. +type UnimplementedWorkloadIdentityServiceServer struct{} func (UnimplementedWorkloadIdentityServiceServer) SignX509SVIDs(context.Context, *SignX509SVIDsRequest) (*SignX509SVIDsResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method SignX509SVIDs not implemented") } func (UnimplementedWorkloadIdentityServiceServer) mustEmbedUnimplementedWorkloadIdentityServiceServer() { } +func (UnimplementedWorkloadIdentityServiceServer) testEmbeddedByValue() {} // UnsafeWorkloadIdentityServiceServer may be embedded to opt out of forward compatibility for this service. // Use of this interface is not recommended, as added methods to WorkloadIdentityServiceServer will @@ -97,6 +101,13 @@ type UnsafeWorkloadIdentityServiceServer interface { } func RegisterWorkloadIdentityServiceServer(s grpc.ServiceRegistrar, srv WorkloadIdentityServiceServer) { + // If the following call pancis, it indicates UnimplementedWorkloadIdentityServiceServer was + // embedded by pointer and is nil. This will cause panics if an + // unimplemented method is ever invoked, so we test this at initialization + // time to prevent it from happening at runtime later due to I/O. + if t, ok := srv.(interface{ testEmbeddedByValue() }); ok { + t.testEmbeddedByValue() + } s.RegisterService(&WorkloadIdentityService_ServiceDesc, srv) } diff --git a/api/gen/proto/go/teleport/notifications/v1/notifications_service_grpc.pb.go b/api/gen/proto/go/teleport/notifications/v1/notifications_service_grpc.pb.go index 1774ed66652fe..0a24d73cc69aa 100644 --- a/api/gen/proto/go/teleport/notifications/v1/notifications_service_grpc.pb.go +++ b/api/gen/proto/go/teleport/notifications/v1/notifications_service_grpc.pb.go @@ -17,7 +17,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: -// - protoc-gen-go-grpc v1.4.0 +// - protoc-gen-go-grpc v1.5.0 // - protoc (unknown) // source: teleport/notifications/v1/notifications_service.proto @@ -33,8 +33,8 @@ import ( // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. -// Requires gRPC-Go v1.62.0 or later. -const _ = grpc.SupportPackageIsVersion8 +// Requires gRPC-Go v1.64.0 or later. +const _ = grpc.SupportPackageIsVersion9 const ( NotificationService_CreateUserNotification_FullMethodName = "/teleport.notifications.v1.NotificationService/CreateUserNotification" @@ -148,7 +148,7 @@ func (c *notificationServiceClient) UpsertUserLastSeenNotification(ctx context.C // NotificationServiceServer is the server API for NotificationService service. // All implementations must embed UnimplementedNotificationServiceServer -// for forward compatibility +// for forward compatibility. // // NotificationService provides CRUD operations for notifications resources. type NotificationServiceServer interface { @@ -169,9 +169,12 @@ type NotificationServiceServer interface { mustEmbedUnimplementedNotificationServiceServer() } -// UnimplementedNotificationServiceServer must be embedded to have forward compatible implementations. -type UnimplementedNotificationServiceServer struct { -} +// UnimplementedNotificationServiceServer must be embedded to have +// forward compatible implementations. +// +// NOTE: this should be embedded by value instead of pointer to avoid a nil +// pointer dereference when methods are called. +type UnimplementedNotificationServiceServer struct{} func (UnimplementedNotificationServiceServer) CreateUserNotification(context.Context, *CreateUserNotificationRequest) (*Notification, error) { return nil, status.Errorf(codes.Unimplemented, "method CreateUserNotification not implemented") @@ -195,6 +198,7 @@ func (UnimplementedNotificationServiceServer) UpsertUserLastSeenNotification(con return nil, status.Errorf(codes.Unimplemented, "method UpsertUserLastSeenNotification not implemented") } func (UnimplementedNotificationServiceServer) mustEmbedUnimplementedNotificationServiceServer() {} +func (UnimplementedNotificationServiceServer) testEmbeddedByValue() {} // UnsafeNotificationServiceServer may be embedded to opt out of forward compatibility for this service. // Use of this interface is not recommended, as added methods to NotificationServiceServer will @@ -204,6 +208,13 @@ type UnsafeNotificationServiceServer interface { } func RegisterNotificationServiceServer(s grpc.ServiceRegistrar, srv NotificationServiceServer) { + // If the following call pancis, it indicates UnimplementedNotificationServiceServer was + // embedded by pointer and is nil. This will cause panics if an + // unimplemented method is ever invoked, so we test this at initialization + // time to prevent it from happening at runtime later due to I/O. + if t, ok := srv.(interface{ testEmbeddedByValue() }); ok { + t.testEmbeddedByValue() + } s.RegisterService(&NotificationService_ServiceDesc, srv) } diff --git a/api/gen/proto/go/teleport/okta/v1/okta_service_grpc.pb.go b/api/gen/proto/go/teleport/okta/v1/okta_service_grpc.pb.go index 4a3ea01a1f53e..05ca5841e8274 100644 --- a/api/gen/proto/go/teleport/okta/v1/okta_service_grpc.pb.go +++ b/api/gen/proto/go/teleport/okta/v1/okta_service_grpc.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: -// - protoc-gen-go-grpc v1.4.0 +// - protoc-gen-go-grpc v1.5.0 // - protoc (unknown) // source: teleport/okta/v1/okta_service.proto @@ -31,8 +31,8 @@ import ( // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. -// Requires gRPC-Go v1.62.0 or later. -const _ = grpc.SupportPackageIsVersion8 +// Requires gRPC-Go v1.64.0 or later. +const _ = grpc.SupportPackageIsVersion9 const ( OktaService_ListOktaImportRules_FullMethodName = "/teleport.okta.v1.OktaService/ListOktaImportRules" @@ -224,7 +224,7 @@ func (c *oktaServiceClient) DeleteAllOktaAssignments(ctx context.Context, in *De // OktaServiceServer is the server API for OktaService service. // All implementations must embed UnimplementedOktaServiceServer -// for forward compatibility +// for forward compatibility. // // OktaService provides CRUD methods for Okta resources. type OktaServiceServer interface { @@ -257,9 +257,12 @@ type OktaServiceServer interface { mustEmbedUnimplementedOktaServiceServer() } -// UnimplementedOktaServiceServer must be embedded to have forward compatible implementations. -type UnimplementedOktaServiceServer struct { -} +// UnimplementedOktaServiceServer must be embedded to have +// forward compatible implementations. +// +// NOTE: this should be embedded by value instead of pointer to avoid a nil +// pointer dereference when methods are called. +type UnimplementedOktaServiceServer struct{} func (UnimplementedOktaServiceServer) ListOktaImportRules(context.Context, *ListOktaImportRulesRequest) (*ListOktaImportRulesResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method ListOktaImportRules not implemented") @@ -301,6 +304,7 @@ func (UnimplementedOktaServiceServer) DeleteAllOktaAssignments(context.Context, return nil, status.Errorf(codes.Unimplemented, "method DeleteAllOktaAssignments not implemented") } func (UnimplementedOktaServiceServer) mustEmbedUnimplementedOktaServiceServer() {} +func (UnimplementedOktaServiceServer) testEmbeddedByValue() {} // UnsafeOktaServiceServer may be embedded to opt out of forward compatibility for this service. // Use of this interface is not recommended, as added methods to OktaServiceServer will @@ -310,6 +314,13 @@ type UnsafeOktaServiceServer interface { } func RegisterOktaServiceServer(s grpc.ServiceRegistrar, srv OktaServiceServer) { + // If the following call pancis, it indicates UnimplementedOktaServiceServer was + // embedded by pointer and is nil. This will cause panics if an + // unimplemented method is ever invoked, so we test this at initialization + // time to prevent it from happening at runtime later due to I/O. + if t, ok := srv.(interface{ testEmbeddedByValue() }); ok { + t.testEmbeddedByValue() + } s.RegisterService(&OktaService_ServiceDesc, srv) } diff --git a/api/gen/proto/go/teleport/plugins/v1/plugin_service_grpc.pb.go b/api/gen/proto/go/teleport/plugins/v1/plugin_service_grpc.pb.go index 1ea0bb21d8d4c..aab519692c473 100644 --- a/api/gen/proto/go/teleport/plugins/v1/plugin_service_grpc.pb.go +++ b/api/gen/proto/go/teleport/plugins/v1/plugin_service_grpc.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: -// - protoc-gen-go-grpc v1.4.0 +// - protoc-gen-go-grpc v1.5.0 // - protoc (unknown) // source: teleport/plugins/v1/plugin_service.proto @@ -31,8 +31,8 @@ import ( // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. -// Requires gRPC-Go v1.62.0 or later. -const _ = grpc.SupportPackageIsVersion8 +// Requires gRPC-Go v1.64.0 or later. +const _ = grpc.SupportPackageIsVersion9 const ( PluginService_CreatePlugin_FullMethodName = "/teleport.plugins.v1.PluginService/CreatePlugin" @@ -202,7 +202,7 @@ func (c *pluginServiceClient) Cleanup(ctx context.Context, in *CleanupRequest, o // PluginServiceServer is the server API for PluginService service. // All implementations must embed UnimplementedPluginServiceServer -// for forward compatibility +// for forward compatibility. // // PluginService provides CRUD operations for Plugin resources. type PluginServiceServer interface { @@ -235,9 +235,12 @@ type PluginServiceServer interface { mustEmbedUnimplementedPluginServiceServer() } -// UnimplementedPluginServiceServer must be embedded to have forward compatible implementations. -type UnimplementedPluginServiceServer struct { -} +// UnimplementedPluginServiceServer must be embedded to have +// forward compatible implementations. +// +// NOTE: this should be embedded by value instead of pointer to avoid a nil +// pointer dereference when methods are called. +type UnimplementedPluginServiceServer struct{} func (UnimplementedPluginServiceServer) CreatePlugin(context.Context, *CreatePluginRequest) (*emptypb.Empty, error) { return nil, status.Errorf(codes.Unimplemented, "method CreatePlugin not implemented") @@ -273,6 +276,7 @@ func (UnimplementedPluginServiceServer) Cleanup(context.Context, *CleanupRequest return nil, status.Errorf(codes.Unimplemented, "method Cleanup not implemented") } func (UnimplementedPluginServiceServer) mustEmbedUnimplementedPluginServiceServer() {} +func (UnimplementedPluginServiceServer) testEmbeddedByValue() {} // UnsafePluginServiceServer may be embedded to opt out of forward compatibility for this service. // Use of this interface is not recommended, as added methods to PluginServiceServer will @@ -282,6 +286,13 @@ type UnsafePluginServiceServer interface { } func RegisterPluginServiceServer(s grpc.ServiceRegistrar, srv PluginServiceServer) { + // If the following call pancis, it indicates UnimplementedPluginServiceServer was + // embedded by pointer and is nil. This will cause panics if an + // unimplemented method is ever invoked, so we test this at initialization + // time to prevent it from happening at runtime later due to I/O. + if t, ok := srv.(interface{ testEmbeddedByValue() }); ok { + t.testEmbeddedByValue() + } s.RegisterService(&PluginService_ServiceDesc, srv) } diff --git a/api/gen/proto/go/teleport/presence/v1/service_grpc.pb.go b/api/gen/proto/go/teleport/presence/v1/service_grpc.pb.go index 973054bb808c7..85f0ff52f8a96 100644 --- a/api/gen/proto/go/teleport/presence/v1/service_grpc.pb.go +++ b/api/gen/proto/go/teleport/presence/v1/service_grpc.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: -// - protoc-gen-go-grpc v1.4.0 +// - protoc-gen-go-grpc v1.5.0 // - protoc (unknown) // source: teleport/presence/v1/service.proto @@ -31,8 +31,8 @@ import ( // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. -// Requires gRPC-Go v1.62.0 or later. -const _ = grpc.SupportPackageIsVersion8 +// Requires gRPC-Go v1.64.0 or later. +const _ = grpc.SupportPackageIsVersion9 const ( PresenceService_GetRemoteCluster_FullMethodName = "/teleport.presence.v1.PresenceService/GetRemoteCluster" @@ -107,7 +107,7 @@ func (c *presenceServiceClient) DeleteRemoteCluster(ctx context.Context, in *Del // PresenceServiceServer is the server API for PresenceService service. // All implementations must embed UnimplementedPresenceServiceServer -// for forward compatibility +// for forward compatibility. // // PresenceService provides methods to manage presence of RemoteClusters type PresenceServiceServer interface { @@ -122,9 +122,12 @@ type PresenceServiceServer interface { mustEmbedUnimplementedPresenceServiceServer() } -// UnimplementedPresenceServiceServer must be embedded to have forward compatible implementations. -type UnimplementedPresenceServiceServer struct { -} +// UnimplementedPresenceServiceServer must be embedded to have +// forward compatible implementations. +// +// NOTE: this should be embedded by value instead of pointer to avoid a nil +// pointer dereference when methods are called. +type UnimplementedPresenceServiceServer struct{} func (UnimplementedPresenceServiceServer) GetRemoteCluster(context.Context, *GetRemoteClusterRequest) (*types.RemoteClusterV3, error) { return nil, status.Errorf(codes.Unimplemented, "method GetRemoteCluster not implemented") @@ -139,6 +142,7 @@ func (UnimplementedPresenceServiceServer) DeleteRemoteCluster(context.Context, * return nil, status.Errorf(codes.Unimplemented, "method DeleteRemoteCluster not implemented") } func (UnimplementedPresenceServiceServer) mustEmbedUnimplementedPresenceServiceServer() {} +func (UnimplementedPresenceServiceServer) testEmbeddedByValue() {} // UnsafePresenceServiceServer may be embedded to opt out of forward compatibility for this service. // Use of this interface is not recommended, as added methods to PresenceServiceServer will @@ -148,6 +152,13 @@ type UnsafePresenceServiceServer interface { } func RegisterPresenceServiceServer(s grpc.ServiceRegistrar, srv PresenceServiceServer) { + // If the following call pancis, it indicates UnimplementedPresenceServiceServer was + // embedded by pointer and is nil. This will cause panics if an + // unimplemented method is ever invoked, so we test this at initialization + // time to prevent it from happening at runtime later due to I/O. + if t, ok := srv.(interface{ testEmbeddedByValue() }); ok { + t.testEmbeddedByValue() + } s.RegisterService(&PresenceService_ServiceDesc, srv) } diff --git a/api/gen/proto/go/teleport/resourceusage/v1/resourceusage_service_grpc.pb.go b/api/gen/proto/go/teleport/resourceusage/v1/resourceusage_service_grpc.pb.go index c82b4821e7e16..e610e182fbb77 100644 --- a/api/gen/proto/go/teleport/resourceusage/v1/resourceusage_service_grpc.pb.go +++ b/api/gen/proto/go/teleport/resourceusage/v1/resourceusage_service_grpc.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: -// - protoc-gen-go-grpc v1.4.0 +// - protoc-gen-go-grpc v1.5.0 // - protoc (unknown) // source: teleport/resourceusage/v1/resourceusage_service.proto @@ -29,8 +29,8 @@ import ( // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. -// Requires gRPC-Go v1.62.0 or later. -const _ = grpc.SupportPackageIsVersion8 +// Requires gRPC-Go v1.64.0 or later. +const _ = grpc.SupportPackageIsVersion9 const ( ResourceUsageService_GetUsage_FullMethodName = "/teleport.resourceusage.v1.ResourceUsageService/GetUsage" @@ -66,7 +66,7 @@ func (c *resourceUsageServiceClient) GetUsage(ctx context.Context, in *GetUsageR // ResourceUsageServiceServer is the server API for ResourceUsageService service. // All implementations must embed UnimplementedResourceUsageServiceServer -// for forward compatibility +// for forward compatibility. // // ResourceUsageService is a service to fetch information about the usage of limited resources on usage-billed plans. type ResourceUsageServiceServer interface { @@ -75,14 +75,18 @@ type ResourceUsageServiceServer interface { mustEmbedUnimplementedResourceUsageServiceServer() } -// UnimplementedResourceUsageServiceServer must be embedded to have forward compatible implementations. -type UnimplementedResourceUsageServiceServer struct { -} +// UnimplementedResourceUsageServiceServer must be embedded to have +// forward compatible implementations. +// +// NOTE: this should be embedded by value instead of pointer to avoid a nil +// pointer dereference when methods are called. +type UnimplementedResourceUsageServiceServer struct{} func (UnimplementedResourceUsageServiceServer) GetUsage(context.Context, *GetUsageRequest) (*GetUsageResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method GetUsage not implemented") } func (UnimplementedResourceUsageServiceServer) mustEmbedUnimplementedResourceUsageServiceServer() {} +func (UnimplementedResourceUsageServiceServer) testEmbeddedByValue() {} // UnsafeResourceUsageServiceServer may be embedded to opt out of forward compatibility for this service. // Use of this interface is not recommended, as added methods to ResourceUsageServiceServer will @@ -92,6 +96,13 @@ type UnsafeResourceUsageServiceServer interface { } func RegisterResourceUsageServiceServer(s grpc.ServiceRegistrar, srv ResourceUsageServiceServer) { + // If the following call pancis, it indicates UnimplementedResourceUsageServiceServer was + // embedded by pointer and is nil. This will cause panics if an + // unimplemented method is ever invoked, so we test this at initialization + // time to prevent it from happening at runtime later due to I/O. + if t, ok := srv.(interface{ testEmbeddedByValue() }); ok { + t.testEmbeddedByValue() + } s.RegisterService(&ResourceUsageService_ServiceDesc, srv) } diff --git a/api/gen/proto/go/teleport/samlidp/v1/samlidp_grpc.pb.go b/api/gen/proto/go/teleport/samlidp/v1/samlidp_grpc.pb.go index 41f6c31477cac..366cfe60b1c36 100644 --- a/api/gen/proto/go/teleport/samlidp/v1/samlidp_grpc.pb.go +++ b/api/gen/proto/go/teleport/samlidp/v1/samlidp_grpc.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: -// - protoc-gen-go-grpc v1.4.0 +// - protoc-gen-go-grpc v1.5.0 // - protoc (unknown) // source: teleport/samlidp/v1/samlidp.proto @@ -29,8 +29,8 @@ import ( // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. -// Requires gRPC-Go v1.62.0 or later. -const _ = grpc.SupportPackageIsVersion8 +// Requires gRPC-Go v1.64.0 or later. +const _ = grpc.SupportPackageIsVersion9 const ( SAMLIdPService_ProcessSAMLIdPRequest_FullMethodName = "/teleport.samlidp.v1.SAMLIdPService/ProcessSAMLIdPRequest" @@ -79,7 +79,7 @@ func (c *sAMLIdPServiceClient) TestSAMLIdPAttributeMapping(ctx context.Context, // SAMLIdPServiceServer is the server API for SAMLIdPService service. // All implementations must embed UnimplementedSAMLIdPServiceServer -// for forward compatibility +// for forward compatibility. // // SAMLIdPService provides utility methods for the SAML identity provider. type SAMLIdPServiceServer interface { @@ -90,9 +90,12 @@ type SAMLIdPServiceServer interface { mustEmbedUnimplementedSAMLIdPServiceServer() } -// UnimplementedSAMLIdPServiceServer must be embedded to have forward compatible implementations. -type UnimplementedSAMLIdPServiceServer struct { -} +// UnimplementedSAMLIdPServiceServer must be embedded to have +// forward compatible implementations. +// +// NOTE: this should be embedded by value instead of pointer to avoid a nil +// pointer dereference when methods are called. +type UnimplementedSAMLIdPServiceServer struct{} func (UnimplementedSAMLIdPServiceServer) ProcessSAMLIdPRequest(context.Context, *ProcessSAMLIdPRequestRequest) (*ProcessSAMLIdPRequestResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method ProcessSAMLIdPRequest not implemented") @@ -101,6 +104,7 @@ func (UnimplementedSAMLIdPServiceServer) TestSAMLIdPAttributeMapping(context.Con return nil, status.Errorf(codes.Unimplemented, "method TestSAMLIdPAttributeMapping not implemented") } func (UnimplementedSAMLIdPServiceServer) mustEmbedUnimplementedSAMLIdPServiceServer() {} +func (UnimplementedSAMLIdPServiceServer) testEmbeddedByValue() {} // UnsafeSAMLIdPServiceServer may be embedded to opt out of forward compatibility for this service. // Use of this interface is not recommended, as added methods to SAMLIdPServiceServer will @@ -110,6 +114,13 @@ type UnsafeSAMLIdPServiceServer interface { } func RegisterSAMLIdPServiceServer(s grpc.ServiceRegistrar, srv SAMLIdPServiceServer) { + // If the following call pancis, it indicates UnimplementedSAMLIdPServiceServer was + // embedded by pointer and is nil. This will cause panics if an + // unimplemented method is ever invoked, so we test this at initialization + // time to prevent it from happening at runtime later due to I/O. + if t, ok := srv.(interface{ testEmbeddedByValue() }); ok { + t.testEmbeddedByValue() + } s.RegisterService(&SAMLIdPService_ServiceDesc, srv) } diff --git a/api/gen/proto/go/teleport/scim/v1/scim_service_grpc.pb.go b/api/gen/proto/go/teleport/scim/v1/scim_service_grpc.pb.go index 3f0a50f31614f..a11499a4f02d6 100644 --- a/api/gen/proto/go/teleport/scim/v1/scim_service_grpc.pb.go +++ b/api/gen/proto/go/teleport/scim/v1/scim_service_grpc.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: -// - protoc-gen-go-grpc v1.4.0 +// - protoc-gen-go-grpc v1.5.0 // - protoc (unknown) // source: teleport/scim/v1/scim_service.proto @@ -30,8 +30,8 @@ import ( // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. -// Requires gRPC-Go v1.62.0 or later. -const _ = grpc.SupportPackageIsVersion8 +// Requires gRPC-Go v1.64.0 or later. +const _ = grpc.SupportPackageIsVersion9 const ( SCIMService_ListSCIMResources_FullMethodName = "/teleport.scim.v1.SCIMService/ListSCIMResources" @@ -121,7 +121,7 @@ func (c *sCIMServiceClient) DeleteSCIMResource(ctx context.Context, in *DeleteSC // SCIMServiceServer is the server API for SCIMService service. // All implementations must embed UnimplementedSCIMServiceServer -// for forward compatibility +// for forward compatibility. // // SCIMService implements a SCIM gateway for external IDPs for user provisioning type SCIMServiceServer interface { @@ -140,9 +140,12 @@ type SCIMServiceServer interface { mustEmbedUnimplementedSCIMServiceServer() } -// UnimplementedSCIMServiceServer must be embedded to have forward compatible implementations. -type UnimplementedSCIMServiceServer struct { -} +// UnimplementedSCIMServiceServer must be embedded to have +// forward compatible implementations. +// +// NOTE: this should be embedded by value instead of pointer to avoid a nil +// pointer dereference when methods are called. +type UnimplementedSCIMServiceServer struct{} func (UnimplementedSCIMServiceServer) ListSCIMResources(context.Context, *ListSCIMResourcesRequest) (*ResourceList, error) { return nil, status.Errorf(codes.Unimplemented, "method ListSCIMResources not implemented") @@ -160,6 +163,7 @@ func (UnimplementedSCIMServiceServer) DeleteSCIMResource(context.Context, *Delet return nil, status.Errorf(codes.Unimplemented, "method DeleteSCIMResource not implemented") } func (UnimplementedSCIMServiceServer) mustEmbedUnimplementedSCIMServiceServer() {} +func (UnimplementedSCIMServiceServer) testEmbeddedByValue() {} // UnsafeSCIMServiceServer may be embedded to opt out of forward compatibility for this service. // Use of this interface is not recommended, as added methods to SCIMServiceServer will @@ -169,6 +173,13 @@ type UnsafeSCIMServiceServer interface { } func RegisterSCIMServiceServer(s grpc.ServiceRegistrar, srv SCIMServiceServer) { + // If the following call pancis, it indicates UnimplementedSCIMServiceServer was + // embedded by pointer and is nil. This will cause panics if an + // unimplemented method is ever invoked, so we test this at initialization + // time to prevent it from happening at runtime later due to I/O. + if t, ok := srv.(interface{ testEmbeddedByValue() }); ok { + t.testEmbeddedByValue() + } s.RegisterService(&SCIMService_ServiceDesc, srv) } diff --git a/api/gen/proto/go/teleport/secreports/v1/secreports_service_grpc.pb.go b/api/gen/proto/go/teleport/secreports/v1/secreports_service_grpc.pb.go index bc25d091ee6f6..237c05958ca32 100644 --- a/api/gen/proto/go/teleport/secreports/v1/secreports_service_grpc.pb.go +++ b/api/gen/proto/go/teleport/secreports/v1/secreports_service_grpc.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: -// - protoc-gen-go-grpc v1.4.0 +// - protoc-gen-go-grpc v1.5.0 // - protoc (unknown) // source: teleport/secreports/v1/secreports_service.proto @@ -30,8 +30,8 @@ import ( // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. -// Requires gRPC-Go v1.62.0 or later. -const _ = grpc.SupportPackageIsVersion8 +// Requires gRPC-Go v1.64.0 or later. +const _ = grpc.SupportPackageIsVersion9 const ( SecReportsService_UpsertAuditQuery_FullMethodName = "/teleport.secreports.v1.SecReportsService/UpsertAuditQuery" @@ -236,7 +236,7 @@ func (c *secReportsServiceClient) GetSchema(ctx context.Context, in *GetSchemaRe // SecReportsServiceServer is the server API for SecReportsService service. // All implementations must embed UnimplementedSecReportsServiceServer -// for forward compatibility +// for forward compatibility. // // SecReportsService is a service that manages security reports. type SecReportsServiceServer interface { @@ -271,9 +271,12 @@ type SecReportsServiceServer interface { mustEmbedUnimplementedSecReportsServiceServer() } -// UnimplementedSecReportsServiceServer must be embedded to have forward compatible implementations. -type UnimplementedSecReportsServiceServer struct { -} +// UnimplementedSecReportsServiceServer must be embedded to have +// forward compatible implementations. +// +// NOTE: this should be embedded by value instead of pointer to avoid a nil +// pointer dereference when methods are called. +type UnimplementedSecReportsServiceServer struct{} func (UnimplementedSecReportsServiceServer) UpsertAuditQuery(context.Context, *UpsertAuditQueryRequest) (*emptypb.Empty, error) { return nil, status.Errorf(codes.Unimplemented, "method UpsertAuditQuery not implemented") @@ -318,6 +321,7 @@ func (UnimplementedSecReportsServiceServer) GetSchema(context.Context, *GetSchem return nil, status.Errorf(codes.Unimplemented, "method GetSchema not implemented") } func (UnimplementedSecReportsServiceServer) mustEmbedUnimplementedSecReportsServiceServer() {} +func (UnimplementedSecReportsServiceServer) testEmbeddedByValue() {} // UnsafeSecReportsServiceServer may be embedded to opt out of forward compatibility for this service. // Use of this interface is not recommended, as added methods to SecReportsServiceServer will @@ -327,6 +331,13 @@ type UnsafeSecReportsServiceServer interface { } func RegisterSecReportsServiceServer(s grpc.ServiceRegistrar, srv SecReportsServiceServer) { + // If the following call pancis, it indicates UnimplementedSecReportsServiceServer was + // embedded by pointer and is nil. This will cause panics if an + // unimplemented method is ever invoked, so we test this at initialization + // time to prevent it from happening at runtime later due to I/O. + if t, ok := srv.(interface{ testEmbeddedByValue() }); ok { + t.testEmbeddedByValue() + } s.RegisterService(&SecReportsService_ServiceDesc, srv) } diff --git a/api/gen/proto/go/teleport/transport/v1/transport_service_grpc.pb.go b/api/gen/proto/go/teleport/transport/v1/transport_service_grpc.pb.go index 5f4dae9862ac8..ac73fd815f5ff 100644 --- a/api/gen/proto/go/teleport/transport/v1/transport_service_grpc.pb.go +++ b/api/gen/proto/go/teleport/transport/v1/transport_service_grpc.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: -// - protoc-gen-go-grpc v1.4.0 +// - protoc-gen-go-grpc v1.5.0 // - protoc (unknown) // source: teleport/transport/v1/transport_service.proto @@ -29,8 +29,8 @@ import ( // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. -// Requires gRPC-Go v1.62.0 or later. -const _ = grpc.SupportPackageIsVersion8 +// Requires gRPC-Go v1.64.0 or later. +const _ = grpc.SupportPackageIsVersion9 const ( TransportService_GetClusterDetails_FullMethodName = "/teleport.transport.v1.TransportService/GetClusterDetails" @@ -57,13 +57,13 @@ type TransportServiceClient interface { // The client must first send a DialTarget before the connection is established. Agent frames // will be populated if SSH Agent forwarding is enabled for the connection. SSH frames contain // raw SSH payload to be processed by an x/crypto/ssh.Client or x/crypto/ssh.Server. - ProxySSH(ctx context.Context, opts ...grpc.CallOption) (TransportService_ProxySSHClient, error) + ProxySSH(ctx context.Context, opts ...grpc.CallOption) (grpc.BidiStreamingClient[ProxySSHRequest, ProxySSHResponse], error) // ProxyCluster establishes a connection to the target cluster. // // The client must first send a ProxyClusterRequest with the desired cluster name before the // connection is established. After which the connection can be used to construct a new // auth.Client to the tunneled cluster. - ProxyCluster(ctx context.Context, opts ...grpc.CallOption) (TransportService_ProxyClusterClient, error) + ProxyCluster(ctx context.Context, opts ...grpc.CallOption) (grpc.BidiStreamingClient[ProxyClusterRequest, ProxyClusterResponse], error) } type transportServiceClient struct { @@ -84,73 +84,35 @@ func (c *transportServiceClient) GetClusterDetails(ctx context.Context, in *GetC return out, nil } -func (c *transportServiceClient) ProxySSH(ctx context.Context, opts ...grpc.CallOption) (TransportService_ProxySSHClient, error) { +func (c *transportServiceClient) ProxySSH(ctx context.Context, opts ...grpc.CallOption) (grpc.BidiStreamingClient[ProxySSHRequest, ProxySSHResponse], error) { cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) stream, err := c.cc.NewStream(ctx, &TransportService_ServiceDesc.Streams[0], TransportService_ProxySSH_FullMethodName, cOpts...) if err != nil { return nil, err } - x := &transportServiceProxySSHClient{ClientStream: stream} + x := &grpc.GenericClientStream[ProxySSHRequest, ProxySSHResponse]{ClientStream: stream} return x, nil } -type TransportService_ProxySSHClient interface { - Send(*ProxySSHRequest) error - Recv() (*ProxySSHResponse, error) - grpc.ClientStream -} - -type transportServiceProxySSHClient struct { - grpc.ClientStream -} - -func (x *transportServiceProxySSHClient) Send(m *ProxySSHRequest) error { - return x.ClientStream.SendMsg(m) -} +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type TransportService_ProxySSHClient = grpc.BidiStreamingClient[ProxySSHRequest, ProxySSHResponse] -func (x *transportServiceProxySSHClient) Recv() (*ProxySSHResponse, error) { - m := new(ProxySSHResponse) - if err := x.ClientStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} - -func (c *transportServiceClient) ProxyCluster(ctx context.Context, opts ...grpc.CallOption) (TransportService_ProxyClusterClient, error) { +func (c *transportServiceClient) ProxyCluster(ctx context.Context, opts ...grpc.CallOption) (grpc.BidiStreamingClient[ProxyClusterRequest, ProxyClusterResponse], error) { cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) stream, err := c.cc.NewStream(ctx, &TransportService_ServiceDesc.Streams[1], TransportService_ProxyCluster_FullMethodName, cOpts...) if err != nil { return nil, err } - x := &transportServiceProxyClusterClient{ClientStream: stream} + x := &grpc.GenericClientStream[ProxyClusterRequest, ProxyClusterResponse]{ClientStream: stream} return x, nil } -type TransportService_ProxyClusterClient interface { - Send(*ProxyClusterRequest) error - Recv() (*ProxyClusterResponse, error) - grpc.ClientStream -} - -type transportServiceProxyClusterClient struct { - grpc.ClientStream -} - -func (x *transportServiceProxyClusterClient) Send(m *ProxyClusterRequest) error { - return x.ClientStream.SendMsg(m) -} - -func (x *transportServiceProxyClusterClient) Recv() (*ProxyClusterResponse, error) { - m := new(ProxyClusterResponse) - if err := x.ClientStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type TransportService_ProxyClusterClient = grpc.BidiStreamingClient[ProxyClusterRequest, ProxyClusterResponse] // TransportServiceServer is the server API for TransportService service. // All implementations must embed UnimplementedTransportServiceServer -// for forward compatibility +// for forward compatibility. // // TransportService provides methods to proxy connections to various Teleport instances. // @@ -167,30 +129,34 @@ type TransportServiceServer interface { // The client must first send a DialTarget before the connection is established. Agent frames // will be populated if SSH Agent forwarding is enabled for the connection. SSH frames contain // raw SSH payload to be processed by an x/crypto/ssh.Client or x/crypto/ssh.Server. - ProxySSH(TransportService_ProxySSHServer) error + ProxySSH(grpc.BidiStreamingServer[ProxySSHRequest, ProxySSHResponse]) error // ProxyCluster establishes a connection to the target cluster. // // The client must first send a ProxyClusterRequest with the desired cluster name before the // connection is established. After which the connection can be used to construct a new // auth.Client to the tunneled cluster. - ProxyCluster(TransportService_ProxyClusterServer) error + ProxyCluster(grpc.BidiStreamingServer[ProxyClusterRequest, ProxyClusterResponse]) error mustEmbedUnimplementedTransportServiceServer() } -// UnimplementedTransportServiceServer must be embedded to have forward compatible implementations. -type UnimplementedTransportServiceServer struct { -} +// UnimplementedTransportServiceServer must be embedded to have +// forward compatible implementations. +// +// NOTE: this should be embedded by value instead of pointer to avoid a nil +// pointer dereference when methods are called. +type UnimplementedTransportServiceServer struct{} func (UnimplementedTransportServiceServer) GetClusterDetails(context.Context, *GetClusterDetailsRequest) (*GetClusterDetailsResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method GetClusterDetails not implemented") } -func (UnimplementedTransportServiceServer) ProxySSH(TransportService_ProxySSHServer) error { +func (UnimplementedTransportServiceServer) ProxySSH(grpc.BidiStreamingServer[ProxySSHRequest, ProxySSHResponse]) error { return status.Errorf(codes.Unimplemented, "method ProxySSH not implemented") } -func (UnimplementedTransportServiceServer) ProxyCluster(TransportService_ProxyClusterServer) error { +func (UnimplementedTransportServiceServer) ProxyCluster(grpc.BidiStreamingServer[ProxyClusterRequest, ProxyClusterResponse]) error { return status.Errorf(codes.Unimplemented, "method ProxyCluster not implemented") } func (UnimplementedTransportServiceServer) mustEmbedUnimplementedTransportServiceServer() {} +func (UnimplementedTransportServiceServer) testEmbeddedByValue() {} // UnsafeTransportServiceServer may be embedded to opt out of forward compatibility for this service. // Use of this interface is not recommended, as added methods to TransportServiceServer will @@ -200,6 +166,13 @@ type UnsafeTransportServiceServer interface { } func RegisterTransportServiceServer(s grpc.ServiceRegistrar, srv TransportServiceServer) { + // If the following call pancis, it indicates UnimplementedTransportServiceServer was + // embedded by pointer and is nil. This will cause panics if an + // unimplemented method is ever invoked, so we test this at initialization + // time to prevent it from happening at runtime later due to I/O. + if t, ok := srv.(interface{ testEmbeddedByValue() }); ok { + t.testEmbeddedByValue() + } s.RegisterService(&TransportService_ServiceDesc, srv) } @@ -222,56 +195,18 @@ func _TransportService_GetClusterDetails_Handler(srv interface{}, ctx context.Co } func _TransportService_ProxySSH_Handler(srv interface{}, stream grpc.ServerStream) error { - return srv.(TransportServiceServer).ProxySSH(&transportServiceProxySSHServer{ServerStream: stream}) -} - -type TransportService_ProxySSHServer interface { - Send(*ProxySSHResponse) error - Recv() (*ProxySSHRequest, error) - grpc.ServerStream -} - -type transportServiceProxySSHServer struct { - grpc.ServerStream + return srv.(TransportServiceServer).ProxySSH(&grpc.GenericServerStream[ProxySSHRequest, ProxySSHResponse]{ServerStream: stream}) } -func (x *transportServiceProxySSHServer) Send(m *ProxySSHResponse) error { - return x.ServerStream.SendMsg(m) -} - -func (x *transportServiceProxySSHServer) Recv() (*ProxySSHRequest, error) { - m := new(ProxySSHRequest) - if err := x.ServerStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type TransportService_ProxySSHServer = grpc.BidiStreamingServer[ProxySSHRequest, ProxySSHResponse] func _TransportService_ProxyCluster_Handler(srv interface{}, stream grpc.ServerStream) error { - return srv.(TransportServiceServer).ProxyCluster(&transportServiceProxyClusterServer{ServerStream: stream}) + return srv.(TransportServiceServer).ProxyCluster(&grpc.GenericServerStream[ProxyClusterRequest, ProxyClusterResponse]{ServerStream: stream}) } -type TransportService_ProxyClusterServer interface { - Send(*ProxyClusterResponse) error - Recv() (*ProxyClusterRequest, error) - grpc.ServerStream -} - -type transportServiceProxyClusterServer struct { - grpc.ServerStream -} - -func (x *transportServiceProxyClusterServer) Send(m *ProxyClusterResponse) error { - return x.ServerStream.SendMsg(m) -} - -func (x *transportServiceProxyClusterServer) Recv() (*ProxyClusterRequest, error) { - m := new(ProxyClusterRequest) - if err := x.ServerStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type TransportService_ProxyClusterServer = grpc.BidiStreamingServer[ProxyClusterRequest, ProxyClusterResponse] // TransportService_ServiceDesc is the grpc.ServiceDesc for TransportService service. // It's only intended for direct use with grpc.RegisterService, diff --git a/api/gen/proto/go/teleport/trust/v1/trust_service_grpc.pb.go b/api/gen/proto/go/teleport/trust/v1/trust_service_grpc.pb.go index 3915be697442e..2b5e384451063 100644 --- a/api/gen/proto/go/teleport/trust/v1/trust_service_grpc.pb.go +++ b/api/gen/proto/go/teleport/trust/v1/trust_service_grpc.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: -// - protoc-gen-go-grpc v1.4.0 +// - protoc-gen-go-grpc v1.5.0 // - protoc (unknown) // source: teleport/trust/v1/trust_service.proto @@ -31,8 +31,8 @@ import ( // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. -// Requires gRPC-Go v1.62.0 or later. -const _ = grpc.SupportPackageIsVersion8 +// Requires gRPC-Go v1.64.0 or later. +const _ = grpc.SupportPackageIsVersion9 const ( TrustService_GetCertAuthority_FullMethodName = "/teleport.trust.v1.TrustService/GetCertAuthority" @@ -147,7 +147,7 @@ func (c *trustServiceClient) GenerateHostCert(ctx context.Context, in *GenerateH // TrustServiceServer is the server API for TrustService service. // All implementations must embed UnimplementedTrustServiceServer -// for forward compatibility +// for forward compatibility. // // TrustService provides methods to manage certificate authorities. type TrustServiceServer interface { @@ -169,9 +169,12 @@ type TrustServiceServer interface { mustEmbedUnimplementedTrustServiceServer() } -// UnimplementedTrustServiceServer must be embedded to have forward compatible implementations. -type UnimplementedTrustServiceServer struct { -} +// UnimplementedTrustServiceServer must be embedded to have +// forward compatible implementations. +// +// NOTE: this should be embedded by value instead of pointer to avoid a nil +// pointer dereference when methods are called. +type UnimplementedTrustServiceServer struct{} func (UnimplementedTrustServiceServer) GetCertAuthority(context.Context, *GetCertAuthorityRequest) (*types.CertAuthorityV2, error) { return nil, status.Errorf(codes.Unimplemented, "method GetCertAuthority not implemented") @@ -195,6 +198,7 @@ func (UnimplementedTrustServiceServer) GenerateHostCert(context.Context, *Genera return nil, status.Errorf(codes.Unimplemented, "method GenerateHostCert not implemented") } func (UnimplementedTrustServiceServer) mustEmbedUnimplementedTrustServiceServer() {} +func (UnimplementedTrustServiceServer) testEmbeddedByValue() {} // UnsafeTrustServiceServer may be embedded to opt out of forward compatibility for this service. // Use of this interface is not recommended, as added methods to TrustServiceServer will @@ -204,6 +208,13 @@ type UnsafeTrustServiceServer interface { } func RegisterTrustServiceServer(s grpc.ServiceRegistrar, srv TrustServiceServer) { + // If the following call pancis, it indicates UnimplementedTrustServiceServer was + // embedded by pointer and is nil. This will cause panics if an + // unimplemented method is ever invoked, so we test this at initialization + // time to prevent it from happening at runtime later due to I/O. + if t, ok := srv.(interface{ testEmbeddedByValue() }); ok { + t.testEmbeddedByValue() + } s.RegisterService(&TrustService_ServiceDesc, srv) } diff --git a/api/gen/proto/go/teleport/userloginstate/v1/userloginstate_service_grpc.pb.go b/api/gen/proto/go/teleport/userloginstate/v1/userloginstate_service_grpc.pb.go index 521a09fdfc699..1f085cb26b756 100644 --- a/api/gen/proto/go/teleport/userloginstate/v1/userloginstate_service_grpc.pb.go +++ b/api/gen/proto/go/teleport/userloginstate/v1/userloginstate_service_grpc.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: -// - protoc-gen-go-grpc v1.4.0 +// - protoc-gen-go-grpc v1.5.0 // - protoc (unknown) // source: teleport/userloginstate/v1/userloginstate_service.proto @@ -30,8 +30,8 @@ import ( // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. -// Requires gRPC-Go v1.62.0 or later. -const _ = grpc.SupportPackageIsVersion8 +// Requires gRPC-Go v1.64.0 or later. +const _ = grpc.SupportPackageIsVersion9 const ( UserLoginStateService_GetUserLoginStates_FullMethodName = "/teleport.userloginstate.v1.UserLoginStateService/GetUserLoginStates" @@ -119,7 +119,7 @@ func (c *userLoginStateServiceClient) DeleteAllUserLoginStates(ctx context.Conte // UserLoginStateServiceServer is the server API for UserLoginStateService service. // All implementations must embed UnimplementedUserLoginStateServiceServer -// for forward compatibility +// for forward compatibility. // // UserLoginStateService provides CRUD methods for user login state resources. type UserLoginStateServiceServer interface { @@ -136,9 +136,12 @@ type UserLoginStateServiceServer interface { mustEmbedUnimplementedUserLoginStateServiceServer() } -// UnimplementedUserLoginStateServiceServer must be embedded to have forward compatible implementations. -type UnimplementedUserLoginStateServiceServer struct { -} +// UnimplementedUserLoginStateServiceServer must be embedded to have +// forward compatible implementations. +// +// NOTE: this should be embedded by value instead of pointer to avoid a nil +// pointer dereference when methods are called. +type UnimplementedUserLoginStateServiceServer struct{} func (UnimplementedUserLoginStateServiceServer) GetUserLoginStates(context.Context, *GetUserLoginStatesRequest) (*GetUserLoginStatesResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method GetUserLoginStates not implemented") @@ -156,6 +159,7 @@ func (UnimplementedUserLoginStateServiceServer) DeleteAllUserLoginStates(context return nil, status.Errorf(codes.Unimplemented, "method DeleteAllUserLoginStates not implemented") } func (UnimplementedUserLoginStateServiceServer) mustEmbedUnimplementedUserLoginStateServiceServer() {} +func (UnimplementedUserLoginStateServiceServer) testEmbeddedByValue() {} // UnsafeUserLoginStateServiceServer may be embedded to opt out of forward compatibility for this service. // Use of this interface is not recommended, as added methods to UserLoginStateServiceServer will @@ -165,6 +169,13 @@ type UnsafeUserLoginStateServiceServer interface { } func RegisterUserLoginStateServiceServer(s grpc.ServiceRegistrar, srv UserLoginStateServiceServer) { + // If the following call pancis, it indicates UnimplementedUserLoginStateServiceServer was + // embedded by pointer and is nil. This will cause panics if an + // unimplemented method is ever invoked, so we test this at initialization + // time to prevent it from happening at runtime later due to I/O. + if t, ok := srv.(interface{ testEmbeddedByValue() }); ok { + t.testEmbeddedByValue() + } s.RegisterService(&UserLoginStateService_ServiceDesc, srv) } diff --git a/api/gen/proto/go/teleport/users/v1/users_service_grpc.pb.go b/api/gen/proto/go/teleport/users/v1/users_service_grpc.pb.go index 271665bfecaa4..8fcbd9d2e7b64 100644 --- a/api/gen/proto/go/teleport/users/v1/users_service_grpc.pb.go +++ b/api/gen/proto/go/teleport/users/v1/users_service_grpc.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: -// - protoc-gen-go-grpc v1.4.0 +// - protoc-gen-go-grpc v1.5.0 // - protoc (unknown) // source: teleport/users/v1/users_service.proto @@ -30,8 +30,8 @@ import ( // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. -// Requires gRPC-Go v1.62.0 or later. -const _ = grpc.SupportPackageIsVersion8 +// Requires gRPC-Go v1.64.0 or later. +const _ = grpc.SupportPackageIsVersion9 const ( UsersService_GetUser_FullMethodName = "/teleport.users.v1.UsersService/GetUser" @@ -132,7 +132,7 @@ func (c *usersServiceClient) DeleteUser(ctx context.Context, in *DeleteUserReque // UsersServiceServer is the server API for UsersService service. // All implementations must embed UnimplementedUsersServiceServer -// for forward compatibility +// for forward compatibility. // // UsersService provides methods to manage Teleport users. type UsersServiceServer interface { @@ -151,9 +151,12 @@ type UsersServiceServer interface { mustEmbedUnimplementedUsersServiceServer() } -// UnimplementedUsersServiceServer must be embedded to have forward compatible implementations. -type UnimplementedUsersServiceServer struct { -} +// UnimplementedUsersServiceServer must be embedded to have +// forward compatible implementations. +// +// NOTE: this should be embedded by value instead of pointer to avoid a nil +// pointer dereference when methods are called. +type UnimplementedUsersServiceServer struct{} func (UnimplementedUsersServiceServer) GetUser(context.Context, *GetUserRequest) (*GetUserResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method GetUser not implemented") @@ -174,6 +177,7 @@ func (UnimplementedUsersServiceServer) DeleteUser(context.Context, *DeleteUserRe return nil, status.Errorf(codes.Unimplemented, "method DeleteUser not implemented") } func (UnimplementedUsersServiceServer) mustEmbedUnimplementedUsersServiceServer() {} +func (UnimplementedUsersServiceServer) testEmbeddedByValue() {} // UnsafeUsersServiceServer may be embedded to opt out of forward compatibility for this service. // Use of this interface is not recommended, as added methods to UsersServiceServer will @@ -183,6 +187,13 @@ type UnsafeUsersServiceServer interface { } func RegisterUsersServiceServer(s grpc.ServiceRegistrar, srv UsersServiceServer) { + // If the following call pancis, it indicates UnimplementedUsersServiceServer was + // embedded by pointer and is nil. This will cause panics if an + // unimplemented method is ever invoked, so we test this at initialization + // time to prevent it from happening at runtime later due to I/O. + if t, ok := srv.(interface{ testEmbeddedByValue() }); ok { + t.testEmbeddedByValue() + } s.RegisterService(&UsersService_ServiceDesc, srv) } diff --git a/api/gen/proto/go/teleport/vnet/v1/vnet_config_service_grpc.pb.go b/api/gen/proto/go/teleport/vnet/v1/vnet_config_service_grpc.pb.go index e17d0a3d1d21f..778c3e4252322 100644 --- a/api/gen/proto/go/teleport/vnet/v1/vnet_config_service_grpc.pb.go +++ b/api/gen/proto/go/teleport/vnet/v1/vnet_config_service_grpc.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: -// - protoc-gen-go-grpc v1.4.0 +// - protoc-gen-go-grpc v1.5.0 // - protoc (unknown) // source: teleport/vnet/v1/vnet_config_service.proto @@ -30,8 +30,8 @@ import ( // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. -// Requires gRPC-Go v1.62.0 or later. -const _ = grpc.SupportPackageIsVersion8 +// Requires gRPC-Go v1.64.0 or later. +const _ = grpc.SupportPackageIsVersion9 const ( VnetConfigService_GetVnetConfig_FullMethodName = "/teleport.vnet.v1.VnetConfigService/GetVnetConfig" @@ -119,7 +119,7 @@ func (c *vnetConfigServiceClient) DeleteVnetConfig(ctx context.Context, in *Dele // VnetConfigServiceServer is the server API for VnetConfigService service. // All implementations must embed UnimplementedVnetConfigServiceServer -// for forward compatibility +// for forward compatibility. // // VnetConfigService provides an API to manage the singleton VnetConfig. type VnetConfigServiceServer interface { @@ -136,9 +136,12 @@ type VnetConfigServiceServer interface { mustEmbedUnimplementedVnetConfigServiceServer() } -// UnimplementedVnetConfigServiceServer must be embedded to have forward compatible implementations. -type UnimplementedVnetConfigServiceServer struct { -} +// UnimplementedVnetConfigServiceServer must be embedded to have +// forward compatible implementations. +// +// NOTE: this should be embedded by value instead of pointer to avoid a nil +// pointer dereference when methods are called. +type UnimplementedVnetConfigServiceServer struct{} func (UnimplementedVnetConfigServiceServer) GetVnetConfig(context.Context, *GetVnetConfigRequest) (*VnetConfig, error) { return nil, status.Errorf(codes.Unimplemented, "method GetVnetConfig not implemented") @@ -156,6 +159,7 @@ func (UnimplementedVnetConfigServiceServer) DeleteVnetConfig(context.Context, *D return nil, status.Errorf(codes.Unimplemented, "method DeleteVnetConfig not implemented") } func (UnimplementedVnetConfigServiceServer) mustEmbedUnimplementedVnetConfigServiceServer() {} +func (UnimplementedVnetConfigServiceServer) testEmbeddedByValue() {} // UnsafeVnetConfigServiceServer may be embedded to opt out of forward compatibility for this service. // Use of this interface is not recommended, as added methods to VnetConfigServiceServer will @@ -165,6 +169,13 @@ type UnsafeVnetConfigServiceServer interface { } func RegisterVnetConfigServiceServer(s grpc.ServiceRegistrar, srv VnetConfigServiceServer) { + // If the following call pancis, it indicates UnimplementedVnetConfigServiceServer was + // embedded by pointer and is nil. This will cause panics if an + // unimplemented method is ever invoked, so we test this at initialization + // time to prevent it from happening at runtime later due to I/O. + if t, ok := srv.(interface{ testEmbeddedByValue() }); ok { + t.testEmbeddedByValue() + } s.RegisterService(&VnetConfigService_ServiceDesc, srv) } diff --git a/api/gen/proto/go/userpreferences/v1/userpreferences_grpc.pb.go b/api/gen/proto/go/userpreferences/v1/userpreferences_grpc.pb.go index c7163c0936509..f4dc0f68258fb 100644 --- a/api/gen/proto/go/userpreferences/v1/userpreferences_grpc.pb.go +++ b/api/gen/proto/go/userpreferences/v1/userpreferences_grpc.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: -// - protoc-gen-go-grpc v1.4.0 +// - protoc-gen-go-grpc v1.5.0 // - protoc (unknown) // source: teleport/userpreferences/v1/userpreferences.proto @@ -30,8 +30,8 @@ import ( // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. -// Requires gRPC-Go v1.62.0 or later. -const _ = grpc.SupportPackageIsVersion8 +// Requires gRPC-Go v1.64.0 or later. +const _ = grpc.SupportPackageIsVersion9 const ( UserPreferencesService_GetUserPreferences_FullMethodName = "/teleport.userpreferences.v1.UserPreferencesService/GetUserPreferences" @@ -80,7 +80,7 @@ func (c *userPreferencesServiceClient) UpsertUserPreferences(ctx context.Context // UserPreferencesServiceServer is the server API for UserPreferencesService service. // All implementations must embed UnimplementedUserPreferencesServiceServer -// for forward compatibility +// for forward compatibility. // // UserPreferencesService is a service that stores user settings. type UserPreferencesServiceServer interface { @@ -91,9 +91,12 @@ type UserPreferencesServiceServer interface { mustEmbedUnimplementedUserPreferencesServiceServer() } -// UnimplementedUserPreferencesServiceServer must be embedded to have forward compatible implementations. -type UnimplementedUserPreferencesServiceServer struct { -} +// UnimplementedUserPreferencesServiceServer must be embedded to have +// forward compatible implementations. +// +// NOTE: this should be embedded by value instead of pointer to avoid a nil +// pointer dereference when methods are called. +type UnimplementedUserPreferencesServiceServer struct{} func (UnimplementedUserPreferencesServiceServer) GetUserPreferences(context.Context, *GetUserPreferencesRequest) (*GetUserPreferencesResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method GetUserPreferences not implemented") @@ -103,6 +106,7 @@ func (UnimplementedUserPreferencesServiceServer) UpsertUserPreferences(context.C } func (UnimplementedUserPreferencesServiceServer) mustEmbedUnimplementedUserPreferencesServiceServer() { } +func (UnimplementedUserPreferencesServiceServer) testEmbeddedByValue() {} // UnsafeUserPreferencesServiceServer may be embedded to opt out of forward compatibility for this service. // Use of this interface is not recommended, as added methods to UserPreferencesServiceServer will @@ -112,6 +116,13 @@ type UnsafeUserPreferencesServiceServer interface { } func RegisterUserPreferencesServiceServer(s grpc.ServiceRegistrar, srv UserPreferencesServiceServer) { + // If the following call pancis, it indicates UnimplementedUserPreferencesServiceServer was + // embedded by pointer and is nil. This will cause panics if an + // unimplemented method is ever invoked, so we test this at initialization + // time to prevent it from happening at runtime later due to I/O. + if t, ok := srv.(interface{ testEmbeddedByValue() }); ok { + t.testEmbeddedByValue() + } s.RegisterService(&UserPreferencesService_ServiceDesc, srv) } diff --git a/api/proto/teleport/access_graph/v1/authorized_key.proto b/api/proto/teleport/access_graph/v1/authorized_key.proto index 15d95228b4897..1795d7a415a58 100644 --- a/api/proto/teleport/access_graph/v1/authorized_key.proto +++ b/api/proto/teleport/access_graph/v1/authorized_key.proto @@ -43,4 +43,10 @@ message AuthorizedKeySpec { string key_fingerprint = 2; // host_user is the user who can be accessed using the fingerprint above. string host_user = 3; + // key_comment is the authorized key's comment. + // Authorized keys consist of the following space-separated fields: + // options, keytype, base64-encoded key, comment. The options field is optional. + string key_comment = 4; + // key_type is the ssh's key type. + string key_type = 5; } diff --git a/api/proto/teleport/legacy/client/proto/authservice.proto b/api/proto/teleport/legacy/client/proto/authservice.proto index 35a031b89f502..80333403685a0 100644 --- a/api/proto/teleport/legacy/client/proto/authservice.proto +++ b/api/proto/teleport/legacy/client/proto/authservice.proto @@ -336,6 +336,8 @@ message RouteToApp { string AzureIdentity = 6 [(gogoproto.jsontag) = "azure_identity,omitempty"]; // GCPServiceAccount is the GCP service account to assume when accessing GCP API. string GCPServiceAccount = 7 [(gogoproto.jsontag) = "gcp_service_account,omitempty"]; + // URI is the URI of the app. This is the internal endpoint where the application is running and isn't user-facing. + string URI = 8 [(gogoproto.jsontag) = "uri,omitempty"]; } // GetUserRequest specifies parameters for the GetUser method. @@ -832,6 +834,12 @@ message CreateAppSessionRequest { // An optional field, that when provided, the response will be validated and // the ID of the validated MFA device will be stored in session's certificate. MFAAuthenticateResponse MFAResponse = 8 [(gogoproto.jsontag) = "mfa_response,omitempty"]; + // AppName is the name of the application. + string AppName = 9 [(gogoproto.jsontag) = "app_name"]; + // URI is the URI of the app. This is the internal endpoint where the application is running and isn't user-facing. + string URI = 10 [(gogoproto.jsontag) = "uri"]; + // ClientAddr is a client (user's) address. + string ClientAddr = 11 [(gogoproto.jsontag) = "client_addr,omitempty"]; } // CreateAppSessionResponse contains the requested application web session. diff --git a/api/proto/teleport/legacy/types/events/events.proto b/api/proto/teleport/legacy/types/events/events.proto index a2eaa5bea9a11..c4a4bb1c6ad15 100644 --- a/api/proto/teleport/legacy/types/events/events.proto +++ b/api/proto/teleport/legacy/types/events/events.proto @@ -4605,6 +4605,8 @@ message RouteToApp { string AzureIdentity = 6 [(gogoproto.jsontag) = "azure_identity,omitempty"]; // GCPServiceAccount is the GCP service account to assume when accessing GCP API. string GCPServiceAccount = 7 [(gogoproto.jsontag) = "gcp_service_account,omitempty"]; + // URI is the application URI. + string URI = 8 [(gogoproto.jsontag) = "uri,omitempty"]; } // RouteToDatabase combines parameters for database service routing information. diff --git a/api/proto/teleport/legacy/types/types.proto b/api/proto/teleport/legacy/types/types.proto index 5cb2446a40ac3..3005f0f927a6b 100644 --- a/api/proto/teleport/legacy/types/types.proto +++ b/api/proto/teleport/legacy/types/types.proto @@ -4782,6 +4782,9 @@ message GithubAuthRequest { teleport.attestation.v1.AttestationStatement attestation_statement = 16 [(gogoproto.jsontag) = "attestation_statement,omitempty"]; // ClientLoginIP specifies IP address of the client for login, it will be written to the user's certificates. string ClientLoginIP = 17 [(gogoproto.jsontag) = "client_login_ip,omitempty"]; + // ClientUserAgent is the user agent of the Web browser, used for issuing + // a DeviceWebToken. + string ClientUserAgent = 18 [(gogoproto.jsontag) = "client_user_agent,omitempty"]; } // SSOWarnings conveys a user-facing main message along with auxiliary warnings. @@ -5282,6 +5285,11 @@ message RegisterUsingTokenRequest { // service and is ignored otherwise; bots should otherwise rejoin with their // existing client certificate to prove their instance identity. string BotInstanceID = 13 [(gogoproto.jsontag) = "bot_instance_id"]; + // BotGeneration is a trusted generation counter value for Machine ID bots, + // provided to Auth by the Join Service when bots rejoin via a streamed/gRPC + // join method. Rejoining bots supply this value via a client certificate + // extension; it is ignored from other sources. + int32 BotGeneration = 14 [(gogoproto.jsontag) = "bot_generation"]; } // RecoveryCodes holds a user's recovery code information. Recovery codes allows users to regain diff --git a/api/types/accessgraph/authorized_key.go b/api/types/accessgraph/authorized_key.go index 5532f39bc2775..215583716be49 100644 --- a/api/types/accessgraph/authorized_key.go +++ b/api/types/accessgraph/authorized_key.go @@ -28,7 +28,8 @@ import ( ) const ( - authorizedKeyDefaultKeyTTL = 8 * time.Hour + // AuthorizedKeyDefaultKeyTTL is the default TTL for an authorized key. + AuthorizedKeyDefaultKeyTTL = 8 * time.Hour ) // NewAuthorizedKey creates a new SSH authorized key resource. @@ -40,7 +41,7 @@ func NewAuthorizedKey(spec *accessgraphv1pb.AuthorizedKeySpec) (*accessgraphv1pb Metadata: &headerv1.Metadata{ Name: name, Expires: timestamppb.New( - time.Now().Add(authorizedKeyDefaultKeyTTL), + time.Now().Add(AuthorizedKeyDefaultKeyTTL), ), }, Spec: spec, @@ -75,6 +76,10 @@ func ValidateAuthorizedKey(k *accessgraphv1pb.AuthorizedKey) error { return trace.BadParameter("KeyFingerprint is unset") } + if k.Spec.KeyType == "" { + return trace.BadParameter("KeyType is unset") + } + if k.Metadata.Name == "" { return trace.BadParameter("Name is unset") } diff --git a/api/types/accessgraph/authorized_key_test.go b/api/types/accessgraph/authorized_key_test.go index d28d72ebd3e7e..46c92cbd15a47 100644 --- a/api/types/accessgraph/authorized_key_test.go +++ b/api/types/accessgraph/authorized_key_test.go @@ -39,6 +39,7 @@ func TestAuthorizedKey(t *testing.T) { HostId: uuid.New().String(), KeyFingerprint: "fingerprint", HostUser: "user", + KeyType: "ssh-rsa", }, errValidation: require.NoError, }, @@ -48,6 +49,7 @@ func TestAuthorizedKey(t *testing.T) { HostId: uuid.New().String(), KeyFingerprint: "", HostUser: "user", + KeyType: "ssh-rsa", }, errValidation: func(t require.TestingT, err error, i ...any) { require.ErrorContains(t, err, "KeyFingerprint is unset") @@ -59,6 +61,7 @@ func TestAuthorizedKey(t *testing.T) { HostId: uuid.New().String(), KeyFingerprint: "fingerprint", HostUser: "", + KeyType: "ssh-rsa", }, errValidation: func(t require.TestingT, err error, i ...any) { require.ErrorContains(t, err, "HostUser is unset") @@ -69,11 +72,23 @@ func TestAuthorizedKey(t *testing.T) { spec: &accessgraphv1pb.AuthorizedKeySpec{ KeyFingerprint: "fingerprint", HostUser: "user", + KeyType: "ssh-rsa", }, errValidation: func(t require.TestingT, err error, i ...any) { require.ErrorContains(t, err, "HostId is unset") }, }, + { + name: "missing HostID", + spec: &accessgraphv1pb.AuthorizedKeySpec{ + KeyFingerprint: "fingerprint", + HostUser: "user", + HostId: uuid.New().String(), + }, + errValidation: func(t require.TestingT, err error, i ...any) { + require.ErrorContains(t, err, "KeyType is unset") + }, + }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { diff --git a/api/types/events/events.pb.go b/api/types/events/events.pb.go index 65ca9d3e48cce..dc74c9474cc7a 100644 --- a/api/types/events/events.pb.go +++ b/api/types/events/events.pb.go @@ -9791,7 +9791,9 @@ type RouteToApp struct { // AzureIdentity is the Azure identity ot assume when accessing Azure API. AzureIdentity string `protobuf:"bytes,6,opt,name=AzureIdentity,proto3" json:"azure_identity,omitempty"` // GCPServiceAccount is the GCP service account to assume when accessing GCP API. - GCPServiceAccount string `protobuf:"bytes,7,opt,name=GCPServiceAccount,proto3" json:"gcp_service_account,omitempty"` + GCPServiceAccount string `protobuf:"bytes,7,opt,name=GCPServiceAccount,proto3" json:"gcp_service_account,omitempty"` + // URI is the application URI. + URI string `protobuf:"bytes,8,opt,name=URI,proto3" json:"uri,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -13624,17 +13626,17 @@ func init() { } var fileDescriptor_007ba1c3d6266d56 = []byte{ - // 15652 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0xbd, 0x59, 0x70, 0x24, 0xc9, - 0x75, 0x20, 0x88, 0x3c, 0x90, 0x00, 0x1e, 0x8e, 0x02, 0xbc, 0xae, 0xe8, 0xea, 0xaa, 0xca, 0xee, - 0x68, 0x76, 0xb1, 0xaa, 0xd9, 0x5d, 0xc5, 0xae, 0xae, 0xee, 0x66, 0x5f, 0xec, 0x4e, 0x20, 0x81, - 0x42, 0x76, 0xe1, 0xea, 0x48, 0x54, 0x15, 0x9b, 0x57, 0x2a, 0x90, 0xe1, 0x00, 0xa2, 0x91, 0x19, - 0x91, 0x8c, 0x88, 0x2c, 0x14, 0x7a, 0x2f, 0x51, 0xab, 0x83, 0xd4, 0x92, 0x14, 0x97, 0x5a, 0x89, - 0xd2, 0x4a, 0xbb, 0xa2, 0xae, 0x5d, 0xad, 0x4c, 0x2b, 0xad, 0xd6, 0x64, 0x92, 0x28, 0x2d, 0x6d, - 0xa5, 0xe5, 0x1e, 0xad, 0xa5, 0x69, 0x4d, 0xd2, 0xce, 0xc8, 0x64, 0x33, 0x1a, 0x50, 0xc3, 0x19, - 0xcd, 0x07, 0x6c, 0xc6, 0x4c, 0x33, 0x43, 0x1b, 0x71, 0x34, 0x9a, 0xb1, 0x31, 0x7f, 0xee, 0x11, - 0xe1, 0x71, 0x64, 0xe2, 0x6c, 0xa1, 0xc1, 0xc2, 0x4f, 0x15, 0xf2, 0xbd, 0xe7, 0xcf, 0x3d, 0x9e, - 0x3f, 0x77, 0x7f, 0xee, 0xfe, 0xfc, 0x3d, 0xb8, 0xe2, 0xd1, 0x06, 0x6d, 0xd9, 0x8e, 0x77, 0xad, + // 15665 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0xbd, 0x5b, 0x74, 0x24, 0xc7, + 0x75, 0x20, 0x88, 0x7a, 0xa0, 0x00, 0x5c, 0x3c, 0x1a, 0x88, 0x7e, 0x25, 0x9b, 0xdd, 0x5d, 0x64, + 0x52, 0x6c, 0x75, 0x53, 0x64, 0xb7, 0xd8, 0x6c, 0x92, 0xe2, 0x4b, 0x64, 0x01, 0x05, 0x34, 0x8a, + 0x8d, 0x17, 0xb3, 0xd0, 0xdd, 0xa2, 0x5e, 0xe5, 0x44, 0x65, 0x00, 0x48, 0xa2, 0x2a, 0xb3, 0x94, + 0x99, 0xd5, 0x68, 0x70, 0x5f, 0x96, 0xd7, 0x0f, 0xc9, 0x2b, 0xc9, 0x5a, 0x79, 0x6d, 0xd9, 0x6b, + 0xef, 0x5a, 0x7e, 0xed, 0x7a, 0x7d, 0xbc, 0xf6, 0x7a, 0xd7, 0xc7, 0xb6, 0xec, 0xd5, 0x59, 0x7b, + 0xb5, 0x0f, 0x7a, 0x75, 0xbc, 0xc7, 0xf6, 0xee, 0xf8, 0xf8, 0xcc, 0x78, 0x20, 0x8f, 0x66, 0x3c, + 0x1f, 0x38, 0x33, 0xe7, 0x78, 0x66, 0x74, 0xc6, 0x1a, 0x8f, 0x67, 0xce, 0x9c, 0xb8, 0x11, 0x99, + 0x19, 0xf9, 0xa8, 0xc2, 0x93, 0x06, 0xa1, 0xc6, 0x4f, 0x37, 0xea, 0xde, 0x1b, 0x37, 0x22, 0x6f, + 0xdc, 0x88, 0xb8, 0x11, 0x71, 0xe3, 0x5e, 0xb8, 0xe2, 0xd1, 0x06, 0x6d, 0xd9, 0x8e, 0x77, 0xad, 0x41, 0x57, 0xf4, 0xfa, 0xc6, 0x35, 0x6f, 0xa3, 0x45, 0xdd, 0x6b, 0xf4, 0x1e, 0xb5, 0x3c, 0xff, 0xbf, 0xab, 0x2d, 0xc7, 0xf6, 0x6c, 0x52, 0xe0, 0xbf, 0xce, 0x9d, 0x5a, 0xb1, 0x57, 0x6c, 0x04, 0x5d, 0x63, 0x7f, 0x71, 0xec, 0xb9, 0xf3, 0x2b, 0xb6, 0xbd, 0xd2, 0xa0, 0xd7, 0xf0, 0xd7, 0x52, @@ -13700,7 +13702,7 @@ var fileDescriptor_007ba1c3d6266d56 = []byte{ 0x20, 0x24, 0x26, 0xd7, 0xa0, 0x7f, 0x81, 0xad, 0xb3, 0x75, 0xbb, 0x21, 0x94, 0x0f, 0x97, 0x02, 0x5c, 0x7b, 0xe5, 0xb1, 0xea, 0x13, 0xa9, 0xd3, 0x30, 0x32, 0xd1, 0x30, 0xa9, 0xe5, 0xc9, 0xad, 0x66, 0x23, 0xb9, 0xb4, 0x42, 0x2d, 0x4f, 0x6e, 0x35, 0x8e, 0x79, 0x9d, 0x41, 0xe5, 0x56, 0x07, - 0xa4, 0xea, 0xff, 0x97, 0x83, 0x87, 0x6e, 0xb5, 0x97, 0xa8, 0x63, 0x51, 0x8f, 0xba, 0x62, 0x41, + 0xa4, 0xea, 0xff, 0x9b, 0x83, 0x87, 0x6e, 0xb5, 0x97, 0xa8, 0x63, 0x51, 0x8f, 0xba, 0x62, 0x41, 0x0e, 0xb8, 0xce, 0xc1, 0x58, 0x02, 0x29, 0xb8, 0xe3, 0x42, 0xb9, 0x16, 0x20, 0x6b, 0x62, 0x8d, 0x97, 0x67, 0xdb, 0x44, 0x51, 0x32, 0x0d, 0x27, 0x42, 0x20, 0x6b, 0x84, 0xab, 0x64, 0x71, 0x29, 0xb9, 0xb8, 0xb5, 0x59, 0x3c, 0x27, 0x71, 0x63, 0xcd, 0x96, 0x35, 0x38, 0x5e, 0x8c, 0xdc, 0x82, @@ -13734,16 +13736,16 @@ var fileDescriptor_007ba1c3d6266d56 = []byte{ 0x8c, 0x0b, 0xdb, 0x31, 0x16, 0x5f, 0x2c, 0x33, 0x8e, 0x33, 0x51, 0xdf, 0x84, 0x21, 0xb9, 0x20, 0x39, 0x83, 0x5b, 0x6b, 0x3e, 0x4e, 0x70, 0x53, 0x6e, 0x1a, 0xb8, 0x9f, 0x7e, 0x1a, 0x06, 0xcb, 0xd4, 0xad, 0x3b, 0x66, 0x8b, 0x59, 0x0d, 0x42, 0xc9, 0x4f, 0x6c, 0x6d, 0x16, 0x07, 0x8d, 0x10, - 0xac, 0xc9, 0x34, 0xea, 0xbf, 0xc9, 0xc0, 0x19, 0xc6, 0xbb, 0xe4, 0xba, 0xe6, 0x8a, 0xd5, 0x94, + 0xac, 0xc9, 0x34, 0xea, 0xbf, 0xce, 0xc0, 0x19, 0xc6, 0xbb, 0xe4, 0xba, 0xe6, 0x8a, 0xd5, 0x94, 0x97, 0xed, 0x27, 0xa1, 0x50, 0xc5, 0xfa, 0x44, 0x4d, 0xa7, 0xb6, 0x36, 0x8b, 0xa3, 0xbc, 0x05, 0x92, 0x1e, 0x0a, 0x9a, 0x60, 0x5f, 0x99, 0xdd, 0x66, 0x5f, 0xc9, 0x4c, 0x5a, 0x4f, 0x77, 0x3c, 0xd3, 0x5a, 0xa9, 0x7a, 0xba, 0xd7, 0x76, 0x23, 0x26, 0xad, 0xc0, 0xd4, 0x5c, 0x44, 0x45, 0x4c, 0xda, 0x48, 0x21, 0xf2, 0x2a, 0x0c, 0x4d, 0x5a, 0x46, 0xc8, 0x84, 0x4f, 0x88, 0x0f, 0x33, 0x4b, - 0x93, 0x22, 0x3c, 0xc9, 0x22, 0x52, 0x40, 0xfd, 0x9f, 0x33, 0xa0, 0xf0, 0x4d, 0xe0, 0x8c, 0xe9, + 0x93, 0x22, 0x3c, 0xc9, 0x22, 0x52, 0x40, 0xfd, 0x1f, 0x33, 0xa0, 0xf0, 0x4d, 0xe0, 0x8c, 0xe9, 0x7a, 0xb3, 0xb4, 0xb9, 0x24, 0xcd, 0x4e, 0x53, 0xfe, 0xae, 0x92, 0xe1, 0xa4, 0xb5, 0x08, 0x4d, 0x01, 0xb1, 0xab, 0x6c, 0x98, 0x6e, 0x62, 0xfb, 0x11, 0x2b, 0x45, 0x2a, 0xd0, 0xc7, 0x39, 0x73, 0x5b, 0x62, 0xf0, 0xba, 0xe2, 0x2b, 0x42, 0xbc, 0x6a, 0xae, 0x0c, 0x4d, 0x4e, 0x2c, 0x6f, 0x68, - 0x44, 0x79, 0xf5, 0x7f, 0xc9, 0xc2, 0x68, 0xbc, 0x10, 0xb9, 0x0b, 0xfd, 0xaf, 0xdb, 0xa6, 0x45, + 0x44, 0x79, 0xf5, 0x7f, 0xca, 0xc2, 0x68, 0xbc, 0x10, 0xb9, 0x0b, 0xfd, 0xaf, 0xdb, 0xa6, 0x45, 0x8d, 0x79, 0x0b, 0x5b, 0xd8, 0xfd, 0x70, 0xc4, 0xb7, 0xc5, 0x4f, 0xbe, 0x85, 0x65, 0x6a, 0xb2, 0x05, 0x8b, 0x67, 0x25, 0x01, 0x33, 0xf2, 0x51, 0x18, 0x60, 0x36, 0xe0, 0x3d, 0xe4, 0x9c, 0xdd, 0x96, 0xf3, 0x23, 0x82, 0xf3, 0x29, 0x87, 0x17, 0x4a, 0xb2, 0x0e, 0xd9, 0x31, 0xbd, 0xd2, 0xa8, @@ -13779,7 +13781,7 @@ var fileDescriptor_007ba1c3d6266d56 = []byte{ 0x69, 0x72, 0xc5, 0x32, 0x3d, 0x53, 0x6f, 0x4c, 0xd8, 0xcd, 0xa6, 0x6e, 0x19, 0xca, 0x40, 0xa8, 0xc9, 0x26, 0xc7, 0xd4, 0xea, 0x1c, 0x25, 0x6b, 0x72, 0xb4, 0x10, 0xdb, 0x96, 0x8b, 0x3e, 0xd4, 0x68, 0xdd, 0x76, 0x98, 0x2d, 0x80, 0x67, 0x92, 0x62, 0x5b, 0xee, 0x72, 0x5c, 0xcd, 0xf1, 0x91, - 0xb2, 0xb1, 0x1d, 0x2f, 0xf8, 0x7a, 0xbe, 0x7f, 0x70, 0x74, 0x28, 0x7e, 0x8c, 0xac, 0xfe, 0x4f, + 0xb2, 0xb1, 0x1d, 0x2f, 0xf8, 0x7a, 0xbe, 0x7f, 0x70, 0x74, 0x28, 0x7e, 0x8c, 0xac, 0xfe, 0x0f, 0x39, 0x18, 0x14, 0xa4, 0x6c, 0x29, 0x3d, 0x56, 0xf0, 0xfd, 0x28, 0x78, 0xaa, 0xa2, 0x16, 0x0e, 0x4a, 0x51, 0xd5, 0xcf, 0x65, 0x83, 0xd9, 0x68, 0xc1, 0x31, 0xad, 0xfd, 0xcd, 0x46, 0x97, 0x00, 0x26, 0x56, 0xdb, 0xd6, 0x1a, 0xbf, 0x2e, 0xcb, 0x86, 0xd7, 0x65, 0x75, 0x53, 0x93, 0x30, 0xe4, @@ -13794,7 +13796,7 @@ var fileDescriptor_007ba1c3d6266d56 = []byte{ 0x1a, 0xad, 0x53, 0xf3, 0x1e, 0x3d, 0x9a, 0x03, 0x2f, 0x3a, 0x74, 0xf2, 0xfb, 0x18, 0x3a, 0xd7, 0x71, 0x23, 0xc8, 0x24, 0x83, 0x07, 0xbe, 0xdc, 0xa8, 0x18, 0xdd, 0xda, 0x2c, 0x0e, 0x19, 0x1c, 0x8c, 0x47, 0xfe, 0x9a, 0x4c, 0xc4, 0x94, 0x64, 0x86, 0x5a, 0x2b, 0xde, 0x2a, 0x2a, 0x49, 0x2f, - 0x57, 0x92, 0x06, 0x42, 0x34, 0x81, 0x51, 0xff, 0x45, 0x16, 0x4e, 0xc5, 0x45, 0x5e, 0xa5, 0x96, + 0x57, 0x92, 0x06, 0x42, 0x34, 0x81, 0x51, 0xff, 0x79, 0x16, 0x4e, 0xc5, 0x45, 0x5e, 0xa5, 0x96, 0x71, 0x2c, 0xef, 0x77, 0x47, 0xde, 0xdf, 0xce, 0xc1, 0xc3, 0xa2, 0x4c, 0x75, 0x55, 0x77, 0xa8, 0x51, 0x36, 0x1d, 0x5a, 0xf7, 0x6c, 0x67, 0xe3, 0x08, 0x1b, 0x50, 0x07, 0x27, 0xf6, 0x1b, 0x50, 0x10, 0xdb, 0x7f, 0xbe, 0xce, 0x8c, 0x04, 0x2d, 0x41, 0x68, 0x62, 0x85, 0xe2, 0x47, 0x07, 0xb1, @@ -13808,802 +13810,803 @@ var fileDescriptor_007ba1c3d6266d56 = []byte{ 0x93, 0x2c, 0x0c, 0x07, 0x9b, 0xa6, 0xb7, 0x68, 0xfd, 0x70, 0xd6, 0xaa, 0x70, 0x2b, 0x93, 0xdb, 0xf7, 0x56, 0x66, 0x3f, 0x0a, 0xa5, 0x06, 0x47, 0x9e, 0xdc, 0x34, 0x40, 0x89, 0xf1, 0x23, 0xcf, 0xe0, 0xa0, 0xf3, 0x51, 0xe8, 0x9b, 0xd5, 0xef, 0x9b, 0xcd, 0x76, 0x53, 0x58, 0xe9, 0xe8, 0x4e, - 0xd6, 0xd4, 0xef, 0x6b, 0x3e, 0x5c, 0xfd, 0x7b, 0x19, 0x18, 0x11, 0x42, 0x15, 0xcc, 0xf7, 0x25, - 0xd5, 0x50, 0x3a, 0xd9, 0x7d, 0x4b, 0x27, 0xb7, 0x77, 0xe9, 0xa8, 0x3f, 0x9d, 0x03, 0x65, 0xca, - 0x6c, 0xd0, 0x45, 0x47, 0xb7, 0xdc, 0x65, 0xea, 0x88, 0xed, 0xf4, 0x24, 0x63, 0xb5, 0xaf, 0x0f, - 0x94, 0xa6, 0x94, 0xec, 0x9e, 0xa6, 0x94, 0x0f, 0xc0, 0x80, 0x68, 0x4c, 0xe0, 0xca, 0x88, 0xa3, - 0xc6, 0xf1, 0x81, 0x5a, 0x88, 0x67, 0xc4, 0xa5, 0x56, 0xcb, 0xb1, 0xef, 0x51, 0x87, 0xdf, 0x52, - 0x09, 0x62, 0xdd, 0x07, 0x6a, 0x21, 0x5e, 0xe2, 0x4c, 0x7d, 0x7b, 0x51, 0xe6, 0x4c, 0x1d, 0x2d, - 0xc4, 0x93, 0xcb, 0xd0, 0x3f, 0x63, 0xd7, 0x75, 0x14, 0x34, 0x9f, 0x56, 0x86, 0xb6, 0x36, 0x8b, - 0xfd, 0x0d, 0x01, 0xd3, 0x02, 0x2c, 0xa3, 0x2c, 0xdb, 0xeb, 0x56, 0xc3, 0xd6, 0xb9, 0xf3, 0x4b, - 0x3f, 0xa7, 0x34, 0x04, 0x4c, 0x0b, 0xb0, 0x8c, 0x92, 0xc9, 0x1c, 0x9d, 0x8a, 0xfa, 0x43, 0x9e, - 0xcb, 0x02, 0xa6, 0x05, 0x58, 0xf5, 0xd7, 0xf2, 0x4c, 0x7b, 0x5d, 0xf3, 0xed, 0x07, 0x7e, 0x5d, - 0x08, 0x07, 0x4c, 0xef, 0x1e, 0x06, 0xcc, 0x03, 0x73, 0x60, 0xa7, 0xfe, 0x75, 0x1f, 0x80, 0x90, - 0xfe, 0xe4, 0xf1, 0xe6, 0x70, 0x7f, 0x5a, 0x53, 0x86, 0xb1, 0x49, 0x6b, 0x55, 0xb7, 0xea, 0xd4, - 0x08, 0x8f, 0x2d, 0x0b, 0x38, 0xb4, 0xd1, 0x09, 0x92, 0x0a, 0x64, 0x78, 0x6e, 0xa9, 0x25, 0x0b, - 0x90, 0xa7, 0x61, 0xb0, 0x62, 0x79, 0xd4, 0xd1, 0xeb, 0x9e, 0x79, 0x8f, 0x8a, 0xa9, 0x01, 0x6f, - 0x86, 0xcd, 0x10, 0xac, 0xc9, 0x34, 0xe4, 0x06, 0x0c, 0x2d, 0xe8, 0x8e, 0x67, 0xd6, 0xcd, 0x96, - 0x6e, 0x79, 0xae, 0xd2, 0x8f, 0x33, 0x1a, 0x5a, 0x18, 0x2d, 0x09, 0xae, 0x45, 0xa8, 0xc8, 0x27, - 0x60, 0x00, 0xb7, 0xa6, 0xe8, 0xaf, 0x3d, 0xb0, 0xed, 0xc5, 0xe1, 0x63, 0xa1, 0x7b, 0x20, 0x3f, - 0x7d, 0xc5, 0x1b, 0xe0, 0xf8, 0xdd, 0x61, 0xc0, 0x91, 0x7c, 0x04, 0xfa, 0x26, 0x2d, 0x03, 0x99, - 0xc3, 0xb6, 0xcc, 0x55, 0xc1, 0xfc, 0x4c, 0xc8, 0xdc, 0x6e, 0xc5, 0x78, 0xfb, 0xec, 0xd2, 0x47, - 0xd9, 0xe0, 0xbb, 0x37, 0xca, 0x86, 0xde, 0x85, 0x63, 0xf1, 0xe1, 0x83, 0x3a, 0x16, 0x1f, 0xd9, - 0xe3, 0xb1, 0xb8, 0xfa, 0x36, 0x0c, 0x8e, 0x2f, 0x4c, 0x05, 0xa3, 0xf7, 0x21, 0xc8, 0x2d, 0x08, - 0x4f, 0x85, 0x3c, 0xb7, 0x67, 0x5a, 0xa6, 0xa1, 0x31, 0x18, 0xb9, 0x02, 0xfd, 0x13, 0xe8, 0xfe, - 0x26, 0x6e, 0x11, 0xf3, 0x7c, 0xfd, 0xab, 0x23, 0x0c, 0xbd, 0x60, 0x7d, 0x34, 0x79, 0x1c, 0xfa, - 0x16, 0x1c, 0x7b, 0xc5, 0xd1, 0x9b, 0x62, 0x0d, 0x46, 0x57, 0x91, 0x16, 0x07, 0x69, 0x3e, 0x4e, - 0xfd, 0xd1, 0x8c, 0x6f, 0xb6, 0xb3, 0x12, 0xd5, 0x36, 0x1e, 0xcd, 0x63, 0xdd, 0xfd, 0xbc, 0x84, - 0xcb, 0x41, 0x9a, 0x8f, 0x23, 0x57, 0xa0, 0x77, 0xd2, 0x71, 0x6c, 0x47, 0xf6, 0x71, 0xa7, 0x0c, - 0x20, 0x5f, 0xf7, 0x22, 0x05, 0x79, 0x1e, 0x06, 0xf9, 0x9c, 0xc3, 0x4f, 0x34, 0x73, 0xdd, 0x6e, - 0x4a, 0x65, 0x4a, 0xf5, 0xeb, 0x39, 0xc9, 0x66, 0xe3, 0x12, 0x7f, 0x00, 0x6f, 0x05, 0x9e, 0x81, - 0xdc, 0xf8, 0xc2, 0x94, 0x98, 0x00, 0x4f, 0xfa, 0x45, 0x25, 0x55, 0x89, 0x95, 0x63, 0xd4, 0xe4, - 0x3c, 0xe4, 0x17, 0x98, 0xfa, 0x14, 0x50, 0x3d, 0xfa, 0xb7, 0x36, 0x8b, 0xf9, 0x16, 0xd3, 0x1f, - 0x84, 0x22, 0x96, 0x6d, 0x66, 0xf8, 0x8e, 0x89, 0x63, 0xc3, 0x7d, 0xcc, 0x79, 0xc8, 0x97, 0x9c, - 0x95, 0x7b, 0x62, 0xd6, 0x42, 0xac, 0xee, 0xac, 0xdc, 0xd3, 0x10, 0x4a, 0xae, 0x01, 0x68, 0xd4, - 0x6b, 0x3b, 0x16, 0x3e, 0x3f, 0x19, 0xc0, 0xf3, 0x37, 0x9c, 0x0d, 0x1d, 0x84, 0xd6, 0xea, 0xb6, - 0x41, 0x35, 0x89, 0x44, 0xfd, 0xc5, 0xf0, 0x62, 0xa7, 0x6c, 0xba, 0x6b, 0xc7, 0x5d, 0xb8, 0x8b, - 0x2e, 0xd4, 0xc5, 0x11, 0x67, 0xb2, 0x93, 0x8a, 0xd0, 0x3b, 0xd5, 0xd0, 0x57, 0x5c, 0xec, 0x43, - 0xe1, 0x4b, 0xb6, 0xcc, 0x00, 0x1a, 0x87, 0xc7, 0xfa, 0xa9, 0x7f, 0xfb, 0x7e, 0xfa, 0x72, 0x6f, - 0x30, 0xda, 0xe6, 0xa8, 0xb7, 0x6e, 0x3b, 0xc7, 0x5d, 0xb5, 0xd3, 0xae, 0xba, 0x04, 0x7d, 0x55, - 0xa7, 0x2e, 0x1d, 0x5d, 0xe0, 0x7e, 0xc0, 0x75, 0xea, 0xfc, 0xd8, 0xc2, 0x47, 0x32, 0xba, 0xb2, - 0xeb, 0x21, 0x5d, 0x5f, 0x48, 0x67, 0xb8, 0x9e, 0xa0, 0x13, 0x48, 0x41, 0xb7, 0x60, 0x3b, 0x9e, - 0xe8, 0xb8, 0x80, 0xae, 0x65, 0x3b, 0x9e, 0xe6, 0x23, 0xc9, 0x07, 0x00, 0x16, 0x27, 0x16, 0x7c, - 0x67, 0xfb, 0x81, 0xd0, 0x17, 0x50, 0x78, 0xd9, 0x6b, 0x12, 0x9a, 0x2c, 0xc2, 0xc0, 0x7c, 0x8b, - 0x3a, 0x7c, 0x2b, 0xc4, 0x1f, 0x94, 0xbc, 0x3f, 0x26, 0x5a, 0xd1, 0xef, 0x57, 0xc5, 0xff, 0x01, - 0x39, 0x5f, 0x5f, 0x6c, 0xff, 0xa7, 0x16, 0x32, 0x22, 0xcf, 0x43, 0xa1, 0xc4, 0xed, 0xbc, 0x41, - 0x64, 0x19, 0x88, 0x0c, 0xb7, 0xa0, 0x1c, 0xc5, 0xf7, 0xec, 0x3a, 0xfe, 0xad, 0x09, 0x72, 0xf5, - 0x0a, 0x8c, 0xc6, 0xab, 0x21, 0x83, 0xd0, 0x37, 0x31, 0x3f, 0x37, 0x37, 0x39, 0xb1, 0x38, 0xda, - 0x43, 0xfa, 0x21, 0x5f, 0x9d, 0x9c, 0x2b, 0x8f, 0x66, 0xd4, 0x5f, 0x91, 0x66, 0x10, 0xa6, 0x5a, - 0xc7, 0x57, 0xc3, 0xfb, 0xba, 0x6f, 0x19, 0xc5, 0xfb, 0x50, 0x3c, 0x31, 0x68, 0x9a, 0x9e, 0x47, - 0x0d, 0xb1, 0x4a, 0xe0, 0x7d, 0xa1, 0x77, 0x5f, 0x4b, 0xe0, 0xc9, 0x93, 0x30, 0x8c, 0x30, 0x71, - 0x45, 0xc8, 0xf7, 0xc7, 0xa2, 0x80, 0x73, 0x5f, 0x8b, 0x22, 0xd5, 0x6f, 0x84, 0xb7, 0xc3, 0x33, - 0x54, 0x3f, 0xaa, 0x37, 0x8a, 0xef, 0x91, 0xfe, 0x52, 0xff, 0x36, 0xcf, 0x9f, 0x80, 0xf0, 0xf7, - 0x82, 0x87, 0x21, 0xca, 0xf0, 0x48, 0x37, 0xb7, 0x8b, 0x23, 0xdd, 0x27, 0xa1, 0x30, 0x4b, 0xbd, - 0x55, 0xdb, 0x77, 0xfc, 0x42, 0x0f, 0xbd, 0x26, 0x42, 0x64, 0x0f, 0x3d, 0x4e, 0x43, 0xd6, 0x80, - 0xf8, 0x8f, 0x01, 0x03, 0x47, 0x6c, 0xff, 0x08, 0xf9, 0x6c, 0x62, 0x9f, 0x52, 0xc5, 0x97, 0xc0, - 0xe8, 0x63, 0x7f, 0x2a, 0x70, 0xf4, 0x96, 0x3c, 0xb1, 0xfe, 0x66, 0xb3, 0x58, 0xe0, 0x34, 0x5a, - 0x0a, 0x5b, 0xf2, 0x06, 0x0c, 0xcc, 0x4e, 0x95, 0xc4, 0xc3, 0x40, 0xee, 0x15, 0xf1, 0x50, 0x20, - 0x45, 0x1f, 0x11, 0x88, 0x04, 0xdf, 0xdb, 0x34, 0x97, 0xf5, 0xe4, 0xbb, 0xc0, 0x90, 0x0b, 0xd3, - 0x16, 0xfe, 0x72, 0x47, 0x9c, 0x2e, 0x04, 0xda, 0x12, 0x7d, 0xcf, 0x13, 0x97, 0x15, 0xc7, 0xc6, - 0xb4, 0xa5, 0x7f, 0x1f, 0xa3, 0x7b, 0x1e, 0xc6, 0x4a, 0xad, 0x56, 0xc3, 0xa4, 0x06, 0xea, 0x8b, - 0xd6, 0x6e, 0x50, 0x57, 0xb8, 0xfc, 0xe0, 0x63, 0x10, 0x9d, 0x23, 0x6b, 0xf8, 0x1c, 0xb5, 0xe6, - 0xb4, 0xa3, 0xfe, 0x99, 0xc9, 0xb2, 0xea, 0x8f, 0x67, 0xe1, 0xcc, 0x84, 0x43, 0x75, 0x8f, 0xce, - 0x4e, 0x95, 0x4a, 0x6d, 0xf4, 0x91, 0x6b, 0x34, 0xa8, 0xb5, 0x72, 0x38, 0xc3, 0xfa, 0x25, 0x18, - 0x09, 0x1a, 0x50, 0xad, 0xdb, 0x2d, 0x2a, 0x3f, 0xac, 0xaa, 0xfb, 0x98, 0x9a, 0xcb, 0x50, 0x5a, - 0x8c, 0x94, 0xdc, 0x82, 0x93, 0x01, 0xa4, 0xd4, 0x68, 0xd8, 0xeb, 0x1a, 0x6d, 0xbb, 0xdc, 0x31, - 0xb6, 0x9f, 0x3b, 0xc6, 0x86, 0x1c, 0x74, 0x86, 0xaf, 0x39, 0x8c, 0x40, 0x4b, 0x2b, 0xa5, 0x7e, - 0x25, 0x07, 0x67, 0xef, 0xe8, 0x0d, 0xd3, 0x08, 0x45, 0xa3, 0x51, 0xb7, 0x65, 0x5b, 0x2e, 0x3d, - 0x42, 0xa3, 0x34, 0x32, 0x14, 0xf2, 0x07, 0x32, 0x14, 0x92, 0x5d, 0xd4, 0xbb, 0xef, 0x2e, 0x2a, - 0xec, 0xa9, 0x8b, 0xfe, 0x79, 0x06, 0x46, 0x7d, 0xc7, 0x7f, 0xf9, 0x11, 0xb7, 0xe4, 0x95, 0x8e, - 0x47, 0x88, 0x31, 0x3f, 0x68, 0xc4, 0x93, 0x2a, 0xf4, 0x4d, 0xde, 0x6f, 0x99, 0x0e, 0x75, 0x77, - 0xe0, 0xc4, 0x7d, 0x41, 0x1c, 0x97, 0x8c, 0x51, 0x5e, 0x24, 0x71, 0x52, 0xc2, 0xc1, 0xf8, 0x9c, - 0x8f, 0x3f, 0x7d, 0x18, 0xf7, 0x5f, 0xa6, 0xf3, 0xe7, 0x7c, 0xe2, 0x89, 0x44, 0xe4, 0x7d, 0x66, - 0x48, 0x4a, 0x1e, 0x83, 0xdc, 0xe2, 0xe2, 0x8c, 0x98, 0x49, 0x31, 0x22, 0x80, 0xe7, 0xc9, 0xef, - 0x15, 0x19, 0x56, 0xfd, 0xf3, 0x2c, 0x00, 0x53, 0x05, 0x3e, 0x5c, 0x0f, 0x45, 0x09, 0xc7, 0xa1, - 0xdf, 0x17, 0xb8, 0x50, 0xc3, 0xc0, 0x6b, 0x3f, 0xde, 0x11, 0xf1, 0xba, 0x83, 0x17, 0x1a, 0x45, - 0xdf, 0x91, 0x9c, 0xdf, 0x03, 0xe0, 0xce, 0x06, 0x1d, 0xc9, 0x7d, 0xf7, 0xf1, 0x0f, 0xc0, 0x80, - 0x98, 0xf1, 0xec, 0xc8, 0xf9, 0x7f, 0xdd, 0x07, 0x6a, 0x21, 0x3e, 0x36, 0xb5, 0x16, 0xf6, 0xb1, - 0x10, 0xfb, 0xe2, 0xe5, 0xbd, 0x72, 0x2c, 0xde, 0x03, 0x16, 0xef, 0x17, 0x84, 0x78, 0xf9, 0x0b, - 0x9e, 0x23, 0x2b, 0xde, 0x03, 0x3b, 0xfb, 0x56, 0xff, 0x24, 0x03, 0x84, 0x35, 0x6b, 0x41, 0x77, - 0xdd, 0x75, 0xdb, 0x31, 0xb8, 0x73, 0xfa, 0xa1, 0x08, 0xe6, 0xe0, 0xee, 0x2b, 0xbf, 0xde, 0x0f, - 0x27, 0x23, 0x8e, 0xbf, 0x47, 0x7c, 0xb2, 0xba, 0x12, 0x1d, 0x4d, 0xdd, 0x5e, 0xbd, 0xbc, 0x4f, - 0xbe, 0x10, 0xed, 0x8d, 0x3c, 0x40, 0x93, 0x6e, 0x42, 0x9f, 0x82, 0x21, 0xf1, 0x83, 0xad, 0xd0, - 0xfe, 0x4d, 0x17, 0x8e, 0x52, 0x97, 0x01, 0xb4, 0x08, 0x9a, 0x3c, 0x0b, 0x03, 0x6c, 0xc0, 0xac, - 0x60, 0xf0, 0x90, 0xbe, 0xf0, 0x45, 0x89, 0xe1, 0x03, 0xe5, 0xf5, 0x24, 0xa0, 0x94, 0xde, 0x11, - 0xf5, 0xef, 0xe0, 0x1d, 0xd1, 0x27, 0x61, 0xb0, 0x64, 0x59, 0xb6, 0x87, 0x9b, 0x74, 0x57, 0x5c, - 0x4d, 0x74, 0xb4, 0xca, 0x1f, 0xc3, 0xc7, 0xf1, 0x21, 0x7d, 0xaa, 0x59, 0x2e, 0x33, 0x24, 0xd7, - 0xfd, 0x57, 0x31, 0xd4, 0x11, 0x5e, 0xe5, 0x78, 0x3d, 0xe3, 0x08, 0x58, 0xf2, 0x51, 0x0c, 0x76, - 0xde, 0xf0, 0x82, 0x63, 0xb7, 0x6c, 0x97, 0x1a, 0x5c, 0x50, 0x83, 0x61, 0xa8, 0x81, 0x96, 0x40, - 0xe0, 0x3b, 0xb6, 0x48, 0x20, 0x8f, 0x48, 0x11, 0xb2, 0x0c, 0xa7, 0xfc, 0x8b, 0xe2, 0xe0, 0xc5, - 0x60, 0xa5, 0xec, 0x2a, 0x43, 0xf8, 0x2a, 0x89, 0xc4, 0x95, 0xa1, 0x52, 0x1e, 0xbf, 0xe8, 0x5f, - 0x8b, 0xf8, 0x4f, 0x0e, 0x6b, 0xa6, 0x21, 0x77, 0x75, 0x2a, 0x3f, 0xf2, 0x3d, 0x30, 0x38, 0xab, - 0xdf, 0x2f, 0xb7, 0xc5, 0xd9, 0xcb, 0xf0, 0xce, 0x6f, 0x5f, 0x9a, 0xfa, 0xfd, 0x9a, 0x21, 0xca, - 0xc5, 0x6c, 0x0a, 0x99, 0x25, 0xa9, 0xc1, 0x99, 0x05, 0xc7, 0x6e, 0xda, 0x1e, 0x35, 0x62, 0x8f, - 0xef, 0x4e, 0x84, 0xaf, 0x75, 0x5b, 0x82, 0xa2, 0xd6, 0xe5, 0x15, 0x5e, 0x07, 0x36, 0xa4, 0x09, - 0x27, 0x4a, 0xae, 0xdb, 0x6e, 0xd2, 0xf0, 0x86, 0x6a, 0x74, 0xdb, 0xcf, 0x78, 0xbf, 0xf0, 0x5a, - 0x7e, 0x58, 0xc7, 0xa2, 0xfc, 0x82, 0xaa, 0xe6, 0x99, 0x72, 0x8d, 0xf8, 0x2d, 0x71, 0xde, 0xaf, - 0xe7, 0xfb, 0x47, 0x46, 0x4f, 0x68, 0x67, 0x93, 0x8d, 0x59, 0x34, 0xbd, 0x06, 0x55, 0xbf, 0x96, - 0x01, 0x08, 0x05, 0x4c, 0x9e, 0x8a, 0x46, 0x28, 0xca, 0x84, 0x17, 0x1d, 0x22, 0x7a, 0x41, 0x24, - 0x24, 0x11, 0x39, 0x0f, 0x79, 0x8c, 0x70, 0x91, 0x0d, 0x0f, 0x56, 0xd7, 0x4c, 0xcb, 0xd0, 0x10, - 0xca, 0xb0, 0xd2, 0x53, 0x74, 0xc4, 0xe2, 0xa5, 0x3e, 0xb7, 0x0a, 0xcb, 0x70, 0xa2, 0xda, 0x5e, - 0xf2, 0xeb, 0x96, 0xde, 0xd5, 0x61, 0xa0, 0x0d, 0xb7, 0xbd, 0x14, 0x3c, 0x46, 0x8d, 0x84, 0x31, - 0x89, 0x16, 0x51, 0x7f, 0x2d, 0x13, 0x9b, 0x05, 0x0f, 0x71, 0xd1, 0x7b, 0x5f, 0xd2, 0x4f, 0x23, - 0x39, 0x2d, 0xa9, 0x3f, 0x93, 0x85, 0xc1, 0x05, 0xdb, 0xf1, 0x44, 0xc8, 0x90, 0xa3, 0xbd, 0x0a, - 0x49, 0x7b, 0xa5, 0xfc, 0x2e, 0xf6, 0x4a, 0xe7, 0x21, 0x2f, 0xb9, 0x28, 0xf3, 0x7b, 0x11, 0xc3, - 0x70, 0x34, 0x84, 0xaa, 0xdf, 0x9b, 0x05, 0xf8, 0xc8, 0xd3, 0x4f, 0x3f, 0xc0, 0x02, 0x52, 0x7f, - 0x2a, 0x03, 0x27, 0xc4, 0x45, 0x9d, 0x14, 0xeb, 0xab, 0xcf, 0xbf, 0x62, 0x95, 0xc7, 0x25, 0x07, - 0x69, 0x3e, 0x8e, 0x2d, 0x01, 0x93, 0xf7, 0x4d, 0x0f, 0xef, 0x2a, 0xa4, 0x60, 0x5f, 0x54, 0xc0, - 0xe4, 0x25, 0xc0, 0xa7, 0x23, 0x4f, 0xf9, 0x57, 0x90, 0xb9, 0x70, 0xdd, 0x63, 0x05, 0x26, 0x53, - 0xaf, 0x21, 0xd5, 0xdf, 0xcc, 0x43, 0x7e, 0xf2, 0x3e, 0xad, 0x1f, 0xf1, 0xae, 0x91, 0x0e, 0x36, - 0xf3, 0xfb, 0x3c, 0xd8, 0xdc, 0x8b, 0x4f, 0xc5, 0xab, 0x61, 0x7f, 0x16, 0xa2, 0xd5, 0xc7, 0x7a, - 0x3e, 0x5e, 0xbd, 0xdf, 0xd3, 0x47, 0xcf, 0x25, 0xe7, 0xff, 0xca, 0x41, 0xae, 0x3a, 0xb1, 0x70, - 0xac, 0x37, 0x87, 0xaa, 0x37, 0xdd, 0xef, 0xac, 0xd5, 0xe0, 0x1a, 0xaa, 0x3f, 0xf4, 0x12, 0x8d, - 0xdd, 0x38, 0x7d, 0x3b, 0x07, 0x23, 0xd5, 0xa9, 0xc5, 0x05, 0xe9, 0x24, 0xf8, 0x16, 0xf7, 0xe4, - 0x43, 0x9f, 0x32, 0xde, 0xa5, 0xe7, 0x13, 0xf6, 0xcc, 0xed, 0x8a, 0xe5, 0x3d, 0x77, 0xe3, 0x8e, - 0xde, 0x68, 0x53, 0x3c, 0x7a, 0xe1, 0x7e, 0xbf, 0xae, 0xf9, 0x36, 0xfd, 0x0a, 0x3e, 0xfc, 0xf7, - 0x19, 0x90, 0x97, 0x20, 0x77, 0x5b, 0x78, 0x64, 0x74, 0xe2, 0xf3, 0xcc, 0x75, 0xce, 0x87, 0x4d, - 0x82, 0xb9, 0xb6, 0x69, 0x20, 0x07, 0x56, 0x8a, 0x15, 0xbe, 0x29, 0x16, 0xe0, 0x1d, 0x15, 0x5e, - 0xf1, 0x0b, 0xdf, 0xac, 0x94, 0x49, 0x15, 0x06, 0x17, 0xa8, 0xd3, 0x34, 0xb1, 0xa3, 0xfc, 0x39, - 0xbb, 0x3b, 0x13, 0xb6, 0x53, 0x19, 0x6c, 0x85, 0x85, 0x90, 0x99, 0xcc, 0x85, 0xbc, 0x09, 0xc0, - 0x6d, 0x94, 0x1d, 0xc6, 0x8f, 0xbc, 0x80, 0x76, 0x3f, 0x37, 0x2d, 0x53, 0x6c, 0x3c, 0x89, 0x19, - 0x59, 0x83, 0xd1, 0x59, 0xdb, 0x30, 0x97, 0x4d, 0xee, 0x7a, 0x89, 0x15, 0x14, 0xb6, 0x77, 0x78, - 0x62, 0xa6, 0x64, 0x53, 0x2a, 0x97, 0x56, 0x4d, 0x82, 0xb1, 0xfa, 0xbf, 0xf7, 0x42, 0x9e, 0x75, - 0xfb, 0xf1, 0xf8, 0xdd, 0xcf, 0xf8, 0x2d, 0xc1, 0xe8, 0x5d, 0xdb, 0x59, 0x33, 0xad, 0x95, 0xc0, - 0x2b, 0x5e, 0xec, 0x4d, 0xd1, 0x93, 0x67, 0x9d, 0xe3, 0x6a, 0x81, 0x03, 0xbd, 0x96, 0x20, 0xdf, - 0x66, 0x04, 0xbf, 0x00, 0xc0, 0xdf, 0xba, 0x23, 0x4d, 0x7f, 0x18, 0xac, 0x82, 0xbf, 0x84, 0x47, - 0x47, 0x7b, 0x39, 0x58, 0x45, 0x48, 0xcc, 0x36, 0xe1, 0xdc, 0x17, 0x62, 0x00, 0xfd, 0xee, 0x71, - 0x13, 0x8e, 0xbe, 0x10, 0xb2, 0x11, 0xc0, 0xbd, 0x22, 0x16, 0x00, 0xa4, 0xfb, 0x25, 0x88, 0x09, - 0x22, 0x32, 0x39, 0x88, 0xf0, 0x70, 0x29, 0xd7, 0x4b, 0x9a, 0xc4, 0x83, 0x3c, 0x17, 0xbb, 0x00, - 0x27, 0x11, 0x6e, 0x1d, 0xef, 0xbf, 0x43, 0x07, 0xaa, 0xa1, 0xed, 0x1c, 0xa8, 0xd4, 0xcf, 0x65, - 0x61, 0xa0, 0xda, 0x5e, 0x72, 0x37, 0x5c, 0x8f, 0x36, 0x8f, 0xb8, 0x1a, 0xfb, 0xdb, 0xab, 0x7c, - 0xea, 0xf6, 0xea, 0x31, 0x5f, 0x28, 0xd2, 0xb9, 0x63, 0x60, 0xd2, 0xf9, 0xe2, 0xf8, 0x5f, 0xb3, - 0x30, 0xca, 0x2f, 0xce, 0xca, 0xa6, 0x5b, 0x3f, 0x00, 0x67, 0xfe, 0xc3, 0x97, 0xca, 0xfe, 0x2e, - 0x9b, 0x77, 0xf0, 0x44, 0x42, 0xfd, 0x74, 0x16, 0x06, 0x4b, 0x6d, 0x6f, 0xb5, 0xe4, 0xa1, 0x6e, - 0x3d, 0x90, 0xfb, 0x93, 0x3f, 0xc8, 0xc0, 0x09, 0xd6, 0x90, 0x45, 0x7b, 0x8d, 0x5a, 0x07, 0x70, - 0xf0, 0x28, 0x1f, 0x20, 0x66, 0xf7, 0x78, 0x80, 0xe8, 0xcb, 0x32, 0xb7, 0x3b, 0x59, 0xe2, 0x71, - 0xb9, 0x66, 0x37, 0xe8, 0xd1, 0xfe, 0x8c, 0x03, 0x3c, 0x2e, 0xf7, 0x05, 0x72, 0x00, 0xd7, 0x33, - 0xdf, 0x5d, 0x02, 0x39, 0x80, 0xb3, 0xa5, 0xef, 0x0e, 0x81, 0x7c, 0x3d, 0x03, 0x03, 0xe3, 0xb6, - 0x77, 0xc4, 0x07, 0xbe, 0xf8, 0x8a, 0xa3, 0xad, 0xe6, 0xfe, 0x57, 0x1c, 0x6d, 0xdd, 0x54, 0x7f, - 0x22, 0x0b, 0xa7, 0x44, 0x6c, 0x70, 0x71, 0xfe, 0x70, 0x3c, 0x1d, 0x8b, 0xc1, 0x96, 0x14, 0xcd, - 0xf1, 0x3c, 0x24, 0x44, 0xf3, 0x4b, 0x39, 0x38, 0x85, 0xa1, 0x4c, 0xd9, 0xb6, 0xec, 0xbb, 0xc0, - 0x16, 0x21, 0xf5, 0xe8, 0x25, 0xe8, 0x6c, 0xca, 0x25, 0xe8, 0xdf, 0x6c, 0x16, 0x9f, 0x5b, 0x31, - 0xbd, 0xd5, 0xf6, 0xd2, 0xd5, 0xba, 0xdd, 0xbc, 0xb6, 0xe2, 0xe8, 0xf7, 0x4c, 0x7e, 0xfd, 0xa7, - 0x37, 0xae, 0x05, 0x69, 0x36, 0xf4, 0x96, 0x29, 0x12, 0x70, 0x54, 0x71, 0xaf, 0xc3, 0xb8, 0xfa, - 0xd7, 0xa7, 0x2e, 0xc0, 0xeb, 0xb6, 0x69, 0x09, 0x9f, 0x42, 0x6e, 0xe8, 0x56, 0xd9, 0xfe, 0xf0, - 0x2d, 0xdb, 0xb4, 0x6a, 0x71, 0xc7, 0xc2, 0xdd, 0xd6, 0x17, 0xb2, 0xd6, 0xa4, 0x6a, 0xd4, 0xff, - 0x3f, 0x03, 0x0f, 0x45, 0xb5, 0xf8, 0xbb, 0xc1, 0x76, 0xfc, 0xc9, 0x2c, 0x9c, 0xbe, 0x89, 0xc2, - 0x09, 0x1c, 0x39, 0x8e, 0xe7, 0x2d, 0x31, 0x38, 0x53, 0x64, 0x73, 0x6c, 0x51, 0x76, 0x96, 0xcd, - 0xf1, 0xa4, 0x2e, 0x64, 0xf3, 0x87, 0x19, 0x38, 0x39, 0x5f, 0x29, 0x4f, 0x7c, 0x97, 0x8c, 0xa8, - 0xe4, 0xf7, 0x1c, 0x71, 0x83, 0x33, 0xf1, 0x3d, 0x47, 0xdc, 0xf4, 0xfc, 0x52, 0x16, 0x4e, 0x56, - 0x4b, 0xb3, 0x33, 0xdf, 0x2d, 0x33, 0xf8, 0x84, 0xec, 0x75, 0xe8, 0x1f, 0x82, 0x09, 0x5b, 0x40, - 0xfe, 0xcc, 0x3b, 0xd7, 0x3b, 0x7b, 0x23, 0x26, 0x85, 0x72, 0xc4, 0xa7, 0xee, 0x03, 0x11, 0x0a, - 0xd3, 0xfc, 0x08, 0xf5, 0x11, 0xd7, 0xfc, 0xff, 0xb3, 0x00, 0x83, 0xb7, 0xda, 0x4b, 0x54, 0x38, - 0xa7, 0x3c, 0xd0, 0x27, 0xbf, 0xd7, 0x61, 0x50, 0x88, 0x01, 0x6f, 0x4d, 0xa4, 0xe0, 0x79, 0x22, - 0x18, 0x0a, 0x8f, 0x4f, 0x24, 0x13, 0x91, 0xf3, 0x90, 0xbf, 0x43, 0x9d, 0x25, 0xf9, 0x5d, 0xe9, - 0x3d, 0xea, 0x2c, 0x69, 0x08, 0x25, 0x33, 0xa1, 0xcb, 0x7c, 0x69, 0xa1, 0x82, 0x89, 0x54, 0xc4, - 0x85, 0x0d, 0x66, 0x86, 0x09, 0xfc, 0xde, 0xf4, 0x96, 0xc9, 0x53, 0xb0, 0xc8, 0x6f, 0xda, 0xe3, - 0x25, 0xc9, 0x1c, 0x8c, 0xc9, 0x8e, 0x4f, 0x3c, 0x8b, 0x48, 0x7f, 0x0a, 0xbb, 0xb4, 0xfc, 0x21, - 0xc9, 0xa2, 0xe4, 0x55, 0x18, 0xf2, 0x81, 0xe8, 0xc2, 0x35, 0x10, 0x86, 0xae, 0x0f, 0x58, 0xc5, - 0x52, 0x14, 0x45, 0x0a, 0xc8, 0x0c, 0xf0, 0x1a, 0x02, 0x52, 0x18, 0xc4, 0x5c, 0xe2, 0x22, 0x05, - 0xc8, 0xb3, 0xc8, 0x00, 0x9f, 0x79, 0xa0, 0xb3, 0xca, 0x20, 0x3e, 0xba, 0x44, 0x97, 0x7c, 0x47, - 0xc0, 0xf9, 0xd3, 0xda, 0x08, 0x19, 0x99, 0x07, 0x08, 0x9d, 0x0a, 0x44, 0x00, 0x83, 0x5d, 0xbb, - 0x3b, 0x48, 0x2c, 0xe4, 0xeb, 0xc0, 0xe1, 0xbd, 0x5c, 0x07, 0xaa, 0x7f, 0x9c, 0x85, 0xc1, 0x52, - 0xab, 0x15, 0x0c, 0x85, 0xa7, 0xa0, 0x50, 0x6a, 0xb5, 0x6e, 0x6b, 0x15, 0x39, 0x94, 0xb9, 0xde, - 0x6a, 0xd5, 0xda, 0x8e, 0x29, 0xfb, 0x84, 0x72, 0x22, 0x32, 0x01, 0xc3, 0xa5, 0x56, 0x6b, 0xa1, - 0xbd, 0xd4, 0x30, 0xeb, 0x52, 0x66, 0x24, 0x9e, 0x3b, 0xae, 0xd5, 0xaa, 0xb5, 0x10, 0x13, 0x4f, - 0x8f, 0x15, 0x2d, 0x43, 0x3e, 0x89, 0x61, 0x7f, 0x44, 0x62, 0x1e, 0x9e, 0xfa, 0x43, 0x0d, 0x82, - 0x98, 0x87, 0x6d, 0xbb, 0x1a, 0x10, 0xf1, 0x60, 0xef, 0xe7, 0xfd, 0x90, 0xf9, 0xac, 0xa2, 0x44, - 0x02, 0x9e, 0x90, 0x25, 0xf9, 0x20, 0xf4, 0x95, 0x5a, 0x2d, 0xe9, 0xbe, 0x09, 0x9d, 0x8a, 0x58, - 0xa9, 0x78, 0xee, 0x33, 0x41, 0x76, 0xee, 0x65, 0x18, 0x89, 0x56, 0xb6, 0xab, 0x60, 0xf1, 0xdf, - 0xc9, 0xe0, 0x07, 0x1d, 0x71, 0x9f, 0xe6, 0x67, 0x20, 0x57, 0x6a, 0xb5, 0xc4, 0x7c, 0x74, 0x32, - 0xa5, 0x3f, 0xe2, 0x4f, 0xa0, 0x4b, 0xad, 0x96, 0xff, 0xe9, 0x47, 0xfc, 0x71, 0xc4, 0x9e, 0x3e, - 0xfd, 0xeb, 0xfc, 0xd3, 0x8f, 0xf6, 0xc3, 0x05, 0xf5, 0x37, 0x73, 0x70, 0xa2, 0xd4, 0x6a, 0x1d, - 0x07, 0x99, 0x3f, 0xa8, 0x87, 0xd6, 0x4f, 0x03, 0x48, 0xd3, 0x63, 0x5f, 0xf0, 0x74, 0x6b, 0x50, - 0x9a, 0x1a, 0x95, 0x8c, 0x26, 0x11, 0xf9, 0xea, 0xd7, 0xbf, 0x2b, 0xf5, 0xfb, 0x74, 0x0e, 0xa7, - 0xe2, 0xa3, 0x1e, 0x34, 0xea, 0xbd, 0xd2, 0x6d, 0xa2, 0x0f, 0x0a, 0xbb, 0xea, 0x83, 0xdf, 0x8f, - 0x0c, 0x1e, 0x0c, 0x5a, 0x7e, 0xdc, 0x0b, 0xbd, 0xfb, 0x32, 0x8b, 0x47, 0x64, 0x61, 0x8a, 0x48, - 0x36, 0x7e, 0x22, 0x25, 0x11, 0x57, 0xa9, 0xce, 0x50, 0x35, 0xd3, 0xd0, 0x62, 0xb4, 0x7e, 0x1f, - 0xf6, 0xed, 0xaa, 0x0f, 0x37, 0xb3, 0xf8, 0x76, 0x3a, 0x88, 0xcb, 0xb4, 0xff, 0xdd, 0xc5, 0x35, - 0x00, 0xee, 0x79, 0x10, 0xb8, 0x35, 0x0f, 0xf3, 0x10, 0x2c, 0x3c, 0xbf, 0x92, 0x08, 0xc1, 0x12, - 0x92, 0x04, 0x1e, 0x52, 0xb9, 0x54, 0x0f, 0xa9, 0x2b, 0xd0, 0xaf, 0xe9, 0xeb, 0x6f, 0xb4, 0xa9, - 0xb3, 0x21, 0xcc, 0x19, 0x1e, 0xf6, 0x50, 0x5f, 0xaf, 0x7d, 0x8a, 0x01, 0xb5, 0x00, 0x4d, 0xd4, - 0xe0, 0xf1, 0xbd, 0xe4, 0x11, 0xc2, 0xcf, 0xc8, 0x83, 0x27, 0xf7, 0x7b, 0x51, 0x74, 0xf2, 0x22, - 0xe4, 0x4a, 0x77, 0xab, 0x42, 0xb2, 0x41, 0xd7, 0x96, 0xee, 0x56, 0x85, 0xbc, 0x3a, 0x96, 0xbd, - 0x5b, 0x55, 0x3f, 0x9d, 0x05, 0x92, 0xa4, 0x24, 0xcf, 0xc1, 0x00, 0x42, 0x57, 0x98, 0xce, 0xc8, - 0x89, 0x39, 0xd7, 0xdd, 0x9a, 0x83, 0xd0, 0x88, 0x71, 0xe7, 0x93, 0x92, 0x17, 0x30, 0xf5, 0xb1, - 0x48, 0x0d, 0x17, 0x49, 0xcc, 0xb9, 0xee, 0xfa, 0xc9, 0x82, 0x63, 0x99, 0x8f, 0x05, 0x31, 0xda, - 0x85, 0x77, 0xab, 0xd3, 0xb6, 0xeb, 0x09, 0x51, 0x73, 0xbb, 0x70, 0xdd, 0xc5, 0x8c, 0xb0, 0x11, - 0xbb, 0x90, 0x93, 0x61, 0x56, 0xab, 0xbb, 0x55, 0xfe, 0x4c, 0xc5, 0xd0, 0xec, 0x86, 0x6f, 0x50, - 0xf2, 0xac, 0x56, 0xeb, 0x6e, 0x8d, 0x3f, 0x71, 0x31, 0x30, 0xe7, 0x72, 0x24, 0xab, 0x55, 0xa4, - 0x94, 0xfa, 0xf9, 0x7e, 0x18, 0x2d, 0xeb, 0x9e, 0xbe, 0xa4, 0xbb, 0x54, 0xda, 0x4d, 0x9f, 0xf0, - 0x61, 0xfe, 0xe7, 0x48, 0x72, 0x30, 0x96, 0x52, 0xbe, 0x26, 0x5e, 0x80, 0xbc, 0x14, 0xf2, 0x0d, - 0x72, 0x8e, 0xca, 0x49, 0xcc, 0x96, 0x6a, 0x2d, 0x01, 0xd6, 0x12, 0x84, 0xe4, 0x49, 0x18, 0xf4, - 0x61, 0x6c, 0x03, 0x90, 0x0b, 0x75, 0xc6, 0x58, 0x62, 0xf6, 0xbf, 0x26, 0xa3, 0xc9, 0x0b, 0x30, - 0xe4, 0xff, 0x94, 0x4c, 0x6b, 0x9e, 0x91, 0x6d, 0x29, 0xb1, 0x7b, 0x92, 0x49, 0xe5, 0xa2, 0x38, - 0xbf, 0xf5, 0x46, 0x8a, 0xc6, 0x92, 0x9e, 0x45, 0x48, 0xc9, 0xa7, 0x60, 0xc4, 0xff, 0x2d, 0x36, - 0x0c, 0x3c, 0x3f, 0xdc, 0x93, 0x41, 0x4a, 0xe7, 0x98, 0x58, 0xaf, 0x46, 0xc9, 0xf9, 0xd6, 0xe1, - 0x61, 0x3f, 0x8f, 0x97, 0xb1, 0x94, 0xdc, 0x39, 0xc4, 0x2a, 0x20, 0x15, 0x18, 0xf3, 0x21, 0xa1, - 0x86, 0xf6, 0x85, 0x3b, 0x46, 0x63, 0xa9, 0x96, 0xaa, 0xa4, 0xc9, 0x52, 0xa4, 0x01, 0xe7, 0x23, - 0x40, 0xc3, 0x5d, 0x35, 0x97, 0x3d, 0xb1, 0xdd, 0x13, 0x31, 0x88, 0x45, 0xe2, 0xc6, 0x80, 0x2b, - 0xa7, 0xf1, 0x33, 0xb0, 0x46, 0xb3, 0x43, 0x75, 0xe5, 0x46, 0xaa, 0x70, 0xca, 0xc7, 0xdf, 0x9c, - 0x58, 0x58, 0x70, 0xec, 0xb7, 0x68, 0xdd, 0xab, 0x94, 0xc5, 0x76, 0x19, 0x63, 0xd3, 0x19, 0x4b, - 0xb5, 0x95, 0x7a, 0x8b, 0x29, 0x05, 0xc3, 0x45, 0x99, 0xa7, 0x16, 0x26, 0x77, 0xe0, 0xb4, 0x04, - 0x97, 0xd2, 0x43, 0x43, 0xb8, 0x9f, 0x17, 0x5c, 0xd3, 0x33, 0x44, 0xa7, 0x17, 0x27, 0x2f, 0xc3, - 0xb0, 0x8f, 0xe0, 0xb7, 0x88, 0x83, 0x78, 0x8b, 0x88, 0x43, 0xd2, 0x58, 0xaa, 0xc5, 0x5f, 0x53, - 0x46, 0x89, 0x65, 0x8d, 0xc2, 0x8c, 0xfa, 0x43, 0x11, 0x8d, 0xf2, 0x36, 0x5a, 0xa9, 0xca, 0x88, - 0x59, 0xf6, 0x5f, 0x0d, 0x35, 0x6a, 0xde, 0x31, 0x57, 0x4c, 0xbe, 0x93, 0xf6, 0x1f, 0x50, 0x2e, - 0xd5, 0x6c, 0x04, 0xa6, 0xe9, 0x07, 0x27, 0x3f, 0x57, 0x82, 0x93, 0x29, 0x3a, 0xb6, 0xab, 0x1d, - 0xe3, 0xe7, 0xb2, 0x61, 0x23, 0x8e, 0xf8, 0xb6, 0x71, 0x1c, 0xfa, 0xfd, 0x2f, 0x11, 0xc6, 0x83, - 0xd2, 0x69, 0x68, 0xc6, 0x79, 0xf8, 0xf8, 0x88, 0x38, 0x8e, 0xf8, 0x56, 0xf2, 0x20, 0xc4, 0xf1, - 0x4e, 0x26, 0x14, 0xc7, 0x11, 0xdf, 0x5e, 0xfe, 0x61, 0x2e, 0x9c, 0x93, 0x8e, 0xf7, 0x98, 0x07, - 0x65, 0x26, 0x87, 0x7e, 0xb0, 0x85, 0x5d, 0x3c, 0x64, 0x94, 0x55, 0xb3, 0x6f, 0x8f, 0xaa, 0xf9, - 0xa7, 0xc9, 0xfe, 0xe4, 0xa6, 0xe7, 0x91, 0xec, 0xcf, 0x03, 0x18, 0xac, 0xe4, 0x7a, 0xb8, 0x8e, - 0x71, 0x1b, 0xbd, 0x57, 0x0a, 0xf1, 0xb7, 0x24, 0x4c, 0xf4, 0x28, 0x09, 0xf9, 0x18, 0x9c, 0x8d, - 0x00, 0x16, 0x74, 0x47, 0x6f, 0x52, 0x2f, 0xcc, 0x38, 0x88, 0x41, 0x9b, 0xfc, 0xd2, 0xb5, 0x56, - 0x80, 0x96, 0xb3, 0x18, 0x76, 0xe0, 0x20, 0x29, 0x47, 0xdf, 0x2e, 0x9c, 0xa4, 0xbf, 0x9c, 0x0b, - 0x4d, 0x95, 0x68, 0xf0, 0x55, 0x8d, 0xba, 0xed, 0x86, 0xf7, 0xe0, 0x76, 0xf0, 0xde, 0x52, 0x5b, - 0x4c, 0xc3, 0x89, 0xd2, 0xf2, 0x32, 0xad, 0x7b, 0x7e, 0x4c, 0x69, 0x57, 0x84, 0xdb, 0xe3, 0x5b, - 0x07, 0x81, 0x12, 0x31, 0x82, 0x23, 0xb9, 0xf1, 0x63, 0xc5, 0xd4, 0x3f, 0xcb, 0x83, 0x12, 0x98, - 0xee, 0xc1, 0x43, 0xad, 0x43, 0x5c, 0x26, 0xdf, 0x13, 0xbd, 0x62, 0xc2, 0x58, 0x28, 0x8c, 0x6a, - 0xbb, 0xd9, 0xd4, 0x71, 0xe8, 0xb1, 0xad, 0x41, 0x31, 0xce, 0x2c, 0x24, 0xe4, 0xbb, 0x81, 0x73, - 0x62, 0x37, 0x40, 0xc2, 0x87, 0x70, 0x35, 0x97, 0xb3, 0xd0, 0x92, 0x5c, 0xc9, 0x17, 0x32, 0x70, - 0xca, 0xef, 0x94, 0xf9, 0x25, 0x66, 0x16, 0x4f, 0xd8, 0x6d, 0xcb, 0xf3, 0x77, 0x22, 0x2f, 0x76, - 0xae, 0x8e, 0x77, 0xd2, 0xd5, 0xb4, 0xc2, 0xbc, 0x25, 0x41, 0x60, 0x89, 0x40, 0x21, 0x6c, 0xa4, - 0xa9, 0xd5, 0x91, 0x48, 0x4b, 0xad, 0xf7, 0xdc, 0x4d, 0x78, 0xa8, 0x23, 0xcb, 0xed, 0xcc, 0xd0, - 0x5e, 0xd9, 0x0c, 0xfd, 0xfb, 0x99, 0x70, 0x22, 0x8a, 0x09, 0x89, 0x5c, 0x05, 0x08, 0x41, 0x62, - 0x63, 0x3a, 0xb2, 0xb5, 0x59, 0x84, 0x50, 0x68, 0x9a, 0x44, 0x41, 0xe6, 0xa1, 0x20, 0xc4, 0xc2, - 0xb3, 0xfb, 0x7e, 0x60, 0x9b, 0x5e, 0xb8, 0x2a, 0xcb, 0x01, 0x37, 0x9d, 0xe2, 0x9b, 0x05, 0x9b, - 0x73, 0x2f, 0xc0, 0xe0, 0x5e, 0xbf, 0xeb, 0x0b, 0x39, 0x20, 0xf2, 0x2e, 0xf2, 0x10, 0x4d, 0xec, - 0x23, 0x3c, 0x85, 0x5d, 0x86, 0x7e, 0xf6, 0x09, 0x98, 0xef, 0x42, 0x8a, 0x6f, 0xdb, 0x16, 0x30, - 0x2d, 0xc0, 0x86, 0xc1, 0xa5, 0xfa, 0xd2, 0x83, 0x4b, 0xa9, 0x3f, 0x96, 0x83, 0x33, 0x72, 0x87, - 0x94, 0x29, 0x86, 0xcc, 0x3f, 0xee, 0x94, 0x77, 0xb1, 0x53, 0x54, 0x28, 0xf0, 0xcd, 0x83, 0xc8, - 0x5d, 0xc0, 0x0f, 0x76, 0x10, 0xa2, 0x09, 0x8c, 0xfa, 0x4f, 0xb2, 0x30, 0xbc, 0x60, 0xbb, 0xde, - 0x8a, 0x43, 0xdd, 0x05, 0xdd, 0x71, 0x1f, 0xe0, 0xee, 0xf8, 0x10, 0x0c, 0x63, 0x78, 0xa0, 0x26, - 0xb5, 0x78, 0x08, 0x9d, 0x5e, 0x29, 0xd9, 0x88, 0x8f, 0x10, 0x79, 0xa5, 0x22, 0x84, 0x4c, 0xfb, - 0xb9, 0xe5, 0x27, 0x05, 0x6d, 0xe2, 0x66, 0x1f, 0x87, 0xab, 0x3f, 0x97, 0x83, 0x21, 0x5f, 0xca, - 0xe3, 0xe6, 0x51, 0xbd, 0xa9, 0x39, 0x5c, 0x21, 0x5f, 0x03, 0x58, 0xb0, 0x1d, 0x4f, 0x6f, 0xcc, - 0x85, 0x9a, 0x8f, 0x47, 0x9c, 0x2d, 0x84, 0xf2, 0x32, 0x12, 0x09, 0xae, 0x5f, 0xa1, 0x59, 0xcd, - 0x27, 0x26, 0xbe, 0x7e, 0x05, 0x50, 0x4d, 0xa2, 0x50, 0x7f, 0x37, 0x0b, 0x27, 0xfc, 0x4e, 0x9a, - 0xbc, 0x4f, 0xeb, 0xed, 0x07, 0x79, 0x6e, 0x8a, 0x4a, 0xbb, 0x77, 0x5b, 0x69, 0xab, 0xff, 0x5a, - 0x9a, 0x48, 0x26, 0x1a, 0xf6, 0xf1, 0x44, 0xf2, 0x77, 0xa1, 0xe3, 0xea, 0xf7, 0xe7, 0xe0, 0x94, - 0x2f, 0xf5, 0xa9, 0xb6, 0x85, 0x87, 0x03, 0x13, 0x7a, 0xa3, 0xf1, 0x20, 0xef, 0xc6, 0x07, 0x7d, - 0x41, 0xcc, 0x8b, 0x78, 0x7b, 0x22, 0xc7, 0xdf, 0xb2, 0x00, 0xd7, 0x6c, 0xd3, 0xd0, 0x64, 0x22, - 0xf2, 0x2a, 0x0c, 0xf9, 0x3f, 0x4b, 0xce, 0x8a, 0xbf, 0x05, 0xc7, 0xa3, 0xfe, 0xa0, 0x90, 0xee, - 0x44, 0xc2, 0x0a, 0x44, 0x0a, 0xa8, 0xff, 0xac, 0x00, 0xe7, 0xee, 0x9a, 0x96, 0x61, 0xaf, 0xbb, - 0x7e, 0x8a, 0xc8, 0x23, 0x7f, 0xd4, 0x75, 0xd8, 0xa9, 0x21, 0xdf, 0x80, 0xd3, 0x71, 0x91, 0x3a, - 0x41, 0xe0, 0x6e, 0xd1, 0x3b, 0xeb, 0x9c, 0xa0, 0xe6, 0x27, 0x8b, 0x14, 0xf7, 0x65, 0x5a, 0x7a, - 0xc9, 0x78, 0xb6, 0xc9, 0xbe, 0x9d, 0x64, 0x9b, 0x7c, 0x02, 0x0a, 0x65, 0xbb, 0xa9, 0x9b, 0x7e, - 0x80, 0x19, 0x1c, 0xc5, 0x41, 0xbd, 0x88, 0xd1, 0x04, 0x05, 0xe3, 0x2f, 0x2a, 0xc6, 0x2e, 0x1b, - 0x08, 0xf9, 0xfb, 0x05, 0x98, 0x95, 0xa6, 0xc9, 0x44, 0xc4, 0x86, 0x61, 0x51, 0x9d, 0xb8, 0xdd, - 0x02, 0xdc, 0x3c, 0x3d, 0xeb, 0xcb, 0xa8, 0xb3, 0x5a, 0x5d, 0x8d, 0x94, 0xe3, 0xdb, 0x28, 0x9e, - 0x04, 0x53, 0x7c, 0x0c, 0xbf, 0xe7, 0xd2, 0xa2, 0xfc, 0x25, 0x21, 0xe0, 0x24, 0x33, 0x98, 0x14, - 0x02, 0xce, 0x32, 0x32, 0x11, 0x99, 0x84, 0x31, 0x0c, 0xaf, 0x1c, 0x6c, 0xa5, 0x98, 0x4a, 0x0c, - 0xa1, 0x51, 0x89, 0x97, 0x26, 0x3c, 0x22, 0x33, 0xfb, 0xb8, 0x5a, 0x5d, 0xa0, 0xb5, 0x64, 0x89, - 0x73, 0xaf, 0x01, 0x49, 0xb6, 0x79, 0x57, 0xd7, 0x26, 0xff, 0xb7, 0xb4, 0xaf, 0x3b, 0xea, 0x8e, - 0x2f, 0x07, 0x31, 0xdb, 0x45, 0x52, 0x87, 0xf5, 0xbe, 0x9b, 0xa9, 0xc3, 0x0a, 0x07, 0x9a, 0x3a, - 0x4c, 0xfd, 0xd5, 0x0c, 0x8c, 0x25, 0xe2, 0x8c, 0x93, 0x67, 0x00, 0x38, 0x44, 0x8a, 0xe7, 0x88, - 0x01, 0x52, 0xc2, 0xd8, 0xe3, 0x62, 0x0d, 0x0c, 0xc9, 0xc8, 0x35, 0xe8, 0xe7, 0xbf, 0x44, 0x0c, - 0xa6, 0x64, 0x91, 0x76, 0xdb, 0x34, 0xb4, 0x80, 0x28, 0xac, 0x05, 0x2f, 0x0e, 0x73, 0xa9, 0x45, - 0xbc, 0x8d, 0x56, 0x50, 0x0b, 0x23, 0x53, 0x3f, 0x9f, 0x85, 0xa1, 0xa0, 0xc1, 0x25, 0xe3, 0xb0, - 0x74, 0xae, 0x20, 0x42, 0xb6, 0xe7, 0xb6, 0x0b, 0xd9, 0x1e, 0x9b, 0x54, 0x45, 0x8c, 0xf6, 0x83, - 0x7b, 0xf7, 0xf4, 0xc5, 0x2c, 0x9c, 0x08, 0x6a, 0x3d, 0xc4, 0x3b, 0xaa, 0xf7, 0x90, 0x48, 0xbe, - 0x90, 0x01, 0x65, 0xdc, 0x6c, 0x34, 0x4c, 0x6b, 0xa5, 0x62, 0x2d, 0xdb, 0x4e, 0x13, 0x67, 0xbd, - 0xc3, 0x3b, 0xa7, 0x55, 0x7f, 0x28, 0x03, 0x63, 0xa2, 0x41, 0x13, 0xba, 0x63, 0x1c, 0xde, 0x21, - 0x58, 0xbc, 0x25, 0x87, 0xa7, 0x2f, 0xea, 0x57, 0xb3, 0x00, 0x33, 0x76, 0x7d, 0xed, 0x88, 0x3f, - 0x9b, 0x7a, 0x09, 0x0a, 0x3c, 0x10, 0x96, 0xd0, 0xd8, 0x31, 0xf1, 0x3c, 0x88, 0x7d, 0x1a, 0x47, - 0x8c, 0x8f, 0x8a, 0xf9, 0xb8, 0xc0, 0x03, 0x69, 0x29, 0x19, 0x4d, 0x14, 0x61, 0x95, 0x32, 0x3a, - 0xb1, 0x60, 0x04, 0x95, 0x32, 0x58, 0xb4, 0xd2, 0xad, 0xcd, 0x62, 0xbe, 0x61, 0xd7, 0xd7, 0x34, - 0xa4, 0x57, 0xff, 0x36, 0xc3, 0x65, 0x77, 0xc4, 0x1f, 0x7f, 0xfa, 0x9f, 0x9f, 0xdf, 0xe5, 0xe7, - 0xff, 0x70, 0x06, 0x4e, 0x69, 0xb4, 0x6e, 0xdf, 0xa3, 0xce, 0xc6, 0x84, 0x6d, 0xd0, 0x9b, 0xd4, - 0xa2, 0xce, 0x61, 0x8d, 0xa8, 0xff, 0x0d, 0x73, 0x5c, 0x84, 0x8d, 0xb9, 0xed, 0x52, 0xe3, 0xe8, - 0xe4, 0x1f, 0x51, 0x7f, 0xa3, 0x0f, 0x94, 0x54, 0xd3, 0xf6, 0xc8, 0x9a, 0x73, 0x1d, 0xf7, 0x2b, - 0xf9, 0x83, 0xda, 0xaf, 0xf4, 0xee, 0x6e, 0xbf, 0x52, 0xd8, 0xed, 0x7e, 0xa5, 0x6f, 0x27, 0xfb, - 0x95, 0x66, 0x7c, 0xbf, 0xd2, 0x8f, 0xfb, 0x95, 0x67, 0xba, 0xee, 0x57, 0x26, 0x2d, 0x63, 0x8f, - 0xbb, 0x95, 0x23, 0x9b, 0x1b, 0x77, 0x2f, 0xdb, 0xac, 0xcb, 0x6c, 0x52, 0xac, 0xdb, 0x8e, 0x41, - 0x0d, 0xb1, 0xbb, 0xc2, 0xa3, 0x7d, 0x47, 0xc0, 0xb4, 0x00, 0x9b, 0x48, 0x34, 0x3c, 0xbc, 0x93, - 0x44, 0xc3, 0x07, 0xb0, 0xff, 0xfa, 0x5c, 0x16, 0xc6, 0x26, 0xa8, 0xe3, 0xf1, 0x48, 0x9b, 0x07, - 0xe1, 0xb9, 0x56, 0x82, 0x13, 0x12, 0x43, 0xb4, 0xc8, 0xb3, 0xa1, 0x37, 0x5e, 0x9d, 0x3a, 0x5e, - 0xdc, 0x99, 0x2f, 0x4e, 0xcf, 0xaa, 0xf7, 0x93, 0x7d, 0x89, 0xb1, 0x1b, 0x54, 0xef, 0xc3, 0xb9, - 0x20, 0x4d, 0xf1, 0x4b, 0x0b, 0xe8, 0xa5, 0xfc, 0x5d, 0xf9, 0xdd, 0xe7, 0xef, 0x52, 0x7f, 0x25, - 0x03, 0x97, 0x34, 0x6a, 0xd1, 0x75, 0x7d, 0xa9, 0x41, 0xa5, 0x66, 0x89, 0x95, 0x81, 0xcd, 0x1a, - 0xa6, 0xdb, 0xd4, 0xbd, 0xfa, 0xea, 0xbe, 0x64, 0x34, 0x05, 0x43, 0xf2, 0xfc, 0xb5, 0x8b, 0xb9, - 0x2d, 0x52, 0x4e, 0xfd, 0x8d, 0x3c, 0xf4, 0x8d, 0xdb, 0xde, 0xeb, 0xf6, 0x3e, 0x13, 0xca, 0x85, - 0x53, 0x7e, 0x76, 0x17, 0x07, 0x3a, 0x1f, 0xc4, 0xca, 0xa5, 0x18, 0xfb, 0xe8, 0xe9, 0xb9, 0x64, - 0x27, 0x72, 0x11, 0xf8, 0x64, 0xbb, 0x4c, 0x25, 0xf7, 0x1c, 0x0c, 0x60, 0x90, 0x16, 0xe9, 0xc8, - 0x15, 0xfd, 0xa8, 0x3d, 0x06, 0x8c, 0xd7, 0x11, 0x92, 0x92, 0x8f, 0x45, 0x42, 0x83, 0x16, 0xf6, - 0x9f, 0x7a, 0x4e, 0x8e, 0x12, 0xfa, 0x0c, 0xbf, 0xad, 0xc3, 0x36, 0x49, 0x69, 0x3a, 0xf0, 0xa8, - 0x24, 0xd6, 0xa4, 0x80, 0xf0, 0x00, 0xd3, 0xc2, 0x4d, 0xc0, 0xf0, 0xb8, 0xed, 0x49, 0x3e, 0xbb, - 0x03, 0xe1, 0x6b, 0x4d, 0x26, 0xf9, 0x74, 0x87, 0xdd, 0x68, 0x19, 0xf5, 0xdb, 0x79, 0x18, 0xf2, - 0x7f, 0x1e, 0x92, 0xee, 0x3c, 0x05, 0x85, 0x69, 0x5b, 0xca, 0x54, 0x80, 0x7e, 0xbe, 0xab, 0xb6, - 0x1b, 0x73, 0x60, 0x16, 0x44, 0x4c, 0xea, 0x73, 0xb6, 0x21, 0x7b, 0xa9, 0xa3, 0xd4, 0x2d, 0xdb, - 0x48, 0xbc, 0xf2, 0x0d, 0x08, 0xc9, 0x25, 0xc8, 0xa3, 0x83, 0xbf, 0x74, 0x5a, 0x1f, 0x73, 0xea, - 0x47, 0xbc, 0xa4, 0x95, 0x85, 0xdd, 0x6a, 0x65, 0xdf, 0x5e, 0xb5, 0xb2, 0xff, 0x60, 0xb5, 0xf2, - 0x4d, 0x18, 0xc2, 0x9a, 0xfc, 0x44, 0x67, 0xdb, 0x2f, 0xac, 0x0f, 0x89, 0xb5, 0x6f, 0x98, 0xb7, - 0x5b, 0xa4, 0x3b, 0xc3, 0x25, 0x2f, 0xc2, 0x2a, 0xa6, 0xbb, 0xb0, 0x8f, 0xed, 0xf4, 0x9f, 0x66, - 0xa0, 0xef, 0xb6, 0xb5, 0x66, 0xd9, 0xeb, 0xfb, 0xd3, 0xb8, 0x67, 0x60, 0x50, 0xb0, 0x91, 0x56, - 0x17, 0x7c, 0xb8, 0xdd, 0xe6, 0xe0, 0x1a, 0x72, 0xd2, 0x64, 0x2a, 0xf2, 0x72, 0x50, 0x08, 0xdf, - 0xf0, 0xe4, 0xc2, 0x5c, 0x1f, 0x7e, 0xa1, 0x7a, 0x34, 0x3d, 0x81, 0x4c, 0x4e, 0xce, 0x43, 0xbe, - 0xcc, 0x9a, 0x2a, 0x05, 0xbb, 0x65, 0x4d, 0xd1, 0x10, 0xaa, 0x7e, 0x2e, 0x0f, 0x23, 0xb1, 0x83, - 0xaf, 0x27, 0x60, 0x40, 0x1c, 0x3c, 0x99, 0x7e, 0xbe, 0x04, 0x7c, 0xe3, 0x13, 0x00, 0xb5, 0x7e, - 0xfe, 0x67, 0xc5, 0x20, 0x1f, 0x86, 0x3e, 0xdb, 0xc5, 0x45, 0x11, 0xbf, 0x65, 0x24, 0x1c, 0x42, - 0xf3, 0x55, 0xd6, 0x76, 0x3e, 0x38, 0x04, 0x89, 0xac, 0x91, 0xb6, 0x8b, 0x9f, 0x76, 0x03, 0x06, - 0x74, 0xd7, 0xa5, 0x5e, 0xcd, 0xd3, 0x57, 0xe4, 0x14, 0x0a, 0x01, 0x50, 0x1e, 0x1d, 0x08, 0x5c, - 0xd4, 0x57, 0xc8, 0x6b, 0x30, 0x5c, 0x77, 0x28, 0x2e, 0x9b, 0x7a, 0x83, 0xb5, 0x52, 0x32, 0x6b, - 0x23, 0x08, 0xf9, 0x92, 0x24, 0x44, 0x54, 0x0c, 0x72, 0x07, 0x86, 0xc5, 0xe7, 0x70, 0x07, 0x7b, - 0x1c, 0x68, 0x23, 0xe1, 0x32, 0xc6, 0x45, 0xc2, 0x5d, 0xec, 0xc5, 0x3b, 0x0b, 0x99, 0x5c, 0xe6, - 0x6b, 0x48, 0xa4, 0x64, 0x1e, 0xc8, 0x3a, 0x5d, 0xaa, 0xe9, 0x6d, 0x6f, 0x95, 0xd5, 0xc5, 0x23, - 0x80, 0x8b, 0xcc, 0x81, 0xf8, 0x38, 0x21, 0x89, 0x95, 0xdf, 0x6c, 0xac, 0xd3, 0xa5, 0x52, 0x04, - 0x49, 0xee, 0xc2, 0xe9, 0x64, 0x11, 0xf6, 0xc9, 0xfc, 0x06, 0xe0, 0xb1, 0xad, 0xcd, 0x62, 0x31, - 0x95, 0x40, 0x62, 0x7b, 0x32, 0xc1, 0xb6, 0x62, 0xbc, 0x9e, 0xef, 0xef, 0x1b, 0xed, 0xd7, 0x46, - 0x58, 0x59, 0xdf, 0x84, 0x34, 0x0d, 0xf5, 0x1b, 0x19, 0x66, 0x2a, 0xb2, 0x0f, 0xc2, 0xd4, 0xc9, - 0x4c, 0xd7, 0x9b, 0xbb, 0xd4, 0xf5, 0x66, 0x98, 0xe4, 0xb0, 0xe0, 0x76, 0x99, 0x5d, 0x35, 0x81, - 0x25, 0x57, 0xa1, 0x60, 0xc8, 0xa7, 0x66, 0x67, 0xa2, 0x9d, 0xe0, 0xd7, 0xa3, 0x09, 0x2a, 0x72, - 0x19, 0xf2, 0x6c, 0xc9, 0x8a, 0x6f, 0x99, 0x65, 0xeb, 0x42, 0x43, 0x0a, 0xf5, 0x7b, 0xb3, 0x30, - 0x24, 0x7d, 0xcd, 0xf5, 0x7d, 0x7d, 0xce, 0x8b, 0x3b, 0x6b, 0xa6, 0xef, 0xd9, 0x82, 0x7b, 0x29, - 0xbf, 0xc9, 0x37, 0x02, 0x51, 0xec, 0xe8, 0xd6, 0x49, 0x08, 0xe6, 0x39, 0xf1, 0xa1, 0x85, 0x9d, - 0x6f, 0x1f, 0x19, 0xfd, 0xeb, 0xf9, 0xfe, 0xec, 0x68, 0xee, 0xf5, 0x7c, 0x7f, 0x7e, 0xb4, 0x17, - 0xc3, 0x65, 0x61, 0x84, 0x6a, 0xbe, 0x37, 0xb7, 0x96, 0xcd, 0x95, 0x23, 0xfe, 0xc4, 0xe3, 0x60, - 0x43, 0x89, 0xc5, 0x64, 0x73, 0xc4, 0xdf, 0x7b, 0xbc, 0xab, 0xb2, 0x39, 0x4e, 0x8a, 0x28, 0x64, - 0xf3, 0x67, 0x19, 0x50, 0x52, 0x65, 0x53, 0x3a, 0x24, 0x67, 0x87, 0x83, 0x4b, 0x8d, 0xf8, 0xad, - 0x2c, 0x8c, 0x55, 0x2c, 0x8f, 0xae, 0xf0, 0x1d, 0xe3, 0x11, 0x9f, 0x2a, 0x6e, 0xc1, 0xa0, 0xf4, - 0x31, 0xa2, 0xcf, 0x1f, 0x0e, 0xf6, 0xe3, 0x21, 0xaa, 0x03, 0x27, 0xb9, 0xf4, 0x01, 0x66, 0x53, - 0x8f, 0x09, 0xf9, 0x88, 0xcf, 0x39, 0x47, 0x43, 0xc8, 0x47, 0x7c, 0xf2, 0x7a, 0x8f, 0x0a, 0xf9, - 0x5f, 0x66, 0xe0, 0x64, 0x4a, 0xe5, 0xe4, 0x12, 0xf4, 0x55, 0xdb, 0x4b, 0x18, 0x1d, 0x2b, 0x13, - 0xba, 0x05, 0xbb, 0xed, 0x25, 0x0c, 0x8c, 0xa5, 0xf9, 0x48, 0xb2, 0x88, 0x6f, 0xe0, 0xe7, 0x2b, - 0xe5, 0x09, 0x21, 0x55, 0x55, 0x7a, 0xcd, 0xcf, 0xc0, 0x69, 0x5f, 0x16, 0xbc, 0x93, 0xb7, 0x4d, - 0xa3, 0x1e, 0x7b, 0x27, 0xcf, 0xca, 0x90, 0x8f, 0xc3, 0x40, 0xe9, 0xed, 0xb6, 0x43, 0x91, 0x2f, - 0x97, 0xf8, 0xfb, 0x02, 0xbe, 0x3e, 0x22, 0x8d, 0x33, 0x7f, 0xf2, 0xcf, 0x28, 0xe2, 0xbc, 0x43, - 0x86, 0xea, 0xe7, 0x33, 0x70, 0xae, 0x73, 0xeb, 0xc8, 0x07, 0xa1, 0x8f, 0xed, 0xcc, 0x4b, 0xda, - 0x9c, 0xf8, 0x74, 0x9e, 0x46, 0xd4, 0x6e, 0xd0, 0x9a, 0xee, 0xc8, 0xc6, 0xbe, 0x4f, 0x46, 0x5e, - 0x81, 0xc1, 0x8a, 0xeb, 0xb6, 0xa9, 0x53, 0x7d, 0xe6, 0xb6, 0x56, 0x11, 0x7b, 0x42, 0xdc, 0x73, - 0x98, 0x08, 0xae, 0xb9, 0xcf, 0xc4, 0xe2, 0x5f, 0xc9, 0xf4, 0xea, 0x67, 0x32, 0x70, 0xbe, 0xdb, - 0x57, 0x91, 0x67, 0xa0, 0x7f, 0x91, 0x5a, 0xba, 0xe5, 0x55, 0xca, 0xa2, 0x49, 0xb8, 0xc5, 0xf2, - 0x10, 0x16, 0xdd, 0x29, 0x04, 0x84, 0xac, 0x10, 0x3f, 0x57, 0x0c, 0x1c, 0x19, 0xf8, 0x19, 0x28, - 0xc2, 0x62, 0x85, 0x7c, 0x42, 0xf5, 0x17, 0x96, 0xa0, 0x77, 0xde, 0xa2, 0xf3, 0xcb, 0xe4, 0x69, - 0x18, 0x60, 0xba, 0x8f, 0x39, 0xfc, 0xc5, 0x40, 0x1b, 0x93, 0x07, 0x0c, 0x22, 0xa6, 0x7b, 0xb4, - 0x90, 0x8a, 0xdc, 0x90, 0x13, 0x87, 0x0b, 0x75, 0x20, 0x72, 0x19, 0x8e, 0x99, 0xee, 0xd1, 0xe4, - 0x04, 0xe3, 0x37, 0xe4, 0x84, 0xcd, 0xa2, 0xb3, 0x23, 0xa5, 0x38, 0xc6, 0x2f, 0x25, 0xa6, 0x81, - 0x99, 0xb4, 0xac, 0xc6, 0x71, 0x9b, 0x20, 0x49, 0x31, 0xdd, 0xa3, 0xa5, 0x67, 0x43, 0x1e, 0x92, - 0x7d, 0xa1, 0xe2, 0x57, 0x99, 0x32, 0x6e, 0xba, 0x47, 0x8b, 0xd0, 0x92, 0xe7, 0x61, 0x50, 0xfc, - 0x7e, 0xdd, 0x36, 0xad, 0x78, 0x20, 0x0c, 0x09, 0x35, 0xdd, 0xa3, 0xc9, 0x94, 0x52, 0xa5, 0x0b, - 0x8e, 0x69, 0x79, 0xe2, 0x79, 0x5d, 0xbc, 0x52, 0xc4, 0x49, 0x95, 0xe2, 0x6f, 0xf2, 0x0a, 0x0c, - 0x07, 0x11, 0x46, 0xde, 0xa2, 0x75, 0x4f, 0x1c, 0xe9, 0x9c, 0x8e, 0x15, 0xe6, 0xc8, 0xe9, 0x1e, - 0x2d, 0x4a, 0x4d, 0x2e, 0x43, 0x41, 0xa3, 0xae, 0xf9, 0xb6, 0x7f, 0x09, 0x32, 0x22, 0x4d, 0x67, - 0xe6, 0xdb, 0x4c, 0x4a, 0x02, 0xcf, 0x7a, 0x27, 0xbc, 0x75, 0x11, 0x07, 0x30, 0x24, 0x56, 0xcb, - 0xa4, 0x65, 0xb0, 0xde, 0x91, 0xae, 0xdc, 0x5e, 0x0b, 0xe3, 0xae, 0x88, 0x6c, 0x6d, 0x83, 0xf1, - 0x07, 0xae, 0x32, 0x76, 0xba, 0x47, 0x8b, 0xd1, 0x4b, 0x52, 0x2d, 0x9b, 0xee, 0x9a, 0x08, 0x75, - 0x17, 0x97, 0x2a, 0x43, 0x49, 0x52, 0x65, 0x3f, 0xa5, 0xaa, 0xe7, 0xa8, 0xb7, 0x6e, 0x3b, 0x6b, - 0x22, 0xb0, 0x5d, 0xbc, 0x6a, 0x81, 0x95, 0xaa, 0x16, 0x10, 0xb9, 0x6a, 0xb6, 0xc8, 0x8c, 0xa4, - 0x57, 0xad, 0x7b, 0xba, 0x5c, 0x35, 0xdf, 0x5f, 0xfa, 0x9d, 0x34, 0x43, 0xf5, 0x7b, 0x3c, 0x69, - 0x6e, 0xb2, 0x43, 0x11, 0x27, 0x75, 0x28, 0xfe, 0x66, 0x95, 0x4a, 0x89, 0x51, 0x45, 0x56, 0xdc, - 0xa0, 0x52, 0x09, 0xc5, 0x2a, 0x95, 0x53, 0xa8, 0xde, 0x90, 0xf3, 0x85, 0x2a, 0x63, 0xd1, 0x0e, - 0x0a, 0x31, 0xac, 0x83, 0xa4, 0xbc, 0xa2, 0x45, 0xcc, 0x45, 0xa8, 0x10, 0x24, 0x1f, 0x0c, 0x5a, - 0x38, 0xb1, 0x30, 0xdd, 0xa3, 0x61, 0x96, 0x42, 0x95, 0x67, 0xb9, 0x54, 0x4e, 0x22, 0xc5, 0x90, - 0x4f, 0xc1, 0x60, 0xd3, 0x3d, 0x1a, 0xcf, 0x80, 0xf9, 0xb4, 0x94, 0x4f, 0x4a, 0x39, 0x15, 0x9d, - 0x22, 0x02, 0x04, 0x9b, 0x22, 0xc2, 0xac, 0x53, 0x53, 0xc9, 0x9c, 0x4b, 0xca, 0xe9, 0xe8, 0x8a, - 0x1a, 0xc7, 0x4f, 0xf7, 0x68, 0xc9, 0x3c, 0x4d, 0xcf, 0x47, 0xd2, 0x10, 0x29, 0x67, 0x62, 0xd1, - 0x67, 0x42, 0x14, 0x13, 0x97, 0x9c, 0xb0, 0x68, 0x3e, 0x35, 0x71, 0xb8, 0x72, 0x36, 0xba, 0x1c, - 0xa7, 0x90, 0x4c, 0xf7, 0x68, 0xa9, 0x29, 0xc7, 0x27, 0x12, 0xc9, 0x80, 0x14, 0x25, 0x7a, 0xe3, - 0x1b, 0x43, 0x4f, 0xf7, 0x68, 0x89, 0xf4, 0x41, 0x37, 0xe4, 0x2c, 0x3c, 0xca, 0x43, 0xd1, 0x4e, - 0x0c, 0x31, 0xac, 0x13, 0xa5, 0x6c, 0x3d, 0x37, 0xe4, 0xcc, 0x2c, 0xca, 0xb9, 0x64, 0xa9, 0x70, - 0xe6, 0x94, 0x32, 0xb8, 0x68, 0xe9, 0xc9, 0x26, 0x94, 0x87, 0x45, 0xba, 0x3f, 0x51, 0x3e, 0x8d, - 0x66, 0xba, 0x47, 0x4b, 0x4f, 0x54, 0xa1, 0xa5, 0x67, 0x69, 0x50, 0xce, 0x77, 0xe3, 0x19, 0xb4, - 0x2e, 0x3d, 0xc3, 0x83, 0xde, 0x25, 0x66, 0xbe, 0x72, 0x21, 0x1a, 0xfa, 0xb2, 0x23, 0xe1, 0x74, - 0x8f, 0xd6, 0x25, 0xf2, 0xfe, 0xed, 0x0e, 0x01, 0xec, 0x95, 0x8b, 0xd1, 0x6c, 0x9f, 0xa9, 0x44, - 0xd3, 0x3d, 0x5a, 0x87, 0xf0, 0xf7, 0xb7, 0x3b, 0xc4, 0x37, 0x57, 0x8a, 0x5d, 0xd9, 0x06, 0xf2, - 0xe8, 0x10, 0x1d, 0x7d, 0x3e, 0x35, 0x34, 0xb8, 0xf2, 0x48, 0x54, 0x75, 0x53, 0x48, 0x98, 0xea, - 0xa6, 0x05, 0x15, 0x9f, 0x4f, 0x8d, 0x65, 0xad, 0x3c, 0xda, 0x85, 0x61, 0xd0, 0xc6, 0xd4, 0x28, - 0xd8, 0xf3, 0xa9, 0xc1, 0xa4, 0x15, 0x35, 0xca, 0x30, 0x85, 0x84, 0x31, 0x4c, 0x0b, 0x43, 0x3d, - 0x9f, 0x1a, 0x73, 0x58, 0x79, 0xac, 0x0b, 0xc3, 0xb0, 0x85, 0x69, 0xd1, 0x8a, 0x9f, 0x8f, 0x04, - 0xfd, 0x55, 0xde, 0x17, 0x9d, 0x37, 0x24, 0x14, 0x9b, 0x37, 0xe4, 0xf0, 0xc0, 0x13, 0x89, 0xb0, - 0x86, 0xca, 0xe3, 0xd1, 0x61, 0x1e, 0x43, 0xb3, 0x61, 0x1e, 0x0f, 0x84, 0x38, 0x91, 0x08, 0xef, - 0xa6, 0x5c, 0xea, 0xc4, 0x04, 0xd1, 0x51, 0x26, 0x3c, 0x20, 0x5c, 0x25, 0x25, 0xbe, 0x98, 0xf2, - 0xfe, 0xa8, 0xb7, 0x62, 0x82, 0x60, 0xba, 0x47, 0x4b, 0x89, 0x4a, 0xa6, 0xa5, 0x07, 0xd3, 0x50, - 0x2e, 0x47, 0x87, 0x6d, 0x1a, 0x0d, 0x1b, 0xb6, 0xa9, 0x81, 0x38, 0x66, 0xd2, 0x5c, 0xaa, 0x95, - 0x2b, 0x51, 0xc3, 0x2c, 0x49, 0xc1, 0x0c, 0xb3, 0x14, 0x57, 0x6c, 0x2d, 0x3d, 0x3c, 0x84, 0xf2, - 0x44, 0xd7, 0x16, 0x22, 0x4d, 0x4a, 0x0b, 0x79, 0xb4, 0x84, 0xd0, 0x76, 0xba, 0xdd, 0x6a, 0xd8, - 0xba, 0xa1, 0x7c, 0x20, 0xd5, 0x76, 0xe2, 0x48, 0xc9, 0x76, 0xe2, 0x00, 0xb6, 0xca, 0xcb, 0x9e, - 0xbb, 0xca, 0x93, 0xd1, 0x55, 0x5e, 0xc6, 0xb1, 0x55, 0x3e, 0xe2, 0xe5, 0x3b, 0x91, 0xf0, 0x72, - 0x55, 0x9e, 0x8a, 0x2a, 0x40, 0x0c, 0xcd, 0x14, 0x20, 0xee, 0x17, 0xfb, 0xc9, 0xce, 0x7e, 0xa1, - 0xca, 0x55, 0xe4, 0xf6, 0x88, 0xcf, 0xad, 0x13, 0xdd, 0x74, 0x8f, 0xd6, 0xd9, 0xb7, 0xb4, 0x92, - 0xe2, 0xe6, 0xa9, 0x5c, 0x8b, 0x2a, 0x58, 0x82, 0x80, 0x29, 0x58, 0xd2, 0x39, 0xb4, 0x92, 0xe2, - 0xa7, 0xa9, 0x7c, 0xb0, 0x23, 0xab, 0xe0, 0x9b, 0x53, 0xbc, 0x3b, 0x6f, 0xc8, 0x8e, 0x96, 0xca, - 0xd3, 0xd1, 0xc5, 0x2e, 0xc4, 0xb0, 0xc5, 0x4e, 0x72, 0xc8, 0xbc, 0x21, 0xbb, 0x18, 0x2a, 0xd7, - 0x93, 0xa5, 0xc2, 0x25, 0x52, 0x72, 0x45, 0xd4, 0xd2, 0x3d, 0xf3, 0x94, 0x67, 0xa2, 0x5a, 0x97, - 0x46, 0xc3, 0xb4, 0x2e, 0xd5, 0xab, 0x6f, 0x2a, 0xe9, 0x60, 0xa7, 0xdc, 0x88, 0x9f, 0x25, 0x44, - 0xf1, 0xcc, 0xf2, 0x49, 0x38, 0xe5, 0xbd, 0x16, 0x8f, 0xf4, 0xa4, 0x3c, 0x1b, 0xbb, 0xcc, 0x88, - 0x60, 0x99, 0x7d, 0x1b, 0x8b, 0x0c, 0xf5, 0x5a, 0x3c, 0x38, 0x92, 0xf2, 0x5c, 0x3a, 0x87, 0x40, - 0x57, 0xe2, 0xc1, 0x94, 0x5e, 0x8b, 0xc7, 0x13, 0x52, 0x9e, 0x4f, 0xe7, 0x10, 0x48, 0x37, 0x1e, - 0x7f, 0xe8, 0x69, 0x29, 0xc2, 0xb1, 0xf2, 0xa1, 0xa8, 0xe9, 0x18, 0x20, 0x98, 0xe9, 0x18, 0xc6, - 0x41, 0x7e, 0x5a, 0x8a, 0x0c, 0xac, 0xbc, 0x90, 0x28, 0x12, 0x34, 0x56, 0x8a, 0x1f, 0xfc, 0xb4, - 0x14, 0x51, 0x57, 0x79, 0x31, 0x51, 0x24, 0x68, 0x9d, 0x14, 0x77, 0xd7, 0xe8, 0xf6, 0xf4, 0x4a, - 0x79, 0x29, 0x7a, 0xc4, 0xd1, 0x99, 0x72, 0xba, 0x47, 0xeb, 0xf6, 0x84, 0xeb, 0x93, 0x9d, 0xdd, - 0x15, 0x95, 0x97, 0xa3, 0x43, 0xb8, 0x13, 0x1d, 0x1b, 0xc2, 0x1d, 0x5d, 0x1e, 0x5f, 0x89, 0x3d, - 0xc3, 0x56, 0x5e, 0x89, 0x4e, 0x71, 0x11, 0x24, 0x9b, 0xe2, 0xe2, 0x8f, 0xb6, 0x23, 0xef, 0x8b, - 0x95, 0x0f, 0x47, 0xa7, 0x38, 0x19, 0xc7, 0xa6, 0xb8, 0xc8, 0x5b, 0xe4, 0x89, 0xc4, 0xb3, 0x57, - 0xe5, 0xd5, 0xe8, 0x14, 0x17, 0x43, 0xb3, 0x29, 0x2e, 0xfe, 0x50, 0xf6, 0x95, 0xd8, 0xeb, 0x4f, - 0xe5, 0xb5, 0xf4, 0xf6, 0x23, 0x52, 0x6e, 0x3f, 0x7f, 0x2b, 0xaa, 0xa5, 0x3f, 0x63, 0x54, 0x4a, - 0xd1, 0xf1, 0x9b, 0x46, 0xc3, 0xc6, 0x6f, 0xea, 0x13, 0xc8, 0xf8, 0xc6, 0x41, 0x68, 0xd5, 0x78, - 0x97, 0x8d, 0x43, 0x68, 0x8a, 0xa4, 0x80, 0x23, 0x7b, 0x64, 0xbe, 0x11, 0x9a, 0xe8, 0xb0, 0x47, - 0xf6, 0xb7, 0x41, 0x31, 0x7a, 0x36, 0xbb, 0x26, 0xbc, 0xe7, 0x94, 0x72, 0x74, 0x76, 0x4d, 0x10, - 0xb0, 0xd9, 0x35, 0xe9, 0x73, 0x37, 0x05, 0xa3, 0x42, 0x8b, 0xb8, 0x53, 0xa0, 0x69, 0xad, 0x28, - 0x93, 0xb1, 0x57, 0x44, 0x31, 0x3c, 0x9b, 0x9d, 0xe2, 0x30, 0x5c, 0xaf, 0x39, 0x6c, 0xa2, 0x61, - 0xb6, 0x96, 0x6c, 0xdd, 0x31, 0xaa, 0xd4, 0x32, 0x94, 0xa9, 0xd8, 0x7a, 0x9d, 0x42, 0x83, 0xeb, - 0x75, 0x0a, 0x1c, 0xa3, 0x1b, 0xc5, 0xe0, 0x1a, 0xad, 0x53, 0xf3, 0x1e, 0x55, 0x6e, 0x22, 0xdb, - 0x62, 0x27, 0xb6, 0x82, 0x6c, 0xba, 0x47, 0xeb, 0xc4, 0x81, 0xd9, 0xea, 0xb3, 0x1b, 0xd5, 0x37, - 0x66, 0x82, 0x97, 0xb3, 0x0b, 0x0e, 0x6d, 0xe9, 0x0e, 0x55, 0xa6, 0xa3, 0xb6, 0x7a, 0x2a, 0x11, - 0xb3, 0xd5, 0x53, 0x11, 0x49, 0xb6, 0xfe, 0x58, 0xa8, 0x74, 0x63, 0x1b, 0x8e, 0x88, 0xf4, 0xd2, - 0x6c, 0x76, 0x8a, 0x22, 0x98, 0x80, 0x66, 0x6c, 0x6b, 0x05, 0x4f, 0x2a, 0x5e, 0x8f, 0xce, 0x4e, - 0x9d, 0x29, 0xd9, 0xec, 0xd4, 0x19, 0xcb, 0x54, 0x3d, 0x8a, 0xe5, 0x63, 0xf0, 0x56, 0x54, 0xd5, - 0x53, 0x48, 0x98, 0xaa, 0xa7, 0x80, 0x93, 0x0c, 0x35, 0xea, 0x52, 0x4f, 0x99, 0xe9, 0xc6, 0x10, - 0x49, 0x92, 0x0c, 0x11, 0x9c, 0x64, 0x38, 0x45, 0xbd, 0xfa, 0xaa, 0x32, 0xdb, 0x8d, 0x21, 0x92, - 0x24, 0x19, 0x22, 0x98, 0x6d, 0x36, 0xa3, 0xe0, 0xf1, 0x76, 0x63, 0xcd, 0xef, 0xb3, 0xb9, 0xe8, - 0x66, 0xb3, 0x23, 0x21, 0xdb, 0x6c, 0x76, 0x44, 0x92, 0xcf, 0xec, 0xd8, 0xbb, 0x53, 0x99, 0xc7, - 0x0a, 0xaf, 0x86, 0x76, 0xc1, 0x4e, 0x4a, 0x4d, 0xf7, 0x68, 0x3b, 0xf5, 0x1e, 0xfd, 0x40, 0xe0, - 0x0a, 0xa5, 0x2c, 0x60, 0x55, 0x27, 0x82, 0xb3, 0x0a, 0x0e, 0x9e, 0xee, 0xd1, 0x02, 0x67, 0xa9, - 0xe7, 0x61, 0x10, 0x3f, 0xaa, 0x62, 0x99, 0x5e, 0x79, 0x5c, 0x79, 0x23, 0xba, 0x65, 0x92, 0x50, - 0x6c, 0xcb, 0x24, 0xfd, 0x64, 0x93, 0x38, 0xfe, 0xe4, 0x53, 0x4c, 0x79, 0x5c, 0xd1, 0xa2, 0x93, - 0x78, 0x04, 0xc9, 0x26, 0xf1, 0x08, 0x20, 0xa8, 0xb7, 0xec, 0xd8, 0xad, 0xf2, 0xb8, 0x52, 0x4d, - 0xa9, 0x97, 0xa3, 0x82, 0x7a, 0xf9, 0xcf, 0xa0, 0xde, 0xea, 0x6a, 0xdb, 0x2b, 0xb3, 0x6f, 0x5c, - 0x4c, 0xa9, 0xd7, 0x47, 0x06, 0xf5, 0xfa, 0x00, 0x36, 0x15, 0x22, 0x60, 0xc1, 0xb1, 0xd9, 0xa4, - 0x7d, 0xcb, 0x6c, 0x34, 0x94, 0xdb, 0xd1, 0xa9, 0x30, 0x8e, 0x67, 0x53, 0x61, 0x1c, 0xc6, 0x4c, - 0x4f, 0xde, 0x2a, 0xba, 0xd4, 0x5e, 0x51, 0xee, 0x44, 0x4d, 0xcf, 0x10, 0xc3, 0x4c, 0xcf, 0xf0, - 0x17, 0xee, 0x2e, 0xd8, 0x2f, 0x8d, 0x2e, 0x3b, 0xd4, 0x5d, 0x55, 0xee, 0xc6, 0x76, 0x17, 0x12, - 0x0e, 0x77, 0x17, 0xd2, 0x6f, 0xb2, 0x02, 0x0f, 0x47, 0x16, 0x1a, 0xff, 0xee, 0xa9, 0x4a, 0x75, - 0xa7, 0xbe, 0xaa, 0x7c, 0x04, 0x59, 0x3d, 0x96, 0xba, 0x54, 0x45, 0x49, 0xa7, 0x7b, 0xb4, 0x6e, - 0x9c, 0x70, 0x5b, 0xfe, 0xc6, 0x0c, 0x0f, 0x43, 0xa8, 0x2d, 0x4c, 0xf8, 0x9b, 0xd0, 0x37, 0x63, - 0xdb, 0xf2, 0x24, 0x09, 0x6e, 0xcb, 0x93, 0x60, 0xd2, 0x82, 0x8b, 0xb1, 0xad, 0xda, 0xac, 0xde, - 0x60, 0xfb, 0x12, 0x6a, 0x2c, 0xe8, 0xf5, 0x35, 0xea, 0x29, 0x1f, 0x45, 0xde, 0x97, 0x3a, 0x6c, - 0xf8, 0x62, 0xd4, 0xd3, 0x3d, 0xda, 0x36, 0xfc, 0x88, 0x0a, 0xf9, 0xea, 0xd4, 0xe2, 0x82, 0xf2, - 0xb1, 0xe8, 0xf9, 0x26, 0x83, 0x4d, 0xf7, 0x68, 0x88, 0x63, 0x56, 0xda, 0xed, 0xd6, 0x8a, 0xa3, - 0x1b, 0x94, 0x1b, 0x5a, 0x68, 0xbb, 0x09, 0x03, 0xf4, 0xe3, 0x51, 0x2b, 0xad, 0x13, 0x1d, 0xb3, - 0xd2, 0x3a, 0xe1, 0x98, 0xa2, 0x46, 0x22, 0xee, 0x2b, 0x9f, 0x88, 0x2a, 0x6a, 0x04, 0xc9, 0x14, - 0x35, 0x1a, 0x9f, 0xff, 0x23, 0x70, 0x26, 0xd8, 0xcf, 0x8b, 0xf5, 0x97, 0x77, 0x9a, 0xf2, 0x49, - 0xe4, 0x73, 0x31, 0x71, 0x19, 0x10, 0xa1, 0x9a, 0xee, 0xd1, 0x3a, 0x94, 0x67, 0x2b, 0x6e, 0x22, - 0x99, 0x8c, 0x30, 0x2f, 0xbe, 0x27, 0xba, 0xe2, 0x76, 0x20, 0x63, 0x2b, 0x6e, 0x07, 0x54, 0x2a, - 0x73, 0x21, 0x54, 0x7d, 0x1b, 0xe6, 0x81, 0x4c, 0x3b, 0x71, 0x48, 0x65, 0x2e, 0x2c, 0xb5, 0xa5, - 0x6d, 0x98, 0x07, 0xd6, 0x5a, 0x27, 0x0e, 0xe4, 0x32, 0x14, 0xaa, 0xd5, 0x59, 0xad, 0x6d, 0x29, - 0xf5, 0x98, 0x0f, 0x18, 0x42, 0xa7, 0x7b, 0x34, 0x81, 0x67, 0x66, 0xd0, 0x64, 0x43, 0x77, 0x3d, - 0xb3, 0xee, 0xe2, 0x88, 0xf1, 0x47, 0x88, 0x11, 0x35, 0x83, 0xd2, 0x68, 0x98, 0x19, 0x94, 0x06, - 0x67, 0xf6, 0xe2, 0x84, 0xee, 0xba, 0xba, 0x65, 0x38, 0xfa, 0x38, 0x2e, 0x13, 0x34, 0xf6, 0xc6, - 0x20, 0x82, 0x65, 0xf6, 0x62, 0x14, 0x82, 0x87, 0xef, 0x3e, 0xc4, 0x37, 0x73, 0x96, 0x63, 0x87, - 0xef, 0x31, 0x3c, 0x1e, 0xbe, 0xc7, 0x60, 0x68, 0x77, 0xfa, 0x30, 0x8d, 0xae, 0x98, 0x4c, 0x44, - 0xca, 0x4a, 0xcc, 0xee, 0x8c, 0x13, 0xa0, 0xdd, 0x19, 0x07, 0x46, 0x9a, 0xe4, 0x2f, 0xb7, 0xab, - 0x1d, 0x9a, 0x14, 0xae, 0xb2, 0x89, 0x32, 0x6c, 0xfd, 0x0e, 0x07, 0x47, 0x79, 0xc3, 0xd2, 0x9b, - 0x76, 0x79, 0xdc, 0x97, 0xba, 0x19, 0x5d, 0xbf, 0x3b, 0x12, 0xb2, 0xf5, 0xbb, 0x23, 0x92, 0xcd, - 0xae, 0xfe, 0x46, 0x6b, 0x55, 0x77, 0xa8, 0x51, 0x36, 0x1d, 0x3c, 0x59, 0xdc, 0xe0, 0x5b, 0xc3, - 0xb7, 0xa2, 0xb3, 0x6b, 0x17, 0x52, 0x36, 0xbb, 0x76, 0x41, 0x33, 0x23, 0x2f, 0x1d, 0xad, 0x51, - 0xdd, 0x50, 0xd6, 0xa2, 0x46, 0x5e, 0x67, 0x4a, 0x66, 0xe4, 0x75, 0xc6, 0x76, 0xfe, 0x9c, 0xbb, - 0x8e, 0xe9, 0x51, 0xa5, 0xb1, 0x93, 0xcf, 0x41, 0xd2, 0xce, 0x9f, 0x83, 0x68, 0xb6, 0x21, 0x8c, - 0x77, 0x48, 0x33, 0xba, 0x21, 0x4c, 0x76, 0x43, 0xbc, 0x04, 0xb3, 0x58, 0xc4, 0x53, 0x13, 0xc5, - 0x8a, 0x5a, 0x2c, 0x02, 0xcc, 0x2c, 0x96, 0xf0, 0x31, 0x4a, 0xe4, 0x81, 0x81, 0x62, 0x47, 0xd7, - 0x50, 0x19, 0xc7, 0xd6, 0xd0, 0xc8, 0x63, 0x84, 0xe7, 0x23, 0xde, 0xb3, 0x4a, 0x2b, 0x6a, 0x75, - 0x48, 0x28, 0x66, 0x75, 0xc8, 0x7e, 0xb6, 0x13, 0x70, 0x02, 0x6f, 0xc1, 0xb5, 0x76, 0x70, 0x8f, - 0xf3, 0xa9, 0xe8, 0x67, 0xc6, 0xd0, 0xec, 0x33, 0x63, 0xa0, 0x08, 0x13, 0x31, 0x6d, 0x39, 0x1d, - 0x98, 0x84, 0xe7, 0x83, 0x31, 0x10, 0x99, 0x01, 0x52, 0x2d, 0xcd, 0xce, 0x54, 0x8c, 0x05, 0xf9, - 0x8a, 0xcc, 0x8d, 0x9e, 0xc0, 0x26, 0x29, 0xa6, 0x7b, 0xb4, 0x94, 0x72, 0xe4, 0x2d, 0x38, 0x2f, - 0xa0, 0xe2, 0x1d, 0x21, 0xe6, 0x9c, 0x36, 0x82, 0x05, 0xc1, 0x8b, 0x7a, 0x67, 0x74, 0xa3, 0x9d, - 0xee, 0xd1, 0xba, 0xf2, 0xea, 0x5c, 0x97, 0x58, 0x1f, 0xda, 0x3b, 0xa9, 0x2b, 0x58, 0x24, 0xba, - 0xf2, 0xea, 0x5c, 0x97, 0x90, 0xfb, 0xbd, 0x9d, 0xd4, 0x15, 0x74, 0x42, 0x57, 0x5e, 0xc4, 0x85, - 0x62, 0x37, 0x7c, 0xa9, 0xd1, 0x50, 0xd6, 0xb1, 0xba, 0xf7, 0xef, 0xa4, 0xba, 0x12, 0x1a, 0x9c, - 0xdb, 0x71, 0x64, 0xb3, 0xf4, 0x7c, 0x8b, 0x5a, 0xd5, 0xc8, 0x02, 0x74, 0x3f, 0x3a, 0x4b, 0x27, - 0x08, 0xd8, 0x2c, 0x9d, 0x00, 0xb2, 0x01, 0x25, 0x3b, 0x61, 0x2b, 0x1b, 0xd1, 0x01, 0x25, 0xe3, - 0xd8, 0x80, 0x8a, 0x38, 0x6c, 0xcf, 0xc3, 0xc9, 0xf9, 0x35, 0x4f, 0xf7, 0x2d, 0x48, 0x57, 0x74, - 0xe5, 0xdb, 0xb1, 0x4b, 0xa6, 0x24, 0x09, 0x5e, 0x32, 0x25, 0xc1, 0x6c, 0x8c, 0x30, 0x70, 0x75, - 0xc3, 0xaa, 0x4f, 0xe9, 0x66, 0xa3, 0xed, 0x50, 0xe5, 0x3f, 0x89, 0x8e, 0x91, 0x18, 0x9a, 0x8d, - 0x91, 0x18, 0x88, 0x2d, 0xd0, 0x0c, 0x54, 0x72, 0x5d, 0x73, 0xc5, 0x12, 0xfb, 0xca, 0x76, 0xc3, - 0x53, 0xfe, 0xd3, 0xe8, 0x02, 0x9d, 0x46, 0xc3, 0x16, 0xe8, 0x34, 0x38, 0x9e, 0x3a, 0xa5, 0xe4, - 0x63, 0x57, 0xfe, 0xb3, 0xd8, 0xa9, 0x53, 0x0a, 0x0d, 0x9e, 0x3a, 0xa5, 0xe5, 0x72, 0x9f, 0x82, - 0x51, 0x6e, 0x93, 0xcd, 0x98, 0xc1, 0x5d, 0xf5, 0x7f, 0x1e, 0x5d, 0x1f, 0xe3, 0x78, 0xb6, 0x3e, - 0xc6, 0x61, 0x51, 0x3e, 0xa2, 0x0b, 0xfe, 0x8b, 0x4e, 0x7c, 0x02, 0xf9, 0x27, 0xca, 0x90, 0x9b, - 0x32, 0x1f, 0x31, 0x52, 0xbe, 0x37, 0xd3, 0x89, 0x51, 0x30, 0x3c, 0x12, 0x85, 0xa2, 0x8c, 0x34, - 0x7a, 0xcf, 0xa4, 0xeb, 0xca, 0xa7, 0x3b, 0x32, 0xe2, 0x04, 0x51, 0x46, 0x1c, 0x46, 0xde, 0x84, - 0x33, 0x21, 0x6c, 0x96, 0x36, 0x97, 0x82, 0x99, 0xe9, 0xfb, 0x32, 0x51, 0x33, 0x38, 0x9d, 0x8c, - 0x99, 0xc1, 0xe9, 0x98, 0x34, 0xd6, 0x42, 0x74, 0xff, 0xe5, 0x36, 0xac, 0x03, 0x09, 0x76, 0x60, - 0x90, 0xc6, 0x5a, 0x48, 0xf3, 0xfb, 0xb7, 0x61, 0x1d, 0xc8, 0xb4, 0x03, 0x03, 0xf2, 0xd9, 0x0c, - 0x5c, 0x4a, 0x47, 0x95, 0x1a, 0x8d, 0x29, 0xdb, 0x09, 0x71, 0xca, 0x0f, 0x64, 0xa2, 0x07, 0x0d, - 0x3b, 0x2b, 0x36, 0xdd, 0xa3, 0xed, 0xb0, 0x02, 0xf2, 0x61, 0x18, 0x2e, 0xb5, 0x0d, 0xd3, 0xc3, - 0x8b, 0x37, 0x66, 0x38, 0xff, 0x60, 0x26, 0xb6, 0xc5, 0x91, 0xb1, 0xb8, 0xc5, 0x91, 0x01, 0xe4, - 0x75, 0x18, 0xab, 0xd2, 0x7a, 0xdb, 0x31, 0xbd, 0x0d, 0x0d, 0x73, 0xed, 0x33, 0x1e, 0x3f, 0x94, - 0x89, 0x4e, 0x62, 0x09, 0x0a, 0x36, 0x89, 0x25, 0x80, 0xe4, 0x4e, 0x87, 0x8c, 0xec, 0xca, 0x67, - 0x32, 0x5d, 0xaf, 0xe5, 0x83, 0xbe, 0xec, 0x90, 0xd0, 0x7d, 0x21, 0x35, 0xc3, 0xb5, 0xf2, 0xd9, - 0x4c, 0x97, 0x6b, 0x74, 0x69, 0x86, 0x4b, 0x49, 0x8e, 0xbd, 0x90, 0x9a, 0x7e, 0x58, 0xf9, 0xe1, - 0x4c, 0x97, 0x6b, 0xef, 0x90, 0x63, 0x5a, 0xe6, 0xe2, 0x67, 0xb9, 0xa7, 0x88, 0x60, 0xf4, 0x5f, - 0x65, 0x92, 0xae, 0x22, 0x41, 0x79, 0x89, 0x90, 0x15, 0xbb, 0xed, 0x06, 0x4a, 0xff, 0xb9, 0x4c, - 0xd2, 0x37, 0x2f, 0x2c, 0x16, 0xfe, 0x22, 0x14, 0xce, 0x4d, 0xde, 0xf7, 0xa8, 0x63, 0xe9, 0x0d, - 0xec, 0xce, 0xaa, 0x67, 0x3b, 0xfa, 0x0a, 0x9d, 0xb4, 0xf4, 0xa5, 0x06, 0x55, 0x3e, 0x9f, 0x89, - 0x5a, 0xb0, 0x9d, 0x49, 0x99, 0x05, 0xdb, 0x19, 0x4b, 0x56, 0xe1, 0xe1, 0x34, 0x6c, 0xd9, 0x74, - 0xb1, 0x9e, 0x2f, 0x64, 0xa2, 0x26, 0x6c, 0x17, 0x5a, 0x66, 0xc2, 0x76, 0x41, 0x93, 0xeb, 0x30, - 0x30, 0x6e, 0xfb, 0xd3, 0xef, 0x8f, 0xc4, 0x9c, 0x21, 0x03, 0xcc, 0x74, 0x8f, 0x16, 0x92, 0x89, - 0x32, 0x62, 0x50, 0x7f, 0x31, 0x59, 0x26, 0xbc, 0x7c, 0x0a, 0x7e, 0x88, 0x32, 0x42, 0xdc, 0xff, - 0x75, 0xb2, 0x4c, 0x78, 0xc7, 0x15, 0xfc, 0x60, 0x33, 0x09, 0xaf, 0x71, 0x76, 0xaa, 0xc4, 0xec, - 0xb6, 0x89, 0x55, 0xbd, 0xd1, 0xa0, 0xd6, 0x0a, 0x55, 0xbe, 0x14, 0x9b, 0x49, 0xd2, 0xc9, 0xd8, - 0x4c, 0x92, 0x8e, 0x21, 0x1f, 0x87, 0xb3, 0x77, 0xf4, 0x86, 0x69, 0x84, 0x38, 0x3f, 0x19, 0xad, - 0xf2, 0xa3, 0x99, 0xe8, 0x6e, 0xba, 0x03, 0x1d, 0xdb, 0x4d, 0x77, 0x40, 0x91, 0x59, 0x20, 0xb8, - 0x8c, 0x06, 0xb3, 0x05, 0x5b, 0x9f, 0x95, 0xff, 0x26, 0x13, 0xb5, 0x53, 0x93, 0x24, 0xcc, 0x4e, - 0x4d, 0x42, 0x49, 0xad, 0x73, 0x54, 0x7b, 0xe5, 0xc7, 0x32, 0xd1, 0xd3, 0x9a, 0x4e, 0x84, 0xd3, - 0x3d, 0x5a, 0xe7, 0xd0, 0xf8, 0x37, 0x61, 0xb4, 0xba, 0x50, 0x99, 0x9a, 0x9a, 0xac, 0xde, 0xa9, - 0x94, 0xd1, 0x7d, 0xd7, 0x50, 0x7e, 0x3c, 0xb6, 0x62, 0xc5, 0x09, 0xd8, 0x8a, 0x15, 0x87, 0x91, - 0x97, 0x60, 0x88, 0xb5, 0x9f, 0x0d, 0x18, 0xfc, 0xe4, 0x2f, 0x67, 0xa2, 0xe6, 0x94, 0x8c, 0x64, - 0xe6, 0x94, 0xfc, 0x9b, 0x54, 0xe1, 0x14, 0x93, 0xe2, 0x82, 0x43, 0x97, 0xa9, 0x43, 0xad, 0xba, - 0x3f, 0xa6, 0x7f, 0x22, 0x13, 0xb5, 0x32, 0xd2, 0x88, 0x98, 0x95, 0x91, 0x06, 0x27, 0x6b, 0x70, - 0x3e, 0x7e, 0x12, 0x24, 0x3f, 0xa6, 0x52, 0x7e, 0x32, 0x13, 0x33, 0x86, 0xbb, 0x10, 0xa3, 0x31, - 0xdc, 0x05, 0x4f, 0x2c, 0xb8, 0x20, 0x8e, 0x55, 0x84, 0xc3, 0x65, 0xbc, 0xb6, 0xff, 0x96, 0xd7, - 0xf6, 0x78, 0xe8, 0x10, 0xd8, 0x85, 0x7a, 0xba, 0x47, 0xeb, 0xce, 0x8e, 0xe9, 0x59, 0x32, 0x76, - 0xbb, 0xf2, 0x53, 0x99, 0x74, 0x8f, 0x94, 0x88, 0x9b, 0x72, 0x5a, 0xd0, 0xf7, 0x37, 0x3b, 0x45, - 0x1e, 0x57, 0x7e, 0x3a, 0x36, 0xde, 0xd2, 0xc9, 0xd8, 0x78, 0xeb, 0x10, 0xba, 0xfc, 0x75, 0x18, - 0xe3, 0x4a, 0xbd, 0xa0, 0xe3, 0x30, 0xb4, 0x56, 0xa8, 0xa1, 0xfc, 0x77, 0xb1, 0xd5, 0x2e, 0x41, - 0x81, 0xae, 0x3d, 0x71, 0x20, 0x9b, 0xba, 0xab, 0x2d, 0xdd, 0xb2, 0xf0, 0x98, 0x55, 0xf9, 0xef, - 0x63, 0x53, 0x77, 0x88, 0x42, 0xc7, 0xdd, 0xe0, 0x17, 0xd3, 0x84, 0x6e, 0x59, 0x3b, 0x94, 0x9f, - 0x89, 0x69, 0x42, 0x37, 0x62, 0xa6, 0x09, 0x5d, 0x53, 0x80, 0xdc, 0xe9, 0xf0, 0xb0, 0x51, 0xf9, - 0x4a, 0x6c, 0x45, 0x4e, 0xa5, 0x62, 0x2b, 0x72, 0xfa, 0xbb, 0xc8, 0x3b, 0x1d, 0x1e, 0x05, 0x2a, - 0x3f, 0xdb, 0x9d, 0x6f, 0xb8, 0xd2, 0xa7, 0xbf, 0x29, 0xbc, 0xd3, 0xe1, 0x41, 0x9d, 0xf2, 0x73, - 0xdd, 0xf9, 0x86, 0x8e, 0x7d, 0xe9, 0xef, 0xf1, 0x6a, 0x9d, 0x1f, 0xa3, 0x29, 0x3f, 0x1f, 0x9f, - 0xba, 0x3a, 0x10, 0xe2, 0xd4, 0xd5, 0xe9, 0x45, 0xdb, 0x12, 0x3c, 0xc4, 0x35, 0xe4, 0xa6, 0xa3, - 0xb7, 0x56, 0xab, 0xd4, 0xf3, 0x4c, 0x6b, 0xc5, 0xdf, 0x89, 0xfd, 0x42, 0x26, 0x76, 0x3c, 0xd6, - 0x89, 0x12, 0x8f, 0xc7, 0x3a, 0x21, 0x99, 0xf2, 0x26, 0x9e, 0x9d, 0x29, 0xbf, 0x18, 0x53, 0xde, - 0x04, 0x05, 0x53, 0xde, 0xe4, 0x6b, 0xb5, 0xd7, 0x53, 0x5e, 0x57, 0x29, 0xff, 0x43, 0x67, 0x5e, - 0x41, 0xfb, 0x52, 0x1e, 0x65, 0xbd, 0x9e, 0xf2, 0x88, 0x48, 0xf9, 0x1f, 0x3b, 0xf3, 0x0a, 0x7d, - 0x90, 0x12, 0xc0, 0xf1, 0x3e, 0xe8, 0xc5, 0x5d, 0xad, 0xfa, 0x95, 0x0c, 0x0c, 0x55, 0x3d, 0x87, - 0xea, 0x4d, 0x11, 0x51, 0xe2, 0x1c, 0xf4, 0x73, 0xf7, 0x30, 0xff, 0x85, 0x86, 0x16, 0xfc, 0x26, - 0x97, 0x60, 0x64, 0x46, 0x77, 0x3d, 0x2c, 0x59, 0xb1, 0x0c, 0x7a, 0x1f, 0x9f, 0x46, 0xe4, 0xb4, - 0x18, 0x94, 0xcc, 0x70, 0x3a, 0x5e, 0x0e, 0x83, 0x08, 0xe5, 0xb6, 0x0d, 0xa4, 0xd0, 0xff, 0xce, - 0x66, 0xb1, 0x07, 0xe3, 0x26, 0xc4, 0xca, 0xaa, 0xdf, 0xc8, 0x40, 0xc2, 0x71, 0x6d, 0xef, 0x2f, - 0xa7, 0xe6, 0xe1, 0x44, 0x2c, 0x70, 0x95, 0x78, 0xdf, 0xb1, 0xc3, 0xb8, 0x56, 0xf1, 0xd2, 0xe4, - 0xfd, 0xc1, 0xbb, 0x82, 0xdb, 0xda, 0x8c, 0x08, 0x92, 0xd1, 0xb7, 0xb5, 0x59, 0xcc, 0xb5, 0x9d, - 0x86, 0x26, 0xa1, 0xc4, 0x23, 0xe8, 0xef, 0x8c, 0x86, 0x51, 0x79, 0xc8, 0x25, 0xf1, 0x8c, 0x2b, - 0x13, 0x86, 0xd6, 0x88, 0xe5, 0x7c, 0xe4, 0xcf, 0xb6, 0x3e, 0x0c, 0x43, 0x95, 0x66, 0x8b, 0x3a, - 0xae, 0x6d, 0xe9, 0x9e, 0xed, 0xe7, 0x96, 0xc7, 0xb0, 0x0b, 0xa6, 0x04, 0x97, 0x43, 0x01, 0xc8, - 0xf4, 0xe4, 0x8a, 0x9f, 0x86, 0x22, 0x87, 0xf1, 0x90, 0x30, 0xa8, 0x67, 0x3c, 0x8f, 0x20, 0xa7, - 0x60, 0xa4, 0xb7, 0x5d, 0x1d, 0x5f, 0xa0, 0x04, 0xa4, 0x6d, 0x06, 0x90, 0x49, 0x91, 0x82, 0x3c, - 0x09, 0x05, 0x3c, 0xb1, 0x73, 0x31, 0xbd, 0x8c, 0x08, 0xf8, 0xd1, 0x40, 0x88, 0x1c, 0x5e, 0x81, - 0xd3, 0x90, 0x5b, 0x30, 0x1a, 0x5e, 0x47, 0xdc, 0x74, 0xec, 0x76, 0xcb, 0x0f, 0x28, 0x8d, 0xf9, - 0x17, 0xd7, 0x02, 0x5c, 0x6d, 0x05, 0x91, 0x12, 0x8b, 0x44, 0x41, 0x32, 0x0d, 0x27, 0x42, 0x18, - 0x13, 0x91, 0x1f, 0xc8, 0x1e, 0x93, 0x08, 0x49, 0xbc, 0x98, 0x38, 0x23, 0x49, 0x84, 0x62, 0xc5, - 0x48, 0x05, 0xfa, 0xfc, 0x68, 0x1f, 0xfd, 0xdb, 0x2a, 0xe9, 0x49, 0x11, 0xed, 0xa3, 0x4f, 0x8e, - 0xf3, 0xe1, 0x97, 0x27, 0x53, 0x30, 0xa2, 0xd9, 0x6d, 0x8f, 0x2e, 0xda, 0x62, 0x1d, 0x17, 0x51, - 0x65, 0xb0, 0x4d, 0x0e, 0xc3, 0xd4, 0x3c, 0xdb, 0x4f, 0x5f, 0x29, 0xa7, 0x51, 0x8c, 0x96, 0x22, - 0x73, 0x30, 0x96, 0xb8, 0xb8, 0x91, 0x93, 0x4a, 0x4a, 0x9f, 0x97, 0x64, 0x96, 0x2c, 0x4a, 0x7e, - 0x30, 0x03, 0x85, 0x45, 0x47, 0x37, 0x3d, 0x57, 0x3c, 0x5e, 0x39, 0x7d, 0x75, 0xdd, 0xd1, 0x5b, - 0x4c, 0x3f, 0xae, 0x62, 0xc0, 0xab, 0x3b, 0x7a, 0xa3, 0x4d, 0xdd, 0xf1, 0xbb, 0xec, 0xeb, 0xfe, - 0xc1, 0x66, 0xf1, 0xa5, 0x15, 0xdc, 0x1e, 0x5e, 0xad, 0xdb, 0xcd, 0x6b, 0x2b, 0x8e, 0x7e, 0xcf, - 0xf4, 0x70, 0xea, 0xd0, 0x1b, 0xd7, 0x3c, 0xda, 0xc0, 0x5d, 0xe8, 0x35, 0xbd, 0x65, 0x5e, 0xc3, - 0xc0, 0x8a, 0xd7, 0x02, 0x4e, 0xbc, 0x06, 0xa6, 0x02, 0x1e, 0xfe, 0x25, 0xab, 0x00, 0xc7, 0x91, - 0x39, 0xb6, 0x79, 0xc3, 0x4f, 0x2d, 0xb5, 0x5a, 0xe2, 0x25, 0x8c, 0xb4, 0x77, 0xf3, 0x31, 0x5c, - 0xb1, 0x03, 0x81, 0xe9, 0xad, 0x96, 0x9c, 0xb6, 0x36, 0xa4, 0x63, 0x5a, 0xb0, 0x28, 0x5a, 0xe4, - 0x8b, 0x69, 0x38, 0x94, 0xb8, 0xdf, 0xd8, 0x14, 0x21, 0xc5, 0x8b, 0x91, 0x25, 0x38, 0x21, 0xf8, - 0x06, 0xa1, 0x87, 0x47, 0xa2, 0xb3, 0x42, 0x0c, 0xcd, 0x95, 0x36, 0x68, 0xa3, 0x21, 0xc0, 0x72, - 0x1d, 0xb1, 0x12, 0x64, 0x3c, 0xcc, 0x87, 0x36, 0xa7, 0x37, 0xa9, 0xab, 0x9c, 0x40, 0x8d, 0x3d, - 0xbf, 0xb5, 0x59, 0x54, 0xfc, 0xf2, 0x18, 0xf8, 0x26, 0x35, 0xbb, 0x27, 0x16, 0x91, 0x79, 0x70, - 0xad, 0x1f, 0x4d, 0xe1, 0x11, 0xd7, 0xf9, 0x68, 0x11, 0x32, 0x01, 0xc3, 0x81, 0x23, 0xee, 0xed, - 0xdb, 0x95, 0x32, 0x3e, 0xb5, 0x11, 0xb1, 0x8f, 0x62, 0xc1, 0x81, 0x65, 0x26, 0x91, 0x32, 0xd2, - 0x9b, 0x3c, 0xfe, 0xf6, 0x26, 0xf6, 0x26, 0xaf, 0x95, 0xf2, 0x26, 0x6f, 0x81, 0xbc, 0x02, 0x83, - 0xa5, 0xbb, 0x55, 0xf1, 0xd6, 0xd0, 0x55, 0x4e, 0x86, 0xe1, 0xe4, 0x31, 0xc1, 0xab, 0x78, 0x97, - 0x28, 0x37, 0x5d, 0xa6, 0x27, 0x93, 0x30, 0x12, 0xb9, 0xcb, 0x77, 0x95, 0x53, 0xc8, 0x01, 0x5b, - 0xae, 0x23, 0xa6, 0xe6, 0x08, 0x54, 0x24, 0xe5, 0x70, 0xa4, 0x10, 0xd3, 0x1a, 0xb6, 0x1d, 0x6e, - 0x34, 0xec, 0x75, 0x8d, 0xe2, 0xb3, 0x46, 0x7c, 0xb8, 0xd3, 0xcf, 0xb5, 0xc6, 0x10, 0xa8, 0x9a, - 0xc3, 0x71, 0x91, 0x1c, 0xc3, 0xd1, 0x62, 0xe4, 0x2d, 0x20, 0x18, 0xcc, 0x9b, 0x1a, 0xfe, 0xd1, - 0x6e, 0xa5, 0xec, 0x2a, 0x67, 0x30, 0xf0, 0x1f, 0x89, 0xbf, 0xab, 0xad, 0x94, 0xc7, 0x2f, 0x89, - 0xe9, 0xe3, 0xa2, 0xce, 0x4b, 0xd5, 0x1c, 0x81, 0xab, 0x99, 0x91, 0x4c, 0x67, 0x29, 0x5c, 0xc9, - 0x3a, 0x9c, 0x5d, 0x70, 0xe8, 0x3d, 0xd3, 0x6e, 0xbb, 0xfe, 0xf2, 0xe1, 0xcf, 0x5b, 0x67, 0xb7, - 0x9d, 0xb7, 0x1e, 0x15, 0x15, 0x9f, 0x6e, 0x39, 0xf4, 0x5e, 0xcd, 0x0f, 0xf7, 0x16, 0x89, 0x56, - 0xd4, 0x89, 0x3b, 0xe6, 0x6b, 0x7b, 0xbb, 0xed, 0x50, 0x01, 0x37, 0xa9, 0xab, 0x28, 0xe1, 0x54, - 0xcb, 0x5f, 0xa8, 0x9a, 0x01, 0x2e, 0x92, 0xaf, 0x2d, 0x5a, 0x8c, 0x68, 0x40, 0x6e, 0x4e, 0xf8, - 0xc7, 0xfc, 0xa5, 0x3a, 0xcf, 0x6a, 0xa5, 0x3c, 0x84, 0xcc, 0x54, 0x26, 0x96, 0x95, 0x7a, 0x10, - 0xfa, 0xb1, 0xa6, 0x0b, 0xbc, 0x2c, 0x96, 0x64, 0x69, 0x32, 0x03, 0xa3, 0x0b, 0x0e, 0x6e, 0x3a, - 0x6e, 0xd1, 0x8d, 0x05, 0xbb, 0x61, 0xd6, 0x37, 0xf0, 0xfd, 0x90, 0x98, 0x2a, 0x5b, 0x1c, 0x57, - 0x5b, 0xa3, 0x1b, 0xb5, 0x16, 0x62, 0xe5, 0x65, 0x25, 0x5e, 0x52, 0x0e, 0xc5, 0xf6, 0xf0, 0xce, - 0x42, 0xb1, 0x51, 0x18, 0x15, 0x97, 0x04, 0xf7, 0x3d, 0x6a, 0xb1, 0xa5, 0xde, 0x15, 0x6f, 0x85, - 0x94, 0xd8, 0xa5, 0x42, 0x80, 0x17, 0xf9, 0x86, 0xf9, 0x28, 0xa3, 0x01, 0x58, 0x6e, 0x58, 0xbc, - 0x48, 0x32, 0x5e, 0xd9, 0x85, 0x3d, 0xc4, 0x2b, 0xfb, 0x42, 0x4e, 0x9e, 0x7f, 0xc9, 0x79, 0xc8, - 0x4b, 0xe1, 0xc4, 0x31, 0x18, 0x13, 0x86, 0x5e, 0xcc, 0x8b, 0x18, 0x73, 0x03, 0xc2, 0x76, 0x09, - 0x5e, 0xdd, 0x62, 0x92, 0x98, 0x30, 0x40, 0x8f, 0x16, 0x12, 0x60, 0x82, 0x8e, 0xf6, 0x52, 0xc3, - 0xac, 0x63, 0x40, 0xce, 0x9c, 0x94, 0xa0, 0x03, 0xa1, 0x3c, 0x1e, 0xa7, 0x44, 0x42, 0xae, 0xc3, - 0xa0, 0xbf, 0xd9, 0x0d, 0x83, 0x91, 0x61, 0x9c, 0x46, 0x3f, 0xbd, 0x33, 0x0f, 0x03, 0x29, 0x11, - 0x91, 0x17, 0x31, 0xc1, 0xb9, 0xff, 0xa2, 0xb9, 0x37, 0xb4, 0x81, 0xe4, 0xd9, 0x23, 0x96, 0xe1, - 0xdc, 0x7f, 0xd8, 0x3c, 0x0e, 0xc3, 0xb2, 0x3a, 0xfa, 0x29, 0x89, 0x70, 0xe2, 0x8c, 0xe8, 0xb0, - 0xac, 0x20, 0xd1, 0x22, 0x64, 0x1e, 0xc6, 0x12, 0x1a, 0x28, 0x42, 0x97, 0x61, 0x5a, 0xca, 0x14, - 0xf5, 0x95, 0x17, 0xe6, 0x44, 0x59, 0xf5, 0xfb, 0xb2, 0x89, 0x65, 0x87, 0x09, 0x46, 0x50, 0x49, - 0x9d, 0x83, 0x82, 0xf1, 0x59, 0x73, 0xc1, 0x48, 0x44, 0xe4, 0x32, 0xf4, 0xc7, 0x72, 0x9c, 0xe3, - 0x1b, 0xf7, 0x20, 0xc1, 0x79, 0x80, 0x25, 0xd7, 0xa5, 0x24, 0x59, 0x52, 0xb0, 0x41, 0x3f, 0x49, - 0x56, 0x3c, 0xea, 0x1e, 0xa6, 0xcb, 0xba, 0x1e, 0x8b, 0xc7, 0xef, 0xa7, 0xa2, 0x4e, 0x2e, 0x79, - 0x61, 0xfc, 0xfd, 0xc0, 0xe0, 0xec, 0xdd, 0xce, 0xe0, 0x54, 0x7f, 0x2f, 0x93, 0x1c, 0x42, 0xe4, - 0x46, 0x32, 0xee, 0x17, 0xcf, 0x42, 0xed, 0x03, 0xe5, 0x5a, 0x83, 0x08, 0x60, 0x91, 0x08, 0x5e, - 0xd9, 0x3d, 0x47, 0xf0, 0xca, 0xed, 0x32, 0x82, 0x97, 0xfa, 0xef, 0xf2, 0x5d, 0xfd, 0xd5, 0x0e, - 0x25, 0xd2, 0xc3, 0x0b, 0x6c, 0xd3, 0xc4, 0x6a, 0x2f, 0xb9, 0x09, 0xd3, 0x9f, 0xbb, 0xe3, 0xd4, - 0x74, 0x3e, 0x6a, 0x5c, 0x2d, 0x4a, 0x49, 0x5e, 0x85, 0x21, 0xff, 0x03, 0x30, 0x32, 0x9c, 0x14, - 0xd1, 0x2c, 0x58, 0xb0, 0xe2, 0x89, 0xc4, 0xe5, 0x02, 0xe4, 0x59, 0x18, 0x40, 0x73, 0xa5, 0xa5, - 0xd7, 0xfd, 0xb0, 0x81, 0x3c, 0xce, 0xa0, 0x0f, 0x94, 0xa3, 0x19, 0x04, 0x94, 0xe4, 0x13, 0x50, - 0x88, 0x64, 0xb2, 0xbf, 0xb6, 0x03, 0x07, 0xbf, 0xab, 0x72, 0xdc, 0x5c, 0xbe, 0x01, 0x89, 0x67, - 0xb1, 0x17, 0x4c, 0xc9, 0x22, 0x9c, 0x5c, 0x70, 0xa8, 0x81, 0xae, 0xa4, 0x93, 0xf7, 0x5b, 0x8e, - 0x88, 0x6a, 0xcc, 0x07, 0x30, 0xae, 0x3f, 0x2d, 0x1f, 0xcd, 0x56, 0x46, 0x81, 0x97, 0x63, 0x97, - 0xa5, 0x14, 0x67, 0x46, 0x09, 0x6f, 0xc9, 0x2d, 0xba, 0xb1, 0x8e, 0xd9, 0x4c, 0xfb, 0x43, 0xa3, - 0x44, 0x08, 0x7a, 0x4d, 0xa0, 0x64, 0xa3, 0x24, 0x5a, 0xe8, 0xdc, 0x0b, 0x30, 0xb8, 0xd7, 0xd8, - 0xb3, 0xbf, 0x9e, 0xed, 0xe0, 0xf9, 0xfd, 0xe0, 0xa6, 0xff, 0x08, 0x12, 0xcf, 0xf5, 0x76, 0x48, - 0x3c, 0xf7, 0xed, 0x6c, 0x07, 0xb7, 0xf6, 0x07, 0x3a, 0x41, 0x54, 0x20, 0x8c, 0x68, 0x82, 0xa8, - 0x30, 0x37, 0x97, 0x69, 0x68, 0x32, 0x51, 0x2c, 0x95, 0x5c, 0x61, 0xdb, 0x54, 0x72, 0xbf, 0x94, - 0xeb, 0xe6, 0xf6, 0x7f, 0x2c, 0xfb, 0xdd, 0xc8, 0xfe, 0x3a, 0x0c, 0x06, 0x92, 0xad, 0x94, 0xd1, - 0x9e, 0x19, 0x0e, 0x22, 0x5d, 0x73, 0x30, 0x96, 0x91, 0x88, 0xc8, 0x15, 0xde, 0xd6, 0xaa, 0xf9, - 0x36, 0x8f, 0xb9, 0x3a, 0x2c, 0xa2, 0x69, 0xea, 0x9e, 0x5e, 0x73, 0xcd, 0xb7, 0xa9, 0x16, 0xa0, - 0xd5, 0xff, 0x23, 0x9b, 0xfa, 0x76, 0xe2, 0xb8, 0x8f, 0x76, 0xd1, 0x47, 0x29, 0x42, 0xe4, 0xaf, - 0x3e, 0x8e, 0x85, 0xb8, 0x0b, 0x21, 0xfe, 0x55, 0x36, 0xf5, 0x8d, 0xcc, 0xb1, 0x10, 0x77, 0x33, - 0x5b, 0x3c, 0x09, 0x03, 0x9a, 0xbd, 0xee, 0x62, 0xde, 0x68, 0x31, 0x57, 0xe0, 0x44, 0xed, 0xd8, - 0xeb, 0x2e, 0xcf, 0xa9, 0xad, 0x85, 0x04, 0xea, 0x77, 0xb2, 0x5d, 0x5e, 0x11, 0x1d, 0x0b, 0xfe, - 0xdd, 0x5c, 0x22, 0x7f, 0x2b, 0x1b, 0x79, 0xa5, 0xf4, 0x40, 0x67, 0x5a, 0xad, 0xd6, 0x57, 0x69, - 0x53, 0x8f, 0x67, 0x5a, 0x75, 0x11, 0x2a, 0xf2, 0x9d, 0x85, 0x24, 0xea, 0x57, 0xb3, 0xb1, 0x67, - 0x5a, 0xc7, 0xb2, 0xdb, 0xb1, 0xec, 0x02, 0xad, 0x13, 0x2f, 0xcf, 0x8e, 0x25, 0xb7, 0x53, 0xc9, - 0x7d, 0x26, 0x1b, 0x7b, 0xa4, 0xf7, 0xc0, 0xca, 0x8e, 0x0d, 0xc0, 0xe4, 0xe3, 0xc1, 0x07, 0x56, - 0x93, 0x9e, 0x84, 0x01, 0x21, 0x87, 0x60, 0xa9, 0xe0, 0xf3, 0x3e, 0x07, 0xe2, 0x01, 0x6a, 0x40, - 0xa0, 0xfe, 0x40, 0x16, 0xa2, 0x8f, 0x27, 0x1f, 0x50, 0x1d, 0xfa, 0xad, 0x6c, 0xf4, 0xd9, 0xe8, - 0x83, 0xab, 0x3f, 0x57, 0x01, 0xaa, 0xed, 0xa5, 0xba, 0x88, 0x3a, 0xd8, 0x2b, 0x9d, 0xc0, 0x07, - 0x50, 0x4d, 0xa2, 0x50, 0xff, 0x7d, 0x36, 0xf5, 0x2d, 0xeb, 0x83, 0x2b, 0xc0, 0x67, 0xf0, 0x54, - 0xbc, 0x6e, 0x85, 0x13, 0x39, 0x1e, 0x42, 0xb2, 0xf1, 0x97, 0x48, 0x76, 0xe2, 0x13, 0x92, 0x0f, - 0xa5, 0x98, 0x6b, 0x18, 0x8a, 0x35, 0x34, 0xd7, 0xe4, 0x1b, 0x06, 0xc9, 0x70, 0xfb, 0x7f, 0xb3, - 0xdb, 0x3d, 0xfd, 0x7d, 0x90, 0x57, 0xd5, 0xbe, 0x05, 0x7d, 0x03, 0x43, 0x54, 0xb1, 0x9e, 0x18, - 0xe2, 0xa9, 0x38, 0x5a, 0x1c, 0x24, 0x5f, 0xab, 0x09, 0x2a, 0xf5, 0x2f, 0x7b, 0xd3, 0xdf, 0x9d, - 0x3e, 0xb8, 0x22, 0x3c, 0x0f, 0xf9, 0x05, 0xdd, 0x5b, 0x15, 0x9a, 0x8c, 0xb7, 0x75, 0x2d, 0xdd, - 0x5b, 0xd5, 0x10, 0x4a, 0xae, 0x40, 0xbf, 0xa6, 0xaf, 0xf3, 0x33, 0xcf, 0x42, 0x98, 0x26, 0xc5, - 0xd1, 0xd7, 0x6b, 0xfc, 0xdc, 0x33, 0x40, 0x13, 0x35, 0x48, 0xd3, 0xc3, 0x4f, 0xbe, 0x31, 0x47, - 0x04, 0x4f, 0xd3, 0x13, 0x24, 0xe7, 0x39, 0x0f, 0xf9, 0x71, 0xdb, 0xd8, 0x40, 0x8f, 0x98, 0x21, - 0x5e, 0xd9, 0x92, 0x6d, 0x6c, 0x68, 0x08, 0x25, 0x9f, 0xcd, 0x40, 0xdf, 0x34, 0xd5, 0x0d, 0x36, - 0x42, 0x06, 0xba, 0x39, 0x94, 0x7c, 0xe4, 0x60, 0x1c, 0x4a, 0xc6, 0x56, 0x79, 0x65, 0xb2, 0xa2, - 0x88, 0xfa, 0xc9, 0x4d, 0xe8, 0x9f, 0xd0, 0x3d, 0xba, 0x62, 0x3b, 0x1b, 0xe8, 0x22, 0x33, 0x12, - 0xfa, 0x2e, 0x46, 0xf4, 0xc7, 0x27, 0xe2, 0x37, 0x63, 0x75, 0xf1, 0x4b, 0x0b, 0x0a, 0x33, 0xb1, - 0x88, 0xc4, 0xa1, 0x83, 0xa1, 0x58, 0x78, 0x86, 0xd0, 0x20, 0x3f, 0x68, 0x70, 0xac, 0x3c, 0x94, - 0x7e, 0xac, 0x8c, 0xd6, 0x23, 0xba, 0xd1, 0x61, 0x72, 0x9c, 0x61, 0x5c, 0xf4, 0xb9, 0xf5, 0x88, - 0x50, 0xcc, 0x8d, 0xa3, 0x49, 0x24, 0xea, 0x37, 0x7b, 0x21, 0xf5, 0x95, 0xda, 0xb1, 0x92, 0x1f, - 0x2b, 0x79, 0xa8, 0xe4, 0xe5, 0x84, 0x92, 0x9f, 0x4b, 0xbe, 0x7b, 0x7c, 0x8f, 0x6a, 0xf8, 0x97, - 0xf3, 0x89, 0x57, 0xd3, 0x0f, 0xf6, 0xee, 0x32, 0x94, 0x5e, 0xef, 0xb6, 0xd2, 0x0b, 0x06, 0x44, - 0x61, 0xdb, 0x01, 0xd1, 0xb7, 0xd3, 0x01, 0xd1, 0xdf, 0x71, 0x40, 0x84, 0x0a, 0x32, 0xd0, 0x51, - 0x41, 0x2a, 0x62, 0xd0, 0x40, 0xf7, 0xc4, 0x6b, 0xe7, 0xb7, 0x36, 0x8b, 0x23, 0x6c, 0x34, 0xa5, - 0xa6, 0x5c, 0x43, 0x16, 0xea, 0x37, 0xf2, 0x5d, 0x42, 0x1d, 0x1c, 0x8a, 0x8e, 0x3c, 0x03, 0xb9, - 0x52, 0xab, 0x25, 0xf4, 0xe3, 0xa4, 0x14, 0x65, 0xa1, 0x43, 0x29, 0x46, 0x4d, 0x5e, 0x84, 0x5c, - 0xe9, 0x6e, 0x35, 0x1e, 0xb0, 0xbd, 0x74, 0xb7, 0x2a, 0xbe, 0xa4, 0x63, 0xd9, 0xbb, 0x55, 0xf2, - 0x72, 0x18, 0x39, 0x6d, 0xb5, 0x6d, 0xad, 0x89, 0x8d, 0xa2, 0xf0, 0xa4, 0xf5, 0x3d, 0x6d, 0xea, - 0x0c, 0xc5, 0xb6, 0x8b, 0x31, 0xda, 0x98, 0x36, 0x15, 0x76, 0xae, 0x4d, 0x7d, 0xdb, 0x6a, 0x53, - 0xff, 0x4e, 0xb5, 0x69, 0x60, 0x07, 0xda, 0x04, 0xdb, 0x6a, 0xd3, 0xe0, 0xfe, 0xb5, 0xa9, 0x05, - 0xe7, 0x92, 0xe1, 0x69, 0x02, 0x8d, 0xd0, 0x80, 0x24, 0xb1, 0xc2, 0xb1, 0x04, 0xaf, 0xfe, 0xdb, - 0x1c, 0x5b, 0xe3, 0x09, 0x7e, 0xe3, 0xe9, 0x71, 0xb5, 0x94, 0xd2, 0xea, 0xaf, 0x67, 0x3b, 0x47, - 0xd5, 0x39, 0x9a, 0x53, 0xdc, 0xf7, 0xa4, 0x4a, 0x29, 0x1f, 0x7d, 0xe5, 0xd8, 0x59, 0xca, 0x31, - 0xb6, 0x69, 0x32, 0xfb, 0x7a, 0xa6, 0x53, 0xa8, 0x9f, 0x7d, 0x49, 0xec, 0xf1, 0xa4, 0xb3, 0x1a, - 0xba, 0xe0, 0xbb, 0x51, 0x2f, 0xb5, 0x78, 0xbe, 0xd8, 0xdc, 0x1e, 0xf3, 0xc5, 0xfe, 0x5e, 0x06, - 0x4e, 0xde, 0x6a, 0x2f, 0x51, 0xe1, 0x9c, 0x16, 0x34, 0xe3, 0x2d, 0x00, 0x06, 0x16, 0x4e, 0x2c, - 0x19, 0x74, 0x62, 0xf9, 0x80, 0x1c, 0xa6, 0x27, 0x56, 0xe0, 0x6a, 0x48, 0xcd, 0x1d, 0x58, 0x2e, - 0xf8, 0x7e, 0x9a, 0x6b, 0xed, 0x25, 0x5a, 0x4b, 0x78, 0xb2, 0x48, 0xdc, 0xcf, 0xbd, 0xc2, 0x3d, - 0xe0, 0xf7, 0xea, 0x34, 0xf2, 0xab, 0xd9, 0x8e, 0x91, 0x91, 0x8e, 0x6c, 0x62, 0x9a, 0x8f, 0xa5, - 0xf6, 0x4a, 0x3c, 0x41, 0x4d, 0x0a, 0x49, 0x8c, 0x63, 0x1a, 0x97, 0x74, 0x81, 0x1d, 0xf1, 0x74, - 0x49, 0xef, 0xaa, 0xc0, 0xfe, 0x38, 0xd3, 0x31, 0x82, 0xd5, 0x51, 0x15, 0x98, 0xfa, 0x4f, 0x73, - 0x7e, 0xe0, 0xac, 0x7d, 0x7d, 0xc2, 0x93, 0x30, 0x20, 0xde, 0x0f, 0x46, 0x7d, 0x6b, 0xc5, 0x51, - 0x1e, 0x1e, 0x0d, 0x07, 0x04, 0x6c, 0x99, 0x97, 0x1c, 0x7f, 0x25, 0xdf, 0x5a, 0xc9, 0xe9, 0x57, - 0x93, 0x48, 0xd8, 0x42, 0x3e, 0x79, 0xdf, 0xf4, 0xd0, 0x2a, 0x60, 0x7d, 0x99, 0xe3, 0x0b, 0x39, - 0xbd, 0x6f, 0x7a, 0xdc, 0x26, 0x08, 0xd0, 0x6c, 0x91, 0xae, 0x86, 0xc9, 0x20, 0xc5, 0x22, 0xed, - 0x8a, 0x9c, 0x98, 0xe2, 0x45, 0xd8, 0x93, 0x30, 0x20, 0x1c, 0x56, 0x85, 0x9b, 0x89, 0x68, 0xad, - 0x70, 0x71, 0xc5, 0xd6, 0x06, 0x04, 0x8c, 0xa3, 0x46, 0x57, 0x42, 0xc7, 0x3a, 0xe4, 0xe8, 0x20, - 0x44, 0x13, 0x18, 0x72, 0x1d, 0x46, 0xaa, 0x9e, 0x6e, 0x19, 0xba, 0x63, 0xcc, 0xb7, 0xbd, 0x56, - 0xdb, 0x93, 0x8d, 0x52, 0xd7, 0x33, 0xec, 0xb6, 0xa7, 0xc5, 0x28, 0xc8, 0x07, 0x61, 0xd8, 0x87, - 0x4c, 0x3a, 0x8e, 0xed, 0xc8, 0x96, 0x87, 0xeb, 0x19, 0xd4, 0x71, 0xb4, 0x28, 0x01, 0xf9, 0x10, - 0x0c, 0x57, 0xac, 0x7b, 0x36, 0xcf, 0x32, 0x7a, 0x5b, 0x9b, 0x11, 0x76, 0x08, 0xbe, 0xb2, 0x32, - 0x03, 0x44, 0xad, 0xed, 0x34, 0xb4, 0x28, 0xa1, 0xba, 0x95, 0x4d, 0xc6, 0x17, 0x7b, 0x70, 0x37, - 0x2d, 0x57, 0xa2, 0xce, 0x74, 0xe8, 0x41, 0x8a, 0x06, 0xa1, 0xec, 0xcb, 0xcb, 0xed, 0xc2, 0xeb, - 0xd0, 0x7f, 0x8b, 0x6e, 0x70, 0xbf, 0xcf, 0x42, 0xe8, 0x2a, 0xbc, 0x26, 0x60, 0xf2, 0x89, 0xab, - 0x4f, 0xa7, 0x7e, 0x2d, 0x9b, 0x8c, 0x9c, 0xf6, 0xe0, 0x0a, 0xfb, 0x83, 0xd0, 0x87, 0xa2, 0xac, - 0xf8, 0x47, 0xfe, 0x28, 0x40, 0x14, 0x77, 0xd4, 0x03, 0xd9, 0x27, 0x53, 0x7f, 0xb6, 0x10, 0x0f, - 0xa7, 0xf7, 0xe0, 0x4a, 0xef, 0x25, 0x18, 0x9c, 0xb0, 0x2d, 0xd7, 0x74, 0x3d, 0x6a, 0xd5, 0x7d, - 0x85, 0x7d, 0x88, 0x19, 0x54, 0xf5, 0x10, 0x2c, 0x3f, 0x2f, 0x92, 0xa8, 0xf7, 0xa2, 0xbc, 0xe4, - 0x39, 0x18, 0x40, 0x91, 0xa3, 0x9f, 0xb4, 0x94, 0xc5, 0x7c, 0x89, 0x01, 0xe3, 0x4e, 0xd2, 0x21, - 0x29, 0xb9, 0x0d, 0xfd, 0x13, 0xab, 0x66, 0xc3, 0x70, 0xa8, 0x85, 0xfe, 0xc2, 0xd2, 0xab, 0xe5, - 0x68, 0x5f, 0x5e, 0xc5, 0x7f, 0x91, 0x96, 0x37, 0xa7, 0x2e, 0x8a, 0x45, 0x1e, 0x58, 0x09, 0xd8, - 0xb9, 0x1f, 0xcb, 0x02, 0x84, 0x05, 0xc8, 0x23, 0x90, 0x0d, 0xf2, 0xac, 0xa1, 0x9b, 0x4a, 0x44, - 0x83, 0xb2, 0xb8, 0x54, 0x88, 0xb1, 0x9d, 0xdd, 0x76, 0x6c, 0xdf, 0x86, 0x02, 0x3f, 0xf1, 0x42, - 0x4f, 0x72, 0x29, 0xc2, 0x57, 0xc7, 0x06, 0x5f, 0x45, 0x7a, 0xbe, 0x99, 0x45, 0xcb, 0x33, 0xe2, - 0x95, 0xcd, 0x99, 0x9d, 0xab, 0x43, 0x2f, 0xfe, 0x45, 0x2e, 0x41, 0x1e, 0xa5, 0x98, 0xc1, 0x7d, - 0x2c, 0xce, 0xd2, 0x31, 0xf9, 0x21, 0x9e, 0x75, 0xd3, 0x84, 0x6d, 0x79, 0xac, 0x6a, 0x6c, 0xf5, - 0x90, 0x90, 0x8b, 0x80, 0x45, 0xe4, 0x22, 0x60, 0xea, 0xff, 0x93, 0x4d, 0x09, 0xf4, 0xf8, 0xe0, - 0x0e, 0x93, 0x17, 0x00, 0xf0, 0xb5, 0x36, 0x93, 0xa7, 0xff, 0x44, 0x03, 0x47, 0x09, 0x32, 0x42, - 0xb5, 0x8d, 0x6c, 0x3b, 0x42, 0x62, 0xf5, 0x0f, 0x32, 0x89, 0xe8, 0x80, 0xfb, 0x92, 0xa3, 0x6c, - 0x95, 0x65, 0xf7, 0x68, 0xc6, 0xfa, 0x7d, 0x91, 0xdb, 0x5d, 0x5f, 0x44, 0xbf, 0xe5, 0x00, 0x2c, - 0xd3, 0xc3, 0xfc, 0x96, 0x6f, 0x66, 0xd3, 0x62, 0x25, 0x1e, 0x4d, 0x15, 0xbf, 0x11, 0x18, 0xa5, - 0xf9, 0x9d, 0x64, 0x28, 0x17, 0x66, 0xea, 0x27, 0xe1, 0x44, 0x2c, 0x82, 0xa0, 0x48, 0x7e, 0x78, - 0xa9, 0x7b, 0x28, 0xc2, 0xce, 0xef, 0xfc, 0x23, 0x64, 0xea, 0x7f, 0xc8, 0x74, 0x8f, 0x1f, 0x79, - 0xe8, 0xaa, 0x93, 0x22, 0x80, 0xdc, 0xdf, 0x8d, 0x00, 0x0e, 0x60, 0x1b, 0x7c, 0xb4, 0x05, 0xf0, - 0x1e, 0x99, 0x3c, 0xde, 0x6d, 0x01, 0xfc, 0x6c, 0x66, 0xdb, 0xf0, 0x9f, 0x87, 0x2d, 0x03, 0xf5, - 0x1f, 0x65, 0x52, 0xc3, 0x74, 0xee, 0xab, 0x5d, 0x2f, 0x43, 0x81, 0xbb, 0xd5, 0x88, 0x56, 0x49, - 0x89, 0x4d, 0x18, 0xb4, 0x43, 0x79, 0x51, 0x86, 0xcc, 0x40, 0x1f, 0x6f, 0x83, 0x11, 0x4f, 0x00, - 0x9c, 0xd2, 0x4e, 0xa3, 0xd3, 0xe4, 0x28, 0xd0, 0xea, 0xef, 0x67, 0x12, 0x51, 0x43, 0x0f, 0xf1, - 0xdb, 0xc2, 0xa9, 0x3a, 0xb7, 0xf3, 0xa9, 0x5a, 0xfd, 0x8b, 0x6c, 0x7a, 0xd0, 0xd2, 0x43, 0xfc, - 0x90, 0x83, 0x38, 0x4e, 0xdb, 0xdb, 0xba, 0xb5, 0x08, 0x23, 0x51, 0x59, 0x88, 0x65, 0xeb, 0x62, - 0x7a, 0xe8, 0xd6, 0x0e, 0xad, 0x88, 0xf1, 0x50, 0xdf, 0xc9, 0x24, 0xe3, 0xad, 0x1e, 0xfa, 0xfc, - 0xb4, 0x37, 0x6d, 0x89, 0x7e, 0xca, 0x7b, 0x64, 0xad, 0x39, 0x88, 0x4f, 0x79, 0x8f, 0xac, 0x1a, - 0x7b, 0xfb, 0x94, 0x5f, 0xce, 0x76, 0x0a, 0x57, 0x7b, 0xe8, 0x1f, 0xf4, 0x51, 0x59, 0xc8, 0xbc, - 0x65, 0xe2, 0xd3, 0x1e, 0xe9, 0x14, 0x1f, 0xb6, 0x03, 0xcf, 0x04, 0x9f, 0xbd, 0x8d, 0xf1, 0x54, - 0x61, 0xbd, 0x47, 0x14, 0xf9, 0x68, 0x08, 0xeb, 0x3d, 0x32, 0x54, 0xde, 0x7b, 0xc2, 0xfa, 0x9d, - 0xec, 0x4e, 0x63, 0x24, 0x1f, 0x0b, 0x2f, 0x21, 0xbc, 0x2f, 0x66, 0x93, 0xb1, 0xbb, 0x0f, 0x5d, - 0x4c, 0x53, 0x50, 0x10, 0x51, 0xc4, 0x3b, 0x0a, 0x87, 0xe3, 0x3b, 0x59, 0x34, 0xe2, 0x3b, 0x6e, - 0x80, 0xb8, 0xc8, 0xd9, 0x99, 0x48, 0x38, 0xad, 0xfa, 0x9d, 0x4c, 0x2c, 0xd0, 0xf5, 0xa1, 0x1c, - 0x21, 0xec, 0x69, 0x49, 0x22, 0xaf, 0xf8, 0x87, 0x99, 0xf9, 0x58, 0xa0, 0xd1, 0xe0, 0x7b, 0xca, - 0xd4, 0xd3, 0xcd, 0x46, 0xbc, 0xbc, 0x88, 0x09, 0xf0, 0xb5, 0x2c, 0x8c, 0x25, 0x48, 0xc9, 0xa5, - 0x48, 0x94, 0x1c, 0x3c, 0x96, 0x8c, 0x39, 0x8f, 0xf3, 0x78, 0x39, 0xbb, 0x38, 0x49, 0xbd, 0x04, - 0xf9, 0xb2, 0xbe, 0xc1, 0xbf, 0xad, 0x97, 0xb3, 0x34, 0xf4, 0x0d, 0xf9, 0xc4, 0x0d, 0xf1, 0x64, - 0x09, 0x4e, 0xf3, 0xfb, 0x10, 0xd3, 0xb6, 0x16, 0xcd, 0x26, 0xad, 0x58, 0xb3, 0x66, 0xa3, 0x61, - 0xba, 0xe2, 0x52, 0xef, 0xc9, 0xad, 0xcd, 0xe2, 0x65, 0xcf, 0xf6, 0xf4, 0x46, 0x8d, 0xfa, 0x64, - 0x35, 0xcf, 0x6c, 0xd2, 0x9a, 0x69, 0xd5, 0x9a, 0x48, 0x29, 0xb1, 0x4c, 0x67, 0x45, 0x2a, 0x3c, - 0xa6, 0x6c, 0xb5, 0xae, 0x5b, 0x16, 0x35, 0x2a, 0xd6, 0xf8, 0x86, 0x47, 0xf9, 0x65, 0x60, 0x8e, - 0x1f, 0x09, 0xf2, 0xb7, 0xe1, 0x1c, 0xcd, 0x18, 0x2f, 0x31, 0x02, 0x2d, 0xa5, 0x90, 0xfa, 0xbb, - 0xf9, 0x94, 0x18, 0xe7, 0x47, 0x48, 0x7d, 0xfc, 0x9e, 0xce, 0x6f, 0xd3, 0xd3, 0xd7, 0xa0, 0xef, - 0x0e, 0x75, 0xf0, 0x7c, 0x8b, 0x5f, 0x30, 0xa0, 0x33, 0xfb, 0x3d, 0x0e, 0x92, 0x6f, 0x68, 0x04, - 0x15, 0x69, 0xc0, 0xb9, 0x45, 0xd6, 0x4d, 0xe9, 0x9d, 0x59, 0xd8, 0x43, 0x67, 0x76, 0xe1, 0x47, - 0xde, 0x84, 0xb3, 0x88, 0x4d, 0xe9, 0xd6, 0x3e, 0xac, 0x0a, 0xc3, 0x4f, 0xf1, 0xaa, 0xd2, 0x3b, - 0xb7, 0x53, 0x79, 0xf2, 0x51, 0x18, 0x0a, 0x06, 0x88, 0x49, 0x5d, 0x71, 0x73, 0xd1, 0x65, 0x9c, - 0xf1, 0xd8, 0x6e, 0x0c, 0x8c, 0x2e, 0x64, 0xd1, 0xf8, 0x60, 0x11, 0x5e, 0xea, 0x3f, 0xcc, 0x74, - 0x8b, 0xb5, 0x7e, 0xe8, 0xb3, 0xf2, 0x2b, 0xd0, 0x67, 0xf0, 0x8f, 0x12, 0x3a, 0xd5, 0x3d, 0x1a, - 0x3b, 0x27, 0xd5, 0xfc, 0x32, 0xea, 0x9f, 0x67, 0xba, 0x86, 0x78, 0x3f, 0xea, 0x9f, 0xf7, 0xc5, - 0x5c, 0x87, 0xcf, 0x13, 0x93, 0xe8, 0x15, 0x18, 0x35, 0xc3, 0x18, 0xb4, 0xb5, 0x30, 0xfc, 0x94, - 0x76, 0x42, 0x82, 0xe3, 0xe8, 0xba, 0x01, 0x67, 0x7c, 0xc7, 0x47, 0xc7, 0xf7, 0x10, 0x73, 0x6b, - 0x6d, 0xc7, 0xe4, 0xe3, 0x52, 0x3b, 0xe5, 0xc6, 0xdc, 0xc7, 0xdc, 0xdb, 0x8e, 0xc9, 0x2a, 0xd0, - 0xbd, 0x55, 0x6a, 0xe9, 0xb5, 0x75, 0xdb, 0x59, 0xc3, 0x00, 0xa2, 0x7c, 0x70, 0x6a, 0x27, 0x38, - 0xfc, 0xae, 0x0f, 0x26, 0x8f, 0xc1, 0xf0, 0x4a, 0xa3, 0x4d, 0x83, 0x90, 0x8d, 0xfc, 0xae, 0x4f, - 0x1b, 0x62, 0xc0, 0xe0, 0x86, 0xe4, 0x02, 0x00, 0x12, 0x79, 0x18, 0x80, 0x1f, 0x2f, 0xf6, 0xb4, - 0x01, 0x06, 0x59, 0x14, 0xdd, 0x75, 0x8e, 0x6b, 0x35, 0x17, 0x52, 0xad, 0x61, 0x5b, 0x2b, 0x35, - 0x8f, 0x3a, 0x4d, 0x6c, 0x28, 0x3a, 0x33, 0x68, 0x67, 0x90, 0x02, 0xaf, 0x4e, 0xdc, 0x19, 0xdb, - 0x5a, 0x59, 0xa4, 0x4e, 0x93, 0x35, 0xf5, 0x49, 0x20, 0xa2, 0xa9, 0x0e, 0x1e, 0x7a, 0xf0, 0x8f, - 0x43, 0x6f, 0x06, 0x4d, 0x7c, 0x04, 0x3f, 0x0d, 0xc1, 0x0f, 0x2b, 0xc2, 0x20, 0x8f, 0x5b, 0xc7, - 0x85, 0x86, 0x2e, 0x0c, 0x1a, 0x70, 0x10, 0xca, 0xeb, 0x0c, 0x08, 0xef, 0x0a, 0xee, 0xd5, 0xad, - 0x89, 0x5f, 0xea, 0xe7, 0x72, 0x69, 0x51, 0xe9, 0xf7, 0xa5, 0x68, 0xe1, 0xb4, 0x9a, 0xdd, 0xd5, - 0xb4, 0x7a, 0xc2, 0x6a, 0x37, 0x6b, 0x7a, 0xab, 0x55, 0x5b, 0x36, 0x1b, 0xf8, 0xac, 0x0a, 0x17, - 0x3e, 0x6d, 0xd8, 0x6a, 0x37, 0x4b, 0xad, 0xd6, 0x14, 0x07, 0x92, 0x27, 0x60, 0x8c, 0xd1, 0x61, - 0x27, 0x05, 0x94, 0x79, 0xa4, 0x64, 0x0c, 0x30, 0xf0, 0xab, 0x4f, 0xfb, 0x10, 0xf4, 0x0b, 0x9e, - 0x7c, 0xad, 0xea, 0xd5, 0xfa, 0x38, 0x33, 0x97, 0xf5, 0x5c, 0xc0, 0x86, 0x4f, 0xae, 0xbd, 0xda, - 0x80, 0x5f, 0x1e, 0xc3, 0x1b, 0x5b, 0xed, 0x26, 0x8f, 0x88, 0xd5, 0x87, 0xc8, 0xe0, 0x37, 0xb9, - 0x04, 0x23, 0x8c, 0x4b, 0x20, 0x30, 0x1e, 0x11, 0xb6, 0x57, 0x8b, 0x41, 0xc9, 0x75, 0x38, 0x15, - 0x81, 0x70, 0x1b, 0x94, 0x3f, 0x13, 0xe8, 0xd5, 0x52, 0x71, 0xea, 0x57, 0x73, 0xd1, 0x58, 0xf9, - 0x87, 0xd0, 0x11, 0x67, 0xa1, 0xcf, 0x76, 0x56, 0x6a, 0x6d, 0xa7, 0x21, 0xc6, 0x5e, 0xc1, 0x76, - 0x56, 0x6e, 0x3b, 0x0d, 0x72, 0x1a, 0x0a, 0xac, 0x77, 0x4c, 0x43, 0x0c, 0xb1, 0x5e, 0xbd, 0xd5, - 0xaa, 0x18, 0xa4, 0xc4, 0x3b, 0x04, 0xa3, 0x89, 0xd6, 0xea, 0xb8, 0xb5, 0xe7, 0x4e, 0x09, 0xbd, - 0x7c, 0xc5, 0x4b, 0x20, 0xb1, 0x9f, 0x30, 0xc6, 0x28, 0x3f, 0x08, 0x88, 0xb1, 0x30, 0x70, 0x5b, - 0x62, 0xf0, 0x3e, 0x89, 0xb3, 0x10, 0xc8, 0x90, 0x05, 0xdf, 0xc4, 0x18, 0xa4, 0x0c, 0x24, 0xa4, - 0x6a, 0xda, 0x86, 0xb9, 0x6c, 0x52, 0xfe, 0xaa, 0xa3, 0x97, 0x5f, 0xfc, 0x26, 0xb1, 0xda, 0xa8, - 0xcf, 0x64, 0x56, 0x40, 0xc8, 0x4b, 0x5c, 0x09, 0x39, 0x1d, 0xae, 0x7d, 0xbc, 0x6f, 0xb9, 0x9d, - 0x16, 0x43, 0xa1, 0x66, 0x62, 0x79, 0x5c, 0x08, 0xd5, 0x77, 0x72, 0xc9, 0x84, 0x09, 0x87, 0x62, - 0xd7, 0x4c, 0x03, 0x88, 0x7c, 0x28, 0xe1, 0xe5, 0x5a, 0xe0, 0x71, 0x1e, 0x62, 0x3a, 0xf0, 0x90, - 0xca, 0x92, 0x2b, 0xd0, 0xcf, 0xbf, 0xa8, 0x52, 0x16, 0xf6, 0x0e, 0xba, 0x88, 0xb9, 0x2d, 0x73, - 0x79, 0x19, 0xfd, 0xc9, 0x02, 0x34, 0xb9, 0x04, 0x7d, 0xe5, 0xb9, 0x6a, 0xb5, 0x34, 0xe7, 0xdf, - 0x14, 0xe3, 0xfb, 0x12, 0xc3, 0x72, 0x6b, 0xae, 0x6e, 0xb9, 0x9a, 0x8f, 0x24, 0x8f, 0x41, 0xa1, - 0xb2, 0x80, 0x64, 0xfc, 0xd5, 0xe4, 0xe0, 0xd6, 0x66, 0xb1, 0xcf, 0x6c, 0x71, 0x2a, 0x81, 0xc2, - 0x7a, 0xef, 0x54, 0xca, 0x92, 0xbb, 0x04, 0xaf, 0xf7, 0x9e, 0x69, 0xe0, 0xb5, 0xb3, 0x16, 0xa0, - 0xc9, 0xb3, 0x30, 0x54, 0xa5, 0x8e, 0xa9, 0x37, 0xe6, 0xda, 0xb8, 0x55, 0xe4, 0x2e, 0x62, 0x63, - 0x5b, 0x9b, 0xc5, 0x61, 0x17, 0xe1, 0x35, 0x0b, 0x11, 0x5a, 0x84, 0x8c, 0x9c, 0x87, 0xfc, 0xb4, - 0x69, 0xf9, 0x4f, 0x18, 0xd0, 0xc7, 0x7d, 0xd5, 0xb4, 0x3c, 0x0d, 0xa1, 0xea, 0xbf, 0xca, 0xa6, - 0x67, 0x9d, 0x38, 0x84, 0xe1, 0xb8, 0xc7, 0x9b, 0xde, 0x98, 0x12, 0xe4, 0xf7, 0xa1, 0x04, 0xcb, - 0x70, 0xa2, 0x64, 0x34, 0x4d, 0xab, 0x84, 0x3f, 0xdd, 0xd9, 0xa9, 0x12, 0x0e, 0x6f, 0xe9, 0x09, - 0x5d, 0x0c, 0x2d, 0xbe, 0x87, 0xc7, 0xdb, 0x65, 0xa8, 0x9a, 0xce, 0x71, 0xb5, 0xe6, 0xb2, 0x5e, - 0xab, 0xf3, 0x84, 0x0d, 0x5a, 0x9c, 0xa9, 0xfa, 0xa3, 0xd9, 0x6d, 0x12, 0x65, 0x3c, 0x88, 0xd2, - 0x57, 0xbf, 0x94, 0xed, 0x9e, 0xab, 0xe4, 0x81, 0x14, 0xca, 0x5f, 0x65, 0x53, 0x32, 0x87, 0xec, - 0x4b, 0x12, 0x57, 0xa0, 0x9f, 0xb3, 0x09, 0x5c, 0x6d, 0x71, 0xc6, 0xe1, 0xca, 0x8a, 0x33, 0x9d, - 0x8f, 0x26, 0x73, 0x70, 0xaa, 0xb4, 0xbc, 0x4c, 0xeb, 0x5e, 0x18, 0x79, 0x79, 0x2e, 0x0c, 0x94, - 0xca, 0x23, 0xcd, 0x0a, 0x7c, 0x18, 0xb9, 0x19, 0x03, 0x82, 0xa4, 0x96, 0x23, 0x8b, 0x70, 0x26, - 0x0e, 0xaf, 0x72, 0x33, 0x3d, 0x2f, 0x05, 0x9f, 0x4d, 0x70, 0xe4, 0xff, 0x69, 0x1d, 0xca, 0xa6, - 0xb5, 0x12, 0xa7, 0xd3, 0xde, 0x6e, 0xad, 0xc4, 0xb9, 0x35, 0xb5, 0x9c, 0xfa, 0xb5, 0x9c, 0x9c, - 0x60, 0xe5, 0xc1, 0x75, 0x8a, 0xba, 0x11, 0x71, 0x85, 0xde, 0xe9, 0x90, 0x79, 0x56, 0x44, 0xf9, - 0x30, 0xda, 0x8e, 0xef, 0x35, 0x18, 0x44, 0x19, 0x40, 0xa0, 0xec, 0xff, 0x17, 0x50, 0x92, 0x0a, - 0xe4, 0x4b, 0xce, 0x0a, 0x37, 0x41, 0xb7, 0x7b, 0xf8, 0xa4, 0x3b, 0x2b, 0x6e, 0xfa, 0xc3, 0x27, - 0xc6, 0x42, 0xfd, 0x91, 0x6c, 0x97, 0x9c, 0x28, 0x0f, 0xe2, 0x24, 0xf2, 0xc4, 0x2c, 0x0f, 0x72, - 0x7c, 0xcb, 0xb4, 0x0c, 0xf2, 0x10, 0x9c, 0xbe, 0x5d, 0x9d, 0xd4, 0x6a, 0xb7, 0x2a, 0x73, 0xe5, - 0xda, 0xed, 0xb9, 0xea, 0xc2, 0xe4, 0x44, 0x65, 0xaa, 0x32, 0x59, 0x1e, 0xed, 0x21, 0x27, 0xe1, - 0x44, 0x88, 0x9a, 0xbe, 0x3d, 0x5b, 0x9a, 0x1b, 0xcd, 0x90, 0x31, 0x18, 0x0e, 0x81, 0xe3, 0xf3, - 0x8b, 0xa3, 0xd9, 0x27, 0xde, 0x0f, 0x83, 0xb8, 0x8b, 0xe3, 0x2b, 0x1a, 0x19, 0x82, 0xfe, 0xf9, - 0xf1, 0xea, 0xa4, 0x76, 0x07, 0x99, 0x00, 0x14, 0xca, 0x93, 0x73, 0x8c, 0x61, 0xe6, 0x89, 0x7f, - 0x9b, 0x01, 0xa8, 0x4e, 0x2d, 0x2e, 0x08, 0xc2, 0x41, 0xe8, 0xab, 0xcc, 0xdd, 0x29, 0xcd, 0x54, - 0x18, 0x5d, 0x3f, 0xe4, 0xe7, 0x17, 0x26, 0x59, 0x0d, 0x03, 0xd0, 0x3b, 0x31, 0x33, 0x5f, 0x9d, - 0x1c, 0xcd, 0x32, 0xa0, 0x36, 0x59, 0x2a, 0x8f, 0xe6, 0x18, 0xf0, 0xae, 0x56, 0x59, 0x9c, 0x1c, - 0xcd, 0xb3, 0x3f, 0x67, 0xaa, 0x8b, 0xa5, 0xc5, 0xd1, 0x5e, 0xf6, 0xe7, 0x14, 0xfe, 0x59, 0x60, - 0xcc, 0xaa, 0x93, 0x8b, 0xf8, 0xa3, 0x8f, 0x35, 0x61, 0xca, 0xff, 0xd5, 0xcf, 0x50, 0x8c, 0x75, - 0xb9, 0xa2, 0x8d, 0x0e, 0xb0, 0x1f, 0x8c, 0x25, 0xfb, 0x01, 0xac, 0x71, 0xda, 0xe4, 0xec, 0xfc, - 0x9d, 0xc9, 0xd1, 0x41, 0xc6, 0x6b, 0xf6, 0x16, 0x03, 0x0f, 0xb1, 0x3f, 0xb5, 0x59, 0xf6, 0xe7, - 0x30, 0xe3, 0xa4, 0x4d, 0x96, 0x66, 0x16, 0x4a, 0x8b, 0xd3, 0xa3, 0x23, 0xac, 0x3d, 0xc8, 0xf3, - 0x04, 0x2f, 0x39, 0x57, 0x9a, 0x9d, 0x1c, 0x1d, 0x15, 0x34, 0xe5, 0x99, 0xca, 0xdc, 0xad, 0xd1, - 0x31, 0x6c, 0xc8, 0x9b, 0xb3, 0xf8, 0x83, 0xb0, 0x02, 0xf8, 0xd7, 0xc9, 0x27, 0x3e, 0x0e, 0x85, - 0xf9, 0x2a, 0xda, 0x6d, 0x67, 0xe1, 0xe4, 0x7c, 0xb5, 0xb6, 0xf8, 0xe6, 0xc2, 0x64, 0x4c, 0xde, - 0x63, 0x30, 0xec, 0x23, 0x66, 0x2a, 0x73, 0xb7, 0x3f, 0xc2, 0xa5, 0xed, 0x83, 0x66, 0x4b, 0x13, - 0xf3, 0xd5, 0xd1, 0x2c, 0xeb, 0x15, 0x1f, 0x74, 0xb7, 0x32, 0x57, 0x9e, 0xbf, 0x5b, 0x1d, 0xcd, - 0x3d, 0x71, 0xcf, 0x4f, 0xdb, 0x3a, 0xef, 0x98, 0x2b, 0xa6, 0x45, 0x2e, 0xc0, 0x43, 0xe5, 0xc9, - 0x3b, 0x95, 0x89, 0xc9, 0xda, 0xbc, 0x56, 0xb9, 0x59, 0x99, 0x8b, 0xd5, 0x74, 0x1a, 0xc6, 0xa2, - 0xe8, 0xd2, 0x42, 0x65, 0x34, 0x43, 0xce, 0x00, 0x89, 0x82, 0x5f, 0x2f, 0xcd, 0x4e, 0x8d, 0x66, - 0x89, 0x02, 0xa7, 0xa2, 0xf0, 0xca, 0xdc, 0xe2, 0xed, 0xb9, 0xc9, 0xd1, 0xdc, 0x13, 0x3f, 0x9f, - 0x81, 0xd3, 0xa9, 0x61, 0x04, 0x88, 0x0a, 0x17, 0x27, 0x67, 0x4a, 0xd5, 0xc5, 0xca, 0x44, 0x75, - 0xb2, 0xa4, 0x4d, 0x4c, 0xd7, 0x26, 0x4a, 0x8b, 0x93, 0x37, 0xe7, 0xb5, 0x37, 0x6b, 0x37, 0x27, - 0xe7, 0x26, 0xb5, 0xd2, 0xcc, 0x68, 0x0f, 0x79, 0x0c, 0x8a, 0x1d, 0x68, 0xaa, 0x93, 0x13, 0xb7, - 0xb5, 0xca, 0xe2, 0x9b, 0xa3, 0x19, 0xf2, 0x28, 0x5c, 0xe8, 0x48, 0xc4, 0x7e, 0x8f, 0x66, 0xc9, - 0x45, 0x38, 0xd7, 0x89, 0xe4, 0x8d, 0x99, 0xd1, 0xdc, 0x13, 0x3f, 0x91, 0x01, 0x92, 0x7c, 0x07, - 0x4e, 0x1e, 0x81, 0xf3, 0x4c, 0x2f, 0x6a, 0x9d, 0x1b, 0xf8, 0x28, 0x5c, 0x48, 0xa5, 0x90, 0x9a, - 0x57, 0x84, 0x87, 0x3b, 0x90, 0x88, 0xc6, 0x9d, 0x07, 0x25, 0x9d, 0x00, 0x9b, 0xf6, 0x9b, 0x19, - 0x38, 0x9d, 0x6a, 0x44, 0x92, 0xcb, 0xf0, 0xbe, 0x52, 0x79, 0x96, 0xf5, 0xcd, 0xc4, 0x62, 0x65, - 0x7e, 0xae, 0x5a, 0x9b, 0x9d, 0x2a, 0xd5, 0x98, 0xf6, 0xdd, 0xae, 0xc6, 0x7a, 0xf3, 0x12, 0xa8, - 0x5d, 0x28, 0x27, 0xa6, 0x4b, 0x73, 0x37, 0xd9, 0xf0, 0x23, 0xef, 0x83, 0x47, 0x3a, 0xd2, 0x4d, - 0xce, 0x95, 0xc6, 0x67, 0x26, 0xcb, 0xa3, 0x59, 0xf2, 0x38, 0x3c, 0xda, 0x91, 0xaa, 0x5c, 0xa9, - 0x72, 0xb2, 0xdc, 0x78, 0xf9, 0x9d, 0x7f, 0x7c, 0xb1, 0xe7, 0x9d, 0x6f, 0x5d, 0xcc, 0xfc, 0xd1, - 0xb7, 0x2e, 0x66, 0xfe, 0xe2, 0x5b, 0x17, 0x33, 0x1f, 0xbd, 0xbe, 0x9b, 0xf7, 0xfd, 0x7c, 0xda, - 0x5a, 0x2a, 0xe0, 0x84, 0xfe, 0xcc, 0x7f, 0x0c, 0x00, 0x00, 0xff, 0xff, 0x72, 0xfa, 0x33, 0x89, - 0x04, 0x58, 0x01, 0x00, + 0xd6, 0xd4, 0xef, 0x6b, 0x3e, 0x5c, 0xfd, 0xff, 0x33, 0x30, 0x22, 0x84, 0x2a, 0x98, 0xef, 0x4b, + 0xaa, 0xa1, 0x74, 0xb2, 0xfb, 0x96, 0x4e, 0x6e, 0xef, 0xd2, 0x51, 0x7f, 0x3a, 0x07, 0xca, 0x94, + 0xd9, 0xa0, 0x8b, 0x8e, 0x6e, 0xb9, 0xcb, 0xd4, 0x11, 0xdb, 0xe9, 0x49, 0xc6, 0x6a, 0x5f, 0x1f, + 0x28, 0x4d, 0x29, 0xd9, 0x3d, 0x4d, 0x29, 0x1f, 0x80, 0x01, 0xd1, 0x98, 0xc0, 0x95, 0x11, 0x47, + 0x8d, 0xe3, 0x03, 0xb5, 0x10, 0xcf, 0x88, 0x4b, 0xad, 0x96, 0x63, 0xdf, 0xa3, 0x0e, 0xbf, 0xa5, + 0x12, 0xc4, 0xba, 0x0f, 0xd4, 0x42, 0xbc, 0xc4, 0x99, 0xfa, 0xf6, 0xa2, 0xcc, 0x99, 0x3a, 0x5a, + 0x88, 0x27, 0x97, 0xa1, 0x7f, 0xc6, 0xae, 0xeb, 0x28, 0x68, 0x3e, 0xad, 0x0c, 0x6d, 0x6d, 0x16, + 0xfb, 0x1b, 0x02, 0xa6, 0x05, 0x58, 0x46, 0x59, 0xb6, 0xd7, 0xad, 0x86, 0xad, 0x73, 0xe7, 0x97, + 0x7e, 0x4e, 0x69, 0x08, 0x98, 0x16, 0x60, 0x19, 0x25, 0x93, 0x39, 0x3a, 0x15, 0xf5, 0x87, 0x3c, + 0x97, 0x05, 0x4c, 0x0b, 0xb0, 0xea, 0xaf, 0xe5, 0x99, 0xf6, 0xba, 0xe6, 0xdb, 0x0f, 0xfc, 0xba, + 0x10, 0x0e, 0x98, 0xde, 0x3d, 0x0c, 0x98, 0x07, 0xe6, 0xc0, 0x4e, 0xfd, 0xeb, 0x3e, 0x00, 0x21, + 0xfd, 0xc9, 0xe3, 0xcd, 0xe1, 0xfe, 0xb4, 0xa6, 0x0c, 0x63, 0x93, 0xd6, 0xaa, 0x6e, 0xd5, 0xa9, + 0x11, 0x1e, 0x5b, 0x16, 0x70, 0x68, 0xa3, 0x13, 0x24, 0x15, 0xc8, 0xf0, 0xdc, 0x52, 0x4b, 0x16, + 0x20, 0x4f, 0xc3, 0x60, 0xc5, 0xf2, 0xa8, 0xa3, 0xd7, 0x3d, 0xf3, 0x1e, 0x15, 0x53, 0x03, 0xde, + 0x0c, 0x9b, 0x21, 0x58, 0x93, 0x69, 0xc8, 0x0d, 0x18, 0x5a, 0xd0, 0x1d, 0xcf, 0xac, 0x9b, 0x2d, + 0xdd, 0xf2, 0x5c, 0xa5, 0x1f, 0x67, 0x34, 0xb4, 0x30, 0x5a, 0x12, 0x5c, 0x8b, 0x50, 0x91, 0x4f, + 0xc0, 0x00, 0x6e, 0x4d, 0xd1, 0x5f, 0x7b, 0x60, 0xdb, 0x8b, 0xc3, 0xc7, 0x42, 0xf7, 0x40, 0x7e, + 0xfa, 0x8a, 0x37, 0xc0, 0xf1, 0xbb, 0xc3, 0x80, 0x23, 0xf9, 0x08, 0xf4, 0x4d, 0x5a, 0x06, 0x32, + 0x87, 0x6d, 0x99, 0xab, 0x82, 0xf9, 0x99, 0x90, 0xb9, 0xdd, 0x8a, 0xf1, 0xf6, 0xd9, 0xa5, 0x8f, + 0xb2, 0xc1, 0x77, 0x6f, 0x94, 0x0d, 0xbd, 0x0b, 0xc7, 0xe2, 0xc3, 0x07, 0x75, 0x2c, 0x3e, 0xb2, + 0xc7, 0x63, 0x71, 0xf5, 0x6d, 0x18, 0x1c, 0x5f, 0x98, 0x0a, 0x46, 0xef, 0x43, 0x90, 0x5b, 0x10, + 0x9e, 0x0a, 0x79, 0x6e, 0xcf, 0xb4, 0x4c, 0x43, 0x63, 0x30, 0x72, 0x05, 0xfa, 0x27, 0xd0, 0xfd, + 0x4d, 0xdc, 0x22, 0xe6, 0xf9, 0xfa, 0x57, 0x47, 0x18, 0x7a, 0xc1, 0xfa, 0x68, 0xf2, 0x38, 0xf4, + 0x2d, 0x38, 0xf6, 0x8a, 0xa3, 0x37, 0xc5, 0x1a, 0x8c, 0xae, 0x22, 0x2d, 0x0e, 0xd2, 0x7c, 0x9c, + 0xfa, 0xa3, 0x19, 0xdf, 0x6c, 0x67, 0x25, 0xaa, 0x6d, 0x3c, 0x9a, 0xc7, 0xba, 0xfb, 0x79, 0x09, + 0x97, 0x83, 0x34, 0x1f, 0x47, 0xae, 0x40, 0xef, 0xa4, 0xe3, 0xd8, 0x8e, 0xec, 0xe3, 0x4e, 0x19, + 0x40, 0xbe, 0xee, 0x45, 0x0a, 0xf2, 0x3c, 0x0c, 0xf2, 0x39, 0x87, 0x9f, 0x68, 0xe6, 0xba, 0xdd, + 0x94, 0xca, 0x94, 0xea, 0xd7, 0x73, 0x92, 0xcd, 0xc6, 0x25, 0xfe, 0x00, 0xde, 0x0a, 0x3c, 0x03, + 0xb9, 0xf1, 0x85, 0x29, 0x31, 0x01, 0x9e, 0xf4, 0x8b, 0x4a, 0xaa, 0x12, 0x2b, 0xc7, 0xa8, 0xc9, + 0x79, 0xc8, 0x2f, 0x30, 0xf5, 0x29, 0xa0, 0x7a, 0xf4, 0x6f, 0x6d, 0x16, 0xf3, 0x2d, 0xa6, 0x3f, + 0x08, 0x45, 0x2c, 0xdb, 0xcc, 0xf0, 0x1d, 0x13, 0xc7, 0x86, 0xfb, 0x98, 0xf3, 0x90, 0x2f, 0x39, + 0x2b, 0xf7, 0xc4, 0xac, 0x85, 0x58, 0xdd, 0x59, 0xb9, 0xa7, 0x21, 0x94, 0x5c, 0x03, 0xd0, 0xa8, + 0xd7, 0x76, 0x2c, 0x7c, 0x7e, 0x32, 0x80, 0xe7, 0x6f, 0x38, 0x1b, 0x3a, 0x08, 0xad, 0xd5, 0x6d, + 0x83, 0x6a, 0x12, 0x89, 0xfa, 0x8b, 0xe1, 0xc5, 0x4e, 0xd9, 0x74, 0xd7, 0x8e, 0xbb, 0x70, 0x17, + 0x5d, 0xa8, 0x8b, 0x23, 0xce, 0x64, 0x27, 0x15, 0xa1, 0x77, 0xaa, 0xa1, 0xaf, 0xb8, 0xd8, 0x87, + 0xc2, 0x97, 0x6c, 0x99, 0x01, 0x34, 0x0e, 0x8f, 0xf5, 0x53, 0xff, 0xf6, 0xfd, 0xf4, 0xe5, 0xde, + 0x60, 0xb4, 0xcd, 0x51, 0x6f, 0xdd, 0x76, 0x8e, 0xbb, 0x6a, 0xa7, 0x5d, 0x75, 0x09, 0xfa, 0xaa, + 0x4e, 0x5d, 0x3a, 0xba, 0xc0, 0xfd, 0x80, 0xeb, 0xd4, 0xf9, 0xb1, 0x85, 0x8f, 0x64, 0x74, 0x65, + 0xd7, 0x43, 0xba, 0xbe, 0x90, 0xce, 0x70, 0x3d, 0x41, 0x27, 0x90, 0x82, 0x6e, 0xc1, 0x76, 0x3c, + 0xd1, 0x71, 0x01, 0x5d, 0xcb, 0x76, 0x3c, 0xcd, 0x47, 0x92, 0x0f, 0x00, 0x2c, 0x4e, 0x2c, 0xf8, + 0xce, 0xf6, 0x03, 0xa1, 0x2f, 0xa0, 0xf0, 0xb2, 0xd7, 0x24, 0x34, 0x59, 0x84, 0x81, 0xf9, 0x16, + 0x75, 0xf8, 0x56, 0x88, 0x3f, 0x28, 0x79, 0x7f, 0x4c, 0xb4, 0xa2, 0xdf, 0xaf, 0x8a, 0xff, 0x03, + 0x72, 0xbe, 0xbe, 0xd8, 0xfe, 0x4f, 0x2d, 0x64, 0x44, 0x9e, 0x87, 0x42, 0x89, 0xdb, 0x79, 0x83, + 0xc8, 0x32, 0x10, 0x19, 0x6e, 0x41, 0x39, 0x8a, 0xef, 0xd9, 0x75, 0xfc, 0x5b, 0x13, 0xe4, 0xea, + 0x15, 0x18, 0x8d, 0x57, 0x43, 0x06, 0xa1, 0x6f, 0x62, 0x7e, 0x6e, 0x6e, 0x72, 0x62, 0x71, 0xb4, + 0x87, 0xf4, 0x43, 0xbe, 0x3a, 0x39, 0x57, 0x1e, 0xcd, 0xa8, 0xbf, 0x22, 0xcd, 0x20, 0x4c, 0xb5, + 0x8e, 0xaf, 0x86, 0xf7, 0x75, 0xdf, 0x32, 0x8a, 0xf7, 0xa1, 0x78, 0x62, 0xd0, 0x34, 0x3d, 0x8f, + 0x1a, 0x62, 0x95, 0xc0, 0xfb, 0x42, 0xef, 0xbe, 0x96, 0xc0, 0x93, 0x27, 0x61, 0x18, 0x61, 0xe2, + 0x8a, 0x90, 0xef, 0x8f, 0x45, 0x01, 0xe7, 0xbe, 0x16, 0x45, 0xaa, 0xdf, 0x08, 0x6f, 0x87, 0x67, + 0xa8, 0x7e, 0x54, 0x6f, 0x14, 0xdf, 0x23, 0xfd, 0xa5, 0xfe, 0x6d, 0x9e, 0x3f, 0x01, 0xe1, 0xef, + 0x05, 0x0f, 0x43, 0x94, 0xe1, 0x91, 0x6e, 0x6e, 0x17, 0x47, 0xba, 0x4f, 0x42, 0x61, 0x96, 0x7a, + 0xab, 0xb6, 0xef, 0xf8, 0x85, 0x1e, 0x7a, 0x4d, 0x84, 0xc8, 0x1e, 0x7a, 0x9c, 0x86, 0xac, 0x01, + 0xf1, 0x1f, 0x03, 0x06, 0x8e, 0xd8, 0xfe, 0x11, 0xf2, 0xd9, 0xc4, 0x3e, 0xa5, 0x8a, 0x2f, 0x81, + 0xd1, 0xc7, 0xfe, 0x54, 0xe0, 0xe8, 0x2d, 0x79, 0x62, 0xfd, 0xcd, 0x66, 0xb1, 0xc0, 0x69, 0xb4, + 0x14, 0xb6, 0xe4, 0x0d, 0x18, 0x98, 0x9d, 0x2a, 0x89, 0x87, 0x81, 0xdc, 0x2b, 0xe2, 0xa1, 0x40, + 0x8a, 0x3e, 0x22, 0x10, 0x09, 0xbe, 0xb7, 0x69, 0x2e, 0xeb, 0xc9, 0x77, 0x81, 0x21, 0x17, 0xa6, + 0x2d, 0xfc, 0xe5, 0x8e, 0x38, 0x5d, 0x08, 0xb4, 0x25, 0xfa, 0x9e, 0x27, 0x2e, 0x2b, 0x8e, 0x8d, + 0x69, 0x4b, 0xff, 0x3e, 0x46, 0xf7, 0x3c, 0x8c, 0x95, 0x5a, 0xad, 0x86, 0x49, 0x0d, 0xd4, 0x17, + 0xad, 0xdd, 0xa0, 0xae, 0x70, 0xf9, 0xc1, 0xc7, 0x20, 0x3a, 0x47, 0xd6, 0xf0, 0x39, 0x6a, 0xcd, + 0x69, 0x47, 0xfd, 0x33, 0x93, 0x65, 0xd5, 0x1f, 0xcf, 0xc2, 0x99, 0x09, 0x87, 0xea, 0x1e, 0x9d, + 0x9d, 0x2a, 0x95, 0xda, 0xe8, 0x23, 0xd7, 0x68, 0x50, 0x6b, 0xe5, 0x70, 0x86, 0xf5, 0x4b, 0x30, + 0x12, 0x34, 0xa0, 0x5a, 0xb7, 0x5b, 0x54, 0x7e, 0x58, 0x55, 0xf7, 0x31, 0x35, 0x97, 0xa1, 0xb4, + 0x18, 0x29, 0xb9, 0x05, 0x27, 0x03, 0x48, 0xa9, 0xd1, 0xb0, 0xd7, 0x35, 0xda, 0x76, 0xb9, 0x63, + 0x6c, 0x3f, 0x77, 0x8c, 0x0d, 0x39, 0xe8, 0x0c, 0x5f, 0x73, 0x18, 0x81, 0x96, 0x56, 0x4a, 0xfd, + 0x4a, 0x0e, 0xce, 0xde, 0xd1, 0x1b, 0xa6, 0x11, 0x8a, 0x46, 0xa3, 0x6e, 0xcb, 0xb6, 0x5c, 0x7a, + 0x84, 0x46, 0x69, 0x64, 0x28, 0xe4, 0x0f, 0x64, 0x28, 0x24, 0xbb, 0xa8, 0x77, 0xdf, 0x5d, 0x54, + 0xd8, 0x53, 0x17, 0xfd, 0xb3, 0x0c, 0x8c, 0xfa, 0x8e, 0xff, 0xf2, 0x23, 0x6e, 0xc9, 0x2b, 0x1d, + 0x8f, 0x10, 0x63, 0x7e, 0xd0, 0x88, 0x27, 0x55, 0xe8, 0x9b, 0xbc, 0xdf, 0x32, 0x1d, 0xea, 0xee, + 0xc0, 0x89, 0xfb, 0x82, 0x38, 0x2e, 0x19, 0xa3, 0xbc, 0x48, 0xe2, 0xa4, 0x84, 0x83, 0xf1, 0x39, + 0x1f, 0x7f, 0xfa, 0x30, 0xee, 0xbf, 0x4c, 0xe7, 0xcf, 0xf9, 0xc4, 0x13, 0x89, 0xc8, 0xfb, 0xcc, + 0x90, 0x94, 0x3c, 0x06, 0xb9, 0xc5, 0xc5, 0x19, 0x31, 0x93, 0x62, 0x44, 0x00, 0xcf, 0x93, 0xdf, + 0x2b, 0x32, 0xac, 0xfa, 0xe7, 0x59, 0x00, 0xa6, 0x0a, 0x7c, 0xb8, 0x1e, 0x8a, 0x12, 0x8e, 0x43, + 0xbf, 0x2f, 0x70, 0xa1, 0x86, 0x81, 0xd7, 0x7e, 0xbc, 0x23, 0xe2, 0x75, 0x07, 0x2f, 0x34, 0x8a, + 0xbe, 0x23, 0x39, 0xbf, 0x07, 0xc0, 0x9d, 0x0d, 0x3a, 0x92, 0xfb, 0xee, 0xe3, 0x1f, 0x80, 0x01, + 0x31, 0xe3, 0xd9, 0x91, 0xf3, 0xff, 0xba, 0x0f, 0xd4, 0x42, 0x7c, 0x6c, 0x6a, 0x2d, 0xec, 0x63, + 0x21, 0xf6, 0xc5, 0xcb, 0x7b, 0xe5, 0x58, 0xbc, 0x07, 0x2c, 0xde, 0x2f, 0x08, 0xf1, 0xf2, 0x17, + 0x3c, 0x47, 0x56, 0xbc, 0x07, 0x76, 0xf6, 0xad, 0xfe, 0x49, 0x06, 0x08, 0x6b, 0xd6, 0x82, 0xee, + 0xba, 0xeb, 0xb6, 0x63, 0x70, 0xe7, 0xf4, 0x43, 0x11, 0xcc, 0xc1, 0xdd, 0x57, 0x7e, 0xbd, 0x1f, + 0x4e, 0x46, 0x1c, 0x7f, 0x8f, 0xf8, 0x64, 0x75, 0x25, 0x3a, 0x9a, 0xba, 0xbd, 0x7a, 0x79, 0x9f, + 0x7c, 0x21, 0xda, 0x1b, 0x79, 0x80, 0x26, 0xdd, 0x84, 0x3e, 0x05, 0x43, 0xe2, 0x07, 0x5b, 0xa1, + 0xfd, 0x9b, 0x2e, 0x1c, 0xa5, 0x2e, 0x03, 0x68, 0x11, 0x34, 0x79, 0x16, 0x06, 0xd8, 0x80, 0x59, + 0xc1, 0xe0, 0x21, 0x7d, 0xe1, 0x8b, 0x12, 0xc3, 0x07, 0xca, 0xeb, 0x49, 0x40, 0x29, 0xbd, 0x23, + 0xea, 0xdf, 0xc1, 0x3b, 0xa2, 0x4f, 0xc2, 0x60, 0xc9, 0xb2, 0x6c, 0x0f, 0x37, 0xe9, 0xae, 0xb8, + 0x9a, 0xe8, 0x68, 0x95, 0x3f, 0x86, 0x8f, 0xe3, 0x43, 0xfa, 0x54, 0xb3, 0x5c, 0x66, 0x48, 0xae, + 0xfb, 0xaf, 0x62, 0xa8, 0x23, 0xbc, 0xca, 0xf1, 0x7a, 0xc6, 0x11, 0xb0, 0xe4, 0xa3, 0x18, 0xec, + 0xbc, 0xe1, 0x05, 0xc7, 0x6e, 0xd9, 0x2e, 0x35, 0xb8, 0xa0, 0x06, 0xc3, 0x50, 0x03, 0x2d, 0x81, + 0xc0, 0x77, 0x6c, 0x91, 0x40, 0x1e, 0x91, 0x22, 0x64, 0x19, 0x4e, 0xf9, 0x17, 0xc5, 0xc1, 0x8b, + 0xc1, 0x4a, 0xd9, 0x55, 0x86, 0xf0, 0x55, 0x12, 0x89, 0x2b, 0x43, 0xa5, 0x3c, 0x7e, 0xd1, 0xbf, + 0x16, 0xf1, 0x9f, 0x1c, 0xd6, 0x4c, 0x43, 0xee, 0xea, 0x54, 0x7e, 0xe4, 0x7b, 0x60, 0x70, 0x56, + 0xbf, 0x5f, 0x6e, 0x8b, 0xb3, 0x97, 0xe1, 0x9d, 0xdf, 0xbe, 0x34, 0xf5, 0xfb, 0x35, 0x43, 0x94, + 0x8b, 0xd9, 0x14, 0x32, 0x4b, 0x52, 0x83, 0x33, 0x0b, 0x8e, 0xdd, 0xb4, 0x3d, 0x6a, 0xc4, 0x1e, + 0xdf, 0x9d, 0x08, 0x5f, 0xeb, 0xb6, 0x04, 0x45, 0xad, 0xcb, 0x2b, 0xbc, 0x0e, 0x6c, 0x48, 0x13, + 0x4e, 0x94, 0x5c, 0xb7, 0xdd, 0xa4, 0xe1, 0x0d, 0xd5, 0xe8, 0xb6, 0x9f, 0xf1, 0x7e, 0xe1, 0xb5, + 0xfc, 0xb0, 0x8e, 0x45, 0xf9, 0x05, 0x55, 0xcd, 0x33, 0xe5, 0x1a, 0xf1, 0x5b, 0xe2, 0xbc, 0x5f, + 0xcf, 0xf7, 0x8f, 0x8c, 0x9e, 0xd0, 0xce, 0x26, 0x1b, 0xb3, 0x68, 0x7a, 0x0d, 0xaa, 0x7e, 0x2d, + 0x03, 0x10, 0x0a, 0x98, 0x3c, 0x15, 0x8d, 0x50, 0x94, 0x09, 0x2f, 0x3a, 0x44, 0xf4, 0x82, 0x48, + 0x48, 0x22, 0x72, 0x1e, 0xf2, 0x18, 0xe1, 0x22, 0x1b, 0x1e, 0xac, 0xae, 0x99, 0x96, 0xa1, 0x21, + 0x94, 0x61, 0xa5, 0xa7, 0xe8, 0x88, 0xc5, 0x4b, 0x7d, 0x6e, 0x15, 0x96, 0xe1, 0x44, 0xb5, 0xbd, + 0xe4, 0xd7, 0x2d, 0xbd, 0xab, 0xc3, 0x40, 0x1b, 0x6e, 0x7b, 0x29, 0x78, 0x8c, 0x1a, 0x09, 0x63, + 0x12, 0x2d, 0xa2, 0xfe, 0x5a, 0x26, 0x36, 0x0b, 0x1e, 0xe2, 0xa2, 0xf7, 0xbe, 0xa4, 0x9f, 0x46, + 0x72, 0x5a, 0x52, 0x7f, 0x26, 0x0b, 0x83, 0x0b, 0xb6, 0xe3, 0x89, 0x90, 0x21, 0x47, 0x7b, 0x15, + 0x92, 0xf6, 0x4a, 0xf9, 0x5d, 0xec, 0x95, 0xce, 0x43, 0x5e, 0x72, 0x51, 0xe6, 0xf7, 0x22, 0x86, + 0xe1, 0x68, 0x08, 0x55, 0xbf, 0x37, 0x0b, 0xf0, 0x91, 0xa7, 0x9f, 0x7e, 0x80, 0x05, 0xa4, 0xfe, + 0x54, 0x06, 0x4e, 0x88, 0x8b, 0x3a, 0x29, 0xd6, 0x57, 0x9f, 0x7f, 0xc5, 0x2a, 0x8f, 0x4b, 0x0e, + 0xd2, 0x7c, 0x1c, 0x5b, 0x02, 0x26, 0xef, 0x9b, 0x1e, 0xde, 0x55, 0x48, 0xc1, 0xbe, 0xa8, 0x80, + 0xc9, 0x4b, 0x80, 0x4f, 0x47, 0x9e, 0xf2, 0xaf, 0x20, 0x73, 0xe1, 0xba, 0xc7, 0x0a, 0x4c, 0xa6, + 0x5e, 0x43, 0xaa, 0xbf, 0x99, 0x87, 0xfc, 0xe4, 0x7d, 0x5a, 0x3f, 0xe2, 0x5d, 0x23, 0x1d, 0x6c, + 0xe6, 0xf7, 0x79, 0xb0, 0xb9, 0x17, 0x9f, 0x8a, 0x57, 0xc3, 0xfe, 0x2c, 0x44, 0xab, 0x8f, 0xf5, + 0x7c, 0xbc, 0x7a, 0xbf, 0xa7, 0x8f, 0x9e, 0x4b, 0xce, 0xff, 0x99, 0x83, 0x5c, 0x75, 0x62, 0xe1, + 0x58, 0x6f, 0x0e, 0x55, 0x6f, 0xba, 0xdf, 0x59, 0xab, 0xc1, 0x35, 0x54, 0x7f, 0xe8, 0x25, 0x1a, + 0xbb, 0x71, 0xfa, 0x76, 0x0e, 0x46, 0xaa, 0x53, 0x8b, 0x0b, 0xd2, 0x49, 0xf0, 0x2d, 0xee, 0xc9, + 0x87, 0x3e, 0x65, 0xbc, 0x4b, 0xcf, 0x27, 0xec, 0x99, 0xdb, 0x15, 0xcb, 0x7b, 0xee, 0xc6, 0x1d, + 0xbd, 0xd1, 0xa6, 0x78, 0xf4, 0xc2, 0xfd, 0x7e, 0x5d, 0xf3, 0x6d, 0xfa, 0x15, 0x7c, 0xf8, 0xef, + 0x33, 0x20, 0x2f, 0x41, 0xee, 0xb6, 0xf0, 0xc8, 0xe8, 0xc4, 0xe7, 0x99, 0xeb, 0x9c, 0x0f, 0x9b, + 0x04, 0x73, 0x6d, 0xd3, 0x40, 0x0e, 0xac, 0x14, 0x2b, 0x7c, 0x53, 0x2c, 0xc0, 0x3b, 0x2a, 0xbc, + 0xe2, 0x17, 0xbe, 0x59, 0x29, 0x93, 0x2a, 0x0c, 0x2e, 0x50, 0xa7, 0x69, 0x62, 0x47, 0xf9, 0x73, + 0x76, 0x77, 0x26, 0x6c, 0xa7, 0x32, 0xd8, 0x0a, 0x0b, 0x21, 0x33, 0x99, 0x0b, 0x79, 0x13, 0x80, + 0xdb, 0x28, 0x3b, 0x8c, 0x1f, 0x79, 0x01, 0xed, 0x7e, 0x6e, 0x5a, 0xa6, 0xd8, 0x78, 0x12, 0x33, + 0xb2, 0x06, 0xa3, 0xb3, 0xb6, 0x61, 0x2e, 0x9b, 0xdc, 0xf5, 0x12, 0x2b, 0x28, 0x6c, 0xef, 0xf0, + 0xc4, 0x4c, 0xc9, 0xa6, 0x54, 0x2e, 0xad, 0x9a, 0x04, 0x63, 0xf5, 0x7f, 0xeb, 0x85, 0x3c, 0xeb, + 0xf6, 0xe3, 0xf1, 0xbb, 0x9f, 0xf1, 0x5b, 0x82, 0xd1, 0xbb, 0xb6, 0xb3, 0x66, 0x5a, 0x2b, 0x81, + 0x57, 0xbc, 0xd8, 0x9b, 0xa2, 0x27, 0xcf, 0x3a, 0xc7, 0xd5, 0x02, 0x07, 0x7a, 0x2d, 0x41, 0xbe, + 0xcd, 0x08, 0x7e, 0x01, 0x80, 0xbf, 0x75, 0x47, 0x9a, 0xfe, 0x30, 0x58, 0x05, 0x7f, 0x09, 0x8f, + 0x8e, 0xf6, 0x72, 0xb0, 0x8a, 0x90, 0x98, 0x6d, 0xc2, 0xb9, 0x2f, 0xc4, 0x00, 0xfa, 0xdd, 0xe3, + 0x26, 0x1c, 0x7d, 0x21, 0x64, 0x23, 0x80, 0x7b, 0x45, 0x2c, 0x00, 0x48, 0xf7, 0x4b, 0x10, 0x13, + 0x44, 0x64, 0x72, 0x10, 0xe1, 0xe1, 0x52, 0xae, 0x97, 0x34, 0x89, 0x07, 0x79, 0x2e, 0x76, 0x01, + 0x4e, 0x22, 0xdc, 0x3a, 0xde, 0x7f, 0x87, 0x0e, 0x54, 0x43, 0xdb, 0x39, 0x50, 0xa9, 0x9f, 0xcb, + 0xc2, 0x40, 0xb5, 0xbd, 0xe4, 0x6e, 0xb8, 0x1e, 0x6d, 0x1e, 0x71, 0x35, 0xf6, 0xb7, 0x57, 0xf9, + 0xd4, 0xed, 0xd5, 0x63, 0xbe, 0x50, 0xa4, 0x73, 0xc7, 0xc0, 0xa4, 0xf3, 0xc5, 0xf1, 0x3f, 0x67, + 0x61, 0x94, 0x5f, 0x9c, 0x95, 0x4d, 0xb7, 0x7e, 0x00, 0xce, 0xfc, 0x87, 0x2f, 0x95, 0xfd, 0x5d, + 0x36, 0xef, 0xe0, 0x89, 0x84, 0xfa, 0xe9, 0x2c, 0x0c, 0x96, 0xda, 0xde, 0x6a, 0xc9, 0x43, 0xdd, + 0x7a, 0x20, 0xf7, 0x27, 0x7f, 0x90, 0x81, 0x13, 0xac, 0x21, 0x8b, 0xf6, 0x1a, 0xb5, 0x0e, 0xe0, + 0xe0, 0x51, 0x3e, 0x40, 0xcc, 0xee, 0xf1, 0x00, 0xd1, 0x97, 0x65, 0x6e, 0x77, 0xb2, 0xc4, 0xe3, + 0x72, 0xcd, 0x6e, 0xd0, 0xa3, 0xfd, 0x19, 0x07, 0x78, 0x5c, 0xee, 0x0b, 0xe4, 0x00, 0xae, 0x67, + 0xbe, 0xbb, 0x04, 0x72, 0x00, 0x67, 0x4b, 0xdf, 0x1d, 0x02, 0xf9, 0x7a, 0x06, 0x06, 0xc6, 0x6d, + 0xef, 0x88, 0x0f, 0x7c, 0xf1, 0x15, 0x47, 0x5b, 0xcd, 0xfd, 0xaf, 0x38, 0xda, 0xba, 0xa9, 0xfe, + 0x44, 0x16, 0x4e, 0x89, 0xd8, 0xe0, 0xe2, 0xfc, 0xe1, 0x78, 0x3a, 0x16, 0x83, 0x2d, 0x29, 0x9a, + 0xe3, 0x79, 0x48, 0x88, 0xe6, 0x97, 0x72, 0x70, 0x0a, 0x43, 0x99, 0xb2, 0x6d, 0xd9, 0x77, 0x81, + 0x2d, 0x42, 0xea, 0xd1, 0x4b, 0xd0, 0xd9, 0x94, 0x4b, 0xd0, 0xbf, 0xd9, 0x2c, 0x3e, 0xb7, 0x62, + 0x7a, 0xab, 0xed, 0xa5, 0xab, 0x75, 0xbb, 0x79, 0x6d, 0xc5, 0xd1, 0xef, 0x99, 0xfc, 0xfa, 0x4f, + 0x6f, 0x5c, 0x0b, 0xd2, 0x6c, 0xe8, 0x2d, 0x53, 0x24, 0xe0, 0xa8, 0xe2, 0x5e, 0x87, 0x71, 0xf5, + 0xaf, 0x4f, 0x5d, 0x80, 0xd7, 0x6d, 0xd3, 0x12, 0x3e, 0x85, 0xdc, 0xd0, 0xad, 0xb2, 0xfd, 0xe1, + 0x5b, 0xb6, 0x69, 0xd5, 0xe2, 0x8e, 0x85, 0xbb, 0xad, 0x2f, 0x64, 0xad, 0x49, 0xd5, 0xa8, 0xff, + 0x5f, 0x06, 0x1e, 0x8a, 0x6a, 0xf1, 0x77, 0x83, 0xed, 0xf8, 0x93, 0x59, 0x38, 0x7d, 0x13, 0x85, + 0x13, 0x38, 0x72, 0x1c, 0xcf, 0x5b, 0x62, 0x70, 0xa6, 0xc8, 0xe6, 0xd8, 0xa2, 0xec, 0x2c, 0x9b, + 0xe3, 0x49, 0x5d, 0xc8, 0xe6, 0x0f, 0x33, 0x70, 0x72, 0xbe, 0x52, 0x9e, 0xf8, 0x2e, 0x19, 0x51, + 0xc9, 0xef, 0x39, 0xe2, 0x06, 0x67, 0xe2, 0x7b, 0x8e, 0xb8, 0xe9, 0xf9, 0xa5, 0x2c, 0x9c, 0xac, + 0x96, 0x66, 0x67, 0xbe, 0x5b, 0x66, 0xf0, 0x09, 0xd9, 0xeb, 0xd0, 0x3f, 0x04, 0x13, 0xb6, 0x80, + 0xfc, 0x99, 0x77, 0xae, 0x77, 0xf6, 0x46, 0x4c, 0x0a, 0xe5, 0x88, 0x4f, 0xdd, 0x07, 0x22, 0x14, + 0xa6, 0xf9, 0x11, 0xea, 0x23, 0xae, 0xf9, 0xff, 0x47, 0x01, 0x06, 0x6f, 0xb5, 0x97, 0xa8, 0x70, + 0x4e, 0x79, 0xa0, 0x4f, 0x7e, 0xaf, 0xc3, 0xa0, 0x10, 0x03, 0xde, 0x9a, 0x48, 0xc1, 0xf3, 0x44, + 0x30, 0x14, 0x1e, 0x9f, 0x48, 0x26, 0x22, 0xe7, 0x21, 0x7f, 0x87, 0x3a, 0x4b, 0xf2, 0xbb, 0xd2, + 0x7b, 0xd4, 0x59, 0xd2, 0x10, 0x4a, 0x66, 0x42, 0x97, 0xf9, 0xd2, 0x42, 0x05, 0x13, 0xa9, 0x88, + 0x0b, 0x1b, 0xcc, 0x0c, 0x13, 0xf8, 0xbd, 0xe9, 0x2d, 0x93, 0xa7, 0x60, 0x91, 0xdf, 0xb4, 0xc7, + 0x4b, 0x92, 0x39, 0x18, 0x93, 0x1d, 0x9f, 0x78, 0x16, 0x91, 0xfe, 0x14, 0x76, 0x69, 0xf9, 0x43, + 0x92, 0x45, 0xc9, 0xab, 0x30, 0xe4, 0x03, 0xd1, 0x85, 0x6b, 0x20, 0x0c, 0x5d, 0x1f, 0xb0, 0x8a, + 0xa5, 0x28, 0x8a, 0x14, 0x90, 0x19, 0xe0, 0x35, 0x04, 0xa4, 0x30, 0x88, 0xb9, 0xc4, 0x45, 0x0a, + 0x90, 0x67, 0x91, 0x01, 0x3e, 0xf3, 0x40, 0x67, 0x95, 0x41, 0x7c, 0x74, 0x89, 0x2e, 0xf9, 0x8e, + 0x80, 0xf3, 0xa7, 0xb5, 0x11, 0x32, 0x32, 0x0f, 0x10, 0x3a, 0x15, 0x88, 0x00, 0x06, 0xbb, 0x76, + 0x77, 0x90, 0x58, 0xc8, 0xd7, 0x81, 0xc3, 0x7b, 0xb9, 0x0e, 0x54, 0xff, 0x38, 0x0b, 0x83, 0xa5, + 0x56, 0x2b, 0x18, 0x0a, 0x4f, 0x41, 0xa1, 0xd4, 0x6a, 0xdd, 0xd6, 0x2a, 0x72, 0x28, 0x73, 0xbd, + 0xd5, 0xaa, 0xb5, 0x1d, 0x53, 0xf6, 0x09, 0xe5, 0x44, 0x64, 0x02, 0x86, 0x4b, 0xad, 0xd6, 0x42, + 0x7b, 0xa9, 0x61, 0xd6, 0xa5, 0xcc, 0x48, 0x3c, 0x77, 0x5c, 0xab, 0x55, 0x6b, 0x21, 0x26, 0x9e, + 0x1e, 0x2b, 0x5a, 0x86, 0x7c, 0x12, 0xc3, 0xfe, 0x88, 0xc4, 0x3c, 0x3c, 0xf5, 0x87, 0x1a, 0x04, + 0x31, 0x0f, 0xdb, 0x76, 0x35, 0x20, 0xe2, 0xc1, 0xde, 0xcf, 0xfb, 0x21, 0xf3, 0x59, 0x45, 0x89, + 0x04, 0x3c, 0x21, 0x4b, 0xf2, 0x41, 0xe8, 0x2b, 0xb5, 0x5a, 0xd2, 0x7d, 0x13, 0x3a, 0x15, 0xb1, + 0x52, 0xf1, 0xdc, 0x67, 0x82, 0xec, 0xdc, 0xcb, 0x30, 0x12, 0xad, 0x6c, 0x57, 0xc1, 0xe2, 0xbf, + 0x93, 0xc1, 0x0f, 0x3a, 0xe2, 0x3e, 0xcd, 0xcf, 0x40, 0xae, 0xd4, 0x6a, 0x89, 0xf9, 0xe8, 0x64, + 0x4a, 0x7f, 0xc4, 0x9f, 0x40, 0x97, 0x5a, 0x2d, 0xff, 0xd3, 0x8f, 0xf8, 0xe3, 0x88, 0x3d, 0x7d, + 0xfa, 0xd7, 0xf9, 0xa7, 0x1f, 0xed, 0x87, 0x0b, 0xea, 0x6f, 0xe6, 0xe0, 0x44, 0xa9, 0xd5, 0x3a, + 0x0e, 0x32, 0x7f, 0x50, 0x0f, 0xad, 0x9f, 0x06, 0x90, 0xa6, 0xc7, 0xbe, 0xe0, 0xe9, 0xd6, 0xa0, + 0x34, 0x35, 0x2a, 0x19, 0x4d, 0x22, 0xf2, 0xd5, 0xaf, 0x7f, 0x57, 0xea, 0xf7, 0xe9, 0x1c, 0x4e, + 0xc5, 0x47, 0x3d, 0x68, 0xd4, 0x7b, 0xa5, 0xdb, 0x44, 0x1f, 0x14, 0x76, 0xd5, 0x07, 0xbf, 0x1f, + 0x19, 0x3c, 0x18, 0xb4, 0xfc, 0xb8, 0x17, 0x7a, 0xf7, 0x65, 0x16, 0x8f, 0xc8, 0xc2, 0x14, 0x91, + 0x6c, 0xfc, 0x44, 0x4a, 0x22, 0xae, 0x52, 0x9d, 0xa1, 0x6a, 0xa6, 0xa1, 0xc5, 0x68, 0xfd, 0x3e, + 0xec, 0xdb, 0x55, 0x1f, 0x6e, 0x66, 0xf1, 0xed, 0x74, 0x10, 0x97, 0x69, 0xff, 0xbb, 0x8b, 0x6b, + 0x00, 0xdc, 0xf3, 0x20, 0x70, 0x6b, 0x1e, 0xe6, 0x21, 0x58, 0x78, 0x7e, 0x25, 0x11, 0x82, 0x25, + 0x24, 0x09, 0x3c, 0xa4, 0x72, 0xa9, 0x1e, 0x52, 0x57, 0xa0, 0x5f, 0xd3, 0xd7, 0xdf, 0x68, 0x53, + 0x67, 0x43, 0x98, 0x33, 0x3c, 0xec, 0xa1, 0xbe, 0x5e, 0xfb, 0x14, 0x03, 0x6a, 0x01, 0x9a, 0xa8, + 0xc1, 0xe3, 0x7b, 0xc9, 0x23, 0x84, 0x9f, 0x91, 0x07, 0x4f, 0xee, 0xf7, 0xa2, 0xe8, 0xe4, 0x45, + 0xc8, 0x95, 0xee, 0x56, 0x85, 0x64, 0x83, 0xae, 0x2d, 0xdd, 0xad, 0x0a, 0x79, 0x75, 0x2c, 0x7b, + 0xb7, 0xaa, 0x7e, 0x3a, 0x0b, 0x24, 0x49, 0x49, 0x9e, 0x83, 0x01, 0x84, 0xae, 0x30, 0x9d, 0x91, + 0x13, 0x73, 0xae, 0xbb, 0x35, 0x07, 0xa1, 0x11, 0xe3, 0xce, 0x27, 0x25, 0x2f, 0x60, 0xea, 0x63, + 0x91, 0x1a, 0x2e, 0x92, 0x98, 0x73, 0xdd, 0xf5, 0x93, 0x05, 0xc7, 0x32, 0x1f, 0x0b, 0x62, 0xb4, + 0x0b, 0xef, 0x56, 0xa7, 0x6d, 0xd7, 0x13, 0xa2, 0xe6, 0x76, 0xe1, 0xba, 0x8b, 0x19, 0x61, 0x23, + 0x76, 0x21, 0x27, 0xc3, 0xac, 0x56, 0x77, 0xab, 0xfc, 0x99, 0x8a, 0xa1, 0xd9, 0x0d, 0xdf, 0xa0, + 0xe4, 0x59, 0xad, 0xd6, 0xdd, 0x1a, 0x7f, 0xe2, 0x62, 0x60, 0xce, 0xe5, 0x48, 0x56, 0xab, 0x48, + 0x29, 0xf5, 0xf3, 0xfd, 0x30, 0x5a, 0xd6, 0x3d, 0x7d, 0x49, 0x77, 0xa9, 0xb4, 0x9b, 0x3e, 0xe1, + 0xc3, 0xfc, 0xcf, 0x91, 0xe4, 0x60, 0x2c, 0xa5, 0x7c, 0x4d, 0xbc, 0x00, 0x79, 0x29, 0xe4, 0x1b, + 0xe4, 0x1c, 0x95, 0x93, 0x98, 0x2d, 0xd5, 0x5a, 0x02, 0xac, 0x25, 0x08, 0xc9, 0x93, 0x30, 0xe8, + 0xc3, 0xd8, 0x06, 0x20, 0x17, 0xea, 0x8c, 0xb1, 0xc4, 0xec, 0x7f, 0x4d, 0x46, 0x93, 0x17, 0x60, + 0xc8, 0xff, 0x29, 0x99, 0xd6, 0x3c, 0x23, 0xdb, 0x52, 0x62, 0xf7, 0x24, 0x93, 0xca, 0x45, 0x71, + 0x7e, 0xeb, 0x8d, 0x14, 0x8d, 0x25, 0x3d, 0x8b, 0x90, 0x92, 0x4f, 0xc1, 0x88, 0xff, 0x5b, 0x6c, + 0x18, 0x78, 0x7e, 0xb8, 0x27, 0x83, 0x94, 0xce, 0x31, 0xb1, 0x5e, 0x8d, 0x92, 0xf3, 0xad, 0xc3, + 0xc3, 0x7e, 0x1e, 0x2f, 0x63, 0x29, 0xb9, 0x73, 0x88, 0x55, 0x40, 0x2a, 0x30, 0xe6, 0x43, 0x42, + 0x0d, 0xed, 0x0b, 0x77, 0x8c, 0xc6, 0x52, 0x2d, 0x55, 0x49, 0x93, 0xa5, 0x48, 0x03, 0xce, 0x47, + 0x80, 0x86, 0xbb, 0x6a, 0x2e, 0x7b, 0x62, 0xbb, 0x27, 0x62, 0x10, 0x8b, 0xc4, 0x8d, 0x01, 0x57, + 0x4e, 0xe3, 0x67, 0x60, 0x8d, 0x66, 0x87, 0xea, 0xca, 0x8d, 0x54, 0xe1, 0x94, 0x8f, 0xbf, 0x39, + 0xb1, 0xb0, 0xe0, 0xd8, 0x6f, 0xd1, 0xba, 0x57, 0x29, 0x8b, 0xed, 0x32, 0xc6, 0xa6, 0x33, 0x96, + 0x6a, 0x2b, 0xf5, 0x16, 0x53, 0x0a, 0x86, 0x8b, 0x32, 0x4f, 0x2d, 0x4c, 0xee, 0xc0, 0x69, 0x09, + 0x2e, 0xa5, 0x87, 0x86, 0x70, 0x3f, 0x2f, 0xb8, 0xa6, 0x67, 0x88, 0x4e, 0x2f, 0x4e, 0x5e, 0x86, + 0x61, 0x1f, 0xc1, 0x6f, 0x11, 0x07, 0xf1, 0x16, 0x11, 0x87, 0xa4, 0xb1, 0x54, 0x8b, 0xbf, 0xa6, + 0x8c, 0x12, 0xcb, 0x1a, 0x85, 0x19, 0xf5, 0x87, 0x22, 0x1a, 0xe5, 0x6d, 0xb4, 0x52, 0x95, 0x11, + 0xb3, 0xec, 0xbf, 0x1a, 0x6a, 0xd4, 0xbc, 0x63, 0xae, 0x98, 0x7c, 0x27, 0xed, 0x3f, 0xa0, 0x5c, + 0xaa, 0xd9, 0x08, 0x4c, 0xd3, 0x0f, 0x4e, 0x7e, 0xae, 0x04, 0x27, 0x53, 0x74, 0x6c, 0x57, 0x3b, + 0xc6, 0xcf, 0x65, 0xc3, 0x46, 0x1c, 0xf1, 0x6d, 0xe3, 0x38, 0xf4, 0xfb, 0x5f, 0x22, 0x8c, 0x07, + 0xa5, 0xd3, 0xd0, 0x8c, 0xf3, 0xf0, 0xf1, 0x11, 0x71, 0x1c, 0xf1, 0xad, 0xe4, 0x41, 0x88, 0xe3, + 0x9d, 0x4c, 0x28, 0x8e, 0x23, 0xbe, 0xbd, 0xfc, 0xc3, 0x5c, 0x38, 0x27, 0x1d, 0xef, 0x31, 0x0f, + 0xca, 0x4c, 0x0e, 0xfd, 0x60, 0x0b, 0xbb, 0x78, 0xc8, 0x28, 0xab, 0x66, 0xdf, 0x1e, 0x55, 0xf3, + 0x4f, 0x93, 0xfd, 0xc9, 0x4d, 0xcf, 0x23, 0xd9, 0x9f, 0x07, 0x30, 0x58, 0xc9, 0xf5, 0x70, 0x1d, + 0xe3, 0x36, 0x7a, 0xaf, 0x14, 0xe2, 0x6f, 0x49, 0x98, 0xe8, 0x51, 0x12, 0xf2, 0x31, 0x38, 0x1b, + 0x01, 0x2c, 0xe8, 0x8e, 0xde, 0xa4, 0x5e, 0x98, 0x71, 0x10, 0x83, 0x36, 0xf9, 0xa5, 0x6b, 0xad, + 0x00, 0x2d, 0x67, 0x31, 0xec, 0xc0, 0x41, 0x52, 0x8e, 0xbe, 0x5d, 0x38, 0x49, 0x7f, 0x39, 0x17, + 0x9a, 0x2a, 0xd1, 0xe0, 0xab, 0x1a, 0x75, 0xdb, 0x0d, 0xef, 0xc1, 0xed, 0xe0, 0xbd, 0xa5, 0xb6, + 0x98, 0x86, 0x13, 0xa5, 0xe5, 0x65, 0x5a, 0xf7, 0xfc, 0x98, 0xd2, 0xae, 0x08, 0xb7, 0xc7, 0xb7, + 0x0e, 0x02, 0x25, 0x62, 0x04, 0x47, 0x72, 0xe3, 0xc7, 0x8a, 0xa9, 0x7f, 0x96, 0x07, 0x25, 0x30, + 0xdd, 0x83, 0x87, 0x5a, 0x87, 0xb8, 0x4c, 0xbe, 0x27, 0x7a, 0xc5, 0x84, 0xb1, 0x50, 0x18, 0xd5, + 0x76, 0xb3, 0xa9, 0xe3, 0xd0, 0x63, 0x5b, 0x83, 0x62, 0x9c, 0x59, 0x48, 0xc8, 0x77, 0x03, 0xe7, + 0xc4, 0x6e, 0x80, 0x84, 0x0f, 0xe1, 0x6a, 0x2e, 0x67, 0xa1, 0x25, 0xb9, 0x92, 0x2f, 0x64, 0xe0, + 0x94, 0xdf, 0x29, 0xf3, 0x4b, 0xcc, 0x2c, 0x9e, 0xb0, 0xdb, 0x96, 0xe7, 0xef, 0x44, 0x5e, 0xec, + 0x5c, 0x1d, 0xef, 0xa4, 0xab, 0x69, 0x85, 0x79, 0x4b, 0x82, 0xc0, 0x12, 0x81, 0x42, 0xd8, 0x48, + 0x53, 0xab, 0x23, 0x91, 0x96, 0x5a, 0xef, 0xb9, 0x9b, 0xf0, 0x50, 0x47, 0x96, 0xdb, 0x99, 0xa1, + 0xbd, 0xb2, 0x19, 0xfa, 0xf7, 0x32, 0xe1, 0x44, 0x14, 0x13, 0x12, 0xb9, 0x0a, 0x10, 0x82, 0xc4, + 0xc6, 0x74, 0x64, 0x6b, 0xb3, 0x08, 0xa1, 0xd0, 0x34, 0x89, 0x82, 0xcc, 0x43, 0x41, 0x88, 0x85, + 0x67, 0xf7, 0xfd, 0xc0, 0x36, 0xbd, 0x70, 0x55, 0x96, 0x03, 0x6e, 0x3a, 0xc5, 0x37, 0x0b, 0x36, + 0xe7, 0x5e, 0x80, 0xc1, 0xbd, 0x7e, 0xd7, 0x17, 0x72, 0x40, 0xe4, 0x5d, 0xe4, 0x21, 0x9a, 0xd8, + 0x47, 0x78, 0x0a, 0xbb, 0x0c, 0xfd, 0xec, 0x13, 0x30, 0xdf, 0x85, 0x14, 0xdf, 0xb6, 0x2d, 0x60, + 0x5a, 0x80, 0x0d, 0x83, 0x4b, 0xf5, 0xa5, 0x07, 0x97, 0x52, 0x7f, 0x2c, 0x07, 0x67, 0xe4, 0x0e, + 0x29, 0x53, 0x0c, 0x99, 0x7f, 0xdc, 0x29, 0xef, 0x62, 0xa7, 0xa8, 0x50, 0xe0, 0x9b, 0x07, 0x91, + 0xbb, 0x80, 0x1f, 0xec, 0x20, 0x44, 0x13, 0x18, 0xf5, 0x1f, 0x67, 0x61, 0x78, 0xc1, 0x76, 0xbd, + 0x15, 0x87, 0xba, 0x0b, 0xba, 0xe3, 0x3e, 0xc0, 0xdd, 0xf1, 0x21, 0x18, 0xc6, 0xf0, 0x40, 0x4d, + 0x6a, 0xf1, 0x10, 0x3a, 0xbd, 0x52, 0xb2, 0x11, 0x1f, 0x21, 0xf2, 0x4a, 0x45, 0x08, 0x99, 0xf6, + 0x73, 0xcb, 0x4f, 0x0a, 0xda, 0xc4, 0xcd, 0x3e, 0x0e, 0x57, 0x7f, 0x2e, 0x07, 0x43, 0xbe, 0x94, + 0xc7, 0xcd, 0xa3, 0x7a, 0x53, 0x73, 0xb8, 0x42, 0xbe, 0x06, 0xb0, 0x60, 0x3b, 0x9e, 0xde, 0x98, + 0x0b, 0x35, 0x1f, 0x8f, 0x38, 0x5b, 0x08, 0xe5, 0x65, 0x24, 0x12, 0x5c, 0xbf, 0x42, 0xb3, 0x9a, + 0x4f, 0x4c, 0x7c, 0xfd, 0x0a, 0xa0, 0x9a, 0x44, 0xa1, 0xfe, 0x6e, 0x16, 0x4e, 0xf8, 0x9d, 0x34, + 0x79, 0x9f, 0xd6, 0xdb, 0x0f, 0xf2, 0xdc, 0x14, 0x95, 0x76, 0xef, 0xb6, 0xd2, 0x56, 0xff, 0x95, + 0x34, 0x91, 0x4c, 0x34, 0xec, 0xe3, 0x89, 0xe4, 0xef, 0x42, 0xc7, 0xd5, 0xef, 0xcf, 0xc1, 0x29, + 0x5f, 0xea, 0x53, 0x6d, 0x0b, 0x0f, 0x07, 0x26, 0xf4, 0x46, 0xe3, 0x41, 0xde, 0x8d, 0x0f, 0xfa, + 0x82, 0x98, 0x17, 0xf1, 0xf6, 0x44, 0x8e, 0xbf, 0x65, 0x01, 0xae, 0xd9, 0xa6, 0xa1, 0xc9, 0x44, + 0xe4, 0x55, 0x18, 0xf2, 0x7f, 0x96, 0x9c, 0x15, 0x7f, 0x0b, 0x8e, 0x47, 0xfd, 0x41, 0x21, 0xdd, + 0x89, 0x84, 0x15, 0x88, 0x14, 0x50, 0xff, 0x69, 0x01, 0xce, 0xdd, 0x35, 0x2d, 0xc3, 0x5e, 0x77, + 0xfd, 0x14, 0x91, 0x47, 0xfe, 0xa8, 0xeb, 0xb0, 0x53, 0x43, 0xbe, 0x01, 0xa7, 0xe3, 0x22, 0x75, + 0x82, 0xc0, 0xdd, 0xa2, 0x77, 0xd6, 0x39, 0x41, 0xcd, 0x4f, 0x16, 0x29, 0xee, 0xcb, 0xb4, 0xf4, + 0x92, 0xf1, 0x6c, 0x93, 0x7d, 0x3b, 0xc9, 0x36, 0xf9, 0x04, 0x14, 0xca, 0x76, 0x53, 0x37, 0xfd, + 0x00, 0x33, 0x38, 0x8a, 0x83, 0x7a, 0x11, 0xa3, 0x09, 0x0a, 0xc6, 0x5f, 0x54, 0x8c, 0x5d, 0x36, + 0x10, 0xf2, 0xf7, 0x0b, 0x30, 0x2b, 0x4d, 0x93, 0x89, 0x88, 0x0d, 0xc3, 0xa2, 0x3a, 0x71, 0xbb, + 0x05, 0xb8, 0x79, 0x7a, 0xd6, 0x97, 0x51, 0x67, 0xb5, 0xba, 0x1a, 0x29, 0xc7, 0xb7, 0x51, 0x3c, + 0x09, 0xa6, 0xf8, 0x18, 0x7e, 0xcf, 0xa5, 0x45, 0xf9, 0x4b, 0x42, 0xc0, 0x49, 0x66, 0x30, 0x29, + 0x04, 0x9c, 0x65, 0x64, 0x22, 0x32, 0x09, 0x63, 0x18, 0x5e, 0x39, 0xd8, 0x4a, 0x31, 0x95, 0x18, + 0x42, 0xa3, 0x12, 0x2f, 0x4d, 0x78, 0x44, 0x66, 0xf6, 0x71, 0xb5, 0xba, 0x40, 0x6b, 0xc9, 0x12, + 0xe7, 0x5e, 0x03, 0x92, 0x6c, 0xf3, 0xae, 0xae, 0x4d, 0xfe, 0x2f, 0x69, 0x5f, 0x77, 0xd4, 0x1d, + 0x5f, 0x0e, 0x62, 0xb6, 0x8b, 0xa4, 0x0e, 0xeb, 0x7d, 0x37, 0x53, 0x87, 0x15, 0x0e, 0x34, 0x75, + 0x98, 0xfa, 0xab, 0x19, 0x18, 0x4b, 0xc4, 0x19, 0x27, 0xcf, 0x00, 0x70, 0x88, 0x14, 0xcf, 0x11, + 0x03, 0xa4, 0x84, 0xb1, 0xc7, 0xc5, 0x1a, 0x18, 0x92, 0x91, 0x6b, 0xd0, 0xcf, 0x7f, 0x89, 0x18, + 0x4c, 0xc9, 0x22, 0xed, 0xb6, 0x69, 0x68, 0x01, 0x51, 0x58, 0x0b, 0x5e, 0x1c, 0xe6, 0x52, 0x8b, + 0x78, 0x1b, 0xad, 0xa0, 0x16, 0x46, 0xa6, 0x7e, 0x3e, 0x0b, 0x43, 0x41, 0x83, 0x4b, 0xc6, 0x61, + 0xe9, 0x5c, 0x41, 0x84, 0x6c, 0xcf, 0x6d, 0x17, 0xb2, 0x3d, 0x36, 0xa9, 0x8a, 0x18, 0xed, 0x07, + 0xf7, 0xee, 0xe9, 0x8b, 0x59, 0x38, 0x11, 0xd4, 0x7a, 0x88, 0x77, 0x54, 0xef, 0x21, 0x91, 0x7c, + 0x21, 0x03, 0xca, 0xb8, 0xd9, 0x68, 0x98, 0xd6, 0x4a, 0xc5, 0x5a, 0xb6, 0x9d, 0x26, 0xce, 0x7a, + 0x87, 0x77, 0x4e, 0xab, 0xfe, 0x50, 0x06, 0xc6, 0x44, 0x83, 0x26, 0x74, 0xc7, 0x38, 0xbc, 0x43, + 0xb0, 0x78, 0x4b, 0x0e, 0x4f, 0x5f, 0xd4, 0xaf, 0x66, 0x01, 0x66, 0xec, 0xfa, 0xda, 0x11, 0x7f, + 0x36, 0xf5, 0x12, 0x14, 0x78, 0x20, 0x2c, 0xa1, 0xb1, 0x63, 0xe2, 0x79, 0x10, 0xfb, 0x34, 0x8e, + 0x18, 0x1f, 0x15, 0xf3, 0x71, 0x81, 0x07, 0xd2, 0x52, 0x32, 0x9a, 0x28, 0xc2, 0x2a, 0x65, 0x74, + 0x62, 0xc1, 0x08, 0x2a, 0x65, 0xb0, 0x68, 0xa5, 0x5b, 0x9b, 0xc5, 0x7c, 0xc3, 0xae, 0xaf, 0x69, + 0x48, 0xaf, 0xfe, 0x6d, 0x86, 0xcb, 0xee, 0x88, 0x3f, 0xfe, 0xf4, 0x3f, 0x3f, 0xbf, 0xcb, 0xcf, + 0xff, 0xe1, 0x0c, 0x9c, 0xd2, 0x68, 0xdd, 0xbe, 0x47, 0x9d, 0x8d, 0x09, 0xdb, 0xa0, 0x37, 0xa9, + 0x45, 0x9d, 0xc3, 0x1a, 0x51, 0xff, 0x2b, 0xe6, 0xb8, 0x08, 0x1b, 0x73, 0xdb, 0xa5, 0xc6, 0xd1, + 0xc9, 0x3f, 0xa2, 0xfe, 0x46, 0x1f, 0x28, 0xa9, 0xa6, 0xed, 0x91, 0x35, 0xe7, 0x3a, 0xee, 0x57, + 0xf2, 0x07, 0xb5, 0x5f, 0xe9, 0xdd, 0xdd, 0x7e, 0xa5, 0xb0, 0xdb, 0xfd, 0x4a, 0xdf, 0x4e, 0xf6, + 0x2b, 0xcd, 0xf8, 0x7e, 0xa5, 0x1f, 0xf7, 0x2b, 0xcf, 0x74, 0xdd, 0xaf, 0x4c, 0x5a, 0xc6, 0x1e, + 0x77, 0x2b, 0x47, 0x36, 0x37, 0xee, 0x5e, 0xb6, 0x59, 0x97, 0xd9, 0xa4, 0x58, 0xb7, 0x1d, 0x83, + 0x1a, 0x62, 0x77, 0x85, 0x47, 0xfb, 0x8e, 0x80, 0x69, 0x01, 0x36, 0x91, 0x68, 0x78, 0x78, 0x27, + 0x89, 0x86, 0x0f, 0x60, 0xff, 0xf5, 0xb9, 0x2c, 0x8c, 0x4d, 0x50, 0xc7, 0xe3, 0x91, 0x36, 0x0f, + 0xc2, 0x73, 0xad, 0x04, 0x27, 0x24, 0x86, 0x68, 0x91, 0x67, 0x43, 0x6f, 0xbc, 0x3a, 0x75, 0xbc, + 0xb8, 0x33, 0x5f, 0x9c, 0x9e, 0x55, 0xef, 0x27, 0xfb, 0x12, 0x63, 0x37, 0xa8, 0xde, 0x87, 0x73, + 0x41, 0x9a, 0xe2, 0x97, 0x16, 0xd0, 0x4b, 0xf9, 0xbb, 0xf2, 0xbb, 0xcf, 0xdf, 0xa5, 0xfe, 0x4a, + 0x06, 0x2e, 0x69, 0xd4, 0xa2, 0xeb, 0xfa, 0x52, 0x83, 0x4a, 0xcd, 0x12, 0x2b, 0x03, 0x9b, 0x35, + 0x4c, 0xb7, 0xa9, 0x7b, 0xf5, 0xd5, 0x7d, 0xc9, 0x68, 0x0a, 0x86, 0xe4, 0xf9, 0x6b, 0x17, 0x73, + 0x5b, 0xa4, 0x9c, 0xfa, 0x1b, 0x79, 0xe8, 0x1b, 0xb7, 0xbd, 0xd7, 0xed, 0x7d, 0x26, 0x94, 0x0b, + 0xa7, 0xfc, 0xec, 0x2e, 0x0e, 0x74, 0x3e, 0x88, 0x95, 0x4b, 0x31, 0xf6, 0xd1, 0xd3, 0x73, 0xc9, + 0x4e, 0xe4, 0x22, 0xf0, 0xc9, 0x76, 0x99, 0x4a, 0xee, 0x39, 0x18, 0xc0, 0x20, 0x2d, 0xd2, 0x91, + 0x2b, 0xfa, 0x51, 0x7b, 0x0c, 0x18, 0xaf, 0x23, 0x24, 0x25, 0x1f, 0x8b, 0x84, 0x06, 0x2d, 0xec, + 0x3f, 0xf5, 0x9c, 0x1c, 0x25, 0xf4, 0x19, 0x7e, 0x5b, 0x87, 0x6d, 0x92, 0xd2, 0x74, 0xe0, 0x51, + 0x49, 0xac, 0x49, 0x01, 0xe1, 0x01, 0xa6, 0x85, 0x9b, 0x80, 0xe1, 0x71, 0xdb, 0x93, 0x7c, 0x76, + 0x07, 0xc2, 0xd7, 0x9a, 0x4c, 0xf2, 0xe9, 0x0e, 0xbb, 0xd1, 0x32, 0xea, 0xb7, 0xf3, 0x30, 0xe4, + 0xff, 0x3c, 0x24, 0xdd, 0x79, 0x0a, 0x0a, 0xd3, 0xb6, 0x94, 0xa9, 0x00, 0xfd, 0x7c, 0x57, 0x6d, + 0x37, 0xe6, 0xc0, 0x2c, 0x88, 0x98, 0xd4, 0xe7, 0x6c, 0x43, 0xf6, 0x52, 0x47, 0xa9, 0x5b, 0xb6, + 0x91, 0x78, 0xe5, 0x1b, 0x10, 0x92, 0x4b, 0x90, 0x47, 0x07, 0x7f, 0xe9, 0xb4, 0x3e, 0xe6, 0xd4, + 0x8f, 0x78, 0x49, 0x2b, 0x0b, 0xbb, 0xd5, 0xca, 0xbe, 0xbd, 0x6a, 0x65, 0xff, 0xc1, 0x6a, 0xe5, + 0x9b, 0x30, 0x84, 0x35, 0xf9, 0x89, 0xce, 0xb6, 0x5f, 0x58, 0x1f, 0x12, 0x6b, 0xdf, 0x30, 0x6f, + 0xb7, 0x48, 0x77, 0x86, 0x4b, 0x5e, 0x84, 0x55, 0x4c, 0x77, 0x61, 0x1f, 0xdb, 0xe9, 0x3f, 0xcd, + 0x40, 0xdf, 0x6d, 0x6b, 0xcd, 0xb2, 0xd7, 0xf7, 0xa7, 0x71, 0xcf, 0xc0, 0xa0, 0x60, 0x23, 0xad, + 0x2e, 0xf8, 0x70, 0xbb, 0xcd, 0xc1, 0x35, 0xe4, 0xa4, 0xc9, 0x54, 0xe4, 0xe5, 0xa0, 0x10, 0xbe, + 0xe1, 0xc9, 0x85, 0xb9, 0x3e, 0xfc, 0x42, 0xf5, 0x68, 0x7a, 0x02, 0x99, 0x9c, 0x9c, 0x87, 0x7c, + 0x99, 0x35, 0x55, 0x0a, 0x76, 0xcb, 0x9a, 0xa2, 0x21, 0x54, 0xfd, 0x5c, 0x1e, 0x46, 0x62, 0x07, + 0x5f, 0x4f, 0xc0, 0x80, 0x38, 0x78, 0x32, 0xfd, 0x7c, 0x09, 0xf8, 0xc6, 0x27, 0x00, 0x6a, 0xfd, + 0xfc, 0xcf, 0x8a, 0x41, 0x3e, 0x0c, 0x7d, 0xb6, 0x8b, 0x8b, 0x22, 0x7e, 0xcb, 0x48, 0x38, 0x84, + 0xe6, 0xab, 0xac, 0xed, 0x7c, 0x70, 0x08, 0x12, 0x59, 0x23, 0x6d, 0x17, 0x3f, 0xed, 0x06, 0x0c, + 0xe8, 0xae, 0x4b, 0xbd, 0x9a, 0xa7, 0xaf, 0xc8, 0x29, 0x14, 0x02, 0xa0, 0x3c, 0x3a, 0x10, 0xb8, + 0xa8, 0xaf, 0x90, 0xd7, 0x60, 0xb8, 0xee, 0x50, 0x5c, 0x36, 0xf5, 0x06, 0x6b, 0xa5, 0x64, 0xd6, + 0x46, 0x10, 0xf2, 0x25, 0x49, 0x88, 0xa8, 0x18, 0xe4, 0x0e, 0x0c, 0x8b, 0xcf, 0xe1, 0x0e, 0xf6, + 0x38, 0xd0, 0x46, 0xc2, 0x65, 0x8c, 0x8b, 0x84, 0xbb, 0xd8, 0x8b, 0x77, 0x16, 0x32, 0xb9, 0xcc, + 0xd7, 0x90, 0x48, 0xc9, 0x3c, 0x90, 0x75, 0xba, 0x54, 0xd3, 0xdb, 0xde, 0x2a, 0xab, 0x8b, 0x47, + 0x00, 0x17, 0x99, 0x03, 0xf1, 0x71, 0x42, 0x12, 0x2b, 0xbf, 0xd9, 0x58, 0xa7, 0x4b, 0xa5, 0x08, + 0x92, 0xdc, 0x85, 0xd3, 0xc9, 0x22, 0xec, 0x93, 0xf9, 0x0d, 0xc0, 0x63, 0x5b, 0x9b, 0xc5, 0x62, + 0x2a, 0x81, 0xc4, 0xf6, 0x64, 0x82, 0x6d, 0xc5, 0x78, 0x3d, 0xdf, 0xdf, 0x37, 0xda, 0xaf, 0x8d, + 0xb0, 0xb2, 0xbe, 0x09, 0x69, 0x1a, 0xea, 0x37, 0x32, 0xcc, 0x54, 0x64, 0x1f, 0x84, 0xa9, 0x93, + 0x99, 0xae, 0x37, 0x77, 0xa9, 0xeb, 0xcd, 0x30, 0xc9, 0x61, 0xc1, 0xed, 0x32, 0xbb, 0x6a, 0x02, + 0x4b, 0xae, 0x42, 0xc1, 0x90, 0x4f, 0xcd, 0xce, 0x44, 0x3b, 0xc1, 0xaf, 0x47, 0x13, 0x54, 0xe4, + 0x32, 0xe4, 0xd9, 0x92, 0x15, 0xdf, 0x32, 0xcb, 0xd6, 0x85, 0x86, 0x14, 0xea, 0xf7, 0x66, 0x61, + 0x48, 0xfa, 0x9a, 0xeb, 0xfb, 0xfa, 0x9c, 0x17, 0x77, 0xd6, 0x4c, 0xdf, 0xb3, 0x05, 0xf7, 0x52, + 0x7e, 0x93, 0x6f, 0x04, 0xa2, 0xd8, 0xd1, 0xad, 0x93, 0x10, 0xcc, 0x73, 0xe2, 0x43, 0x0b, 0x3b, + 0xdf, 0x3e, 0x32, 0xfa, 0xd7, 0xf3, 0xfd, 0xd9, 0xd1, 0xdc, 0xeb, 0xf9, 0xfe, 0xfc, 0x68, 0x2f, + 0x86, 0xcb, 0xc2, 0x08, 0xd5, 0x7c, 0x6f, 0x6e, 0x2d, 0x9b, 0x2b, 0x47, 0xfc, 0x89, 0xc7, 0xc1, + 0x86, 0x12, 0x8b, 0xc9, 0xe6, 0x88, 0xbf, 0xf7, 0x78, 0x57, 0x65, 0x73, 0x9c, 0x14, 0x51, 0xc8, + 0xe6, 0xcf, 0x32, 0xa0, 0xa4, 0xca, 0xa6, 0x74, 0x48, 0xce, 0x0e, 0x07, 0x97, 0x1a, 0xf1, 0x5b, + 0x59, 0x18, 0xab, 0x58, 0x1e, 0x5d, 0xe1, 0x3b, 0xc6, 0x23, 0x3e, 0x55, 0xdc, 0x82, 0x41, 0xe9, + 0x63, 0x44, 0x9f, 0x3f, 0x1c, 0xec, 0xc7, 0x43, 0x54, 0x07, 0x4e, 0x72, 0xe9, 0x03, 0xcc, 0xa6, + 0x1e, 0x13, 0xf2, 0x11, 0x9f, 0x73, 0x8e, 0x86, 0x90, 0x8f, 0xf8, 0xe4, 0xf5, 0x1e, 0x15, 0xf2, + 0xbf, 0xc8, 0xc0, 0xc9, 0x94, 0xca, 0xc9, 0x25, 0xe8, 0xab, 0xb6, 0x97, 0x30, 0x3a, 0x56, 0x26, + 0x74, 0x0b, 0x76, 0xdb, 0x4b, 0x18, 0x18, 0x4b, 0xf3, 0x91, 0x64, 0x11, 0xdf, 0xc0, 0xcf, 0x57, + 0xca, 0x13, 0x42, 0xaa, 0xaa, 0xf4, 0x9a, 0x9f, 0x81, 0xd3, 0xbe, 0x2c, 0x78, 0x27, 0x6f, 0x9b, + 0x46, 0x3d, 0xf6, 0x4e, 0x9e, 0x95, 0x21, 0x1f, 0x87, 0x81, 0xd2, 0xdb, 0x6d, 0x87, 0x22, 0x5f, + 0x2e, 0xf1, 0xf7, 0x05, 0x7c, 0x7d, 0x44, 0x1a, 0x67, 0xfe, 0xe4, 0x9f, 0x51, 0xc4, 0x79, 0x87, + 0x0c, 0xd5, 0xcf, 0x67, 0xe0, 0x5c, 0xe7, 0xd6, 0x91, 0x0f, 0x42, 0x1f, 0xdb, 0x99, 0x97, 0xb4, + 0x39, 0xf1, 0xe9, 0x3c, 0x8d, 0xa8, 0xdd, 0xa0, 0x35, 0xdd, 0x91, 0x8d, 0x7d, 0x9f, 0x8c, 0xbc, + 0x02, 0x83, 0x15, 0xd7, 0x6d, 0x53, 0xa7, 0xfa, 0xcc, 0x6d, 0xad, 0x22, 0xf6, 0x84, 0xb8, 0xe7, + 0x30, 0x11, 0x5c, 0x73, 0x9f, 0x89, 0xc5, 0xbf, 0x92, 0xe9, 0xd5, 0xcf, 0x64, 0xe0, 0x7c, 0xb7, + 0xaf, 0x22, 0xcf, 0x40, 0xff, 0x22, 0xb5, 0x74, 0xcb, 0xab, 0x94, 0x45, 0x93, 0x70, 0x8b, 0xe5, + 0x21, 0x2c, 0xba, 0x53, 0x08, 0x08, 0x59, 0x21, 0x7e, 0xae, 0x18, 0x38, 0x32, 0xf0, 0x33, 0x50, + 0x84, 0xc5, 0x0a, 0xf9, 0x84, 0xea, 0x2f, 0x2c, 0x41, 0xef, 0xbc, 0x45, 0xe7, 0x97, 0xc9, 0xd3, + 0x30, 0xc0, 0x74, 0x1f, 0x73, 0xf8, 0x8b, 0x81, 0x36, 0x26, 0x0f, 0x18, 0x44, 0x4c, 0xf7, 0x68, + 0x21, 0x15, 0xb9, 0x21, 0x27, 0x0e, 0x17, 0xea, 0x40, 0xe4, 0x32, 0x1c, 0x33, 0xdd, 0xa3, 0xc9, + 0x09, 0xc6, 0x6f, 0xc8, 0x09, 0x9b, 0x45, 0x67, 0x47, 0x4a, 0x71, 0x8c, 0x5f, 0x4a, 0x4c, 0x03, + 0x33, 0x69, 0x59, 0x8d, 0xe3, 0x36, 0x41, 0x92, 0x62, 0xba, 0x47, 0x4b, 0xcf, 0x86, 0x3c, 0x24, + 0xfb, 0x42, 0xc5, 0xaf, 0x32, 0x65, 0xdc, 0x74, 0x8f, 0x16, 0xa1, 0x25, 0xcf, 0xc3, 0xa0, 0xf8, + 0xfd, 0xba, 0x6d, 0x5a, 0xf1, 0x40, 0x18, 0x12, 0x6a, 0xba, 0x47, 0x93, 0x29, 0xa5, 0x4a, 0x17, + 0x1c, 0xd3, 0xf2, 0xc4, 0xf3, 0xba, 0x78, 0xa5, 0x88, 0x93, 0x2a, 0xc5, 0xdf, 0xe4, 0x15, 0x18, + 0x0e, 0x22, 0x8c, 0xbc, 0x45, 0xeb, 0x9e, 0x38, 0xd2, 0x39, 0x1d, 0x2b, 0xcc, 0x91, 0xd3, 0x3d, + 0x5a, 0x94, 0x9a, 0x5c, 0x86, 0x82, 0x46, 0x5d, 0xf3, 0x6d, 0xff, 0x12, 0x64, 0x44, 0x9a, 0xce, + 0xcc, 0xb7, 0x99, 0x94, 0x04, 0x9e, 0xf5, 0x4e, 0x78, 0xeb, 0x22, 0x0e, 0x60, 0x48, 0xac, 0x96, + 0x49, 0xcb, 0x60, 0xbd, 0x23, 0x5d, 0xb9, 0xbd, 0x16, 0xc6, 0x5d, 0x11, 0xd9, 0xda, 0x06, 0xe3, + 0x0f, 0x5c, 0x65, 0xec, 0x74, 0x8f, 0x16, 0xa3, 0x97, 0xa4, 0x5a, 0x36, 0xdd, 0x35, 0x11, 0xea, + 0x2e, 0x2e, 0x55, 0x86, 0x92, 0xa4, 0xca, 0x7e, 0x4a, 0x55, 0xcf, 0x51, 0x6f, 0xdd, 0x76, 0xd6, + 0x44, 0x60, 0xbb, 0x78, 0xd5, 0x02, 0x2b, 0x55, 0x2d, 0x20, 0x72, 0xd5, 0x6c, 0x91, 0x19, 0x49, + 0xaf, 0x5a, 0xf7, 0x74, 0xb9, 0x6a, 0xbe, 0xbf, 0xf4, 0x3b, 0x69, 0x86, 0xea, 0xf7, 0x78, 0xd2, + 0xdc, 0x64, 0x87, 0x22, 0x4e, 0xea, 0x50, 0xfc, 0xcd, 0x2a, 0x95, 0x12, 0xa3, 0x8a, 0xac, 0xb8, + 0x41, 0xa5, 0x12, 0x8a, 0x55, 0x2a, 0xa7, 0x50, 0xbd, 0x21, 0xe7, 0x0b, 0x55, 0xc6, 0xa2, 0x1d, + 0x14, 0x62, 0x58, 0x07, 0x49, 0x79, 0x45, 0x8b, 0x98, 0x8b, 0x50, 0x21, 0x48, 0x3e, 0x18, 0xb4, + 0x70, 0x62, 0x61, 0xba, 0x47, 0xc3, 0x2c, 0x85, 0x2a, 0xcf, 0x72, 0xa9, 0x9c, 0x44, 0x8a, 0x21, + 0x9f, 0x82, 0xc1, 0xa6, 0x7b, 0x34, 0x9e, 0x01, 0xf3, 0x69, 0x29, 0x9f, 0x94, 0x72, 0x2a, 0x3a, + 0x45, 0x04, 0x08, 0x36, 0x45, 0x84, 0x59, 0xa7, 0xa6, 0x92, 0x39, 0x97, 0x94, 0xd3, 0xd1, 0x15, + 0x35, 0x8e, 0x9f, 0xee, 0xd1, 0x92, 0x79, 0x9a, 0x9e, 0x8f, 0xa4, 0x21, 0x52, 0xce, 0xc4, 0xa2, + 0xcf, 0x84, 0x28, 0x26, 0x2e, 0x39, 0x61, 0xd1, 0x7c, 0x6a, 0xe2, 0x70, 0xe5, 0x6c, 0x74, 0x39, + 0x4e, 0x21, 0x99, 0xee, 0xd1, 0x52, 0x53, 0x8e, 0x4f, 0x24, 0x92, 0x01, 0x29, 0x4a, 0xf4, 0xc6, + 0x37, 0x86, 0x9e, 0xee, 0xd1, 0x12, 0xe9, 0x83, 0x6e, 0xc8, 0x59, 0x78, 0x94, 0x87, 0xa2, 0x9d, + 0x18, 0x62, 0x58, 0x27, 0x4a, 0xd9, 0x7a, 0x6e, 0xc8, 0x99, 0x59, 0x94, 0x73, 0xc9, 0x52, 0xe1, + 0xcc, 0x29, 0x65, 0x70, 0xd1, 0xd2, 0x93, 0x4d, 0x28, 0x0f, 0x8b, 0x74, 0x7f, 0xa2, 0x7c, 0x1a, + 0xcd, 0x74, 0x8f, 0x96, 0x9e, 0xa8, 0x42, 0x4b, 0xcf, 0xd2, 0xa0, 0x9c, 0xef, 0xc6, 0x33, 0x68, + 0x5d, 0x7a, 0x86, 0x07, 0xbd, 0x4b, 0xcc, 0x7c, 0xe5, 0x42, 0x34, 0xf4, 0x65, 0x47, 0xc2, 0xe9, + 0x1e, 0xad, 0x4b, 0xe4, 0xfd, 0xdb, 0x1d, 0x02, 0xd8, 0x2b, 0x17, 0xa3, 0xd9, 0x3e, 0x53, 0x89, + 0xa6, 0x7b, 0xb4, 0x0e, 0xe1, 0xef, 0x6f, 0x77, 0x88, 0x6f, 0xae, 0x14, 0xbb, 0xb2, 0x0d, 0xe4, + 0xd1, 0x21, 0x3a, 0xfa, 0x7c, 0x6a, 0x68, 0x70, 0xe5, 0x91, 0xa8, 0xea, 0xa6, 0x90, 0x30, 0xd5, + 0x4d, 0x0b, 0x2a, 0x3e, 0x9f, 0x1a, 0xcb, 0x5a, 0x79, 0xb4, 0x0b, 0xc3, 0xa0, 0x8d, 0xa9, 0x51, + 0xb0, 0xe7, 0x53, 0x83, 0x49, 0x2b, 0x6a, 0x94, 0x61, 0x0a, 0x09, 0x63, 0x98, 0x16, 0x86, 0x7a, + 0x3e, 0x35, 0xe6, 0xb0, 0xf2, 0x58, 0x17, 0x86, 0x61, 0x0b, 0xd3, 0xa2, 0x15, 0x3f, 0x1f, 0x09, + 0xfa, 0xab, 0xbc, 0x2f, 0x3a, 0x6f, 0x48, 0x28, 0x36, 0x6f, 0xc8, 0xe1, 0x81, 0x27, 0x12, 0x61, + 0x0d, 0x95, 0xc7, 0xa3, 0xc3, 0x3c, 0x86, 0x66, 0xc3, 0x3c, 0x1e, 0x08, 0x71, 0x22, 0x11, 0xde, + 0x4d, 0xb9, 0xd4, 0x89, 0x09, 0xa2, 0xa3, 0x4c, 0x78, 0x40, 0xb8, 0x4a, 0x4a, 0x7c, 0x31, 0xe5, + 0xfd, 0x51, 0x6f, 0xc5, 0x04, 0xc1, 0x74, 0x8f, 0x96, 0x12, 0x95, 0x4c, 0x4b, 0x0f, 0xa6, 0xa1, + 0x5c, 0x8e, 0x0e, 0xdb, 0x34, 0x1a, 0x36, 0x6c, 0x53, 0x03, 0x71, 0xcc, 0xa4, 0xb9, 0x54, 0x2b, + 0x57, 0xa2, 0x86, 0x59, 0x92, 0x82, 0x19, 0x66, 0x29, 0xae, 0xd8, 0x5a, 0x7a, 0x78, 0x08, 0xe5, + 0x89, 0xae, 0x2d, 0x44, 0x9a, 0x94, 0x16, 0xf2, 0x68, 0x09, 0xa1, 0xed, 0x74, 0xbb, 0xd5, 0xb0, + 0x75, 0x43, 0xf9, 0x40, 0xaa, 0xed, 0xc4, 0x91, 0x92, 0xed, 0xc4, 0x01, 0x6c, 0x95, 0x97, 0x3d, + 0x77, 0x95, 0x27, 0xa3, 0xab, 0xbc, 0x8c, 0x63, 0xab, 0x7c, 0xc4, 0xcb, 0x77, 0x22, 0xe1, 0xe5, + 0xaa, 0x3c, 0x15, 0x55, 0x80, 0x18, 0x9a, 0x29, 0x40, 0xdc, 0x2f, 0xf6, 0x93, 0x9d, 0xfd, 0x42, + 0x95, 0xab, 0xc8, 0xed, 0x11, 0x9f, 0x5b, 0x27, 0xba, 0xe9, 0x1e, 0xad, 0xb3, 0x6f, 0x69, 0x25, + 0xc5, 0xcd, 0x53, 0xb9, 0x16, 0x55, 0xb0, 0x04, 0x01, 0x53, 0xb0, 0xa4, 0x73, 0x68, 0x25, 0xc5, + 0x4f, 0x53, 0xf9, 0x60, 0x47, 0x56, 0xc1, 0x37, 0xa7, 0x78, 0x77, 0xde, 0x90, 0x1d, 0x2d, 0x95, + 0xa7, 0xa3, 0x8b, 0x5d, 0x88, 0x61, 0x8b, 0x9d, 0xe4, 0x90, 0x79, 0x43, 0x76, 0x31, 0x54, 0xae, + 0x27, 0x4b, 0x85, 0x4b, 0xa4, 0xe4, 0x8a, 0xa8, 0xa5, 0x7b, 0xe6, 0x29, 0xcf, 0x44, 0xb5, 0x2e, + 0x8d, 0x86, 0x69, 0x5d, 0xaa, 0x57, 0xdf, 0x54, 0xd2, 0xc1, 0x4e, 0xb9, 0x11, 0x3f, 0x4b, 0x88, + 0xe2, 0x99, 0xe5, 0x93, 0x70, 0xca, 0x7b, 0x2d, 0x1e, 0xe9, 0x49, 0x79, 0x36, 0x76, 0x99, 0x11, + 0xc1, 0x32, 0xfb, 0x36, 0x16, 0x19, 0xea, 0xb5, 0x78, 0x70, 0x24, 0xe5, 0xb9, 0x74, 0x0e, 0x81, + 0xae, 0xc4, 0x83, 0x29, 0xbd, 0x16, 0x8f, 0x27, 0xa4, 0x3c, 0x9f, 0xce, 0x21, 0x90, 0x6e, 0x3c, + 0xfe, 0xd0, 0xd3, 0x52, 0x84, 0x63, 0xe5, 0x43, 0x51, 0xd3, 0x31, 0x40, 0x30, 0xd3, 0x31, 0x8c, + 0x83, 0xfc, 0xb4, 0x14, 0x19, 0x58, 0x79, 0x21, 0x51, 0x24, 0x68, 0xac, 0x14, 0x3f, 0xf8, 0x69, + 0x29, 0xa2, 0xae, 0xf2, 0x62, 0xa2, 0x48, 0xd0, 0x3a, 0x29, 0xee, 0xae, 0xd1, 0xed, 0xe9, 0x95, + 0xf2, 0x52, 0xf4, 0x88, 0xa3, 0x33, 0xe5, 0x74, 0x8f, 0xd6, 0xed, 0x09, 0xd7, 0x27, 0x3b, 0xbb, + 0x2b, 0x2a, 0x2f, 0x47, 0x87, 0x70, 0x27, 0x3a, 0x36, 0x84, 0x3b, 0xba, 0x3c, 0xbe, 0x12, 0x7b, + 0x86, 0xad, 0xbc, 0x12, 0x9d, 0xe2, 0x22, 0x48, 0x36, 0xc5, 0xc5, 0x1f, 0x6d, 0x47, 0xde, 0x17, + 0x2b, 0x1f, 0x8e, 0x4e, 0x71, 0x32, 0x8e, 0x4d, 0x71, 0x91, 0xb7, 0xc8, 0x13, 0x89, 0x67, 0xaf, + 0xca, 0xab, 0xd1, 0x29, 0x2e, 0x86, 0x66, 0x53, 0x5c, 0xfc, 0xa1, 0xec, 0x2b, 0xb1, 0xd7, 0x9f, + 0xca, 0x6b, 0xe9, 0xed, 0x47, 0xa4, 0xdc, 0x7e, 0xfe, 0x56, 0x54, 0x4b, 0x7f, 0xc6, 0xa8, 0x94, + 0xa2, 0xe3, 0x37, 0x8d, 0x86, 0x8d, 0xdf, 0xd4, 0x27, 0x90, 0xf1, 0x8d, 0x83, 0xd0, 0xaa, 0xf1, + 0x2e, 0x1b, 0x87, 0xd0, 0x14, 0x49, 0x01, 0x47, 0xf6, 0xc8, 0x7c, 0x23, 0x34, 0xd1, 0x61, 0x8f, + 0xec, 0x6f, 0x83, 0x62, 0xf4, 0x6c, 0x76, 0x4d, 0x78, 0xcf, 0x29, 0xe5, 0xe8, 0xec, 0x9a, 0x20, + 0x60, 0xb3, 0x6b, 0xd2, 0xe7, 0x6e, 0x0a, 0x46, 0x85, 0x16, 0x71, 0xa7, 0x40, 0xd3, 0x5a, 0x51, + 0x26, 0x63, 0xaf, 0x88, 0x62, 0x78, 0x36, 0x3b, 0xc5, 0x61, 0xb8, 0x5e, 0x73, 0xd8, 0x44, 0xc3, + 0x6c, 0x2d, 0xd9, 0xba, 0x63, 0x54, 0xa9, 0x65, 0x28, 0x53, 0xb1, 0xf5, 0x3a, 0x85, 0x06, 0xd7, + 0xeb, 0x14, 0x38, 0x46, 0x37, 0x8a, 0xc1, 0x35, 0x5a, 0xa7, 0xe6, 0x3d, 0xaa, 0xdc, 0x44, 0xb6, + 0xc5, 0x4e, 0x6c, 0x05, 0xd9, 0x74, 0x8f, 0xd6, 0x89, 0x03, 0xb3, 0xd5, 0x67, 0x37, 0xaa, 0x6f, + 0xcc, 0x04, 0x2f, 0x67, 0x17, 0x1c, 0xda, 0xd2, 0x1d, 0xaa, 0x4c, 0x47, 0x6d, 0xf5, 0x54, 0x22, + 0x66, 0xab, 0xa7, 0x22, 0x92, 0x6c, 0xfd, 0xb1, 0x50, 0xe9, 0xc6, 0x36, 0x1c, 0x11, 0xe9, 0xa5, + 0xd9, 0xec, 0x14, 0x45, 0x30, 0x01, 0xcd, 0xd8, 0xd6, 0x0a, 0x9e, 0x54, 0xbc, 0x1e, 0x9d, 0x9d, + 0x3a, 0x53, 0xb2, 0xd9, 0xa9, 0x33, 0x96, 0xa9, 0x7a, 0x14, 0xcb, 0xc7, 0xe0, 0xad, 0xa8, 0xaa, + 0xa7, 0x90, 0x30, 0x55, 0x4f, 0x01, 0x27, 0x19, 0x6a, 0xd4, 0xa5, 0x9e, 0x32, 0xd3, 0x8d, 0x21, + 0x92, 0x24, 0x19, 0x22, 0x38, 0xc9, 0x70, 0x8a, 0x7a, 0xf5, 0x55, 0x65, 0xb6, 0x1b, 0x43, 0x24, + 0x49, 0x32, 0x44, 0x30, 0xdb, 0x6c, 0x46, 0xc1, 0xe3, 0xed, 0xc6, 0x9a, 0xdf, 0x67, 0x73, 0xd1, + 0xcd, 0x66, 0x47, 0x42, 0xb6, 0xd9, 0xec, 0x88, 0x24, 0x9f, 0xd9, 0xb1, 0x77, 0xa7, 0x32, 0x8f, + 0x15, 0x5e, 0x0d, 0xed, 0x82, 0x9d, 0x94, 0x9a, 0xee, 0xd1, 0x76, 0xea, 0x3d, 0xfa, 0x81, 0xc0, + 0x15, 0x4a, 0x59, 0xc0, 0xaa, 0x4e, 0x04, 0x67, 0x15, 0x1c, 0x3c, 0xdd, 0xa3, 0x05, 0xce, 0x52, + 0xcf, 0xc3, 0x20, 0x7e, 0x54, 0xc5, 0x32, 0xbd, 0xf2, 0xb8, 0xf2, 0x46, 0x74, 0xcb, 0x24, 0xa1, + 0xd8, 0x96, 0x49, 0xfa, 0xc9, 0x26, 0x71, 0xfc, 0xc9, 0xa7, 0x98, 0xf2, 0xb8, 0xa2, 0x45, 0x27, + 0xf1, 0x08, 0x92, 0x4d, 0xe2, 0x11, 0x40, 0x50, 0x6f, 0xd9, 0xb1, 0x5b, 0xe5, 0x71, 0xa5, 0x9a, + 0x52, 0x2f, 0x47, 0x05, 0xf5, 0xf2, 0x9f, 0x41, 0xbd, 0xd5, 0xd5, 0xb6, 0x57, 0x66, 0xdf, 0xb8, + 0x98, 0x52, 0xaf, 0x8f, 0x0c, 0xea, 0xf5, 0x01, 0x6c, 0x2a, 0x44, 0xc0, 0x82, 0x63, 0xb3, 0x49, + 0xfb, 0x96, 0xd9, 0x68, 0x28, 0xb7, 0xa3, 0x53, 0x61, 0x1c, 0xcf, 0xa6, 0xc2, 0x38, 0x8c, 0x99, + 0x9e, 0xbc, 0x55, 0x74, 0xa9, 0xbd, 0xa2, 0xdc, 0x89, 0x9a, 0x9e, 0x21, 0x86, 0x99, 0x9e, 0xe1, + 0x2f, 0xdc, 0x5d, 0xb0, 0x5f, 0x1a, 0x5d, 0x76, 0xa8, 0xbb, 0xaa, 0xdc, 0x8d, 0xed, 0x2e, 0x24, + 0x1c, 0xee, 0x2e, 0xa4, 0xdf, 0x64, 0x05, 0x1e, 0x8e, 0x2c, 0x34, 0xfe, 0xdd, 0x53, 0x95, 0xea, + 0x4e, 0x7d, 0x55, 0xf9, 0x08, 0xb2, 0x7a, 0x2c, 0x75, 0xa9, 0x8a, 0x92, 0x4e, 0xf7, 0x68, 0xdd, + 0x38, 0xe1, 0xb6, 0xfc, 0x8d, 0x19, 0x1e, 0x86, 0x50, 0x5b, 0x98, 0xf0, 0x37, 0xa1, 0x6f, 0xc6, + 0xb6, 0xe5, 0x49, 0x12, 0xdc, 0x96, 0x27, 0xc1, 0xa4, 0x05, 0x17, 0x63, 0x5b, 0xb5, 0x59, 0xbd, + 0xc1, 0xf6, 0x25, 0xd4, 0x58, 0xd0, 0xeb, 0x6b, 0xd4, 0x53, 0x3e, 0x8a, 0xbc, 0x2f, 0x75, 0xd8, + 0xf0, 0xc5, 0xa8, 0xa7, 0x7b, 0xb4, 0x6d, 0xf8, 0x11, 0x15, 0xf2, 0xd5, 0xa9, 0xc5, 0x05, 0xe5, + 0x63, 0xd1, 0xf3, 0x4d, 0x06, 0x9b, 0xee, 0xd1, 0x10, 0xc7, 0xac, 0xb4, 0xdb, 0xad, 0x15, 0x47, + 0x37, 0x28, 0x37, 0xb4, 0xd0, 0x76, 0x13, 0x06, 0xe8, 0xc7, 0xa3, 0x56, 0x5a, 0x27, 0x3a, 0x66, + 0xa5, 0x75, 0xc2, 0x31, 0x45, 0x8d, 0x44, 0xdc, 0x57, 0x3e, 0x11, 0x55, 0xd4, 0x08, 0x92, 0x29, + 0x6a, 0x34, 0x3e, 0xff, 0x47, 0xe0, 0x4c, 0xb0, 0x9f, 0x17, 0xeb, 0x2f, 0xef, 0x34, 0xe5, 0x93, + 0xc8, 0xe7, 0x62, 0xe2, 0x32, 0x20, 0x42, 0x35, 0xdd, 0xa3, 0x75, 0x28, 0xcf, 0x56, 0xdc, 0x44, + 0x32, 0x19, 0x61, 0x5e, 0x7c, 0x4f, 0x74, 0xc5, 0xed, 0x40, 0xc6, 0x56, 0xdc, 0x0e, 0xa8, 0x54, + 0xe6, 0x42, 0xa8, 0xfa, 0x36, 0xcc, 0x03, 0x99, 0x76, 0xe2, 0x90, 0xca, 0x5c, 0x58, 0x6a, 0x4b, + 0xdb, 0x30, 0x0f, 0xac, 0xb5, 0x4e, 0x1c, 0xc8, 0x65, 0x28, 0x54, 0xab, 0xb3, 0x5a, 0xdb, 0x52, + 0xea, 0x31, 0x1f, 0x30, 0x84, 0x4e, 0xf7, 0x68, 0x02, 0xcf, 0xcc, 0xa0, 0xc9, 0x86, 0xee, 0x7a, + 0x66, 0xdd, 0xc5, 0x11, 0xe3, 0x8f, 0x10, 0x23, 0x6a, 0x06, 0xa5, 0xd1, 0x30, 0x33, 0x28, 0x0d, + 0xce, 0xec, 0xc5, 0x09, 0xdd, 0x75, 0x75, 0xcb, 0x70, 0xf4, 0x71, 0x5c, 0x26, 0x68, 0xec, 0x8d, + 0x41, 0x04, 0xcb, 0xec, 0xc5, 0x28, 0x04, 0x0f, 0xdf, 0x7d, 0x88, 0x6f, 0xe6, 0x2c, 0xc7, 0x0e, + 0xdf, 0x63, 0x78, 0x3c, 0x7c, 0x8f, 0xc1, 0xd0, 0xee, 0xf4, 0x61, 0x1a, 0x5d, 0x31, 0x99, 0x88, + 0x94, 0x95, 0x98, 0xdd, 0x19, 0x27, 0x40, 0xbb, 0x33, 0x0e, 0x8c, 0x34, 0xc9, 0x5f, 0x6e, 0x57, + 0x3b, 0x34, 0x29, 0x5c, 0x65, 0x13, 0x65, 0xd8, 0xfa, 0x1d, 0x0e, 0x8e, 0xf2, 0x86, 0xa5, 0x37, + 0xed, 0xf2, 0xb8, 0x2f, 0x75, 0x33, 0xba, 0x7e, 0x77, 0x24, 0x64, 0xeb, 0x77, 0x47, 0x24, 0x9b, + 0x5d, 0xfd, 0x8d, 0xd6, 0xaa, 0xee, 0x50, 0xa3, 0x6c, 0x3a, 0x78, 0xb2, 0xb8, 0xc1, 0xb7, 0x86, + 0x6f, 0x45, 0x67, 0xd7, 0x2e, 0xa4, 0x6c, 0x76, 0xed, 0x82, 0x66, 0x46, 0x5e, 0x3a, 0x5a, 0xa3, + 0xba, 0xa1, 0xac, 0x45, 0x8d, 0xbc, 0xce, 0x94, 0xcc, 0xc8, 0xeb, 0x8c, 0xed, 0xfc, 0x39, 0x77, + 0x1d, 0xd3, 0xa3, 0x4a, 0x63, 0x27, 0x9f, 0x83, 0xa4, 0x9d, 0x3f, 0x07, 0xd1, 0x6c, 0x43, 0x18, + 0xef, 0x90, 0x66, 0x74, 0x43, 0x98, 0xec, 0x86, 0x78, 0x09, 0x66, 0xb1, 0x88, 0xa7, 0x26, 0x8a, + 0x15, 0xb5, 0x58, 0x04, 0x98, 0x59, 0x2c, 0xe1, 0x63, 0x94, 0xc8, 0x03, 0x03, 0xc5, 0x8e, 0xae, + 0xa1, 0x32, 0x8e, 0xad, 0xa1, 0x91, 0xc7, 0x08, 0xcf, 0x47, 0xbc, 0x67, 0x95, 0x56, 0xd4, 0xea, + 0x90, 0x50, 0xcc, 0xea, 0x90, 0xfd, 0x6c, 0x27, 0xe0, 0x04, 0xde, 0x82, 0x6b, 0xed, 0xe0, 0x1e, + 0xe7, 0x53, 0xd1, 0xcf, 0x8c, 0xa1, 0xd9, 0x67, 0xc6, 0x40, 0x11, 0x26, 0x62, 0xda, 0x72, 0x3a, + 0x30, 0x09, 0xcf, 0x07, 0x63, 0x20, 0x32, 0x03, 0xa4, 0x5a, 0x9a, 0x9d, 0xa9, 0x18, 0x0b, 0xf2, + 0x15, 0x99, 0x1b, 0x3d, 0x81, 0x4d, 0x52, 0x4c, 0xf7, 0x68, 0x29, 0xe5, 0xc8, 0x5b, 0x70, 0x5e, + 0x40, 0xc5, 0x3b, 0x42, 0xcc, 0x39, 0x6d, 0x04, 0x0b, 0x82, 0x17, 0xf5, 0xce, 0xe8, 0x46, 0x3b, + 0xdd, 0xa3, 0x75, 0xe5, 0xd5, 0xb9, 0x2e, 0xb1, 0x3e, 0xb4, 0x77, 0x52, 0x57, 0xb0, 0x48, 0x74, + 0xe5, 0xd5, 0xb9, 0x2e, 0x21, 0xf7, 0x7b, 0x3b, 0xa9, 0x2b, 0xe8, 0x84, 0xae, 0xbc, 0x88, 0x0b, + 0xc5, 0x6e, 0xf8, 0x52, 0xa3, 0xa1, 0xac, 0x63, 0x75, 0xef, 0xdf, 0x49, 0x75, 0x25, 0x34, 0x38, + 0xb7, 0xe3, 0xc8, 0x66, 0xe9, 0xf9, 0x16, 0xb5, 0xaa, 0x91, 0x05, 0xe8, 0x7e, 0x74, 0x96, 0x4e, + 0x10, 0xb0, 0x59, 0x3a, 0x01, 0x64, 0x03, 0x4a, 0x76, 0xc2, 0x56, 0x36, 0xa2, 0x03, 0x4a, 0xc6, + 0xb1, 0x01, 0x15, 0x71, 0xd8, 0x9e, 0x87, 0x93, 0xf3, 0x6b, 0x9e, 0xee, 0x5b, 0x90, 0xae, 0xe8, + 0xca, 0xb7, 0x63, 0x97, 0x4c, 0x49, 0x12, 0xbc, 0x64, 0x4a, 0x82, 0xd9, 0x18, 0x61, 0xe0, 0xea, + 0x86, 0x55, 0x9f, 0xd2, 0xcd, 0x46, 0xdb, 0xa1, 0xca, 0x7f, 0x14, 0x1d, 0x23, 0x31, 0x34, 0x1b, + 0x23, 0x31, 0x10, 0x5b, 0xa0, 0x19, 0xa8, 0xe4, 0xba, 0xe6, 0x8a, 0x25, 0xf6, 0x95, 0xed, 0x86, + 0xa7, 0xfc, 0xc7, 0xd1, 0x05, 0x3a, 0x8d, 0x86, 0x2d, 0xd0, 0x69, 0x70, 0x3c, 0x75, 0x4a, 0xc9, + 0xc7, 0xae, 0xfc, 0x27, 0xb1, 0x53, 0xa7, 0x14, 0x1a, 0x3c, 0x75, 0x4a, 0xcb, 0xe5, 0x3e, 0x05, + 0xa3, 0xdc, 0x26, 0x9b, 0x31, 0x83, 0xbb, 0xea, 0xff, 0x34, 0xba, 0x3e, 0xc6, 0xf1, 0x6c, 0x7d, + 0x8c, 0xc3, 0xa2, 0x7c, 0x44, 0x17, 0xfc, 0x67, 0x9d, 0xf8, 0x04, 0xf2, 0x4f, 0x94, 0x21, 0x37, + 0x65, 0x3e, 0x62, 0xa4, 0x7c, 0x6f, 0xa6, 0x13, 0xa3, 0x60, 0x78, 0x24, 0x0a, 0x45, 0x19, 0x69, + 0xf4, 0x9e, 0x49, 0xd7, 0x95, 0x4f, 0x77, 0x64, 0xc4, 0x09, 0xa2, 0x8c, 0x38, 0x8c, 0xbc, 0x09, + 0x67, 0x42, 0xd8, 0x2c, 0x6d, 0x2e, 0x05, 0x33, 0xd3, 0xf7, 0x65, 0xa2, 0x66, 0x70, 0x3a, 0x19, + 0x33, 0x83, 0xd3, 0x31, 0x69, 0xac, 0x85, 0xe8, 0xfe, 0xf3, 0x6d, 0x58, 0x07, 0x12, 0xec, 0xc0, + 0x20, 0x8d, 0xb5, 0x90, 0xe6, 0xf7, 0x6f, 0xc3, 0x3a, 0x90, 0x69, 0x07, 0x06, 0xe4, 0xb3, 0x19, + 0xb8, 0x94, 0x8e, 0x2a, 0x35, 0x1a, 0x53, 0xb6, 0x13, 0xe2, 0x94, 0x1f, 0xc8, 0x44, 0x0f, 0x1a, + 0x76, 0x56, 0x6c, 0xba, 0x47, 0xdb, 0x61, 0x05, 0xe4, 0xc3, 0x30, 0x5c, 0x6a, 0x1b, 0xa6, 0x87, + 0x17, 0x6f, 0xcc, 0x70, 0xfe, 0xc1, 0x4c, 0x6c, 0x8b, 0x23, 0x63, 0x71, 0x8b, 0x23, 0x03, 0xc8, + 0xeb, 0x30, 0x56, 0xa5, 0xf5, 0xb6, 0x63, 0x7a, 0x1b, 0x1a, 0xe6, 0xda, 0x67, 0x3c, 0x7e, 0x28, + 0x13, 0x9d, 0xc4, 0x12, 0x14, 0x6c, 0x12, 0x4b, 0x00, 0xc9, 0x9d, 0x0e, 0x19, 0xd9, 0x95, 0xcf, + 0x64, 0xba, 0x5e, 0xcb, 0x07, 0x7d, 0xd9, 0x21, 0xa1, 0xfb, 0x42, 0x6a, 0x86, 0x6b, 0xe5, 0xb3, + 0x99, 0x2e, 0xd7, 0xe8, 0xd2, 0x0c, 0x97, 0x92, 0x1c, 0x7b, 0x21, 0x35, 0xfd, 0xb0, 0xf2, 0xc3, + 0x99, 0x2e, 0xd7, 0xde, 0x21, 0xc7, 0xb4, 0xcc, 0xc5, 0xcf, 0x72, 0x4f, 0x11, 0xc1, 0xe8, 0xbf, + 0xc8, 0x24, 0x5d, 0x45, 0x82, 0xf2, 0x12, 0x21, 0x2b, 0x76, 0xdb, 0x0d, 0x94, 0xfe, 0x73, 0x99, + 0xa4, 0x6f, 0x5e, 0x58, 0x2c, 0xfc, 0x45, 0x28, 0x9c, 0x9b, 0xbc, 0xef, 0x51, 0xc7, 0xd2, 0x1b, + 0xd8, 0x9d, 0x55, 0xcf, 0x76, 0xf4, 0x15, 0x3a, 0x69, 0xe9, 0x4b, 0x0d, 0xaa, 0x7c, 0x3e, 0x13, + 0xb5, 0x60, 0x3b, 0x93, 0x32, 0x0b, 0xb6, 0x33, 0x96, 0xac, 0xc2, 0xc3, 0x69, 0xd8, 0xb2, 0xe9, + 0x62, 0x3d, 0x5f, 0xc8, 0x44, 0x4d, 0xd8, 0x2e, 0xb4, 0xcc, 0x84, 0xed, 0x82, 0x26, 0xd7, 0x61, + 0x60, 0xdc, 0xf6, 0xa7, 0xdf, 0x1f, 0x89, 0x39, 0x43, 0x06, 0x98, 0xe9, 0x1e, 0x2d, 0x24, 0x13, + 0x65, 0xc4, 0xa0, 0xfe, 0x62, 0xb2, 0x4c, 0x78, 0xf9, 0x14, 0xfc, 0x10, 0x65, 0x84, 0xb8, 0xff, + 0xcb, 0x64, 0x99, 0xf0, 0x8e, 0x2b, 0xf8, 0xc1, 0x66, 0x12, 0x5e, 0xe3, 0xec, 0x54, 0x89, 0xd9, + 0x6d, 0x13, 0xab, 0x7a, 0xa3, 0x41, 0xad, 0x15, 0xaa, 0x7c, 0x29, 0x36, 0x93, 0xa4, 0x93, 0xb1, + 0x99, 0x24, 0x1d, 0x43, 0x3e, 0x0e, 0x67, 0xef, 0xe8, 0x0d, 0xd3, 0x08, 0x71, 0x7e, 0x32, 0x5a, + 0xe5, 0x47, 0x33, 0xd1, 0xdd, 0x74, 0x07, 0x3a, 0xb6, 0x9b, 0xee, 0x80, 0x22, 0xb3, 0x40, 0x70, + 0x19, 0x0d, 0x66, 0x0b, 0xb6, 0x3e, 0x2b, 0xff, 0x55, 0x26, 0x6a, 0xa7, 0x26, 0x49, 0x98, 0x9d, + 0x9a, 0x84, 0x92, 0x5a, 0xe7, 0xa8, 0xf6, 0xca, 0x8f, 0x65, 0xa2, 0xa7, 0x35, 0x9d, 0x08, 0xa7, + 0x7b, 0xb4, 0xce, 0xa1, 0xf1, 0x6f, 0xc2, 0x68, 0x75, 0xa1, 0x32, 0x35, 0x35, 0x59, 0xbd, 0x53, + 0x29, 0xa3, 0xfb, 0xae, 0xa1, 0xfc, 0x78, 0x6c, 0xc5, 0x8a, 0x13, 0xb0, 0x15, 0x2b, 0x0e, 0x23, + 0x2f, 0xc1, 0x10, 0x6b, 0x3f, 0x1b, 0x30, 0xf8, 0xc9, 0x5f, 0xce, 0x44, 0xcd, 0x29, 0x19, 0xc9, + 0xcc, 0x29, 0xf9, 0x37, 0xa9, 0xc2, 0x29, 0x26, 0xc5, 0x05, 0x87, 0x2e, 0x53, 0x87, 0x5a, 0x75, + 0x7f, 0x4c, 0xff, 0x44, 0x26, 0x6a, 0x65, 0xa4, 0x11, 0x31, 0x2b, 0x23, 0x0d, 0x4e, 0xd6, 0xe0, + 0x7c, 0xfc, 0x24, 0x48, 0x7e, 0x4c, 0xa5, 0xfc, 0x64, 0x26, 0x66, 0x0c, 0x77, 0x21, 0x46, 0x63, + 0xb8, 0x0b, 0x9e, 0x58, 0x70, 0x41, 0x1c, 0xab, 0x08, 0x87, 0xcb, 0x78, 0x6d, 0xff, 0x35, 0xaf, + 0xed, 0xf1, 0xd0, 0x21, 0xb0, 0x0b, 0xf5, 0x74, 0x8f, 0xd6, 0x9d, 0x1d, 0xd3, 0xb3, 0x64, 0xec, + 0x76, 0xe5, 0xa7, 0x32, 0xe9, 0x1e, 0x29, 0x11, 0x37, 0xe5, 0xb4, 0xa0, 0xef, 0x6f, 0x76, 0x8a, + 0x3c, 0xae, 0xfc, 0x74, 0x6c, 0xbc, 0xa5, 0x93, 0xb1, 0xf1, 0xd6, 0x21, 0x74, 0xf9, 0xeb, 0x30, + 0xc6, 0x95, 0x7a, 0x41, 0xc7, 0x61, 0x68, 0xad, 0x50, 0x43, 0xf9, 0x6f, 0x62, 0xab, 0x5d, 0x82, + 0x02, 0x5d, 0x7b, 0xe2, 0x40, 0x36, 0x75, 0x57, 0x5b, 0xba, 0x65, 0xe1, 0x31, 0xab, 0xf2, 0xdf, + 0xc6, 0xa6, 0xee, 0x10, 0x85, 0x8e, 0xbb, 0xc1, 0x2f, 0xa6, 0x09, 0xdd, 0xb2, 0x76, 0x28, 0x3f, + 0x13, 0xd3, 0x84, 0x6e, 0xc4, 0x4c, 0x13, 0xba, 0xa6, 0x00, 0xb9, 0xd3, 0xe1, 0x61, 0xa3, 0xf2, + 0x95, 0xd8, 0x8a, 0x9c, 0x4a, 0xc5, 0x56, 0xe4, 0xf4, 0x77, 0x91, 0x77, 0x3a, 0x3c, 0x0a, 0x54, + 0x7e, 0xb6, 0x3b, 0xdf, 0x70, 0xa5, 0x4f, 0x7f, 0x53, 0x78, 0xa7, 0xc3, 0x83, 0x3a, 0xe5, 0xe7, + 0xba, 0xf3, 0x0d, 0x1d, 0xfb, 0xd2, 0xdf, 0xe3, 0xd5, 0x3a, 0x3f, 0x46, 0x53, 0x7e, 0x3e, 0x3e, + 0x75, 0x75, 0x20, 0xc4, 0xa9, 0xab, 0xd3, 0x8b, 0xb6, 0x25, 0x78, 0x88, 0x6b, 0xc8, 0x4d, 0x47, + 0x6f, 0xad, 0x56, 0xa9, 0xe7, 0x99, 0xd6, 0x8a, 0xbf, 0x13, 0xfb, 0x85, 0x4c, 0xec, 0x78, 0xac, + 0x13, 0x25, 0x1e, 0x8f, 0x75, 0x42, 0x32, 0xe5, 0x4d, 0x3c, 0x3b, 0x53, 0x7e, 0x31, 0xa6, 0xbc, + 0x09, 0x0a, 0xa6, 0xbc, 0xc9, 0xd7, 0x6a, 0xaf, 0xa7, 0xbc, 0xae, 0x52, 0xfe, 0xbb, 0xce, 0xbc, + 0x82, 0xf6, 0xa5, 0x3c, 0xca, 0x7a, 0x3d, 0xe5, 0x11, 0x91, 0xf2, 0xdf, 0x77, 0xe6, 0x15, 0xfa, + 0x20, 0x25, 0x80, 0xe3, 0x7d, 0xd0, 0x8b, 0xbb, 0x5a, 0xf5, 0x2b, 0x19, 0x18, 0xaa, 0x7a, 0x0e, + 0xd5, 0x9b, 0x22, 0xa2, 0xc4, 0x39, 0xe8, 0xe7, 0xee, 0x61, 0xfe, 0x0b, 0x0d, 0x2d, 0xf8, 0x4d, + 0x2e, 0xc1, 0xc8, 0x8c, 0xee, 0x7a, 0x58, 0xb2, 0x62, 0x19, 0xf4, 0x3e, 0x3e, 0x8d, 0xc8, 0x69, + 0x31, 0x28, 0x99, 0xe1, 0x74, 0xbc, 0x1c, 0x06, 0x11, 0xca, 0x6d, 0x1b, 0x48, 0xa1, 0xff, 0x9d, + 0xcd, 0x62, 0x0f, 0xc6, 0x4d, 0x88, 0x95, 0x55, 0xbf, 0x91, 0x81, 0x84, 0xe3, 0xda, 0xde, 0x5f, + 0x4e, 0xcd, 0xc3, 0x89, 0x58, 0xe0, 0x2a, 0xf1, 0xbe, 0x63, 0x87, 0x71, 0xad, 0xe2, 0xa5, 0xc9, + 0xfb, 0x83, 0x77, 0x05, 0xb7, 0xb5, 0x19, 0x11, 0x24, 0xa3, 0x6f, 0x6b, 0xb3, 0x98, 0x6b, 0x3b, + 0x0d, 0x4d, 0x42, 0x89, 0x47, 0xd0, 0xdf, 0x19, 0x0d, 0xa3, 0xf2, 0x90, 0x4b, 0xe2, 0x19, 0x57, + 0x26, 0x0c, 0xad, 0x11, 0xcb, 0xf9, 0xc8, 0x9f, 0x6d, 0x7d, 0x18, 0x86, 0x2a, 0xcd, 0x16, 0x75, + 0x5c, 0xdb, 0xd2, 0x3d, 0xdb, 0xcf, 0x2d, 0x8f, 0x61, 0x17, 0x4c, 0x09, 0x2e, 0x87, 0x02, 0x90, + 0xe9, 0xc9, 0x15, 0x3f, 0x0d, 0x45, 0x0e, 0xe3, 0x21, 0x61, 0x50, 0xcf, 0x78, 0x1e, 0x41, 0x4e, + 0xc1, 0x48, 0x6f, 0xbb, 0x3a, 0xbe, 0x40, 0x09, 0x48, 0xdb, 0x0c, 0x20, 0x93, 0x22, 0x05, 0x79, + 0x12, 0x0a, 0x78, 0x62, 0xe7, 0x62, 0x7a, 0x19, 0x11, 0xf0, 0xa3, 0x81, 0x10, 0x39, 0xbc, 0x02, + 0xa7, 0x21, 0xb7, 0x60, 0x34, 0xbc, 0x8e, 0xb8, 0xe9, 0xd8, 0xed, 0x96, 0x1f, 0x50, 0x1a, 0xf3, + 0x2f, 0xae, 0x05, 0xb8, 0xda, 0x0a, 0x22, 0x25, 0x16, 0x89, 0x82, 0x64, 0x1a, 0x4e, 0x84, 0x30, + 0x26, 0x22, 0x3f, 0x90, 0x3d, 0x26, 0x11, 0x92, 0x78, 0x31, 0x71, 0x46, 0x92, 0x08, 0xc5, 0x8a, + 0x91, 0x0a, 0xf4, 0xf9, 0xd1, 0x3e, 0xfa, 0xb7, 0x55, 0xd2, 0x93, 0x22, 0xda, 0x47, 0x9f, 0x1c, + 0xe7, 0xc3, 0x2f, 0x4f, 0xa6, 0x60, 0x44, 0xb3, 0xdb, 0x1e, 0x5d, 0xb4, 0xc5, 0x3a, 0x2e, 0xa2, + 0xca, 0x60, 0x9b, 0x1c, 0x86, 0xa9, 0x79, 0xb6, 0x9f, 0xbe, 0x52, 0x4e, 0xa3, 0x18, 0x2d, 0x45, + 0xe6, 0x60, 0x2c, 0x71, 0x71, 0x23, 0x27, 0x95, 0x94, 0x3e, 0x2f, 0xc9, 0x2c, 0x59, 0x94, 0xfc, + 0x60, 0x06, 0x0a, 0x8b, 0x8e, 0x6e, 0x7a, 0xae, 0x78, 0xbc, 0x72, 0xfa, 0xea, 0xba, 0xa3, 0xb7, + 0x98, 0x7e, 0x5c, 0xc5, 0x80, 0x57, 0x77, 0xf4, 0x46, 0x9b, 0xba, 0xe3, 0x77, 0xd9, 0xd7, 0xfd, + 0xfd, 0xcd, 0xe2, 0x4b, 0x2b, 0xb8, 0x3d, 0xbc, 0x5a, 0xb7, 0x9b, 0xd7, 0x56, 0x1c, 0xfd, 0x9e, + 0xe9, 0xe1, 0xd4, 0xa1, 0x37, 0xae, 0x79, 0xb4, 0x81, 0xbb, 0xd0, 0x6b, 0x7a, 0xcb, 0xbc, 0x86, + 0x81, 0x15, 0xaf, 0x05, 0x9c, 0x78, 0x0d, 0x4c, 0x05, 0x3c, 0xfc, 0x4b, 0x56, 0x01, 0x8e, 0x23, + 0x73, 0x6c, 0xf3, 0x86, 0x9f, 0x5a, 0x6a, 0xb5, 0xc4, 0x4b, 0x18, 0x69, 0xef, 0xe6, 0x63, 0xb8, + 0x62, 0x07, 0x02, 0xd3, 0x5b, 0x2d, 0x39, 0x6d, 0x6d, 0x48, 0xc7, 0xb4, 0x60, 0x51, 0xb4, 0xc8, + 0x17, 0xd3, 0x70, 0x28, 0x71, 0xbf, 0xb1, 0x29, 0x42, 0x8a, 0x17, 0x23, 0x4b, 0x70, 0x42, 0xf0, + 0x0d, 0x42, 0x0f, 0x8f, 0x44, 0x67, 0x85, 0x18, 0x9a, 0x2b, 0x6d, 0xd0, 0x46, 0x43, 0x80, 0xe5, + 0x3a, 0x62, 0x25, 0xc8, 0x78, 0x98, 0x0f, 0x6d, 0x4e, 0x6f, 0x52, 0x57, 0x39, 0x81, 0x1a, 0x7b, + 0x7e, 0x6b, 0xb3, 0xa8, 0xf8, 0xe5, 0x31, 0xf0, 0x4d, 0x6a, 0x76, 0x4f, 0x2c, 0x22, 0xf3, 0xe0, + 0x5a, 0x3f, 0x9a, 0xc2, 0x23, 0xae, 0xf3, 0xd1, 0x22, 0x64, 0x02, 0x86, 0x03, 0x47, 0xdc, 0xdb, + 0xb7, 0x2b, 0x65, 0x7c, 0x6a, 0x23, 0x62, 0x1f, 0xc5, 0x82, 0x03, 0xcb, 0x4c, 0x22, 0x65, 0xa4, + 0x37, 0x79, 0xfc, 0xed, 0x4d, 0xec, 0x4d, 0x5e, 0x2b, 0xe5, 0x4d, 0xde, 0x02, 0x79, 0x05, 0x06, + 0x4b, 0x77, 0xab, 0xe2, 0xad, 0xa1, 0xab, 0x9c, 0x0c, 0xc3, 0xc9, 0x63, 0x82, 0x57, 0xf1, 0x2e, + 0x51, 0x6e, 0xba, 0x4c, 0x4f, 0x26, 0x61, 0x24, 0x72, 0x97, 0xef, 0x2a, 0xa7, 0x90, 0x03, 0xb6, + 0x5c, 0x47, 0x4c, 0xcd, 0x11, 0xa8, 0x48, 0xca, 0xe1, 0x48, 0x21, 0xa6, 0x35, 0x6c, 0x3b, 0xdc, + 0x68, 0xd8, 0xeb, 0x1a, 0xc5, 0x67, 0x8d, 0xf8, 0x70, 0xa7, 0x9f, 0x6b, 0x8d, 0x21, 0x50, 0x35, + 0x87, 0xe3, 0x22, 0x39, 0x86, 0xa3, 0xc5, 0xc8, 0x5b, 0x40, 0x30, 0x98, 0x37, 0x35, 0xfc, 0xa3, + 0xdd, 0x4a, 0xd9, 0x55, 0xce, 0x60, 0xe0, 0x3f, 0x12, 0x7f, 0x57, 0x5b, 0x29, 0x8f, 0x5f, 0x12, + 0xd3, 0xc7, 0x45, 0x9d, 0x97, 0xaa, 0x39, 0x02, 0x57, 0x33, 0x23, 0x99, 0xce, 0x52, 0xb8, 0x92, + 0x75, 0x38, 0xbb, 0xe0, 0xd0, 0x7b, 0xa6, 0xdd, 0x76, 0xfd, 0xe5, 0xc3, 0x9f, 0xb7, 0xce, 0x6e, + 0x3b, 0x6f, 0x3d, 0x2a, 0x2a, 0x3e, 0xdd, 0x72, 0xe8, 0xbd, 0x9a, 0x1f, 0xee, 0x2d, 0x12, 0xad, + 0xa8, 0x13, 0x77, 0xcc, 0xd7, 0xf6, 0x76, 0xdb, 0xa1, 0x02, 0x6e, 0x52, 0x57, 0x51, 0xc2, 0xa9, + 0x96, 0xbf, 0x50, 0x35, 0x03, 0x5c, 0x24, 0x5f, 0x5b, 0xb4, 0x18, 0xd1, 0x80, 0xdc, 0x9c, 0xf0, + 0x8f, 0xf9, 0x4b, 0x75, 0x9e, 0xd5, 0x4a, 0x79, 0x08, 0x99, 0xa9, 0x4c, 0x2c, 0x2b, 0xf5, 0x20, + 0xf4, 0x63, 0x4d, 0x17, 0x78, 0x59, 0x2c, 0xc9, 0xd2, 0x64, 0x06, 0x46, 0x17, 0x1c, 0xdc, 0x74, + 0xdc, 0xa2, 0x1b, 0x0b, 0x76, 0xc3, 0xac, 0x6f, 0xe0, 0xfb, 0x21, 0x31, 0x55, 0xb6, 0x38, 0xae, + 0xb6, 0x46, 0x37, 0x6a, 0x2d, 0xc4, 0xca, 0xcb, 0x4a, 0xbc, 0xa4, 0x1c, 0x8a, 0xed, 0xe1, 0x9d, + 0x85, 0x62, 0xa3, 0x30, 0x2a, 0x2e, 0x09, 0xee, 0x7b, 0xd4, 0x62, 0x4b, 0xbd, 0x2b, 0xde, 0x0a, + 0x29, 0xb1, 0x4b, 0x85, 0x00, 0x2f, 0xf2, 0x0d, 0xf3, 0x51, 0x46, 0x03, 0xb0, 0xdc, 0xb0, 0x78, + 0x91, 0x64, 0xbc, 0xb2, 0x0b, 0x7b, 0x88, 0x57, 0xf6, 0xbf, 0xe4, 0xe4, 0xf9, 0x97, 0x9c, 0x87, + 0xbc, 0x14, 0x4e, 0x1c, 0x83, 0x31, 0x61, 0xe8, 0xc5, 0xbc, 0x88, 0x31, 0x37, 0x20, 0x6c, 0x97, + 0xe0, 0xd5, 0x2d, 0x26, 0x89, 0x09, 0x03, 0xf4, 0x68, 0x21, 0x01, 0x26, 0xe8, 0x68, 0x2f, 0x35, + 0xcc, 0x3a, 0x06, 0xe4, 0xcc, 0x49, 0x09, 0x3a, 0x10, 0xca, 0xe3, 0x71, 0x4a, 0x24, 0xe4, 0x3a, + 0x0c, 0xfa, 0x9b, 0xdd, 0x30, 0x18, 0x19, 0xc6, 0x69, 0xf4, 0xd3, 0x3b, 0xf3, 0x30, 0x90, 0x12, + 0x11, 0x79, 0x11, 0x13, 0x9c, 0xfb, 0x2f, 0x9a, 0x7b, 0x43, 0x1b, 0x48, 0x9e, 0x3d, 0x62, 0x19, + 0xce, 0xfd, 0x87, 0xcd, 0xe3, 0x30, 0x2c, 0xab, 0xa3, 0x9f, 0x92, 0x08, 0x27, 0xce, 0x88, 0x0e, + 0xcb, 0x0a, 0x12, 0x2d, 0x42, 0xe6, 0x61, 0x2c, 0xa1, 0x81, 0x22, 0x74, 0x19, 0xa6, 0xa5, 0x4c, + 0x51, 0x5f, 0x79, 0x61, 0x4e, 0x94, 0x25, 0x8f, 0x41, 0xee, 0xb6, 0x56, 0x11, 0xe1, 0x93, 0x78, + 0xe4, 0xad, 0xc8, 0xdb, 0x6a, 0x86, 0x55, 0xbf, 0x2f, 0x9b, 0x58, 0x9b, 0x98, 0xf4, 0x04, 0x2b, + 0xa9, 0x07, 0x51, 0x7a, 0x7e, 0xfd, 0x5c, 0x7a, 0x12, 0x11, 0xb9, 0x0c, 0xfd, 0xb1, 0x44, 0xe8, + 0xf8, 0x10, 0x3e, 0xc8, 0x82, 0x1e, 0x60, 0xc9, 0x75, 0x29, 0x93, 0x96, 0x14, 0x91, 0xd0, 0xcf, + 0xa4, 0x15, 0x0f, 0xcd, 0x87, 0x39, 0xb5, 0xae, 0xc7, 0x82, 0xf6, 0xfb, 0xf9, 0xaa, 0x93, 0xeb, + 0x62, 0x18, 0xa4, 0x3f, 0xb0, 0x4a, 0x7b, 0xb7, 0xb3, 0x4a, 0xd5, 0xdf, 0xcb, 0x24, 0xc7, 0x19, + 0xb9, 0x91, 0x0c, 0x0e, 0xc6, 0x53, 0x55, 0xfb, 0x40, 0xb9, 0xd6, 0x20, 0x4c, 0x58, 0x24, 0xcc, + 0x57, 0x76, 0xcf, 0x61, 0xbe, 0x72, 0xbb, 0x0c, 0xf3, 0xa5, 0xfe, 0xdb, 0x7c, 0x57, 0xa7, 0xb6, + 0x43, 0x09, 0x07, 0xf1, 0x02, 0xdb, 0x59, 0xb1, 0xda, 0x4b, 0x6e, 0x62, 0x7f, 0xc0, 0x7d, 0x76, + 0x6a, 0x3a, 0x1f, 0x5a, 0xae, 0x16, 0xa5, 0x24, 0xaf, 0xc2, 0x90, 0xff, 0x01, 0x18, 0x3e, 0x4e, + 0x0a, 0x7b, 0x16, 0xac, 0x6a, 0xf1, 0x6c, 0xe3, 0x72, 0x01, 0xf2, 0x2c, 0x0c, 0xa0, 0x4d, 0xd3, + 0xd2, 0xeb, 0x7e, 0x6c, 0x41, 0x1e, 0x8c, 0xd0, 0x07, 0xca, 0x21, 0x0f, 0x02, 0x4a, 0xf2, 0x09, + 0x28, 0x44, 0xd2, 0xdd, 0x5f, 0xdb, 0x81, 0x17, 0xe0, 0x55, 0x39, 0xb8, 0x2e, 0xdf, 0xa5, 0xc4, + 0x53, 0xdd, 0x0b, 0xa6, 0x64, 0x11, 0x4e, 0x2e, 0x38, 0xd4, 0x40, 0x7f, 0xd3, 0xc9, 0xfb, 0x2d, + 0x47, 0x84, 0x3e, 0xe6, 0xa3, 0x1c, 0x17, 0xa9, 0x96, 0x8f, 0x66, 0xcb, 0xa7, 0xc0, 0xcb, 0x01, + 0xce, 0x52, 0x8a, 0x33, 0xcb, 0x85, 0xb7, 0xe4, 0x16, 0xdd, 0x58, 0xc7, 0x94, 0xa7, 0xfd, 0xa1, + 0xe5, 0x22, 0x04, 0xbd, 0x26, 0x50, 0xb2, 0xe5, 0x12, 0x2d, 0x74, 0xee, 0x05, 0x18, 0xdc, 0x6b, + 0x80, 0xda, 0x5f, 0xcf, 0x76, 0x70, 0x0f, 0x7f, 0x70, 0x73, 0x84, 0x04, 0xd9, 0xe9, 0x7a, 0x3b, + 0x64, 0xa7, 0xfb, 0x76, 0xb6, 0x83, 0xef, 0xfb, 0x03, 0x9d, 0x45, 0x2a, 0x10, 0x46, 0x34, 0x8b, + 0x54, 0x98, 0xc0, 0xcb, 0x34, 0x34, 0x99, 0x28, 0x96, 0x6f, 0xae, 0xb0, 0x6d, 0xbe, 0xb9, 0x5f, + 0xca, 0x75, 0x7b, 0x1b, 0x70, 0x2c, 0xfb, 0xdd, 0xc8, 0xfe, 0x3a, 0x0c, 0x06, 0x92, 0xad, 0x94, + 0xd1, 0xe8, 0x19, 0x0e, 0xc2, 0x61, 0x73, 0x30, 0x96, 0x91, 0x88, 0xc8, 0x15, 0xde, 0xd6, 0xaa, + 0xf9, 0x36, 0x0f, 0xcc, 0x3a, 0x2c, 0x42, 0x6e, 0xea, 0x9e, 0x5e, 0x73, 0xcd, 0xb7, 0xa9, 0x16, + 0xa0, 0xd5, 0xff, 0x3d, 0x9b, 0xfa, 0xc0, 0xe2, 0xb8, 0x8f, 0x76, 0xd1, 0x47, 0x29, 0x42, 0xe4, + 0x4f, 0x43, 0x8e, 0x85, 0xb8, 0x0b, 0x21, 0xfe, 0x55, 0x36, 0xf5, 0x21, 0xcd, 0xb1, 0x10, 0x77, + 0x33, 0x5b, 0x3c, 0x09, 0x03, 0x9a, 0xbd, 0xee, 0x62, 0x72, 0x69, 0x31, 0x57, 0xe0, 0x44, 0xed, + 0xd8, 0xeb, 0x2e, 0x4f, 0xbc, 0xad, 0x85, 0x04, 0xea, 0x77, 0xb2, 0x5d, 0x9e, 0x1a, 0x1d, 0x0b, + 0xfe, 0xdd, 0x5c, 0x22, 0x7f, 0x2b, 0x1b, 0x79, 0xca, 0xf4, 0x40, 0xa7, 0x63, 0xad, 0xd6, 0x57, + 0x69, 0x53, 0x8f, 0xa7, 0x63, 0x75, 0x11, 0x2a, 0x92, 0xa2, 0x85, 0x24, 0xea, 0x57, 0xb3, 0xb1, + 0xb7, 0x5c, 0xc7, 0xb2, 0xdb, 0xb1, 0xec, 0x02, 0xad, 0x13, 0xcf, 0xd3, 0x8e, 0x25, 0xb7, 0x53, + 0xc9, 0x7d, 0x26, 0x1b, 0x7b, 0xc9, 0xf7, 0xc0, 0xca, 0x8e, 0x0d, 0xc0, 0xe4, 0x0b, 0xc3, 0x07, + 0x56, 0x93, 0x9e, 0x84, 0x01, 0x21, 0x87, 0x60, 0xa9, 0xe0, 0xf3, 0x3e, 0x07, 0xe2, 0x29, 0x6b, + 0x40, 0xa0, 0xfe, 0x40, 0x16, 0xa2, 0x2f, 0x2c, 0x1f, 0x50, 0x1d, 0xfa, 0xad, 0x6c, 0xf4, 0x6d, + 0xe9, 0x83, 0xab, 0x3f, 0x57, 0x01, 0xaa, 0xed, 0xa5, 0xba, 0x08, 0x4d, 0xd8, 0x2b, 0x1d, 0xd3, + 0x07, 0x50, 0x4d, 0xa2, 0x50, 0xff, 0x5d, 0x36, 0xf5, 0xc1, 0xeb, 0x83, 0x2b, 0xc0, 0x67, 0xf0, + 0x54, 0xbc, 0x6e, 0x85, 0x13, 0x39, 0x1e, 0x42, 0xb2, 0xf1, 0x97, 0xc8, 0x88, 0xe2, 0x13, 0x92, + 0x0f, 0xa5, 0x98, 0x6b, 0x18, 0xaf, 0x35, 0x34, 0xd7, 0xe4, 0x6b, 0x08, 0xc9, 0x70, 0xfb, 0x7f, + 0xb2, 0xdb, 0xbd, 0x0f, 0x7e, 0x90, 0x57, 0xd5, 0xbe, 0x05, 0x7d, 0x03, 0xe3, 0x58, 0xb1, 0x9e, + 0x18, 0xe2, 0xf9, 0x3a, 0x5a, 0x1c, 0x24, 0xdf, 0xbd, 0x09, 0x2a, 0xf5, 0x2f, 0x7b, 0xd3, 0x1f, + 0xa7, 0x3e, 0xb8, 0x22, 0x3c, 0x0f, 0xf9, 0x05, 0xdd, 0x5b, 0x15, 0x9a, 0x8c, 0x57, 0x7a, 0x2d, + 0xdd, 0x5b, 0xd5, 0x10, 0x4a, 0xae, 0x40, 0xbf, 0xa6, 0xaf, 0xf3, 0x33, 0xcf, 0x42, 0x98, 0x4b, + 0xc5, 0xd1, 0xd7, 0x6b, 0xfc, 0xdc, 0x33, 0x40, 0x13, 0x35, 0xc8, 0xe5, 0xc3, 0x4f, 0xbe, 0x31, + 0x91, 0x04, 0xcf, 0xe5, 0x13, 0x64, 0xf0, 0x39, 0x0f, 0xf9, 0x71, 0xdb, 0xd8, 0xc0, 0xeb, 0xab, + 0x21, 0x5e, 0xd9, 0x92, 0x6d, 0x6c, 0x68, 0x08, 0x25, 0x9f, 0xcd, 0x40, 0xdf, 0x34, 0xd5, 0x0d, + 0x36, 0x42, 0x06, 0xba, 0x79, 0x9d, 0x7c, 0xe4, 0x60, 0xbc, 0x4e, 0xc6, 0x56, 0x79, 0x65, 0xb2, + 0xa2, 0x88, 0xfa, 0xc9, 0x4d, 0xe8, 0x9f, 0xd0, 0x3d, 0xba, 0x62, 0x3b, 0x1b, 0xe8, 0x47, 0x33, + 0x12, 0x3a, 0x38, 0x46, 0xf4, 0xc7, 0x27, 0xe2, 0x37, 0x63, 0x75, 0xf1, 0x4b, 0x0b, 0x0a, 0x33, + 0xb1, 0x88, 0xec, 0xa2, 0x83, 0xa1, 0x58, 0x78, 0x1a, 0xd1, 0x20, 0x89, 0x68, 0x70, 0xac, 0x3c, + 0x94, 0x7e, 0xac, 0x8c, 0xd6, 0x23, 0xfa, 0xda, 0x61, 0x06, 0x9d, 0x61, 0x5c, 0xf4, 0xb9, 0xf5, + 0x88, 0x50, 0x4c, 0xa0, 0xa3, 0x49, 0x24, 0xea, 0x37, 0x7b, 0x21, 0xf5, 0x29, 0xdb, 0xb1, 0x92, + 0x1f, 0x2b, 0x79, 0xa8, 0xe4, 0xe5, 0x84, 0x92, 0x9f, 0x4b, 0x3e, 0x8e, 0x7c, 0x8f, 0x6a, 0xf8, + 0x97, 0xf3, 0x89, 0xa7, 0xd5, 0x0f, 0xf6, 0xee, 0x32, 0x94, 0x5e, 0xef, 0xb6, 0xd2, 0x0b, 0x06, + 0x44, 0x61, 0xdb, 0x01, 0xd1, 0xb7, 0xd3, 0x01, 0xd1, 0xdf, 0x71, 0x40, 0x84, 0x0a, 0x32, 0xd0, + 0x51, 0x41, 0x2a, 0x62, 0xd0, 0x40, 0xf7, 0xec, 0x6c, 0xe7, 0xb7, 0x36, 0x8b, 0x23, 0x6c, 0x34, + 0xa5, 0xe6, 0x65, 0x43, 0x16, 0xea, 0x37, 0xf2, 0x5d, 0xe2, 0x21, 0x1c, 0x8a, 0x8e, 0x3c, 0x03, + 0xb9, 0x52, 0xab, 0x25, 0xf4, 0xe3, 0xa4, 0x14, 0x8a, 0xa1, 0x43, 0x29, 0x46, 0x4d, 0x5e, 0x84, + 0x5c, 0xe9, 0x6e, 0x35, 0x1e, 0xd5, 0xbd, 0x74, 0xb7, 0x2a, 0xbe, 0xa4, 0x63, 0xd9, 0xbb, 0x55, + 0xf2, 0x72, 0x18, 0x5e, 0x6d, 0xb5, 0x6d, 0xad, 0x89, 0x8d, 0xa2, 0x70, 0xb7, 0xf5, 0xdd, 0x71, + 0xea, 0x0c, 0xc5, 0xb6, 0x8b, 0x31, 0xda, 0x98, 0x36, 0x15, 0x76, 0xae, 0x4d, 0x7d, 0xdb, 0x6a, + 0x53, 0xff, 0x4e, 0xb5, 0x69, 0x60, 0x07, 0xda, 0x04, 0xdb, 0x6a, 0xd3, 0xe0, 0xfe, 0xb5, 0xa9, + 0x05, 0xe7, 0x92, 0x31, 0x6c, 0x02, 0x8d, 0xd0, 0x80, 0x24, 0xb1, 0xc2, 0xb1, 0x04, 0xaf, 0xfe, + 0xdb, 0x1c, 0x5b, 0xe3, 0x59, 0x80, 0xe3, 0x39, 0x74, 0xb5, 0x94, 0xd2, 0xea, 0xaf, 0x67, 0x3b, + 0x87, 0xde, 0x39, 0x9a, 0x53, 0xdc, 0xf7, 0xa4, 0x4a, 0x29, 0x1f, 0x7d, 0x0a, 0xd9, 0x59, 0xca, + 0x31, 0xb6, 0x69, 0x32, 0xfb, 0x7a, 0xa6, 0x53, 0x3c, 0xa0, 0x7d, 0x49, 0xec, 0xf1, 0xa4, 0x47, + 0x1b, 0xfa, 0xe9, 0xbb, 0x51, 0x57, 0xb6, 0x78, 0x52, 0xd9, 0xdc, 0x1e, 0x93, 0xca, 0xfe, 0x5e, + 0x06, 0x4e, 0xde, 0x6a, 0x2f, 0x51, 0xe1, 0xc1, 0x16, 0x34, 0xe3, 0x2d, 0x00, 0x06, 0x16, 0x4e, + 0x2c, 0x19, 0x74, 0x62, 0xf9, 0x80, 0x1c, 0xcb, 0x27, 0x56, 0xe0, 0x6a, 0x48, 0xcd, 0x1d, 0x58, + 0x2e, 0xf8, 0xce, 0x9c, 0x6b, 0xed, 0x25, 0x5a, 0x4b, 0x78, 0xb2, 0x48, 0xdc, 0xcf, 0xbd, 0xc2, + 0xdd, 0xe4, 0xf7, 0xea, 0x34, 0xf2, 0xab, 0xd9, 0x8e, 0xe1, 0x93, 0x8e, 0x6c, 0xf6, 0x9a, 0x8f, + 0xa5, 0xf6, 0x4a, 0x3c, 0x8b, 0x4d, 0x0a, 0x49, 0x8c, 0x63, 0x1a, 0x97, 0x74, 0x81, 0x1d, 0xf1, + 0x9c, 0x4a, 0xef, 0xaa, 0xc0, 0xfe, 0x38, 0xd3, 0x31, 0xcc, 0xd5, 0x51, 0x15, 0x98, 0xfa, 0x4f, + 0x72, 0x7e, 0x74, 0xad, 0x7d, 0x7d, 0xc2, 0x93, 0x30, 0x20, 0x1e, 0x19, 0x46, 0x1d, 0x70, 0xc5, + 0x51, 0x1e, 0x1e, 0x0d, 0x07, 0x04, 0x6c, 0x99, 0x97, 0xbc, 0x83, 0x25, 0x07, 0x5c, 0xc9, 0x33, + 0x58, 0x93, 0x48, 0xd8, 0x42, 0x3e, 0x79, 0xdf, 0xf4, 0xd0, 0x2a, 0x60, 0x7d, 0x99, 0xe3, 0x0b, + 0x39, 0xbd, 0x6f, 0x7a, 0xdc, 0x26, 0x08, 0xd0, 0x6c, 0x91, 0xae, 0x86, 0x19, 0x23, 0xc5, 0x22, + 0xed, 0x8a, 0xc4, 0x99, 0xe2, 0xd9, 0xd8, 0x93, 0x30, 0x20, 0xbc, 0x5a, 0x85, 0x9b, 0x89, 0x68, + 0xad, 0xf0, 0x83, 0xc5, 0xd6, 0x06, 0x04, 0x8c, 0xa3, 0x46, 0x57, 0x42, 0xc7, 0x3a, 0xe4, 0xe8, + 0x20, 0x44, 0x13, 0x18, 0x72, 0x1d, 0x46, 0xaa, 0x9e, 0x6e, 0x19, 0xba, 0x63, 0xcc, 0xb7, 0xbd, + 0x56, 0xdb, 0x93, 0x8d, 0x52, 0xd7, 0x33, 0xec, 0xb6, 0xa7, 0xc5, 0x28, 0xc8, 0x07, 0x61, 0xd8, + 0x87, 0x4c, 0x3a, 0x8e, 0xed, 0xc8, 0x96, 0x87, 0xeb, 0x19, 0xd4, 0x71, 0xb4, 0x28, 0x01, 0xf9, + 0x10, 0x0c, 0x57, 0xac, 0x7b, 0x36, 0x4f, 0x45, 0x7a, 0x5b, 0x9b, 0x11, 0x76, 0x08, 0x3e, 0xc5, + 0x32, 0x03, 0x44, 0xad, 0xed, 0x34, 0xb4, 0x28, 0xa1, 0xba, 0x95, 0x4d, 0x06, 0x21, 0x7b, 0x70, + 0x37, 0x2d, 0x57, 0xa2, 0xce, 0x74, 0xe8, 0x41, 0x8a, 0x06, 0xa1, 0xec, 0xcb, 0xcb, 0xed, 0xc2, + 0xeb, 0xd0, 0x7f, 0x8b, 0x6e, 0x70, 0xbf, 0xcf, 0x42, 0xe8, 0x2a, 0xbc, 0x26, 0x60, 0xf2, 0x89, + 0xab, 0x4f, 0xa7, 0x7e, 0x2d, 0x9b, 0x0c, 0xaf, 0xf6, 0xe0, 0x0a, 0xfb, 0x83, 0xd0, 0x87, 0xa2, + 0xac, 0xf8, 0x47, 0xfe, 0x28, 0x40, 0x14, 0x77, 0xd4, 0x03, 0xd9, 0x27, 0x53, 0x7f, 0xb6, 0x10, + 0x8f, 0xb9, 0xf7, 0xe0, 0x4a, 0xef, 0x25, 0x18, 0x9c, 0xb0, 0x2d, 0xd7, 0x74, 0x3d, 0x6a, 0xd5, + 0x7d, 0x85, 0x7d, 0x88, 0x19, 0x54, 0xf5, 0x10, 0x2c, 0xbf, 0x41, 0x92, 0xa8, 0xf7, 0xa2, 0xbc, + 0xe4, 0x39, 0x18, 0x40, 0x91, 0xa3, 0x9f, 0xb4, 0x94, 0xea, 0x7c, 0x89, 0x01, 0xe3, 0x4e, 0xd2, + 0x21, 0x29, 0xb9, 0x0d, 0xfd, 0x13, 0xab, 0x66, 0xc3, 0x70, 0xa8, 0x85, 0xfe, 0xc2, 0xd2, 0xd3, + 0xe6, 0x68, 0x5f, 0x5e, 0xc5, 0x7f, 0x91, 0x96, 0x37, 0xa7, 0x2e, 0x8a, 0x45, 0x5e, 0x61, 0x09, + 0xd8, 0xb9, 0x1f, 0xcb, 0x02, 0x84, 0x05, 0xc8, 0x23, 0x90, 0x0d, 0x92, 0xb1, 0xa1, 0x9b, 0x4a, + 0x44, 0x83, 0xb2, 0xb8, 0x54, 0x88, 0xb1, 0x9d, 0xdd, 0x76, 0x6c, 0xdf, 0x86, 0x02, 0x3f, 0xf1, + 0x42, 0x4f, 0x72, 0x29, 0x0c, 0x58, 0xc7, 0x06, 0x5f, 0x45, 0x7a, 0xbe, 0x99, 0x45, 0xcb, 0x33, + 0xe2, 0x95, 0xcd, 0x99, 0x9d, 0xab, 0x43, 0x2f, 0xfe, 0x45, 0x2e, 0x41, 0x1e, 0xa5, 0x98, 0xc1, + 0x7d, 0x2c, 0xce, 0xd2, 0x31, 0xf9, 0x21, 0x9e, 0x75, 0xd3, 0x84, 0x6d, 0x79, 0xac, 0x6a, 0x6c, + 0xf5, 0x90, 0x90, 0x8b, 0x80, 0x45, 0xe4, 0x22, 0x60, 0xea, 0xff, 0x9d, 0x4d, 0x89, 0x06, 0xf9, + 0xe0, 0x0e, 0x93, 0x17, 0x00, 0xf0, 0x49, 0x37, 0x93, 0xa7, 0xff, 0x44, 0x03, 0x47, 0x09, 0x32, + 0x42, 0xb5, 0x8d, 0x6c, 0x3b, 0x42, 0x62, 0xf5, 0x0f, 0x32, 0x89, 0x10, 0x82, 0xfb, 0x92, 0xa3, + 0x6c, 0x95, 0x65, 0xf7, 0x68, 0xc6, 0xfa, 0x7d, 0x91, 0xdb, 0x5d, 0x5f, 0x44, 0xbf, 0xe5, 0x00, + 0x2c, 0xd3, 0xc3, 0xfc, 0x96, 0x6f, 0x66, 0xd3, 0x02, 0x2a, 0x1e, 0x4d, 0x15, 0xbf, 0x11, 0x18, + 0xa5, 0xf9, 0x9d, 0xa4, 0x31, 0x17, 0x66, 0xea, 0x27, 0xe1, 0x44, 0x2c, 0xcc, 0xa0, 0xc8, 0x90, + 0x78, 0xa9, 0x7b, 0xbc, 0xc2, 0xce, 0xc1, 0x00, 0x22, 0x64, 0xea, 0xbf, 0xcf, 0x74, 0x0f, 0x32, + 0x79, 0xe8, 0xaa, 0x93, 0x22, 0x80, 0xdc, 0xdf, 0x8d, 0x00, 0x0e, 0x60, 0x1b, 0x7c, 0xb4, 0x05, + 0xf0, 0x1e, 0x99, 0x3c, 0xde, 0x6d, 0x01, 0xfc, 0x6c, 0x66, 0xdb, 0x18, 0xa1, 0x87, 0x2d, 0x03, + 0xf5, 0x1f, 0x66, 0x52, 0x63, 0x79, 0xee, 0xab, 0x5d, 0x2f, 0x43, 0x81, 0xbb, 0xd5, 0x88, 0x56, + 0x49, 0xd9, 0x4f, 0x18, 0xb4, 0x43, 0x79, 0x51, 0x86, 0xcc, 0x40, 0x1f, 0x6f, 0x83, 0x11, 0xcf, + 0x12, 0x9c, 0xd2, 0x4e, 0xa3, 0xd3, 0xe4, 0x28, 0xd0, 0xea, 0xef, 0x67, 0x12, 0xa1, 0x45, 0x0f, + 0xf1, 0xdb, 0xc2, 0xa9, 0x3a, 0xb7, 0xf3, 0xa9, 0x5a, 0xfd, 0x8b, 0x6c, 0x7a, 0x64, 0xd3, 0x43, + 0xfc, 0x90, 0x83, 0x38, 0x4e, 0xdb, 0xdb, 0xba, 0xb5, 0x08, 0x23, 0x51, 0x59, 0x88, 0x65, 0xeb, + 0x62, 0x7a, 0x7c, 0xd7, 0x0e, 0xad, 0x88, 0xf1, 0x50, 0xdf, 0xc9, 0x24, 0x83, 0xb2, 0x1e, 0xfa, + 0xfc, 0xb4, 0x37, 0x6d, 0x89, 0x7e, 0xca, 0x7b, 0x64, 0xad, 0x39, 0x88, 0x4f, 0x79, 0x8f, 0xac, + 0x1a, 0x7b, 0xfb, 0x94, 0x5f, 0xce, 0x76, 0x8a, 0x69, 0x7b, 0xe8, 0x1f, 0xf4, 0x51, 0x59, 0xc8, + 0xbc, 0x65, 0xe2, 0xd3, 0x1e, 0xe9, 0x14, 0x44, 0xb6, 0x03, 0xcf, 0x04, 0x9f, 0xbd, 0x8d, 0xf1, + 0x54, 0x61, 0xbd, 0x47, 0x14, 0xf9, 0x68, 0x08, 0xeb, 0x3d, 0x32, 0x54, 0xde, 0x7b, 0xc2, 0xfa, + 0x9d, 0xec, 0x4e, 0x03, 0x29, 0x1f, 0x0b, 0x2f, 0x21, 0xbc, 0x2f, 0x66, 0x93, 0x01, 0xbe, 0x0f, + 0x5d, 0x4c, 0x53, 0x50, 0x10, 0xa1, 0xc6, 0x3b, 0x0a, 0x87, 0xe3, 0x3b, 0x59, 0x34, 0xe2, 0x3b, + 0x6e, 0x80, 0xb8, 0xc8, 0xd9, 0x99, 0x48, 0x38, 0xad, 0xfa, 0x9d, 0x4c, 0x2c, 0x1a, 0xf6, 0xa1, + 0x1c, 0x21, 0xec, 0x69, 0x49, 0x22, 0xaf, 0xf8, 0x87, 0x99, 0xf9, 0x58, 0x34, 0xd2, 0xe0, 0x7b, + 0xca, 0xd4, 0xd3, 0xcd, 0x46, 0xbc, 0xbc, 0x88, 0x09, 0xf0, 0xb5, 0x2c, 0x8c, 0x25, 0x48, 0xc9, + 0xa5, 0x48, 0x28, 0x1d, 0x3c, 0x96, 0x8c, 0x39, 0x8f, 0xf3, 0xa0, 0x3a, 0xbb, 0x38, 0x49, 0xbd, + 0x04, 0xf9, 0xb2, 0xbe, 0xc1, 0xbf, 0xad, 0x97, 0xb3, 0x34, 0xf4, 0x0d, 0xf9, 0xc4, 0x0d, 0xf1, + 0x64, 0x09, 0x4e, 0xf3, 0xfb, 0x10, 0xd3, 0xb6, 0x16, 0xcd, 0x26, 0xad, 0x58, 0xb3, 0x66, 0xa3, + 0x61, 0xba, 0xe2, 0x52, 0xef, 0xc9, 0xad, 0xcd, 0xe2, 0x65, 0xcf, 0xf6, 0xf4, 0x46, 0x8d, 0xfa, + 0x64, 0x35, 0xcf, 0x6c, 0xd2, 0x9a, 0x69, 0xd5, 0x9a, 0x48, 0x29, 0xb1, 0x4c, 0x67, 0x45, 0x2a, + 0x3c, 0xf0, 0x6c, 0xb5, 0xae, 0x5b, 0x16, 0x35, 0x2a, 0xd6, 0xf8, 0x86, 0x47, 0xf9, 0x65, 0x60, + 0x8e, 0x1f, 0x09, 0xf2, 0xb7, 0xe1, 0x1c, 0xcd, 0x18, 0x2f, 0x31, 0x02, 0x2d, 0xa5, 0x90, 0xfa, + 0xbb, 0xf9, 0x94, 0x40, 0xe8, 0x47, 0x48, 0x7d, 0xfc, 0x9e, 0xce, 0x6f, 0xd3, 0xd3, 0xd7, 0xa0, + 0xef, 0x0e, 0x75, 0xf0, 0x7c, 0x8b, 0x5f, 0x30, 0xa0, 0x33, 0xfb, 0x3d, 0x0e, 0x92, 0x6f, 0x68, + 0x04, 0x15, 0x69, 0xc0, 0xb9, 0x45, 0xd6, 0x4d, 0xe9, 0x9d, 0x59, 0xd8, 0x43, 0x67, 0x76, 0xe1, + 0x47, 0xde, 0x84, 0xb3, 0x88, 0x4d, 0xe9, 0xd6, 0x3e, 0xac, 0x0a, 0x63, 0x54, 0xf1, 0xaa, 0xd2, + 0x3b, 0xb7, 0x53, 0x79, 0xf2, 0x51, 0x18, 0x0a, 0x06, 0x88, 0x49, 0x5d, 0x71, 0x73, 0xd1, 0x65, + 0x9c, 0xf1, 0x00, 0x70, 0x0c, 0x8c, 0x2e, 0x64, 0xd1, 0x20, 0x62, 0x11, 0x5e, 0xea, 0x3f, 0xc8, + 0x74, 0x0b, 0xc8, 0x7e, 0xe8, 0xb3, 0xf2, 0x2b, 0xd0, 0x67, 0xf0, 0x8f, 0x12, 0x3a, 0xd5, 0x3d, + 0x64, 0x3b, 0x27, 0xd5, 0xfc, 0x32, 0xea, 0x9f, 0x67, 0xba, 0xc6, 0x81, 0x3f, 0xea, 0x9f, 0xf7, + 0xc5, 0x5c, 0x87, 0xcf, 0x13, 0x93, 0xe8, 0x15, 0x18, 0x35, 0xc3, 0x40, 0xb5, 0xb5, 0x30, 0xfc, + 0x94, 0x76, 0x42, 0x82, 0xe3, 0xe8, 0xba, 0x01, 0x67, 0x7c, 0xc7, 0x47, 0xc7, 0xf7, 0x10, 0x73, + 0x6b, 0x6d, 0xc7, 0xe4, 0xe3, 0x52, 0x3b, 0xe5, 0xc6, 0xdc, 0xc7, 0xdc, 0xdb, 0x8e, 0xc9, 0x2a, + 0xd0, 0xbd, 0x55, 0x6a, 0xe9, 0xb5, 0x75, 0xdb, 0x59, 0xc3, 0x28, 0xa3, 0x7c, 0x70, 0x6a, 0x27, + 0x38, 0xfc, 0xae, 0x0f, 0x26, 0x8f, 0xc1, 0xf0, 0x4a, 0xa3, 0x4d, 0x83, 0xb8, 0x8e, 0xfc, 0xae, + 0x4f, 0x1b, 0x62, 0xc0, 0xe0, 0x86, 0xe4, 0x02, 0x00, 0x12, 0x79, 0x18, 0xa5, 0x1f, 0x2f, 0xf6, + 0xb4, 0x01, 0x06, 0x59, 0x14, 0xdd, 0x75, 0x8e, 0x6b, 0x35, 0x17, 0x52, 0xad, 0x61, 0x5b, 0x2b, + 0x35, 0x8f, 0x3a, 0x4d, 0x6c, 0x28, 0x3a, 0x33, 0x68, 0x67, 0x90, 0x02, 0xaf, 0x4e, 0xdc, 0x19, + 0xdb, 0x5a, 0x59, 0xa4, 0x4e, 0x93, 0x35, 0xf5, 0x49, 0x20, 0xa2, 0xa9, 0x0e, 0x1e, 0x7a, 0xf0, + 0x8f, 0x43, 0x6f, 0x06, 0x4d, 0x7c, 0x04, 0x3f, 0x0d, 0xc1, 0x0f, 0x2b, 0xc2, 0x20, 0x0f, 0x6e, + 0xc7, 0x85, 0x86, 0x2e, 0x0c, 0x1a, 0x70, 0x10, 0xca, 0xeb, 0x0c, 0x08, 0xef, 0x0a, 0xee, 0xd5, + 0xad, 0x89, 0x5f, 0xea, 0xe7, 0x72, 0x69, 0xa1, 0xeb, 0xf7, 0xa5, 0x68, 0xe1, 0xb4, 0x9a, 0xdd, + 0xd5, 0xb4, 0x7a, 0xc2, 0x6a, 0x37, 0x6b, 0x7a, 0xab, 0x55, 0x5b, 0x36, 0x1b, 0xf8, 0xac, 0x0a, + 0x17, 0x3e, 0x6d, 0xd8, 0x6a, 0x37, 0x4b, 0xad, 0xd6, 0x14, 0x07, 0x92, 0x27, 0x60, 0x8c, 0xd1, + 0x61, 0x27, 0x05, 0x94, 0x79, 0xa4, 0x64, 0x0c, 0x30, 0x3a, 0xac, 0x4f, 0xfb, 0x10, 0xf4, 0x0b, + 0x9e, 0x7c, 0xad, 0xea, 0xd5, 0xfa, 0x38, 0x33, 0x97, 0xf5, 0x5c, 0xc0, 0x86, 0x4f, 0xae, 0xbd, + 0xda, 0x80, 0x5f, 0x1e, 0x63, 0x20, 0x5b, 0xed, 0x26, 0x8f, 0x88, 0xd5, 0x87, 0xc8, 0xe0, 0x37, + 0xb9, 0x04, 0x23, 0x8c, 0x4b, 0x20, 0x30, 0x1e, 0x36, 0xb6, 0x57, 0x8b, 0x41, 0xc9, 0x75, 0x38, + 0x15, 0x81, 0x70, 0x1b, 0x94, 0x3f, 0x13, 0xe8, 0xd5, 0x52, 0x71, 0xea, 0x57, 0x73, 0xd1, 0x80, + 0xfa, 0x87, 0xd0, 0x11, 0x67, 0xa1, 0xcf, 0x76, 0x56, 0x6a, 0x6d, 0xa7, 0x21, 0xc6, 0x5e, 0xc1, + 0x76, 0x56, 0x6e, 0x3b, 0x0d, 0x72, 0x1a, 0x0a, 0xac, 0x77, 0x4c, 0x43, 0x0c, 0xb1, 0x5e, 0xbd, + 0xd5, 0xaa, 0x18, 0xa4, 0xc4, 0x3b, 0x04, 0x43, 0x8e, 0xd6, 0xea, 0xb8, 0xb5, 0xe7, 0x4e, 0x09, + 0xbd, 0x7c, 0xc5, 0x4b, 0x20, 0xb1, 0x9f, 0x30, 0x10, 0x29, 0x3f, 0x08, 0x88, 0xb1, 0x30, 0x70, + 0x5b, 0x62, 0xf0, 0x3e, 0x89, 0xb3, 0x10, 0xc8, 0x90, 0x05, 0xdf, 0xc4, 0x18, 0xa4, 0x0c, 0x24, + 0xa4, 0x6a, 0xda, 0x86, 0xb9, 0x6c, 0x52, 0xfe, 0xaa, 0xa3, 0x97, 0x5f, 0xfc, 0x26, 0xb1, 0xda, + 0xa8, 0xcf, 0x64, 0x56, 0x40, 0xc8, 0x4b, 0x5c, 0x09, 0x39, 0x1d, 0xae, 0x7d, 0xbc, 0x6f, 0xb9, + 0x9d, 0x16, 0x43, 0xa1, 0x66, 0x62, 0x79, 0x5c, 0x08, 0xd5, 0x77, 0x72, 0xc9, 0xac, 0x0a, 0x87, + 0x62, 0xd7, 0x4c, 0x03, 0x88, 0xa4, 0x29, 0xe1, 0xe5, 0x5a, 0xe0, 0x71, 0x1e, 0x62, 0x3a, 0xf0, + 0x90, 0xca, 0x92, 0x2b, 0xd0, 0xcf, 0xbf, 0xa8, 0x52, 0x16, 0xf6, 0x0e, 0xba, 0x88, 0xb9, 0x2d, + 0x73, 0x79, 0x19, 0xfd, 0xc9, 0x02, 0x34, 0xb9, 0x04, 0x7d, 0xe5, 0xb9, 0x6a, 0xb5, 0x34, 0xe7, + 0xdf, 0x14, 0xe3, 0xfb, 0x12, 0xc3, 0x72, 0x6b, 0xae, 0x6e, 0xb9, 0x9a, 0x8f, 0x24, 0x8f, 0x41, + 0xa1, 0xb2, 0x80, 0x64, 0xfc, 0xd5, 0xe4, 0xe0, 0xd6, 0x66, 0xb1, 0xcf, 0x6c, 0x71, 0x2a, 0x81, + 0xc2, 0x7a, 0xef, 0x54, 0xca, 0x92, 0xbb, 0x04, 0xaf, 0xf7, 0x9e, 0x69, 0xe0, 0xb5, 0xb3, 0x16, + 0xa0, 0xc9, 0xb3, 0x30, 0x54, 0xa5, 0x8e, 0xa9, 0x37, 0xe6, 0xda, 0xb8, 0x55, 0x94, 0x42, 0x29, + 0xba, 0x08, 0xaf, 0x59, 0x88, 0xd0, 0x22, 0x64, 0xe4, 0x3c, 0xe4, 0xa7, 0x4d, 0xcb, 0x7f, 0xc2, + 0x80, 0x3e, 0xee, 0xab, 0xa6, 0xe5, 0x69, 0x08, 0x55, 0xff, 0x65, 0x36, 0x3d, 0x35, 0xc5, 0x21, + 0x0c, 0xc7, 0x3d, 0xde, 0xf4, 0xc6, 0x94, 0x20, 0xbf, 0x0f, 0x25, 0x58, 0x86, 0x13, 0x25, 0xa3, + 0x69, 0x5a, 0x25, 0xfc, 0xe9, 0xce, 0x4e, 0x95, 0x70, 0x78, 0x4b, 0x4f, 0xe8, 0x62, 0x68, 0xf1, + 0x3d, 0x3c, 0x28, 0x2f, 0x43, 0xd5, 0x74, 0x8e, 0xab, 0x35, 0x97, 0xf5, 0x5a, 0x9d, 0x67, 0x75, + 0xd0, 0xe2, 0x4c, 0xd5, 0x1f, 0xcd, 0x6e, 0x93, 0x4d, 0xe3, 0x41, 0x94, 0xbe, 0xfa, 0xa5, 0x6c, + 0xf7, 0x84, 0x26, 0x0f, 0xa4, 0x50, 0xfe, 0x2a, 0x9b, 0x92, 0x5e, 0x64, 0x5f, 0x92, 0xb8, 0x02, + 0xfd, 0x9c, 0x4d, 0xe0, 0x6a, 0x8b, 0x33, 0x0e, 0x57, 0x56, 0x9c, 0xe9, 0x7c, 0x34, 0x99, 0x83, + 0x53, 0xa5, 0xe5, 0x65, 0x5a, 0xf7, 0xc2, 0xf0, 0xcc, 0x73, 0x61, 0xa0, 0x54, 0x1e, 0x8e, 0x56, + 0xe0, 0xc3, 0xf0, 0xce, 0x18, 0x10, 0x24, 0xb5, 0x1c, 0x59, 0x84, 0x33, 0x71, 0x78, 0x95, 0x9b, + 0xe9, 0x79, 0x29, 0x42, 0x6d, 0x82, 0x23, 0xff, 0x4f, 0xeb, 0x50, 0x36, 0xad, 0x95, 0x38, 0x9d, + 0xf6, 0x76, 0x6b, 0x25, 0xce, 0xad, 0xa9, 0xe5, 0xd4, 0xaf, 0xe5, 0xe4, 0x2c, 0x2c, 0x0f, 0xae, + 0x53, 0xd4, 0x8d, 0x88, 0x2b, 0xf4, 0x4e, 0x87, 0xcc, 0xb3, 0x22, 0xca, 0x87, 0xd1, 0x76, 0x7c, + 0xaf, 0xc1, 0x20, 0xca, 0x00, 0x02, 0x65, 0xff, 0xbf, 0x80, 0x92, 0x54, 0x20, 0x5f, 0x72, 0x56, + 0xb8, 0x09, 0xba, 0xdd, 0xc3, 0x27, 0xdd, 0x59, 0x71, 0xd3, 0x1f, 0x3e, 0x31, 0x16, 0xea, 0x8f, + 0x64, 0xbb, 0x24, 0x4e, 0x79, 0x10, 0x27, 0x91, 0x27, 0x66, 0x79, 0x90, 0xe3, 0x5b, 0xa6, 0x65, + 0x90, 0x87, 0xe0, 0xf4, 0xed, 0xea, 0xa4, 0x56, 0xbb, 0x55, 0x99, 0x2b, 0xd7, 0x6e, 0xcf, 0x55, + 0x17, 0x26, 0x27, 0x2a, 0x53, 0x95, 0xc9, 0xf2, 0x68, 0x0f, 0x39, 0x09, 0x27, 0x42, 0xd4, 0xf4, + 0xed, 0xd9, 0xd2, 0xdc, 0x68, 0x86, 0x8c, 0xc1, 0x70, 0x08, 0x1c, 0x9f, 0x5f, 0x1c, 0xcd, 0x3e, + 0xf1, 0x7e, 0x18, 0xc4, 0x5d, 0x1c, 0x5f, 0xd1, 0xc8, 0x10, 0xf4, 0xcf, 0x8f, 0x57, 0x27, 0xb5, + 0x3b, 0xc8, 0x04, 0xa0, 0x50, 0x9e, 0x9c, 0x63, 0x0c, 0x33, 0x4f, 0xfc, 0x9b, 0x0c, 0x40, 0x75, + 0x6a, 0x71, 0x41, 0x10, 0x0e, 0x42, 0x5f, 0x65, 0xee, 0x4e, 0x69, 0xa6, 0xc2, 0xe8, 0xfa, 0x21, + 0x3f, 0xbf, 0x30, 0xc9, 0x6a, 0x18, 0x80, 0xde, 0x89, 0x99, 0xf9, 0xea, 0xe4, 0x68, 0x96, 0x01, + 0xb5, 0xc9, 0x52, 0x79, 0x34, 0xc7, 0x80, 0x77, 0xb5, 0xca, 0xe2, 0xe4, 0x68, 0x9e, 0xfd, 0x39, + 0x53, 0x5d, 0x2c, 0x2d, 0x8e, 0xf6, 0xb2, 0x3f, 0xa7, 0xf0, 0xcf, 0x02, 0x63, 0x56, 0x9d, 0x5c, + 0xc4, 0x1f, 0x7d, 0xac, 0x09, 0x53, 0xfe, 0xaf, 0x7e, 0x86, 0x62, 0xac, 0xcb, 0x15, 0x6d, 0x74, + 0x80, 0xfd, 0x60, 0x2c, 0xd9, 0x0f, 0x60, 0x8d, 0xd3, 0x26, 0x67, 0xe7, 0xef, 0x4c, 0x8e, 0x0e, + 0x32, 0x5e, 0xb3, 0xb7, 0x18, 0x78, 0x88, 0xfd, 0xa9, 0xcd, 0xb2, 0x3f, 0x87, 0x19, 0x27, 0x6d, + 0xb2, 0x34, 0xb3, 0x50, 0x5a, 0x9c, 0x1e, 0x1d, 0x61, 0xed, 0x41, 0x9e, 0x27, 0x78, 0xc9, 0xb9, + 0xd2, 0xec, 0xe4, 0xe8, 0xa8, 0xa0, 0x29, 0xcf, 0x54, 0xe6, 0x6e, 0x8d, 0x8e, 0x61, 0x43, 0xde, + 0x9c, 0xc5, 0x1f, 0x84, 0x15, 0xc0, 0xbf, 0x4e, 0x3e, 0xf1, 0x71, 0x28, 0xcc, 0x57, 0xd1, 0x6e, + 0x3b, 0x0b, 0x27, 0xe7, 0xab, 0xb5, 0xc5, 0x37, 0x17, 0x26, 0x63, 0xf2, 0x1e, 0x83, 0x61, 0x1f, + 0x31, 0x53, 0x99, 0xbb, 0xfd, 0x11, 0x2e, 0x6d, 0x1f, 0x34, 0x5b, 0x9a, 0x98, 0xaf, 0x8e, 0x66, + 0x59, 0xaf, 0xf8, 0xa0, 0xbb, 0x95, 0xb9, 0xf2, 0xfc, 0xdd, 0xea, 0x68, 0xee, 0x89, 0x7b, 0x7e, + 0x6e, 0xd7, 0x79, 0xc7, 0x5c, 0x31, 0x2d, 0x72, 0x01, 0x1e, 0x2a, 0x4f, 0xde, 0xa9, 0x4c, 0x4c, + 0xd6, 0xe6, 0xb5, 0xca, 0xcd, 0xca, 0x5c, 0xac, 0xa6, 0xd3, 0x30, 0x16, 0x45, 0x97, 0x16, 0x2a, + 0xa3, 0x19, 0x72, 0x06, 0x48, 0x14, 0xfc, 0x7a, 0x69, 0x76, 0x6a, 0x34, 0x4b, 0x14, 0x38, 0x15, + 0x85, 0x57, 0xe6, 0x16, 0x6f, 0xcf, 0x4d, 0x8e, 0xe6, 0x9e, 0xf8, 0xf9, 0x0c, 0x9c, 0x4e, 0x0d, + 0x23, 0x40, 0x54, 0xb8, 0x38, 0x39, 0x53, 0xaa, 0x2e, 0x56, 0x26, 0xaa, 0x93, 0x25, 0x6d, 0x62, + 0xba, 0x36, 0x51, 0x5a, 0x9c, 0xbc, 0x39, 0xaf, 0xbd, 0x59, 0xbb, 0x39, 0x39, 0x37, 0xa9, 0x95, + 0x66, 0x46, 0x7b, 0xc8, 0x63, 0x50, 0xec, 0x40, 0x53, 0x9d, 0x9c, 0xb8, 0xad, 0x55, 0x16, 0xdf, + 0x1c, 0xcd, 0x90, 0x47, 0xe1, 0x42, 0x47, 0x22, 0xf6, 0x7b, 0x34, 0x4b, 0x2e, 0xc2, 0xb9, 0x4e, + 0x24, 0x6f, 0xcc, 0x8c, 0xe6, 0x9e, 0xf8, 0x89, 0x0c, 0x90, 0xe4, 0x3b, 0x70, 0xf2, 0x08, 0x9c, + 0x67, 0x7a, 0x51, 0xeb, 0xdc, 0xc0, 0x47, 0xe1, 0x42, 0x2a, 0x85, 0xd4, 0xbc, 0x22, 0x3c, 0xdc, + 0x81, 0x44, 0x34, 0xee, 0x3c, 0x28, 0xe9, 0x04, 0xd8, 0xb4, 0xdf, 0xcc, 0xc0, 0xe9, 0x54, 0x23, + 0x92, 0x5c, 0x86, 0xf7, 0x95, 0xca, 0xb3, 0xac, 0x6f, 0x26, 0x16, 0x2b, 0xf3, 0x73, 0xd5, 0xda, + 0xec, 0x54, 0xa9, 0xc6, 0xb4, 0xef, 0x76, 0x35, 0xd6, 0x9b, 0x97, 0x40, 0xed, 0x42, 0x39, 0x31, + 0x5d, 0x9a, 0xbb, 0xc9, 0x86, 0x1f, 0x79, 0x1f, 0x3c, 0xd2, 0x91, 0x6e, 0x72, 0xae, 0x34, 0x3e, + 0x33, 0x59, 0x1e, 0xcd, 0x92, 0xc7, 0xe1, 0xd1, 0x8e, 0x54, 0xe5, 0x4a, 0x95, 0x93, 0xe5, 0xc6, + 0xcb, 0xef, 0xfc, 0xa3, 0x8b, 0x3d, 0xef, 0x7c, 0xeb, 0x62, 0xe6, 0x8f, 0xbe, 0x75, 0x31, 0xf3, + 0x17, 0xdf, 0xba, 0x98, 0xf9, 0xe8, 0xf5, 0xdd, 0xbc, 0xef, 0xe7, 0xd3, 0xd6, 0x52, 0x01, 0x27, + 0xf4, 0x67, 0xfe, 0x43, 0x00, 0x00, 0x00, 0xff, 0xff, 0x80, 0x6b, 0x6a, 0x5a, 0x29, 0x58, 0x01, + 0x00, } func (m *Metadata) Marshal() (dAtA []byte, err error) { @@ -29062,6 +29065,13 @@ func (m *RouteToApp) MarshalToSizedBuffer(dAtA []byte) (int, error) { i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } + if len(m.URI) > 0 { + i -= len(m.URI) + copy(dAtA[i:], m.URI) + i = encodeVarintEvents(dAtA, i, uint64(len(m.URI))) + i-- + dAtA[i] = 0x42 + } if len(m.GCPServiceAccount) > 0 { i -= len(m.GCPServiceAccount) copy(dAtA[i:], m.GCPServiceAccount) @@ -40113,6 +40123,10 @@ func (m *RouteToApp) Size() (n int) { if l > 0 { n += 1 + l + sovEvents(uint64(l)) } + l = len(m.URI) + if l > 0 { + n += 1 + l + sovEvents(uint64(l)) + } if m.XXX_unrecognized != nil { n += len(m.XXX_unrecognized) } @@ -80054,6 +80068,38 @@ func (m *RouteToApp) Unmarshal(dAtA []byte) error { } m.GCPServiceAccount = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field URI", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthEvents + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.URI = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipEvents(dAtA[iNdEx:]) diff --git a/api/types/types.pb.go b/api/types/types.pb.go index beed0000d2072..09655b37cbd27 100644 --- a/api/types/types.pb.go +++ b/api/types/types.pb.go @@ -12212,7 +12212,10 @@ type GithubAuthRequest struct { // attestation_statement is an attestation statement for the given public key. AttestationStatement *v1.AttestationStatement `protobuf:"bytes,16,opt,name=attestation_statement,json=attestationStatement,proto3" json:"attestation_statement,omitempty"` // ClientLoginIP specifies IP address of the client for login, it will be written to the user's certificates. - ClientLoginIP string `protobuf:"bytes,17,opt,name=ClientLoginIP,proto3" json:"client_login_ip,omitempty"` + ClientLoginIP string `protobuf:"bytes,17,opt,name=ClientLoginIP,proto3" json:"client_login_ip,omitempty"` + // ClientUserAgent is the user agent of the Web browser, used for issuing + // a DeviceWebToken. + ClientUserAgent string `protobuf:"bytes,18,opt,name=ClientUserAgent,proto3" json:"client_user_agent,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -13390,7 +13393,12 @@ type RegisterUsingTokenRequest struct { // provided when rejoining. This parameters may only be provided by the join // service and is ignored otherwise; bots should otherwise rejoin with their // existing client certificate to prove their instance identity. - BotInstanceID string `protobuf:"bytes,13,opt,name=BotInstanceID,proto3" json:"bot_instance_id"` + BotInstanceID string `protobuf:"bytes,13,opt,name=BotInstanceID,proto3" json:"bot_instance_id"` + // BotGeneration is a trusted generation counter value for Machine ID bots, + // provided to Auth by the Join Service when bots rejoin via a streamed/gRPC + // join method. Rejoining bots supply this value via a client certificate + // extension; it is ignored from other sources. + BotGeneration int32 `protobuf:"varint,14,opt,name=BotGeneration,proto3" json:"bot_generation"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -19769,1703 +19777,1705 @@ func init() { func init() { proto.RegisterFile("teleport/legacy/types/types.proto", fileDescriptor_9198ee693835762e) } var fileDescriptor_9198ee693835762e = []byte{ - // 27132 bytes of a gzipped FileDescriptorProto + // 27155 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0xbd, 0x6d, 0x70, 0x1c, 0x49, 0x76, 0x20, 0x36, 0xfd, 0x01, 0xa0, 0xf1, 0xf0, 0xd5, 0x48, 0x80, 0x24, 0x08, 0x92, 0x03, 0x4e, 0x71, 0x86, 0x43, 0xce, 0x07, 0xb9, 0x04, 0x77, 0xb8, 0x3b, 0x3b, 0x9f, 0xdd, 0x68, 0x90, 0x68, - 0x12, 0x04, 0xb0, 0xd5, 0x20, 0xb1, 0xa3, 0xd9, 0xd9, 0xda, 0x42, 0x77, 0x02, 0xa8, 0x61, 0x77, - 0x57, 0x6f, 0x55, 0x35, 0x41, 0xac, 0x74, 0xd6, 0xd7, 0xe9, 0xd6, 0xf2, 0x9d, 0xbe, 0x7c, 0x92, - 0xa5, 0x73, 0xdc, 0x29, 0x14, 0x3a, 0xdf, 0x59, 0xfe, 0x38, 0x85, 0x43, 0xd2, 0x85, 0xcf, 0xa1, - 0xb0, 0x2c, 0x39, 0x64, 0x85, 0x2c, 0xfb, 0xce, 0x8a, 0xf0, 0xf7, 0x5a, 0x01, 0x59, 0xd6, 0xc5, - 0x85, 0x83, 0x71, 0x76, 0xe8, 0x7c, 0x11, 0x0a, 0x7b, 0x1c, 0xb2, 0x1d, 0xf9, 0x32, 0xb3, 0x2a, - 0xb3, 0xaa, 0xba, 0xd1, 0x18, 0x72, 0xee, 0xc4, 0xb1, 0xfe, 0x90, 0xe8, 0x97, 0xef, 0xbd, 0xfc, - 0xac, 0x97, 0x2f, 0x5f, 0xbe, 0xf7, 0x12, 0x5e, 0x08, 0x68, 0x93, 0x76, 0x5c, 0x2f, 0xb8, 0xda, - 0xa4, 0xbb, 0x76, 0xfd, 0xe0, 0x6a, 0x70, 0xd0, 0xa1, 0x3e, 0xff, 0xf7, 0x4a, 0xc7, 0x73, 0x03, - 0x97, 0x0c, 0xe1, 0x8f, 0xf9, 0xd9, 0x5d, 0x77, 0xd7, 0x45, 0xc8, 0x55, 0xf6, 0x17, 0x2f, 0x9c, - 0x5f, 0xd8, 0x75, 0xdd, 0xdd, 0x26, 0xbd, 0x8a, 0xbf, 0xb6, 0xbb, 0x3b, 0x57, 0x03, 0xa7, 0x45, - 0xfd, 0xc0, 0x6e, 0x75, 0x04, 0xc2, 0xe5, 0xb0, 0x02, 0x3b, 0x08, 0x58, 0x49, 0xe0, 0xb8, 0xed, - 0xab, 0x0f, 0xaf, 0xa9, 0x3f, 0x05, 0xea, 0xeb, 0xe9, 0x6d, 0xd9, 0xf7, 0xec, 0x4e, 0x87, 0x7a, - 0xd1, 0x1f, 0x1c, 0xdd, 0xf8, 0xf9, 0x1c, 0x8c, 0xde, 0xa1, 0xb4, 0x53, 0x6a, 0x3a, 0x0f, 0x29, - 0xb9, 0x00, 0xf9, 0x35, 0xbb, 0x45, 0xe7, 0x32, 0xe7, 0x33, 0x97, 0x46, 0xcb, 0x53, 0x8f, 0x0f, - 0x17, 0xc6, 0x7c, 0xea, 0x3d, 0xa4, 0x9e, 0xd5, 0xb6, 0x5b, 0xd4, 0xc4, 0x42, 0xf2, 0x2a, 0x8c, - 0xb2, 0xff, 0xfd, 0x8e, 0x5d, 0xa7, 0x73, 0x59, 0xc4, 0x9c, 0x78, 0x7c, 0xb8, 0x30, 0xda, 0x96, - 0x40, 0x33, 0x2a, 0x27, 0x55, 0x18, 0x59, 0x7e, 0xd4, 0x71, 0x3c, 0xea, 0xcf, 0xe5, 0xcf, 0x67, - 0x2e, 0x8d, 0x2d, 0xce, 0x5f, 0xe1, 0x9d, 0xbd, 0x22, 0x3b, 0x7b, 0x65, 0x53, 0x76, 0xb6, 0x3c, - 0xf3, 0xbb, 0x87, 0x0b, 0xcf, 0x3d, 0x3e, 0x5c, 0x18, 0xa1, 0x9c, 0xe4, 0x27, 0xff, 0x70, 0x21, - 0x63, 0x4a, 0x7a, 0xf2, 0x36, 0xe4, 0x37, 0x0f, 0x3a, 0x74, 0x6e, 0xf4, 0x7c, 0xe6, 0xd2, 0xe4, - 0xe2, 0xf3, 0x57, 0xf8, 0xf0, 0x86, 0x8d, 0x8f, 0xfe, 0x62, 0x58, 0xe5, 0xc2, 0xe3, 0xc3, 0x85, - 0x3c, 0x43, 0x31, 0x91, 0x8a, 0xbc, 0x0e, 0xc3, 0x2b, 0xae, 0x1f, 0x54, 0x2b, 0x73, 0x80, 0x4d, - 0x3e, 0xf1, 0xf8, 0x70, 0x61, 0x7a, 0xcf, 0xf5, 0x03, 0xcb, 0x69, 0xbc, 0xe6, 0xb6, 0x9c, 0x80, - 0xb6, 0x3a, 0xc1, 0x81, 0x29, 0x90, 0x8c, 0x47, 0x30, 0xa1, 0xf1, 0x23, 0x63, 0x30, 0x72, 0x6f, - 0xed, 0xce, 0xda, 0xfa, 0xd6, 0x5a, 0xf1, 0x39, 0x52, 0x80, 0xfc, 0xda, 0x7a, 0x65, 0xb9, 0x98, - 0x21, 0x23, 0x90, 0x2b, 0x6d, 0x6c, 0x14, 0xb3, 0x64, 0x1c, 0x0a, 0x95, 0xd2, 0x66, 0xa9, 0x5c, - 0xaa, 0x2d, 0x17, 0x73, 0x64, 0x06, 0xa6, 0xb6, 0xaa, 0x6b, 0x95, 0xf5, 0xad, 0x9a, 0x55, 0x59, - 0xae, 0xdd, 0xd9, 0x5c, 0xdf, 0x28, 0xe6, 0xc9, 0x24, 0xc0, 0x9d, 0x7b, 0xe5, 0x65, 0x73, 0x6d, - 0x79, 0x73, 0xb9, 0x56, 0x1c, 0x22, 0xb3, 0x50, 0x94, 0x24, 0x56, 0x6d, 0xd9, 0xbc, 0x5f, 0x5d, - 0x5a, 0x2e, 0x0e, 0xdf, 0xce, 0x17, 0x72, 0xc5, 0xbc, 0x39, 0xb2, 0x4a, 0x6d, 0x9f, 0x56, 0x2b, - 0xc6, 0xdf, 0xce, 0x41, 0xe1, 0x2e, 0x0d, 0xec, 0x86, 0x1d, 0xd8, 0xe4, 0xac, 0x36, 0x3f, 0xd8, - 0x45, 0x65, 0x62, 0x2e, 0x24, 0x27, 0x66, 0xe8, 0xf1, 0xe1, 0x42, 0xe6, 0x75, 0x75, 0x42, 0xde, - 0x82, 0xb1, 0x0a, 0xf5, 0xeb, 0x9e, 0xd3, 0x61, 0x8b, 0x66, 0x2e, 0x87, 0x68, 0xa7, 0x1f, 0x1f, - 0x2e, 0x9c, 0x68, 0x44, 0x60, 0x65, 0x40, 0x54, 0x6c, 0x52, 0x85, 0xe1, 0x55, 0x7b, 0x9b, 0x36, - 0xfd, 0xb9, 0xa1, 0xf3, 0xb9, 0x4b, 0x63, 0x8b, 0x67, 0xc4, 0x24, 0xc8, 0x06, 0x5e, 0xe1, 0xa5, - 0xcb, 0xed, 0xc0, 0x3b, 0x28, 0xcf, 0x3e, 0x3e, 0x5c, 0x28, 0x36, 0x11, 0xa0, 0x0e, 0x30, 0x47, - 0x21, 0xb5, 0x68, 0x61, 0x0c, 0x1f, 0xb9, 0x30, 0xce, 0xfd, 0xee, 0xe1, 0x42, 0x86, 0x4d, 0x98, - 0x58, 0x18, 0x11, 0x3f, 0x7d, 0x89, 0x2c, 0x42, 0xc1, 0xa4, 0x0f, 0x1d, 0x9f, 0xf5, 0xac, 0x80, - 0x3d, 0x3b, 0xf9, 0xf8, 0x70, 0x81, 0x78, 0x02, 0xa6, 0x34, 0x23, 0xc4, 0x9b, 0x7f, 0x13, 0xc6, - 0x94, 0x56, 0x93, 0x22, 0xe4, 0x1e, 0xd0, 0x03, 0x3e, 0xc2, 0x26, 0xfb, 0x93, 0xcc, 0xc2, 0xd0, - 0x43, 0xbb, 0xd9, 0x15, 0x43, 0x6a, 0xf2, 0x1f, 0x5f, 0xc9, 0x7e, 0x39, 0x73, 0x3b, 0x5f, 0x18, - 0x29, 0x16, 0xcc, 0x6c, 0xb5, 0x62, 0xfc, 0xeb, 0x79, 0x28, 0x98, 0x2e, 0xff, 0x10, 0xc9, 0x65, - 0x18, 0xaa, 0x05, 0x76, 0x20, 0xa7, 0x69, 0xe6, 0xf1, 0xe1, 0xc2, 0x14, 0xfb, 0x48, 0xa9, 0x52, - 0x3f, 0xc7, 0x60, 0xa8, 0x1b, 0x7b, 0xb6, 0x2f, 0xa7, 0x0b, 0x51, 0x3b, 0x0c, 0xa0, 0xa2, 0x22, - 0x06, 0xb9, 0x08, 0xf9, 0xbb, 0x6e, 0x83, 0x8a, 0x19, 0x23, 0x8f, 0x0f, 0x17, 0x26, 0x5b, 0x6e, - 0x43, 0x45, 0xc4, 0x72, 0xf2, 0x1a, 0x8c, 0x2e, 0x75, 0x3d, 0x8f, 0xb6, 0xd9, 0x5a, 0xcf, 0x23, - 0xf2, 0xe4, 0xe3, 0xc3, 0x05, 0xa8, 0x73, 0xa0, 0xe5, 0x34, 0xcc, 0x08, 0x81, 0x4d, 0x43, 0x2d, - 0xb0, 0xbd, 0x80, 0x36, 0xe6, 0x86, 0x06, 0x9a, 0x06, 0xf6, 0x7d, 0x4e, 0xfb, 0x9c, 0x24, 0x3e, - 0x0d, 0x82, 0x13, 0x59, 0x81, 0xb1, 0x5b, 0x9e, 0x5d, 0xa7, 0x1b, 0xd4, 0x73, 0xdc, 0x06, 0xce, - 0x6f, 0xae, 0x7c, 0xf1, 0xf1, 0xe1, 0xc2, 0xc9, 0x5d, 0x06, 0xb6, 0x3a, 0x08, 0x8f, 0xa8, 0x3f, - 0x39, 0x5c, 0x28, 0x54, 0xba, 0x1e, 0x8e, 0x9e, 0xa9, 0x92, 0x92, 0x6f, 0xb2, 0xc9, 0xf1, 0x03, - 0x1c, 0x5a, 0xda, 0x98, 0x1b, 0x39, 0xb2, 0x89, 0x86, 0x68, 0xe2, 0xc9, 0xa6, 0xed, 0x07, 0x96, - 0xc7, 0xe9, 0x62, 0xed, 0x54, 0x59, 0x92, 0x75, 0x28, 0xd4, 0xea, 0x7b, 0xb4, 0xd1, 0x6d, 0x52, - 0x5c, 0x32, 0x63, 0x8b, 0xa7, 0xc4, 0xa2, 0x96, 0xf3, 0x29, 0x8b, 0xcb, 0xf3, 0x82, 0x37, 0xf1, - 0x05, 0x44, 0x5d, 0x4f, 0x12, 0xeb, 0x2b, 0x85, 0x9f, 0xfb, 0x85, 0x85, 0xe7, 0x7e, 0xe0, 0x0f, - 0xce, 0x3f, 0x67, 0xfc, 0x87, 0x59, 0x28, 0xc6, 0x99, 0x90, 0x1d, 0x98, 0xb8, 0xd7, 0x69, 0xd8, - 0x01, 0x5d, 0x6a, 0x3a, 0xb4, 0x1d, 0xf8, 0xb8, 0x48, 0xfa, 0xf7, 0xe9, 0x45, 0x51, 0xef, 0x5c, - 0x17, 0x09, 0xad, 0x3a, 0xa7, 0x8c, 0xf5, 0x4a, 0x67, 0x1b, 0xd5, 0x53, 0x43, 0x01, 0xee, 0xe3, - 0x0a, 0x3b, 0x5e, 0x3d, 0x5c, 0xf4, 0xf7, 0xa8, 0x47, 0xb0, 0x15, 0x0b, 0xa8, 0xdd, 0xd8, 0x3e, - 0xc0, 0x95, 0x39, 0xf8, 0x02, 0x62, 0x24, 0x29, 0x0b, 0x88, 0x81, 0x8d, 0x7f, 0x9c, 0x81, 0x49, - 0x93, 0xfa, 0x6e, 0xd7, 0xab, 0xd3, 0x15, 0x6a, 0x37, 0xa8, 0xc7, 0x96, 0xff, 0x1d, 0xa7, 0xdd, - 0x10, 0xdf, 0x14, 0x2e, 0xff, 0x07, 0x4e, 0x5b, 0x15, 0xdd, 0x58, 0x4e, 0xbe, 0x00, 0x23, 0xb5, - 0xee, 0x36, 0xa2, 0x66, 0x23, 0x09, 0xe0, 0x77, 0xb7, 0xad, 0x18, 0xba, 0x44, 0x23, 0x57, 0x61, - 0xe4, 0x3e, 0xf5, 0xfc, 0x48, 0x1a, 0xe2, 0xd6, 0xf0, 0x90, 0x83, 0x54, 0x02, 0x81, 0x45, 0x6e, - 0x45, 0x12, 0x59, 0x6c, 0x6a, 0x53, 0x31, 0x39, 0x18, 0x2d, 0x95, 0x96, 0x80, 0xa8, 0x4b, 0x45, - 0x62, 0x19, 0x3f, 0x95, 0x85, 0x62, 0xc5, 0x0e, 0xec, 0x6d, 0xdb, 0x17, 0xe3, 0x79, 0xff, 0x3a, - 0x93, 0xf1, 0x4a, 0x47, 0x51, 0xc6, 0xb3, 0x96, 0x7f, 0xea, 0xee, 0xbd, 0x14, 0xef, 0xde, 0x18, - 0xdb, 0x61, 0x45, 0xf7, 0xa2, 0x4e, 0xbd, 0x73, 0x74, 0xa7, 0x8a, 0xa2, 0x53, 0x05, 0xd9, 0xa9, - 0xa8, 0x2b, 0xe4, 0x1d, 0xc8, 0xd7, 0x3a, 0xb4, 0x2e, 0x84, 0x88, 0xdc, 0x17, 0xf4, 0xce, 0x31, - 0x84, 0xfb, 0xd7, 0xcb, 0xe3, 0x82, 0x4d, 0xde, 0xef, 0xd0, 0xba, 0x89, 0x64, 0xca, 0x47, 0xf3, - 0x0f, 0x72, 0x30, 0x9b, 0x46, 0xa6, 0xf6, 0x63, 0xb8, 0x4f, 0x3f, 0x2e, 0x41, 0x81, 0x6d, 0xe1, - 0x6c, 0x5b, 0x44, 0x71, 0x31, 0x5a, 0x1e, 0x67, 0x4d, 0xde, 0x13, 0x30, 0x33, 0x2c, 0x25, 0x17, - 0x42, 0x8d, 0xa0, 0x10, 0xf1, 0x13, 0x1a, 0x81, 0xd4, 0x03, 0xd8, 0x5c, 0xcb, 0x4f, 0x18, 0x15, - 0x87, 0x68, 0x58, 0x24, 0x38, 0x9a, 0x6b, 0x4f, 0x40, 0xb4, 0x6d, 0x46, 0x6e, 0x0a, 0xcb, 0x50, - 0x90, 0xdd, 0x9a, 0x1b, 0x47, 0x46, 0xd3, 0xb1, 0x41, 0xba, 0x7f, 0x9d, 0x4f, 0x66, 0x43, 0xfc, - 0x56, 0xd9, 0x48, 0x1c, 0x72, 0x1d, 0x0a, 0x1b, 0x9e, 0xfb, 0xe8, 0xa0, 0x5a, 0xf1, 0xe7, 0x26, - 0xce, 0xe7, 0x2e, 0x8d, 0x96, 0x4f, 0x3d, 0x3e, 0x5c, 0x98, 0xe9, 0x30, 0x98, 0xe5, 0x34, 0xd4, - 0x9d, 0x36, 0x44, 0xbc, 0x9d, 0x2f, 0x64, 0x8a, 0xd9, 0xdb, 0xf9, 0x42, 0xb6, 0x98, 0xe3, 0xea, - 0xc5, 0xed, 0x7c, 0x21, 0x5f, 0x1c, 0xba, 0x9d, 0x2f, 0x0c, 0xa1, 0xc2, 0x31, 0x5a, 0x84, 0xdb, - 0xf9, 0xc2, 0x58, 0x71, 0x5c, 0xdb, 0xed, 0x91, 0x41, 0xe0, 0xd6, 0xdd, 0xa6, 0x99, 0xbb, 0x67, - 0x56, 0xcd, 0xe1, 0xa5, 0xd2, 0x12, 0xf5, 0x02, 0x33, 0x57, 0xda, 0xaa, 0x99, 0x13, 0x95, 0x83, - 0xb6, 0xdd, 0x72, 0xea, 0x7c, 0xeb, 0x34, 0x73, 0xb7, 0x96, 0x36, 0x8c, 0x12, 0x4c, 0x46, 0x7d, - 0x59, 0x75, 0xfc, 0x80, 0x5c, 0x85, 0x51, 0x09, 0x61, 0x82, 0x2e, 0x97, 0xda, 0x6b, 0x33, 0xc2, - 0x31, 0x7e, 0x27, 0x0b, 0x10, 0x95, 0x3c, 0xa3, 0xdf, 0xc2, 0x97, 0xb4, 0x6f, 0xe1, 0x44, 0xfc, - 0x5b, 0xe8, 0xf9, 0x15, 0x90, 0xf7, 0x60, 0x98, 0xa9, 0x05, 0x5d, 0xa9, 0x12, 0x9d, 0x8a, 0x93, - 0x62, 0xe1, 0xfd, 0xeb, 0xe5, 0x49, 0x41, 0x3c, 0xec, 0x23, 0xc4, 0x14, 0x64, 0xca, 0x67, 0xf4, - 0xf3, 0x23, 0xd1, 0x64, 0x88, 0x0f, 0xe8, 0x12, 0x84, 0x13, 0x2a, 0x06, 0x14, 0xbf, 0x8c, 0x8e, - 0x9c, 0xe4, 0xb0, 0x94, 0x9c, 0x06, 0x36, 0xe1, 0x62, 0x50, 0x47, 0x1e, 0x1f, 0x2e, 0xe4, 0xba, - 0x9e, 0x83, 0x8b, 0x80, 0x5c, 0x05, 0xb1, 0x0c, 0xc4, 0x00, 0xb2, 0xd5, 0x37, 0x5d, 0xb7, 0xad, - 0x3a, 0xf5, 0x82, 0x68, 0xc4, 0xe7, 0x32, 0x72, 0xb5, 0x90, 0x0e, 0xe8, 0x4b, 0x65, 0x2e, 0x8f, - 0xcb, 0xe0, 0x52, 0xea, 0xa8, 0x5c, 0xd1, 0x50, 0xb9, 0x1a, 0x79, 0x5e, 0xee, 0x4a, 0x0d, 0x5e, - 0x66, 0x25, 0x54, 0x4a, 0xbd, 0x02, 0x72, 0x1d, 0xd8, 0x0a, 0x15, 0xa3, 0x0f, 0xa2, 0x9e, 0xd2, - 0x56, 0xad, 0x7c, 0x42, 0x70, 0x9a, 0xb0, 0xf7, 0x55, 0x72, 0x86, 0x4d, 0xde, 0x02, 0xb6, 0x84, - 0xc5, 0xb8, 0x13, 0x41, 0x74, 0x6b, 0x69, 0x63, 0xa9, 0xe9, 0x76, 0x1b, 0xb5, 0xaf, 0xae, 0x46, - 0xc4, 0xbb, 0xf5, 0x8e, 0x4a, 0x7c, 0x6b, 0x69, 0x83, 0xbc, 0x05, 0x43, 0xa5, 0x6f, 0x77, 0x3d, - 0x2a, 0xf4, 0x93, 0x71, 0x59, 0x27, 0x83, 0x95, 0x4f, 0x09, 0xc2, 0x29, 0x9b, 0xfd, 0x54, 0xf5, - 0x3a, 0x2c, 0x67, 0x35, 0x6f, 0xae, 0xd6, 0x84, 0xee, 0x41, 0x62, 0xc3, 0xb2, 0xb9, 0xaa, 0x34, - 0x3b, 0xd0, 0x7a, 0xcd, 0xa8, 0xc8, 0x55, 0xc8, 0x96, 0x2a, 0x78, 0x22, 0x1a, 0x5b, 0x1c, 0x95, - 0xd5, 0x56, 0xca, 0xb3, 0x82, 0x64, 0xdc, 0x56, 0x3f, 0x83, 0x6c, 0xa9, 0x42, 0xca, 0x30, 0x74, - 0xf7, 0xa0, 0xf6, 0xd5, 0x55, 0x21, 0xcc, 0x66, 0xe4, 0xba, 0x66, 0xb0, 0x75, 0xfc, 0xec, 0xfd, - 0xa8, 0xc5, 0xad, 0x03, 0xff, 0x5b, 0x4d, 0xb5, 0xc5, 0x88, 0x46, 0x36, 0x60, 0xb4, 0xd4, 0x68, - 0x39, 0xed, 0x7b, 0x3e, 0xf5, 0xe6, 0xc6, 0x90, 0xcf, 0x5c, 0xac, 0xdd, 0x61, 0x79, 0x79, 0xee, - 0xf1, 0xe1, 0xc2, 0xac, 0xcd, 0x7e, 0x5a, 0x5d, 0x9f, 0x7a, 0x0a, 0xb7, 0x88, 0x09, 0xd9, 0x00, - 0xb8, 0xeb, 0xb6, 0x77, 0xdd, 0x52, 0xd0, 0xb4, 0xfd, 0x98, 0x78, 0x8c, 0x0a, 0x42, 0xf5, 0xe1, - 0x44, 0x8b, 0xc1, 0x2c, 0x9b, 0x01, 0x15, 0x86, 0x0a, 0x0f, 0x72, 0x13, 0x86, 0xd7, 0x3d, 0xbb, - 0xde, 0xa4, 0x73, 0x13, 0xc8, 0x6d, 0x56, 0x70, 0xe3, 0x40, 0xd9, 0xd3, 0x39, 0xc1, 0xb0, 0xe8, - 0x22, 0x58, 0x3d, 0xa6, 0x70, 0xc4, 0xf9, 0x2d, 0x20, 0xc9, 0x35, 0x99, 0x72, 0x48, 0x78, 0x55, - 0x3d, 0x24, 0x44, 0x1f, 0xfd, 0x92, 0xdb, 0x6a, 0xd9, 0xed, 0x06, 0xd2, 0xde, 0x5f, 0x54, 0xce, - 0x0e, 0xc6, 0xb7, 0x60, 0x3a, 0x31, 0x58, 0x47, 0x9c, 0xef, 0xde, 0x85, 0xa9, 0x0a, 0xdd, 0xb1, - 0xbb, 0xcd, 0x20, 0xdc, 0x49, 0xf8, 0x27, 0x8a, 0x27, 0xad, 0x06, 0x2f, 0xb2, 0xe4, 0xf6, 0x61, - 0xc6, 0x91, 0x8d, 0x77, 0x60, 0x42, 0xeb, 0x3e, 0x3b, 0x2a, 0x94, 0xba, 0x0d, 0x27, 0xc0, 0x89, - 0xcc, 0x44, 0x47, 0x05, 0x9b, 0x01, 0x71, 0xba, 0xcc, 0x08, 0xc1, 0xf8, 0xb7, 0x54, 0x6d, 0x45, - 0x48, 0x22, 0x76, 0xac, 0x16, 0xf2, 0x20, 0x13, 0xe9, 0x4e, 0x09, 0x79, 0x10, 0x4a, 0x83, 0xcb, - 0xfc, 0xdb, 0xcc, 0x26, 0xbe, 0xcd, 0x31, 0x31, 0x13, 0x39, 0x7b, 0xdf, 0xe7, 0x5f, 0x64, 0xb8, - 0x52, 0x73, 0x9f, 0x7e, 0xa5, 0xbe, 0x07, 0xe3, 0x77, 0xed, 0xb6, 0xbd, 0x4b, 0x1b, 0xac, 0x07, - 0x5c, 0xf6, 0x8c, 0x96, 0xcf, 0x3c, 0x3e, 0x5c, 0x38, 0xd5, 0xe2, 0x70, 0xec, 0xa5, 0xba, 0x88, - 0x34, 0x02, 0x72, 0x4d, 0x7e, 0xd9, 0x43, 0x29, 0x5f, 0xf6, 0x84, 0xa8, 0x7d, 0x08, 0xbf, 0x6c, - 0xf1, 0x3d, 0x1b, 0xbf, 0x39, 0x8a, 0x7d, 0x24, 0xaf, 0xc1, 0xb0, 0x49, 0x77, 0xd9, 0x56, 0x93, - 0x89, 0x26, 0xc9, 0x43, 0x88, 0x3a, 0x30, 0x1c, 0x07, 0xf5, 0x0c, 0xda, 0xf0, 0xf7, 0x9c, 0x9d, - 0x40, 0x8c, 0x4e, 0xa8, 0x67, 0x08, 0xb0, 0xa2, 0x67, 0x08, 0x88, 0x7e, 0x9c, 0xe5, 0x30, 0x26, - 0xfd, 0xcc, 0x4a, 0x4d, 0x0c, 0x9a, 0x1c, 0x61, 0xb3, 0xa2, 0x88, 0x11, 0x4f, 0xd3, 0x12, 0x18, - 0x36, 0xb9, 0x01, 0xa3, 0xa5, 0x7a, 0xdd, 0xed, 0x2a, 0x67, 0x46, 0xfe, 0xdd, 0x72, 0xa0, 0x6e, - 0x22, 0x89, 0x50, 0x49, 0x0d, 0xc6, 0x96, 0xd9, 0x41, 0xcb, 0x59, 0xb2, 0xeb, 0x7b, 0x72, 0x90, - 0xa4, 0x0c, 0x53, 0x4a, 0xa2, 0x2f, 0x97, 0x22, 0xb0, 0xce, 0x80, 0xaa, 0x91, 0x41, 0xc1, 0x25, - 0x9b, 0x30, 0x56, 0xa3, 0x75, 0x8f, 0x06, 0xb5, 0xc0, 0xf5, 0x68, 0x4c, 0x24, 0x2b, 0x25, 0xe5, - 0xe7, 0xe5, 0x59, 0xcf, 0x47, 0xa0, 0xe5, 0x33, 0xa8, 0xca, 0x55, 0x41, 0xe6, 0x4a, 0x7b, 0xcb, - 0xf5, 0x0e, 0x2a, 0x65, 0x21, 0xa6, 0xa3, 0x3d, 0x9d, 0x83, 0x55, 0xa5, 0x9d, 0x41, 0x1a, 0xdb, - 0xba, 0xd2, 0xce, 0xb1, 0x70, 0xa6, 0x2a, 0x35, 0xd4, 0xad, 0x84, 0xd0, 0x9e, 0x8a, 0x46, 0x19, - 0xc1, 0xca, 0x4c, 0x35, 0x7c, 0xd4, 0xcc, 0xb4, 0x99, 0x12, 0x58, 0xa4, 0x03, 0x44, 0xce, 0x1a, - 0x57, 0x74, 0x9b, 0xd4, 0xf7, 0x85, 0x2c, 0x3f, 0x1d, 0x9b, 0xfc, 0x08, 0xa1, 0xfc, 0x92, 0x60, - 0x7e, 0x4e, 0x2e, 0x03, 0x71, 0x4e, 0x63, 0x85, 0x4a, 0x3d, 0x29, 0xbc, 0xc9, 0x9b, 0x00, 0xcb, - 0x8f, 0x02, 0xea, 0xb5, 0xed, 0x66, 0x68, 0x07, 0x43, 0xd3, 0x0f, 0x15, 0x50, 0x7d, 0xa2, 0x15, - 0x64, 0xb2, 0x04, 0x13, 0x25, 0xdf, 0xef, 0xb6, 0xa8, 0xe9, 0x36, 0x69, 0xc9, 0x5c, 0x43, 0xb9, - 0x3f, 0x5a, 0x3e, 0xf7, 0xf8, 0x70, 0xe1, 0xb4, 0x8d, 0x05, 0x96, 0xe7, 0x36, 0xa9, 0x65, 0x7b, - 0xea, 0xea, 0xd6, 0x69, 0xc8, 0x3a, 0xc0, 0x7a, 0x87, 0xb6, 0x6b, 0xd4, 0xf6, 0xea, 0x7b, 0x31, - 0x31, 0x1f, 0x15, 0x94, 0xcf, 0x8a, 0x1e, 0xce, 0xba, 0x1d, 0xda, 0xf6, 0x11, 0xa6, 0xb6, 0x2a, - 0xc2, 0x24, 0x5b, 0x30, 0x55, 0x2d, 0xdd, 0xdd, 0x70, 0x9b, 0x4e, 0xfd, 0x40, 0x68, 0x4e, 0x93, - 0x68, 0x1d, 0x3c, 0x29, 0xb8, 0xc6, 0x4a, 0xb9, 0x78, 0x72, 0xec, 0x96, 0xd5, 0x41, 0xa8, 0x25, - 0xf4, 0xa7, 0x38, 0x17, 0xf2, 0x01, 0x5b, 0x83, 0x3e, 0x53, 0x06, 0x37, 0xed, 0x5d, 0x7f, 0x6e, - 0x4a, 0xb3, 0x76, 0x95, 0xb6, 0x6a, 0x57, 0x94, 0x52, 0xae, 0xa6, 0xcc, 0xf3, 0x85, 0x88, 0x50, - 0x2b, 0xb0, 0x77, 0x7d, 0x7d, 0x21, 0x86, 0xd8, 0xe4, 0x36, 0x40, 0xc5, 0xad, 0x77, 0x5b, 0xb4, - 0x1d, 0x54, 0xca, 0x73, 0x45, 0xfd, 0x28, 0x10, 0x16, 0x44, 0xa2, 0xad, 0xe1, 0xd6, 0xb5, 0x95, - 0xa8, 0x50, 0xcf, 0xbf, 0x0b, 0xc5, 0x78, 0x43, 0x8e, 0x69, 0xc0, 0x9a, 0x28, 0x4e, 0x2a, 0xbd, - 0x5f, 0x7e, 0xe4, 0xf8, 0x81, 0x6f, 0x7c, 0xaf, 0xf6, 0x05, 0x32, 0xe9, 0x70, 0x87, 0x1e, 0x6c, - 0x78, 0x74, 0xc7, 0x79, 0x24, 0x84, 0x19, 0x4a, 0x87, 0x07, 0xf4, 0xc0, 0xea, 0x20, 0x54, 0x95, - 0x0e, 0x21, 0x2a, 0xf9, 0x22, 0x14, 0xee, 0xdc, 0xad, 0xdd, 0xa1, 0x07, 0xd5, 0x8a, 0xd8, 0xa8, - 0x38, 0x59, 0xcb, 0xb7, 0x18, 0xa9, 0xb6, 0xd6, 0x42, 0x4c, 0xa3, 0x1c, 0x49, 0x42, 0x56, 0xf3, - 0x52, 0xb3, 0xeb, 0x07, 0xd4, 0xab, 0x56, 0xd4, 0x9a, 0xeb, 0x1c, 0x18, 0x93, 0x4b, 0x21, 0xaa, - 0xf1, 0x0f, 0xb2, 0x28, 0x05, 0xd9, 0x82, 0xaf, 0xb6, 0xfd, 0xc0, 0x6e, 0xd7, 0x69, 0xc8, 0x00, - 0x17, 0xbc, 0x23, 0xa0, 0xb1, 0x05, 0x1f, 0x21, 0xeb, 0x55, 0x67, 0x07, 0xae, 0x9a, 0x55, 0x29, - 0x2d, 0x17, 0xd5, 0x8a, 0x6a, 0x5e, 0xf5, 0x04, 0x34, 0x56, 0x65, 0x84, 0x4c, 0x2e, 0xc2, 0x48, - 0xb5, 0x74, 0xb7, 0xd4, 0x0d, 0xf6, 0x50, 0x06, 0x17, 0xb8, 0x7e, 0xce, 0x56, 0xab, 0xdd, 0x0d, - 0xf6, 0x4c, 0x59, 0x48, 0xae, 0xe2, 0xb9, 0xa7, 0x4d, 0x03, 0x6e, 0x86, 0x15, 0x9b, 0xae, 0xcf, - 0x41, 0xb1, 0x63, 0x0f, 0x03, 0x91, 0x57, 0x60, 0xe8, 0xfe, 0xc6, 0x52, 0xb5, 0x22, 0x0e, 0xce, - 0xb8, 0x13, 0x3d, 0xec, 0xd4, 0xf5, 0x96, 0x70, 0x14, 0xe3, 0xb7, 0x32, 0x91, 0x7c, 0x23, 0x17, - 0x35, 0x7d, 0x04, 0x8d, 0x2e, 0x4c, 0x1f, 0x51, 0x8d, 0x2e, 0xa8, 0x99, 0x98, 0x40, 0x96, 0xba, - 0x7e, 0xe0, 0xb6, 0x96, 0xdb, 0x8d, 0x8e, 0xeb, 0xb4, 0x03, 0xa4, 0xe2, 0xa3, 0x66, 0x3c, 0x3e, - 0x5c, 0x78, 0xbe, 0x8e, 0xa5, 0x16, 0x15, 0xc5, 0x56, 0x8c, 0x4b, 0x0a, 0xf5, 0x13, 0x0c, 0xa4, - 0xf1, 0x7b, 0x59, 0x6d, 0x5f, 0x62, 0xcd, 0x33, 0x69, 0xa7, 0xe9, 0xd4, 0xf1, 0x28, 0x7e, 0xcb, - 0x73, 0xbb, 0x9d, 0x70, 0x39, 0x60, 0xf3, 0xbc, 0xa8, 0xd4, 0xda, 0x65, 0xc5, 0x3a, 0xef, 0x14, - 0x6a, 0xf2, 0x3e, 0x8c, 0x33, 0x15, 0x41, 0xfc, 0xf4, 0xe7, 0xb2, 0x38, 0x13, 0x67, 0xd1, 0x7c, - 0xe6, 0x53, 0x2f, 0x64, 0xa3, 0xe9, 0x16, 0x2a, 0x05, 0x69, 0xc0, 0xdc, 0xa6, 0x67, 0xb7, 0x7d, - 0x27, 0x58, 0x6e, 0xd7, 0xbd, 0x03, 0x54, 0x69, 0x96, 0xdb, 0xf6, 0x76, 0x93, 0x36, 0xb0, 0xbb, - 0x85, 0xf2, 0xa5, 0xc7, 0x87, 0x0b, 0x2f, 0x06, 0x1c, 0xc7, 0xa2, 0x21, 0x92, 0x45, 0x39, 0x96, - 0xc2, 0xb9, 0x27, 0x27, 0xa6, 0x02, 0xc9, 0x61, 0xc5, 0xdb, 0x13, 0xbe, 0xbb, 0xa3, 0x0a, 0x14, - 0xce, 0x06, 0x13, 0x3e, 0x6a, 0x33, 0x55, 0x02, 0xe3, 0x4f, 0x33, 0xd1, 0xce, 0x49, 0xde, 0x86, - 0x31, 0xb1, 0xd4, 0x95, 0x75, 0x81, 0xa2, 0x4f, 0x7e, 0x17, 0xb1, 0x99, 0x55, 0xd1, 0xd9, 0x81, - 0xbd, 0xb4, 0xb4, 0xaa, 0xac, 0x0d, 0x3c, 0xb0, 0xdb, 0xf5, 0x66, 0x9c, 0x4a, 0xa2, 0xb1, 0x45, - 0xb0, 0xb9, 0x5a, 0xd3, 0x47, 0x05, 0x17, 0x41, 0xd0, 0xf4, 0x53, 0x86, 0x41, 0x41, 0x7e, 0xf2, - 0x8e, 0xff, 0xf7, 0x99, 0xb4, 0x0d, 0x9a, 0x94, 0x61, 0x62, 0xcb, 0xf5, 0x1e, 0xe0, 0xfc, 0x2a, - 0x83, 0x80, 0x33, 0xbf, 0x2f, 0x0b, 0xe2, 0x1d, 0xd2, 0x49, 0xd4, 0xb6, 0x29, 0xa3, 0xa1, 0xb7, - 0x2d, 0xc6, 0x41, 0x23, 0x60, 0xf3, 0x10, 0x72, 0x0c, 0xbf, 0x0e, 0x9c, 0x87, 0xa8, 0x09, 0xda, - 0x12, 0x56, 0xd1, 0x8d, 0xff, 0x38, 0xa3, 0x6e, 0xc4, 0x6c, 0x90, 0x2b, 0x6e, 0xcb, 0x76, 0xda, - 0x4a, 0x77, 0xf8, 0x8d, 0x10, 0x42, 0xe3, 0x2d, 0x51, 0x90, 0xc9, 0x75, 0x28, 0xf0, 0x5f, 0xa1, - 0x90, 0x44, 0x73, 0x94, 0x20, 0xd4, 0x25, 0xbc, 0x44, 0x4c, 0xcc, 0x4c, 0xee, 0xb8, 0x33, 0xf3, - 0x9b, 0x19, 0x75, 0x0f, 0xfd, 0xb4, 0xbb, 0x44, 0x6c, 0x77, 0xc8, 0x1e, 0x67, 0x77, 0x78, 0xe2, - 0x2e, 0xfc, 0x40, 0x06, 0xc6, 0x14, 0xf3, 0x02, 0xeb, 0xc3, 0x86, 0xe7, 0x7e, 0x4c, 0xeb, 0x81, - 0xde, 0x87, 0x0e, 0x07, 0xc6, 0xfa, 0x10, 0xa2, 0x3e, 0x41, 0x1f, 0x8c, 0x7f, 0x96, 0x11, 0x87, - 0x9b, 0x81, 0xc5, 0xbc, 0x2e, 0x92, 0xb3, 0xc7, 0xd9, 0xdb, 0xde, 0x87, 0x21, 0x93, 0x36, 0x1c, - 0x5f, 0x1c, 0x4c, 0xa6, 0xd5, 0x83, 0x14, 0x16, 0x44, 0x0a, 0x8f, 0xc7, 0x7e, 0xaa, 0x1b, 0x13, - 0x96, 0x33, 0x0d, 0xb4, 0xea, 0xdf, 0x6c, 0xd2, 0x47, 0x0e, 0xff, 0x18, 0xc5, 0x1e, 0x89, 0x1a, - 0xa8, 0xe3, 0x5b, 0x3b, 0xac, 0x44, 0xa8, 0xc2, 0xea, 0x87, 0xa7, 0xd1, 0x18, 0x1f, 0x00, 0x44, - 0x55, 0x92, 0x3b, 0x50, 0x14, 0xab, 0xc1, 0x69, 0xef, 0x72, 0x0d, 0x48, 0x8c, 0xc1, 0xc2, 0xe3, - 0xc3, 0x85, 0x33, 0xf5, 0xb0, 0x4c, 0xa8, 0x8b, 0x0a, 0xdf, 0x04, 0xa1, 0xf1, 0x6f, 0x67, 0x21, - 0x5b, 0xc2, 0x09, 0xb9, 0x43, 0x0f, 0x02, 0x7b, 0xfb, 0xa6, 0xd3, 0xd4, 0x3e, 0xa6, 0x07, 0x08, - 0xb5, 0x76, 0x1c, 0xcd, 0xce, 0xa0, 0x20, 0xb3, 0x8f, 0xe9, 0x8e, 0xb7, 0xfd, 0x06, 0x12, 0x2a, - 0x1f, 0xd3, 0x03, 0x6f, 0xfb, 0x8d, 0x38, 0x59, 0x88, 0x48, 0x0c, 0x18, 0xe6, 0x1f, 0x96, 0x58, - 0x83, 0xf0, 0xf8, 0x70, 0x61, 0x98, 0x7f, 0x7f, 0xa6, 0x28, 0x21, 0xa7, 0x21, 0x57, 0xdb, 0x58, - 0x13, 0x12, 0x10, 0xed, 0x79, 0x7e, 0xa7, 0x6d, 0x32, 0x18, 0xab, 0x73, 0xb5, 0x52, 0xda, 0xc0, - 0x13, 0xfc, 0x50, 0x54, 0x67, 0xb3, 0x61, 0x77, 0xe2, 0x67, 0xf8, 0x10, 0x91, 0xbc, 0x03, 0x63, - 0x77, 0x2a, 0x4b, 0x2b, 0xae, 0xcf, 0xa5, 0xd7, 0x70, 0xb4, 0xf8, 0x1f, 0x34, 0xea, 0x16, 0x9a, - 0xd0, 0xe3, 0xdb, 0x80, 0x82, 0x6f, 0xfc, 0x48, 0x16, 0xc6, 0x14, 0x03, 0x17, 0xf9, 0xa2, 0xb8, - 0xd9, 0xcc, 0x68, 0xaa, 0xbb, 0x82, 0xc1, 0x4a, 0xb9, 0x35, 0xa4, 0xe5, 0x36, 0xa8, 0xb8, 0xe7, - 0x8c, 0x2c, 0x0f, 0xd9, 0x41, 0x2c, 0x0f, 0x6f, 0x02, 0xf0, 0x35, 0x80, 0x4d, 0x56, 0xd4, 0x09, - 0xc5, 0xc1, 0x41, 0x9d, 0x97, 0x08, 0x99, 0xdc, 0x87, 0x99, 0x4d, 0xaf, 0xeb, 0x07, 0xb5, 0x03, - 0x3f, 0xa0, 0x2d, 0xc6, 0x6d, 0xc3, 0x75, 0x9b, 0x62, 0xfd, 0xbd, 0xf8, 0xf8, 0x70, 0xe1, 0x7c, - 0xc0, 0x8a, 0x2d, 0x1f, 0xcb, 0xb1, 0x01, 0x56, 0xc7, 0x75, 0x55, 0x7b, 0x44, 0x1a, 0x03, 0xc3, - 0x84, 0x71, 0xd5, 0x9a, 0xc1, 0x76, 0x16, 0x71, 0x0b, 0x24, 0x6c, 0xd4, 0xca, 0xce, 0x22, 0x5a, - 0x99, 0xbc, 0x95, 0xd2, 0x49, 0x8c, 0x2f, 0xaa, 0x96, 0xb4, 0x41, 0x3f, 0x6c, 0xe3, 0x87, 0x32, - 0x91, 0x18, 0xb9, 0x7f, 0x8d, 0xbc, 0x05, 0xc3, 0xfc, 0xd6, 0x4d, 0x5c, 0x4e, 0x9e, 0x08, 0x4f, - 0xa3, 0xea, 0x95, 0x1c, 0x37, 0x61, 0xff, 0x3e, 0xbf, 0x99, 0x7f, 0xce, 0x14, 0x24, 0xa1, 0xf5, - 0x5b, 0x37, 0x84, 0x49, 0xee, 0x68, 0xe7, 0xbd, 0x96, 0x66, 0xfd, 0x36, 0x7e, 0x3b, 0x0f, 0x93, - 0x3a, 0x9a, 0x7a, 0x35, 0x97, 0x19, 0xe8, 0x6a, 0xee, 0x7d, 0x28, 0xb0, 0xf1, 0x70, 0xea, 0x54, - 0x6a, 0x64, 0x2f, 0xe2, 0x9d, 0x80, 0x80, 0x69, 0x57, 0xce, 0xc0, 0xa7, 0x83, 0x1d, 0x4e, 0xcd, - 0x90, 0x8a, 0x2c, 0x2a, 0xf7, 0x47, 0xb9, 0x48, 0x49, 0x91, 0xf7, 0x47, 0xea, 0xf7, 0x10, 0xde, - 0x24, 0xbd, 0x0e, 0xc3, 0x4c, 0x31, 0x0f, 0x6d, 0x27, 0xd8, 0x4a, 0xa6, 0xb3, 0xc7, 0x7c, 0x4b, - 0x38, 0x12, 0xd9, 0x82, 0xc2, 0xaa, 0xed, 0x07, 0x35, 0x4a, 0xdb, 0x03, 0x5c, 0xba, 0x2f, 0x88, - 0xa1, 0x9a, 0xc1, 0x1b, 0x6d, 0x9f, 0xd2, 0x76, 0xec, 0xd6, 0x34, 0x64, 0x46, 0x3e, 0x02, 0x58, - 0x72, 0xdb, 0x81, 0xe7, 0x36, 0x57, 0xdd, 0xdd, 0xb9, 0x61, 0x3c, 0xb4, 0x3e, 0x1f, 0x9b, 0x80, - 0x08, 0x81, 0x9f, 0x5b, 0x43, 0xcb, 0x4c, 0x9d, 0x17, 0x58, 0x4d, 0x77, 0x57, 0xfd, 0x0e, 0x22, - 0x7c, 0x72, 0x13, 0x8a, 0xd2, 0x22, 0x70, 0xaf, 0xb3, 0xeb, 0xe1, 0x02, 0x19, 0x89, 0x34, 0x0f, - 0xfa, 0x28, 0xb0, 0xba, 0x02, 0xae, 0x4a, 0xca, 0x38, 0x0d, 0xf9, 0x3a, 0x9c, 0x8a, 0xc3, 0xe4, - 0x2c, 0x17, 0x22, 0x9d, 0x5c, 0x65, 0x97, 0xb2, 0xee, 0x7b, 0xb1, 0x30, 0x3e, 0xc9, 0xc2, 0xa9, - 0x1e, 0x9d, 0x65, 0xdf, 0x03, 0x6e, 0xd7, 0xca, 0xf7, 0x10, 0xdb, 0xa5, 0xb9, 0xb3, 0xd0, 0x79, - 0xc8, 0x8a, 0x0d, 0x2e, 0x5f, 0x2e, 0x3e, 0x3e, 0x5c, 0x18, 0xd7, 0xe6, 0x31, 0x5b, 0xad, 0x90, - 0xdb, 0x90, 0x67, 0x53, 0x34, 0xc0, 0x9d, 0xb7, 0x34, 0x06, 0x4d, 0x06, 0x8e, 0xba, 0x7c, 0x70, - 0xea, 0x90, 0x07, 0xf9, 0x22, 0xe4, 0x36, 0x37, 0x57, 0x71, 0xed, 0xe4, 0xb0, 0xef, 0x13, 0x41, - 0xd0, 0xd4, 0x96, 0xea, 0x04, 0xa3, 0xbd, 0x12, 0xba, 0x48, 0x30, 0x74, 0xf2, 0xb5, 0x98, 0x2f, - 0xce, 0x2b, 0xfd, 0x27, 0x7a, 0x70, 0xd7, 0x9c, 0x27, 0xf0, 0x88, 0x31, 0xfe, 0x66, 0x36, 0xfa, - 0x86, 0x6f, 0x3a, 0xcd, 0x80, 0x7a, 0x64, 0x9e, 0x7f, 0x92, 0x91, 0x72, 0x66, 0x86, 0xbf, 0xc9, - 0x5c, 0xf4, 0x7d, 0x73, 0x56, 0xe1, 0x87, 0xfc, 0x8a, 0xf2, 0x21, 0xe7, 0xf0, 0x43, 0x9e, 0xec, - 0xf9, 0xc9, 0xbe, 0x92, 0xb2, 0x2e, 0xf1, 0x43, 0x4c, 0x59, 0x7b, 0x2f, 0xc2, 0xc4, 0x9a, 0xbb, - 0xfc, 0x28, 0x08, 0x11, 0xd9, 0x07, 0x58, 0x30, 0x75, 0x20, 0xe3, 0xb8, 0xde, 0x6c, 0x50, 0x6f, - 0x73, 0xcf, 0x6e, 0x6b, 0x97, 0xce, 0x66, 0x02, 0xce, 0x70, 0xd7, 0xe8, 0xbe, 0x8e, 0x3b, 0xc2, - 0x71, 0xe3, 0x70, 0xe3, 0x07, 0xb3, 0x72, 0x30, 0xee, 0x2f, 0x3e, 0xa3, 0x97, 0x9b, 0x6f, 0x68, - 0x97, 0x9b, 0x33, 0xa1, 0x59, 0x36, 0xbc, 0xa9, 0x5f, 0x3c, 0xe2, 0x82, 0xff, 0x7f, 0x18, 0x82, - 0x71, 0x15, 0x9d, 0x8d, 0x43, 0xa9, 0xd1, 0xf0, 0xd4, 0x71, 0xb0, 0x1b, 0x0d, 0xcf, 0x44, 0xa8, - 0x76, 0x9f, 0x9f, 0xeb, 0x7b, 0x9f, 0xff, 0x0d, 0x18, 0x5d, 0x6a, 0x35, 0xb4, 0x5b, 0x46, 0x23, - 0xa5, 0x79, 0x57, 0x42, 0x24, 0xfe, 0x2d, 0x84, 0xd6, 0xc6, 0x7a, 0xab, 0x91, 0xbc, 0x5b, 0x8c, - 0x58, 0x6a, 0xae, 0x00, 0x43, 0x4f, 0xe2, 0x0a, 0x70, 0x03, 0x46, 0xef, 0xf9, 0x74, 0xb3, 0xdb, - 0x6e, 0xd3, 0x26, 0x2e, 0xab, 0x02, 0xd7, 0xf5, 0xbb, 0x3e, 0xb5, 0x02, 0x84, 0xaa, 0x0d, 0x08, - 0x51, 0xd5, 0x09, 0x1e, 0xe9, 0x33, 0xc1, 0xd7, 0xa1, 0xb0, 0x41, 0xa9, 0x87, 0x63, 0x3a, 0x16, - 0xa9, 0x74, 0x1d, 0x4a, 0x3d, 0x8b, 0x0d, 0xac, 0xe6, 0x22, 0x20, 0x10, 0x35, 0xbf, 0x82, 0xf1, - 0x01, 0xfd, 0x0a, 0xc8, 0x0b, 0x30, 0xde, 0xe9, 0x6e, 0x37, 0x9d, 0x3a, 0xf2, 0x15, 0x0e, 0x09, - 0xe6, 0x18, 0x87, 0x31, 0xb6, 0x3e, 0xf9, 0x1a, 0x4c, 0xe0, 0x19, 0x27, 0x5c, 0x72, 0x93, 0xda, - 0x75, 0x9c, 0x56, 0xc6, 0x35, 0x9d, 0x3a, 0x03, 0x59, 0x29, 0x7e, 0x33, 0x3a, 0xa3, 0xf9, 0x1a, - 0x4c, 0xea, 0x33, 0xf9, 0x14, 0x6e, 0xe5, 0x42, 0x1f, 0x89, 0x42, 0x71, 0xf4, 0x76, 0xbe, 0x00, - 0xc5, 0x31, 0xee, 0x1d, 0x61, 0xc2, 0x46, 0xd8, 0x27, 0x93, 0xdc, 0xe9, 0x6e, 0x53, 0xaf, 0x4d, - 0x03, 0xea, 0x8b, 0x43, 0x80, 0x6f, 0xe6, 0x4b, 0x9d, 0x8e, 0x6f, 0xfc, 0x5a, 0x16, 0x46, 0x4a, - 0x5b, 0xb5, 0x6a, 0x7b, 0xc7, 0xc5, 0xbb, 0xb5, 0xf0, 0x4a, 0x45, 0xbd, 0x5b, 0x0b, 0xaf, 0x54, - 0xd4, 0x8b, 0x94, 0xab, 0x29, 0xc7, 0x38, 0x74, 0xbf, 0x55, 0x8e, 0x71, 0xda, 0x01, 0x34, 0xba, - 0x5d, 0xca, 0x0d, 0x70, 0xbb, 0x14, 0x1a, 0x00, 0xf3, 0x47, 0x1a, 0x00, 0xc9, 0x5b, 0x30, 0x56, - 0x6d, 0x07, 0x74, 0xd7, 0x8b, 0x56, 0x7a, 0x78, 0xa4, 0x0c, 0xc1, 0xaa, 0x6a, 0xaf, 0x60, 0xb3, - 0x65, 0xc4, 0x8d, 0x8e, 0xa1, 0xb1, 0x11, 0x97, 0x11, 0xb7, 0x4d, 0xc6, 0xec, 0x01, 0x12, 0xd1, - 0xa8, 0xc4, 0xd6, 0x88, 0xbc, 0xc1, 0xe7, 0xca, 0xe7, 0x64, 0x64, 0x75, 0x67, 0x03, 0x5b, 0x9e, - 0x4e, 0xbf, 0xc1, 0x37, 0xbe, 0x93, 0x85, 0xb1, 0x52, 0xa7, 0xf3, 0x8c, 0xfb, 0x51, 0x7d, 0x59, - 0x13, 0xaf, 0xf2, 0x2c, 0x14, 0xf6, 0x6b, 0x20, 0x17, 0xaa, 0x5f, 0xce, 0xc2, 0x54, 0x8c, 0x42, - 0x6d, 0x7d, 0x66, 0x40, 0xef, 0xa9, 0xec, 0x80, 0xde, 0x53, 0xb9, 0xc1, 0xbc, 0xa7, 0xf2, 0x4f, - 0x22, 0x32, 0x5f, 0x86, 0x5c, 0xa9, 0xd3, 0x89, 0xdf, 0xc2, 0x76, 0x3a, 0xf7, 0xaf, 0xf3, 0xf3, - 0xac, 0xdd, 0xe9, 0x98, 0x0c, 0x43, 0x93, 0x63, 0xc3, 0x03, 0xca, 0x31, 0xe3, 0x75, 0x18, 0x45, - 0x5e, 0xe8, 0xb3, 0x74, 0x1e, 0xf0, 0x63, 0x16, 0xee, 0x4a, 0x5a, 0x5d, 0xe2, 0x33, 0xff, 0xbf, - 0x33, 0x30, 0x84, 0xbf, 0x9f, 0xd1, 0x35, 0xb6, 0xa8, 0xad, 0xb1, 0xa2, 0xb2, 0xc6, 0x06, 0x59, - 0x5d, 0xff, 0x7b, 0x1e, 0x47, 0x4b, 0xac, 0x2b, 0xe1, 0x2a, 0x94, 0x49, 0x71, 0x15, 0x7a, 0x13, - 0x14, 0xa9, 0xa9, 0x5a, 0x8b, 0x94, 0x3d, 0x43, 0x3d, 0x69, 0x44, 0xc8, 0xe4, 0x41, 0xdc, 0x69, - 0x28, 0x87, 0x93, 0x71, 0x21, 0xde, 0xd4, 0xa7, 0xe2, 0x2f, 0xb4, 0x02, 0xa4, 0xda, 0xf6, 0x69, - 0xbd, 0xeb, 0xd1, 0xda, 0x03, 0xa7, 0x73, 0x9f, 0x7a, 0xce, 0xce, 0x81, 0x38, 0xdd, 0xe3, 0xbe, - 0xec, 0x88, 0x52, 0xcb, 0x7f, 0xe0, 0x74, 0xd8, 0x51, 0xc4, 0xd9, 0x39, 0x30, 0x53, 0x68, 0xc8, - 0x7b, 0x30, 0x62, 0xd2, 0x7d, 0xcf, 0x09, 0xe4, 0x55, 0xf8, 0x64, 0x78, 0x70, 0x46, 0x28, 0x3f, - 0x18, 0x7a, 0xfc, 0x87, 0x3a, 0xff, 0xa2, 0x9c, 0x2c, 0x72, 0xc1, 0xc7, 0xaf, 0xbc, 0x27, 0xa2, - 0xde, 0x96, 0xb6, 0x6a, 0xbd, 0xe4, 0x1e, 0xb9, 0x0c, 0x43, 0x28, 0x3d, 0x85, 0x4e, 0x80, 0x2e, - 0xe4, 0xb8, 0x87, 0xaa, 0xa2, 0x1d, 0x31, 0xc8, 0xf3, 0x00, 0xe1, 0x0d, 0x84, 0x3f, 0x57, 0xc0, - 0xdd, 0x5a, 0x81, 0xc4, 0x45, 0xff, 0xe8, 0x71, 0x44, 0xff, 0x67, 0xe7, 0x29, 0xf3, 0xcb, 0x59, - 0xb8, 0x10, 0x8a, 0xb3, 0x75, 0xaf, 0x56, 0xba, 0xbb, 0x5a, 0x6d, 0x6c, 0x08, 0xed, 0x7f, 0xc3, - 0x73, 0x1f, 0x3a, 0xec, 0xf4, 0x77, 0xed, 0x88, 0x8f, 0x71, 0x95, 0xaf, 0x5a, 0x6e, 0x3a, 0xcc, - 0x6a, 0x3e, 0x05, 0xca, 0xae, 0x21, 0xdc, 0x1e, 0x3a, 0x9d, 0x84, 0x25, 0x71, 0xe5, 0x39, 0x33, - 0x62, 0x40, 0x7e, 0x28, 0x03, 0x27, 0xd3, 0x1b, 0x22, 0x4e, 0x84, 0x0b, 0x52, 0xf3, 0xec, 0xd1, - 0xda, 0xf2, 0xcb, 0x8f, 0x0f, 0x17, 0x2e, 0xf8, 0x76, 0xab, 0x69, 0x39, 0x0d, 0x5e, 0x9b, 0x53, - 0xa7, 0x56, 0x47, 0x20, 0x68, 0xf5, 0xf6, 0xa8, 0xe9, 0x2b, 0x20, 0xbf, 0xc9, 0xb9, 0x4c, 0x19, - 0xa0, 0x20, 0xad, 0x33, 0xc6, 0xdf, 0xcf, 0x80, 0xb2, 0xa2, 0x0a, 0x26, 0x6d, 0x38, 0x1e, 0xad, - 0x07, 0x28, 0xd1, 0xc2, 0x88, 0x08, 0x0e, 0x8b, 0xb9, 0x90, 0x20, 0x8c, 0xbc, 0x0b, 0x23, 0xdc, - 0x96, 0xc3, 0x6d, 0x28, 0xd1, 0x4a, 0x14, 0x76, 0x1f, 0x1e, 0x3a, 0xc3, 0x31, 0xd4, 0x55, 0x2c, - 0x88, 0x98, 0x7e, 0x7b, 0x7b, 0x6b, 0x73, 0xa9, 0x69, 0x3b, 0x2d, 0x5f, 0xc8, 0x31, 0x1c, 0xd6, - 0x8f, 0xf7, 0x03, 0xab, 0x8e, 0x50, 0x55, 0xbf, 0x0d, 0x51, 0x8d, 0x5b, 0xd2, 0xec, 0x74, 0x84, - 0x1f, 0xd4, 0x02, 0x0c, 0xdd, 0x8f, 0x8e, 0x9f, 0xe5, 0xd1, 0xc7, 0x87, 0x0b, 0x7c, 0xb9, 0x98, - 0x1c, 0x6e, 0xfc, 0xd5, 0x0c, 0x4c, 0xea, 0xeb, 0x89, 0x5c, 0x81, 0x61, 0x11, 0x8d, 0x90, 0xc1, - 0x63, 0x36, 0x1b, 0x85, 0x61, 0x1e, 0x87, 0xa0, 0x45, 0x1f, 0x08, 0x2c, 0x26, 0x89, 0x05, 0x07, - 0x61, 0x47, 0x42, 0x49, 0x5c, 0xe7, 0x20, 0x53, 0x96, 0x11, 0x83, 0xa9, 0x61, 0x7e, 0xb7, 0x19, - 0xa8, 0xd6, 0x57, 0x0f, 0x21, 0xa6, 0x28, 0x31, 0x96, 0x60, 0x98, 0x7f, 0xc2, 0x31, 0xff, 0x8b, - 0xcc, 0x31, 0xfc, 0x2f, 0x8c, 0xc3, 0x0c, 0x40, 0xad, 0xb6, 0x72, 0x87, 0x1e, 0x6c, 0xd8, 0x8e, - 0x87, 0xd7, 0x05, 0x28, 0x2e, 0xef, 0x88, 0x8f, 0x6b, 0x5c, 0x5c, 0x17, 0x70, 0xd1, 0xfa, 0x80, - 0x1e, 0x68, 0xd7, 0x05, 0x12, 0x15, 0x65, 0xb2, 0xe7, 0x3c, 0xb4, 0x03, 0xca, 0x08, 0xb3, 0x48, - 0xc8, 0x65, 0x32, 0x87, 0xc6, 0x28, 0x15, 0x64, 0xf2, 0x11, 0x4c, 0x46, 0xbf, 0xc2, 0x4b, 0x8f, - 0xc9, 0xf0, 0x03, 0xd6, 0x0b, 0xcb, 0xcf, 0x3f, 0x3e, 0x5c, 0x98, 0x57, 0xb8, 0xc6, 0xaf, 0x43, - 0x62, 0xcc, 0x8c, 0x5f, 0xcc, 0xe0, 0x55, 0x9f, 0xec, 0xe0, 0x45, 0xc8, 0x87, 0x5e, 0x65, 0xe3, - 0xdc, 0x52, 0x13, 0x33, 0xec, 0x62, 0x39, 0xb9, 0x00, 0xb9, 0xa8, 0x27, 0x28, 0x22, 0xf5, 0x1e, - 0xb0, 0x52, 0x72, 0x0b, 0x46, 0x06, 0x6a, 0x33, 0x7e, 0x1a, 0x29, 0x6d, 0x95, 0xd4, 0x38, 0x0b, - 0xb7, 0xb7, 0x36, 0x3f, 0xbf, 0xb3, 0xf0, 0x13, 0x59, 0x98, 0x62, 0xe3, 0x5a, 0xea, 0x06, 0x7b, - 0xae, 0xe7, 0x04, 0x07, 0xcf, 0xac, 0x9d, 0xe2, 0x6d, 0x4d, 0xc9, 0x99, 0x97, 0xbb, 0x8c, 0xda, - 0xb7, 0x81, 0xcc, 0x15, 0xff, 0xe5, 0x10, 0xcc, 0xa4, 0x50, 0x91, 0xd7, 0x34, 0x53, 0xe2, 0x9c, - 0x8c, 0x36, 0xfc, 0xe4, 0x70, 0x61, 0x5c, 0xa2, 0x6f, 0x46, 0xd1, 0x87, 0x8b, 0xfa, 0xbd, 0x39, - 0x1f, 0x29, 0xb4, 0x2c, 0xaa, 0xf7, 0xe6, 0xfa, 0x6d, 0xf9, 0x65, 0x18, 0x32, 0xdd, 0x26, 0x95, - 0x4e, 0x1e, 0xb8, 0xb1, 0x7b, 0x0c, 0xa0, 0xdd, 0x8d, 0x31, 0x00, 0x59, 0x81, 0x11, 0xf6, 0xc7, - 0x5d, 0xbb, 0x23, 0xac, 0xbe, 0x24, 0x54, 0xb3, 0x11, 0xda, 0x71, 0xda, 0xbb, 0xaa, 0xa6, 0xdd, - 0xa4, 0x56, 0xcb, 0xee, 0x68, 0x1a, 0x08, 0x47, 0xd4, 0x34, 0xf6, 0x42, 0x6f, 0x8d, 0x3d, 0x73, - 0xa4, 0xc6, 0xbe, 0x03, 0x50, 0x73, 0x76, 0xdb, 0x4e, 0x7b, 0xb7, 0xd4, 0xdc, 0x15, 0x31, 0x9b, - 0x97, 0x7b, 0xcf, 0xc2, 0x95, 0x08, 0x19, 0x17, 0xee, 0x19, 0xbc, 0x9a, 0xe1, 0x30, 0xcb, 0x6e, - 0xee, 0x6a, 0xbe, 0xe5, 0x0a, 0x67, 0xb2, 0x06, 0x50, 0xaa, 0x07, 0xce, 0x43, 0xb6, 0x84, 0x7d, - 0xe1, 0x8d, 0x2c, 0x9b, 0xbc, 0x54, 0xba, 0x43, 0x0f, 0x6a, 0x34, 0x88, 0x8c, 0xdc, 0x36, 0xa2, - 0xb2, 0x2f, 0x41, 0x73, 0x1c, 0x8e, 0x38, 0x90, 0x0e, 0x9c, 0x28, 0x35, 0x1a, 0x0e, 0xeb, 0x83, - 0xdd, 0xc4, 0x5b, 0x1b, 0xda, 0x40, 0xd6, 0xe3, 0xe9, 0xac, 0x2f, 0x0b, 0xd6, 0x2f, 0xd8, 0x21, - 0x95, 0x15, 0x70, 0xb2, 0x78, 0x35, 0xe9, 0x8c, 0x8d, 0x1a, 0x4c, 0xea, 0x9d, 0xd7, 0x63, 0x4d, - 0xc7, 0xa1, 0x60, 0xd6, 0x4a, 0x56, 0x6d, 0xa5, 0x74, 0xad, 0x98, 0x21, 0x45, 0x18, 0x17, 0xbf, - 0x16, 0xad, 0xc5, 0x37, 0x6e, 0x14, 0xb3, 0x1a, 0xe4, 0x8d, 0x6b, 0x8b, 0xc5, 0xdc, 0x7c, 0x76, - 0x2e, 0x13, 0x0b, 0xf3, 0x18, 0x29, 0x16, 0xb8, 0x39, 0xc3, 0xf8, 0x95, 0x0c, 0x14, 0x64, 0xdb, - 0xc9, 0x0d, 0xc8, 0xd5, 0x6a, 0x2b, 0xb1, 0xc0, 0x8c, 0x68, 0x97, 0xe1, 0xf2, 0xd4, 0xf7, 0x55, - 0xef, 0x3b, 0x46, 0xc0, 0xe8, 0x36, 0x57, 0x6b, 0x42, 0x39, 0x90, 0x74, 0x91, 0xf0, 0xe6, 0x74, - 0x29, 0xde, 0xea, 0x37, 0x20, 0x77, 0x7b, 0x6b, 0x53, 0x28, 0xf3, 0x92, 0x2e, 0x92, 0xa7, 0x9c, - 0xee, 0xe3, 0x7d, 0x55, 0xca, 0x33, 0x02, 0xc3, 0x84, 0x31, 0x65, 0x21, 0xf3, 0x4d, 0xb7, 0xe5, - 0x86, 0x01, 0x96, 0x62, 0xd3, 0x65, 0x10, 0x53, 0x94, 0x30, 0x1d, 0x61, 0xd5, 0xad, 0xdb, 0x4d, - 0xb1, 0x7b, 0xa3, 0x8e, 0xd0, 0x64, 0x00, 0x93, 0xc3, 0x8d, 0xdf, 0xca, 0x40, 0x11, 0x35, 0x29, - 0xf4, 0x9e, 0x73, 0x1f, 0xd0, 0xf6, 0xfd, 0x6b, 0xe4, 0x75, 0xf9, 0xc9, 0x65, 0xc2, 0xa3, 0xe3, - 0x10, 0x7e, 0x72, 0x31, 0xdb, 0xb3, 0xf8, 0xec, 0x94, 0x18, 0xd6, 0xec, 0xe0, 0xb1, 0x6f, 0x47, - 0xc4, 0xb0, 0x2e, 0xc0, 0x10, 0x36, 0x47, 0x08, 0x47, 0x6c, 0x79, 0xc0, 0x00, 0x26, 0x87, 0x2b, - 0xb2, 0xe9, 0xa7, 0xb2, 0x89, 0x3e, 0x2c, 0x7e, 0xae, 0xe2, 0xc7, 0xf4, 0xce, 0x0d, 0x24, 0xaf, - 0x3f, 0x80, 0xd9, 0xf8, 0x90, 0xe0, 0xb1, 0xbe, 0x04, 0x53, 0x3a, 0x5c, 0x9e, 0xf0, 0x4f, 0xa5, - 0xd6, 0x75, 0x7f, 0xd1, 0x8c, 0xe3, 0x1b, 0xff, 0x4b, 0x06, 0x46, 0xf1, 0x4f, 0xb3, 0xdb, 0x44, - 0x67, 0x88, 0xd2, 0x56, 0x4d, 0x98, 0xf0, 0x54, 0x65, 0xce, 0xde, 0xf7, 0x2d, 0x61, 0xe5, 0xd3, - 0x64, 0x4c, 0x88, 0x2c, 0x48, 0xb9, 0x6d, 0x4e, 0xde, 0x53, 0x86, 0xa4, 0xdc, 0x88, 0xe7, 0xc7, - 0x48, 0x05, 0x32, 0xba, 0x50, 0x6d, 0xd5, 0xd8, 0xf2, 0x53, 0x6f, 0x27, 0x91, 0xce, 0x6d, 0xea, - 0x2e, 0x54, 0x1c, 0x0d, 0x2f, 0x27, 0xb7, 0x6a, 0x25, 0x73, 0x4d, 0xbb, 0x9c, 0x64, 0x6d, 0xd4, - 0x5c, 0x75, 0x05, 0x92, 0xf1, 0x0f, 0x47, 0xe3, 0x03, 0x28, 0x36, 0xbc, 0x63, 0x7e, 0x1b, 0x6f, - 0xc1, 0x50, 0xa9, 0xd9, 0x74, 0xf7, 0x85, 0x94, 0x90, 0x56, 0x86, 0x70, 0xfc, 0xf8, 0x7e, 0x66, - 0x33, 0x14, 0x2d, 0x26, 0x86, 0x01, 0xc8, 0x12, 0x8c, 0x96, 0xb6, 0x6a, 0xd5, 0x6a, 0x65, 0x73, - 0x93, 0xfb, 0xff, 0xe7, 0xca, 0x2f, 0xc9, 0xf1, 0x71, 0x9c, 0x86, 0x15, 0xbf, 0x1f, 0x8b, 0xf4, - 0xf7, 0x88, 0x8e, 0xbc, 0x03, 0x70, 0xdb, 0x75, 0xda, 0x77, 0x69, 0xb0, 0xe7, 0x36, 0x44, 0xe7, - 0xcf, 0x3d, 0x3e, 0x5c, 0x18, 0xfb, 0xd8, 0x75, 0xda, 0x56, 0x0b, 0xc1, 0xac, 0xed, 0x11, 0x92, - 0xa9, 0xfc, 0xcd, 0x46, 0xba, 0xec, 0x72, 0x07, 0x87, 0xa1, 0x68, 0xa4, 0xb7, 0xdd, 0x84, 0x6f, - 0x83, 0x44, 0x23, 0x2d, 0x98, 0xaa, 0x75, 0x77, 0x77, 0x29, 0x93, 0xec, 0xc2, 0x6e, 0x31, 0x2c, - 0xce, 0xb8, 0x61, 0xd6, 0x05, 0x7e, 0x1e, 0x61, 0xa7, 0x14, 0xbf, 0xfc, 0x1a, 0x5b, 0xc8, 0xdf, - 0x3d, 0x5c, 0x10, 0xf7, 0x6e, 0x4c, 0x55, 0xf3, 0x25, 0x7d, 0xd2, 0x6a, 0x11, 0xe7, 0x4d, 0xd6, - 0x61, 0xf8, 0x96, 0x13, 0xac, 0x74, 0xb7, 0x85, 0x3f, 0xfb, 0x0b, 0x7d, 0x3e, 0x1a, 0x8e, 0xc8, - 0x0d, 0xbf, 0xbb, 0x4e, 0xb0, 0xd7, 0x55, 0x3d, 0x8a, 0x05, 0x1b, 0xb2, 0x05, 0x85, 0x25, 0xc7, - 0xab, 0x37, 0xe9, 0x52, 0x55, 0xec, 0xfd, 0x17, 0xfa, 0xb0, 0x94, 0xa8, 0x7c, 0x5c, 0xea, 0xf8, - 0xab, 0xee, 0xa8, 0xba, 0x80, 0xc4, 0x20, 0x7f, 0x3d, 0x03, 0x67, 0xc2, 0xd6, 0x97, 0x76, 0x69, - 0x3b, 0xb8, 0x6b, 0x07, 0xf5, 0x3d, 0xea, 0x89, 0x51, 0x1a, 0xed, 0x37, 0x4a, 0x5f, 0x49, 0x8c, - 0xd2, 0xa5, 0x68, 0x94, 0x6c, 0xc6, 0xcc, 0x6a, 0x71, 0x6e, 0xc9, 0x31, 0xeb, 0x57, 0x2b, 0xb1, - 0x00, 0x22, 0x4b, 0xbe, 0x88, 0x87, 0x7a, 0xa9, 0x4f, 0x87, 0x23, 0x64, 0xe1, 0xc7, 0x1c, 0xfe, - 0xd6, 0xfc, 0x79, 0x42, 0x28, 0xb9, 0x23, 0x83, 0x47, 0xb8, 0x56, 0x72, 0xbe, 0x0f, 0x6f, 0x1e, - 0x50, 0x32, 0xd3, 0x27, 0x4c, 0x8c, 0xcf, 0xf6, 0xaa, 0xbd, 0x2d, 0x14, 0x91, 0x23, 0x66, 0x7b, - 0xd5, 0x8e, 0x66, 0xbb, 0x69, 0xc7, 0x67, 0x7b, 0xd5, 0xde, 0x26, 0x4b, 0x3c, 0xe2, 0x8d, 0x87, - 0x47, 0x3d, 0xdf, 0x8f, 0xdb, 0xd2, 0x06, 0xdf, 0x99, 0x53, 0x22, 0xdf, 0x3e, 0x84, 0xd1, 0x5a, - 0xc7, 0xae, 0xd3, 0xa6, 0xb3, 0x13, 0x88, 0xab, 0x9d, 0x17, 0xfb, 0xb0, 0x0a, 0x71, 0xc5, 0xb5, - 0x80, 0xfc, 0xa9, 0x1e, 0x93, 0x42, 0x1c, 0xd6, 0xc2, 0xcd, 0x8d, 0xbb, 0x73, 0x53, 0x47, 0xb6, - 0x70, 0x73, 0xe3, 0xae, 0xd0, 0x39, 0x3a, 0x2d, 0x4d, 0xe7, 0xd8, 0xb8, 0x6b, 0xfc, 0x7a, 0x0e, - 0x4e, 0xf5, 0xa0, 0x21, 0x6b, 0x52, 0x46, 0x65, 0x34, 0xf3, 0x62, 0x0f, 0xf4, 0x2b, 0x47, 0x8a, - 0xad, 0x55, 0x28, 0x2e, 0xdf, 0x41, 0xe5, 0x96, 0xfd, 0xa4, 0x8d, 0xa5, 0x92, 0x94, 0xee, 0xe7, - 0x1f, 0x1f, 0x2e, 0x9c, 0xa5, 0x0f, 0xd0, 0x35, 0xc8, 0xe6, 0x85, 0x56, 0x5d, 0x0b, 0x5e, 0x4b, - 0x50, 0xce, 0xff, 0x60, 0x16, 0xf2, 0xb8, 0xd3, 0xc4, 0x52, 0x76, 0x64, 0x8e, 0x95, 0xb2, 0xe3, - 0x7d, 0x18, 0x5f, 0xbe, 0xc3, 0x8f, 0x9e, 0x2b, 0xb6, 0xbf, 0x27, 0xe4, 0x20, 0xde, 0xb4, 0xd1, - 0x07, 0x96, 0x38, 0xa9, 0xee, 0xd9, 0x9a, 0x92, 0xa7, 0x51, 0x90, 0x7b, 0x30, 0xc3, 0xdb, 0xe6, - 0xec, 0x38, 0x75, 0x1e, 0xf9, 0xef, 0xd8, 0x4d, 0x21, 0x14, 0x2f, 0x3c, 0x3e, 0x5c, 0x58, 0xa0, - 0x0f, 0xd0, 0xe9, 0x49, 0x94, 0x5b, 0x3e, 0x22, 0xa8, 0xde, 0x4f, 0x29, 0xf4, 0x6a, 0x38, 0xb2, - 0x39, 0x8a, 0x15, 0xb2, 0xda, 0x58, 0xdd, 0x0c, 0x97, 0x23, 0x19, 0x7f, 0x7f, 0x08, 0xe6, 0x7b, - 0xcb, 0x33, 0xf2, 0x55, 0x7d, 0x02, 0x2f, 0x1e, 0x29, 0x01, 0x8f, 0x9e, 0xc3, 0xaf, 0xc1, 0xec, - 0x72, 0x3b, 0xa0, 0x5e, 0xc7, 0x73, 0x64, 0x00, 0xfa, 0x8a, 0xeb, 0x4b, 0x27, 0x33, 0xf4, 0xf6, - 0xa2, 0x61, 0xb9, 0xb0, 0x12, 0xa2, 0xcb, 0x9b, 0xc2, 0x2a, 0x95, 0x03, 0x59, 0x86, 0x49, 0x05, - 0xde, 0xec, 0xee, 0x8a, 0x1d, 0x1c, 0x3d, 0x18, 0x55, 0x9e, 0xcd, 0xae, 0xea, 0x81, 0x13, 0x23, - 0x9a, 0xff, 0xc5, 0x9c, 0x58, 0x16, 0x17, 0x20, 0x57, 0xeb, 0x6e, 0x8b, 0xe5, 0xc0, 0x55, 0x75, - 0x4d, 0xac, 0xb3, 0x52, 0xf2, 0x65, 0x00, 0x93, 0x76, 0x5c, 0xdf, 0x09, 0x5c, 0xef, 0x40, 0x8d, - 0x63, 0xf0, 0x42, 0xa8, 0xee, 0xb1, 0x29, 0xa1, 0x64, 0x05, 0xa6, 0xa2, 0x5f, 0xeb, 0xfb, 0x6d, - 0x61, 0xda, 0x1c, 0xe5, 0x36, 0x85, 0x88, 0xdc, 0x72, 0x59, 0x99, 0xba, 0x51, 0xc5, 0xc8, 0xc8, - 0x22, 0x14, 0xb6, 0x5c, 0xef, 0xc1, 0x0e, 0x9b, 0xa8, 0x7c, 0xb4, 0x95, 0xee, 0x0b, 0x98, 0xba, - 0x65, 0x48, 0x3c, 0xb6, 0xe6, 0x97, 0xdb, 0x0f, 0x1d, 0xcf, 0x6d, 0xb7, 0x68, 0x3b, 0x50, 0x6f, - 0x21, 0x69, 0x04, 0xd6, 0x22, 0xc8, 0x22, 0x30, 0x3b, 0x39, 0x97, 0xea, 0x81, 0xeb, 0x89, 0x2b, - 0x48, 0x3e, 0xdd, 0x0c, 0xa0, 0x4d, 0x37, 0x03, 0xb0, 0x41, 0x34, 0xe9, 0x8e, 0xb0, 0x9d, 0xe3, - 0x20, 0x7a, 0x74, 0x47, 0x0b, 0x8f, 0xa3, 0x3b, 0x4c, 0x15, 0x30, 0xe9, 0x0e, 0x1e, 0xf7, 0xb5, - 0xac, 0x32, 0x3b, 0x09, 0x43, 0x91, 0x40, 0x33, 0x7e, 0x77, 0xb4, 0xe7, 0xba, 0x65, 0xb2, 0xf7, - 0x78, 0xeb, 0x76, 0xd5, 0x1e, 0x60, 0xdd, 0xbe, 0x16, 0xfa, 0x81, 0xaa, 0x31, 0xa1, 0x08, 0x51, - 0x85, 0x3f, 0xc7, 0x99, 0xff, 0xa5, 0xc2, 0x71, 0x16, 0x91, 0x18, 0xa4, 0xec, 0xa0, 0x83, 0x94, - 0x1b, 0x68, 0x90, 0x48, 0x19, 0x26, 0xc2, 0xbc, 0x44, 0x1b, 0x76, 0xa0, 0xc9, 0xa6, 0x30, 0x99, - 0x94, 0xd5, 0xb1, 0x03, 0x55, 0x36, 0xe9, 0x24, 0xe4, 0x6d, 0x18, 0x13, 0xce, 0xd0, 0xc8, 0x61, - 0x28, 0x72, 0x47, 0x93, 0x9e, 0xd3, 0x31, 0x7a, 0x15, 0x9d, 0x7d, 0x92, 0x1b, 0x4e, 0x87, 0x36, - 0x9d, 0x36, 0xad, 0xa1, 0xed, 0x5c, 0xac, 0x18, 0xfc, 0x24, 0x3b, 0xa2, 0xc4, 0xe2, 0x66, 0x75, - 0xcd, 0x6a, 0xa6, 0x11, 0xc5, 0x17, 0xeb, 0xc8, 0xb1, 0x16, 0x2b, 0xf7, 0x06, 0xf1, 0x56, 0xdd, - 0x5d, 0x47, 0xfa, 0xbf, 0x49, 0x6f, 0x10, 0xcf, 0x6a, 0x32, 0x68, 0xcc, 0x1b, 0x84, 0xa3, 0x32, - 0xbd, 0x9e, 0xfd, 0xa8, 0x56, 0xc4, 0x3d, 0x0d, 0xea, 0xf5, 0x48, 0xa4, 0x3b, 0x1d, 0x72, 0x24, - 0x59, 0xcd, 0x72, 0xcb, 0x76, 0x9a, 0x22, 0xf4, 0x2f, 0xaa, 0x86, 0x32, 0x68, 0xbc, 0x1a, 0x44, - 0x25, 0x75, 0x18, 0x37, 0xe9, 0xce, 0x86, 0xe7, 0x06, 0xb4, 0x1e, 0xd0, 0x86, 0xd0, 0x65, 0xa4, - 0x3a, 0x5f, 0x76, 0x5d, 0xae, 0xa7, 0x95, 0x5f, 0xff, 0xdd, 0xc3, 0x85, 0xcc, 0x77, 0x0f, 0x17, - 0x80, 0x81, 0xb8, 0x47, 0xeb, 0xe3, 0xc3, 0x85, 0x53, 0x6c, 0xfe, 0x3b, 0x92, 0x58, 0xdd, 0x62, - 0x54, 0xa6, 0xe4, 0x7b, 0x99, 0xd0, 0x0d, 0x87, 0x24, 0xaa, 0x6c, 0xbc, 0x47, 0x65, 0x6f, 0xa4, - 0x56, 0xb6, 0xa0, 0x8c, 0x76, 0x6a, 0xa5, 0xa9, 0x95, 0x90, 0x77, 0x60, 0x6c, 0xa9, 0xba, 0xe4, - 0xb6, 0x77, 0x9c, 0xdd, 0xda, 0x4a, 0x09, 0x15, 0x22, 0xe1, 0xcd, 0x5c, 0x77, 0xac, 0x3a, 0xc2, - 0x2d, 0x7f, 0xcf, 0xd6, 0x82, 0x5a, 0x22, 0x7c, 0x72, 0x0b, 0x26, 0xe5, 0x4f, 0x93, 0xee, 0xdc, - 0x33, 0xab, 0xa8, 0x07, 0x49, 0x17, 0xf2, 0x90, 0x03, 0x1b, 0x88, 0xae, 0xa7, 0xea, 0xc7, 0x31, - 0x32, 0xb6, 0x18, 0x2b, 0xb4, 0xd3, 0x74, 0x0f, 0x58, 0xf3, 0x36, 0x1d, 0xea, 0xa1, 0xe6, 0x23, - 0x16, 0x63, 0x23, 0x2c, 0xb1, 0x02, 0x47, 0x13, 0xb7, 0x31, 0x22, 0xb2, 0x06, 0xd3, 0x62, 0x89, - 0xdf, 0x77, 0x7c, 0x67, 0xdb, 0x69, 0x3a, 0xc1, 0x01, 0x86, 0x19, 0x0a, 0x2d, 0x44, 0x7e, 0x17, - 0x0f, 0xc3, 0x52, 0x85, 0x59, 0x92, 0xd4, 0xf8, 0x95, 0x2c, 0x9c, 0xed, 0xa7, 0xff, 0x93, 0x9a, - 0x2e, 0xcc, 0x2e, 0x0d, 0x70, 0x66, 0x38, 0x5a, 0x9c, 0x2d, 0xc3, 0xe4, 0xba, 0xb7, 0x6b, 0xb7, - 0x9d, 0x6f, 0xe3, 0xb9, 0x2e, 0x74, 0x8a, 0xc1, 0xc1, 0x70, 0x95, 0x12, 0x7d, 0xb5, 0xc7, 0x88, - 0xe6, 0x1f, 0x0a, 0x31, 0xf7, 0x69, 0xc3, 0x2b, 0x6e, 0xc0, 0xe8, 0x92, 0xdb, 0x0e, 0xe8, 0xa3, - 0x20, 0x16, 0x05, 0xc8, 0x81, 0xf1, 0xd0, 0x12, 0x89, 0x6a, 0xfc, 0xbf, 0x59, 0x38, 0xd7, 0x57, - 0x01, 0x26, 0x9b, 0xfa, 0xa8, 0x5d, 0x1e, 0x44, 0x6b, 0x3e, 0x7a, 0xd8, 0x16, 0x13, 0xfe, 0x1b, - 0x47, 0x7a, 0x2f, 0xcf, 0xff, 0xd7, 0x19, 0x31, 0x48, 0x5f, 0x80, 0x11, 0xac, 0x2a, 0x1c, 0x22, - 0x6e, 0x1b, 0x42, 0x29, 0xec, 0xe8, 0xb6, 0x21, 0x8e, 0x46, 0xae, 0x43, 0x61, 0xc9, 0x6e, 0x36, - 0x95, 0x18, 0x49, 0xd4, 0xeb, 0xeb, 0x08, 0x8b, 0xb9, 0xfb, 0x48, 0x44, 0xf2, 0x26, 0x00, 0xff, - 0x5b, 0xd9, 0x2b, 0x50, 0x58, 0x0a, 0xb2, 0xd8, 0x76, 0xa1, 0x20, 0x63, 0x66, 0xb5, 0xba, 0x1b, - 0x06, 0x73, 0xf1, 0xcc, 0x6a, 0x0c, 0xa0, 0x65, 0x56, 0x63, 0x00, 0xe3, 0x57, 0x73, 0xf0, 0x7c, - 0xff, 0x53, 0x1c, 0xb9, 0xa7, 0x4f, 0xc1, 0x2b, 0x03, 0x9d, 0xfd, 0x8e, 0x9e, 0x03, 0x99, 0xa7, - 0x90, 0x0f, 0xc8, 0xa5, 0xa4, 0x93, 0xf1, 0x27, 0x87, 0x0b, 0x8a, 0x0f, 0xd9, 0x6d, 0xd7, 0x69, - 0x2b, 0x37, 0x05, 0xdf, 0x02, 0xa8, 0x05, 0x76, 0xe0, 0xd4, 0x6f, 0x6f, 0xdd, 0x91, 0x61, 0xfc, - 0x37, 0x06, 0x6b, 0x59, 0x44, 0xc7, 0xe5, 0x8a, 0x88, 0x6f, 0x40, 0xa8, 0xf5, 0xf1, 0xfe, 0x03, - 0xed, 0x9c, 0x1a, 0x21, 0xcf, 0x7f, 0x05, 0x8a, 0x71, 0x52, 0x72, 0x11, 0xf2, 0xd8, 0x00, 0xc5, - 0x53, 0x3a, 0xc6, 0x01, 0xcb, 0xe7, 0xef, 0x8a, 0xb5, 0xb3, 0x0c, 0x93, 0xe2, 0x7a, 0x5a, 0xb7, - 0x88, 0xe1, 0xf7, 0x2a, 0x6f, 0xb7, 0x93, 0x56, 0xb1, 0x18, 0x91, 0xf1, 0x67, 0x19, 0x38, 0xdd, - 0xf3, 0x7c, 0x4c, 0x36, 0xf4, 0x09, 0x7b, 0xe9, 0xa8, 0x03, 0xf5, 0x91, 0x73, 0x35, 0xff, 0x63, - 0x72, 0xed, 0xbf, 0x0b, 0xe3, 0xb5, 0xee, 0x76, 0xfc, 0x90, 0xc5, 0x83, 0xba, 0x15, 0xb8, 0xba, - 0x83, 0xa9, 0xf8, 0xac, 0xff, 0xf2, 0xfe, 0x5d, 0xb8, 0x57, 0xf0, 0x83, 0x1f, 0xf6, 0x3f, 0x0c, - 0x8f, 0xc2, 0x00, 0x3c, 0x75, 0x10, 0x63, 0x44, 0xc6, 0x2f, 0x67, 0xd3, 0x4f, 0xab, 0xec, 0xac, - 0x7d, 0x8c, 0xd3, 0xea, 0xad, 0xa5, 0x8d, 0xa3, 0xfb, 0xfe, 0x9f, 0xca, 0xbe, 0xe3, 0x75, 0xa4, - 0x90, 0x78, 0xd2, 0xbc, 0x27, 0xae, 0x23, 0xa5, 0x74, 0xf4, 0xf5, 0xeb, 0x48, 0x89, 0x4c, 0xde, - 0x80, 0xd1, 0x55, 0x97, 0x07, 0xc6, 0xca, 0x1e, 0xf3, 0xf8, 0x21, 0x09, 0x54, 0xc5, 0x63, 0x88, - 0xc9, 0xce, 0x16, 0xfa, 0xc4, 0x4b, 0x27, 0x6f, 0x3c, 0x5b, 0xc4, 0x96, 0x8b, 0x6e, 0x04, 0xd3, - 0xc9, 0x8c, 0x1f, 0xcb, 0xc2, 0x24, 0x5f, 0xbc, 0xdc, 0x48, 0xfb, 0xcc, 0x1a, 0xc0, 0xdf, 0xd2, - 0x0c, 0xe0, 0x32, 0xff, 0x83, 0xda, 0xb5, 0x81, 0xcc, 0xdf, 0x7b, 0x40, 0x92, 0x34, 0xc4, 0x84, - 0x71, 0x15, 0xda, 0xdf, 0xf2, 0x7d, 0x2d, 0x4a, 0x15, 0x22, 0x64, 0x07, 0x5e, 0x3f, 0xf8, 0xa6, - 0xc6, 0xc3, 0xf8, 0xab, 0x59, 0x98, 0x50, 0xae, 0x2b, 0x9f, 0xd9, 0x81, 0xff, 0x8a, 0x36, 0xf0, - 0x73, 0xa1, 0x63, 0x72, 0xd8, 0xb3, 0x81, 0xc6, 0xbd, 0x0b, 0xd3, 0x09, 0x92, 0xf8, 0xad, 0x6f, - 0x66, 0x90, 0x5b, 0xdf, 0xd7, 0x92, 0x79, 0x07, 0x78, 0xfa, 0xce, 0x30, 0x98, 0x55, 0x4d, 0x74, - 0xf0, 0x13, 0x59, 0x98, 0x15, 0xbf, 0x30, 0x51, 0x0f, 0x97, 0xde, 0xcf, 0xec, 0x5c, 0x94, 0xb4, - 0xb9, 0x58, 0xd0, 0xe7, 0x42, 0xe9, 0x60, 0xef, 0x29, 0x31, 0xfe, 0x32, 0xc0, 0x5c, 0x2f, 0x82, - 0x81, 0xe3, 0x7f, 0x22, 0xef, 0xea, 0xec, 0x00, 0xde, 0xd5, 0xab, 0x50, 0xc4, 0xaa, 0x44, 0x2a, - 0x0e, 0x9f, 0x9d, 0x01, 0x72, 0x91, 0xc2, 0xcd, 0xb3, 0x29, 0x89, 0xd4, 0x20, 0x7e, 0xec, 0x10, - 0x90, 0xa0, 0x24, 0xbf, 0x98, 0x81, 0x49, 0x04, 0x2e, 0x3f, 0xa4, 0xed, 0x00, 0x99, 0xe5, 0x85, - 0x33, 0x70, 0x68, 0x1f, 0xaf, 0x05, 0x9e, 0xd3, 0xde, 0x15, 0x06, 0xf2, 0x6d, 0x61, 0x20, 0x7f, - 0x9b, 0x1b, 0xf6, 0xaf, 0xd4, 0xdd, 0xd6, 0xd5, 0x5d, 0xcf, 0x7e, 0xe8, 0xf0, 0x9b, 0x78, 0xbb, - 0x79, 0x35, 0xca, 0x1e, 0xdd, 0x71, 0x62, 0xf9, 0xa0, 0x05, 0x2b, 0xbc, 0x7c, 0xe0, 0x0d, 0xa5, - 0x58, 0x6d, 0xfc, 0xac, 0xa2, 0xb7, 0x88, 0x7c, 0x0f, 0x9c, 0xe2, 0x71, 0xf6, 0x4c, 0xe5, 0x75, - 0xda, 0x5d, 0xb7, 0xeb, 0x97, 0xed, 0xfa, 0x03, 0xb6, 0xef, 0xf1, 0x80, 0x06, 0xec, 0x79, 0x3d, - 0x2c, 0xb4, 0xb6, 0x79, 0xa9, 0x16, 0xc0, 0x95, 0xce, 0x80, 0xac, 0xc0, 0x34, 0x2f, 0x2a, 0x75, - 0x03, 0xb7, 0x56, 0xb7, 0x9b, 0x4e, 0x7b, 0x17, 0xcf, 0xd4, 0x05, 0xbe, 0x1f, 0xdb, 0xdd, 0xc0, - 0xb5, 0x7c, 0x0e, 0x57, 0x8f, 0x2e, 0x09, 0x22, 0x52, 0x85, 0x29, 0x93, 0xda, 0x8d, 0xbb, 0xf6, - 0xa3, 0x25, 0xbb, 0x63, 0xd7, 0xd9, 0x41, 0xa8, 0x80, 0x97, 0x49, 0x78, 0x36, 0xf3, 0xa8, 0xdd, - 0xb0, 0x5a, 0xf6, 0x23, 0xab, 0x2e, 0x0a, 0x75, 0x1b, 0x96, 0x46, 0x17, 0xb2, 0x72, 0xda, 0x21, - 0xab, 0xd1, 0x38, 0x2b, 0xa7, 0xdd, 0x9b, 0x55, 0x44, 0x27, 0x59, 0x6d, 0xda, 0xde, 0x2e, 0x0d, - 0xb8, 0x23, 0x1b, 0x3b, 0x8f, 0x67, 0x14, 0x56, 0x01, 0x96, 0x59, 0xe8, 0xd4, 0x16, 0x67, 0xa5, - 0xd0, 0xb1, 0x95, 0xb7, 0xe5, 0x39, 0x01, 0x55, 0x7b, 0x38, 0x86, 0xcd, 0xc2, 0xf1, 0x47, 0x17, - 0xc0, 0x5e, 0x5d, 0x4c, 0x50, 0x46, 0xdc, 0x94, 0x4e, 0x8e, 0x27, 0xb8, 0xa5, 0xf7, 0x32, 0x41, - 0x19, 0x72, 0x53, 0xfb, 0x39, 0x81, 0xfd, 0x54, 0xb8, 0xf5, 0xe8, 0x68, 0x82, 0x92, 0xac, 0xb1, - 0x41, 0x0b, 0x68, 0x9b, 0xad, 0x68, 0xe1, 0xc8, 0x37, 0x89, 0x4d, 0x7b, 0x51, 0x78, 0xa3, 0x14, - 0x3d, 0x59, 0x6c, 0xa5, 0xb8, 0xf5, 0xc5, 0x89, 0xc9, 0xf7, 0xc1, 0xd4, 0x3d, 0x9f, 0xde, 0xac, - 0x6e, 0xd4, 0x64, 0x58, 0x3e, 0x9e, 0xb6, 0x27, 0x17, 0xaf, 0x1d, 0x21, 0x74, 0xae, 0xa8, 0x34, - 0x98, 0xc4, 0x99, 0xcf, 0x5b, 0xd7, 0xa7, 0xd6, 0x8e, 0xd3, 0xf1, 0xc3, 0x1c, 0x27, 0xea, 0xbc, - 0xc5, 0xaa, 0x32, 0x56, 0x60, 0x3a, 0xc1, 0x86, 0x4c, 0x02, 0x30, 0xa0, 0x75, 0x6f, 0xad, 0xb6, - 0xbc, 0x59, 0x7c, 0x8e, 0x14, 0x61, 0x1c, 0x7f, 0x2f, 0xaf, 0x95, 0xca, 0xab, 0xcb, 0x95, 0x62, - 0x86, 0x4c, 0xc3, 0x04, 0x42, 0x2a, 0xd5, 0x1a, 0x07, 0x65, 0x79, 0x0a, 0x4f, 0xb3, 0xc8, 0x3f, - 0xdd, 0x80, 0x7d, 0x00, 0xb8, 0xa7, 0x18, 0x7f, 0x23, 0x0b, 0xa7, 0xe5, 0xb6, 0x42, 0x83, 0x7d, - 0xd7, 0x7b, 0xe0, 0xb4, 0x77, 0x9f, 0xf1, 0xdd, 0xe1, 0xa6, 0xb6, 0x3b, 0xbc, 0x18, 0xdb, 0xa9, - 0x63, 0xbd, 0xec, 0xb3, 0x45, 0xfc, 0xd3, 0x02, 0x9c, 0xeb, 0x4b, 0x45, 0xbe, 0xca, 0x76, 0x73, - 0x87, 0xb6, 0x83, 0x6a, 0xa3, 0x49, 0x37, 0x9d, 0x16, 0x75, 0xbb, 0x81, 0x70, 0x1c, 0xbd, 0x80, - 0x07, 0x5c, 0x2c, 0xb4, 0x9c, 0x46, 0x93, 0x5a, 0x01, 0x2f, 0xd6, 0x96, 0x5b, 0x92, 0x9a, 0xb1, - 0x0c, 0x13, 0xca, 0x57, 0xdb, 0x01, 0xf5, 0x1e, 0xa2, 0x73, 0x4a, 0xc8, 0xf2, 0x01, 0xa5, 0x1d, - 0xcb, 0x66, 0xa5, 0x96, 0x23, 0x8a, 0x75, 0x96, 0x09, 0x6a, 0x72, 0x53, 0x61, 0xb9, 0xc4, 0xd4, - 0xe1, 0xbb, 0xf6, 0x23, 0x71, 0x5b, 0x2e, 0xf2, 0x33, 0x85, 0x2c, 0x79, 0xcc, 0x51, 0xcb, 0x7e, - 0x64, 0x26, 0x49, 0xc8, 0x47, 0x70, 0x42, 0x6c, 0x40, 0x22, 0x66, 0x54, 0xf6, 0x98, 0x47, 0xa4, - 0xbe, 0xfc, 0xf8, 0x70, 0xe1, 0x94, 0xcc, 0x6c, 0x25, 0xa3, 0x84, 0xd3, 0x7a, 0x9d, 0xce, 0x85, - 0x6c, 0xb2, 0x0d, 0x39, 0x36, 0x1c, 0x77, 0xa9, 0xef, 0xdb, 0xbb, 0xf2, 0x66, 0x9d, 0x7b, 0xd9, - 0x2b, 0x83, 0x69, 0xb5, 0x78, 0xb9, 0xd9, 0x93, 0x92, 0xac, 0xc0, 0xe4, 0x16, 0xdd, 0x56, 0xe7, - 0x67, 0x38, 0x14, 0x55, 0xc5, 0x7d, 0xba, 0xdd, 0x7b, 0x72, 0x62, 0x74, 0xc4, 0x41, 0x83, 0xd9, - 0xa3, 0x83, 0x55, 0xc7, 0x0f, 0x68, 0x9b, 0x7a, 0x98, 0x8b, 0x60, 0x04, 0x85, 0xc1, 0x5c, 0xa4, - 0x21, 0xeb, 0xe5, 0xe5, 0x17, 0x1e, 0x1f, 0x2e, 0x9c, 0xe3, 0x51, 0x25, 0x4d, 0x01, 0xb7, 0x62, - 0xe9, 0xd8, 0x93, 0x5c, 0xc9, 0x37, 0x61, 0xca, 0x74, 0xbb, 0x81, 0xd3, 0xde, 0xad, 0x05, 0x9e, - 0x1d, 0xd0, 0x5d, 0xbe, 0x21, 0x45, 0x49, 0x0f, 0x62, 0xa5, 0xe2, 0xae, 0x85, 0x03, 0x2d, 0x5f, - 0x40, 0xb5, 0x1d, 0x41, 0x27, 0x20, 0xdf, 0x80, 0x49, 0x1e, 0x2d, 0x18, 0x56, 0x30, 0xaa, 0xa5, - 0x92, 0xd5, 0x0b, 0xef, 0x5f, 0xe3, 0x07, 0x54, 0x1e, 0x75, 0x98, 0x56, 0x41, 0x8c, 0x1b, 0xf9, - 0x50, 0x0c, 0xd6, 0x86, 0xd3, 0xde, 0x0d, 0x97, 0x31, 0xe0, 0xc8, 0xbf, 0x1e, 0x0d, 0x49, 0x87, - 0x35, 0x57, 0x2e, 0xe3, 0x1e, 0x9e, 0x1a, 0x49, 0x3e, 0x24, 0x80, 0x73, 0x25, 0xdf, 0x77, 0xfc, - 0x40, 0xb8, 0x57, 0x2f, 0x3f, 0xa2, 0xf5, 0x2e, 0x43, 0xde, 0x72, 0xbd, 0x07, 0xd4, 0xe3, 0xee, - 0x7d, 0x43, 0xe5, 0x2b, 0x8f, 0x0f, 0x17, 0x5e, 0xb1, 0x11, 0xd1, 0x12, 0x1e, 0xd9, 0x16, 0x95, - 0xa8, 0xd6, 0x3e, 0xc7, 0x55, 0xfa, 0xd0, 0x9f, 0x29, 0xf9, 0x06, 0x9c, 0x5c, 0xb2, 0x7d, 0x5a, - 0x6d, 0xfb, 0xb4, 0xed, 0x3b, 0x81, 0xf3, 0x90, 0x8a, 0x41, 0xc5, 0xcd, 0xaf, 0x80, 0x89, 0xeb, - 0x8d, 0xba, 0xed, 0xb3, 0x0f, 0x33, 0x44, 0xb1, 0xc4, 0xa4, 0x28, 0xd5, 0xf4, 0xe0, 0x62, 0x1c, - 0x66, 0xa0, 0x18, 0x1f, 0x76, 0xf2, 0x35, 0x18, 0xe5, 0x2e, 0x09, 0xd4, 0xdf, 0x13, 0x81, 0x6e, - 0xf2, 0x86, 0x3b, 0x84, 0xeb, 0x44, 0x22, 0x34, 0x81, 0x3b, 0x3c, 0x50, 0xf5, 0xbe, 0x16, 0x43, - 0x13, 0x24, 0x11, 0x69, 0xc0, 0x38, 0x1f, 0x59, 0x8a, 0xd9, 0x49, 0x84, 0x67, 0xda, 0x0b, 0xea, - 0x4a, 0x16, 0x45, 0x31, 0xfe, 0x68, 0xf2, 0x16, 0xf3, 0xc7, 0x11, 0xb4, 0x2a, 0x34, 0xae, 0x65, - 0x80, 0x82, 0x24, 0x34, 0x4e, 0xc3, 0xa9, 0x1e, 0x6d, 0x36, 0x1e, 0xe2, 0x35, 0x58, 0x8f, 0x1a, - 0xc9, 0xd7, 0x60, 0x16, 0x09, 0x97, 0xdc, 0x76, 0x9b, 0xd6, 0x03, 0x14, 0x1d, 0xd2, 0x74, 0x94, - 0xe3, 0x77, 0xad, 0xbc, 0xbf, 0xf5, 0x10, 0xc1, 0x8a, 0x5b, 0x90, 0x52, 0x39, 0x18, 0x3f, 0x9b, - 0x85, 0x39, 0x21, 0x8d, 0x4c, 0x5a, 0x77, 0xbd, 0xc6, 0xb3, 0xbf, 0xfb, 0x2d, 0x6b, 0xbb, 0xdf, - 0x85, 0x30, 0xb2, 0x39, 0xad, 0x93, 0x7d, 0x36, 0xbf, 0x5f, 0xce, 0xc0, 0xd9, 0x7e, 0x44, 0x6c, - 0x74, 0xc2, 0x6c, 0x2c, 0xa3, 0x89, 0xac, 0x2b, 0x1d, 0x98, 0xc1, 0x09, 0x5d, 0xda, 0xa3, 0xf5, - 0x07, 0xfe, 0x8a, 0xeb, 0x07, 0xe8, 0x1c, 0x9b, 0xed, 0x71, 0x51, 0xf3, 0x5a, 0xea, 0x45, 0xcd, - 0x49, 0xbe, 0xca, 0xea, 0xc8, 0x83, 0xe7, 0x8b, 0x79, 0x40, 0x0f, 0x7c, 0x33, 0x8d, 0x35, 0x3a, - 0x39, 0x96, 0xba, 0xc1, 0xde, 0x86, 0x47, 0x77, 0xa8, 0x47, 0xdb, 0x75, 0xfa, 0x39, 0x73, 0x72, - 0xd4, 0x3b, 0x37, 0x90, 0xb5, 0xe1, 0x5f, 0x9b, 0x80, 0xd9, 0x34, 0x32, 0x36, 0x2e, 0xca, 0x01, - 0x37, 0xfe, 0x06, 0xce, 0x0f, 0x67, 0x60, 0xbc, 0x46, 0xeb, 0x6e, 0xbb, 0x71, 0x13, 0xaf, 0xc3, - 0xc5, 0xe8, 0x58, 0x7c, 0x83, 0x67, 0x70, 0x6b, 0x27, 0x76, 0x4f, 0xfe, 0xc9, 0xe1, 0xc2, 0xfb, - 0x83, 0x9d, 0x2b, 0xeb, 0x2e, 0x46, 0x27, 0x07, 0x98, 0xa3, 0x35, 0xac, 0x02, 0x2d, 0xdb, 0x5a, - 0xa5, 0xa4, 0x0c, 0x13, 0xe2, 0x73, 0x75, 0xd5, 0x64, 0x3c, 0x3c, 0xf8, 0x5b, 0x16, 0x24, 0x12, - 0xa8, 0x69, 0x24, 0xe4, 0x3a, 0xe4, 0xee, 0x2d, 0xde, 0x14, 0x73, 0x20, 0xb3, 0xdc, 0xde, 0x5b, - 0xbc, 0x89, 0xa6, 0x2b, 0x76, 0x1c, 0x98, 0xe8, 0x2e, 0x6a, 0x37, 0xd4, 0xf7, 0x16, 0x6f, 0x92, - 0xef, 0x87, 0x13, 0x15, 0xc7, 0x17, 0x55, 0x70, 0x77, 0xdb, 0x06, 0x06, 0x99, 0x0c, 0xf7, 0x58, - 0xbd, 0x5f, 0x4a, 0x5d, 0xbd, 0x2f, 0x34, 0x42, 0x26, 0x16, 0xf7, 0xe5, 0x6d, 0xc4, 0x93, 0x0e, - 0xa5, 0xd7, 0x43, 0x3e, 0x86, 0x49, 0x34, 0xbd, 0xa2, 0x07, 0x32, 0xe6, 0x79, 0x1c, 0xe9, 0x51, - 0xf3, 0x17, 0x52, 0x6b, 0x9e, 0x47, 0x4b, 0xae, 0x85, 0x7e, 0xcc, 0x98, 0x13, 0x52, 0x3b, 0xa1, - 0x6b, 0x9c, 0xc9, 0x6d, 0x98, 0x12, 0xaa, 0xd2, 0xfa, 0xce, 0xe6, 0x1e, 0xad, 0xd8, 0x07, 0xe2, - 0x72, 0x19, 0x4f, 0x5f, 0x42, 0xbf, 0xb2, 0xdc, 0x1d, 0x2b, 0xd8, 0xa3, 0x56, 0xc3, 0xd6, 0x94, - 0x8a, 0x18, 0x21, 0xf9, 0x5e, 0x18, 0x5b, 0x75, 0xeb, 0x4c, 0x4b, 0x46, 0xc9, 0xc0, 0xef, 0x9b, - 0x3f, 0xc0, 0x57, 0x56, 0x38, 0x38, 0xa6, 0xfa, 0x7c, 0x72, 0xb8, 0xf0, 0xd6, 0x71, 0x17, 0x8d, - 0x52, 0x81, 0xa9, 0xd6, 0x46, 0x96, 0xa0, 0xb0, 0x45, 0xb7, 0x59, 0x6f, 0xe3, 0x2f, 0x30, 0x48, - 0xb0, 0x70, 0x27, 0x11, 0xbf, 0x34, 0x77, 0x12, 0x01, 0x23, 0x1e, 0x4c, 0xe3, 0xf8, 0x6c, 0xd8, - 0xbe, 0xbf, 0xef, 0x7a, 0x0d, 0x4c, 0xb5, 0xdb, 0xeb, 0x2a, 0x7b, 0x31, 0x75, 0xf0, 0xcf, 0xf2, - 0xc1, 0xef, 0x28, 0x1c, 0x54, 0x65, 0x2f, 0xc1, 0x9e, 0x7c, 0x13, 0x26, 0x4d, 0xfa, 0xad, 0xae, - 0xe3, 0xd1, 0xbb, 0x37, 0x4b, 0xf8, 0x55, 0x8e, 0x6b, 0xa1, 0x3a, 0x7a, 0x21, 0xd7, 0x28, 0x3d, - 0x0e, 0x93, 0xd6, 0x22, 0xab, 0xb5, 0x63, 0xeb, 0xb7, 0x05, 0x2a, 0x09, 0xd9, 0x80, 0xb1, 0x0a, - 0x7d, 0xe8, 0xd4, 0x29, 0x86, 0x13, 0x08, 0x57, 0xbe, 0x30, 0x85, 0x7c, 0x54, 0xc2, 0xed, 0x26, - 0x0d, 0x04, 0xf0, 0xe0, 0x04, 0xdd, 0x5b, 0x2c, 0x44, 0x24, 0x37, 0x20, 0x57, 0xad, 0x6c, 0x08, - 0x4f, 0x3e, 0xe9, 0xa1, 0x5f, 0x6d, 0x6c, 0xc8, 0x84, 0xdb, 0xe8, 0xfc, 0xe1, 0x34, 0x34, 0x3f, - 0xc0, 0x6a, 0x65, 0x83, 0xec, 0xc0, 0x04, 0x0e, 0xc0, 0x0a, 0xb5, 0xf9, 0xd8, 0x4e, 0xf5, 0x18, - 0xdb, 0x2b, 0xa9, 0x63, 0x3b, 0xc7, 0xc7, 0x76, 0x4f, 0x50, 0x6b, 0x19, 0x84, 0x55, 0xb6, 0x4c, - 0xfd, 0x14, 0x59, 0xcd, 0x65, 0xde, 0xdb, 0xcd, 0x55, 0xbc, 0xdc, 0x16, 0xea, 0xa7, 0x4c, 0x82, - 0x1e, 0x26, 0xe2, 0xed, 0xe9, 0x28, 0x9c, 0xe4, 0x43, 0xbe, 0x02, 0xf9, 0xf5, 0x07, 0x81, 0x3d, - 0x37, 0xad, 0x8d, 0x23, 0x03, 0xc9, 0xee, 0xa3, 0xc5, 0xd0, 0x7d, 0xa0, 0xa5, 0xa5, 0x40, 0x1a, - 0xb2, 0x08, 0x23, 0x1b, 0xd5, 0xfb, 0xb5, 0xa6, 0x1b, 0xcc, 0x91, 0xf0, 0x4c, 0x43, 0x3a, 0xce, - 0x43, 0xcb, 0x6f, 0xba, 0xfa, 0xcb, 0x08, 0x12, 0x91, 0x4d, 0xdf, 0x8a, 0xed, 0x35, 0xf6, 0x6d, - 0x0f, 0xe3, 0xc0, 0x66, 0xb4, 0x6a, 0x95, 0x12, 0x3e, 0x7d, 0x7b, 0x02, 0x10, 0x0b, 0x0e, 0x53, - 0x59, 0x90, 0xef, 0x81, 0xd3, 0xbe, 0xb3, 0xdb, 0xb6, 0x83, 0xae, 0x47, 0x2d, 0xbb, 0xb9, 0xeb, - 0x7a, 0x4e, 0xb0, 0xd7, 0xb2, 0xfc, 0xae, 0x13, 0xd0, 0xb9, 0x59, 0xed, 0xdd, 0xb4, 0x9a, 0xc4, - 0x2b, 0x49, 0xb4, 0x1a, 0xc3, 0x32, 0x4f, 0xf9, 0xe9, 0x05, 0xc2, 0xd2, 0x30, 0x2d, 0x96, 0xa0, - 0x18, 0xb6, 0xbb, 0x37, 0x4b, 0xc6, 0x7f, 0x94, 0x41, 0x61, 0x4c, 0x5e, 0xc1, 0xa8, 0xf8, 0xf0, - 0xf2, 0x18, 0x6d, 0xa6, 0x76, 0x27, 0x96, 0x87, 0x92, 0xa3, 0x90, 0xd7, 0x60, 0xf8, 0xa6, 0x5d, - 0xa7, 0x81, 0xbc, 0x34, 0x42, 0xe4, 0x1d, 0x84, 0xa8, 0x06, 0x56, 0x8e, 0xc3, 0xf4, 0x44, 0xbe, - 0x48, 0x4b, 0xd1, 0x73, 0x77, 0x4b, 0x25, 0x79, 0x67, 0x84, 0x7a, 0xa2, 0x58, 0xdc, 0xca, 0x7b, - 0x78, 0x31, 0xff, 0xca, 0x54, 0x0e, 0xc6, 0x9f, 0x64, 0x22, 0xe9, 0x42, 0x5e, 0x86, 0xbc, 0xb9, - 0x11, 0xb6, 0x9f, 0xc7, 0x5b, 0xc5, 0x9a, 0x8f, 0x08, 0xe4, 0x43, 0x38, 0xa1, 0xf0, 0x49, 0x38, - 0x7b, 0xbe, 0x84, 0xe1, 0x40, 0x4a, 0x4b, 0xd2, 0x3d, 0x3e, 0xd3, 0x79, 0xa0, 0x52, 0x1c, 0x15, - 0x54, 0x68, 0xdb, 0xe1, 0xbc, 0x95, 0xce, 0xaa, 0xbc, 0x1b, 0x88, 0x10, 0xef, 0x6c, 0x1a, 0x07, - 0x1e, 0x0d, 0x64, 0xfc, 0x46, 0x46, 0x93, 0x1a, 0xe1, 0xbb, 0x62, 0x99, 0x23, 0xde, 0x15, 0x7b, - 0x13, 0xa0, 0xd4, 0x0d, 0xdc, 0xe5, 0xb6, 0xe7, 0x36, 0xb9, 0xe5, 0x42, 0xa4, 0x62, 0x45, 0x7b, - 0x2c, 0x45, 0xb0, 0x16, 0xb4, 0x10, 0x22, 0xa7, 0xfa, 0xc5, 0xe6, 0x3e, 0xad, 0x5f, 0xac, 0xf1, - 0x7b, 0x19, 0xed, 0xbb, 0x61, 0xda, 0x9e, 0xfc, 0xf4, 0x14, 0xb7, 0x85, 0xe4, 0xa7, 0x17, 0x7d, - 0x78, 0xff, 0x6a, 0x06, 0x4e, 0x72, 0x07, 0xd3, 0xb5, 0x6e, 0x6b, 0x9b, 0x7a, 0xf7, 0xed, 0xa6, - 0xd3, 0xe0, 0x31, 0x6f, 0x5c, 0x91, 0xbd, 0x94, 0xfc, 0x08, 0xd3, 0xf1, 0xf9, 0xe1, 0x90, 0x3b, - 0xbc, 0x5a, 0x6d, 0x2c, 0xb4, 0x1e, 0x86, 0xa5, 0xea, 0xe1, 0x30, 0x9d, 0xde, 0xf8, 0x95, 0x0c, - 0xbc, 0x70, 0x64, 0x2d, 0xe4, 0x2a, 0x8c, 0xc8, 0x1c, 0xb8, 0x19, 0x1c, 0x78, 0x74, 0xf6, 0x4a, - 0xe6, 0xbf, 0x95, 0x58, 0xe4, 0xeb, 0x70, 0x42, 0x65, 0xb5, 0xe9, 0xd9, 0x8e, 0x9a, 0x69, 0x36, - 0xa5, 0xd5, 0x01, 0x43, 0x89, 0x6b, 0x5d, 0xe9, 0x4c, 0x8c, 0xff, 0x2b, 0xa3, 0xbc, 0x34, 0xf8, - 0x8c, 0xea, 0xe2, 0x37, 0x34, 0x5d, 0x5c, 0xe6, 0x23, 0x0a, 0x7b, 0xc5, 0xca, 0x52, 0xcf, 0x4f, - 0x53, 0x8a, 0xd3, 0x22, 0x02, 0xbe, 0x93, 0x85, 0xb1, 0x7b, 0x3e, 0xf5, 0xf8, 0xe5, 0xe9, 0xe7, - 0x2b, 0xef, 0x4c, 0xd8, 0xaf, 0x81, 0x32, 0x83, 0xfc, 0x51, 0x06, 0x8d, 0xea, 0x2a, 0x05, 0x1b, - 0x0d, 0xe5, 0x75, 0x11, 0x1c, 0x0d, 0x7c, 0x57, 0x04, 0xa1, 0x3c, 0x7b, 0xc8, 0xaa, 0xfe, 0xd0, - 0x10, 0xbe, 0x36, 0xb5, 0x4a, 0xde, 0x87, 0xa1, 0x7b, 0x68, 0x22, 0xd4, 0xe3, 0x9b, 0x43, 0xfe, - 0x58, 0xc8, 0x85, 0x74, 0x97, 0xfd, 0xa9, 0xee, 0x31, 0x58, 0x46, 0x6a, 0x30, 0xb2, 0xe4, 0x51, - 0x7c, 0x37, 0x30, 0x3f, 0x78, 0x74, 0x5e, 0x9d, 0x93, 0xc4, 0xa3, 0xf3, 0x04, 0x27, 0xe3, 0x67, - 0xb2, 0x40, 0xa2, 0x3e, 0x62, 0x92, 0x7c, 0xff, 0x99, 0x9d, 0xf4, 0xf7, 0xb4, 0x49, 0x3f, 0x97, - 0x98, 0x74, 0xde, 0xbd, 0x81, 0xe6, 0xfe, 0xb7, 0x32, 0x70, 0x32, 0x9d, 0x90, 0x5c, 0x80, 0xe1, - 0xf5, 0xcd, 0x0d, 0x19, 0x22, 0x2f, 0xba, 0xe2, 0x76, 0xf0, 0xcc, 0x6f, 0x8a, 0x22, 0xf2, 0x3a, - 0x0c, 0x7f, 0xd5, 0x5c, 0x62, 0xfb, 0x90, 0x92, 0xcd, 0xf5, 0x5b, 0x9e, 0x55, 0xd7, 0xb7, 0x22, - 0x81, 0xa4, 0xce, 0x6d, 0xee, 0xa9, 0xcd, 0xed, 0x4f, 0x64, 0x61, 0xaa, 0x54, 0xaf, 0x53, 0xdf, - 0x67, 0x4a, 0x0e, 0xf5, 0x83, 0x67, 0x76, 0x62, 0xd3, 0x83, 0xdf, 0xb5, 0xbe, 0x0d, 0x34, 0xab, - 0xbf, 0x93, 0x81, 0x13, 0x92, 0xea, 0xa1, 0x43, 0xf7, 0x37, 0xf7, 0x3c, 0xea, 0xef, 0xb9, 0xcd, - 0xc6, 0xc0, 0x29, 0xa3, 0x99, 0xa2, 0x87, 0x79, 0x20, 0xd5, 0x9b, 0xf4, 0x1d, 0x84, 0x68, 0x8a, - 0x1e, 0xcf, 0x15, 0x79, 0x15, 0x46, 0x4a, 0x9d, 0x8e, 0xe7, 0x3e, 0xe4, 0x9f, 0xfd, 0x84, 0x08, - 0x56, 0xe4, 0x20, 0x2d, 0xb8, 0x91, 0x83, 0x58, 0x33, 0x2a, 0xb4, 0xcd, 0xb3, 0xf5, 0x4c, 0xf0, - 0x66, 0x34, 0x68, 0x5b, 0xd5, 0x8f, 0xb1, 0xdc, 0xa8, 0x01, 0xd9, 0xf0, 0xdc, 0x96, 0x1b, 0xd0, - 0x06, 0xef, 0x0f, 0xc6, 0x84, 0x1e, 0x99, 0x66, 0x64, 0xd3, 0x09, 0x9a, 0x5a, 0x9a, 0x91, 0x80, - 0x01, 0x4c, 0x0e, 0x37, 0xfe, 0x8f, 0x21, 0x18, 0x57, 0x47, 0x87, 0x18, 0x3c, 0x0f, 0xac, 0xeb, - 0xa9, 0x81, 0xc9, 0x36, 0x42, 0x4c, 0x51, 0x12, 0x45, 0xf5, 0x67, 0x8f, 0x8c, 0xea, 0xdf, 0x82, - 0x89, 0x0d, 0xcf, 0xed, 0xb8, 0x3e, 0x6d, 0xf0, 0xf7, 0x64, 0xb9, 0x28, 0x9c, 0x51, 0xce, 0x8f, - 0x6c, 0x22, 0xf1, 0x0e, 0x12, 0xad, 0x27, 0x1d, 0x81, 0x6d, 0xc5, 0x5f, 0x9b, 0xd5, 0xf9, 0x70, - 0xf7, 0x06, 0xdb, 0x17, 0x49, 0xb9, 0x42, 0xf7, 0x06, 0x06, 0xd1, 0xdd, 0x1b, 0x18, 0x44, 0xfd, - 0xd6, 0x86, 0x9e, 0xd6, 0xb7, 0x46, 0x7e, 0x26, 0x03, 0x63, 0xa5, 0x76, 0x5b, 0x64, 0x0b, 0x38, - 0x22, 0x50, 0xf2, 0xeb, 0xc2, 0xc3, 0xe1, 0xad, 0x4f, 0xe5, 0xe1, 0x80, 0x7a, 0x8b, 0x8f, 0x9a, - 0x6a, 0x54, 0xa1, 0x7a, 0x82, 0x52, 0xda, 0x41, 0xde, 0x82, 0x62, 0xb8, 0xc8, 0xab, 0xed, 0x06, - 0x7d, 0x44, 0xfd, 0xb9, 0x91, 0xf3, 0xb9, 0x4b, 0x13, 0x22, 0x1d, 0x9f, 0xaa, 0x99, 0xc6, 0x11, - 0xc9, 0x26, 0x80, 0x1d, 0xae, 0xae, 0xd8, 0x4b, 0x3e, 0xc9, 0xe5, 0x27, 0xb4, 0x67, 0xfc, 0x8d, - 0x97, 0x48, 0xaa, 0xf6, 0x1c, 0xf1, 0x21, 0x2d, 0x98, 0xe2, 0xcf, 0xe8, 0xe0, 0xf3, 0xba, 0x98, - 0x75, 0x16, 0x8e, 0x9c, 0x87, 0x97, 0x85, 0x1d, 0xec, 0x8c, 0x78, 0x9c, 0x07, 0x5f, 0xec, 0xb5, - 0x52, 0x52, 0xd0, 0xc6, 0x79, 0xf3, 0xe4, 0x87, 0xe6, 0xa9, 0x64, 0x7b, 0xf9, 0xa2, 0xff, 0x89, - 0x0c, 0x9c, 0x54, 0x17, 0x7d, 0xad, 0xbb, 0xdd, 0x72, 0xf0, 0x2c, 0x48, 0xae, 0xc0, 0xa8, 0x58, - 0x93, 0xe1, 0x21, 0x2a, 0x99, 0x3c, 0x37, 0x42, 0x21, 0xcb, 0x6c, 0x19, 0x32, 0x1e, 0x42, 0xeb, - 0x9e, 0x89, 0xc9, 0x29, 0x56, 0x14, 0x3d, 0xd1, 0xe6, 0xe1, 0x6f, 0x7d, 0x7d, 0x32, 0x88, 0xf1, - 0x2e, 0x4c, 0xeb, 0x33, 0x51, 0xa3, 0x01, 0xb9, 0x0c, 0x23, 0x72, 0xfa, 0x32, 0xe9, 0xd3, 0x27, - 0xcb, 0x8d, 0x2d, 0x20, 0x09, 0x7a, 0x1f, 0x5d, 0x91, 0x68, 0x20, 0x5d, 0xe5, 0xe4, 0x45, 0x60, - 0x02, 0x31, 0x7c, 0xb3, 0x7c, 0x4c, 0xf3, 0x8d, 0x65, 0xa4, 0xc6, 0x9f, 0x4c, 0xc2, 0x4c, 0x8a, - 0xcc, 0x3d, 0x42, 0x27, 0x5a, 0xd0, 0x05, 0xc4, 0x68, 0x18, 0x67, 0x2d, 0xc5, 0xc2, 0xbb, 0xf2, - 0x79, 0xe9, 0x3e, 0xe2, 0xa0, 0xdf, 0x9b, 0xd3, 0x9f, 0x85, 0x5e, 0xa4, 0xa6, 0x42, 0x18, 0x7a, - 0x6a, 0xa9, 0x10, 0xca, 0x30, 0x21, 0x7a, 0x25, 0xc4, 0xd5, 0x70, 0x64, 0x29, 0xf6, 0x78, 0x81, - 0x95, 0x10, 0x5b, 0x3a, 0x09, 0xe7, 0xe1, 0xbb, 0xcd, 0x87, 0x54, 0xf0, 0x18, 0x51, 0x79, 0x60, - 0x41, 0x2a, 0x0f, 0x85, 0x84, 0xfc, 0x7b, 0xf8, 0x12, 0x08, 0x42, 0x54, 0x99, 0x55, 0xe8, 0x27, - 0xb3, 0x1a, 0x4f, 0x47, 0x66, 0x9d, 0x93, 0x6d, 0x4c, 0x97, 0x5d, 0x29, 0xcd, 0x22, 0xbf, 0x94, - 0x81, 0x69, 0x1e, 0x8f, 0xaf, 0x36, 0xb6, 0x6f, 0x8c, 0x75, 0xfd, 0xe9, 0x34, 0xf6, 0xac, 0xc8, - 0x80, 0x9f, 0xde, 0xd6, 0x64, 0xa3, 0xc8, 0xf7, 0x00, 0x84, 0x5f, 0x94, 0x3f, 0x07, 0xf8, 0xa9, - 0x9d, 0x4d, 0x91, 0x02, 0x21, 0x52, 0x94, 0xad, 0x37, 0x08, 0xe9, 0xb4, 0xf7, 0x5f, 0x42, 0x28, - 0xf9, 0x7e, 0x98, 0x65, 0xdf, 0x4b, 0x08, 0x11, 0xd9, 0x43, 0xe6, 0xc6, 0xb0, 0x96, 0x2f, 0xf6, - 0xd6, 0x89, 0xae, 0xa4, 0x91, 0xf1, 0xdc, 0x82, 0xd1, 0x1b, 0x7a, 0x81, 0x1a, 0x68, 0x9c, 0x5a, - 0x11, 0x26, 0xe5, 0xc1, 0xd6, 0xf3, 0x8c, 0xba, 0x3d, 0xe4, 0xdb, 0x69, 0xf9, 0x2d, 0x70, 0xf9, - 0xe6, 0xeb, 0x81, 0x72, 0x08, 0x22, 0x5f, 0x05, 0x12, 0x06, 0xb2, 0x73, 0x18, 0x95, 0xd9, 0x76, - 0xb9, 0xd9, 0x38, 0x0a, 0x88, 0xf7, 0x64, 0xb1, 0xba, 0x48, 0x92, 0xc4, 0x84, 0xc2, 0xac, 0xe8, - 0x34, 0x83, 0xca, 0x67, 0x3a, 0xfc, 0xb9, 0x49, 0x2d, 0x37, 0x4b, 0x54, 0x12, 0x3d, 0xb6, 0xa7, - 0xbc, 0xf5, 0xa1, 0x99, 0x9c, 0xd2, 0xd8, 0x91, 0x1b, 0x30, 0x8a, 0xd1, 0x6a, 0x2b, 0xd2, 0xc1, - 0x4a, 0x38, 0x7b, 0x60, 0x5c, 0x9b, 0xb5, 0xa7, 0xbb, 0x49, 0x45, 0xa8, 0xec, 0x38, 0x50, 0xf1, - 0x0e, 0xcc, 0x6e, 0x1b, 0x8d, 0xbb, 0xc2, 0xde, 0xd1, 0xf0, 0x0e, 0x2c, 0xaf, 0xab, 0x87, 0x33, - 0x22, 0x12, 0xf9, 0x26, 0x8c, 0xdd, 0xb5, 0x1f, 0x49, 0xdb, 0xae, 0x30, 0xe0, 0x0e, 0xf4, 0x4c, - 0x7c, 0xcb, 0x7e, 0x64, 0x35, 0xba, 0xf1, 0xcc, 0x86, 0xfc, 0x99, 0x78, 0x85, 0x25, 0xf9, 0x08, - 0x40, 0xb1, 0x38, 0x93, 0x23, 0x2b, 0x78, 0x41, 0x66, 0x1c, 0x4a, 0xb5, 0x44, 0x23, 0x7f, 0x85, - 0x61, 0x4c, 0x73, 0x98, 0xfd, 0xec, 0x34, 0x87, 0x13, 0x9f, 0x9d, 0xe6, 0x30, 0xbf, 0x0d, 0xa7, - 0x7b, 0x7e, 0x3a, 0x29, 0x89, 0x20, 0xaf, 0xea, 0x89, 0x20, 0x4f, 0xf7, 0xda, 0x62, 0x7d, 0x3d, - 0x41, 0xf3, 0x4c, 0x71, 0xb6, 0xb7, 0x76, 0xf2, 0xdd, 0x6c, 0x6c, 0xcb, 0x15, 0x07, 0x0b, 0x9e, - 0xd0, 0xbf, 0x97, 0x4e, 0x92, 0xc5, 0xc7, 0xd7, 0xf8, 0xa6, 0x9c, 0x8d, 0x0e, 0x34, 0xb1, 0xf7, - 0x6a, 0xf9, 0xf6, 0xfc, 0xa4, 0xbb, 0xef, 0xdb, 0x30, 0xc9, 0x9f, 0x5d, 0xba, 0x43, 0x0f, 0xf6, - 0x5d, 0xaf, 0x21, 0x1f, 0x25, 0x45, 0x1d, 0x3c, 0xf1, 0xd8, 0x61, 0x0c, 0x97, 0x54, 0x64, 0x00, - 0xd4, 0x10, 0xd6, 0x7e, 0x3a, 0x55, 0x8a, 0x31, 0x84, 0x7e, 0xb1, 0x51, 0xe4, 0x8d, 0x50, 0x51, - 0xa3, 0x9e, 0x9a, 0xa6, 0xd9, 0x93, 0xc0, 0x14, 0x7d, 0x8d, 0x7a, 0xc6, 0x1f, 0xe4, 0x80, 0xf0, - 0x9a, 0x96, 0xec, 0x8e, 0x8d, 0xe1, 0x81, 0x0e, 0xa6, 0xb9, 0x28, 0x0a, 0x1c, 0x7b, 0xbb, 0x49, - 0xd5, 0x1c, 0x31, 0xc2, 0xa1, 0x35, 0x2c, 0xb3, 0xe2, 0x07, 0x9d, 0x04, 0x61, 0x0f, 0x51, 0x97, - 0x7d, 0x12, 0x51, 0xf7, 0x4d, 0x38, 0x53, 0xea, 0xe0, 0xfb, 0x6d, 0xb2, 0x96, 0x9b, 0xae, 0x27, - 0x85, 0x94, 0x16, 0x78, 0x62, 0x87, 0x68, 0x89, 0x96, 0xf6, 0x63, 0xa1, 0xe8, 0x29, 0x6c, 0x5d, - 0x76, 0x02, 0x35, 0x90, 0x59, 0xea, 0x29, 0x1d, 0x2c, 0x49, 0xd1, 0x53, 0x38, 0x89, 0xe4, 0xe1, - 0x78, 0x52, 0x4f, 0xc1, 0x87, 0x09, 0x22, 0x1e, 0x8e, 0x47, 0x7b, 0xe8, 0x3a, 0x21, 0x09, 0x79, - 0x1b, 0xc6, 0x4a, 0xdd, 0xc0, 0x15, 0x8c, 0x85, 0x27, 0x76, 0xe4, 0x33, 0x2d, 0x9a, 0xa2, 0x1d, - 0x7d, 0x22, 0x74, 0xe3, 0x8f, 0x73, 0x70, 0x3a, 0x39, 0xbd, 0xa2, 0x34, 0xfc, 0x3e, 0x32, 0x47, - 0x7c, 0x1f, 0x69, 0xab, 0x81, 0x5f, 0x16, 0x3c, 0xb5, 0xd5, 0xc0, 0x9f, 0x81, 0xfb, 0x94, 0xab, - 0xa1, 0x06, 0x63, 0xea, 0x7e, 0x97, 0xff, 0xb4, 0xfb, 0x9d, 0xca, 0x85, 0x1d, 0xea, 0x79, 0xfc, - 0xf6, 0x50, 0x74, 0x75, 0x14, 0x0f, 0xdd, 0xe6, 0x18, 0xe4, 0x5f, 0x81, 0xf3, 0x5c, 0x26, 0xc5, - 0x3b, 0x5b, 0x3e, 0x90, 0x1c, 0xc5, 0xc4, 0x2d, 0x3e, 0x3e, 0x5c, 0xb8, 0xc2, 0x4d, 0x25, 0x56, - 0x62, 0xd8, 0xac, 0xed, 0x03, 0x4b, 0xb6, 0x4c, 0xa9, 0xe4, 0x48, 0xde, 0xf8, 0xf6, 0x9b, 0xf2, - 0x2e, 0xd7, 0xeb, 0x69, 0x21, 0x2a, 0x3c, 0xd7, 0x29, 0x07, 0xeb, 0xd1, 0x29, 0xd2, 0x1c, 0x96, - 0x4d, 0x35, 0x87, 0x49, 0x7b, 0x4a, 0x2e, 0xd5, 0x9e, 0x52, 0x81, 0xa9, 0x5a, 0x77, 0x5b, 0xd6, - 0x8d, 0x88, 0x79, 0x2d, 0xca, 0x2e, 0xad, 0x43, 0x71, 0x12, 0xe3, 0x47, 0xb3, 0x30, 0xbe, 0xd1, - 0xec, 0xee, 0x3a, 0xed, 0x8a, 0x1d, 0xd8, 0xcf, 0xac, 0x85, 0xee, 0x4d, 0xcd, 0x42, 0x17, 0x46, - 0x62, 0x85, 0x1d, 0x1b, 0xc8, 0x3c, 0xf7, 0xd3, 0x19, 0x98, 0x8a, 0x48, 0xf8, 0x3e, 0xbb, 0x02, - 0x79, 0xf6, 0x43, 0x9c, 0x5b, 0xcf, 0x27, 0x18, 0xf3, 0xc7, 0x60, 0xc2, 0xbf, 0x84, 0xcd, 0x4c, - 0x7f, 0x69, 0x01, 0x39, 0xcc, 0x7f, 0x09, 0x46, 0x23, 0xb6, 0xc7, 0x79, 0x04, 0xe6, 0x57, 0x33, - 0x50, 0x8c, 0xf7, 0x84, 0xdc, 0x81, 0x11, 0xc6, 0xc9, 0xa1, 0xf2, 0x48, 0xfd, 0x62, 0x8f, 0x3e, - 0x5f, 0x11, 0x68, 0xbc, 0x79, 0x38, 0xf8, 0x94, 0x43, 0x4c, 0xc9, 0x61, 0xde, 0x84, 0x71, 0x15, - 0x2b, 0xa5, 0x75, 0xaf, 0xe9, 0xca, 0xc5, 0xc9, 0xf4, 0x71, 0xd0, 0x9e, 0xae, 0xd1, 0x5a, 0x2d, - 0xf4, 0x86, 0x8b, 0xda, 0xe2, 0xc2, 0xb1, 0x8a, 0xad, 0x1b, 0xbe, 0xcc, 0x16, 0xa3, 0xf4, 0xcb, - 0xea, 0x3a, 0x4b, 0x59, 0xd0, 0x21, 0x1e, 0x79, 0x0d, 0x86, 0x79, 0x7d, 0xea, 0x13, 0x0e, 0x1d, - 0x84, 0xa8, 0x2a, 0x2e, 0xc7, 0x31, 0xfe, 0x56, 0x0e, 0x4e, 0x46, 0xcd, 0xbb, 0xd7, 0x69, 0xd8, - 0x01, 0xdd, 0xb0, 0x3d, 0xbb, 0xe5, 0x1f, 0xf1, 0x05, 0x5c, 0x4a, 0x34, 0x0d, 0x53, 0xfa, 0xcb, - 0xa6, 0x29, 0x0d, 0x32, 0x62, 0x0d, 0x42, 0xf3, 0x25, 0x6f, 0x90, 0x6c, 0x06, 0xb9, 0x03, 0xb9, - 0x1a, 0x0d, 0x84, 0xd8, 0xbc, 0x98, 0x18, 0x55, 0xb5, 0x5d, 0x57, 0x6a, 0x34, 0xe0, 0x93, 0xc8, - 0xf3, 0x8a, 0x50, 0x2d, 0xaf, 0x63, 0x8d, 0x06, 0x64, 0x0b, 0x86, 0x97, 0x1f, 0x75, 0x68, 0x3d, - 0x10, 0x4f, 0x18, 0x5d, 0xee, 0xcf, 0x8f, 0xe3, 0x2a, 0x2f, 0x18, 0x51, 0x04, 0xa8, 0x83, 0xc5, - 0x51, 0xe6, 0x6f, 0x40, 0x41, 0x56, 0x7e, 0x9c, 0x95, 0x3b, 0xff, 0x26, 0x8c, 0x29, 0x95, 0x1c, - 0x6b, 0xd1, 0xff, 0x3c, 0x93, 0xab, 0x6e, 0x53, 0xbe, 0x7a, 0xb4, 0x9c, 0x50, 0xf3, 0x32, 0x51, - 0x3c, 0x30, 0x57, 0xf3, 0xac, 0x07, 0xa2, 0xa8, 0x8f, 0xbe, 0x57, 0x85, 0xa9, 0xda, 0x03, 0xa7, - 0x13, 0xa5, 0xd7, 0xd3, 0x36, 0x53, 0xcc, 0x47, 0x2f, 0xce, 0xdc, 0xf1, 0xcd, 0x34, 0x4e, 0x67, - 0xfc, 0x59, 0x06, 0x86, 0xd9, 0x5f, 0xf7, 0x6f, 0x3c, 0xa3, 0x22, 0xf3, 0xba, 0x26, 0x32, 0xa7, - 0x95, 0x0c, 0xb7, 0x28, 0x38, 0x6e, 0x1c, 0x21, 0x2c, 0x0f, 0xc5, 0x04, 0x71, 0x64, 0x72, 0x0b, - 0x46, 0x84, 0x57, 0x8f, 0x70, 0xbf, 0x56, 0x53, 0xe6, 0x4a, 0x7f, 0x9f, 0xf0, 0x70, 0xee, 0x76, - 0xe2, 0xd6, 0x0c, 0x49, 0xcd, 0x54, 0x72, 0x99, 0xe8, 0x50, 0x7b, 0x2b, 0xcf, 0xc5, 0xd8, 0x36, - 0x9e, 0xf0, 0x55, 0x79, 0xdd, 0xb2, 0x47, 0xd2, 0x80, 0x92, 0xb8, 0xc8, 0xc8, 0xf5, 0x63, 0x72, - 0x52, 0x3e, 0x25, 0x96, 0x7a, 0xc7, 0xf1, 0x87, 0x33, 0x3c, 0x4d, 0xaa, 0x6c, 0xd8, 0x3b, 0x30, - 0x7e, 0xd3, 0xf5, 0xf6, 0x6d, 0x8f, 0x27, 0xbf, 0x13, 0x9e, 0x03, 0xec, 0xe8, 0x38, 0xb1, 0xc3, - 0xe1, 0x3c, 0x7d, 0xde, 0x27, 0x87, 0x0b, 0xf9, 0xb2, 0xeb, 0x36, 0x4d, 0x0d, 0x9d, 0xac, 0xc3, - 0xc4, 0x5d, 0xfb, 0x91, 0x72, 0xe8, 0xe5, 0xc1, 0x2a, 0x97, 0xd9, 0x02, 0x66, 0xa7, 0xe6, 0xa3, - 0x5d, 0xac, 0x74, 0x7a, 0xe2, 0xc0, 0xe4, 0x86, 0xeb, 0x05, 0xa2, 0x12, 0xa7, 0xbd, 0x2b, 0x3a, - 0x9b, 0x74, 0x12, 0xbb, 0x9a, 0xea, 0x24, 0x76, 0xba, 0xe3, 0x7a, 0x81, 0xb5, 0x13, 0x92, 0x6b, - 0x09, 0x79, 0x34, 0xc6, 0xe4, 0x1d, 0x98, 0x56, 0x12, 0x8e, 0xdd, 0x74, 0xbd, 0x96, 0x2d, 0x95, - 0x72, 0xb4, 0x03, 0xa3, 0xbf, 0xc9, 0x0e, 0x82, 0xcd, 0x24, 0x26, 0xf9, 0x30, 0x2d, 0xfc, 0x67, - 0x28, 0xf2, 0x32, 0x4b, 0x09, 0xff, 0xe9, 0xe5, 0x65, 0x96, 0x0c, 0x04, 0xda, 0xed, 0xe7, 0x85, - 0x5a, 0x28, 0x5f, 0x13, 0xc7, 0xef, 0xa3, 0xbd, 0x4c, 0xc3, 0x79, 0xeb, 0xe1, 0x6d, 0xba, 0x08, - 0xb9, 0xf2, 0xc6, 0x4d, 0xbc, 0xbd, 0x90, 0x8e, 0x36, 0xed, 0x3d, 0xbb, 0x5d, 0x47, 0x65, 0x59, - 0x78, 0x7e, 0xab, 0x12, 0xb9, 0xbc, 0x71, 0x93, 0xd8, 0x30, 0xb3, 0x41, 0xbd, 0x96, 0x13, 0x7c, - 0xed, 0xda, 0x35, 0x65, 0xa2, 0x0a, 0xd8, 0xb4, 0xab, 0xa2, 0x69, 0x0b, 0x1d, 0x44, 0xb1, 0x1e, - 0x5d, 0xbb, 0x96, 0x3a, 0x1d, 0x61, 0xc3, 0xd2, 0x78, 0x31, 0xc9, 0x78, 0xd7, 0x7e, 0x14, 0x39, - 0xec, 0xfb, 0x22, 0x90, 0xf2, 0x9c, 0x5c, 0x58, 0x91, 0xb3, 0xbf, 0x26, 0x19, 0x75, 0x22, 0x76, - 0xd6, 0x89, 0x96, 0x97, 0x2f, 0x42, 0x50, 0xe6, 0xa5, 0x49, 0x47, 0x46, 0xdb, 0xaa, 0x0a, 0xbb, - 0x82, 0x4e, 0xee, 0x85, 0x27, 0x36, 0x7e, 0xe2, 0x11, 0x0f, 0x65, 0x5d, 0x55, 0x4f, 0x6c, 0xdc, - 0x90, 0xa2, 0x75, 0x6b, 0x2a, 0x3c, 0xe6, 0xf3, 0x08, 0x06, 0x53, 0xe7, 0x92, 0x3c, 0x08, 0x8e, - 0x1f, 0xff, 0x20, 0x48, 0x21, 0xbf, 0xea, 0xd6, 0x1f, 0x88, 0x2c, 0x42, 0x5f, 0x65, 0x9f, 0x7b, - 0xd3, 0xad, 0x3f, 0x78, 0x7a, 0xde, 0xb5, 0xc8, 0x9e, 0xac, 0xb1, 0xa6, 0xb2, 0x55, 0x20, 0xc6, - 0x44, 0x78, 0x6c, 0xce, 0x86, 0x27, 0x21, 0xa5, 0x8c, 0x2b, 0x3e, 0x7c, 0xd1, 0xc8, 0xa1, 0x35, - 0x75, 0x72, 0x42, 0xa1, 0x58, 0xa1, 0xfe, 0x83, 0xc0, 0xed, 0x2c, 0x35, 0x9d, 0xce, 0xb6, 0x6b, - 0x7b, 0x0d, 0xb4, 0xdd, 0xa5, 0x7d, 0xdf, 0x2f, 0xa7, 0x7e, 0xdf, 0xd3, 0x0d, 0x4e, 0x6f, 0xd5, - 0x25, 0x03, 0x33, 0xc1, 0x92, 0x7c, 0x08, 0x93, 0x6c, 0x71, 0x2f, 0x3f, 0x0a, 0x68, 0x9b, 0xcf, - 0xfc, 0x34, 0xaa, 0x0e, 0xb3, 0x4a, 0x6a, 0xf1, 0xb0, 0x90, 0xaf, 0x29, 0xfc, 0xd8, 0x69, 0x48, - 0xa0, 0x65, 0x60, 0xd2, 0x58, 0x91, 0x06, 0xcc, 0xdd, 0xb5, 0x1f, 0x29, 0xcf, 0x7b, 0x29, 0x8b, - 0x94, 0xe0, 0x02, 0xc3, 0x17, 0xd9, 0xd9, 0x02, 0x8b, 0x92, 0x7f, 0xf6, 0x58, 0xaf, 0x3d, 0x39, - 0x91, 0xef, 0x85, 0x53, 0xa2, 0x5b, 0x15, 0x7c, 0x6f, 0xc3, 0xf5, 0x0e, 0x6a, 0x7b, 0x36, 0xc6, - 0xea, 0xcc, 0x1c, 0x4f, 0x20, 0xca, 0x01, 0x6b, 0x48, 0x3e, 0x96, 0xcf, 0x19, 0x99, 0xbd, 0x6a, - 0x20, 0x1f, 0xc3, 0x24, 0xbf, 0xb2, 0x59, 0x71, 0xfd, 0x00, 0x0f, 0xf4, 0xb3, 0xc7, 0x73, 0x41, - 0xe7, 0xf7, 0x40, 0x3c, 0x68, 0x23, 0x66, 0x00, 0x88, 0x71, 0x26, 0x6f, 0xc1, 0xd8, 0x86, 0xd3, - 0xe6, 0x39, 0xd2, 0xaa, 0x1b, 0x68, 0x7a, 0x14, 0xfb, 0x4f, 0xc7, 0x69, 0x5b, 0xf2, 0x54, 0xdd, - 0x09, 0xc5, 0x85, 0x8a, 0x4d, 0xb6, 0x60, 0xac, 0x56, 0x5b, 0xb9, 0xe9, 0xb0, 0x0d, 0xb0, 0x73, - 0x30, 0x77, 0xb2, 0x47, 0x2b, 0x2f, 0xa4, 0xb6, 0x72, 0xc2, 0xf7, 0xf7, 0xf0, 0xc9, 0x64, 0xab, - 0xee, 0x76, 0x0e, 0x4c, 0x95, 0x53, 0x8a, 0x5b, 0xf6, 0xa9, 0xa7, 0xec, 0x96, 0x5d, 0x85, 0x29, - 0xc5, 0xc1, 0x12, 0x9d, 0x2b, 0xe7, 0xa2, 0x94, 0x60, 0xaa, 0x1b, 0x76, 0x3c, 0x64, 0x30, 0x4e, - 0x27, 0xfd, 0xb1, 0x4f, 0x1f, 0xd7, 0x1f, 0xdb, 0x81, 0x69, 0x3e, 0x19, 0x62, 0x1d, 0xe0, 0x4c, - 0xcf, 0xf7, 0x18, 0xc3, 0xcb, 0xa9, 0x63, 0x38, 0x23, 0x66, 0x5a, 0x2e, 0x32, 0xbc, 0xa2, 0x4c, - 0x72, 0x25, 0x3b, 0x40, 0x04, 0x50, 0x3c, 0xd8, 0x8c, 0x75, 0x9d, 0xe9, 0x51, 0xd7, 0x8b, 0xa9, - 0x75, 0x4d, 0xca, 0xba, 0xb6, 0x79, 0x35, 0x29, 0x1c, 0x49, 0x5b, 0xd6, 0x23, 0xd7, 0x17, 0x0e, - 0xec, 0x59, 0xcd, 0x0e, 0x9a, 0x44, 0xe0, 0x09, 0x4a, 0xe3, 0x8b, 0x36, 0x3e, 0xee, 0x29, 0x9c, - 0xc9, 0x23, 0x38, 0x99, 0x6c, 0x05, 0xd6, 0x79, 0x0e, 0xeb, 0x3c, 0xa7, 0xd5, 0x19, 0x47, 0xe2, - 0xeb, 0x46, 0xef, 0x56, 0xbc, 0xd6, 0x1e, 0xfc, 0x6f, 0xe7, 0x0b, 0x13, 0xc5, 0xc9, 0x34, 0x4f, - 0xeb, 0xdf, 0xcc, 0xc6, 0x84, 0x36, 0xa9, 0xc2, 0x88, 0x98, 0x0b, 0xa1, 0xc5, 0x26, 0x47, 0xfc, - 0x5c, 0xea, 0x88, 0x8f, 0x88, 0x69, 0x35, 0x25, 0x3d, 0xd9, 0x67, 0xac, 0xd0, 0x25, 0x5e, 0xa8, - 0xfd, 0x1f, 0x71, 0x99, 0x8c, 0x20, 0x6d, 0xf7, 0xa9, 0x1c, 0x3f, 0x20, 0x48, 0x8f, 0x37, 0xc3, - 0x6d, 0x48, 0xd6, 0x46, 0x1e, 0xf0, 0x57, 0x08, 0x72, 0x61, 0x54, 0x89, 0xfe, 0xe4, 0xc0, 0x53, - 0xab, 0x90, 0xd5, 0x62, 0xfc, 0x46, 0x06, 0x26, 0x34, 0xa9, 0x4f, 0x6e, 0x28, 0x21, 0x53, 0x51, - 0xc4, 0xaf, 0x86, 0x83, 0x82, 0x20, 0x1e, 0x4c, 0x75, 0x43, 0xf8, 0x4d, 0x67, 0x7b, 0xd3, 0xa5, - 0xbe, 0x5b, 0xde, 0xdf, 0x48, 0x16, 0xbe, 0x6d, 0x94, 0xef, 0xf1, 0xb6, 0xd1, 0xaf, 0x9d, 0x81, - 0x49, 0xfd, 0x58, 0x40, 0x5e, 0x83, 0x61, 0xb4, 0x2d, 0xca, 0x33, 0x26, 0x7f, 0xdd, 0x17, 0x21, - 0xda, 0xeb, 0xbe, 0x08, 0x21, 0x2f, 0x01, 0x84, 0x0e, 0xac, 0xd2, 0xb2, 0x3e, 0xf4, 0xf8, 0x70, - 0x21, 0xf3, 0xba, 0xa9, 0x14, 0x90, 0x6f, 0x00, 0xac, 0xb9, 0x0d, 0x1a, 0xbe, 0xbf, 0xd6, 0xe7, - 0xf6, 0xf8, 0xe5, 0x44, 0x86, 0xee, 0x13, 0x6d, 0xb7, 0x41, 0x93, 0xe9, 0xb8, 0x15, 0x8e, 0xe4, - 0x2b, 0x30, 0x64, 0x76, 0xd9, 0x79, 0x96, 0x9b, 0x12, 0xc6, 0xa4, 0xf4, 0xed, 0x36, 0x69, 0x74, - 0x58, 0xf2, 0xba, 0x71, 0xc7, 0x28, 0x06, 0x20, 0xef, 0xf1, 0xcc, 0xdd, 0x22, 0xd1, 0xd6, 0x50, - 0x74, 0xd7, 0xa0, 0xec, 0xca, 0x89, 0x54, 0x5b, 0x0a, 0x09, 0x59, 0x87, 0x11, 0xd5, 0x48, 0xae, - 0xc4, 0xde, 0xaa, 0x17, 0x29, 0xca, 0xc9, 0x4b, 0x3c, 0xdc, 0x16, 0xb7, 0x9f, 0x4b, 0x2e, 0xe4, - 0x6d, 0x18, 0x65, 0xec, 0xd9, 0x27, 0xec, 0x0b, 0x8d, 0x1b, 0x6f, 0x14, 0x94, 0x06, 0x31, 0x09, - 0xa0, 0xa5, 0xc3, 0x0a, 0x09, 0xc8, 0x87, 0xf8, 0x36, 0x99, 0x18, 0xea, 0xbe, 0x5e, 0x05, 0x17, - 0x13, 0x43, 0x8d, 0x8f, 0x95, 0x25, 0x9f, 0xad, 0x0d, 0xf9, 0x91, 0xdd, 0x30, 0x4d, 0xd3, 0x20, - 0xd9, 0xd6, 0x5f, 0x49, 0x54, 0x30, 0x27, 0x33, 0x0f, 0x25, 0xdf, 0xd1, 0xd3, 0xf8, 0x92, 0x0e, - 0x14, 0x23, 0x85, 0x47, 0xd4, 0x05, 0xfd, 0xea, 0x7a, 0x3d, 0x51, 0x97, 0x3a, 0x81, 0x89, 0xea, - 0x12, 0xdc, 0x49, 0x03, 0x26, 0xa5, 0xf0, 0x14, 0xf5, 0x8d, 0xf5, 0xab, 0xef, 0xa5, 0x44, 0x7d, - 0x33, 0x8d, 0xed, 0x64, 0x3d, 0x31, 0x9e, 0xe4, 0x6d, 0x98, 0x90, 0x10, 0xfc, 0x3e, 0xc4, 0xfb, - 0xb8, 0x68, 0x15, 0x69, 0x6c, 0xa3, 0xcb, 0xbc, 0xfe, 0xba, 0xa0, 0x8a, 0xac, 0x52, 0xf3, 0xd5, - 0x31, 0xa1, 0x51, 0xc7, 0x57, 0x85, 0x8e, 0x4c, 0x3e, 0x80, 0xb1, 0x6a, 0x8b, 0x75, 0xc4, 0x6d, - 0xdb, 0x01, 0x15, 0x71, 0x59, 0xd2, 0x43, 0x42, 0x29, 0x51, 0x96, 0x2a, 0x7f, 0xaf, 0x2f, 0x2a, - 0xd2, 0xde, 0xeb, 0x8b, 0xc0, 0x6c, 0xf0, 0xf8, 0xad, 0x88, 0x58, 0xc3, 0x32, 0x66, 0xeb, 0x5c, - 0x8a, 0x97, 0x82, 0xc2, 0x5e, 0x24, 0xb4, 0x63, 0x50, 0x79, 0x2b, 0x11, 0x4b, 0x68, 0xa7, 0xf2, - 0x24, 0xef, 0xc0, 0x98, 0x78, 0x88, 0xa2, 0x64, 0xae, 0xf9, 0x73, 0x45, 0xec, 0x3c, 0x46, 0x9a, - 0xcb, 0x37, 0x2b, 0x2c, 0xdb, 0x8b, 0xb9, 0xe3, 0x45, 0xf8, 0xe4, 0x6b, 0x30, 0xbb, 0xe5, 0xb4, - 0x1b, 0xee, 0xbe, 0x2f, 0xb6, 0x29, 0x21, 0xe8, 0xa6, 0xa3, 0x60, 0x98, 0x7d, 0x5e, 0x1e, 0xea, - 0x29, 0x09, 0xc1, 0x97, 0xca, 0x81, 0xfc, 0xa5, 0x04, 0x67, 0xbe, 0x82, 0x48, 0xbf, 0x15, 0xb4, - 0x98, 0x58, 0x41, 0xc9, 0xea, 0xe3, 0xcb, 0x29, 0xb5, 0x1a, 0xe2, 0x02, 0xd1, 0xf7, 0xf7, 0xdb, - 0xae, 0xd3, 0x9e, 0x9b, 0x41, 0x59, 0x78, 0x26, 0x1e, 0xdb, 0x8d, 0x78, 0x1b, 0x6e, 0xd3, 0xa9, - 0x1f, 0xf0, 0xb7, 0xf1, 0xe3, 0xfa, 0xe8, 0xc7, 0xae, 0x66, 0x33, 0x4e, 0x61, 0x4d, 0x3e, 0x80, - 0x71, 0xf6, 0x7f, 0x78, 0x60, 0x9e, 0xd5, 0xfc, 0xda, 0x14, 0x4c, 0x51, 0x0f, 0xce, 0x11, 0xbe, - 0x94, 0x91, 0x72, 0x96, 0xd6, 0x58, 0x91, 0x37, 0x01, 0x98, 0xe6, 0x24, 0xc4, 0xf1, 0x89, 0x28, - 0x7f, 0x20, 0xea, 0x5b, 0x49, 0x41, 0x1c, 0x21, 0xb3, 0x53, 0x3c, 0xfb, 0x55, 0xeb, 0x36, 0x5c, - 0xf6, 0x6d, 0x9c, 0x44, 0x5a, 0x1e, 0xee, 0xc6, 0x68, 0x7d, 0x0e, 0xd7, 0xc2, 0xdd, 0x22, 0x74, - 0xb2, 0x02, 0x53, 0x98, 0xe7, 0xb1, 0xda, 0xa0, 0xed, 0x00, 0x6f, 0x2b, 0xe7, 0x4e, 0x29, 0xb7, - 0xb9, 0xac, 0xc8, 0x72, 0xc2, 0x32, 0x55, 0xcf, 0x8e, 0x91, 0x11, 0x1f, 0x66, 0x22, 0xe9, 0x12, - 0xdd, 0x0d, 0xcf, 0xe1, 0x20, 0x49, 0xed, 0x32, 0x89, 0xc1, 0xe5, 0x31, 0x9b, 0x11, 0x45, 0x70, - 0x49, 0xcb, 0xba, 0x5a, 0x61, 0x1a, 0x77, 0x62, 0x02, 0xb9, 0xb5, 0xb4, 0x11, 0x4f, 0x84, 0x78, - 0x1a, 0x7b, 0x80, 0xd3, 0xbc, 0x5b, 0x8f, 0x5e, 0x86, 0x4c, 0x49, 0x86, 0x98, 0x42, 0x4d, 0xbe, - 0x0d, 0x27, 0xa4, 0x04, 0x11, 0x45, 0x62, 0x5d, 0xcf, 0x1f, 0x53, 0x12, 0x37, 0xb6, 0xc3, 0xaa, - 0x13, 0x4b, 0x3a, 0xbd, 0x0a, 0x62, 0xc3, 0x18, 0x4e, 0xab, 0xa8, 0xf1, 0x4c, 0xbf, 0x1a, 0x2f, - 0x25, 0x6a, 0x3c, 0x89, 0x0b, 0x25, 0x59, 0x99, 0xca, 0x93, 0x94, 0x61, 0x42, 0x7c, 0x47, 0x62, - 0xb5, 0x9d, 0xc5, 0xd1, 0x42, 0x03, 0x8b, 0xfc, 0x02, 0x13, 0x0b, 0x4e, 0x27, 0x51, 0x25, 0x32, - 0xb7, 0xa8, 0x9f, 0xd3, 0x24, 0x72, 0xdc, 0x90, 0xae, 0x23, 0x33, 0x89, 0x14, 0x69, 0x31, 0xcb, - 0x8f, 0x3a, 0x9e, 0x30, 0x9f, 0x3c, 0x1f, 0xbd, 0x0f, 0xa0, 0x28, 0x3f, 0x16, 0x0d, 0x31, 0x54, - 0x91, 0x90, 0xc6, 0x81, 0xdc, 0x83, 0x99, 0x70, 0xd7, 0x56, 0x18, 0x2f, 0x44, 0xef, 0x2c, 0x44, - 0x5b, 0x7d, 0x3a, 0xdf, 0x34, 0x7a, 0x62, 0xc3, 0x29, 0x6d, 0x9f, 0x56, 0x58, 0x9f, 0x47, 0xd6, - 0xf8, 0x12, 0xa9, 0xbe, 0xc9, 0xa7, 0xb3, 0xef, 0xc5, 0x87, 0x7c, 0x0c, 0xf3, 0xf1, 0xbd, 0x59, - 0xa9, 0xe5, 0x05, 0xac, 0xe5, 0x95, 0xc7, 0x87, 0x0b, 0x17, 0x13, 0xdb, 0x7b, 0x7a, 0x45, 0x7d, - 0xb8, 0x91, 0x6f, 0xc0, 0x9c, 0xbe, 0x3f, 0x2b, 0x35, 0x19, 0x58, 0x13, 0x7e, 0x3a, 0xe1, 0xc6, - 0x9e, 0x5e, 0x43, 0x4f, 0x1e, 0x24, 0x80, 0x85, 0xd4, 0xd5, 0xad, 0x54, 0x73, 0x21, 0xea, 0x50, - 0xe2, 0x2b, 0x49, 0xaf, 0xee, 0x28, 0x96, 0x64, 0x1f, 0x9e, 0x4f, 0xdb, 0x26, 0x94, 0x4a, 0x5f, - 0x0c, 0x0d, 0x94, 0xaf, 0xa6, 0x6f, 0x39, 0xe9, 0x35, 0x1f, 0xc1, 0x96, 0x7c, 0x08, 0x27, 0x94, - 0xef, 0x4b, 0xa9, 0xef, 0x25, 0xac, 0x0f, 0x43, 0x59, 0xd5, 0x0f, 0x33, 0xbd, 0x96, 0x74, 0x1e, - 0xa4, 0x05, 0x33, 0xb2, 0xe3, 0x68, 0x09, 0x16, 0x5b, 0xcf, 0x45, 0x4d, 0xaa, 0x26, 0x31, 0x94, - 0x27, 0x9c, 0xb7, 0xad, 0x4e, 0x44, 0xa8, 0xae, 0xf4, 0x14, 0xbe, 0x64, 0x05, 0x86, 0x6b, 0x1b, - 0xd5, 0x9b, 0x37, 0x97, 0xe7, 0x5e, 0xc6, 0x1a, 0x64, 0xdc, 0x0b, 0x07, 0x6a, 0x87, 0x26, 0xe1, - 0x6e, 0xd5, 0x71, 0x76, 0x76, 0xb4, 0xf0, 0x22, 0x8e, 0x7a, 0x3b, 0x5f, 0xb8, 0x54, 0xbc, 0x7c, - 0x3b, 0x5f, 0xb8, 0x5c, 0x7c, 0xc5, 0x3c, 0x9b, 0xfe, 0xfa, 0x2e, 0xef, 0xac, 0x79, 0xb1, 0x5f, - 0x69, 0x34, 0x14, 0xc6, 0xcf, 0x67, 0x60, 0x26, 0xa5, 0x1d, 0xe4, 0x22, 0xe4, 0xf1, 0xe1, 0x02, - 0xe5, 0x82, 0x39, 0xf6, 0x60, 0x01, 0x96, 0x93, 0x2f, 0xc0, 0x48, 0x65, 0xad, 0x56, 0x2b, 0xad, - 0xc9, 0x23, 0x1b, 0x17, 0x57, 0x6d, 0xdf, 0xf2, 0x6d, 0xfd, 0x5e, 0x4a, 0xa0, 0x91, 0xd7, 0x61, - 0xb8, 0xba, 0x81, 0x04, 0xdc, 0xc3, 0x09, 0x8f, 0x30, 0x4e, 0x27, 0x8e, 0x2f, 0x90, 0x8c, 0x1f, - 0xcb, 0x00, 0x49, 0x0e, 0x2a, 0xb9, 0x06, 0x63, 0xea, 0xd4, 0xf1, 0x03, 0x26, 0xde, 0xa1, 0x28, - 0x13, 0x63, 0xaa, 0x38, 0xa4, 0x02, 0x43, 0xf8, 0xd0, 0x52, 0x78, 0x21, 0x96, 0xba, 0x01, 0x9c, - 0x4a, 0x6c, 0x00, 0x43, 0xf8, 0x8c, 0x93, 0xc9, 0x89, 0x8d, 0xdf, 0xc9, 0x00, 0x49, 0x6e, 0x9a, - 0x03, 0x5f, 0xc8, 0xbf, 0xa1, 0x44, 0xa8, 0xaa, 0xa9, 0xc9, 0xc3, 0x77, 0x25, 0xd4, 0xc3, 0x52, - 0x14, 0xcb, 0x7a, 0x51, 0x3b, 0x9c, 0xf7, 0x0e, 0x6b, 0xba, 0x0c, 0x43, 0xf7, 0xa9, 0xb7, 0x2d, - 0x9d, 0xf7, 0xd0, 0xe1, 0xe7, 0x21, 0x03, 0xa8, 0x87, 0x55, 0xc4, 0x30, 0xfe, 0x38, 0x03, 0xb3, - 0x69, 0x9a, 0xdc, 0x11, 0xd1, 0x47, 0x46, 0x2c, 0x70, 0x0a, 0x2f, 0xe3, 0xb9, 0x37, 0x50, 0x18, - 0x2e, 0xb5, 0x00, 0x43, 0xac, 0xb3, 0x72, 0x86, 0xd1, 0x58, 0xc0, 0x46, 0xc3, 0x37, 0x39, 0x9c, - 0x21, 0xf0, 0x8c, 0x4a, 0x79, 0x4c, 0x9c, 0x85, 0x08, 0xa8, 0x28, 0x98, 0x1c, 0xce, 0x10, 0xee, - 0xba, 0x8d, 0xf0, 0x8d, 0x51, 0x44, 0x68, 0x31, 0x80, 0xc9, 0xe1, 0xe4, 0x22, 0x8c, 0xac, 0xb7, - 0x57, 0xa9, 0xfd, 0x50, 0x3e, 0x8d, 0x81, 0xce, 0x03, 0x6e, 0xdb, 0x6a, 0x32, 0x98, 0x29, 0x0b, - 0x8d, 0x9f, 0xce, 0xc0, 0x74, 0x42, 0x89, 0x3c, 0x3a, 0xc0, 0xaa, 0x7f, 0xa4, 0xc3, 0x20, 0xfd, - 0xe3, 0xcd, 0xcf, 0xa7, 0x37, 0xdf, 0xf8, 0x3f, 0xf3, 0x70, 0xaa, 0xc7, 0x99, 0x3e, 0x8a, 0xc4, - 0xca, 0x1c, 0x19, 0x89, 0xf5, 0x75, 0x76, 0x86, 0xb6, 0x9d, 0x96, 0xbf, 0xe9, 0x46, 0x2d, 0x8e, - 0x1c, 0xba, 0xb1, 0x4c, 0x3e, 0xb3, 0x2a, 0x3d, 0x7f, 0x4f, 0xf3, 0xa7, 0xae, 0xad, 0xc0, 0x4d, - 0xaa, 0x14, 0x1a, 0xb3, 0x44, 0x2c, 0x54, 0xee, 0xcf, 0x49, 0x2c, 0x94, 0xee, 0x9d, 0x9f, 0x7f, - 0xaa, 0xde, 0xf9, 0xe9, 0x9e, 0x7d, 0x43, 0x4f, 0xe2, 0xe7, 0xb9, 0x04, 0x13, 0xdc, 0x7b, 0xa2, - 0xe4, 0xf3, 0x49, 0x1a, 0x4e, 0x78, 0x5c, 0xd8, 0x7e, 0x72, 0x2e, 0x34, 0x1a, 0xb2, 0xa2, 0x7b, - 0x92, 0x8f, 0xe0, 0xad, 0xcf, 0xc5, 0xde, 0x9e, 0xe2, 0xda, 0x6d, 0xaf, 0x4a, 0x6a, 0xfc, 0x74, - 0x56, 0x0f, 0x94, 0xfa, 0xf3, 0xb8, 0xf2, 0x2e, 0xc3, 0xd0, 0xd6, 0x1e, 0xf5, 0xa4, 0xbc, 0xc3, - 0x86, 0xec, 0x33, 0x80, 0xda, 0x10, 0xc4, 0x20, 0x37, 0x61, 0x72, 0x83, 0xcf, 0x84, 0x1c, 0xde, - 0x7c, 0x74, 0xd4, 0xea, 0x08, 0x83, 0x40, 0xca, 0xf8, 0xc6, 0xa8, 0x8c, 0x5b, 0x70, 0x4e, 0xfb, - 0x20, 0x45, 0x62, 0x07, 0xee, 0xd0, 0xcd, 0x77, 0xc4, 0xc9, 0xc8, 0x85, 0x3d, 0x92, 0x1e, 0x66, - 0x0c, 0x6a, 0xec, 0xc0, 0xf3, 0x7d, 0x19, 0xb1, 0x8d, 0x08, 0x3a, 0xe1, 0xaf, 0x98, 0xd7, 0x59, - 0x5f, 0x52, 0x53, 0xa1, 0x33, 0xbe, 0x17, 0xc6, 0xd5, 0x51, 0x46, 0x99, 0xca, 0x7e, 0x0b, 0xa1, - 0xc6, 0x65, 0x2a, 0x03, 0x98, 0x1c, 0x7e, 0xe4, 0xf3, 0xf4, 0xd1, 0xf4, 0xe7, 0x8e, 0x9a, 0x7e, - 0x56, 0x39, 0x7e, 0xb2, 0x4a, 0xe5, 0xf8, 0x5b, 0xad, 0x1c, 0x33, 0x37, 0x98, 0x1c, 0xfe, 0x54, - 0x2b, 0xff, 0x6d, 0xf9, 0x40, 0x00, 0xfa, 0x8b, 0xcb, 0x33, 0x71, 0xf4, 0xfc, 0xe7, 0x4c, 0xda, - 0x49, 0x37, 0xc2, 0x8c, 0x36, 0xc9, 0xec, 0x51, 0x9b, 0xe4, 0x71, 0x16, 0xe2, 0x55, 0x18, 0x29, - 0x89, 0x3b, 0xd9, 0x7c, 0xa4, 0xd8, 0xd8, 0x89, 0x0b, 0x58, 0x89, 0x65, 0xfc, 0x5c, 0x06, 0x4e, - 0xa4, 0x9a, 0xca, 0x58, 0xad, 0xdc, 0x26, 0xa7, 0x7c, 0x87, 0x71, 0x83, 0x1c, 0xc7, 0x38, 0x4e, - 0xd8, 0xee, 0xe0, 0x7d, 0x31, 0x5e, 0x80, 0xd1, 0xf0, 0xa2, 0x86, 0xcc, 0xca, 0xa9, 0x43, 0x47, - 0x1d, 0x69, 0xef, 0xaf, 0x01, 0xb0, 0x16, 0x3c, 0x55, 0xb7, 0x32, 0xe3, 0xb7, 0xb3, 0xfc, 0xf1, - 0xa8, 0x67, 0x36, 0x93, 0x5e, 0xba, 0x2f, 0x18, 0xeb, 0x52, 0xef, 0xfc, 0x79, 0x64, 0x19, 0x86, - 0x6b, 0x81, 0x1d, 0x74, 0x65, 0xb4, 0xf1, 0x8c, 0x4a, 0x86, 0x05, 0xf7, 0x17, 0xa3, 0x78, 0x53, - 0x1f, 0x21, 0xda, 0xe1, 0x00, 0x21, 0x8a, 0x4b, 0x99, 0x03, 0xe3, 0x2a, 0x2d, 0xf9, 0x00, 0x26, - 0x65, 0x7a, 0x30, 0x1e, 0x82, 0x2d, 0x2e, 0x95, 0xa4, 0x73, 0x82, 0x4c, 0x0f, 0xa6, 0x86, 0x6c, - 0x6b, 0xf8, 0xaa, 0xa4, 0xee, 0xa8, 0xc8, 0xc6, 0x9f, 0x0c, 0xf3, 0x75, 0x20, 0xf2, 0xfc, 0x6d, - 0xc3, 0xe4, 0x7a, 0xb5, 0xb2, 0xa4, 0x18, 0xbe, 0xf4, 0x27, 0x1d, 0x96, 0x1f, 0x05, 0xd4, 0x6b, - 0xdb, 0x4d, 0x81, 0x70, 0x10, 0xed, 0x0d, 0xae, 0xd3, 0xa8, 0xa7, 0x1b, 0xc5, 0x62, 0x1c, 0x59, - 0x1d, 0xfc, 0x70, 0x13, 0xd6, 0x91, 0x1d, 0xb0, 0x0e, 0xdf, 0x6e, 0x35, 0x7b, 0xd4, 0xa1, 0x73, - 0x24, 0x7b, 0x50, 0xbc, 0x85, 0x7a, 0x8c, 0x52, 0x4b, 0xae, 0x7f, 0x2d, 0x17, 0x44, 0x2d, 0x67, - 0xb8, 0x02, 0x94, 0x5e, 0x4f, 0x82, 0x6b, 0xf4, 0x01, 0xe7, 0x8f, 0xfc, 0x80, 0xff, 0x4a, 0x06, - 0x86, 0xb9, 0xa2, 0x24, 0xd6, 0x57, 0x0f, 0x55, 0x6c, 0xeb, 0xe9, 0xa8, 0x62, 0x45, 0x14, 0xe0, - 0xda, 0x4a, 0xe3, 0x65, 0xa4, 0x12, 0x5b, 0xb0, 0xd2, 0x45, 0x11, 0x4d, 0xd8, 0xbc, 0xe4, 0xe8, - 0xf5, 0x4a, 0xaa, 0x51, 0x68, 0xee, 0xc8, 0x91, 0xd1, 0x5f, 0x32, 0x9c, 0x79, 0x44, 0x84, 0xe6, - 0xea, 0x01, 0xb9, 0xab, 0x30, 0x2a, 0x02, 0x7e, 0xcb, 0x07, 0xe2, 0xa2, 0xaa, 0xa8, 0x5d, 0x83, - 0x37, 0xca, 0x07, 0x91, 0x12, 0x28, 0x42, 0x86, 0xad, 0xed, 0x03, 0xed, 0x91, 0x2c, 0x89, 0x48, - 0xd6, 0xf9, 0xe3, 0x31, 0x3c, 0x13, 0xa2, 0x9e, 0xa6, 0x38, 0x84, 0x8b, 0x54, 0x22, 0x32, 0x6a, - 0x30, 0x25, 0xf1, 0x61, 0xc4, 0x83, 0xac, 0x42, 0x51, 0x3c, 0xac, 0xcf, 0xfd, 0x28, 0xaa, 0x15, - 0x1e, 0x54, 0x2a, 0xdc, 0xdf, 0xe4, 0xb3, 0xfc, 0xc2, 0x03, 0x43, 0x8f, 0xe7, 0x48, 0x50, 0xb2, - 0x83, 0x5b, 0x31, 0xbe, 0xfa, 0xc8, 0xdb, 0x30, 0x16, 0x66, 0xa2, 0x0c, 0x23, 0xca, 0xd0, 0x60, - 0x1d, 0xa5, 0xae, 0xd4, 0x62, 0xcb, 0x54, 0x74, 0xb2, 0x08, 0x05, 0xf6, 0x11, 0xc7, 0x9f, 0xe7, - 0xea, 0x0a, 0x98, 0xea, 0x26, 0x2e, 0xf1, 0x48, 0x0d, 0x66, 0xd8, 0x47, 0x53, 0x73, 0xda, 0xbb, - 0x4d, 0xba, 0xea, 0xee, 0xba, 0xdd, 0xe0, 0x9e, 0xb9, 0x2a, 0x84, 0x2b, 0x57, 0x95, 0xed, 0x56, - 0x53, 0x2b, 0xf6, 0xb4, 0xc7, 0x57, 0x53, 0xa8, 0x15, 0x19, 0xf6, 0x87, 0x59, 0x18, 0x53, 0xd6, - 0x13, 0xb9, 0x0c, 0x85, 0xaa, 0xbf, 0xea, 0xd6, 0x1f, 0x84, 0xb9, 0xa6, 0x26, 0x1e, 0x1f, 0x2e, - 0x8c, 0x3a, 0xbe, 0xd5, 0x44, 0xa0, 0x19, 0x16, 0x93, 0x32, 0x4c, 0xf0, 0xbf, 0x64, 0x36, 0xef, - 0x6c, 0xe4, 0xed, 0xc6, 0x91, 0x65, 0x1e, 0x6f, 0x55, 0xae, 0x69, 0x24, 0xe4, 0x23, 0x00, 0x0e, - 0xc0, 0xe8, 0xc4, 0xdc, 0xe0, 0x71, 0x95, 0xa2, 0x82, 0x94, 0xb8, 0x44, 0x85, 0x21, 0xf9, 0x26, - 0xcf, 0x5c, 0x29, 0xd7, 0x7f, 0x7e, 0xf0, 0xc0, 0x50, 0xc6, 0xdf, 0x4a, 0x8f, 0x4f, 0x57, 0x59, - 0x8a, 0xb4, 0x78, 0xf3, 0x26, 0xad, 0xbb, 0x0f, 0xa9, 0x77, 0x50, 0x0a, 0x10, 0x51, 0xc1, 0x30, - 0xfe, 0xc7, 0x8c, 0xf2, 0xd5, 0x90, 0x35, 0x7c, 0x51, 0x8e, 0xaf, 0x08, 0xe1, 0xb3, 0x11, 0x2a, - 0xf3, 0x12, 0x6e, 0xd2, 0x9d, 0xf2, 0x19, 0xe1, 0x6c, 0x39, 0x13, 0xae, 0xab, 0xd8, 0x4b, 0x73, - 0x1c, 0x48, 0xde, 0x87, 0x3c, 0x0e, 0x5d, 0xf6, 0xc8, 0xae, 0xc9, 0xfd, 0x34, 0xcf, 0xc6, 0x0c, - 0x3b, 0x82, 0x94, 0xe4, 0x0b, 0x22, 0xb2, 0x8b, 0x0f, 0xfe, 0xa4, 0xb2, 0x29, 0xb2, 0x76, 0x84, - 0x1b, 0x69, 0x94, 0xa2, 0x40, 0x59, 0x3d, 0xff, 0x46, 0x16, 0x8a, 0xf1, 0x6f, 0x95, 0xbc, 0x07, - 0xe3, 0x72, 0xa7, 0xc3, 0x27, 0x87, 0x59, 0x2f, 0xc7, 0x45, 0x7a, 0x69, 0xb9, 0xdd, 0xc5, 0x5f, - 0x1c, 0x56, 0x09, 0x98, 0xd6, 0xb1, 0x29, 0x52, 0x06, 0x29, 0x5f, 0x49, 0xe0, 0x06, 0x9d, 0x58, - 0xf2, 0x43, 0x89, 0x46, 0xde, 0x80, 0xdc, 0xdd, 0x9b, 0x25, 0x11, 0x46, 0x20, 0x45, 0xd2, 0xdd, - 0x9b, 0x25, 0xfe, 0x35, 0x73, 0x37, 0x29, 0xdd, 0x69, 0x8b, 0xe1, 0x93, 0x55, 0x25, 0xb7, 0xe8, - 0xb0, 0xf6, 0xfe, 0x8f, 0x04, 0x87, 0x9d, 0x3b, 0x3a, 0xc9, 0x28, 0x7f, 0xcb, 0x58, 0x64, 0xd9, - 0xfb, 0x77, 0x72, 0x30, 0x1a, 0xd6, 0x4f, 0x08, 0xa0, 0x52, 0x25, 0x4e, 0x32, 0xf8, 0x37, 0x39, - 0x0d, 0x05, 0xa9, 0x47, 0x89, 0x68, 0x82, 0x11, 0x5f, 0xe8, 0x50, 0x73, 0x20, 0x15, 0x26, 0xfe, - 0x99, 0x9b, 0xf2, 0x27, 0xb9, 0x06, 0xa1, 0x36, 0xd4, 0x4b, 0x6d, 0xca, 0xb3, 0x09, 0x33, 0x43, - 0x34, 0x32, 0x09, 0x59, 0x87, 0x67, 0x6e, 0x19, 0x35, 0xb3, 0x4e, 0x83, 0xbc, 0x07, 0x05, 0xbb, - 0xd1, 0xa0, 0x0d, 0xcb, 0x96, 0xce, 0x0f, 0xfd, 0x16, 0x4d, 0x81, 0x71, 0xe3, 0x9b, 0x00, 0x52, - 0x95, 0x02, 0x52, 0x82, 0xd1, 0xa6, 0xcd, 0x1d, 0xa9, 0x1a, 0x03, 0xec, 0x28, 0x11, 0x87, 0x02, - 0x23, 0xbb, 0xe7, 0xd3, 0x06, 0x79, 0x19, 0xf2, 0x6c, 0x36, 0xc5, 0x16, 0x22, 0xd5, 0x37, 0x36, - 0x99, 0x7c, 0xc0, 0x56, 0x9e, 0x33, 0x11, 0x81, 0xbc, 0x08, 0xb9, 0xee, 0xe2, 0x8e, 0xd8, 0x1c, - 0x8a, 0x51, 0x9e, 0xdf, 0x10, 0x8d, 0x15, 0x93, 0xeb, 0x50, 0xd8, 0xd7, 0x53, 0xc4, 0x9e, 0x88, - 0x4d, 0x63, 0x88, 0x1f, 0x22, 0x96, 0x0b, 0x30, 0xcc, 0x37, 0x02, 0xe3, 0x79, 0x80, 0xa8, 0xea, - 0x64, 0xd0, 0x87, 0xf1, 0x11, 0x8c, 0x86, 0x55, 0x92, 0x73, 0x00, 0x0f, 0xe8, 0x81, 0xb5, 0x67, - 0xb7, 0x1b, 0x4d, 0xae, 0xdf, 0x8d, 0x9b, 0xa3, 0x0f, 0xe8, 0xc1, 0x0a, 0x02, 0xc8, 0x29, 0x18, - 0xe9, 0xb0, 0x59, 0x15, 0x4b, 0x77, 0xdc, 0x1c, 0xee, 0x74, 0xb7, 0xd9, 0x0a, 0x9d, 0x83, 0x11, - 0xb4, 0xbc, 0x89, 0x0f, 0x6d, 0xc2, 0x94, 0x3f, 0x8d, 0xff, 0x3c, 0x8b, 0x4f, 0x19, 0x28, 0xed, - 0x24, 0x17, 0x60, 0xa2, 0xee, 0x51, 0xdc, 0x73, 0x6c, 0xa6, 0x49, 0x89, 0x7a, 0xc6, 0x23, 0x60, - 0xb5, 0x41, 0x2e, 0xc2, 0x94, 0x78, 0xbe, 0x9b, 0x35, 0xa8, 0xbe, 0x2d, 0xf2, 0x39, 0x8f, 0x9b, - 0x13, 0x1c, 0x7c, 0x87, 0x1e, 0x2c, 0x6d, 0x63, 0xc6, 0xa1, 0xa2, 0x9a, 0x30, 0x32, 0x08, 0x5f, - 0x5d, 0x34, 0xa7, 0x14, 0x38, 0xfa, 0x34, 0x9d, 0x84, 0x61, 0xdb, 0xde, 0xed, 0x3a, 0x3c, 0x33, - 0xc8, 0xb8, 0x29, 0x7e, 0x91, 0x57, 0x61, 0x3a, 0xca, 0x2b, 0x2a, 0xbb, 0x31, 0x84, 0xdd, 0x28, - 0x86, 0x05, 0x4b, 0x1c, 0x4e, 0x5e, 0x07, 0xa2, 0xd6, 0xe7, 0x6e, 0x7f, 0x4c, 0xeb, 0x7c, 0xa9, - 0x8d, 0x9b, 0xd3, 0x4a, 0xc9, 0x3a, 0x16, 0x90, 0x17, 0x60, 0xdc, 0xa3, 0x3e, 0x6a, 0x71, 0x38, - 0x6c, 0xf8, 0xd2, 0x8f, 0x39, 0x26, 0x61, 0x6c, 0xec, 0x2e, 0x41, 0x51, 0x19, 0x0e, 0xcc, 0xc9, - 0xc9, 0x93, 0x19, 0x9b, 0x93, 0x11, 0xdc, 0xec, 0x54, 0x1b, 0x46, 0x19, 0xa6, 0x13, 0x5f, 0xae, - 0xf2, 0x52, 0x2e, 0x97, 0x44, 0xfd, 0x5f, 0xca, 0x35, 0xda, 0x30, 0xae, 0x4a, 0xe2, 0x23, 0x72, - 0x6a, 0x9f, 0xc4, 0xc8, 0x72, 0x2e, 0xa6, 0x86, 0x1f, 0x1f, 0x2e, 0x64, 0x9d, 0x06, 0xc6, 0x93, - 0x5f, 0x82, 0x82, 0x54, 0x1a, 0xc4, 0x5e, 0x8d, 0x96, 0x53, 0xa1, 0xad, 0x1e, 0x98, 0x61, 0xa9, - 0xf1, 0x32, 0x8c, 0x08, 0x61, 0xdb, 0xdf, 0x5e, 0x6a, 0xfc, 0x48, 0x16, 0xa6, 0x4c, 0xca, 0x44, - 0x01, 0xe5, 0x89, 0xf4, 0x9f, 0xd9, 0xe3, 0x5b, 0x7a, 0x7e, 0x32, 0xad, 0x6f, 0x7d, 0x52, 0xd8, - 0xff, 0xbd, 0x0c, 0xcc, 0xa4, 0xe0, 0x7e, 0xaa, 0xe7, 0xd6, 0x6e, 0xc0, 0x68, 0xc5, 0xb1, 0x9b, - 0xa5, 0x46, 0x23, 0x0c, 0x33, 0x47, 0x55, 0xb3, 0xc1, 0x56, 0x9a, 0xcd, 0xa0, 0xea, 0xb6, 0x1b, - 0xa2, 0x92, 0x57, 0xc4, 0xa2, 0x88, 0x9e, 0xba, 0xc6, 0x45, 0xf1, 0xc9, 0xe1, 0x02, 0xf0, 0x36, - 0x45, 0x4f, 0x7a, 0x62, 0xce, 0x40, 0x0e, 0x8c, 0xdc, 0xc0, 0x9f, 0xd9, 0xa9, 0x4b, 0xcf, 0x19, - 0x18, 0xef, 0xde, 0x40, 0x59, 0xec, 0x7f, 0x3c, 0x0b, 0x27, 0xd3, 0x09, 0x3f, 0xed, 0xcb, 0x79, - 0xf8, 0x7e, 0x80, 0x92, 0xe7, 0x14, 0x5f, 0xce, 0xe3, 0x8f, 0x0d, 0x20, 0x7e, 0x84, 0x40, 0x76, - 0x60, 0x62, 0xd5, 0xf6, 0x83, 0x15, 0x6a, 0x7b, 0xc1, 0x36, 0xb5, 0x83, 0x01, 0x74, 0xcf, 0x17, - 0xe5, 0xb5, 0x24, 0x6e, 0x7f, 0x7b, 0x92, 0x32, 0xa6, 0x1d, 0xea, 0x6c, 0xc3, 0x85, 0x92, 0x1f, - 0x60, 0xa1, 0x7c, 0x0b, 0xa6, 0x6a, 0xb4, 0x65, 0x77, 0xf6, 0x5c, 0x4f, 0xc6, 0x11, 0x5e, 0x81, - 0x89, 0x10, 0x94, 0xba, 0x5a, 0xf4, 0x62, 0x0d, 0x5f, 0x19, 0x88, 0x48, 0x94, 0xe8, 0xc5, 0xc6, - 0xdf, 0xc8, 0xc2, 0xa9, 0x52, 0x5d, 0x78, 0x0b, 0x89, 0x02, 0xe9, 0xd4, 0xf8, 0x19, 0xd7, 0x4d, - 0xae, 0xc2, 0xe8, 0x5d, 0xfb, 0xd1, 0x2a, 0xb5, 0x7d, 0xea, 0x8b, 0x77, 0x8b, 0xb8, 0xa2, 0x66, - 0x3f, 0x8a, 0x9c, 0x68, 0xcc, 0x08, 0x47, 0x3d, 0xc9, 0xe6, 0x9f, 0xf0, 0x24, 0x6b, 0xc0, 0xf0, - 0x8a, 0xdb, 0x6c, 0x88, 0x6d, 0x4c, 0x5c, 0xaf, 0xed, 0x21, 0xc4, 0x14, 0x25, 0xec, 0x00, 0x38, - 0x19, 0xb6, 0x18, 0x9b, 0xf0, 0x99, 0x0f, 0xc9, 0x45, 0x18, 0xc1, 0x8a, 0xaa, 0x15, 0x75, 0xd3, - 0x68, 0x52, 0x7c, 0x7d, 0xa6, 0x61, 0xca, 0x42, 0x75, 0x24, 0x86, 0x9e, 0x6c, 0x24, 0x8c, 0x7f, - 0x17, 0x6f, 0xee, 0xd4, 0x5e, 0xb2, 0x9d, 0x48, 0x69, 0x48, 0x66, 0xc0, 0x86, 0x64, 0x9f, 0xda, - 0x94, 0xe4, 0x7a, 0x4e, 0xc9, 0x77, 0xb2, 0x30, 0x16, 0x36, 0xf6, 0x73, 0x96, 0x6c, 0x37, 0xec, - 0xd7, 0x40, 0xb1, 0xff, 0x35, 0x45, 0x56, 0x88, 0x10, 0xfb, 0xf7, 0x61, 0x58, 0x7c, 0x4c, 0x99, - 0x98, 0x73, 0x5f, 0x6c, 0x76, 0xcb, 0x93, 0x82, 0xf5, 0x30, 0x4e, 0xa8, 0x6f, 0x0a, 0x3a, 0x4c, - 0xae, 0xb0, 0x45, 0xb7, 0xc5, 0x45, 0xee, 0x33, 0xbb, 0x47, 0xa5, 0x27, 0x57, 0x88, 0x3a, 0x36, - 0xd0, 0xee, 0xf4, 0x8f, 0x0a, 0x50, 0x8c, 0x93, 0x1c, 0x9d, 0xce, 0x78, 0xa3, 0xbb, 0xcd, 0xb5, - 0x70, 0x9e, 0xce, 0xb8, 0xd3, 0xdd, 0x36, 0x19, 0x0c, 0xfd, 0x3c, 0x3c, 0xe7, 0x21, 0xf6, 0x7a, - 0x5c, 0xf8, 0x79, 0x78, 0xce, 0x43, 0xcd, 0xcf, 0xc3, 0x73, 0x1e, 0xe2, 0xd1, 0x77, 0xb5, 0x86, - 0xf1, 0xa0, 0xa8, 0x82, 0x8b, 0xa3, 0x6f, 0xd3, 0x8f, 0x3f, 0x31, 0x22, 0xd1, 0xd8, 0x56, 0x59, - 0xa6, 0xb6, 0x27, 0x52, 0xef, 0x0a, 0x71, 0x86, 0x5b, 0xe5, 0x36, 0x82, 0xf9, 0xeb, 0xbd, 0xa6, - 0x8a, 0x44, 0x9a, 0x40, 0x94, 0x9f, 0xf2, 0x03, 0x3e, 0xfa, 0x34, 0x28, 0x1d, 0x73, 0x66, 0x55, - 0xd6, 0x96, 0xfa, 0x35, 0xa7, 0xf0, 0x7d, 0x9a, 0x06, 0xc8, 0x0d, 0x91, 0x4f, 0x0c, 0x4d, 0x1e, - 0x85, 0x23, 0x99, 0xc9, 0x80, 0x69, 0xe0, 0xf9, 0xc6, 0x42, 0xc3, 0x47, 0xc4, 0x84, 0xbc, 0x0b, - 0x63, 0x6a, 0x94, 0x2f, 0x8f, 0x45, 0x3d, 0xcb, 0x53, 0x44, 0xf5, 0x78, 0x40, 0x4e, 0x25, 0x20, - 0xdb, 0x70, 0x6a, 0xc9, 0x6d, 0xfb, 0xdd, 0x96, 0x4c, 0x46, 0x15, 0xa5, 0xc0, 0x84, 0xf0, 0x01, - 0xf8, 0x17, 0xeb, 0x02, 0x45, 0x04, 0x95, 0x4a, 0xcf, 0x69, 0xfd, 0x00, 0xd2, 0x8b, 0x11, 0xd9, - 0x84, 0x31, 0x34, 0xe2, 0x09, 0xd7, 0xac, 0x31, 0x5d, 0x6c, 0x44, 0x25, 0x15, 0xf6, 0x61, 0xf0, - 0x6c, 0x2a, 0x76, 0xab, 0x29, 0x1d, 0x77, 0x55, 0x63, 0xa4, 0x82, 0x4c, 0x3e, 0x82, 0x49, 0x7e, - 0xdc, 0xdc, 0xa2, 0xdb, 0x7c, 0xed, 0x8c, 0x6b, 0x67, 0x67, 0xbd, 0x90, 0x5f, 0xf4, 0x0a, 0xd3, - 0xe9, 0x3e, 0xdd, 0xe6, 0x73, 0xaf, 0xb9, 0xcd, 0x6b, 0xf8, 0xe4, 0x1e, 0xcc, 0xac, 0xd8, 0x3e, - 0x07, 0x2a, 0xe1, 0x9a, 0x13, 0x68, 0x53, 0x44, 0x77, 0xc6, 0x3d, 0xdb, 0x97, 0xb6, 0xd8, 0xd4, - 0xf0, 0xcc, 0x34, 0x7a, 0xf2, 0x23, 0x19, 0x98, 0xd3, 0x4c, 0xb5, 0xc2, 0xa9, 0xa6, 0x45, 0xdb, - 0x01, 0xfa, 0xc7, 0x4f, 0x86, 0xef, 0x06, 0xf7, 0x42, 0xe3, 0x53, 0x12, 0xb3, 0x06, 0x7b, 0x51, - 0xb9, 0xea, 0x27, 0xd8, 0x8b, 0x87, 0xf8, 0x50, 0xf1, 0x9b, 0x9e, 0xd2, 0x3f, 0xd4, 0xd8, 0x77, - 0x2d, 0xd1, 0x8c, 0x1b, 0xf1, 0xf1, 0x16, 0xa6, 0x99, 0x4c, 0x68, 0x9a, 0x99, 0x85, 0x21, 0x1c, - 0x55, 0x99, 0x5d, 0x02, 0x7f, 0x18, 0x5f, 0x50, 0xe5, 0x90, 0x50, 0x0b, 0xfb, 0xca, 0x21, 0xe3, - 0xbf, 0x1d, 0x86, 0xa9, 0xd8, 0xb2, 0x10, 0xe7, 0xd4, 0x4c, 0xe2, 0x9c, 0x5a, 0x03, 0xe0, 0xc6, - 0xc9, 0x01, 0xad, 0x88, 0x32, 0x36, 0x67, 0x4c, 0xc4, 0xb6, 0x85, 0xdf, 0x94, 0xc2, 0x86, 0x31, - 0xe5, 0x5f, 0xec, 0x80, 0x56, 0xdd, 0x90, 0x29, 0xff, 0xe8, 0x15, 0xa6, 0x11, 0x1b, 0xb2, 0x00, - 0x43, 0x98, 0x12, 0x4e, 0x0d, 0x8d, 0x72, 0x18, 0xc0, 0xe4, 0x70, 0x72, 0x01, 0x86, 0x99, 0x12, - 0x55, 0xad, 0x08, 0x21, 0x88, 0x7b, 0x0b, 0xd3, 0xb2, 0x98, 0xc6, 0x22, 0x8a, 0xc8, 0x0d, 0x18, - 0xe7, 0x7f, 0x89, 0xac, 0x00, 0xc3, 0xba, 0xa7, 0x97, 0xe5, 0x34, 0x64, 0x62, 0x00, 0x0d, 0x8f, - 0x9d, 0x2e, 0x6a, 0xdd, 0x6d, 0xfe, 0xee, 0xbd, 0xc8, 0x21, 0x8a, 0xa7, 0x0b, 0x9f, 0x03, 0xf1, - 0x5d, 0xee, 0x10, 0x81, 0xe9, 0x32, 0xc2, 0x41, 0xb9, 0x80, 0x67, 0x4a, 0xd4, 0x65, 0xb8, 0x63, - 0xb2, 0x29, 0x4a, 0xc8, 0x65, 0x7e, 0x19, 0x80, 0x6a, 0x21, 0x7f, 0x52, 0x09, 0x2d, 0xed, 0x68, - 0x98, 0x40, 0xdd, 0x30, 0x2c, 0x66, 0x95, 0xb3, 0xbf, 0x97, 0x5b, 0xb6, 0xd3, 0x14, 0x62, 0x05, - 0x2b, 0x47, 0x5c, 0xca, 0xa0, 0x66, 0x84, 0x40, 0xde, 0x86, 0x49, 0xf6, 0x63, 0xc9, 0x6d, 0xb5, - 0xdc, 0x36, 0xb2, 0x1f, 0x8b, 0x12, 0xcc, 0x20, 0x49, 0x1d, 0x8b, 0x78, 0x2d, 0x31, 0x5c, 0xb6, - 0x9f, 0xe0, 0x45, 0x63, 0x97, 0x5f, 0x53, 0x8c, 0x47, 0xfb, 0x09, 0x92, 0xfa, 0x1c, 0x6e, 0xaa, - 0x48, 0xe4, 0x4d, 0x98, 0x60, 0x3f, 0x6f, 0x39, 0x0f, 0x29, 0xaf, 0x70, 0x22, 0xba, 0xfa, 0x46, - 0xaa, 0x5d, 0x56, 0xc2, 0xeb, 0xd3, 0x31, 0xc9, 0x57, 0xe1, 0x04, 0x72, 0xaa, 0xbb, 0x1d, 0xda, - 0x28, 0xed, 0xec, 0x38, 0x4d, 0x87, 0xbb, 0xde, 0xf0, 0xf8, 0x77, 0xb4, 0x1a, 0xf3, 0x8a, 0x11, - 0xc3, 0xb2, 0x23, 0x14, 0x33, 0x9d, 0x92, 0x6c, 0x41, 0x71, 0xa9, 0xeb, 0x07, 0x6e, 0xab, 0x14, - 0x04, 0x9e, 0xb3, 0xdd, 0x0d, 0xa8, 0x3f, 0x37, 0xa5, 0x45, 0x89, 0xb3, 0x8f, 0x23, 0x2c, 0xe4, - 0xf6, 0xa0, 0x3a, 0x52, 0x58, 0x76, 0x48, 0x62, 0x26, 0x98, 0x18, 0xff, 0x4d, 0x06, 0x26, 0x34, - 0x52, 0xf2, 0x06, 0x8c, 0xdf, 0xf4, 0x1c, 0xda, 0x6e, 0x34, 0x0f, 0x94, 0x83, 0x2a, 0x9e, 0x62, - 0x76, 0x04, 0x9c, 0xf7, 0x5a, 0x43, 0x0b, 0xed, 0x3c, 0xd9, 0x54, 0xbf, 0xb8, 0xab, 0x3c, 0x42, - 0x4f, 0x2c, 0xd0, 0x5c, 0x94, 0xb6, 0x02, 0x17, 0xa8, 0x58, 0x9d, 0x0a, 0x0a, 0x79, 0x07, 0x86, - 0xf9, 0x95, 0xa4, 0x70, 0xd2, 0x3a, 0x9d, 0xd6, 0x4d, 0x1e, 0x0d, 0x8a, 0x0b, 0x11, 0x1d, 0x42, - 0x7c, 0x53, 0x10, 0x19, 0x3f, 0x93, 0x01, 0x92, 0x44, 0x3d, 0xc2, 0xee, 0x75, 0xa4, 0xa3, 0xc9, - 0xfb, 0xe1, 0xd7, 0x98, 0xd3, 0xac, 0xbc, 0xac, 0x26, 0x5e, 0xc0, 0x07, 0x5e, 0x7c, 0x75, 0xaa, - 0x21, 0x8e, 0x17, 0x1b, 0x7f, 0x39, 0x0b, 0x10, 0x61, 0x93, 0x2f, 0xf3, 0x97, 0x37, 0xbe, 0xda, - 0xb5, 0x9b, 0xce, 0x8e, 0xa3, 0xa7, 0xa2, 0x43, 0x26, 0xdf, 0x92, 0x25, 0xa6, 0x8e, 0x48, 0xde, - 0x83, 0xa9, 0xda, 0x86, 0x4e, 0xab, 0xbc, 0x32, 0xe0, 0x77, 0xac, 0x18, 0x79, 0x1c, 0x1b, 0x9d, - 0x31, 0xd5, 0xd9, 0xe0, 0xce, 0x98, 0x7c, 0x22, 0x44, 0x09, 0x13, 0x2c, 0xb5, 0x0d, 0xe1, 0xff, - 0xdb, 0xa8, 0x56, 0x84, 0x94, 0xc2, 0xd6, 0xf9, 0x1d, 0xab, 0x23, 0x1c, 0x83, 0x99, 0x9c, 0xd0, - 0xf0, 0xa2, 0x81, 0x1c, 0xea, 0x11, 0xf1, 0xf9, 0xb3, 0x68, 0xf6, 0x6b, 0xb9, 0x01, 0x15, 0xd6, - 0x8e, 0x67, 0xf6, 0xdc, 0x13, 0xdd, 0x67, 0x0f, 0x69, 0x81, 0x6c, 0x5a, 0xef, 0x84, 0x37, 0xc5, - 0xf5, 0xe8, 0x90, 0xc2, 0x6f, 0xb6, 0x53, 0xfc, 0x2f, 0xfe, 0x4e, 0x06, 0x4e, 0xa4, 0xd2, 0x92, - 0x2b, 0x00, 0x91, 0x4d, 0x49, 0x8c, 0x12, 0x4a, 0xcc, 0x28, 0x59, 0x83, 0xa9, 0x60, 0x90, 0xaf, - 0xc7, 0xad, 0x41, 0x47, 0x6f, 0x84, 0xf3, 0x32, 0x19, 0x8f, 0x6e, 0x0d, 0x4a, 0xb1, 0x01, 0x19, - 0x7f, 0x2f, 0x07, 0xd3, 0x4a, 0x2e, 0x08, 0xde, 0xd6, 0x23, 0x9c, 0x63, 0x1f, 0xc0, 0x38, 0xeb, - 0x8d, 0x53, 0x17, 0xd1, 0x34, 0xdc, 0xf7, 0xe2, 0x95, 0x44, 0x28, 0x92, 0xe0, 0x76, 0x45, 0x45, - 0xe6, 0x29, 0xb2, 0x50, 0x74, 0xa2, 0xad, 0xbd, 0x9e, 0x8c, 0xaa, 0xd1, 0x98, 0x13, 0x1f, 0x26, - 0x2a, 0x07, 0x6d, 0xbb, 0x15, 0xd6, 0xc6, 0x7d, 0x30, 0x5e, 0xed, 0x59, 0x9b, 0x86, 0xcd, 0xab, - 0x8b, 0x9c, 0xf6, 0x79, 0x59, 0x4a, 0xbc, 0xa8, 0x46, 0x35, 0xff, 0x1e, 0x4c, 0x27, 0x1a, 0x7d, - 0xac, 0x6c, 0x5d, 0x5b, 0x40, 0x92, 0xed, 0x48, 0xe1, 0xf0, 0xaa, 0x9e, 0x0b, 0xee, 0x44, 0x78, - 0xdd, 0x8a, 0xef, 0x01, 0x73, 0x8f, 0x8e, 0x45, 0x35, 0x97, 0xd7, 0xcf, 0x66, 0xd5, 0x70, 0xb0, - 0x67, 0xfd, 0xab, 0x7b, 0x5f, 0x3b, 0x0d, 0x3f, 0xdf, 0x6b, 0x4e, 0x07, 0xb2, 0x3a, 0x7c, 0x37, - 0x07, 0xa7, 0x7a, 0x50, 0x92, 0x83, 0xf8, 0x22, 0xe2, 0x56, 0x88, 0x6b, 0xfd, 0x2b, 0x7c, 0x1a, - 0x4b, 0x89, 0x7c, 0x99, 0x07, 0x84, 0xd7, 0xf1, 0x1d, 0x5b, 0x71, 0xfe, 0xe6, 0x4f, 0xa0, 0x87, - 0xd0, 0x78, 0x24, 0x38, 0x87, 0x92, 0xf7, 0x60, 0x08, 0x63, 0x01, 0x63, 0xb9, 0xa8, 0x18, 0x06, - 0xc2, 0x95, 0xc4, 0x5d, 0xec, 0xa7, 0x96, 0xb8, 0x8b, 0x01, 0xc8, 0x97, 0x20, 0x57, 0xda, 0xaa, - 0x89, 0x79, 0x99, 0x54, 0xc9, 0xb7, 0x6a, 0x51, 0xbe, 0x70, 0x5b, 0x4b, 0xec, 0xcd, 0x28, 0x18, - 0xe1, 0xad, 0xa5, 0x0d, 0x31, 0x2b, 0x2a, 0xe1, 0xad, 0xa5, 0x8d, 0x88, 0x70, 0xb7, 0xae, 0xe5, - 0xf6, 0xb8, 0xb5, 0xb4, 0xf1, 0xd9, 0x2d, 0xfb, 0xbf, 0x96, 0xe5, 0x51, 0xec, 0xbc, 0x63, 0xef, - 0xc1, 0xb8, 0x96, 0xab, 0x33, 0x13, 0xe9, 0x63, 0x61, 0x4a, 0xd4, 0x98, 0xd3, 0x8a, 0x46, 0x20, - 0x33, 0xef, 0xb3, 0xdf, 0xa8, 0xf1, 0xaa, 0xee, 0x21, 0x21, 0x07, 0xd4, 0x89, 0xe3, 0x99, 0xf7, - 0x43, 0x12, 0x72, 0x1d, 0x0a, 0x9b, 0xb4, 0x6d, 0xb7, 0x83, 0xd0, 0x20, 0x8a, 0x8e, 0xa7, 0x01, - 0xc2, 0x74, 0xad, 0x21, 0x44, 0x44, 0x27, 0xc9, 0xee, 0xb6, 0x5f, 0xf7, 0x1c, 0xcc, 0x76, 0x11, - 0xee, 0xc5, 0xdc, 0x49, 0x52, 0x29, 0xd1, 0x19, 0xc4, 0x88, 0x8c, 0x9f, 0xcd, 0xc0, 0x88, 0x98, - 0x48, 0xfe, 0x62, 0xca, 0x6e, 0xb4, 0x97, 0x88, 0x17, 0x53, 0x76, 0x9d, 0xf8, 0x8b, 0x29, 0xbb, - 0x3c, 0xa5, 0xc4, 0xa8, 0x08, 0xc8, 0x0c, 0xaf, 0x06, 0xf9, 0xe3, 0xdd, 0x1c, 0xa8, 0x57, 0x1b, - 0xa1, 0x0e, 0x1a, 0x7d, 0x62, 0xfc, 0x2d, 0xd1, 0xb2, 0x5b, 0x4b, 0x1b, 0x64, 0x11, 0x0a, 0xab, - 0x6e, 0xdd, 0x56, 0xf6, 0x39, 0x14, 0x3b, 0x4d, 0x01, 0x53, 0x07, 0x48, 0xe2, 0xb1, 0xf6, 0x6d, - 0x78, 0xae, 0x38, 0xcb, 0x28, 0xed, 0xeb, 0x70, 0x60, 0xac, 0x7d, 0x21, 0xea, 0xc0, 0xed, 0xa3, - 0x29, 0x42, 0xe2, 0xfe, 0x75, 0x4c, 0x49, 0x7e, 0x5b, 0x8d, 0xea, 0x11, 0x45, 0x52, 0x52, 0xcc, - 0xf7, 0x92, 0x14, 0xf7, 0xaf, 0x9b, 0x29, 0x54, 0x78, 0xaf, 0x16, 0x81, 0x6b, 0xd4, 0x7b, 0xf8, - 0x0c, 0x4b, 0xe9, 0xf4, 0x7b, 0xb5, 0x78, 0xf7, 0x06, 0x12, 0xd2, 0xff, 0x55, 0x16, 0x4e, 0xa6, - 0x13, 0xaa, 0x7d, 0xc9, 0xf4, 0xe9, 0xcb, 0x25, 0x28, 0xac, 0xb8, 0x7e, 0xa0, 0xf8, 0xa9, 0xa1, - 0xf9, 0x7f, 0x4f, 0xc0, 0xcc, 0xb0, 0x94, 0x9d, 0xb9, 0xd9, 0xdf, 0xe1, 0xe7, 0x89, 0xfc, 0x30, - 0x76, 0x9b, 0x9d, 0xb9, 0x79, 0x11, 0xb9, 0x05, 0x05, 0x53, 0x44, 0x95, 0xc4, 0x86, 0x46, 0x82, - 0x43, 0x6d, 0x8a, 0x78, 0x02, 0xa2, 0xa5, 0x4c, 0x15, 0x30, 0x52, 0x82, 0x11, 0x31, 0xfb, 0xb1, - 0xab, 0xe3, 0x94, 0x25, 0xa3, 0x67, 0x31, 0x96, 0x74, 0x4c, 0xa2, 0xe0, 0x25, 0x60, 0xb5, 0x22, - 0x03, 0x44, 0x50, 0xa2, 0xf0, 0x4b, 0x42, 0xdd, 0x25, 0x30, 0x44, 0x34, 0x7e, 0x24, 0x0b, 0x20, - 0xad, 0x36, 0xcf, 0xec, 0x0a, 0xfb, 0x92, 0xb6, 0xc2, 0x14, 0x0f, 0x99, 0xc1, 0x5f, 0xf8, 0x5b, - 0x47, 0x4f, 0x95, 0xc1, 0xdf, 0xf7, 0x5b, 0x80, 0xa1, 0xcd, 0xc8, 0xa0, 0x25, 0xc2, 0x15, 0xd0, - 0x1c, 0xcd, 0xe1, 0xc6, 0x36, 0xcc, 0xde, 0xa2, 0x41, 0x64, 0xde, 0x92, 0x57, 0x8f, 0xfd, 0xd9, - 0xbe, 0x06, 0xa3, 0x02, 0x3f, 0x94, 0x5f, 0xdc, 0x16, 0x23, 0xd2, 0x21, 0xa0, 0x2d, 0x46, 0x22, - 0x30, 0x69, 0x54, 0xa1, 0x4d, 0x1a, 0xd0, 0xcf, 0xb6, 0x9a, 0x1a, 0x10, 0xde, 0x15, 0xec, 0xd9, - 0x60, 0x35, 0x1c, 0x39, 0x3e, 0xf7, 0xe1, 0x44, 0xd8, 0xf6, 0xa7, 0xc9, 0xf7, 0x2a, 0x3b, 0x52, - 0x8a, 0x04, 0xc0, 0x11, 0xc7, 0x3e, 0xbe, 0x27, 0x8f, 0x60, 0x5e, 0x12, 0x6c, 0x39, 0xa1, 0xab, - 0xdf, 0x40, 0xb4, 0xe4, 0x6d, 0x18, 0x53, 0x68, 0x44, 0x02, 0x5b, 0x34, 0x53, 0xef, 0x3b, 0xc1, - 0x9e, 0xe5, 0x73, 0xb8, 0x6a, 0xa6, 0x56, 0xd0, 0x8d, 0x0f, 0xe1, 0x4c, 0x18, 0x52, 0x92, 0x52, - 0x75, 0x8c, 0x79, 0xe6, 0x78, 0xcc, 0xd7, 0xa2, 0x6e, 0x55, 0xdb, 0x61, 0x18, 0xa8, 0xe4, 0x4d, - 0xd4, 0x6e, 0x89, 0xce, 0x9c, 0x4d, 0x04, 0x96, 0x2a, 0xf1, 0xa3, 0xc6, 0x5b, 0x4a, 0x63, 0x53, - 0x18, 0x6a, 0xc4, 0x99, 0x38, 0xf1, 0x8f, 0x64, 0x61, 0x6a, 0xbd, 0x5a, 0x59, 0x0a, 0xbd, 0x8f, - 0x3e, 0x67, 0xef, 0x0f, 0x6a, 0x7d, 0xeb, 0x2d, 0x6f, 0x8c, 0x7b, 0x30, 0x13, 0x1b, 0x06, 0x54, - 0x1d, 0xde, 0xe5, 0x31, 0x0f, 0x21, 0x58, 0xaa, 0x0d, 0x27, 0xd3, 0xd8, 0xdf, 0xbf, 0x6e, 0xc6, - 0xb0, 0x8d, 0x7f, 0x3c, 0x1a, 0xe3, 0x2b, 0x44, 0xd8, 0x6b, 0x30, 0x5a, 0xf5, 0xfd, 0x2e, 0xf5, - 0xee, 0x99, 0xab, 0xaa, 0xa9, 0xc0, 0x41, 0xa0, 0xd5, 0xf5, 0x9a, 0x66, 0x84, 0x40, 0x2e, 0x43, - 0x41, 0xe4, 0x74, 0x95, 0x32, 0x01, 0xad, 0xb6, 0x61, 0x4a, 0x58, 0x33, 0x2c, 0x26, 0x6f, 0xc0, - 0x38, 0xff, 0x9b, 0xaf, 0x36, 0x31, 0xe0, 0x68, 0x1c, 0x14, 0xe8, 0x7c, 0x75, 0x9a, 0x1a, 0x1a, - 0x79, 0x05, 0x72, 0xa5, 0x25, 0x53, 0x98, 0x83, 0x84, 0xde, 0x88, 0xaf, 0x0a, 0x77, 0xa9, 0x7e, - 0x88, 0x58, 0x32, 0x99, 0xf6, 0x27, 0x43, 0xce, 0x85, 0x25, 0x9b, 0x3f, 0x7e, 0x2c, 0x60, 0xb1, - 0xcd, 0x0c, 0x61, 0xe4, 0x2a, 0x8c, 0x54, 0x1c, 0xbf, 0xd3, 0xb4, 0x0f, 0x84, 0x1d, 0x9b, 0x3f, - 0xae, 0xc3, 0x41, 0x5a, 0x24, 0x39, 0x07, 0x91, 0xcb, 0xf2, 0xd1, 0x91, 0x42, 0x14, 0x3a, 0xd1, - 0xe3, 0x65, 0x91, 0xd7, 0x60, 0x58, 0x64, 0x3e, 0x1d, 0x55, 0x72, 0x9a, 0xc7, 0x33, 0x9e, 0x0a, - 0x9c, 0x64, 0x70, 0x23, 0x3c, 0xcd, 0xe0, 0xc6, 0x6d, 0x38, 0x75, 0x0b, 0xad, 0x37, 0x7a, 0x8e, - 0x94, 0x7b, 0x66, 0x55, 0xd8, 0xc3, 0xf1, 0x1a, 0x88, 0x1b, 0x78, 0xe2, 0x69, 0x56, 0xac, 0xae, - 0xa7, 0xbe, 0x15, 0xd7, 0x8b, 0x11, 0xf9, 0x1a, 0xcc, 0xa6, 0x15, 0x09, 0xab, 0x39, 0x66, 0x03, - 0x49, 0xaf, 0x40, 0xcd, 0x06, 0x92, 0xc6, 0x81, 0xac, 0x42, 0x91, 0xc3, 0x4b, 0x8d, 0x96, 0xd3, - 0xe6, 0x96, 0x7f, 0x6e, 0x55, 0xc7, 0x58, 0x06, 0xc1, 0xd5, 0x66, 0x85, 0xfc, 0x06, 0x40, 0x8b, - 0x7e, 0x89, 0x51, 0x92, 0x9f, 0xcc, 0xb0, 0xd3, 0x1c, 0xcf, 0x13, 0x7a, 0xcf, 0x5c, 0xf5, 0x45, - 0x26, 0xa9, 0x93, 0x51, 0x60, 0x4b, 0x2d, 0xf0, 0x9c, 0xf6, 0xae, 0x88, 0x6c, 0xd9, 0x14, 0x91, - 0x2d, 0x6f, 0x7f, 0xaa, 0xc8, 0x16, 0xce, 0xca, 0x7f, 0x7c, 0xb8, 0x30, 0xee, 0x89, 0x3a, 0xf1, - 0x2b, 0xd2, 0x5a, 0x80, 0xef, 0x9c, 0x37, 0x9b, 0xee, 0xfe, 0xbd, 0xf6, 0x43, 0xea, 0x39, 0x3b, - 0x0e, 0x6d, 0xf0, 0x4e, 0x4e, 0xa1, 0x04, 0xe7, 0xef, 0x9c, 0xb3, 0x72, 0xab, 0x1b, 0x22, 0x24, - 0x3a, 0x9a, 0xca, 0x81, 0x1d, 0x3c, 0x65, 0xf4, 0x04, 0x8f, 0xd4, 0x2c, 0x46, 0x07, 0x4f, 0x19, - 0x6a, 0x61, 0xe1, 0x32, 0x52, 0x17, 0x8f, 0x46, 0x42, 0xae, 0xc2, 0xf0, 0x5d, 0xfb, 0x51, 0x69, - 0x97, 0x8a, 0xc7, 0xa4, 0x26, 0xa4, 0xf8, 0x43, 0x60, 0xb9, 0xf0, 0xfb, 0xdc, 0x3b, 0xff, 0x39, - 0x53, 0xa0, 0x91, 0x1f, 0xc8, 0xc0, 0x49, 0xfe, 0x19, 0xcb, 0x5e, 0xd6, 0x68, 0x10, 0xb0, 0x71, - 0x10, 0x29, 0xa5, 0xe4, 0x53, 0x0c, 0xb5, 0xda, 0x7a, 0x3a, 0x1e, 0x7f, 0x95, 0x5b, 0x48, 0x86, - 0x70, 0xe0, 0x7c, 0x51, 0xaa, 0xe5, 0x8d, 0x4c, 0xa5, 0x17, 0x9e, 0xe7, 0x5f, 0x92, 0x2d, 0x27, - 0xaf, 0xab, 0x01, 0x85, 0x39, 0xd4, 0x73, 0x47, 0x5a, 0xf6, 0x23, 0xcb, 0xde, 0xa5, 0xda, 0x7d, - 0x76, 0x18, 0x69, 0x78, 0xba, 0x67, 0xdb, 0xc8, 0x0d, 0x38, 0x25, 0xdf, 0x67, 0xdf, 0x0b, 0x82, - 0x8e, 0x6f, 0xc9, 0xb3, 0x80, 0x88, 0x40, 0x34, 0x4f, 0x88, 0xe2, 0x15, 0x56, 0x2a, 0x8f, 0x07, - 0xbe, 0xf1, 0x47, 0xa3, 0x7c, 0x4f, 0x2b, 0x75, 0x83, 0x3d, 0xb9, 0x0b, 0x2e, 0xa6, 0xc5, 0xd0, - 0x70, 0xe7, 0x3e, 0x25, 0x86, 0x46, 0x8f, 0x9c, 0x91, 0x97, 0x11, 0xd9, 0xd4, 0xcb, 0x88, 0xd7, - 0x60, 0x74, 0x69, 0x8f, 0xd6, 0x1f, 0x84, 0x71, 0x0c, 0x05, 0x61, 0xed, 0x65, 0x40, 0x9e, 0x52, - 0x34, 0x42, 0x20, 0x57, 0x01, 0x30, 0xa8, 0x8e, 0xab, 0x48, 0x4a, 0x5a, 0x70, 0x8c, 0xc1, 0x13, - 0xfe, 0x12, 0x0a, 0x0a, 0xb2, 0xaf, 0x99, 0x37, 0x55, 0x07, 0x0b, 0xce, 0xde, 0xf7, 0x76, 0x04, - 0x7a, 0x84, 0xc0, 0xba, 0xa7, 0x2c, 0x74, 0x21, 0x96, 0x8b, 0x89, 0xaf, 0x41, 0x45, 0x42, 0xdf, - 0x45, 0xe9, 0xb4, 0x8d, 0x52, 0x79, 0x5c, 0xf8, 0x2e, 0x86, 0x0e, 0xde, 0x66, 0x84, 0x40, 0xbe, - 0x04, 0x23, 0x4b, 0xd4, 0x0b, 0x36, 0x37, 0x57, 0xd1, 0x07, 0x82, 0xe7, 0xce, 0x2e, 0x60, 0x9e, - 0xe3, 0x20, 0x68, 0x7e, 0x72, 0xb8, 0x30, 0x11, 0x38, 0x2d, 0x7a, 0x25, 0x9c, 0x60, 0x89, 0x4d, - 0xca, 0x50, 0xe4, 0xb7, 0xb4, 0x91, 0x2a, 0x8c, 0x82, 0xba, 0xc0, 0xb7, 0x0d, 0x71, 0xa5, 0xbb, - 0x4f, 0xb7, 0xc3, 0x2c, 0xcf, 0x09, 0x7c, 0xb2, 0x2c, 0x93, 0xa3, 0xab, 0x9d, 0x84, 0xc8, 0x36, - 0x13, 0x5f, 0xc0, 0xac, 0xaf, 0x49, 0x0a, 0x52, 0x82, 0x89, 0x25, 0xb7, 0xd5, 0xb1, 0x03, 0x07, - 0x5f, 0x1a, 0x3a, 0x10, 0x32, 0x19, 0xed, 0x4b, 0x75, 0xb5, 0x40, 0x13, 0xf0, 0x6a, 0x01, 0xb9, - 0x09, 0x93, 0xa6, 0xdb, 0x65, 0x93, 0x24, 0x0f, 0x85, 0x5c, 0xec, 0xa2, 0xa7, 0x82, 0xc7, 0x4a, - 0xd8, 0x2e, 0x21, 0x4e, 0x80, 0x5a, 0x8e, 0x3a, 0x8d, 0x8a, 0xac, 0xa5, 0x58, 0xe7, 0x55, 0x59, - 0xab, 0xe6, 0x7a, 0x4e, 0x30, 0x4b, 0x31, 0xec, 0x5f, 0x87, 0xb1, 0x5a, 0x6d, 0x7d, 0x93, 0xfa, - 0xc1, 0xcd, 0xa6, 0xbb, 0x8f, 0xa2, 0xb6, 0x20, 0xde, 0xc0, 0xf0, 0x5d, 0x2b, 0xa0, 0x7e, 0x60, - 0xed, 0x34, 0xdd, 0x7d, 0x53, 0xc5, 0x22, 0xdf, 0x60, 0xe3, 0xa1, 0x28, 0x26, 0x22, 0x1b, 0x5f, - 0x3f, 0xdd, 0x09, 0x05, 0x5a, 0xf4, 0xc9, 0x30, 0x0d, 0x4a, 0x1f, 0x2c, 0x05, 0x1d, 0x83, 0x72, - 0xd8, 0x71, 0xb6, 0xd4, 0x68, 0x78, 0xd4, 0xf7, 0x85, 0x4c, 0xe4, 0x41, 0x39, 0x78, 0xf6, 0xb5, - 0x79, 0x81, 0x16, 0x94, 0xa3, 0x10, 0x90, 0xef, 0x64, 0xe0, 0x84, 0xea, 0xd7, 0x8f, 0x1f, 0x0b, - 0x7a, 0x5d, 0x70, 0x09, 0xf9, 0xfa, 0x15, 0xb9, 0x27, 0x5c, 0x51, 0xd0, 0xae, 0x3c, 0xbc, 0x76, - 0xa5, 0x14, 0xfd, 0xac, 0x49, 0x22, 0x91, 0xd0, 0x2a, 0x8d, 0x9f, 0x2a, 0xdf, 0xed, 0x14, 0x52, - 0xb2, 0xc4, 0xd4, 0x06, 0xb6, 0x9e, 0xd0, 0x8b, 0xa7, 0xba, 0x81, 0x02, 0x56, 0x98, 0xf7, 0xc4, - 0xea, 0xe3, 0xfe, 0x3e, 0x4e, 0x47, 0xd7, 0x0e, 0x14, 0x1a, 0x52, 0x85, 0x29, 0x0e, 0x60, 0x22, - 0x81, 0x3f, 0x90, 0x30, 0x13, 0x25, 0x69, 0x16, 0x6c, 0xf0, 0xe2, 0x19, 0x1f, 0x49, 0x50, 0x93, - 0xc7, 0xc5, 0xe8, 0x50, 0x6f, 0xaf, 0x95, 0xee, 0xae, 0x46, 0xca, 0xe7, 0xe7, 0xcb, 0x2f, 0x5f, - 0xeb, 0x5b, 0x1f, 0xbf, 0xfc, 0x7b, 0x3c, 0x52, 0x51, 0x19, 0x06, 0xa9, 0xb7, 0x6b, 0xe0, 0xb8, - 0xde, 0x1e, 0xa3, 0x31, 0x63, 0xd8, 0xc6, 0x27, 0x85, 0x18, 0x5f, 0xe1, 0x8b, 0x67, 0xc0, 0x30, - 0x57, 0xcb, 0xd5, 0xd7, 0xb6, 0xb9, 0xd2, 0x6e, 0x8a, 0x12, 0x72, 0x1a, 0x72, 0xb5, 0xda, 0xba, - 0x18, 0x64, 0xf4, 0xc8, 0xf3, 0x7d, 0xd7, 0x64, 0x30, 0x36, 0x43, 0xe8, 0x66, 0xa7, 0xe4, 0xe1, - 0x65, 0x12, 0xd4, 0x44, 0x28, 0x1b, 0x6f, 0xa9, 0x24, 0xe7, 0xa3, 0xf1, 0x16, 0x4a, 0x72, 0xa4, - 0x1a, 0x2f, 0xc1, 0x5c, 0xc9, 0xf7, 0xa9, 0xc7, 0x16, 0xa8, 0xf0, 0xde, 0xf2, 0x84, 0x22, 0x27, - 0x36, 0x0a, 0xac, 0xd4, 0xae, 0xfb, 0x66, 0x4f, 0x44, 0x72, 0x09, 0x0a, 0xa5, 0x6e, 0xc3, 0xa1, - 0xed, 0xba, 0x96, 0x64, 0xc7, 0x16, 0x30, 0x33, 0x2c, 0x25, 0x5f, 0x85, 0x13, 0xb1, 0x44, 0x53, - 0x62, 0x04, 0x46, 0xa2, 0xaf, 0x59, 0x2a, 0x9a, 0xd1, 0x8d, 0x33, 0x1f, 0x92, 0x74, 0x4a, 0x52, - 0x82, 0xe2, 0x32, 0xc6, 0xa1, 0x54, 0x28, 0x37, 0x7e, 0xbb, 0x1e, 0x8f, 0xad, 0xe1, 0xc7, 0x02, - 0x1e, 0xa3, 0x62, 0x35, 0xc2, 0x42, 0x33, 0x81, 0x4e, 0xee, 0xc0, 0x4c, 0x1c, 0xc6, 0xf6, 0x04, - 0x7e, 0x02, 0xc0, 0x44, 0x90, 0x09, 0x2e, 0xb8, 0x2b, 0xa4, 0x51, 0x91, 0x6d, 0x98, 0x8e, 0x3c, - 0x2e, 0xf4, 0x73, 0x81, 0x74, 0xe4, 0x0c, 0xcb, 0xe5, 0xd9, 0xe0, 0x8c, 0x58, 0x8c, 0x33, 0x91, - 0xf7, 0x46, 0x78, 0x3e, 0x30, 0x93, 0xec, 0x48, 0x03, 0x26, 0x6b, 0xce, 0x6e, 0xdb, 0x69, 0xef, - 0xde, 0xa1, 0x07, 0x1b, 0xb6, 0xe3, 0x09, 0x97, 0x3a, 0xe9, 0x30, 0x5b, 0xf2, 0x0f, 0x5a, 0x2d, - 0x1a, 0x78, 0xb8, 0xdb, 0xb2, 0x72, 0x0c, 0x0b, 0x65, 0xfa, 0xde, 0xbc, 0xcf, 0xe9, 0x30, 0xe4, - 0xaa, 0x63, 0x3b, 0xda, 0xb6, 0xa2, 0xf3, 0xd4, 0xce, 0x66, 0xe3, 0x03, 0x9e, 0xcd, 0x9a, 0x30, - 0xbd, 0xdc, 0xae, 0x7b, 0x07, 0x78, 0x07, 0x21, 0x1b, 0x37, 0x71, 0x44, 0xe3, 0x5e, 0x14, 0x8d, - 0x3b, 0x6b, 0xcb, 0x15, 0x96, 0xd6, 0xbc, 0x24, 0x63, 0x52, 0x83, 0x69, 0x54, 0xa0, 0xab, 0x95, - 0x8d, 0x6a, 0xdb, 0x09, 0x1c, 0x7c, 0x13, 0x9a, 0x6f, 0x57, 0x2f, 0x09, 0x9e, 0xe7, 0xb8, 0x0e, - 0xee, 0x34, 0x3a, 0x96, 0x23, 0x51, 0x54, 0xa6, 0x09, 0xfa, 0x7e, 0x8a, 0xf0, 0xd4, 0xbf, 0x18, - 0x45, 0x18, 0x5f, 0x4d, 0x8a, 0x85, 0x4b, 0x17, 0x23, 0xd9, 0xee, 0x63, 0x11, 0xdb, 0x22, 0xdc, - 0x2e, 0xaa, 0x27, 0xda, 0xab, 0x49, 0x3a, 0x9d, 0xf1, 0x9d, 0x51, 0x2e, 0xdb, 0x55, 0xfd, 0xb5, - 0x97, 0x2b, 0x5d, 0x4c, 0xaf, 0xcd, 0x1e, 0x47, 0xaf, 0xcd, 0x1d, 0xad, 0xd7, 0xe6, 0x8f, 0xd2, - 0x6b, 0x63, 0x8a, 0xe7, 0xd0, 0xb1, 0x15, 0xcf, 0xe1, 0x63, 0x28, 0x9e, 0x23, 0xc7, 0x52, 0x3c, - 0x35, 0x0d, 0xba, 0x70, 0x94, 0x06, 0xfd, 0x17, 0x6a, 0xea, 0xb3, 0xaa, 0xa6, 0xa6, 0xa9, 0x0a, - 0xc7, 0x52, 0x53, 0x7b, 0x6b, 0x99, 0xc5, 0x7f, 0xd9, 0x5a, 0xe6, 0xf4, 0xd3, 0xd1, 0x32, 0xc9, - 0xa7, 0xd4, 0x32, 0xbf, 0x0f, 0x8a, 0xf1, 0x8d, 0xef, 0xe8, 0xfc, 0x7a, 0x4f, 0x2d, 0x17, 0x14, - 0xdb, 0x96, 0xe3, 0x1b, 0x0f, 0x3b, 0x48, 0x6f, 0x78, 0xce, 0x43, 0x3b, 0xa0, 0x77, 0xa4, 0xeb, - 0x81, 0xc8, 0x0d, 0xc9, 0xa1, 0x28, 0x3e, 0x14, 0x94, 0x50, 0xe7, 0xca, 0xa6, 0xe9, 0x5c, 0xc6, - 0x8f, 0x66, 0x61, 0x9a, 0xe7, 0x6d, 0x79, 0xf6, 0x2d, 0xe0, 0xef, 0x6a, 0x9a, 0xb4, 0x74, 0x74, - 0x8b, 0xf5, 0xae, 0x8f, 0x0d, 0xfc, 0x23, 0x38, 0x91, 0x18, 0x0a, 0xd4, 0xa6, 0x2b, 0x32, 0x63, - 0x4e, 0x42, 0x9f, 0x9e, 0x4b, 0xaf, 0xe4, 0xfe, 0x75, 0x33, 0x41, 0x61, 0xfc, 0xb3, 0x7c, 0x82, - 0xbf, 0xb0, 0x86, 0xab, 0xf6, 0xed, 0xcc, 0xf1, 0xec, 0xdb, 0xd9, 0xc1, 0xec, 0xdb, 0xb1, 0x6d, - 0x2a, 0x37, 0xc8, 0x36, 0xf5, 0x55, 0x98, 0xd8, 0xa4, 0x76, 0xcb, 0xdf, 0x74, 0x45, 0x02, 0x78, - 0xee, 0xe8, 0x2a, 0x13, 0xe2, 0xb0, 0x32, 0xa9, 0x0c, 0x86, 0x0e, 0x3b, 0x01, 0x23, 0x60, 0xa2, - 0x95, 0x67, 0x84, 0x37, 0x75, 0x0e, 0xaa, 0x86, 0x3f, 0xd4, 0x47, 0xc3, 0xaf, 0xc1, 0xb8, 0xa0, - 0x8b, 0x92, 0x0a, 0x46, 0xaa, 0x28, 0x2b, 0x42, 0xb8, 0xac, 0x3d, 0x7c, 0xa2, 0x2f, 0xac, 0x9d, - 0x6b, 0xa1, 0x1a, 0x13, 0x36, 0x04, 0xcb, 0xed, 0x46, 0xc7, 0x75, 0xda, 0x38, 0x04, 0x23, 0xd1, - 0x10, 0x50, 0x01, 0xe6, 0x43, 0xa0, 0x20, 0x91, 0xb7, 0x61, 0xb2, 0xb4, 0x51, 0x55, 0xc9, 0x0a, - 0x91, 0x89, 0xdd, 0xee, 0x38, 0x96, 0x46, 0x1a, 0xc3, 0xed, 0xa7, 0x95, 0x8d, 0xfe, 0x8b, 0xd1, - 0xca, 0x8c, 0x1f, 0x18, 0x95, 0x9f, 0xf7, 0x67, 0x6b, 0x0c, 0xd4, 0xcd, 0x7b, 0xb9, 0x63, 0x9a, - 0xf7, 0xf2, 0x47, 0x29, 0x27, 0x9a, 0xc6, 0x34, 0x74, 0x0c, 0x8d, 0x69, 0xf8, 0x89, 0x4d, 0x75, - 0x23, 0xc7, 0xd4, 0x81, 0x62, 0x5f, 0x5a, 0x61, 0x90, 0x2f, 0x2d, 0x55, 0x6f, 0x1a, 0x7d, 0x72, - 0xbd, 0x09, 0x8e, 0xad, 0x37, 0xd5, 0xa2, 0xb0, 0xb1, 0xb1, 0x23, 0xbd, 0x71, 0xcf, 0x89, 0xf3, - 0xca, 0x74, 0x7a, 0xca, 0x9e, 0x30, 0x80, 0xec, 0x73, 0xa5, 0x8c, 0x7d, 0x33, 0x5d, 0x19, 0xeb, - 0xbf, 0xdb, 0xfc, 0xff, 0x58, 0x1d, 0x33, 0x3c, 0x1c, 0xe5, 0x2d, 0xdb, 0x6b, 0xe3, 0x39, 0xf1, - 0x2a, 0x8c, 0xc8, 0xd4, 0x55, 0x99, 0xc8, 0xe4, 0x91, 0xcc, 0x59, 0x25, 0xb1, 0xd8, 0x91, 0x5e, - 0x12, 0xab, 0x69, 0xb8, 0xf7, 0x05, 0x4c, 0xcb, 0x0a, 0x24, 0x60, 0xc6, 0xdf, 0xcd, 0xcb, 0x2f, - 0x99, 0xe9, 0x72, 0xe2, 0xc9, 0xe6, 0xb2, 0x32, 0x73, 0x8a, 0x06, 0x17, 0x9b, 0x9b, 0x98, 0x73, - 0x9d, 0x4e, 0xf2, 0xa9, 0x92, 0x89, 0x45, 0x4f, 0x45, 0xe5, 0x06, 0x78, 0x2a, 0xea, 0x4d, 0xed, - 0x9d, 0xa5, 0x7c, 0xf4, 0xb0, 0x07, 0x5b, 0xdd, 0xfd, 0x5f, 0x58, 0xba, 0xa1, 0x3e, 0x88, 0x34, - 0x14, 0xe5, 0xd5, 0x40, 0xca, 0x3e, 0x4f, 0x21, 0x85, 0x2a, 0xe9, 0xf0, 0x71, 0xd2, 0xf4, 0x8d, - 0xfc, 0x4b, 0x4d, 0xd3, 0xb7, 0x0c, 0xa0, 0x3c, 0x93, 0xcb, 0x6f, 0x64, 0x5e, 0x62, 0xc3, 0x74, - 0xf4, 0x13, 0xb9, 0x0a, 0xa1, 0xf1, 0x7b, 0x04, 0xa6, 0x6b, 0xb5, 0xf5, 0x8a, 0x63, 0xef, 0xb6, - 0x5d, 0x3f, 0x70, 0xea, 0xd5, 0xf6, 0x8e, 0xcb, 0xf4, 0xb1, 0x50, 0x2a, 0x28, 0xf9, 0xd8, 0x22, - 0x89, 0x10, 0x16, 0x33, 0x7d, 0x7f, 0xd9, 0xf3, 0x5c, 0x4f, 0xd5, 0xf7, 0x29, 0x03, 0x98, 0x1c, - 0xce, 0x54, 0x9e, 0x5a, 0x97, 0xbf, 0x77, 0xca, 0x2f, 0xc9, 0x50, 0xe5, 0xf1, 0x39, 0xc8, 0x94, - 0x65, 0x84, 0x26, 0x17, 0xac, 0x50, 0x81, 0x4f, 0x69, 0xc9, 0xfe, 0xa2, 0x62, 0x2e, 0xf3, 0xc4, - 0x9e, 0x84, 0xc7, 0x99, 0x0e, 0xc2, 0xd5, 0x3b, 0xe9, 0xc4, 0x37, 0x70, 0x00, 0x27, 0xb4, 0xa8, - 0xa3, 0x41, 0xad, 0x7d, 0xaf, 0x08, 0x15, 0xcb, 0xc0, 0x20, 0xd7, 0x14, 0x93, 0x9f, 0xfa, 0x30, - 0x41, 0x6a, 0x0d, 0xe4, 0x47, 0x33, 0x70, 0x2e, 0xb5, 0x24, 0xfc, 0xba, 0xc7, 0xb4, 0x84, 0x8b, - 0x8a, 0xd0, 0xe0, 0x4f, 0x30, 0xf4, 0xaa, 0xda, 0x4a, 0x11, 0x05, 0xfd, 0x6b, 0x22, 0xbf, 0x9e, - 0x81, 0x53, 0x1a, 0x46, 0x28, 0xf3, 0xfc, 0x30, 0x20, 0x37, 0x75, 0x5d, 0x7f, 0xfc, 0x74, 0xd6, - 0xf5, 0x05, 0xbd, 0x2f, 0x91, 0x48, 0x56, 0xfb, 0xd0, 0xab, 0x85, 0xe4, 0x21, 0x4c, 0x63, 0x91, - 0xb4, 0x3c, 0xb2, 0x35, 0x2b, 0x0c, 0x96, 0xb3, 0x51, 0xb3, 0x79, 0x24, 0x1d, 0x3e, 0xa3, 0xb7, - 0xf8, 0xdd, 0xc3, 0x85, 0x09, 0x0d, 0x5d, 0xa6, 0x30, 0xb4, 0x22, 0xf3, 0xa5, 0xd3, 0xde, 0x71, - 0xd5, 0xfd, 0x32, 0x51, 0x05, 0xf9, 0x4f, 0x32, 0x30, 0xc7, 0xa0, 0xbc, 0x1b, 0x37, 0x3d, 0xb7, - 0x15, 0x96, 0x4b, 0xe7, 0x86, 0x1e, 0xc3, 0xd6, 0x7c, 0x3a, 0xc3, 0xf6, 0x12, 0x36, 0x99, 0xcb, - 0x04, 0x6b, 0xc7, 0x73, 0x5b, 0x51, 0xf3, 0xb5, 0x67, 0x60, 0x7b, 0x35, 0x92, 0xfc, 0x60, 0x06, - 0x4e, 0x6b, 0xe6, 0x12, 0x35, 0xd1, 0xb3, 0x88, 0x57, 0x9c, 0x09, 0x23, 0x99, 0xa3, 0xa2, 0xf2, - 0x15, 0xb1, 0xfe, 0x2f, 0x62, 0x0b, 0xa2, 0xdd, 0x02, 0xdb, 0x62, 0xb5, 0x38, 0x96, 0xd2, 0x84, - 0xde, 0xb5, 0x10, 0x07, 0xa6, 0xf1, 0x62, 0x51, 0x73, 0xc2, 0x99, 0xed, 0xed, 0x84, 0x13, 0x3e, - 0x77, 0x84, 0x59, 0x64, 0x7b, 0x7b, 0xe2, 0x24, 0xb9, 0x92, 0xbf, 0x04, 0xa7, 0x13, 0xc0, 0xf0, - 0x6b, 0x3b, 0xd1, 0xf3, 0x6b, 0x7b, 0xf5, 0xf1, 0xe1, 0xc2, 0xcb, 0x69, 0xb5, 0xa5, 0x7d, 0x69, - 0xbd, 0x6b, 0x20, 0x36, 0x40, 0x54, 0x28, 0x5e, 0x93, 0x4d, 0x5f, 0xa0, 0xaf, 0x8a, 0xf5, 0xa1, - 0xe0, 0x33, 0x59, 0xae, 0xb4, 0x41, 0xdd, 0xf2, 0x22, 0x24, 0x42, 0x61, 0x5c, 0xc9, 0xa0, 0x7b, - 0x80, 0xcf, 0xca, 0xf6, 0xac, 0xe4, 0xbb, 0x87, 0x0b, 0x1a, 0x36, 0xd3, 0x8b, 0xd5, 0xd4, 0xbc, - 0xaa, 0x5e, 0xac, 0x21, 0x92, 0x5f, 0xcd, 0xc0, 0x2c, 0x03, 0x44, 0x8b, 0x4a, 0x74, 0x6a, 0xae, - 0xdf, 0xaa, 0xdf, 0x7b, 0x3a, 0xab, 0xfe, 0x05, 0x6c, 0xa3, 0xba, 0xea, 0x13, 0x43, 0x92, 0xda, - 0x38, 0x5c, 0xed, 0xda, 0x1d, 0xb6, 0xb6, 0xda, 0x4f, 0x0f, 0xb0, 0xda, 0xf9, 0x04, 0x1c, 0xbd, - 0xda, 0x7b, 0xd6, 0x42, 0x36, 0x61, 0x5c, 0xa8, 0xc4, 0x7c, 0xc0, 0x9e, 0xd7, 0xb2, 0x6f, 0xaa, - 0x45, 0xfc, 0x9c, 0x22, 0x12, 0x0c, 0x27, 0x7a, 0xa8, 0x71, 0x21, 0x6d, 0x98, 0xe1, 0xbf, 0x75, - 0x03, 0xc5, 0x42, 0x4f, 0x03, 0xc5, 0x25, 0xd1, 0xa3, 0xf3, 0x82, 0x7f, 0xcc, 0x4e, 0xa1, 0x26, - 0x40, 0x48, 0x61, 0x4c, 0x3a, 0x40, 0x34, 0x30, 0xff, 0x68, 0xcf, 0xf7, 0x37, 0x4b, 0xbc, 0x2c, - 0xea, 0x5c, 0x88, 0xd7, 0x19, 0xff, 0x72, 0x53, 0x78, 0x13, 0x1b, 0xa6, 0x04, 0x94, 0x1d, 0x80, - 0x51, 0xc2, 0xbf, 0xa0, 0xa5, 0xa0, 0x88, 0x95, 0x72, 0xe3, 0xa6, 0xac, 0x09, 0x53, 0x84, 0xc4, - 0x04, 0x7a, 0x9c, 0x1f, 0x59, 0x87, 0xe9, 0x52, 0xa7, 0xd3, 0x74, 0x68, 0x03, 0x7b, 0xc9, 0x5f, - 0x06, 0x35, 0xa2, 0xd7, 0x20, 0x6c, 0x5e, 0x28, 0x54, 0xfc, 0xf8, 0xb3, 0xa0, 0x49, 0x5a, 0xe3, - 0x3b, 0x99, 0x44, 0xa3, 0xd9, 0xc9, 0x1d, 0x7f, 0x28, 0x51, 0xcd, 0x78, 0x72, 0xe7, 0x4d, 0x44, - 0x0b, 0x42, 0x84, 0xc0, 0x94, 0x25, 0x35, 0xb3, 0x51, 0x8e, 0x2b, 0x4b, 0xe2, 0x78, 0x19, 0x1d, - 0x28, 0x17, 0xa4, 0x73, 0x64, 0x2e, 0x52, 0xba, 0xd0, 0x39, 0x52, 0xb8, 0x44, 0x1a, 0x3f, 0x98, - 0xd5, 0x97, 0x1d, 0xb9, 0xa4, 0xe8, 0xed, 0x4a, 0x6e, 0x25, 0xa9, 0xb7, 0x2b, 0xda, 0xfa, 0xdf, - 0xc9, 0xc0, 0xcc, 0xba, 0xb7, 0x6b, 0xb7, 0x9d, 0x6f, 0xf3, 0x1c, 0x8d, 0x2e, 0xce, 0x4b, 0xff, - 0x87, 0x75, 0x9e, 0xd6, 0x03, 0x21, 0xae, 0x52, 0x31, 0x5b, 0x29, 0xb8, 0x64, 0xcc, 0xb4, 0xf6, - 0xa0, 0xbb, 0x39, 0x36, 0x4c, 0x79, 0xa7, 0x85, 0xa3, 0x73, 0xb8, 0xf1, 0xe3, 0x59, 0x18, 0x53, - 0x3e, 0x01, 0xf2, 0x45, 0x18, 0x57, 0xf9, 0xa8, 0x56, 0x1f, 0xb5, 0x5a, 0x53, 0xc3, 0x42, 0xb3, - 0x0f, 0xb5, 0x5b, 0x9a, 0xd9, 0x87, 0x2d, 0x74, 0x84, 0x1e, 0xf3, 0x68, 0xf3, 0x5e, 0xca, 0xd1, - 0xe6, 0x58, 0x4f, 0xc8, 0xbe, 0x9d, 0x3c, 0xe0, 0x0c, 0xfe, 0xe2, 0xab, 0xf1, 0x53, 0x19, 0x28, - 0xc6, 0x3f, 0xd2, 0xcf, 0x64, 0x54, 0x8e, 0x61, 0xe2, 0xff, 0xb1, 0x6c, 0x98, 0x3e, 0x5b, 0x06, - 0xd1, 0x3c, 0xab, 0x7e, 0x2c, 0xef, 0x68, 0xd6, 0xf7, 0x33, 0x7a, 0x3e, 0x18, 0x35, 0xfc, 0x34, - 0x3d, 0x09, 0x54, 0xfe, 0xe7, 0x7e, 0x61, 0xe1, 0x39, 0xe3, 0x03, 0x98, 0x8d, 0x0f, 0x07, 0x5a, - 0xe0, 0x4b, 0x30, 0xa5, 0xc3, 0xe3, 0xc9, 0xf7, 0xe3, 0x54, 0x66, 0x1c, 0xdf, 0xf8, 0xfd, 0x6c, - 0x9c, 0xb7, 0xf0, 0x69, 0x61, 0x42, 0xa7, 0x6d, 0x6f, 0x37, 0xc3, 0xe4, 0xdb, 0x5c, 0xe8, 0x70, - 0x90, 0x29, 0xcb, 0x8e, 0xf3, 0x1a, 0x45, 0x18, 0x0a, 0x92, 0x4b, 0x0f, 0x05, 0x21, 0x37, 0x62, - 0x8e, 0x61, 0x4a, 0xde, 0x82, 0x7d, 0xba, 0x6d, 0x45, 0xce, 0x61, 0x31, 0x7f, 0xb0, 0x25, 0x98, - 0xd5, 0x92, 0x70, 0x4a, 0xfa, 0xa1, 0xc8, 0xe0, 0x1a, 0x60, 0x01, 0x27, 0x4e, 0x45, 0x26, 0x2b, - 0x30, 0xc2, 0x9a, 0x79, 0xd7, 0xee, 0x08, 0xc3, 0x3a, 0x09, 0x03, 0xc3, 0x9a, 0xe1, 0x81, 0x4f, - 0x89, 0x0d, 0x6b, 0x52, 0xb6, 0xe5, 0x6b, 0x2f, 0x30, 0x73, 0x44, 0xe3, 0x9f, 0x67, 0xd8, 0xf7, - 0x5f, 0x7f, 0xf0, 0x39, 0x7b, 0xd2, 0x82, 0x75, 0xa9, 0x8f, 0xcb, 0xd5, 0x1f, 0x65, 0x79, 0xfe, - 0x74, 0xb1, 0x7c, 0xde, 0x84, 0xe1, 0x4d, 0xdb, 0xdb, 0xa5, 0x81, 0xc8, 0x2c, 0xae, 0x72, 0xe1, - 0x05, 0x51, 0x56, 0x85, 0x00, 0x7f, 0x9b, 0x82, 0x40, 0xb5, 0x85, 0x65, 0x07, 0xb2, 0x85, 0x29, - 0xe6, 0xd9, 0xdc, 0x53, 0x33, 0xcf, 0x7e, 0x4f, 0x98, 0x2a, 0xbd, 0x14, 0x0c, 0x90, 0xe3, 0xf1, - 0x7c, 0xfc, 0xa9, 0x81, 0x44, 0x36, 0xce, 0x88, 0x1d, 0xb9, 0xa1, 0x3e, 0x5e, 0xa0, 0x44, 0x57, - 0x1c, 0xf1, 0x4c, 0x81, 0xf1, 0x47, 0x39, 0x3e, 0xc6, 0x62, 0xa0, 0x2e, 0x6a, 0x91, 0x57, 0xf8, - 0x9d, 0x30, 0x41, 0xaf, 0x06, 0xc1, 0xa2, 0x37, 0xc6, 0x45, 0xc8, 0xb3, 0xb5, 0x29, 0x46, 0x13, - 0xf1, 0xd8, 0xfa, 0x55, 0xf1, 0x58, 0x39, 0xfb, 0x96, 0x71, 0x4f, 0x52, 0x9f, 0x8b, 0xc1, 0x6d, - 0x4b, 0xfd, 0x96, 0x11, 0x83, 0x5c, 0x82, 0xfc, 0x9a, 0xdb, 0x90, 0xb9, 0x44, 0x67, 0x31, 0xfe, - 0xd6, 0x6d, 0x28, 0x2c, 0xe7, 0x32, 0x26, 0x62, 0xb0, 0xbe, 0x86, 0xd9, 0xc7, 0xd5, 0xbe, 0xb6, - 0x76, 0x6c, 0x91, 0xf0, 0x4a, 0xed, 0x6b, 0x94, 0xa8, 0x7c, 0x19, 0x26, 0xf5, 0x07, 0x23, 0x85, - 0x43, 0x1a, 0x9a, 0x59, 0x63, 0xef, 0x4e, 0xaa, 0xd6, 0x71, 0x9d, 0x88, 0x94, 0x61, 0x42, 0xcb, - 0x61, 0x26, 0x6e, 0xb8, 0xd0, 0xbc, 0xa9, 0x67, 0x40, 0x53, 0xcd, 0x9b, 0x1a, 0x09, 0xdb, 0xcf, - 0x45, 0xfb, 0x95, 0x7b, 0xae, 0x44, 0xdb, 0x05, 0x0e, 0xb9, 0x0e, 0x05, 0x1e, 0xe8, 0x5a, 0xad, - 0xa8, 0xb7, 0x15, 0x3e, 0xc2, 0x62, 0x81, 0xe2, 0x12, 0x51, 0x09, 0x6c, 0xfc, 0x02, 0x14, 0x85, - 0x48, 0x8a, 0x9e, 0x66, 0x3c, 0x0b, 0xf9, 0xa5, 0x6a, 0xc5, 0x54, 0xc5, 0x48, 0xdd, 0x69, 0x78, - 0x26, 0x42, 0x8d, 0x9f, 0xce, 0xc0, 0xe9, 0x35, 0x1a, 0xec, 0xbb, 0xde, 0x03, 0x93, 0xfa, 0x81, - 0xe7, 0xf0, 0xd7, 0x86, 0xf0, 0x43, 0xfc, 0x22, 0x79, 0x1b, 0x86, 0xd0, 0x33, 0x2a, 0xb6, 0x33, - 0xc4, 0xeb, 0x28, 0x4f, 0x88, 0x05, 0x3c, 0x84, 0x6e, 0x56, 0x26, 0x27, 0x22, 0x6f, 0x42, 0xbe, - 0x42, 0xdb, 0x07, 0xb1, 0xf7, 0x56, 0x12, 0xc4, 0xa1, 0x40, 0x68, 0xd0, 0xf6, 0x81, 0x89, 0x24, - 0xc6, 0x4f, 0x65, 0xe1, 0x44, 0x4a, 0xb3, 0xee, 0x7f, 0xf1, 0x19, 0x95, 0x8a, 0x65, 0x4d, 0x2a, - 0xca, 0x4b, 0xca, 0x9e, 0x03, 0x9f, 0x2a, 0x24, 0xff, 0x66, 0x06, 0x4e, 0xe9, 0x0b, 0x54, 0xb8, - 0x42, 0xde, 0xbf, 0x4e, 0xde, 0x82, 0xe1, 0x15, 0x6a, 0x37, 0xa8, 0x7c, 0x8b, 0xe1, 0x44, 0x98, - 0x92, 0x86, 0x47, 0xf1, 0xf1, 0x42, 0xce, 0x36, 0x8a, 0xf9, 0xe0, 0x50, 0x52, 0x11, 0x8d, 0xe3, - 0xfa, 0xb8, 0x21, 0x23, 0x6a, 0xd3, 0xaa, 0xea, 0x73, 0xd5, 0xff, 0xdd, 0x0c, 0x9c, 0xe9, 0x43, - 0xc3, 0x26, 0x8e, 0x4d, 0xbd, 0x3a, 0x71, 0xb8, 0xa3, 0x22, 0x94, 0xbc, 0x0b, 0x53, 0x9b, 0x42, - 0x9f, 0x97, 0xd3, 0x91, 0x8d, 0xbe, 0x17, 0xa9, 0xea, 0x5b, 0x72, 0x5e, 0xe2, 0xc8, 0x5a, 0xa8, - 0x77, 0xae, 0x6f, 0xa8, 0xb7, 0x1a, 0x39, 0x9d, 0x1f, 0x34, 0x72, 0xfa, 0x83, 0xf8, 0x33, 0xeb, - 0x22, 0x81, 0x5d, 0x14, 0x37, 0x9e, 0xe9, 0x1d, 0x37, 0xde, 0x37, 0x4d, 0x96, 0xf1, 0xe3, 0x19, - 0x28, 0xea, 0xbc, 0x9f, 0x74, 0x3e, 0xdf, 0xd1, 0xe6, 0xf3, 0x4c, 0xfa, 0x7c, 0xf6, 0x9e, 0xc8, - 0xff, 0x2d, 0x13, 0xef, 0xec, 0x40, 0x33, 0x68, 0xc0, 0x70, 0xc5, 0x6d, 0xd9, 0x4e, 0x5b, 0x7d, - 0xe9, 0xb3, 0x81, 0x10, 0x53, 0x94, 0x0c, 0x16, 0x66, 0x7f, 0x1e, 0x86, 0xd6, 0xdc, 0x76, 0xa9, - 0x22, 0x3c, 0x05, 0x91, 0x4f, 0xdb, 0x6d, 0x5b, 0x76, 0xc3, 0xe4, 0x05, 0x64, 0x15, 0xa0, 0x56, - 0xf7, 0x28, 0x6d, 0xd7, 0x9c, 0x6f, 0xd3, 0x98, 0xa6, 0xc1, 0x46, 0xa8, 0xd9, 0x45, 0xc1, 0x82, - 0x77, 0x3c, 0x3e, 0x22, 0x5a, 0xbe, 0xf3, 0x6d, 0x55, 0xde, 0x2a, 0xf4, 0x06, 0x05, 0x88, 0x88, - 0xf0, 0xd9, 0x33, 0xa7, 0x21, 0x9e, 0xb2, 0x9d, 0x10, 0xcf, 0x9e, 0x31, 0x80, 0xf6, 0xec, 0x19, - 0x03, 0x30, 0xd1, 0xbe, 0x42, 0x9d, 0xdd, 0x3d, 0xee, 0x32, 0x32, 0xc1, 0x97, 0xea, 0x1e, 0x42, - 0x54, 0xd1, 0xce, 0x71, 0x8c, 0xdf, 0x1e, 0x82, 0xd3, 0x26, 0xdd, 0x75, 0x98, 0x9a, 0x7c, 0xcf, - 0x77, 0xda, 0xbb, 0x5a, 0x20, 0xb4, 0x11, 0x5b, 0x48, 0x22, 0x6b, 0x30, 0x83, 0x84, 0x03, 0x73, - 0x19, 0x0a, 0x6c, 0x57, 0x54, 0xd6, 0x12, 0xde, 0xa1, 0xe0, 0x3b, 0xdd, 0x7c, 0x91, 0xcb, 0x62, - 0xf2, 0x8a, 0xd8, 0xb5, 0x95, 0xbc, 0xee, 0x6c, 0xd7, 0xfe, 0xe4, 0x70, 0x01, 0x6a, 0x07, 0x7e, - 0x40, 0xf1, 0xc4, 0x26, 0x76, 0xee, 0x50, 0xb5, 0xce, 0xf7, 0x50, 0xad, 0xef, 0xc2, 0x6c, 0xa9, - 0xc1, 0x85, 0xb5, 0xdd, 0xdc, 0xf0, 0x9c, 0x76, 0xdd, 0xe9, 0xd8, 0x4d, 0x79, 0x5c, 0xc4, 0x51, - 0xb6, 0xc3, 0x72, 0xab, 0x13, 0x22, 0x98, 0xa9, 0x64, 0xac, 0x1b, 0x95, 0xb5, 0x1a, 0xc6, 0x0b, - 0x8b, 0xeb, 0x31, 0xec, 0x46, 0xa3, 0xed, 0x63, 0x2f, 0x7c, 0x33, 0x2c, 0x46, 0xa5, 0x1e, 0x7d, - 0x10, 0x36, 0x57, 0x6b, 0x51, 0x48, 0x11, 0x4f, 0x3b, 0xcb, 0xfd, 0x14, 0x82, 0xa6, 0x8f, 0xbe, - 0x0a, 0x1a, 0x5e, 0x44, 0x57, 0xab, 0xad, 0x30, 0xba, 0x42, 0x82, 0xce, 0xf7, 0xf7, 0x54, 0x3a, - 0x8e, 0x47, 0xae, 0xb2, 0xa5, 0xd0, 0x72, 0x03, 0x8a, 0xeb, 0x7c, 0x34, 0x3a, 0x02, 0x78, 0x08, - 0xe5, 0x47, 0x00, 0x05, 0x85, 0xbc, 0x0d, 0x33, 0xcb, 0x4b, 0x8b, 0xd2, 0xa8, 0x59, 0x71, 0xeb, - 0x5d, 0xbc, 0x55, 0x06, 0xac, 0x0f, 0xe7, 0x90, 0xd6, 0x17, 0xd9, 0xe2, 0x4e, 0x43, 0x23, 0x17, - 0x61, 0xa4, 0x5a, 0xe1, 0x63, 0x3f, 0xa6, 0xbe, 0xad, 0x20, 0xbc, 0x35, 0x64, 0x21, 0x59, 0x8f, - 0x74, 0xd4, 0xf1, 0x23, 0x95, 0xc9, 0xd3, 0x03, 0xe8, 0xa7, 0x6f, 0xc2, 0x44, 0xd9, 0x0d, 0xaa, - 0x6d, 0x3f, 0xb0, 0xdb, 0x75, 0x5a, 0xad, 0xa8, 0x89, 0x0e, 0xb7, 0xdd, 0xc0, 0x72, 0x44, 0x09, - 0x6b, 0xb9, 0x8e, 0x29, 0x5e, 0x6f, 0xe0, 0xaf, 0x04, 0x2d, 0xb9, 0x0d, 0xea, 0xdf, 0xbf, 0xf6, - 0x39, 0x7b, 0xbd, 0x41, 0xe9, 0x1b, 0x0a, 0xbe, 0x6b, 0xa9, 0x52, 0xf2, 0xdf, 0xc4, 0xd7, 0x1b, - 0x12, 0xb8, 0xe4, 0xcb, 0x30, 0x84, 0x3f, 0x85, 0xca, 0x34, 0x93, 0xc2, 0x36, 0x52, 0x97, 0xea, - 0xfc, 0x91, 0x5f, 0x24, 0x20, 0x55, 0x18, 0x11, 0xda, 0xfa, 0x71, 0x72, 0x90, 0x0b, 0xb5, 0x9f, - 0xcf, 0xaf, 0xa0, 0x37, 0x1a, 0x30, 0xae, 0x56, 0xc8, 0xd6, 0xf5, 0x8a, 0xed, 0xef, 0xd1, 0x06, - 0xfb, 0x25, 0x9e, 0x0f, 0xc1, 0x75, 0xbd, 0x87, 0x50, 0x8b, 0xb5, 0xc3, 0x54, 0x50, 0x98, 0xa0, - 0xae, 0xfa, 0xf7, 0x7c, 0xd1, 0x14, 0x71, 0x7e, 0x77, 0xd0, 0x16, 0xd4, 0x30, 0x45, 0x91, 0xf1, - 0x3d, 0x30, 0xbb, 0xd6, 0x6d, 0x36, 0xd9, 0x59, 0x5e, 0xa6, 0x97, 0x0e, 0xec, 0x80, 0x92, 0x32, - 0x0c, 0xd5, 0x94, 0x67, 0x03, 0x67, 0xc2, 0xfc, 0xdd, 0x11, 0x0e, 0xba, 0xb7, 0x65, 0x30, 0x02, - 0x3b, 0xf6, 0x60, 0x20, 0x27, 0x35, 0x7e, 0x37, 0x7a, 0x6e, 0x7a, 0xd3, 0xb3, 0xeb, 0x0f, 0xc2, - 0xa7, 0x23, 0x07, 0x7d, 0x39, 0xfb, 0xb6, 0x6c, 0x84, 0xbe, 0x0b, 0xa6, 0x35, 0xf8, 0xa8, 0xc6, - 0x90, 0xb7, 0x61, 0x4c, 0xec, 0x84, 0x4a, 0xde, 0x20, 0x4c, 0xce, 0x20, 0xdf, 0xae, 0x8f, 0x79, - 0x2a, 0xa8, 0xe8, 0xb8, 0xc1, 0xeb, 0x5d, 0xb9, 0x7f, 0xed, 0xb3, 0xd8, 0xe0, 0xf5, 0x3a, 0xfa, - 0x2c, 0xdd, 0xdf, 0x1c, 0x8b, 0x8f, 0xad, 0x58, 0xbb, 0x37, 0xd4, 0x4c, 0x21, 0x99, 0xe8, 0xb8, - 0x15, 0x65, 0x0a, 0x51, 0x8f, 0x5b, 0x21, 0x6a, 0x38, 0x27, 0xd9, 0x23, 0xe6, 0xe4, 0x5d, 0x39, - 0x27, 0xb9, 0xde, 0x0b, 0x63, 0xa6, 0xcf, 0x3c, 0xd4, 0xa2, 0x2f, 0x24, 0x3f, 0xd0, 0x59, 0xfd, - 0x39, 0x4c, 0x89, 0xca, 0x49, 0xe2, 0xb2, 0x50, 0x70, 0x52, 0x0d, 0x00, 0x43, 0x83, 0x33, 0x3d, - 0x42, 0xc0, 0x7e, 0x05, 0xc6, 0x4b, 0x41, 0x60, 0xd7, 0xf7, 0x68, 0xa3, 0xc2, 0xc4, 0x93, 0x92, - 0xd4, 0xc0, 0x16, 0x70, 0xf5, 0x26, 0x46, 0xc5, 0xe5, 0x49, 0xba, 0x6c, 0x5f, 0x38, 0xca, 0x85, - 0x49, 0xba, 0x18, 0x44, 0x4f, 0xd2, 0xc5, 0x20, 0xe4, 0x2a, 0x8c, 0x54, 0xdb, 0x0f, 0x1d, 0x36, - 0x26, 0x05, 0xe5, 0x81, 0x7c, 0x0e, 0x52, 0x85, 0xab, 0xc0, 0x22, 0x6f, 0x2a, 0x9a, 0xf2, 0x68, - 0x74, 0x2a, 0xe6, 0x76, 0x94, 0x30, 0x1e, 0x5a, 0xd5, 0x82, 0x43, 0xd5, 0xf9, 0x06, 0x8c, 0x48, - 0xf3, 0x18, 0x44, 0x27, 0x61, 0x41, 0x99, 0x0c, 0xbc, 0x94, 0xc8, 0xf8, 0xda, 0xa0, 0xf2, 0x0c, - 0xca, 0x98, 0xf2, 0xda, 0xa0, 0xf2, 0x0c, 0x8a, 0xf6, 0xda, 0xa0, 0xf2, 0x20, 0x4a, 0x68, 0x59, - 0x18, 0x3f, 0xd2, 0xb2, 0x70, 0x1f, 0xc6, 0x37, 0x6c, 0x2f, 0x70, 0x98, 0xa6, 0xd1, 0x0e, 0xfc, - 0xb9, 0x09, 0xcd, 0x18, 0xa7, 0x14, 0x95, 0x9f, 0x97, 0x0f, 0xe4, 0x75, 0x14, 0x7c, 0xfd, 0x25, - 0xb7, 0x08, 0x9e, 0xee, 0x26, 0x37, 0xf9, 0x24, 0x6e, 0x72, 0x38, 0xa8, 0x68, 0x80, 0x99, 0x8a, - 0x8e, 0xf9, 0xa8, 0x09, 0xc7, 0xac, 0x30, 0x21, 0x22, 0xf9, 0x3a, 0x8c, 0xb3, 0xbf, 0xf1, 0x4d, - 0x7a, 0x87, 0xfa, 0x73, 0x45, 0xec, 0xdc, 0xf3, 0xa9, 0x5f, 0x3f, 0x7f, 0xb8, 0xbe, 0x46, 0x03, - 0xfe, 0x01, 0x23, 0xe3, 0xb8, 0x65, 0x55, 0xe3, 0x46, 0xde, 0x83, 0x71, 0xb6, 0xfa, 0xb6, 0x6d, - 0x9f, 0x2b, 0x98, 0xd3, 0x91, 0xa3, 0x63, 0x43, 0xc0, 0x13, 0x79, 0xf2, 0x54, 0x02, 0xb6, 0xcd, - 0x97, 0x3a, 0x5c, 0x40, 0x12, 0x65, 0xb5, 0x77, 0x12, 0xc2, 0x51, 0xa2, 0x91, 0xf7, 0x61, 0xbc, - 0xd4, 0xe9, 0x44, 0x12, 0x67, 0x46, 0xb1, 0xae, 0x74, 0x3a, 0x56, 0xaa, 0xd4, 0xd1, 0x28, 0xe2, - 0x82, 0x79, 0xf6, 0x58, 0x82, 0x99, 0xbc, 0x1e, 0xea, 0xdc, 0x27, 0x22, 0x53, 0xa1, 0x38, 0x8d, - 0x68, 0x0a, 0x3c, 0x57, 0xbf, 0x97, 0x60, 0x82, 0xdb, 0xce, 0xa4, 0x36, 0x73, 0x32, 0xf1, 0xf5, - 0xa4, 0x28, 0x35, 0x3a, 0x0d, 0x59, 0x86, 0x49, 0x1e, 0x63, 0xd6, 0x14, 0x09, 0x0c, 0xe7, 0x4e, - 0x45, 0x2f, 0x1f, 0xf3, 0xd0, 0xb4, 0x26, 0xe6, 0xb5, 0xb6, 0x35, 0x2e, 0x31, 0x22, 0xe3, 0x8f, - 0x33, 0x70, 0xaa, 0xc7, 0x8c, 0x87, 0xe9, 0xed, 0x32, 0xfd, 0xd3, 0xdb, 0x31, 0xc9, 0xa1, 0x1f, - 0xb5, 0xb1, 0xff, 0x42, 0xcb, 0x52, 0xe7, 0x4b, 0xea, 0x5b, 0x2e, 0x10, 0x91, 0x3a, 0x5e, 0x54, - 0x7d, 0xdb, 0x45, 0x7b, 0x5f, 0x2e, 0xb9, 0x09, 0x09, 0x3c, 0xde, 0xa8, 0xb2, 0xf1, 0xf8, 0x70, - 0xe1, 0x79, 0x91, 0x99, 0x3e, 0x9c, 0xd6, 0x8f, 0x5d, 0xed, 0x0b, 0x4e, 0x61, 0x6d, 0x1c, 0x66, - 0x60, 0x4c, 0xf9, 0x0e, 0xc9, 0x79, 0x25, 0x62, 0xad, 0xc8, 0xdf, 0x36, 0x50, 0x38, 0x64, 0xf9, - 0x4e, 0x84, 0x1f, 0x55, 0xf6, 0x68, 0xab, 0xe6, 0x5d, 0xa6, 0x0a, 0x29, 0x29, 0x00, 0x5b, 0x9a, - 0x09, 0xd2, 0xc4, 0x72, 0x7c, 0xd7, 0xd3, 0xf6, 0x83, 0x52, 0x3d, 0x70, 0x1e, 0xd2, 0x01, 0x36, - 0x9d, 0xe8, 0x5d, 0x4f, 0xdb, 0x0f, 0x2c, 0x1b, 0xc9, 0x12, 0xef, 0x7a, 0x86, 0x0c, 0x8d, 0x1f, - 0xca, 0x00, 0xdc, 0xab, 0x2e, 0x61, 0x0e, 0xcf, 0x27, 0x55, 0x0a, 0xd2, 0xf3, 0xa2, 0x49, 0xee, - 0x7d, 0xd4, 0x81, 0xff, 0x2e, 0x03, 0x93, 0x3a, 0x1a, 0x79, 0x17, 0xa6, 0x6a, 0x75, 0xcf, 0x6d, - 0x36, 0xb7, 0xed, 0xfa, 0x83, 0x55, 0xa7, 0x4d, 0x79, 0x46, 0xaa, 0x21, 0xbe, 0x17, 0xf9, 0x61, - 0x91, 0xd5, 0x64, 0x65, 0x66, 0x1c, 0x99, 0xfc, 0x70, 0x06, 0x26, 0x6a, 0x7b, 0xee, 0x7e, 0xf4, - 0xdc, 0x3a, 0x9f, 0x90, 0x8f, 0xd8, 0xb7, 0xed, 0xef, 0xb9, 0xfb, 0x56, 0xca, 0x9b, 0xeb, 0x9f, - 0x1c, 0x2e, 0xbc, 0x33, 0xd8, 0x65, 0x6f, 0xdd, 0xc5, 0xf3, 0x48, 0xe0, 0x5f, 0xd1, 0x2a, 0x31, - 0xf5, 0x3a, 0x8d, 0x3f, 0xcb, 0xc0, 0x18, 0x9e, 0x5c, 0x9a, 0x4d, 0xd4, 0xb9, 0x3e, 0x4f, 0xaf, - 0xec, 0x84, 0xfd, 0xea, 0x33, 0xb1, 0x6f, 0xc0, 0x54, 0x0c, 0x8d, 0x18, 0x30, 0x5c, 0xc3, 0x28, - 0x65, 0xd5, 0xcc, 0xc0, 0xe3, 0x96, 0x4d, 0x51, 0x62, 0x2c, 0x2b, 0x64, 0xf7, 0xaf, 0xe1, 0x5d, - 0xe1, 0x22, 0x80, 0x23, 0x41, 0xf2, 0x64, 0x43, 0xe2, 0x2d, 0xb9, 0x7f, 0xcd, 0x54, 0xb0, 0x8c, - 0x35, 0x18, 0xae, 0xb9, 0x5e, 0x50, 0x3e, 0xe0, 0x87, 0x89, 0x0a, 0xf5, 0xeb, 0xea, 0x65, 0xa0, - 0x83, 0x06, 0xf8, 0xba, 0x29, 0x8a, 0xc8, 0x02, 0x0c, 0xdd, 0x74, 0x68, 0xb3, 0xa1, 0x7a, 0x7d, - 0xee, 0x30, 0x80, 0xc9, 0xe1, 0xec, 0xc0, 0x75, 0x32, 0x4a, 0x75, 0x1d, 0xb9, 0x97, 0x3e, 0xe9, - 0x77, 0xb3, 0xa4, 0x8d, 0xef, 0x0b, 0xfa, 0x23, 0xb6, 0x5a, 0x4d, 0x7d, 0x86, 0xfa, 0x3f, 0xc8, - 0xc0, 0x7c, 0x6f, 0x12, 0xd5, 0x63, 0x35, 0xd3, 0xc7, 0x63, 0xf5, 0xa5, 0xf8, 0xe5, 0x15, 0xa2, - 0x89, 0xcb, 0xab, 0xe8, 0xca, 0xaa, 0x82, 0x0e, 0xc3, 0xf5, 0xf0, 0x8d, 0xf1, 0xf3, 0x7d, 0xda, - 0x8c, 0x88, 0x7c, 0x9a, 0x03, 0xa4, 0x31, 0x05, 0xad, 0xf1, 0x1b, 0x79, 0x38, 0xdd, 0x93, 0x82, - 0xac, 0x28, 0x59, 0xf3, 0x27, 0xc3, 0x7c, 0xdd, 0x3d, 0xf1, 0xaf, 0xe0, 0xbf, 0xe8, 0x13, 0x16, - 0x8f, 0x63, 0x59, 0x0f, 0xb3, 0xa5, 0x67, 0x91, 0xd7, 0xab, 0x47, 0xf2, 0xe2, 0xe8, 0xc8, 0x0c, - 0x92, 0x89, 0xd3, 0x31, 0xe2, 0x89, 0x06, 0xb6, 0xd3, 0xf4, 0xd5, 0xcf, 0xae, 0xc1, 0x41, 0xa6, - 0x2c, 0x8b, 0xdc, 0x88, 0xf3, 0xe9, 0x6e, 0xc4, 0xc6, 0xff, 0x93, 0x81, 0xd1, 0xb0, 0xd9, 0x64, - 0x1e, 0x4e, 0x6e, 0x9a, 0xa5, 0xa5, 0x65, 0x6b, 0xf3, 0x83, 0x8d, 0x65, 0xeb, 0xde, 0x5a, 0x6d, - 0x63, 0x79, 0xa9, 0x7a, 0xb3, 0xba, 0x5c, 0x29, 0x3e, 0x47, 0xa6, 0x61, 0xe2, 0xde, 0xda, 0x9d, - 0xb5, 0xf5, 0xad, 0x35, 0x6b, 0xd9, 0x34, 0xd7, 0xcd, 0x62, 0x86, 0x4c, 0xc0, 0xa8, 0x59, 0x2e, - 0x2d, 0x59, 0x6b, 0xeb, 0x95, 0xe5, 0x62, 0x96, 0x14, 0x61, 0x7c, 0x69, 0x7d, 0x6d, 0x6d, 0x79, - 0x69, 0xb3, 0x7a, 0xbf, 0xba, 0xf9, 0x41, 0x31, 0x47, 0x08, 0x4c, 0x22, 0xc2, 0x86, 0x59, 0x5d, - 0x5b, 0xaa, 0x6e, 0x94, 0x56, 0x8b, 0x79, 0x06, 0x63, 0xf8, 0x0a, 0x6c, 0x28, 0x64, 0x74, 0xe7, - 0x5e, 0x79, 0xb9, 0x38, 0xcc, 0x50, 0xd8, 0x5f, 0x0a, 0xca, 0x08, 0xab, 0x1e, 0x51, 0x2a, 0xa5, - 0xcd, 0x52, 0xb9, 0x54, 0x5b, 0x2e, 0x16, 0xc8, 0x29, 0x98, 0xd1, 0x40, 0xd6, 0xea, 0xfa, 0xad, - 0xea, 0x5a, 0x71, 0x94, 0xcc, 0x42, 0x31, 0x84, 0x55, 0xca, 0xd6, 0xbd, 0xda, 0xb2, 0x59, 0x84, - 0x38, 0x74, 0xad, 0x74, 0x77, 0xb9, 0x38, 0x66, 0xbc, 0xc3, 0x23, 0x8c, 0xf8, 0x50, 0x93, 0x93, - 0x40, 0x6a, 0x9b, 0xa5, 0xcd, 0x7b, 0xb5, 0x58, 0xe7, 0xc7, 0x60, 0xa4, 0x76, 0x6f, 0x69, 0x69, - 0xb9, 0x56, 0x2b, 0x66, 0x08, 0xc0, 0xf0, 0xcd, 0x52, 0x75, 0x75, 0xb9, 0x52, 0xcc, 0x1a, 0x3f, - 0x99, 0x81, 0x69, 0xa9, 0x01, 0xca, 0x9b, 0x88, 0x27, 0xfc, 0x16, 0xdf, 0xd5, 0x0e, 0xb6, 0x32, - 0x00, 0x24, 0x56, 0x49, 0x9f, 0xcf, 0xd0, 0x83, 0x13, 0xa9, 0xc8, 0xe4, 0x03, 0x28, 0xca, 0x06, - 0xdc, 0xb5, 0x83, 0xfa, 0x5e, 0x24, 0xc6, 0x9e, 0x8f, 0x55, 0x12, 0x43, 0xe3, 0xb6, 0xc9, 0xe8, - 0x19, 0xbf, 0x04, 0x1b, 0xe3, 0xe7, 0x32, 0x70, 0xaa, 0x07, 0x31, 0x59, 0x82, 0xe1, 0x30, 0x89, - 0x78, 0x1f, 0x5f, 0xa7, 0xd9, 0xef, 0x1e, 0x2e, 0x08, 0x44, 0x7c, 0xcd, 0x0c, 0xff, 0x32, 0x87, - 0xc3, 0xac, 0xe0, 0x98, 0x9a, 0x9b, 0x8f, 0xc9, 0xe9, 0xd8, 0x70, 0x8a, 0x9a, 0x4a, 0x5b, 0xb5, - 0xf2, 0x98, 0x18, 0x90, 0x9c, 0xbd, 0xef, 0x63, 0x6e, 0x6e, 0xe3, 0xa7, 0x33, 0x4c, 0x63, 0x8b, - 0x23, 0x32, 0x45, 0xb6, 0xe4, 0xfb, 0xdd, 0x16, 0x35, 0xdd, 0x26, 0x2d, 0x99, 0x6b, 0x62, 0x2f, - 0x40, 0x15, 0xd4, 0xc6, 0x02, 0x3c, 0x2b, 0x58, 0xb6, 0xd7, 0xd6, 0xee, 0x35, 0x55, 0x1a, 0xf2, - 0x26, 0x40, 0xf8, 0xaa, 0xbc, 0x4c, 0x12, 0xc0, 0x93, 0x64, 0x08, 0xa8, 0xae, 0x44, 0x2b, 0xc8, - 0xc6, 0x5f, 0xc9, 0xc0, 0xb8, 0x38, 0x09, 0x95, 0x9a, 0xd4, 0x0b, 0x9e, 0x6c, 0xcd, 0xbc, 0xa9, - 0xad, 0x99, 0xd0, 0xb5, 0x5f, 0xe1, 0xcf, 0x8a, 0x53, 0x97, 0xcb, 0x3f, 0xca, 0x40, 0x31, 0x8e, - 0x48, 0xde, 0x85, 0x42, 0x8d, 0x3e, 0xa4, 0x9e, 0x13, 0x1c, 0x08, 0xe9, 0x27, 0x9f, 0x5b, 0xe1, - 0x38, 0xa2, 0x8c, 0xdb, 0x6a, 0x7d, 0xf1, 0xcb, 0x0c, 0x69, 0x06, 0x15, 0xe2, 0x8a, 0x2d, 0x23, - 0xf7, 0xb4, 0x6c, 0x19, 0xc6, 0xff, 0x9c, 0x85, 0x53, 0xb7, 0x68, 0xa0, 0xf6, 0x29, 0xbc, 0x88, - 0xfe, 0xc2, 0x60, 0xfd, 0x52, 0x7a, 0x32, 0x07, 0x23, 0x58, 0x24, 0xe7, 0xd7, 0x94, 0x3f, 0x49, - 0x39, 0x5c, 0xd7, 0x39, 0xed, 0x3d, 0x87, 0x1e, 0x75, 0x5f, 0x51, 0x32, 0xbc, 0x87, 0xcb, 0xfa, - 0x22, 0x4c, 0x62, 0x0a, 0xd3, 0x2e, 0xfb, 0x1c, 0x68, 0x43, 0xd8, 0x74, 0x0a, 0x66, 0x0c, 0x4a, - 0x5e, 0x81, 0x22, 0x83, 0x94, 0xea, 0x0f, 0xda, 0xee, 0x7e, 0x93, 0x36, 0x76, 0x29, 0x7f, 0x06, - 0xbc, 0x60, 0x26, 0xe0, 0x92, 0xe7, 0xbd, 0x36, 0x3f, 0x8f, 0xd1, 0x06, 0x1a, 0x5e, 0x04, 0xcf, - 0x08, 0x3a, 0xff, 0x26, 0x8c, 0x7d, 0xca, 0xd7, 0x1a, 0x8c, 0xff, 0x29, 0x03, 0xb3, 0xd8, 0x39, - 0xa5, 0x62, 0xf9, 0x92, 0x96, 0x1c, 0x2d, 0x25, 0x81, 0xb9, 0xcd, 0x40, 0xfa, 0xa7, 0x10, 0x8e, - 0x62, 0x64, 0xe8, 0xc9, 0x0e, 0x60, 0xe8, 0xa9, 0x1d, 0xe7, 0xd5, 0xd0, 0x01, 0xed, 0x54, 0xfc, - 0xad, 0xf7, 0x68, 0xca, 0x8d, 0x1f, 0xce, 0xc2, 0x88, 0x49, 0xf1, 0x39, 0x45, 0x72, 0x11, 0x46, - 0xd6, 0xdc, 0x80, 0xfa, 0x77, 0xb5, 0xb7, 0x33, 0xdb, 0x0c, 0x64, 0xb5, 0x1a, 0xa6, 0x2c, 0x64, - 0x0b, 0x7e, 0xc3, 0x73, 0x1b, 0xdd, 0x7a, 0xa0, 0x2e, 0xf8, 0x0e, 0x07, 0x99, 0xb2, 0x8c, 0xbc, - 0x06, 0xa3, 0x82, 0x73, 0x78, 0xfd, 0x87, 0x6e, 0xab, 0x1e, 0x0d, 0x9f, 0xe3, 0x8c, 0x10, 0x50, - 0x51, 0xe5, 0x5a, 0x43, 0x5e, 0x51, 0x54, 0x13, 0x8a, 0x80, 0xd4, 0xbf, 0x87, 0xfa, 0xe8, 0xdf, - 0x5f, 0x80, 0xe1, 0x92, 0xef, 0xd3, 0x40, 0x06, 0x3d, 0x8f, 0x87, 0x19, 0x68, 0x7c, 0x1a, 0x70, - 0xc6, 0x36, 0x96, 0x9b, 0x02, 0xcf, 0xf8, 0xe7, 0x59, 0x18, 0xc2, 0x3f, 0xf1, 0xca, 0xd3, 0xab, - 0xef, 0x69, 0x57, 0x9e, 0x5e, 0x7d, 0xcf, 0x44, 0x28, 0xb9, 0x86, 0xe6, 0x07, 0x99, 0x6b, 0x5f, - 0xf4, 0x1e, 0xed, 0xea, 0x8d, 0x08, 0x6c, 0xaa, 0x38, 0xe1, 0x5d, 0x70, 0x2e, 0x35, 0xd5, 0xc1, - 0x49, 0xc8, 0xae, 0xd7, 0x44, 0x8f, 0x31, 0x25, 0x8b, 0xeb, 0x9b, 0xd9, 0xf5, 0x1a, 0x8e, 0xc6, - 0x4a, 0x69, 0xf1, 0x8d, 0x1b, 0xea, 0x33, 0xaf, 0xfe, 0x9e, 0xbd, 0xf8, 0xc6, 0x0d, 0x53, 0x94, - 0xb0, 0xf1, 0xc5, 0x36, 0xe3, 0x9d, 0x28, 0x0f, 0xd2, 0xc5, 0xf1, 0xc5, 0xbe, 0xe1, 0xfd, 0xa7, - 0x19, 0x21, 0x90, 0x45, 0x18, 0x13, 0xa1, 0xe1, 0x88, 0xaf, 0x84, 0x6e, 0x8b, 0xd0, 0x71, 0x4e, - 0xa1, 0x22, 0xf1, 0xdb, 0x31, 0x31, 0x41, 0xf2, 0x45, 0x30, 0x71, 0x3b, 0x26, 0xa7, 0xd0, 0x37, - 0x15, 0x94, 0x28, 0xc6, 0x38, 0x0a, 0xbe, 0x55, 0x63, 0x8c, 0x31, 0x25, 0x6d, 0x88, 0x60, 0xfc, - 0x52, 0x16, 0x0a, 0x1b, 0xcd, 0xee, 0xae, 0xd3, 0xbe, 0x7f, 0x8d, 0x10, 0xc0, 0xb3, 0x99, 0xcc, - 0x59, 0xcc, 0xfe, 0x26, 0xa7, 0xa1, 0x20, 0x8f, 0x63, 0x52, 0x20, 0xf9, 0xe2, 0x28, 0x36, 0x07, - 0x72, 0xde, 0xc5, 0x9b, 0xf0, 0xf2, 0x27, 0xb9, 0x06, 0xe1, 0xa1, 0xaa, 0xd7, 0xe9, 0x2b, 0xcf, - 0x3e, 0x16, 0x33, 0x44, 0x23, 0xaf, 0x03, 0x6e, 0x12, 0xe2, 0x44, 0x20, 0xad, 0xd4, 0xbc, 0x69, - 0x42, 0xf9, 0xe0, 0x24, 0x88, 0x46, 0xae, 0x83, 0x58, 0x98, 0xe2, 0xe5, 0xc9, 0x13, 0x3a, 0x01, - 0x7f, 0xcb, 0x47, 0x92, 0x08, 0x54, 0xf2, 0x36, 0x8c, 0x45, 0x6f, 0xbe, 0x47, 0x0f, 0x4a, 0xaa, - 0x94, 0x4b, 0x51, 0xf9, 0xfd, 0x6b, 0xa6, 0x8a, 0x6e, 0xfc, 0x67, 0xc3, 0x30, 0xae, 0xb6, 0x87, - 0x98, 0x30, 0xe3, 0x37, 0xd9, 0x81, 0x5c, 0xb8, 0x25, 0x75, 0xb0, 0x50, 0x6c, 0xa7, 0xe7, 0xf5, - 0x06, 0x31, 0x3c, 0xee, 0xa3, 0x24, 0x63, 0xda, 0x57, 0x9e, 0x33, 0xa7, 0xfd, 0x08, 0xcc, 0xf1, - 0x48, 0x09, 0x0a, 0x6e, 0xc7, 0xdf, 0xa5, 0x6d, 0x47, 0x5e, 0xa2, 0x5c, 0xd0, 0x18, 0xad, 0x8b, - 0xc2, 0x04, 0xaf, 0x90, 0x8c, 0xbc, 0x01, 0xc3, 0x6e, 0x87, 0xb6, 0x6d, 0x47, 0xec, 0x71, 0x67, - 0x62, 0x0c, 0x68, 0xbb, 0x54, 0x55, 0x08, 0x05, 0x32, 0xb9, 0x0a, 0x79, 0xf7, 0x41, 0x38, 0x5f, - 0xa7, 0x75, 0xa2, 0x07, 0x81, 0xad, 0x90, 0x20, 0x22, 0x23, 0xf8, 0xd8, 0x6e, 0xed, 0x88, 0x19, - 0xd3, 0x09, 0x6e, 0xdb, 0xad, 0x1d, 0x95, 0x80, 0x21, 0x92, 0xf7, 0x00, 0x3a, 0xf6, 0x2e, 0xf5, - 0xac, 0x46, 0x37, 0x38, 0x10, 0xf3, 0xf6, 0xbc, 0x46, 0xb6, 0xc1, 0x8a, 0x2b, 0xdd, 0xe0, 0x40, - 0xa1, 0x1d, 0xed, 0x48, 0x20, 0x29, 0x01, 0xb4, 0xec, 0x20, 0xa0, 0x5e, 0xcb, 0x15, 0x7e, 0x61, - 0x63, 0xe1, 0x83, 0x8d, 0x9c, 0xc1, 0xdd, 0xb0, 0x58, 0xe1, 0xa0, 0x10, 0x61, 0xa3, 0x1d, 0xcf, - 0x16, 0xef, 0x7f, 0xc6, 0x1a, 0xed, 0x78, 0x5a, 0x2f, 0x19, 0x22, 0xf9, 0x32, 0x8c, 0x34, 0x1c, - 0xbf, 0xee, 0x7a, 0x0d, 0x91, 0xec, 0xe0, 0xac, 0x46, 0x53, 0xe1, 0x65, 0x0a, 0x99, 0x44, 0x67, - 0xad, 0x15, 0xf9, 0xd4, 0xd6, 0xdc, 0x7d, 0xb4, 0xdd, 0xc7, 0x5b, 0x5b, 0x0b, 0x8b, 0xd5, 0xd6, - 0x46, 0x44, 0x6c, 0x2a, 0x77, 0x9d, 0xa0, 0x69, 0x6f, 0x8b, 0x2b, 0x68, 0x7d, 0x2a, 0x6f, 0x61, - 0x91, 0x3a, 0x95, 0x1c, 0x99, 0xbc, 0x09, 0x05, 0xda, 0x0e, 0x3c, 0xdb, 0x72, 0x1a, 0x22, 0x9e, - 0x4e, 0x6f, 0x34, 0xdb, 0x80, 0xed, 0x6a, 0x45, 0x6d, 0x34, 0xe2, 0x57, 0x1b, 0x6c, 0x7c, 0xfc, - 0xba, 0xd3, 0x12, 0x61, 0x70, 0xfa, 0xf8, 0xd4, 0x96, 0xaa, 0x77, 0xd5, 0xf1, 0x61, 0x88, 0xe4, - 0x79, 0x80, 0x5d, 0xda, 0xa6, 0x3c, 0x26, 0x95, 0xdf, 0x32, 0x98, 0x0a, 0xe4, 0x2b, 0xf9, 0xff, - 0xf5, 0x17, 0x16, 0x32, 0x65, 0x80, 0x82, 0xcc, 0xf6, 0x60, 0xac, 0xc2, 0xe9, 0x9e, 0x1f, 0x05, - 0xb9, 0x0c, 0xc5, 0x1d, 0x5b, 0xd8, 0xb9, 0xea, 0x7b, 0x76, 0xbb, 0x4d, 0x9b, 0x42, 0x1c, 0x4d, - 0x49, 0xf8, 0x12, 0x07, 0x73, 0xce, 0xc6, 0x7b, 0x30, 0x9b, 0x36, 0x1a, 0xe4, 0x05, 0x18, 0x57, - 0x13, 0x5b, 0x08, 0x26, 0x63, 0x76, 0xc7, 0x91, 0xa9, 0x2d, 0x04, 0x83, 0x5f, 0xcf, 0xc0, 0xd9, - 0x7e, 0xdf, 0x16, 0x99, 0x87, 0x42, 0xc7, 0x73, 0x5c, 0xd4, 0xe1, 0xb8, 0x04, 0x0c, 0x7f, 0x93, - 0x73, 0x00, 0x5c, 0xd9, 0x08, 0xec, 0x5d, 0xe1, 0x27, 0x6f, 0x8e, 0x22, 0x64, 0xd3, 0xde, 0xf5, - 0xc9, 0xab, 0x30, 0xdd, 0xa0, 0x3b, 0x76, 0xb7, 0x19, 0x58, 0x7e, 0x7d, 0x8f, 0x36, 0x30, 0x34, - 0x05, 0xfd, 0x9f, 0xcc, 0xa2, 0x28, 0xa8, 0x49, 0x78, 0xa2, 0xc5, 0x43, 0x3d, 0x5a, 0x7c, 0x3b, - 0x5f, 0xc8, 0x14, 0xb3, 0x26, 0xba, 0x01, 0x19, 0x3f, 0x90, 0x85, 0xb9, 0x5e, 0x8b, 0x89, 0xbc, - 0x93, 0x36, 0x06, 0xdc, 0x54, 0xaf, 0xc2, 0x55, 0x53, 0xbd, 0x52, 0x1b, 0x59, 0x84, 0x30, 0xb0, - 0xe4, 0xa8, 0x20, 0x71, 0x09, 0x63, 0x34, 0x1d, 0xdb, 0xf7, 0xf7, 0xd9, 0xf7, 0x92, 0x53, 0x12, - 0xd7, 0x09, 0x98, 0x4a, 0x23, 0x61, 0xe4, 0x4b, 0x00, 0xf5, 0xa6, 0xeb, 0x53, 0xbc, 0x11, 0x17, - 0x1b, 0x31, 0xf7, 0xae, 0x0d, 0xa1, 0xea, 0x15, 0x28, 0x42, 0x97, 0xdc, 0x06, 0x15, 0x13, 0x68, - 0xc3, 0xa9, 0x1e, 0xd2, 0x83, 0x4d, 0x4f, 0xf4, 0xcc, 0xa5, 0x4c, 0x9a, 0xdf, 0x0d, 0x1f, 0xbb, - 0x8c, 0x8f, 0x78, 0xb6, 0xd7, 0x1a, 0x39, 0x00, 0x92, 0x14, 0x11, 0x8c, 0xbb, 0xf0, 0x11, 0xed, - 0x7a, 0x21, 0x77, 0x0e, 0xb9, 0xe7, 0x35, 0xc9, 0x02, 0x8c, 0xc9, 0x47, 0x71, 0x98, 0xa2, 0xcb, - 0x99, 0x83, 0x00, 0xdd, 0xa1, 0xb8, 0x78, 0x30, 0xbf, 0x22, 0x86, 0x0f, 0x89, 0x2d, 0x74, 0x14, - 0x21, 0x9b, 0x07, 0x1d, 0xd9, 0xbb, 0xb3, 0x72, 0x7d, 0xeb, 0x82, 0x5b, 0x94, 0xfe, 0x4c, 0x46, - 0x4e, 0x7f, 0x52, 0xf2, 0x1d, 0xd5, 0x3e, 0x02, 0x18, 0xec, 0x21, 0x1a, 0x86, 0x7f, 0xb3, 0x2d, - 0x5d, 0x7e, 0x75, 0x62, 0x4b, 0x17, 0x3f, 0xc9, 0x45, 0x98, 0xf2, 0xb8, 0x3b, 0x60, 0xe0, 0x8a, - 0xf1, 0xc4, 0x99, 0x32, 0x27, 0x38, 0x78, 0xd3, 0xc5, 0x31, 0x15, 0xed, 0xba, 0x1d, 0x0e, 0x98, - 0xb2, 0x11, 0x90, 0x2b, 0x30, 0xca, 0x36, 0x02, 0xcc, 0x1b, 0x11, 0xf3, 0x32, 0x47, 0x3c, 0xdc, - 0x56, 0xcd, 0xc2, 0xc7, 0xe2, 0x6f, 0xc1, 0xeb, 0xbf, 0xc8, 0x48, 0x66, 0xea, 0x36, 0x44, 0x4e, - 0xc1, 0x88, 0xeb, 0xed, 0x2a, 0x5d, 0x1b, 0x76, 0xbd, 0x5d, 0xd6, 0xaf, 0x4b, 0x50, 0xe4, 0x41, - 0x0f, 0x3c, 0x9a, 0xdc, 0x3f, 0x68, 0xf3, 0x73, 0x6a, 0xc1, 0x9c, 0xe4, 0x70, 0x7c, 0xf9, 0xf3, - 0xa0, 0x5d, 0x67, 0x98, 0xbe, 0xef, 0x5a, 0x6a, 0xb2, 0x18, 0xd1, 0xed, 0x49, 0xdf, 0x77, 0xa3, - 0xac, 0x31, 0x0d, 0x52, 0x86, 0x09, 0xc6, 0x27, 0x4c, 0x59, 0x23, 0x76, 0xc9, 0x73, 0xc9, 0x5d, - 0xf2, 0xa0, 0x5d, 0x97, 0x4d, 0x34, 0xc7, 0x7d, 0xe5, 0x97, 0xe8, 0xcd, 0xcf, 0x66, 0xe1, 0x64, - 0x3a, 0x3a, 0xce, 0x17, 0xab, 0x04, 0x63, 0x7f, 0xb8, 0xcd, 0xd2, 0x1c, 0x65, 0x10, 0x9e, 0xde, - 0x20, 0xad, 0xb5, 0xd9, 0xd4, 0xd6, 0xbe, 0x02, 0xd3, 0xc8, 0x48, 0xe8, 0x25, 0x4d, 0xc7, 0x0f, - 0x44, 0xd4, 0xbe, 0x39, 0xc5, 0x0a, 0xb8, 0x80, 0x5b, 0x65, 0x60, 0xf2, 0x12, 0x4c, 0x4a, 0x11, - 0xe5, 0xee, 0xb7, 0x59, 0xc5, 0x5c, 0x3e, 0x4d, 0x08, 0xe8, 0x3a, 0x02, 0xc9, 0x09, 0x18, 0xb6, - 0x3b, 0x1d, 0x56, 0x25, 0x17, 0x4b, 0x43, 0x76, 0xa7, 0x53, 0x6d, 0x90, 0x0b, 0x30, 0x81, 0x91, - 0x4e, 0xd6, 0x0e, 0x3a, 0x8a, 0x08, 0xdf, 0x32, 0x73, 0x1c, 0x81, 0xdc, 0x79, 0xc4, 0x67, 0x1f, - 0x02, 0xa3, 0x95, 0x28, 0x23, 0x88, 0x02, 0x76, 0x47, 0x22, 0x88, 0x91, 0xf9, 0x32, 0x4c, 0x89, - 0xdd, 0x54, 0x48, 0x78, 0xa4, 0x14, 0xeb, 0x8f, 0xa9, 0xb9, 0x22, 0x5b, 0x38, 0x08, 0x50, 0xb5, - 0x21, 0x29, 0xff, 0x20, 0x03, 0x27, 0x52, 0xb7, 0x63, 0xf2, 0x4d, 0xe0, 0x81, 0x1f, 0x81, 0x6b, - 0x79, 0xb4, 0xee, 0x74, 0x1c, 0x0c, 0x8d, 0xe7, 0x46, 0xa8, 0xc5, 0x7e, 0x1b, 0x39, 0x06, 0x91, - 0x6c, 0xba, 0x66, 0x48, 0xc4, 0xcf, 0xd1, 0x45, 0x2f, 0x06, 0x9e, 0xff, 0x10, 0x4e, 0xa4, 0xa2, - 0xa6, 0x9c, 0x6f, 0x5f, 0xd3, 0x1f, 0x55, 0x93, 0xb7, 0x0a, 0xb1, 0x4e, 0x2b, 0xe7, 0x5e, 0xd1, - 0xbd, 0xdf, 0x0a, 0xbb, 0x17, 0xdb, 0xb8, 0xc9, 0x72, 0x7c, 0x59, 0xa6, 0xe9, 0x9e, 0x92, 0xa8, - 0xe7, 0xca, 0x24, 0x1f, 0xc2, 0x09, 0xb1, 0x54, 0x76, 0x3d, 0xbb, 0xb3, 0x17, 0xb1, 0xe3, 0x0d, - 0x7d, 0x39, 0x8d, 0x1d, 0x5f, 0x43, 0xb7, 0x18, 0x7e, 0xc8, 0x75, 0xc6, 0x4e, 0x02, 0x45, 0x1f, - 0x3c, 0xb9, 0xe9, 0xa7, 0xb4, 0x26, 0x65, 0x0d, 0x66, 0xd2, 0xd6, 0xe0, 0xc0, 0x1f, 0x80, 0xa8, - 0xf3, 0x07, 0x33, 0x70, 0xfe, 0xa8, 0x36, 0x93, 0x2d, 0x38, 0x89, 0xf7, 0xde, 0xbe, 0x1b, 0x76, - 0xdb, 0xaa, 0xdb, 0xf5, 0x3d, 0x2a, 0x56, 0x89, 0x91, 0xda, 0xf9, 0x4e, 0xa7, 0x56, 0x5b, 0x57, - 0xfa, 0xdd, 0xe9, 0xd4, 0x7c, 0x57, 0xfe, 0x5e, 0x62, 0xe4, 0xa2, 0x0d, 0x0d, 0x38, 0xd3, 0x87, - 0x52, 0xf9, 0xac, 0x32, 0xea, 0x67, 0x75, 0x09, 0x8a, 0x3b, 0xb4, 0xc1, 0x54, 0x28, 0xda, 0xc0, - 0xa6, 0x3d, 0x5c, 0xe4, 0x2f, 0x13, 0x9a, 0x93, 0x21, 0xbc, 0xe6, 0xbb, 0xf7, 0x17, 0x45, 0x2d, - 0x2d, 0x29, 0x21, 0x55, 0x15, 0x8d, 0x5c, 0x81, 0x99, 0x58, 0x98, 0x7f, 0x14, 0x37, 0x6a, 0x4e, - 0xb3, 0x22, 0x3d, 0x29, 0xcc, 0x0b, 0x30, 0x2e, 0xa7, 0xc1, 0x0b, 0xa3, 0x4f, 0xcc, 0x31, 0x01, - 0x63, 0xab, 0x5c, 0x54, 0xf7, 0x77, 0xb3, 0x52, 0x65, 0x2a, 0xbb, 0x6e, 0xe0, 0x07, 0x9e, 0xdd, - 0xd1, 0xce, 0x4d, 0xa4, 0x05, 0xa7, 0x5d, 0xbb, 0x1b, 0xec, 0x2d, 0x5a, 0xec, 0x5f, 0xd7, 0x93, - 0xa1, 0xa0, 0x75, 0xe9, 0x09, 0x37, 0xb6, 0x78, 0x55, 0x17, 0x9d, 0x25, 0x86, 0x5d, 0x52, 0x91, - 0xd9, 0x0e, 0xaf, 0x70, 0x5d, 0x79, 0xce, 0x3c, 0xc5, 0x79, 0x26, 0xb0, 0xc8, 0x0a, 0x8c, 0x6f, - 0x53, 0xdb, 0xa3, 0x9e, 0x15, 0x3d, 0x81, 0x1e, 0x3f, 0x38, 0x95, 0x11, 0x01, 0x5d, 0x3b, 0x75, - 0xae, 0x63, 0xdb, 0x51, 0x09, 0x79, 0x17, 0x46, 0x9d, 0x86, 0x48, 0x3d, 0x27, 0x8e, 0x4f, 0xba, - 0xca, 0x5e, 0x6d, 0xf0, 0x4c, 0x74, 0x11, 0x0f, 0x76, 0xf6, 0x72, 0x04, 0xb4, 0x3c, 0xa1, 0x9d, - 0x30, 0x8d, 0xb2, 0xdc, 0x9d, 0x93, 0x64, 0x89, 0x07, 0xdc, 0x4f, 0xc2, 0xb0, 0xaf, 0xe4, 0xc2, - 0x33, 0xc5, 0x2f, 0xe3, 0xfb, 0xe0, 0xd2, 0xa0, 0x63, 0x44, 0x5e, 0x07, 0xd2, 0x63, 0xc0, 0x47, - 0xcd, 0x69, 0x3b, 0x31, 0x6e, 0x2f, 0x80, 0x9a, 0xcc, 0xcb, 0x91, 0x13, 0x2e, 0x61, 0xf7, 0x3c, - 0xc7, 0xf8, 0xa1, 0x1c, 0x4c, 0xea, 0x67, 0x6a, 0xf2, 0x2a, 0xe4, 0x43, 0xb6, 0x93, 0xa1, 0xed, - 0x57, 0x45, 0x62, 0xcc, 0x4d, 0x44, 0x62, 0x1b, 0x04, 0xde, 0xff, 0x58, 0x2d, 0xd5, 0x3c, 0x6b, - 0x8e, 0x23, 0x50, 0x9a, 0x65, 0x6f, 0x03, 0x7f, 0x08, 0x17, 0x65, 0x59, 0x30, 0xd8, 0xb3, 0xef, - 0x05, 0x76, 0xb2, 0x47, 0xbb, 0xda, 0x38, 0xa3, 0x65, 0xf2, 0x04, 0x5f, 0x7a, 0x8f, 0x8e, 0x4c, - 0xf9, 0xde, 0x47, 0x26, 0xd1, 0x95, 0x1e, 0x47, 0xa6, 0xa1, 0x3e, 0x47, 0xa6, 0x88, 0x52, 0x3d, - 0x32, 0xe1, 0xc1, 0x79, 0xa4, 0xd7, 0xc1, 0x39, 0xa2, 0xe1, 0x07, 0xe7, 0x17, 0x45, 0x77, 0x3d, - 0x7b, 0xdf, 0xc2, 0x71, 0xe0, 0x9e, 0x6a, 0xbc, 0x23, 0xa6, 0xbd, 0x8f, 0x37, 0x65, 0xe5, 0x51, - 0x90, 0xd7, 0x6b, 0xc6, 0x5f, 0xcf, 0xc4, 0x0e, 0x39, 0x72, 0x2a, 0x5e, 0x82, 0x49, 0xa7, 0xc5, - 0xb4, 0x2f, 0xda, 0x50, 0xb4, 0x86, 0x09, 0x73, 0x42, 0x42, 0xb9, 0xe6, 0xf0, 0x32, 0x4c, 0x85, - 0x68, 0x3c, 0x30, 0x99, 0x3b, 0xcf, 0x9b, 0x21, 0xb5, 0x08, 0x4c, 0x7e, 0x15, 0xa6, 0x43, 0x44, - 0xa1, 0xa8, 0x72, 0xc5, 0x61, 0xc2, 0x2c, 0xca, 0x02, 0xf1, 0xa4, 0xa3, 0x6f, 0xec, 0xc6, 0x77, - 0xa5, 0xcf, 0xa8, 0x55, 0xc6, 0x6f, 0xe5, 0x34, 0x05, 0x50, 0x56, 0x53, 0x86, 0x31, 0x26, 0x1a, - 0xc5, 0x20, 0x09, 0xb1, 0xf2, 0x42, 0x8f, 0xe1, 0x17, 0x17, 0x94, 0xb5, 0xda, 0xba, 0x09, 0xbe, - 0xef, 0xca, 0xfb, 0x4a, 0x8b, 0x4b, 0x7f, 0xae, 0xc3, 0xe0, 0xf2, 0x93, 0xec, 0xb8, 0x0c, 0x79, - 0xa5, 0x3f, 0xbb, 0x52, 0xa7, 0x83, 0x6d, 0x64, 0xab, 0x0f, 0x77, 0x81, 0xf0, 0x97, 0xac, 0xe0, - 0x1e, 0xe0, 0x79, 0xc9, 0xd7, 0x99, 0xe7, 0x52, 0xf6, 0xd5, 0x04, 0x73, 0x1c, 0x25, 0xe4, 0x8c, - 0x0f, 0xef, 0xfb, 0x2a, 0xdb, 0x65, 0x18, 0x67, 0xa7, 0xef, 0x90, 0x61, 0x5e, 0x8b, 0x22, 0xea, - 0xd5, 0xf9, 0xa5, 0xea, 0x5d, 0x73, 0x8c, 0xd1, 0x49, 0x36, 0x7b, 0x70, 0x5a, 0xd5, 0x11, 0xf5, - 0x46, 0x0e, 0xc9, 0x2c, 0x6d, 0x7d, 0x47, 0x20, 0x52, 0x25, 0xb1, 0xa9, 0x27, 0x6d, 0x1d, 0x20, - 0xd0, 0x8c, 0x3d, 0x98, 0xef, 0x3d, 0x25, 0xec, 0xd8, 0x41, 0xd5, 0xd0, 0x65, 0x53, 0xfe, 0x54, - 0x36, 0xc8, 0xac, 0xba, 0x41, 0x9e, 0x86, 0x82, 0x74, 0x72, 0x93, 0x07, 0x15, 0x9b, 0x3b, 0xb8, - 0x19, 0x7f, 0x3b, 0x07, 0x17, 0x06, 0x98, 0xae, 0x3e, 0x75, 0xbe, 0x0f, 0x63, 0xdc, 0x60, 0xc8, - 0xc5, 0x27, 0xbf, 0x41, 0x97, 0xdb, 0x00, 0x63, 0x2a, 0x64, 0x1d, 0x53, 0x61, 0x22, 0x79, 0x07, - 0x7e, 0xf8, 0x37, 0xf9, 0x26, 0x4c, 0x71, 0x81, 0xc6, 0x7d, 0x0c, 0x76, 0xba, 0xcd, 0x01, 0x24, - 0xda, 0x19, 0xe9, 0x10, 0x1d, 0x23, 0x45, 0x21, 0x87, 0x12, 0xa3, 0x16, 0xc2, 0xc8, 0x26, 0x8c, - 0x21, 0xda, 0x8e, 0xed, 0x34, 0x07, 0xf2, 0xcc, 0x95, 0xee, 0xd6, 0x2a, 0x19, 0x77, 0x8d, 0x62, - 0x80, 0x9b, 0xf8, 0x9b, 0x1d, 0xf2, 0xda, 0xdd, 0x96, 0x65, 0x77, 0x3a, 0x7c, 0x2d, 0x88, 0x5b, - 0x9f, 0x21, 0x73, 0xa2, 0xdd, 0x6d, 0x95, 0x3a, 0x1d, 0x9c, 0x52, 0xbc, 0x1e, 0x9a, 0x66, 0x78, - 0xfc, 0xab, 0x95, 0x98, 0xc3, 0x88, 0xc9, 0x18, 0xf0, 0xef, 0x56, 0xe0, 0xce, 0x02, 0xf7, 0x00, - 0xe0, 0xe6, 0x6e, 0x93, 0xff, 0x30, 0xfe, 0x34, 0x2b, 0x75, 0xb3, 0xde, 0xeb, 0xfe, 0x2f, 0xa6, - 0x28, 0x65, 0x8a, 0x2e, 0x41, 0x91, 0x0d, 0x7d, 0x24, 0x54, 0xc2, 0x39, 0x9a, 0x6c, 0x77, 0x5b, - 0xe1, 0xd8, 0xa9, 0x03, 0x3f, 0xac, 0x0e, 0xfc, 0x97, 0xa4, 0x42, 0x9a, 0x2a, 0x1e, 0x7a, 0x0f, - 0xb9, 0xf1, 0x4f, 0x73, 0x70, 0x71, 0x30, 0x21, 0xf0, 0x17, 0xf3, 0x96, 0x32, 0x6f, 0xb1, 0x43, - 0xf0, 0x50, 0xfc, 0x10, 0x9c, 0xf6, 0xed, 0x0d, 0xa7, 0x7d, 0x7b, 0x89, 0x23, 0xf7, 0x48, 0xca, - 0x91, 0x3b, 0xf5, 0x03, 0x2d, 0x1c, 0xf1, 0x81, 0x8e, 0xaa, 0xeb, 0xe4, 0x9f, 0x64, 0x61, 0x26, - 0xe5, 0x4a, 0x84, 0x7c, 0x08, 0x33, 0x52, 0xb5, 0xe7, 0x3b, 0x07, 0x57, 0xb9, 0xf9, 0xee, 0x7b, - 0x39, 0x4d, 0xa9, 0x47, 0xb4, 0x14, 0xc5, 0x7b, 0x5a, 0xa8, 0xf3, 0x51, 0xf9, 0x9f, 0x1f, 0x45, - 0x9e, 0x7c, 0x00, 0x27, 0x31, 0x8d, 0x68, 0xdd, 0x52, 0xf4, 0x79, 0xcb, 0xa3, 0x3b, 0x62, 0x3d, - 0xbc, 0x90, 0x50, 0x7b, 0x9d, 0xba, 0xd2, 0x1c, 0x93, 0xee, 0xac, 0x3c, 0x67, 0xce, 0xfa, 0x29, - 0xf0, 0xf8, 0x19, 0xe1, 0xdf, 0xcf, 0x80, 0x71, 0xf4, 0x78, 0xa1, 0xad, 0x32, 0x3e, 0xe0, 0xa3, - 0xe6, 0x98, 0xad, 0x8c, 0xde, 0x05, 0x98, 0xf0, 0xe8, 0x8e, 0x47, 0xfd, 0x3d, 0x65, 0xf8, 0x46, - 0xcd, 0x71, 0x01, 0x94, 0x03, 0x23, 0xf3, 0x10, 0x1d, 0x4b, 0xc9, 0x96, 0x44, 0xc6, 0xcd, 0xf0, - 0xe8, 0x97, 0x3a, 0x0f, 0x6c, 0x35, 0xa9, 0x0d, 0xe4, 0x3f, 0x6e, 0xe7, 0x0b, 0xd9, 0x62, 0xce, - 0x14, 0xd9, 0x92, 0x76, 0x9c, 0x26, 0x35, 0x7e, 0x2d, 0x23, 0x35, 0x82, 0xb4, 0xc1, 0x23, 0x1f, - 0x2a, 0x4e, 0x3c, 0xb9, 0x84, 0x1a, 0x92, 0x46, 0xa2, 0xfa, 0x3b, 0x88, 0x04, 0x3e, 0xf1, 0x97, - 0xff, 0x05, 0xcb, 0x27, 0xf1, 0x44, 0x78, 0x53, 0xde, 0x01, 0x32, 0x69, 0x77, 0xff, 0x1a, 0xb9, - 0x0c, 0x23, 0xfc, 0xda, 0x4f, 0x36, 0x74, 0x4a, 0x6b, 0xe8, 0xfd, 0x6b, 0xa6, 0x2c, 0x37, 0x7e, - 0x2e, 0x13, 0x5e, 0x7c, 0xc4, 0x9b, 0x7f, 0xff, 0x1a, 0xf9, 0xd2, 0x60, 0xee, 0x38, 0x05, 0xe9, - 0x8e, 0x13, 0xba, 0xe2, 0x7c, 0x59, 0x73, 0xc5, 0x79, 0xb1, 0xff, 0x38, 0x09, 0x13, 0x6b, 0xfc, - 0x6d, 0xe6, 0x3f, 0xcd, 0xc0, 0xb9, 0xbe, 0x14, 0xe4, 0x2c, 0x14, 0x4a, 0x1b, 0xd5, 0xcd, 0x68, - 0x66, 0xd9, 0xd7, 0x22, 0x21, 0xe4, 0x16, 0x8c, 0x96, 0x6d, 0xdf, 0xa9, 0xb3, 0x05, 0x9c, 0x6a, - 0x34, 0x4a, 0xb0, 0x0d, 0xd1, 0x57, 0x9e, 0x33, 0x23, 0x5a, 0x62, 0xc1, 0x34, 0x7e, 0x05, 0x89, - 0xb7, 0x4f, 0xe3, 0x06, 0x83, 0x04, 0xc3, 0x04, 0x19, 0x93, 0x30, 0x09, 0x60, 0xfc, 0xe3, 0x7b, - 0x28, 0xb5, 0x90, 0xde, 0x0d, 0x3c, 0x46, 0xce, 0xad, 0x4b, 0x50, 0xd8, 0x90, 0x97, 0x1f, 0xca, - 0xd3, 0xe7, 0xf2, 0xa2, 0xc3, 0x0c, 0x4b, 0x8d, 0xbf, 0x96, 0x91, 0xa7, 0xfa, 0xa3, 0x3b, 0xa2, - 0xa4, 0xd5, 0x6f, 0xf4, 0x4f, 0xab, 0xdf, 0xf8, 0x94, 0x69, 0xf5, 0x8d, 0x5f, 0x12, 0x19, 0x31, - 0xab, 0x8d, 0x8d, 0xd8, 0x4b, 0x4f, 0x4f, 0xea, 0x5c, 0xb8, 0xac, 0xad, 0xce, 0x0b, 0xca, 0x53, - 0x1f, 0xc9, 0xba, 0x7a, 0xfb, 0x18, 0x2a, 0x4b, 0xf5, 0x9f, 0x64, 0xe1, 0x6c, 0x3f, 0xf2, 0xd4, - 0x47, 0xa9, 0x32, 0xc7, 0x7b, 0x94, 0xea, 0x32, 0x14, 0x38, 0x4c, 0x7f, 0xa7, 0x57, 0x90, 0xb2, - 0x01, 0x97, 0xc5, 0xe4, 0x02, 0x0c, 0x97, 0x96, 0x6a, 0xd1, 0x5b, 0x04, 0xe8, 0x0d, 0x63, 0xd7, - 0x7d, 0xf4, 0xb3, 0x10, 0x45, 0xe4, 0x1b, 0xc9, 0xe7, 0x37, 0xc4, 0x23, 0x04, 0x67, 0x94, 0x01, - 0x49, 0x24, 0xab, 0xc5, 0xf6, 0x46, 0xc9, 0x55, 0x45, 0xbe, 0x42, 0x33, 0xf9, 0x94, 0x87, 0x01, - 0xc3, 0x1b, 0x1e, 0xf5, 0x69, 0xa0, 0x7a, 0xaa, 0x74, 0x10, 0x62, 0x8a, 0x12, 0xe1, 0x47, 0x62, - 0x1f, 0xf0, 0x58, 0xc0, 0x61, 0x35, 0xca, 0x1a, 0x1d, 0x4f, 0x18, 0xd8, 0x54, 0x50, 0x8c, 0xef, - 0x64, 0x60, 0x36, 0xad, 0x59, 0xe4, 0x2c, 0xe4, 0xdb, 0xa9, 0x0f, 0x87, 0xb4, 0x79, 0x44, 0xd2, - 0x18, 0xbe, 0x91, 0xba, 0xe3, 0x7a, 0x2d, 0x3b, 0x50, 0xdd, 0x73, 0x14, 0xb0, 0x09, 0xec, 0xc7, - 0x4d, 0xfc, 0x9b, 0x2c, 0x48, 0x61, 0x9b, 0x4b, 0x3c, 0x35, 0x82, 0xff, 0x19, 0x25, 0x80, 0x6a, - 0x63, 0x63, 0xbd, 0xc3, 0x73, 0x9f, 0x5e, 0x87, 0x3c, 0x6b, 0x56, 0x6c, 0x31, 0xb2, 0xe5, 0x50, - 0xba, 0xbb, 0x2a, 0x90, 0x78, 0xab, 0x7c, 0xbb, 0xd5, 0x34, 0x11, 0xd9, 0xd8, 0x82, 0x49, 0x1d, - 0x83, 0x2c, 0xeb, 0xd9, 0xb2, 0xc6, 0x16, 0x8b, 0x82, 0x53, 0xd9, 0x75, 0xb9, 0x8b, 0x68, 0xf9, - 0xf4, 0x77, 0x0f, 0x17, 0x80, 0xfd, 0xe4, 0x34, 0x69, 0xd9, 0xb4, 0x8c, 0x9f, 0xc8, 0xc2, 0x6c, - 0x14, 0x6a, 0x26, 0x3f, 0x89, 0x67, 0x36, 0xee, 0xa1, 0xa4, 0xf9, 0xe5, 0x4b, 0x8d, 0x29, 0xd9, - 0xc1, 0x3e, 0xee, 0xc0, 0xb7, 0x60, 0xae, 0x17, 0x3e, 0x79, 0x35, 0xf1, 0x86, 0xb9, 0xc8, 0xa6, - 0x10, 0x3e, 0x76, 0xae, 0x3c, 0x69, 0xfe, 0x0f, 0x33, 0x30, 0x2f, 0x1c, 0x1b, 0xef, 0xda, 0x4e, - 0x3b, 0xa0, 0x6d, 0xbb, 0x5d, 0xa7, 0x4f, 0x27, 0x6e, 0xe7, 0x96, 0x26, 0x96, 0x5e, 0xd2, 0xfd, - 0x57, 0x13, 0xb5, 0xf5, 0xee, 0x2d, 0xb9, 0x8c, 0x79, 0x33, 0xea, 0x7c, 0xf1, 0xe6, 0x79, 0x9c, - 0x64, 0x9b, 0x01, 0xd4, 0x38, 0x49, 0xc4, 0x30, 0xbe, 0x1f, 0x9e, 0xef, 0x5f, 0x01, 0xf9, 0x08, - 0x26, 0xf0, 0xbd, 0x9e, 0x7b, 0x9d, 0x5d, 0xcf, 0x6e, 0x50, 0x69, 0xd3, 0x92, 0x26, 0x45, 0xb5, - 0x8c, 0xe7, 0x0a, 0x11, 0x71, 0x7b, 0xbb, 0xff, 0x1f, 0x75, 0x57, 0xf7, 0xe3, 0xb6, 0x71, 0xed, - 0x4d, 0x49, 0xbb, 0xde, 0x3d, 0xda, 0x0f, 0xee, 0xc4, 0xb1, 0xf7, 0xae, 0xed, 0x8d, 0xa3, 0xeb, - 0x38, 0xb1, 0x92, 0x38, 0x71, 0x7c, 0xf3, 0xe1, 0xdc, 0x9b, 0x9b, 0x70, 0x25, 0x6a, 0xc5, 0xac, - 0x44, 0x2a, 0x24, 0xb5, 0x1b, 0x27, 0x69, 0x09, 0x65, 0x45, 0xef, 0xaa, 0xd1, 0x52, 0x8a, 0x44, - 0xc5, 0x71, 0x9e, 0xda, 0x97, 0x3c, 0xb4, 0x48, 0xd1, 0x06, 0x7d, 0x28, 0xda, 0x02, 0x45, 0x81, - 0xfc, 0x17, 0xfd, 0x07, 0x02, 0x04, 0x05, 0xf2, 0xd0, 0xb7, 0x02, 0x41, 0x6b, 0xa0, 0x2f, 0x7d, - 0x2d, 0xfa, 0x92, 0xa7, 0x62, 0xce, 0xcc, 0x90, 0x43, 0xea, 0x23, 0xbb, 0x76, 0xd2, 0xa2, 0x6f, - 0xd2, 0xcc, 0x39, 0xc3, 0x21, 0x67, 0xe6, 0xcc, 0x39, 0x73, 0xe6, 0xfc, 0x0e, 0x66, 0x02, 0xe2, - 0x4c, 0x89, 0xdb, 0xc3, 0x72, 0x6b, 0x85, 0x1f, 0x2a, 0x40, 0xc6, 0xdb, 0x20, 0x2f, 0xc0, 0x52, - 0xd3, 0x2d, 0x39, 0x61, 0x6b, 0x10, 0x56, 0x7b, 0xa3, 0x01, 0xc7, 0xe0, 0x60, 0x61, 0x5c, 0xe1, - 0x3e, 0x95, 0x0c, 0x83, 0xd0, 0x3b, 0xec, 0x8d, 0x06, 0x76, 0x82, 0x0e, 0x01, 0xed, 0x7d, 0xff, - 0xbd, 0x76, 0xeb, 0x6e, 0x12, 0xd0, 0x9e, 0x97, 0x25, 0x00, 0xed, 0x79, 0x59, 0xe1, 0x33, 0x05, - 0xce, 0x8b, 0x1b, 0x0f, 0xed, 0x09, 0x7d, 0x29, 0x61, 0xb0, 0xf2, 0x40, 0x60, 0x90, 0xcd, 0xd2, - 0x4d, 0xd7, 0x44, 0x3c, 0x3f, 0x76, 0x10, 0x95, 0x54, 0xc6, 0x4b, 0x5e, 0x83, 0x9c, 0x13, 0xf6, - 0xfa, 0xc7, 0x08, 0xe8, 0x57, 0xa3, 0x11, 0x0d, 0x7b, 0x7d, 0x6c, 0x02, 0x39, 0x0b, 0x3e, 0x9c, - 0x91, 0x3b, 0x27, 0x7a, 0x4c, 0xea, 0x70, 0x9a, 0x83, 0xb4, 0xa4, 0xbc, 0x43, 0x33, 0xde, 0x69, - 0x6b, 0x55, 0xa0, 0x06, 0x70, 0x0c, 0x2c, 0x5b, 0xb4, 0x51, 0xf8, 0xa9, 0x02, 0x79, 0xaa, 0x3c, - 0xa0, 0x39, 0xf6, 0xa0, 0x53, 0x3a, 0xa9, 0x07, 0x0a, 0xe7, 0x62, 0xd4, 0xfc, 0xb1, 0x36, 0xd7, - 0xe7, 0x61, 0x35, 0xc5, 0x40, 0x0a, 0x18, 0x2f, 0xda, 0xed, 0xec, 0xb7, 0x18, 0x3e, 0x36, 0xf3, - 0xcc, 0x25, 0xca, 0x0a, 0x3f, 0x56, 0xe0, 0x0c, 0x35, 0xde, 0x0d, 0x3c, 0xb7, 0xb5, 0x47, 0x5d, - 0xb1, 0xde, 0xa9, 0x42, 0x24, 0xae, 0xce, 0xb0, 0x58, 0x36, 0xa6, 0x10, 0xf1, 0x32, 0x3b, 0xaa, - 0x25, 0x55, 0x58, 0xe0, 0xfb, 0xcb, 0x90, 0x43, 0x57, 0x6d, 0x4a, 0xa7, 0x02, 0x71, 0xc3, 0x9c, - 0x88, 0xbe, 0x09, 0x8a, 0x30, 0xce, 0x63, 0x47, 0xdc, 0x85, 0xbf, 0x2b, 0x70, 0x6e, 0x0a, 0x0f, - 0x79, 0x05, 0xe6, 0xf0, 0x4a, 0x3e, 0x1f, 0xbd, 0x0b, 0x53, 0x1e, 0x11, 0xee, 0x1f, 0xee, 0x5e, - 0x67, 0x1b, 0xd1, 0x11, 0xfd, 0x63, 0x33, 0x2e, 0xf2, 0x36, 0x2c, 0x6a, 0xed, 0x36, 0xb7, 0x4b, - 0x32, 0x09, 0xbb, 0x64, 0xca, 0x13, 0xaf, 0x45, 0xf4, 0xcc, 0x2e, 0x61, 0x97, 0x43, 0xdb, 0x6d, - 0x8f, 0x87, 0x1b, 0xc4, 0xed, 0x6d, 0xfc, 0x1f, 0xac, 0x24, 0x89, 0x4f, 0x64, 0x97, 0xfc, 0x52, - 0x01, 0x35, 0xd9, 0x87, 0xef, 0x06, 0xef, 0x60, 0xd2, 0x30, 0x7f, 0xc3, 0xa4, 0xfa, 0x79, 0x06, - 0x1e, 0x9e, 0xf8, 0x85, 0xc9, 0xd3, 0x30, 0xaf, 0xf5, 0xfb, 0x46, 0x99, 0xcf, 0x2a, 0xae, 0xf0, - 0xe0, 0x71, 0x6f, 0xc2, 0x6c, 0x63, 0x44, 0xe4, 0x06, 0x2c, 0xe0, 0xcc, 0xa4, 0x0c, 0x99, 0x18, - 0x44, 0x8a, 0x9d, 0x86, 0xa4, 0x40, 0xa4, 0x04, 0x21, 0xa9, 0xc0, 0x0a, 0x0f, 0x7d, 0xb6, 0xfd, - 0x03, 0xff, 0xc3, 0x08, 0xcd, 0x14, 0x01, 0x57, 0xc5, 0x19, 0xb2, 0x37, 0x60, 0x75, 0x72, 0xf0, - 0x6f, 0x92, 0x0b, 0x73, 0xea, 0xd3, 0x36, 0xe5, 0x96, 0x18, 0x92, 0x15, 0xcb, 0xa9, 0x8f, 0x9d, - 0x98, 0xd2, 0xd6, 0x18, 0x67, 0x34, 0x5c, 0xda, 0x70, 0xd8, 0x39, 0x08, 0x8e, 0xfc, 0x20, 0xfc, - 0xee, 0x86, 0x2b, 0x7e, 0xc6, 0xb1, 0x86, 0xeb, 0x17, 0x39, 0xb6, 0x98, 0xd3, 0x6c, 0x54, 0xa3, - 0x91, 0xc0, 0x0b, 0x51, 0xa3, 0xc1, 0x2c, 0x92, 0x2c, 0xb8, 0xb7, 0x0c, 0xa7, 0x59, 0xd0, 0xb5, - 0x58, 0x19, 0x17, 0x27, 0x76, 0x81, 0xd1, 0xec, 0x5e, 0x67, 0xea, 0x0b, 0x8b, 0x0d, 0x18, 0xda, - 0x82, 0x95, 0xec, 0x42, 0xbe, 0xd4, 0xf5, 0x5b, 0xc1, 0xa8, 0xef, 0x1e, 0xcf, 0x0d, 0xb8, 0xce, - 0xdf, 0x65, 0x69, 0x9f, 0xb1, 0xa1, 0xfb, 0x10, 0x25, 0xb9, 0xdc, 0x10, 0x71, 0xa3, 0xeb, 0xc2, - 0x39, 0x3c, 0x72, 0x7c, 0x76, 0xc6, 0xf7, 0x49, 0x17, 0x22, 0x5f, 0xf2, 0x2e, 0x3c, 0xbf, 0x4f, - 0xec, 0xc1, 0x4a, 0xad, 0x35, 0x0c, 0xdd, 0x41, 0x2b, 0x18, 0x22, 0xe4, 0xd2, 0x31, 0xc0, 0x2c, - 0x44, 0xbe, 0x59, 0x76, 0x14, 0x19, 0x46, 0xac, 0xec, 0x28, 0x32, 0xd9, 0x1c, 0xd5, 0x97, 0x2a, - 0x9d, 0xa0, 0xd5, 0xed, 0x7c, 0x24, 0xa2, 0x2a, 0x98, 0xbe, 0x74, 0x5b, 0x14, 0xda, 0x71, 0x7d, - 0xe1, 0x9d, 0xb1, 0x71, 0x63, 0xbd, 0xcc, 0xc3, 0x69, 0x1e, 0x48, 0xc7, 0x02, 0xcb, 0x1a, 0xba, - 0x59, 0x36, 0xcc, 0x6d, 0x55, 0x21, 0x2b, 0x00, 0x0d, 0xdb, 0x2a, 0xe9, 0x8e, 0x43, 0xff, 0x67, - 0xe8, 0x7f, 0x1e, 0x75, 0x56, 0x69, 0xd6, 0xd4, 0xac, 0x14, 0x78, 0x96, 0x2b, 0x7c, 0xa1, 0xc0, - 0xd9, 0xc9, 0x43, 0x49, 0x5c, 0xc0, 0xd0, 0x43, 0xee, 0x10, 0x7e, 0x61, 0xe6, 0xb8, 0x4f, 0x2c, - 0x4e, 0x87, 0x30, 0x86, 0x2c, 0x34, 0x2e, 0x23, 0xbc, 0x3e, 0x71, 0xa6, 0xd4, 0x4e, 0xbb, 0x50, - 0x82, 0xf5, 0x69, 0x6d, 0x24, 0x5f, 0x75, 0x15, 0xf2, 0x5a, 0xa3, 0x51, 0x33, 0x4a, 0x9a, 0x6b, - 0x58, 0xa6, 0xaa, 0x90, 0x45, 0x98, 0xdb, 0xb6, 0xad, 0x66, 0x43, 0xcd, 0x14, 0x3e, 0x55, 0x60, - 0xd9, 0x08, 0x42, 0xff, 0x80, 0xdd, 0x52, 0x7d, 0xd0, 0xc5, 0xf7, 0x72, 0x62, 0xf1, 0xad, 0x47, - 0x41, 0xba, 0xd1, 0x03, 0x8e, 0xb5, 0xf2, 0xfe, 0xa8, 0xc0, 0xda, 0x18, 0x0f, 0x71, 0xe0, 0xb4, - 0xb6, 0xe7, 0x58, 0x46, 0xb9, 0xc4, 0x7b, 0x26, 0xb4, 0x72, 0x5e, 0x3a, 0xfe, 0x14, 0x16, 0x03, - 0x73, 0x67, 0xe8, 0xf5, 0x3a, 0x6d, 0x29, 0x3f, 0x53, 0xf5, 0x94, 0x2d, 0x5a, 0xc2, 0x9d, 0xec, - 0xa3, 0xd1, 0xc0, 0xc7, 0x66, 0x33, 0x89, 0x13, 0xcd, 0xa8, 0x7c, 0xbc, 0x61, 0xbc, 0x94, 0xd9, - 0xa2, 0xf5, 0xe3, 0x4d, 0xc7, 0xed, 0x6d, 0x2d, 0x43, 0x9e, 0x5b, 0x2d, 0x68, 0x10, 0x7c, 0xa2, - 0xc0, 0xfa, 0xb4, 0xbe, 0x52, 0x43, 0x28, 0x19, 0x10, 0x77, 0x36, 0x02, 0xeb, 0x4d, 0x46, 0xc2, - 0x09, 0x32, 0xf2, 0x2a, 0xe4, 0x59, 0xfa, 0x69, 0xe7, 0x46, 0xd3, 0x36, 0xf8, 0x04, 0xb9, 0xf8, - 0xb7, 0xaf, 0x1e, 0x39, 0xc7, 0x92, 0x55, 0x7b, 0xc3, 0x1b, 0xde, 0x68, 0xd0, 0x49, 0x00, 0x9b, - 0xca, 0x1c, 0x85, 0x8f, 0x15, 0xd8, 0x98, 0xfe, 0x92, 0x74, 0x97, 0x71, 0xa9, 0x6e, 0x1e, 0xc7, - 0x14, 0xe1, 0x2e, 0x83, 0xfa, 0x7a, 0x2a, 0xa8, 0x28, 0x22, 0xa4, 0x4c, 0x51, 0xe6, 0xc3, 0xcc, - 0x58, 0xc2, 0xb3, 0x24, 0x93, 0x20, 0x2c, 0xfc, 0x3a, 0x03, 0x67, 0xe9, 0x04, 0xea, 0xfa, 0xc3, - 0xa1, 0x36, 0x0a, 0x0f, 0xfd, 0x20, 0xe4, 0x2a, 0x15, 0x79, 0x11, 0xe6, 0x0f, 0x4f, 0x76, 0x1a, - 0xc8, 0xc8, 0x09, 0x01, 0x14, 0xca, 0xe2, 0x52, 0x27, 0xfd, 0x4d, 0x2e, 0x82, 0x94, 0x60, 0x0e, - 0x65, 0xea, 0x92, 0xbd, 0xd8, 0x8f, 0xd2, 0xcc, 0xbd, 0x04, 0x73, 0x68, 0xfd, 0x73, 0xd1, 0x28, - 0x54, 0xda, 0xc9, 0x3d, 0xc3, 0xb3, 0x01, 0x9b, 0x31, 0x90, 0x67, 0x00, 0x62, 0x50, 0x58, 0x2e, - 0xfb, 0x84, 0x19, 0x1d, 0xe1, 0xc2, 0xda, 0x8b, 0x47, 0xb7, 0x5b, 0x1c, 0x69, 0xb5, 0x08, 0x6b, - 0xe2, 0x93, 0xf4, 0x05, 0x76, 0x0d, 0x77, 0x4f, 0xad, 0xb2, 0x0a, 0xa3, 0xcf, 0xf1, 0x6b, 0x0a, - 0x7f, 0xcd, 0xc0, 0xe2, 0x1e, 0x55, 0x14, 0xd0, 0xfc, 0x9d, 0x6d, 0x4e, 0x3f, 0x07, 0xf9, 0x5a, - 0xaf, 0xc5, 0xcf, 0xee, 0x87, 0x1c, 0x3e, 0x0b, 0x03, 0x6b, 0xba, 0xbd, 0x96, 0x70, 0x03, 0x0c, - 0x6d, 0x99, 0xe8, 0x1b, 0x82, 0x82, 0x5e, 0x87, 0x79, 0xe6, 0x4b, 0xe1, 0x07, 0x35, 0x42, 0x55, - 0x8c, 0x7a, 0x74, 0x8d, 0x55, 0x4b, 0xc7, 0xcd, 0xcc, 0x1f, 0x23, 0xeb, 0x2d, 0x1c, 0x3d, 0x4b, - 0x32, 0xf6, 0xe7, 0x8e, 0x67, 0xec, 0x4b, 0x28, 0x21, 0xf3, 0xc7, 0x41, 0x09, 0xd9, 0xb8, 0x09, - 0x79, 0xa9, 0x3f, 0x27, 0xd2, 0x1c, 0x7f, 0x94, 0x81, 0x65, 0x7c, 0xab, 0xe8, 0x62, 0xc5, 0x7f, - 0xe6, 0xd1, 0xc5, 0xcb, 0x89, 0xa3, 0x8b, 0x75, 0x79, 0xbc, 0xd8, 0x9b, 0xcd, 0x38, 0xb3, 0x78, - 0x1d, 0xd6, 0xc6, 0x08, 0xc9, 0xf3, 0x30, 0x47, 0xbb, 0x2f, 0x4c, 0x3d, 0x35, 0x3d, 0x03, 0x62, - 0x44, 0x39, 0xfa, 0xe2, 0x43, 0x9b, 0x51, 0x17, 0xfe, 0xa1, 0xc0, 0x12, 0x47, 0x09, 0x0e, 0x6e, - 0xf7, 0xbe, 0xf1, 0x73, 0x5e, 0x49, 0x7f, 0x4e, 0x16, 0xe2, 0xca, 0x3f, 0xe7, 0xbf, 0xfa, 0x23, - 0xde, 0x4c, 0x7c, 0xc4, 0x73, 0x11, 0xbe, 0x8c, 0x78, 0x9d, 0x19, 0xdf, 0xf0, 0xf7, 0x88, 0xb8, - 0x96, 0x24, 0x24, 0xdf, 0x87, 0x45, 0xd3, 0xbf, 0x93, 0xb0, 0x98, 0xae, 0x4c, 0x69, 0xf4, 0x5a, - 0x44, 0xc8, 0xd6, 0x14, 0x6e, 0x36, 0x81, 0x7f, 0xc7, 0x1b, 0x73, 0xe3, 0xc4, 0x4d, 0x52, 0xa3, - 0x29, 0xc9, 0x76, 0x92, 0xa9, 0xcf, 0x03, 0x29, 0x30, 0x6a, 0xfb, 0x77, 0x39, 0x80, 0xf8, 0x0e, - 0x3a, 0x5d, 0x80, 0x09, 0x0f, 0xb6, 0x38, 0x3b, 0xc6, 0x22, 0x79, 0x8e, 0x0b, 0xc7, 0xf6, 0x15, - 0x7e, 0x28, 0x9a, 0x99, 0x8e, 0xff, 0x83, 0xc7, 0xa3, 0x25, 0x7e, 0xc7, 0xbb, 0xed, 0x77, 0x5b, - 0x4c, 0x16, 0x67, 0xb7, 0x2e, 0x23, 0xdc, 0x5b, 0x54, 0x3a, 0x25, 0xdd, 0x1b, 0xde, 0x04, 0x2f, - 0x53, 0x82, 0xb1, 0xb8, 0x8e, 0xdc, 0xfd, 0xc7, 0x75, 0xcc, 0xdd, 0x47, 0x5c, 0xc7, 0xfc, 0x31, - 0xe3, 0x3a, 0x1a, 0xb0, 0xd8, 0x09, 0x3e, 0xf0, 0x83, 0xb0, 0x37, 0xb8, 0x8b, 0x5e, 0xea, 0xf8, - 0x28, 0x8b, 0x7e, 0x6a, 0x43, 0xd4, 0xb1, 0xf1, 0xc6, 0x0d, 0x33, 0xa2, 0x97, 0x87, 0x3b, 0x2a, - 0x24, 0xff, 0x03, 0xb1, 0xd7, 0x83, 0x43, 0x7b, 0x4f, 0xdf, 0x67, 0xf7, 0x85, 0x53, 0xe4, 0x35, - 0x48, 0x3a, 0x3f, 0x78, 0x54, 0x24, 0xcb, 0x27, 0x2a, 0x57, 0xc8, 0x90, 0x57, 0xfb, 0x92, 0x7f, - 0x84, 0x5f, 0x7b, 0xfd, 0x3a, 0x03, 0x64, 0xbc, 0xe3, 0xe4, 0x65, 0xc8, 0x33, 0xd1, 0xef, 0x0d, - 0x86, 0xef, 0xf3, 0x60, 0x04, 0x16, 0x95, 0x2f, 0x15, 0xcb, 0x51, 0xf9, 0xac, 0xd8, 0x1e, 0xbe, - 0xdf, 0x25, 0xdf, 0x83, 0x87, 0x70, 0xe0, 0xfb, 0xfe, 0xa0, 0xd3, 0x6b, 0x7b, 0x88, 0x8b, 0xd6, - 0xea, 0xf2, 0xa4, 0x31, 0x4f, 0x63, 0x76, 0xb3, 0xf1, 0xea, 0x29, 0x13, 0x04, 0xef, 0xfc, 0x37, - 0x90, 0xb2, 0xc1, 0x08, 0x89, 0x0b, 0xaa, 0xcc, 0x7f, 0x7b, 0xd4, 0xed, 0xf2, 0x39, 0x57, 0xa4, - 0xe6, 0x6f, 0xba, 0x6e, 0x4a, 0xc3, 0x2b, 0x71, 0xc3, 0x95, 0x51, 0xb7, 0x4b, 0x5e, 0x04, 0xe8, - 0x05, 0xde, 0x51, 0x67, 0x38, 0x64, 0x8e, 0x8c, 0x28, 0x5e, 0x27, 0x2e, 0x95, 0x87, 0xaf, 0x17, - 0xd4, 0x59, 0x21, 0x1d, 0xbe, 0x7e, 0xeb, 0xc0, 0xc7, 0x28, 0x57, 0x76, 0x69, 0x85, 0xc3, 0x40, - 0x8b, 0xc2, 0xe4, 0x34, 0x3a, 0xf0, 0x9d, 0xce, 0x47, 0xe2, 0xce, 0xf1, 0x5b, 0xb0, 0xc6, 0xaf, - 0x8b, 0xee, 0x75, 0xc2, 0x43, 0xae, 0x77, 0x3f, 0x88, 0xd2, 0x2e, 0x29, 0xde, 0x7f, 0xca, 0x01, - 0x68, 0x7b, 0x8e, 0x00, 0x90, 0xb8, 0x0a, 0x73, 0xd4, 0x9a, 0x10, 0xa7, 0x12, 0x78, 0xa6, 0x8b, - 0xed, 0xca, 0x67, 0xba, 0x48, 0x41, 0xe5, 0x84, 0xed, 0x1f, 0xe0, 0xc1, 0x58, 0x26, 0x3e, 0xc2, - 0x18, 0xb0, 0xa2, 0x84, 0xf6, 0xca, 0x8a, 0x48, 0x0d, 0x20, 0x86, 0x74, 0xe0, 0xf6, 0xed, 0x5a, - 0x1c, 0x1b, 0xcd, 0x2b, 0x38, 0xbe, 0x6f, 0x0c, 0x0b, 0x21, 0x4f, 0x9f, 0x98, 0x8c, 0xec, 0x40, - 0xce, 0x6d, 0x45, 0xd1, 0x28, 0x53, 0x80, 0x2e, 0x2e, 0xf1, 0xa4, 0x3e, 0x31, 0xd8, 0xc5, 0x4a, - 0xd8, 0x4a, 0xe4, 0x3e, 0xc3, 0x46, 0x88, 0x0e, 0xf3, 0x3c, 0x61, 0xe3, 0x14, 0xd4, 0x23, 0x9e, - 0xaf, 0x91, 0x63, 0x1d, 0x62, 0xa1, 0xac, 0xed, 0xf0, 0xd4, 0x8c, 0xcf, 0x41, 0xd6, 0x71, 0xea, - 0x3c, 0xbc, 0x73, 0x39, 0xb6, 0x55, 0x1c, 0xa7, 0x2e, 0x92, 0xd2, 0x1e, 0x49, 0x6c, 0x94, 0x98, - 0xfc, 0x2f, 0xe4, 0x25, 0x45, 0x9c, 0x07, 0x46, 0xe3, 0x37, 0xe8, 0xc4, 0xc5, 0xb2, 0x38, 0x93, - 0xa8, 0x49, 0x0d, 0xd4, 0x9d, 0xd1, 0xbb, 0xbe, 0xd6, 0xef, 0x63, 0x24, 0xc5, 0x07, 0xfe, 0x80, - 0x61, 0x0f, 0x2f, 0xc4, 0x30, 0x81, 0x5e, 0xab, 0xdf, 0xf7, 0xda, 0xa2, 0x56, 0x3e, 0x99, 0x49, - 0x73, 0x92, 0x06, 0xac, 0x39, 0x7e, 0x38, 0xea, 0xb3, 0x6b, 0x18, 0x95, 0xde, 0x80, 0x9a, 0x26, - 0x4c, 0x60, 0x20, 0xa2, 0xda, 0x90, 0x56, 0x8a, 0xbb, 0x2f, 0xb7, 0x7b, 0x83, 0x94, 0x99, 0x32, - 0xce, 0x5c, 0xf0, 0xe5, 0x21, 0xa7, 0xfb, 0x7d, 0xd2, 0xe0, 0xc1, 0xfd, 0x5e, 0x18, 0x3c, 0xb1, - 0x99, 0xf3, 0xcc, 0x04, 0xa8, 0x0f, 0x74, 0xa3, 0x49, 0x50, 0x1f, 0x09, 0x80, 0x8f, 0xcf, 0x72, - 0x12, 0x84, 0x14, 0x1f, 0x8b, 0x57, 0x00, 0x5e, 0xef, 0x75, 0x82, 0xba, 0x1f, 0x1e, 0xf6, 0xda, - 0x12, 0xe2, 0x48, 0xfe, 0x07, 0xbd, 0x4e, 0xe0, 0x1d, 0x61, 0xf1, 0xd7, 0x5f, 0x3d, 0x22, 0x11, - 0xd9, 0xd2, 0x6f, 0xf2, 0x14, 0x2c, 0xd2, 0x7f, 0x6e, 0x7c, 0x99, 0x84, 0x1d, 0x60, 0x22, 0x37, - 0x4f, 0x6e, 0x1d, 0x11, 0x90, 0x9b, 0x08, 0x10, 0xde, 0xe9, 0x87, 0x92, 0x5a, 0x2d, 0xd0, 0xc0, - 0x3b, 0xfd, 0x30, 0x8d, 0x0a, 0x28, 0x11, 0x93, 0x6a, 0xd4, 0x75, 0x01, 0x31, 0xcf, 0x71, 0xc8, - 0xf1, 0x94, 0x8e, 0xcf, 0x35, 0x4f, 0xc0, 0x91, 0xc9, 0xc9, 0xc0, 0x52, 0x6c, 0xd8, 0x09, 0xa7, - 0x5a, 0x66, 0x6e, 0x15, 0xbe, 0xbb, 0xb1, 0x4e, 0x0c, 0x0f, 0xdb, 0xde, 0x3e, 0x16, 0x27, 0x3a, - 0x11, 0x11, 0x93, 0x2d, 0x58, 0x65, 0x71, 0xf1, 0x51, 0xaa, 0x1a, 0xbe, 0xd3, 0xa1, 0x6c, 0x8b, - 0x73, 0xd9, 0xc8, 0x8f, 0x4f, 0x31, 0x90, 0x0a, 0xcc, 0xa1, 0x69, 0xc9, 0x2f, 0x83, 0x9f, 0x97, - 0x6d, 0xea, 0xf4, 0x3a, 0x42, 0xb9, 0x82, 0xd6, 0xb4, 0x2c, 0x57, 0x90, 0x94, 0xbc, 0x09, 0xa0, - 0x07, 0x83, 0x5e, 0xb7, 0x8b, 0x80, 0x79, 0x0b, 0x68, 0x98, 0x5d, 0x4c, 0xae, 0x47, 0x6c, 0x25, - 0x26, 0xe2, 0x38, 0x30, 0xf8, 0xdf, 0x4b, 0xc1, 0xea, 0x49, 0x6d, 0x15, 0x0c, 0x98, 0x67, 0x8b, - 0x11, 0xc1, 0x27, 0x39, 0x28, 0xb6, 0x04, 0x5d, 0xc8, 0xc0, 0x27, 0x79, 0xf9, 0x38, 0xf8, 0xa4, - 0xc4, 0x50, 0xd8, 0x81, 0x33, 0x93, 0x5e, 0x2c, 0x61, 0x0c, 0x2b, 0xc7, 0x35, 0x86, 0x7f, 0x9b, - 0x85, 0x25, 0x6c, 0x4d, 0x48, 0x61, 0x0d, 0x96, 0x9d, 0xd1, 0xbb, 0x11, 0x88, 0x83, 0x90, 0xc6, - 0xd8, 0xbf, 0xa1, 0x5c, 0x21, 0x3b, 0xbc, 0x12, 0x1c, 0x44, 0x87, 0x15, 0xb1, 0x13, 0x6c, 0x8b, - 0x0b, 0xe6, 0x11, 0xee, 0xa3, 0x80, 0x17, 0x1a, 0x4f, 0xd5, 0x95, 0x62, 0x8a, 0xf7, 0x83, 0xec, - 0x49, 0xf6, 0x83, 0xdc, 0xb1, 0xf6, 0x83, 0xb7, 0x61, 0x49, 0x3c, 0x0d, 0x25, 0xf9, 0xdc, 0x83, - 0x49, 0xf2, 0x44, 0x63, 0xa4, 0x16, 0x49, 0xf4, 0xf9, 0x99, 0x12, 0x1d, 0xbd, 0x88, 0x62, 0x95, - 0x8d, 0x65, 0xdf, 0xe5, 0x6d, 0x60, 0x2e, 0x9b, 0xed, 0x52, 0xe3, 0x3e, 0x76, 0xc9, 0xe7, 0x61, - 0xb1, 0xd6, 0x13, 0x0e, 0x24, 0xe9, 0xe4, 0xbe, 0x2b, 0x0a, 0x65, 0x75, 0x21, 0xa2, 0x8c, 0x76, - 0xb7, 0xec, 0xb7, 0xb1, 0xbb, 0xdd, 0x04, 0xe0, 0x91, 0x0b, 0x71, 0x0e, 0x0a, 0x5c, 0x32, 0x22, - 0x46, 0x37, 0xe9, 0x40, 0x90, 0x88, 0xa9, 0x74, 0xe2, 0x57, 0x4d, 0xb4, 0xfd, 0xfd, 0xde, 0x28, - 0x08, 0x13, 0x49, 0xdb, 0x78, 0xb8, 0x3e, 0xdd, 0x12, 0xb0, 0x4e, 0x16, 0x0f, 0x29, 0xb6, 0x6f, - 0x77, 0x40, 0xc8, 0x1b, 0xd1, 0x1d, 0xb9, 0x99, 0x39, 0xac, 0x0b, 0x63, 0x5f, 0x68, 0xea, 0xcd, - 0xb8, 0xc2, 0x17, 0x8a, 0x0c, 0xba, 0x7b, 0x1f, 0x43, 0xfd, 0x12, 0x40, 0xe4, 0xc1, 0x17, 0x63, - 0xcd, 0x2c, 0xb9, 0xa8, 0x54, 0xfe, 0xca, 0x31, 0xad, 0xf4, 0x36, 0xd9, 0x6f, 0xeb, 0x6d, 0x5c, - 0xc8, 0x5b, 0xef, 0x85, 0xad, 0xf8, 0xca, 0x07, 0x38, 0x91, 0x26, 0x8b, 0x92, 0x49, 0xe4, 0xda, - 0x8e, 0xf5, 0xe0, 0xa9, 0xb9, 0xb6, 0x23, 0xc6, 0xc2, 0x1b, 0xb0, 0x2a, 0x07, 0x12, 0xde, 0x0d, - 0xf6, 0xc9, 0xff, 0x33, 0xb4, 0x30, 0x25, 0x61, 0xe3, 0x48, 0x44, 0x54, 0xe2, 0xde, 0x0d, 0xf6, - 0x99, 0xfe, 0xd3, 0xba, 0x23, 0xf7, 0x15, 0xad, 0xcf, 0x2f, 0x15, 0x20, 0xe3, 0xe4, 0xb2, 0x34, - 0x51, 0xfe, 0x0d, 0xda, 0x65, 0x4a, 0x2b, 0xcb, 0x9d, 0x44, 0x2b, 0x2b, 0xfe, 0x4c, 0x81, 0x55, - 0x43, 0xab, 0x73, 0x84, 0x5c, 0xe6, 0x89, 0x78, 0x14, 0x2e, 0x1a, 0x5a, 0xdd, 0x6b, 0x58, 0x35, - 0xa3, 0x74, 0xcb, 0x9b, 0x08, 0x7c, 0x77, 0x11, 0xfe, 0x6b, 0x9c, 0x24, 0xf6, 0x58, 0x5c, 0x80, - 0xf5, 0xf1, 0x6a, 0x01, 0x8e, 0x37, 0x99, 0x59, 0xe0, 0xe8, 0x65, 0x8b, 0xaf, 0xc2, 0xaa, 0xc0, - 0x8c, 0x73, 0x6b, 0x0e, 0x42, 0xcd, 0xae, 0x42, 0x7e, 0x57, 0xb7, 0x8d, 0xca, 0x2d, 0xaf, 0xd2, - 0xac, 0xd5, 0xd4, 0x53, 0x64, 0x19, 0x16, 0x79, 0x41, 0x49, 0x53, 0x15, 0xb2, 0x04, 0x0b, 0x86, - 0xe9, 0xe8, 0xa5, 0xa6, 0xad, 0xab, 0x99, 0xe2, 0xab, 0xb0, 0xd2, 0x18, 0x74, 0x3e, 0x68, 0x85, - 0xfe, 0x8e, 0x7f, 0x17, 0x1d, 0x0e, 0xa7, 0x21, 0x6b, 0x6b, 0x7b, 0xea, 0x29, 0x02, 0x30, 0xdf, - 0xd8, 0x29, 0x39, 0xd7, 0xaf, 0xab, 0x0a, 0xc9, 0xc3, 0xe9, 0xed, 0x52, 0xc3, 0xdb, 0xa9, 0x3b, - 0x6a, 0x86, 0xfe, 0xd1, 0xf6, 0x1c, 0xfc, 0x93, 0x2d, 0x3e, 0x0b, 0x6b, 0xa8, 0x2b, 0xd4, 0x3a, - 0xc3, 0xd0, 0x0f, 0xfc, 0x01, 0xf6, 0x61, 0x09, 0x16, 0x1c, 0x9f, 0x2e, 0xf2, 0xd0, 0x67, 0x1d, - 0xa8, 0x8f, 0xba, 0x61, 0xa7, 0xdf, 0xf5, 0x3f, 0x54, 0x95, 0xe2, 0x4d, 0x58, 0xb5, 0x7b, 0xa3, - 0xb0, 0x13, 0x1c, 0x38, 0x21, 0xa5, 0x38, 0xb8, 0x4b, 0x1e, 0x86, 0xb5, 0xa6, 0xa9, 0xd5, 0xb7, - 0x8c, 0xed, 0xa6, 0xd5, 0x74, 0xbc, 0xba, 0xe6, 0x96, 0xaa, 0xcc, 0xdd, 0x51, 0xb7, 0x1c, 0xd7, - 0xb3, 0xf5, 0x92, 0x6e, 0xba, 0xaa, 0x52, 0xfc, 0x89, 0x02, 0x2b, 0xcd, 0x21, 0xbf, 0xa2, 0xdb, - 0xc4, 0x40, 0xbb, 0x4b, 0x70, 0xa1, 0xe9, 0xe8, 0xb6, 0xe7, 0x5a, 0x3b, 0xba, 0xe9, 0x35, 0x1d, - 0x6d, 0x3b, 0x8d, 0xba, 0xf8, 0x08, 0x9c, 0x97, 0x28, 0x6c, 0xbd, 0x64, 0xed, 0xea, 0xb6, 0xd7, - 0xd0, 0x1c, 0x67, 0xcf, 0xb2, 0xcb, 0xaa, 0x42, 0x36, 0xe0, 0xec, 0x04, 0x82, 0x7a, 0x45, 0x53, - 0x33, 0x63, 0x75, 0xa6, 0xbe, 0xa7, 0xd5, 0xbc, 0x2d, 0xcb, 0x55, 0xb3, 0xc5, 0x3a, 0xdd, 0xe8, - 0x10, 0x98, 0x8c, 0xc1, 0xca, 0x2f, 0x40, 0xce, 0xb4, 0x4c, 0x3d, 0xed, 0x92, 0x5a, 0x82, 0x05, - 0xad, 0xd1, 0xb0, 0xad, 0x5d, 0x1c, 0x50, 0x80, 0xf9, 0xb2, 0x6e, 0xd2, 0x9e, 0x65, 0x69, 0x4d, - 0xc3, 0xb6, 0xea, 0x96, 0xab, 0x97, 0xd5, 0x5c, 0xd1, 0x16, 0x0b, 0x46, 0x34, 0xba, 0xdf, 0x63, - 0xfe, 0x9f, 0xb2, 0x5e, 0xd1, 0x9a, 0x35, 0x97, 0x7f, 0x90, 0x5b, 0x9e, 0xad, 0xbf, 0xd1, 0xd4, - 0x1d, 0xd7, 0x51, 0x15, 0xa2, 0xc2, 0x92, 0xa9, 0xeb, 0x65, 0xc7, 0xb3, 0xf5, 0x5d, 0x43, 0xdf, - 0x53, 0x33, 0xb4, 0x4d, 0xf6, 0x9b, 0x3e, 0xa1, 0xf8, 0x99, 0x02, 0x84, 0x81, 0xba, 0x09, 0xf8, - 0x6f, 0x1c, 0x9f, 0x4d, 0xd8, 0xa8, 0xd2, 0x0f, 0x8b, 0xaf, 0x56, 0xb7, 0xca, 0xe9, 0x4f, 0x76, - 0x16, 0x48, 0xaa, 0xde, 0xaa, 0x54, 0x54, 0x85, 0x9c, 0x87, 0x87, 0x52, 0xe5, 0x65, 0xdb, 0x6a, - 0xa8, 0x99, 0x8d, 0xcc, 0x82, 0x42, 0xce, 0x8d, 0x55, 0xee, 0xe8, 0x7a, 0x43, 0xcd, 0xd2, 0x21, - 0x4a, 0x55, 0x88, 0x09, 0xc8, 0xd8, 0x73, 0xc5, 0x8f, 0x15, 0x38, 0xcb, 0xba, 0x29, 0x66, 0x73, - 0xd4, 0xd5, 0x0b, 0xb0, 0xce, 0xf1, 0x27, 0x27, 0x75, 0xf4, 0x0c, 0xa8, 0x89, 0x5a, 0xd6, 0xcd, - 0x87, 0x61, 0x2d, 0x51, 0x8a, 0xfd, 0xc8, 0xd0, 0xb5, 0x9a, 0x28, 0xde, 0xd2, 0x1d, 0xd7, 0xd3, - 0x2b, 0x15, 0xcb, 0x76, 0x59, 0x47, 0xb2, 0xc5, 0x02, 0xac, 0x95, 0xfc, 0x41, 0x48, 0x6d, 0x90, - 0x60, 0xd8, 0xe9, 0x05, 0xd8, 0x85, 0x65, 0x58, 0xd4, 0xdf, 0x74, 0x75, 0xd3, 0x31, 0x2c, 0x53, - 0x3d, 0x55, 0xbc, 0x90, 0xa2, 0x11, 0xab, 0xc6, 0x71, 0xaa, 0xea, 0xa9, 0x62, 0x0b, 0x96, 0xc5, - 0x95, 0x58, 0x36, 0x2b, 0x36, 0x61, 0x43, 0xcc, 0x35, 0x5c, 0xbf, 0xe9, 0x57, 0x58, 0x87, 0x33, - 0xe3, 0xf5, 0xba, 0xab, 0x2a, 0x74, 0x14, 0x52, 0x35, 0xb4, 0x3c, 0x53, 0xfc, 0x8d, 0x02, 0xeb, - 0x3c, 0x5d, 0x26, 0xf7, 0x47, 0x30, 0xc8, 0x6b, 0x84, 0x8f, 0x2b, 0xc2, 0x15, 0xd7, 0x6e, 0x3a, - 0xae, 0x5e, 0xf6, 0xca, 0xfa, 0xae, 0x51, 0xd2, 0x71, 0xba, 0x18, 0xb6, 0x5e, 0xd7, 0x4d, 0x37, - 0xf5, 0xe8, 0x27, 0xe1, 0xf1, 0x19, 0xb4, 0xa6, 0xe5, 0x8a, 0xff, 0x74, 0x95, 0x3c, 0x0e, 0xff, - 0x3d, 0x83, 0x38, 0x22, 0xcc, 0x14, 0xdf, 0x81, 0xa5, 0x44, 0x1a, 0x8f, 0x73, 0xf0, 0x90, 0xfc, - 0xbf, 0xe1, 0x07, 0xed, 0x4e, 0x70, 0xa0, 0x9e, 0x4a, 0x57, 0xd8, 0xa3, 0x20, 0xa0, 0x15, 0xb8, - 0x20, 0xe5, 0x0a, 0xd7, 0x1f, 0x1c, 0x75, 0x82, 0x56, 0xe8, 0xb7, 0xd5, 0x4c, 0xf1, 0x1a, 0x2c, - 0x27, 0x70, 0x06, 0xe9, 0x97, 0xaf, 0x59, 0x5c, 0x5e, 0xd5, 0xf5, 0xb2, 0xd1, 0xac, 0xab, 0x73, - 0x74, 0x29, 0x56, 0x8d, 0xed, 0xaa, 0x0a, 0xc5, 0x4f, 0x15, 0xaa, 0x31, 0xe3, 0xf7, 0xa9, 0x57, - 0x34, 0x31, 0x56, 0x74, 0x9e, 0x30, 0x48, 0x52, 0xdd, 0x71, 0x98, 0x2b, 0xf5, 0x02, 0xac, 0xf3, - 0x3f, 0x9e, 0x66, 0x96, 0xbd, 0xaa, 0x66, 0x97, 0xf7, 0x34, 0x9b, 0x4e, 0x9e, 0x5b, 0x6a, 0x06, - 0x57, 0x84, 0x54, 0xe2, 0xb9, 0x56, 0xb3, 0x54, 0x55, 0xb3, 0x74, 0x02, 0x26, 0xca, 0x1b, 0x86, - 0xa9, 0xe6, 0x70, 0x7d, 0x8d, 0x51, 0x63, 0xb3, 0xb4, 0x7e, 0xae, 0x78, 0x4f, 0x81, 0x73, 0x4e, - 0xe7, 0x20, 0x68, 0x85, 0xa3, 0x81, 0xaf, 0x75, 0x0f, 0x7a, 0x83, 0x4e, 0x78, 0x78, 0xe4, 0x8c, - 0x3a, 0xa1, 0x4f, 0xae, 0xc2, 0x63, 0x8e, 0xb1, 0x6d, 0x6a, 0x2e, 0x5d, 0x1f, 0x5a, 0x6d, 0xdb, - 0xb2, 0x0d, 0xb7, 0x5a, 0xf7, 0x9c, 0xa6, 0x31, 0x36, 0x75, 0x2e, 0xc3, 0xa5, 0xe9, 0xa4, 0x35, - 0x7d, 0x5b, 0x2b, 0xdd, 0x52, 0x95, 0xd9, 0x0d, 0x6e, 0x69, 0x35, 0xcd, 0x2c, 0xe9, 0x65, 0x6f, - 0xf7, 0xba, 0x9a, 0x21, 0x8f, 0xc1, 0xa3, 0xd3, 0x49, 0x2b, 0x46, 0xc3, 0xa1, 0x64, 0xd9, 0xd9, - 0xcf, 0xad, 0x3a, 0x75, 0x4a, 0x95, 0x2b, 0x76, 0x40, 0x4d, 0x47, 0x50, 0x8f, 0x39, 0xee, 0xed, - 0xa6, 0x69, 0x32, 0x29, 0xb9, 0x0a, 0x79, 0xcb, 0xad, 0xea, 0x36, 0x47, 0xc6, 0x45, 0x28, 0xdc, - 0xa6, 0xa9, 0x35, 0xdd, 0xaa, 0x65, 0x1b, 0x6f, 0xa1, 0xb8, 0x5c, 0x87, 0x33, 0x4e, 0x4d, 0x2b, - 0xed, 0xe0, 0xcc, 0x34, 0x4c, 0xaf, 0x54, 0xd5, 0x4c, 0x53, 0xaf, 0xa9, 0x50, 0xfc, 0x95, 0xc2, - 0x3c, 0xe8, 0x93, 0x42, 0xad, 0xc8, 0x53, 0xf0, 0x84, 0xb5, 0xe3, 0x6a, 0x5e, 0xa3, 0xd6, 0xdc, - 0x36, 0x4c, 0xcf, 0xb9, 0x65, 0x96, 0xc4, 0x46, 0x5a, 0x1a, 0x97, 0x28, 0x4f, 0xc0, 0xe5, 0x99, - 0xd4, 0x31, 0x86, 0xed, 0x15, 0x28, 0xcc, 0xa4, 0xe4, 0x2f, 0x52, 0xfc, 0x83, 0x02, 0xe7, 0x67, - 0x78, 0x1e, 0xc9, 0xd3, 0x70, 0xb5, 0xaa, 0x6b, 0xe5, 0x9a, 0xee, 0x38, 0x1e, 0x7d, 0x5f, 0xdd, - 0x74, 0xb9, 0x83, 0x7f, 0xa2, 0xbc, 0xb8, 0x0a, 0x8f, 0xcd, 0x26, 0x8f, 0x77, 0x9e, 0x27, 0xe0, - 0xf2, 0x6c, 0x52, 0xbe, 0x13, 0x65, 0xa8, 0xd4, 0x98, 0x4d, 0x19, 0xed, 0x60, 0xd9, 0xe2, 0x27, - 0x0a, 0x9c, 0x9d, 0x6c, 0xb0, 0xd3, 0xbe, 0x19, 0xa6, 0xe3, 0x6a, 0xb5, 0x9a, 0xd7, 0xd0, 0x6c, - 0xad, 0xee, 0xe9, 0xa6, 0x6d, 0xd5, 0x6a, 0x93, 0x24, 0xf7, 0x65, 0xb8, 0x34, 0x9d, 0xd4, 0x29, - 0xd9, 0x46, 0x83, 0x8a, 0xc0, 0x02, 0x6c, 0x4e, 0xa7, 0xd2, 0x8d, 0x92, 0xae, 0x66, 0xb6, 0x5e, - 0xf9, 0xfc, 0x2f, 0x9b, 0xa7, 0x3e, 0xbf, 0xb7, 0xa9, 0x7c, 0x79, 0x6f, 0x53, 0xf9, 0xf3, 0xbd, - 0x4d, 0xe5, 0xad, 0x27, 0x4f, 0x90, 0xeb, 0xfb, 0xdd, 0x79, 0xbc, 0xd1, 0x72, 0xe3, 0x9f, 0x01, - 0x00, 0x00, 0xff, 0xff, 0x73, 0x71, 0x96, 0xc4, 0xb6, 0x90, 0x01, 0x00, + 0x12, 0x04, 0x30, 0xd5, 0x20, 0xb1, 0xa3, 0xd9, 0xdd, 0xda, 0x42, 0x77, 0x02, 0xa8, 0x61, 0x77, + 0x57, 0x6f, 0x55, 0x35, 0x41, 0xac, 0x74, 0x3e, 0x7d, 0x9c, 0x6e, 0x2d, 0xdf, 0xe9, 0xcb, 0x27, + 0x59, 0x3a, 0xc7, 0x9d, 0x42, 0xa1, 0xf3, 0x9d, 0xe5, 0x8f, 0x53, 0x38, 0x24, 0x5d, 0xf8, 0x1c, + 0x0a, 0xcb, 0x92, 0x43, 0x56, 0xc8, 0x3a, 0xdf, 0x59, 0x11, 0xfe, 0x5e, 0x2b, 0x20, 0xcb, 0xba, + 0xb8, 0x70, 0x30, 0xce, 0x0e, 0x9d, 0x2f, 0x42, 0x61, 0x8f, 0x43, 0xe7, 0x8b, 0x7c, 0x99, 0x59, + 0x95, 0x59, 0x55, 0xdd, 0x68, 0x0c, 0x39, 0x77, 0xe2, 0x84, 0xfe, 0x90, 0xe8, 0x97, 0xef, 0xbd, + 0xcc, 0xca, 0x8f, 0x97, 0x2f, 0x5f, 0xbe, 0xf7, 0x12, 0x5e, 0x08, 0x68, 0x93, 0x76, 0x5c, 0x2f, + 0xb8, 0xda, 0xa4, 0xbb, 0x76, 0xfd, 0xe0, 0x6a, 0x70, 0xd0, 0xa1, 0x3e, 0xff, 0xf7, 0x4a, 0xc7, + 0x73, 0x03, 0x97, 0x0c, 0xe1, 0x8f, 0xf9, 0xd9, 0x5d, 0x77, 0xd7, 0x45, 0xc8, 0x55, 0xf6, 0x17, + 0x2f, 0x9c, 0x5f, 0xd8, 0x75, 0xdd, 0xdd, 0x26, 0xbd, 0x8a, 0xbf, 0xb6, 0xbb, 0x3b, 0x57, 0x03, + 0xa7, 0x45, 0xfd, 0xc0, 0x6e, 0x75, 0x04, 0xc2, 0xe5, 0xb0, 0x02, 0x3b, 0x08, 0x58, 0x49, 0xe0, + 0xb8, 0xed, 0xab, 0x0f, 0xaf, 0xa9, 0x3f, 0x05, 0xea, 0xeb, 0xe9, 0x6d, 0xd9, 0xf7, 0xec, 0x4e, + 0x87, 0x7a, 0xd1, 0x1f, 0x1c, 0xdd, 0xf8, 0xb9, 0x1c, 0x8c, 0xde, 0xa1, 0xb4, 0x53, 0x6a, 0x3a, + 0x0f, 0x29, 0xb9, 0x00, 0xf9, 0x35, 0xbb, 0x45, 0xe7, 0x32, 0xe7, 0x33, 0x97, 0x46, 0xcb, 0x53, + 0x8f, 0x0f, 0x17, 0xc6, 0x7c, 0xea, 0x3d, 0xa4, 0x9e, 0xd5, 0xb6, 0x5b, 0xd4, 0xc4, 0x42, 0xf2, + 0x2a, 0x8c, 0xb2, 0xff, 0xfd, 0x8e, 0x5d, 0xa7, 0x73, 0x59, 0xc4, 0x9c, 0x78, 0x7c, 0xb8, 0x30, + 0xda, 0x96, 0x40, 0x33, 0x2a, 0x27, 0x55, 0x18, 0x59, 0x7e, 0xd4, 0x71, 0x3c, 0xea, 0xcf, 0xe5, + 0xcf, 0x67, 0x2e, 0x8d, 0x2d, 0xce, 0x5f, 0xe1, 0x1f, 0x7b, 0x45, 0x7e, 0xec, 0x95, 0x4d, 0xf9, + 0xb1, 0xe5, 0x99, 0xdf, 0x39, 0x5c, 0x78, 0xee, 0xf1, 0xe1, 0xc2, 0x08, 0xe5, 0x24, 0x3f, 0xf1, + 0x07, 0x0b, 0x19, 0x53, 0xd2, 0x93, 0xb7, 0x21, 0xbf, 0x79, 0xd0, 0xa1, 0x73, 0xa3, 0xe7, 0x33, + 0x97, 0x26, 0x17, 0x9f, 0xbf, 0xc2, 0xbb, 0x37, 0x6c, 0x7c, 0xf4, 0x17, 0xc3, 0x2a, 0x17, 0x1e, + 0x1f, 0x2e, 0xe4, 0x19, 0x8a, 0x89, 0x54, 0xe4, 0x75, 0x18, 0x5e, 0x71, 0xfd, 0xa0, 0x5a, 0x99, + 0x03, 0x6c, 0xf2, 0x89, 0xc7, 0x87, 0x0b, 0xd3, 0x7b, 0xae, 0x1f, 0x58, 0x4e, 0xe3, 0x35, 0xb7, + 0xe5, 0x04, 0xb4, 0xd5, 0x09, 0x0e, 0x4c, 0x81, 0x64, 0x3c, 0x82, 0x09, 0x8d, 0x1f, 0x19, 0x83, + 0x91, 0x7b, 0x6b, 0x77, 0xd6, 0xd6, 0xb7, 0xd6, 0x8a, 0xcf, 0x91, 0x02, 0xe4, 0xd7, 0xd6, 0x2b, + 0xcb, 0xc5, 0x0c, 0x19, 0x81, 0x5c, 0x69, 0x63, 0xa3, 0x98, 0x25, 0xe3, 0x50, 0xa8, 0x94, 0x36, + 0x4b, 0xe5, 0x52, 0x6d, 0xb9, 0x98, 0x23, 0x33, 0x30, 0xb5, 0x55, 0x5d, 0xab, 0xac, 0x6f, 0xd5, + 0xac, 0xca, 0x72, 0xed, 0xce, 0xe6, 0xfa, 0x46, 0x31, 0x4f, 0x26, 0x01, 0xee, 0xdc, 0x2b, 0x2f, + 0x9b, 0x6b, 0xcb, 0x9b, 0xcb, 0xb5, 0xe2, 0x10, 0x99, 0x85, 0xa2, 0x24, 0xb1, 0x6a, 0xcb, 0xe6, + 0xfd, 0xea, 0xd2, 0x72, 0x71, 0xf8, 0x76, 0xbe, 0x90, 0x2b, 0xe6, 0xcd, 0x91, 0x55, 0x6a, 0xfb, + 0xb4, 0x5a, 0x31, 0xfe, 0x56, 0x0e, 0x0a, 0x77, 0x69, 0x60, 0x37, 0xec, 0xc0, 0x26, 0x67, 0xb5, + 0xf1, 0xc1, 0x4f, 0x54, 0x06, 0xe6, 0x42, 0x72, 0x60, 0x86, 0x1e, 0x1f, 0x2e, 0x64, 0x5e, 0x57, + 0x07, 0xe4, 0x2d, 0x18, 0xab, 0x50, 0xbf, 0xee, 0x39, 0x1d, 0x36, 0x69, 0xe6, 0x72, 0x88, 0x76, + 0xfa, 0xf1, 0xe1, 0xc2, 0x89, 0x46, 0x04, 0x56, 0x3a, 0x44, 0xc5, 0x26, 0x55, 0x18, 0x5e, 0xb5, + 0xb7, 0x69, 0xd3, 0x9f, 0x1b, 0x3a, 0x9f, 0xbb, 0x34, 0xb6, 0x78, 0x46, 0x0c, 0x82, 0x6c, 0xe0, + 0x15, 0x5e, 0xba, 0xdc, 0x0e, 0xbc, 0x83, 0xf2, 0xec, 0xe3, 0xc3, 0x85, 0x62, 0x13, 0x01, 0x6a, + 0x07, 0x73, 0x14, 0x52, 0x8b, 0x26, 0xc6, 0xf0, 0x91, 0x13, 0xe3, 0xdc, 0xef, 0x1c, 0x2e, 0x64, + 0xd8, 0x80, 0x89, 0x89, 0x11, 0xf1, 0xd3, 0xa7, 0xc8, 0x22, 0x14, 0x4c, 0xfa, 0xd0, 0xf1, 0xd9, + 0x97, 0x15, 0xf0, 0xcb, 0x4e, 0x3e, 0x3e, 0x5c, 0x20, 0x9e, 0x80, 0x29, 0xcd, 0x08, 0xf1, 0xe6, + 0xdf, 0x84, 0x31, 0xa5, 0xd5, 0xa4, 0x08, 0xb9, 0x07, 0xf4, 0x80, 0xf7, 0xb0, 0xc9, 0xfe, 0x24, + 0xb3, 0x30, 0xf4, 0xd0, 0x6e, 0x76, 0x45, 0x97, 0x9a, 0xfc, 0xc7, 0x57, 0xb2, 0x5f, 0xce, 0xdc, + 0xce, 0x17, 0x46, 0x8a, 0x05, 0x33, 0x5b, 0xad, 0x18, 0xff, 0x76, 0x1e, 0x0a, 0xa6, 0xcb, 0x17, + 0x22, 0xb9, 0x0c, 0x43, 0xb5, 0xc0, 0x0e, 0xe4, 0x30, 0xcd, 0x3c, 0x3e, 0x5c, 0x98, 0x62, 0x8b, + 0x94, 0x2a, 0xf5, 0x73, 0x0c, 0x86, 0xba, 0xb1, 0x67, 0xfb, 0x72, 0xb8, 0x10, 0xb5, 0xc3, 0x00, + 0x2a, 0x2a, 0x62, 0x90, 0x8b, 0x90, 0xbf, 0xeb, 0x36, 0xa8, 0x18, 0x31, 0xf2, 0xf8, 0x70, 0x61, + 0xb2, 0xe5, 0x36, 0x54, 0x44, 0x2c, 0x27, 0xaf, 0xc1, 0xe8, 0x52, 0xd7, 0xf3, 0x68, 0x9b, 0xcd, + 0xf5, 0x3c, 0x22, 0x4f, 0x3e, 0x3e, 0x5c, 0x80, 0x3a, 0x07, 0x5a, 0x4e, 0xc3, 0x8c, 0x10, 0xd8, + 0x30, 0xd4, 0x02, 0xdb, 0x0b, 0x68, 0x63, 0x6e, 0x68, 0xa0, 0x61, 0x60, 0xeb, 0x73, 0xda, 0xe7, + 0x24, 0xf1, 0x61, 0x10, 0x9c, 0xc8, 0x0a, 0x8c, 0xdd, 0xf2, 0xec, 0x3a, 0xdd, 0xa0, 0x9e, 0xe3, + 0x36, 0x70, 0x7c, 0x73, 0xe5, 0x8b, 0x8f, 0x0f, 0x17, 0x4e, 0xee, 0x32, 0xb0, 0xd5, 0x41, 0x78, + 0x44, 0xfd, 0xc9, 0xe1, 0x42, 0xa1, 0xd2, 0xf5, 0xb0, 0xf7, 0x4c, 0x95, 0x94, 0x7c, 0x93, 0x0d, + 0x8e, 0x1f, 0x60, 0xd7, 0xd2, 0xc6, 0xdc, 0xc8, 0x91, 0x4d, 0x34, 0x44, 0x13, 0x4f, 0x36, 0x6d, + 0x3f, 0xb0, 0x3c, 0x4e, 0x17, 0x6b, 0xa7, 0xca, 0x92, 0xac, 0x43, 0xa1, 0x56, 0xdf, 0xa3, 0x8d, + 0x6e, 0x93, 0xe2, 0x94, 0x19, 0x5b, 0x3c, 0x25, 0x26, 0xb5, 0x1c, 0x4f, 0x59, 0x5c, 0x9e, 0x17, + 0xbc, 0x89, 0x2f, 0x20, 0xea, 0x7c, 0x92, 0x58, 0x5f, 0x29, 0xfc, 0xec, 0xcf, 0x2f, 0x3c, 0xf7, + 0xfd, 0xbf, 0x7f, 0xfe, 0x39, 0xe3, 0x3f, 0xcd, 0x42, 0x31, 0xce, 0x84, 0xec, 0xc0, 0xc4, 0xbd, + 0x4e, 0xc3, 0x0e, 0xe8, 0x52, 0xd3, 0xa1, 0xed, 0xc0, 0xc7, 0x49, 0xd2, 0xff, 0x9b, 0x5e, 0x14, + 0xf5, 0xce, 0x75, 0x91, 0xd0, 0xaa, 0x73, 0xca, 0xd8, 0x57, 0xe9, 0x6c, 0xa3, 0x7a, 0x6a, 0x28, + 0xc0, 0x7d, 0x9c, 0x61, 0xc7, 0xab, 0x87, 0x8b, 0xfe, 0x1e, 0xf5, 0x08, 0xb6, 0x62, 0x02, 0xb5, + 0x1b, 0xdb, 0x07, 0x38, 0x33, 0x07, 0x9f, 0x40, 0x8c, 0x24, 0x65, 0x02, 0x31, 0xb0, 0xf1, 0x8f, + 0x33, 0x30, 0x69, 0x52, 0xdf, 0xed, 0x7a, 0x75, 0xba, 0x42, 0xed, 0x06, 0xf5, 0xd8, 0xf4, 0xbf, + 0xe3, 0xb4, 0x1b, 0x62, 0x4d, 0xe1, 0xf4, 0x7f, 0xe0, 0xb4, 0x55, 0xd1, 0x8d, 0xe5, 0xe4, 0x0b, + 0x30, 0x52, 0xeb, 0x6e, 0x23, 0x6a, 0x36, 0x92, 0x00, 0x7e, 0x77, 0xdb, 0x8a, 0xa1, 0x4b, 0x34, + 0x72, 0x15, 0x46, 0xee, 0x53, 0xcf, 0x8f, 0xa4, 0x21, 0x6e, 0x0d, 0x0f, 0x39, 0x48, 0x25, 0x10, + 0x58, 0xe4, 0x56, 0x24, 0x91, 0xc5, 0xa6, 0x36, 0x15, 0x93, 0x83, 0xd1, 0x54, 0x69, 0x09, 0x88, + 0x3a, 0x55, 0x24, 0x96, 0xf1, 0x93, 0x59, 0x28, 0x56, 0xec, 0xc0, 0xde, 0xb6, 0x7d, 0xd1, 0x9f, + 0xf7, 0xaf, 0x33, 0x19, 0xaf, 0x7c, 0x28, 0xca, 0x78, 0xd6, 0xf2, 0x4f, 0xfd, 0x79, 0x2f, 0xc5, + 0x3f, 0x6f, 0x8c, 0xed, 0xb0, 0xe2, 0xf3, 0xa2, 0x8f, 0x7a, 0xe7, 0xe8, 0x8f, 0x2a, 0x8a, 0x8f, + 0x2a, 0xc8, 0x8f, 0x8a, 0x3e, 0x85, 0xbc, 0x03, 0xf9, 0x5a, 0x87, 0xd6, 0x85, 0x10, 0x91, 0xfb, + 0x82, 0xfe, 0x71, 0x0c, 0xe1, 0xfe, 0xf5, 0xf2, 0xb8, 0x60, 0x93, 0xf7, 0x3b, 0xb4, 0x6e, 0x22, + 0x99, 0xb2, 0x68, 0xfe, 0x7e, 0x0e, 0x66, 0xd3, 0xc8, 0xd4, 0xef, 0x18, 0xee, 0xf3, 0x1d, 0x97, + 0xa0, 0xc0, 0xb6, 0x70, 0xb6, 0x2d, 0xa2, 0xb8, 0x18, 0x2d, 0x8f, 0xb3, 0x26, 0xef, 0x09, 0x98, + 0x19, 0x96, 0x92, 0x0b, 0xa1, 0x46, 0x50, 0x88, 0xf8, 0x09, 0x8d, 0x40, 0xea, 0x01, 0x6c, 0xac, + 0xe5, 0x12, 0x46, 0xc5, 0x21, 0xea, 0x16, 0x09, 0x8e, 0xc6, 0xda, 0x13, 0x10, 0x6d, 0x9b, 0x91, + 0x9b, 0xc2, 0x32, 0x14, 0xe4, 0x67, 0xcd, 0x8d, 0x23, 0xa3, 0xe9, 0x58, 0x27, 0xdd, 0xbf, 0xce, + 0x07, 0xb3, 0x21, 0x7e, 0xab, 0x6c, 0x24, 0x0e, 0xb9, 0x0e, 0x85, 0x0d, 0xcf, 0x7d, 0x74, 0x50, + 0xad, 0xf8, 0x73, 0x13, 0xe7, 0x73, 0x97, 0x46, 0xcb, 0xa7, 0x1e, 0x1f, 0x2e, 0xcc, 0x74, 0x18, + 0xcc, 0x72, 0x1a, 0xea, 0x4e, 0x1b, 0x22, 0xde, 0xce, 0x17, 0x32, 0xc5, 0xec, 0xed, 0x7c, 0x21, + 0x5b, 0xcc, 0x71, 0xf5, 0xe2, 0x76, 0xbe, 0x90, 0x2f, 0x0e, 0xdd, 0xce, 0x17, 0x86, 0x50, 0xe1, + 0x18, 0x2d, 0xc2, 0xed, 0x7c, 0x61, 0xac, 0x38, 0xae, 0xed, 0xf6, 0xc8, 0x20, 0x70, 0xeb, 0x6e, + 0xd3, 0xcc, 0xdd, 0x33, 0xab, 0xe6, 0xf0, 0x52, 0x69, 0x89, 0x7a, 0x81, 0x99, 0x2b, 0x6d, 0xd5, + 0xcc, 0x89, 0xca, 0x41, 0xdb, 0x6e, 0x39, 0x75, 0xbe, 0x75, 0x9a, 0xb9, 0x5b, 0x4b, 0x1b, 0x46, + 0x09, 0x26, 0xa3, 0x6f, 0x59, 0x75, 0xfc, 0x80, 0x5c, 0x85, 0x51, 0x09, 0x61, 0x82, 0x2e, 0x97, + 0xfa, 0xd5, 0x66, 0x84, 0x63, 0xfc, 0x76, 0x16, 0x20, 0x2a, 0x79, 0x46, 0xd7, 0xc2, 0x97, 0xb4, + 0xb5, 0x70, 0x22, 0xbe, 0x16, 0x7a, 0xae, 0x02, 0xf2, 0x1e, 0x0c, 0x33, 0xb5, 0xa0, 0x2b, 0x55, + 0xa2, 0x53, 0x71, 0x52, 0x2c, 0xbc, 0x7f, 0xbd, 0x3c, 0x29, 0x88, 0x87, 0x7d, 0x84, 0x98, 0x82, + 0x4c, 0x59, 0x46, 0x3f, 0x37, 0x12, 0x0d, 0x86, 0x58, 0x40, 0x97, 0x20, 0x1c, 0x50, 0xd1, 0xa1, + 0xb8, 0x32, 0x3a, 0x72, 0x90, 0xc3, 0x52, 0x72, 0x1a, 0xd8, 0x80, 0x8b, 0x4e, 0x1d, 0x79, 0x7c, + 0xb8, 0x90, 0xeb, 0x7a, 0x0e, 0x4e, 0x02, 0x72, 0x15, 0xc4, 0x34, 0x10, 0x1d, 0xc8, 0x66, 0xdf, + 0x74, 0xdd, 0xb6, 0xea, 0xd4, 0x0b, 0xa2, 0x1e, 0x9f, 0xcb, 0xc8, 0xd9, 0x42, 0x3a, 0xa0, 0x4f, + 0x95, 0xb9, 0x3c, 0x4e, 0x83, 0x4b, 0xa9, 0xbd, 0x72, 0x45, 0x43, 0xe5, 0x6a, 0xe4, 0x79, 0xb9, + 0x2b, 0x35, 0x78, 0x99, 0x95, 0x50, 0x29, 0xf5, 0x0a, 0xc8, 0x75, 0x60, 0x33, 0x54, 0xf4, 0x3e, + 0x88, 0x7a, 0x4a, 0x5b, 0xb5, 0xf2, 0x09, 0xc1, 0x69, 0xc2, 0xde, 0x57, 0xc9, 0x19, 0x36, 0x79, + 0x0b, 0xd8, 0x14, 0x16, 0xfd, 0x4e, 0x04, 0xd1, 0xad, 0xa5, 0x8d, 0xa5, 0xa6, 0xdb, 0x6d, 0xd4, + 0x3e, 0x58, 0x8d, 0x88, 0x77, 0xeb, 0x1d, 0x95, 0xf8, 0xd6, 0xd2, 0x06, 0x79, 0x0b, 0x86, 0x4a, + 0xdf, 0xee, 0x7a, 0x54, 0xe8, 0x27, 0xe3, 0xb2, 0x4e, 0x06, 0x2b, 0x9f, 0x12, 0x84, 0x53, 0x36, + 0xfb, 0xa9, 0xea, 0x75, 0x58, 0xce, 0x6a, 0xde, 0x5c, 0xad, 0x09, 0xdd, 0x83, 0xc4, 0xba, 0x65, + 0x73, 0x55, 0x69, 0x76, 0xa0, 0x7d, 0x35, 0xa3, 0x22, 0x57, 0x21, 0x5b, 0xaa, 0xe0, 0x89, 0x68, + 0x6c, 0x71, 0x54, 0x56, 0x5b, 0x29, 0xcf, 0x0a, 0x92, 0x71, 0x5b, 0x5d, 0x06, 0xd9, 0x52, 0x85, + 0x94, 0x61, 0xe8, 0xee, 0x41, 0xed, 0x83, 0x55, 0x21, 0xcc, 0x66, 0xe4, 0xbc, 0x66, 0xb0, 0x75, + 0x5c, 0xf6, 0x7e, 0xd4, 0xe2, 0xd6, 0x81, 0xff, 0xad, 0xa6, 0xda, 0x62, 0x44, 0x23, 0x1b, 0x30, + 0x5a, 0x6a, 0xb4, 0x9c, 0xf6, 0x3d, 0x9f, 0x7a, 0x73, 0x63, 0xc8, 0x67, 0x2e, 0xd6, 0xee, 0xb0, + 0xbc, 0x3c, 0xf7, 0xf8, 0x70, 0x61, 0xd6, 0x66, 0x3f, 0xad, 0xae, 0x4f, 0x3d, 0x85, 0x5b, 0xc4, + 0x84, 0x6c, 0x00, 0xdc, 0x75, 0xdb, 0xbb, 0x6e, 0x29, 0x68, 0xda, 0x7e, 0x4c, 0x3c, 0x46, 0x05, + 0xa1, 0xfa, 0x70, 0xa2, 0xc5, 0x60, 0x96, 0xcd, 0x80, 0x0a, 0x43, 0x85, 0x07, 0xb9, 0x09, 0xc3, + 0xeb, 0x9e, 0x5d, 0x6f, 0xd2, 0xb9, 0x09, 0xe4, 0x36, 0x2b, 0xb8, 0x71, 0xa0, 0xfc, 0xd2, 0x39, + 0xc1, 0xb0, 0xe8, 0x22, 0x58, 0x3d, 0xa6, 0x70, 0xc4, 0xf9, 0x2d, 0x20, 0xc9, 0x39, 0x99, 0x72, + 0x48, 0x78, 0x55, 0x3d, 0x24, 0x44, 0x8b, 0x7e, 0xc9, 0x6d, 0xb5, 0xec, 0x76, 0x03, 0x69, 0xef, + 0x2f, 0x2a, 0x67, 0x07, 0xe3, 0x5b, 0x30, 0x9d, 0xe8, 0xac, 0x23, 0xce, 0x77, 0xef, 0xc2, 0x54, + 0x85, 0xee, 0xd8, 0xdd, 0x66, 0x10, 0xee, 0x24, 0x7c, 0x89, 0xe2, 0x49, 0xab, 0xc1, 0x8b, 0x2c, + 0xb9, 0x7d, 0x98, 0x71, 0x64, 0xe3, 0x1d, 0x98, 0xd0, 0x3e, 0x9f, 0x1d, 0x15, 0x4a, 0xdd, 0x86, + 0x13, 0xe0, 0x40, 0x66, 0xa2, 0xa3, 0x82, 0xcd, 0x80, 0x38, 0x5c, 0x66, 0x84, 0x60, 0xfc, 0x7b, + 0xaa, 0xb6, 0x22, 0x24, 0x11, 0x3b, 0x56, 0x0b, 0x79, 0x90, 0x89, 0x74, 0xa7, 0x84, 0x3c, 0x08, + 0xa5, 0xc1, 0x65, 0xbe, 0x36, 0xb3, 0x89, 0xb5, 0x39, 0x26, 0x46, 0x22, 0x67, 0xef, 0xfb, 0x7c, + 0x45, 0x86, 0x33, 0x35, 0xf7, 0xe9, 0x67, 0xea, 0x7b, 0x30, 0x7e, 0xd7, 0x6e, 0xdb, 0xbb, 0xb4, + 0xc1, 0xbe, 0x80, 0xcb, 0x9e, 0xd1, 0xf2, 0x99, 0xc7, 0x87, 0x0b, 0xa7, 0x5a, 0x1c, 0x8e, 0x5f, + 0xa9, 0x4e, 0x22, 0x8d, 0x80, 0x5c, 0x93, 0x2b, 0x7b, 0x28, 0x65, 0x65, 0x4f, 0x88, 0xda, 0x87, + 0x70, 0x65, 0x8b, 0xf5, 0x6c, 0xfc, 0xc6, 0x28, 0x7e, 0x23, 0x79, 0x0d, 0x86, 0x4d, 0xba, 0xcb, + 0xb6, 0x9a, 0x4c, 0x34, 0x48, 0x1e, 0x42, 0xd4, 0x8e, 0xe1, 0x38, 0xa8, 0x67, 0xd0, 0x86, 0xbf, + 0xe7, 0xec, 0x04, 0xa2, 0x77, 0x42, 0x3d, 0x43, 0x80, 0x15, 0x3d, 0x43, 0x40, 0xf4, 0xe3, 0x2c, + 0x87, 0x31, 0xe9, 0x67, 0x56, 0x6a, 0xa2, 0xd3, 0x64, 0x0f, 0x9b, 0x15, 0x45, 0x8c, 0x78, 0x9a, + 0x96, 0xc0, 0xb0, 0xc9, 0x0d, 0x18, 0x2d, 0xd5, 0xeb, 0x6e, 0x57, 0x39, 0x33, 0xf2, 0x75, 0xcb, + 0x81, 0xba, 0x89, 0x24, 0x42, 0x25, 0x35, 0x18, 0x5b, 0x66, 0x07, 0x2d, 0x67, 0xc9, 0xae, 0xef, + 0xc9, 0x4e, 0x92, 0x32, 0x4c, 0x29, 0x89, 0x56, 0x2e, 0x45, 0x60, 0x9d, 0x01, 0x55, 0x23, 0x83, + 0x82, 0x4b, 0x36, 0x61, 0xac, 0x46, 0xeb, 0x1e, 0x0d, 0x6a, 0x81, 0xeb, 0xd1, 0x98, 0x48, 0x56, + 0x4a, 0xca, 0xcf, 0xcb, 0xb3, 0x9e, 0x8f, 0x40, 0xcb, 0x67, 0x50, 0x95, 0xab, 0x82, 0xcc, 0x95, + 0xf6, 0x96, 0xeb, 0x1d, 0x54, 0xca, 0x42, 0x4c, 0x47, 0x7b, 0x3a, 0x07, 0xab, 0x4a, 0x3b, 0x83, + 0x34, 0xb6, 0x75, 0xa5, 0x9d, 0x63, 0xe1, 0x48, 0x55, 0x6a, 0xa8, 0x5b, 0x09, 0xa1, 0x3d, 0x15, + 0xf5, 0x32, 0x82, 0x95, 0x91, 0x6a, 0xf8, 0xa8, 0x99, 0x69, 0x23, 0x25, 0xb0, 0x48, 0x07, 0x88, + 0x1c, 0x35, 0xae, 0xe8, 0x36, 0xa9, 0xef, 0x0b, 0x59, 0x7e, 0x3a, 0x36, 0xf8, 0x11, 0x42, 0xf9, + 0x25, 0xc1, 0xfc, 0x9c, 0x9c, 0x06, 0xe2, 0x9c, 0xc6, 0x0a, 0x95, 0x7a, 0x52, 0x78, 0x93, 0x37, + 0x01, 0x96, 0x1f, 0x05, 0xd4, 0x6b, 0xdb, 0xcd, 0xd0, 0x0e, 0x86, 0xa6, 0x1f, 0x2a, 0xa0, 0xfa, + 0x40, 0x2b, 0xc8, 0x64, 0x09, 0x26, 0x4a, 0xbe, 0xdf, 0x6d, 0x51, 0xd3, 0x6d, 0xd2, 0x92, 0xb9, + 0x86, 0x72, 0x7f, 0xb4, 0x7c, 0xee, 0xf1, 0xe1, 0xc2, 0x69, 0x1b, 0x0b, 0x2c, 0xcf, 0x6d, 0x52, + 0xcb, 0xf6, 0xd4, 0xd9, 0xad, 0xd3, 0x90, 0x75, 0x80, 0xf5, 0x0e, 0x6d, 0xd7, 0xa8, 0xed, 0xd5, + 0xf7, 0x62, 0x62, 0x3e, 0x2a, 0x28, 0x9f, 0x15, 0x5f, 0x38, 0xeb, 0x76, 0x68, 0xdb, 0x47, 0x98, + 0xda, 0xaa, 0x08, 0x93, 0x6c, 0xc1, 0x54, 0xb5, 0x74, 0x77, 0xc3, 0x6d, 0x3a, 0xf5, 0x03, 0xa1, + 0x39, 0x4d, 0xa2, 0x75, 0xf0, 0xa4, 0xe0, 0x1a, 0x2b, 0xe5, 0xe2, 0xc9, 0xb1, 0x5b, 0x56, 0x07, + 0xa1, 0x96, 0xd0, 0x9f, 0xe2, 0x5c, 0xc8, 0x87, 0x6c, 0x0e, 0xfa, 0x4c, 0x19, 0xdc, 0xb4, 0x77, + 0xfd, 0xb9, 0x29, 0xcd, 0xda, 0x55, 0xda, 0xaa, 0x5d, 0x51, 0x4a, 0xb9, 0x9a, 0x32, 0xcf, 0x27, + 0x22, 0x42, 0xad, 0xc0, 0xde, 0xf5, 0xf5, 0x89, 0x18, 0x62, 0x93, 0xdb, 0x00, 0x15, 0xb7, 0xde, + 0x6d, 0xd1, 0x76, 0x50, 0x29, 0xcf, 0x15, 0xf5, 0xa3, 0x40, 0x58, 0x10, 0x89, 0xb6, 0x86, 0x5b, + 0xd7, 0x66, 0xa2, 0x42, 0x3d, 0xff, 0x2e, 0x14, 0xe3, 0x0d, 0x39, 0xa6, 0x01, 0x6b, 0xa2, 0x38, + 0xa9, 0x7c, 0xfd, 0xf2, 0x23, 0xc7, 0x0f, 0x7c, 0xe3, 0x7b, 0xb5, 0x15, 0xc8, 0xa4, 0xc3, 0x1d, + 0x7a, 0xb0, 0xe1, 0xd1, 0x1d, 0xe7, 0x91, 0x10, 0x66, 0x28, 0x1d, 0x1e, 0xd0, 0x03, 0xab, 0x83, + 0x50, 0x55, 0x3a, 0x84, 0xa8, 0xe4, 0x8b, 0x50, 0xb8, 0x73, 0xb7, 0x76, 0x87, 0x1e, 0x54, 0x2b, + 0x62, 0xa3, 0xe2, 0x64, 0x2d, 0xdf, 0x62, 0xa4, 0xda, 0x5c, 0x0b, 0x31, 0x8d, 0x72, 0x24, 0x09, + 0x59, 0xcd, 0x4b, 0xcd, 0xae, 0x1f, 0x50, 0xaf, 0x5a, 0x51, 0x6b, 0xae, 0x73, 0x60, 0x4c, 0x2e, + 0x85, 0xa8, 0xc6, 0xdf, 0xcf, 0xa2, 0x14, 0x64, 0x13, 0xbe, 0xda, 0xf6, 0x03, 0xbb, 0x5d, 0xa7, + 0x21, 0x03, 0x9c, 0xf0, 0x8e, 0x80, 0xc6, 0x26, 0x7c, 0x84, 0xac, 0x57, 0x9d, 0x1d, 0xb8, 0x6a, + 0x56, 0xa5, 0xb4, 0x5c, 0x54, 0x2b, 0xaa, 0x79, 0xd5, 0x13, 0xd0, 0x58, 0x95, 0x11, 0x32, 0xb9, + 0x08, 0x23, 0xd5, 0xd2, 0xdd, 0x52, 0x37, 0xd8, 0x43, 0x19, 0x5c, 0xe0, 0xfa, 0x39, 0x9b, 0xad, + 0x76, 0x37, 0xd8, 0x33, 0x65, 0x21, 0xb9, 0x8a, 0xe7, 0x9e, 0x36, 0x0d, 0xb8, 0x19, 0x56, 0x6c, + 0xba, 0x3e, 0x07, 0xc5, 0x8e, 0x3d, 0x0c, 0x44, 0x5e, 0x81, 0xa1, 0xfb, 0x1b, 0x4b, 0xd5, 0x8a, + 0x38, 0x38, 0xe3, 0x4e, 0xf4, 0xb0, 0x53, 0xd7, 0x5b, 0xc2, 0x51, 0x8c, 0xdf, 0xcc, 0x44, 0xf2, + 0x8d, 0x5c, 0xd4, 0xf4, 0x11, 0x34, 0xba, 0x30, 0x7d, 0x44, 0x35, 0xba, 0xa0, 0x66, 0x62, 0x02, + 0x59, 0xea, 0xfa, 0x81, 0xdb, 0x5a, 0x6e, 0x37, 0x3a, 0xae, 0xd3, 0x0e, 0x90, 0x8a, 0xf7, 0x9a, + 0xf1, 0xf8, 0x70, 0xe1, 0xf9, 0x3a, 0x96, 0x5a, 0x54, 0x14, 0x5b, 0x31, 0x2e, 0x29, 0xd4, 0x4f, + 0xd0, 0x91, 0xc6, 0xef, 0x66, 0xb5, 0x7d, 0x89, 0x35, 0xcf, 0xa4, 0x9d, 0xa6, 0x53, 0xc7, 0xa3, + 0xf8, 0x2d, 0xcf, 0xed, 0x76, 0xc2, 0xe9, 0x80, 0xcd, 0xf3, 0xa2, 0x52, 0x6b, 0x97, 0x15, 0xeb, + 0xbc, 0x53, 0xa8, 0xc9, 0xfb, 0x30, 0xce, 0x54, 0x04, 0xf1, 0xd3, 0x9f, 0xcb, 0xe2, 0x48, 0x9c, + 0x45, 0xf3, 0x99, 0x4f, 0xbd, 0x90, 0x8d, 0xa6, 0x5b, 0xa8, 0x14, 0xa4, 0x01, 0x73, 0x9b, 0x9e, + 0xdd, 0xf6, 0x9d, 0x60, 0xb9, 0x5d, 0xf7, 0x0e, 0x50, 0xa5, 0x59, 0x6e, 0xdb, 0xdb, 0x4d, 0xda, + 0xc0, 0xcf, 0x2d, 0x94, 0x2f, 0x3d, 0x3e, 0x5c, 0x78, 0x31, 0xe0, 0x38, 0x16, 0x0d, 0x91, 0x2c, + 0xca, 0xb1, 0x14, 0xce, 0x3d, 0x39, 0x31, 0x15, 0x48, 0x76, 0x2b, 0xde, 0x9e, 0xf0, 0xdd, 0x1d, + 0x55, 0xa0, 0x70, 0x34, 0x98, 0xf0, 0x51, 0x9b, 0xa9, 0x12, 0x18, 0x7f, 0x92, 0x89, 0x76, 0x4e, + 0xf2, 0x36, 0x8c, 0x89, 0xa9, 0xae, 0xcc, 0x0b, 0x14, 0x7d, 0x72, 0x5d, 0xc4, 0x46, 0x56, 0x45, + 0x67, 0x07, 0xf6, 0xd2, 0xd2, 0xaa, 0x32, 0x37, 0xf0, 0xc0, 0x6e, 0xd7, 0x9b, 0x71, 0x2a, 0x89, + 0xc6, 0x26, 0xc1, 0xe6, 0x6a, 0x4d, 0xef, 0x15, 0x9c, 0x04, 0x41, 0xd3, 0x4f, 0xe9, 0x06, 0x05, + 0xf9, 0xc9, 0x3f, 0xfc, 0x7f, 0xca, 0xa4, 0x6d, 0xd0, 0xa4, 0x0c, 0x13, 0x5b, 0xae, 0xf7, 0x00, + 0xc7, 0x57, 0xe9, 0x04, 0x1c, 0xf9, 0x7d, 0x59, 0x10, 0xff, 0x20, 0x9d, 0x44, 0x6d, 0x9b, 0xd2, + 0x1b, 0x7a, 0xdb, 0x62, 0x1c, 0x34, 0x02, 0x36, 0x0e, 0x21, 0xc7, 0x70, 0x75, 0xe0, 0x38, 0x44, + 0x4d, 0xd0, 0xa6, 0xb0, 0x8a, 0x6e, 0xfc, 0xe7, 0x19, 0x75, 0x23, 0x66, 0x9d, 0x5c, 0x71, 0x5b, + 0xb6, 0xd3, 0x56, 0x3e, 0x87, 0xdf, 0x08, 0x21, 0x34, 0xde, 0x12, 0x05, 0x99, 0x5c, 0x87, 0x02, + 0xff, 0x15, 0x0a, 0x49, 0x34, 0x47, 0x09, 0x42, 0x5d, 0xc2, 0x4b, 0xc4, 0xc4, 0xc8, 0xe4, 0x8e, + 0x3b, 0x32, 0xbf, 0x91, 0x51, 0xf7, 0xd0, 0x4f, 0xbb, 0x4b, 0xc4, 0x76, 0x87, 0xec, 0x71, 0x76, + 0x87, 0x27, 0xfe, 0x84, 0xef, 0xcf, 0xc0, 0x98, 0x62, 0x5e, 0x60, 0xdf, 0xb0, 0xe1, 0xb9, 0x1f, + 0xd3, 0x7a, 0xa0, 0x7f, 0x43, 0x87, 0x03, 0x63, 0xdf, 0x10, 0xa2, 0x3e, 0xc1, 0x37, 0x18, 0xff, + 0x2c, 0x23, 0x0e, 0x37, 0x03, 0x8b, 0x79, 0x5d, 0x24, 0x67, 0x8f, 0xb3, 0xb7, 0xbd, 0x0f, 0x43, + 0x26, 0x6d, 0x38, 0xbe, 0x38, 0x98, 0x4c, 0xab, 0x07, 0x29, 0x2c, 0x88, 0x14, 0x1e, 0x8f, 0xfd, + 0x54, 0x37, 0x26, 0x2c, 0x67, 0x1a, 0x68, 0xd5, 0xbf, 0xd9, 0xa4, 0x8f, 0x1c, 0xbe, 0x18, 0xc5, + 0x1e, 0x89, 0x1a, 0xa8, 0xe3, 0x5b, 0x3b, 0xac, 0x44, 0xa8, 0xc2, 0xea, 0xc2, 0xd3, 0x68, 0x8c, + 0x0f, 0x01, 0xa2, 0x2a, 0xc9, 0x1d, 0x28, 0x8a, 0xd9, 0xe0, 0xb4, 0x77, 0xb9, 0x06, 0x24, 0xfa, + 0x60, 0xe1, 0xf1, 0xe1, 0xc2, 0x99, 0x7a, 0x58, 0x26, 0xd4, 0x45, 0x85, 0x6f, 0x82, 0xd0, 0xf8, + 0xf7, 0xb3, 0x90, 0x2d, 0xe1, 0x80, 0xdc, 0xa1, 0x07, 0x81, 0xbd, 0x7d, 0xd3, 0x69, 0x6a, 0x8b, + 0xe9, 0x01, 0x42, 0xad, 0x1d, 0x47, 0xb3, 0x33, 0x28, 0xc8, 0x6c, 0x31, 0xdd, 0xf1, 0xb6, 0xdf, + 0x40, 0x42, 0x65, 0x31, 0x3d, 0xf0, 0xb6, 0xdf, 0x88, 0x93, 0x85, 0x88, 0xc4, 0x80, 0x61, 0xbe, + 0xb0, 0xc4, 0x1c, 0x84, 0xc7, 0x87, 0x0b, 0xc3, 0x7c, 0xfd, 0x99, 0xa2, 0x84, 0x9c, 0x86, 0x5c, + 0x6d, 0x63, 0x4d, 0x48, 0x40, 0xb4, 0xe7, 0xf9, 0x9d, 0xb6, 0xc9, 0x60, 0xac, 0xce, 0xd5, 0x4a, + 0x69, 0x03, 0x4f, 0xf0, 0x43, 0x51, 0x9d, 0xcd, 0x86, 0xdd, 0x89, 0x9f, 0xe1, 0x43, 0x44, 0xf2, + 0x0e, 0x8c, 0xdd, 0xa9, 0x2c, 0xad, 0xb8, 0x3e, 0x97, 0x5e, 0xc3, 0xd1, 0xe4, 0x7f, 0xd0, 0xa8, + 0x5b, 0x68, 0x42, 0x8f, 0x6f, 0x03, 0x0a, 0xbe, 0xf1, 0xc3, 0x59, 0x18, 0x53, 0x0c, 0x5c, 0xe4, + 0x8b, 0xe2, 0x66, 0x33, 0xa3, 0xa9, 0xee, 0x0a, 0x06, 0x2b, 0xe5, 0xd6, 0x90, 0x96, 0xdb, 0xa0, + 0xe2, 0x9e, 0x33, 0xb2, 0x3c, 0x64, 0x07, 0xb1, 0x3c, 0xbc, 0x09, 0xc0, 0xe7, 0x00, 0x36, 0x59, + 0x51, 0x27, 0x14, 0x07, 0x07, 0x75, 0x5c, 0x22, 0x64, 0x72, 0x1f, 0x66, 0x36, 0xbd, 0xae, 0x1f, + 0xd4, 0x0e, 0xfc, 0x80, 0xb6, 0x18, 0xb7, 0x0d, 0xd7, 0x6d, 0x8a, 0xf9, 0xf7, 0xe2, 0xe3, 0xc3, + 0x85, 0xf3, 0x01, 0x2b, 0xb6, 0x7c, 0x2c, 0xc7, 0x06, 0x58, 0x1d, 0xd7, 0x55, 0xed, 0x11, 0x69, + 0x0c, 0x0c, 0x13, 0xc6, 0x55, 0x6b, 0x06, 0xdb, 0x59, 0xc4, 0x2d, 0x90, 0xb0, 0x51, 0x2b, 0x3b, + 0x8b, 0x68, 0x65, 0xf2, 0x56, 0x4a, 0x27, 0x31, 0xbe, 0xa8, 0x5a, 0xd2, 0x06, 0x5d, 0xd8, 0xc6, + 0x0f, 0x66, 0x22, 0x31, 0x72, 0xff, 0x1a, 0x79, 0x0b, 0x86, 0xf9, 0xad, 0x9b, 0xb8, 0x9c, 0x3c, + 0x11, 0x9e, 0x46, 0xd5, 0x2b, 0x39, 0x6e, 0xc2, 0xfe, 0x3d, 0x7e, 0x33, 0xff, 0x9c, 0x29, 0x48, + 0x42, 0xeb, 0xb7, 0x6e, 0x08, 0x93, 0xdc, 0xd1, 0xce, 0x7b, 0x2d, 0xcd, 0xfa, 0x6d, 0xfc, 0x56, + 0x1e, 0x26, 0x75, 0x34, 0xf5, 0x6a, 0x2e, 0x33, 0xd0, 0xd5, 0xdc, 0xfb, 0x50, 0x60, 0xfd, 0xe1, + 0xd4, 0xa9, 0xd4, 0xc8, 0x5e, 0xc4, 0x3b, 0x01, 0x01, 0xd3, 0xae, 0x9c, 0x81, 0x0f, 0x07, 0x3b, + 0x9c, 0x9a, 0x21, 0x15, 0x59, 0x54, 0xee, 0x8f, 0x72, 0x91, 0x92, 0x22, 0xef, 0x8f, 0xd4, 0xf5, + 0x10, 0xde, 0x24, 0xbd, 0x0e, 0xc3, 0x4c, 0x31, 0x0f, 0x6d, 0x27, 0xd8, 0x4a, 0xa6, 0xb3, 0xc7, + 0x7c, 0x4b, 0x38, 0x12, 0xd9, 0x82, 0xc2, 0xaa, 0xed, 0x07, 0x35, 0x4a, 0xdb, 0x03, 0x5c, 0xba, + 0x2f, 0x88, 0xae, 0x9a, 0xc1, 0x1b, 0x6d, 0x9f, 0xd2, 0x76, 0xec, 0xd6, 0x34, 0x64, 0x46, 0xbe, + 0x0e, 0xb0, 0xe4, 0xb6, 0x03, 0xcf, 0x6d, 0xae, 0xba, 0xbb, 0x73, 0xc3, 0x78, 0x68, 0x7d, 0x3e, + 0x36, 0x00, 0x11, 0x02, 0x3f, 0xb7, 0x86, 0x96, 0x99, 0x3a, 0x2f, 0xb0, 0x9a, 0xee, 0xae, 0xba, + 0x0e, 0x22, 0x7c, 0x72, 0x13, 0x8a, 0xd2, 0x22, 0x70, 0xaf, 0xb3, 0xeb, 0xe1, 0x04, 0x19, 0x89, + 0x34, 0x0f, 0xfa, 0x28, 0xb0, 0xba, 0x02, 0xae, 0x4a, 0xca, 0x38, 0x0d, 0xf9, 0x1a, 0x9c, 0x8a, + 0xc3, 0xe4, 0x28, 0x17, 0x22, 0x9d, 0x5c, 0x65, 0x97, 0x32, 0xef, 0x7b, 0xb1, 0x30, 0x3e, 0xc9, + 0xc2, 0xa9, 0x1e, 0x1f, 0xcb, 0xd6, 0x03, 0x6e, 0xd7, 0xca, 0x7a, 0x88, 0xed, 0xd2, 0xdc, 0x59, + 0xe8, 0x3c, 0x64, 0xc5, 0x06, 0x97, 0x2f, 0x17, 0x1f, 0x1f, 0x2e, 0x8c, 0x6b, 0xe3, 0x98, 0xad, + 0x56, 0xc8, 0x6d, 0xc8, 0xb3, 0x21, 0x1a, 0xe0, 0xce, 0x5b, 0x1a, 0x83, 0x26, 0x03, 0x47, 0x9d, + 0x3e, 0x38, 0x74, 0xc8, 0x83, 0x7c, 0x11, 0x72, 0x9b, 0x9b, 0xab, 0x38, 0x77, 0x72, 0xf8, 0xed, + 0x13, 0x41, 0xd0, 0xd4, 0xa6, 0xea, 0x04, 0xa3, 0xbd, 0x12, 0xba, 0x48, 0x30, 0x74, 0xf2, 0xd5, + 0x98, 0x2f, 0xce, 0x2b, 0xfd, 0x07, 0x7a, 0x70, 0xd7, 0x9c, 0x27, 0xf0, 0x88, 0x31, 0xfe, 0x46, + 0x36, 0x5a, 0xc3, 0x37, 0x9d, 0x66, 0x40, 0x3d, 0x32, 0xcf, 0x97, 0x64, 0xa4, 0x9c, 0x99, 0xe1, + 0x6f, 0x32, 0x17, 0xad, 0x6f, 0xce, 0x2a, 0x5c, 0xc8, 0xaf, 0x28, 0x0b, 0x39, 0x87, 0x0b, 0x79, + 0xb2, 0xe7, 0x92, 0x7d, 0x25, 0x65, 0x5e, 0xe2, 0x42, 0x4c, 0x99, 0x7b, 0x2f, 0xc2, 0xc4, 0x9a, + 0xbb, 0xfc, 0x28, 0x08, 0x11, 0xd9, 0x02, 0x2c, 0x98, 0x3a, 0x90, 0x71, 0x5c, 0x6f, 0x36, 0xa8, + 0xb7, 0xb9, 0x67, 0xb7, 0xb5, 0x4b, 0x67, 0x33, 0x01, 0x67, 0xb8, 0x6b, 0x74, 0x5f, 0xc7, 0x1d, + 0xe1, 0xb8, 0x71, 0xb8, 0xf1, 0x03, 0x59, 0xd9, 0x19, 0xf7, 0x17, 0x9f, 0xd1, 0xcb, 0xcd, 0x37, + 0xb4, 0xcb, 0xcd, 0x99, 0xd0, 0x2c, 0x1b, 0xde, 0xd4, 0x2f, 0x1e, 0x71, 0xc1, 0xff, 0x3f, 0x0f, + 0xc1, 0xb8, 0x8a, 0xce, 0xfa, 0xa1, 0xd4, 0x68, 0x78, 0x6a, 0x3f, 0xd8, 0x8d, 0x86, 0x67, 0x22, + 0x54, 0xbb, 0xcf, 0xcf, 0xf5, 0xbd, 0xcf, 0xff, 0x06, 0x8c, 0x2e, 0xb5, 0x1a, 0xda, 0x2d, 0xa3, + 0x91, 0xd2, 0xbc, 0x2b, 0x21, 0x12, 0x5f, 0x0b, 0xa1, 0xb5, 0xb1, 0xde, 0x6a, 0x24, 0xef, 0x16, + 0x23, 0x96, 0x9a, 0x2b, 0xc0, 0xd0, 0x93, 0xb8, 0x02, 0xdc, 0x80, 0xd1, 0x7b, 0x3e, 0xdd, 0xec, + 0xb6, 0xdb, 0xb4, 0x89, 0xd3, 0xaa, 0xc0, 0x75, 0xfd, 0xae, 0x4f, 0xad, 0x00, 0xa1, 0x6a, 0x03, + 0x42, 0x54, 0x75, 0x80, 0x47, 0xfa, 0x0c, 0xf0, 0x75, 0x28, 0x6c, 0x50, 0xea, 0x61, 0x9f, 0x8e, + 0x45, 0x2a, 0x5d, 0x87, 0x52, 0xcf, 0x62, 0x1d, 0xab, 0xb9, 0x08, 0x08, 0x44, 0xcd, 0xaf, 0x60, + 0x7c, 0x40, 0xbf, 0x02, 0xf2, 0x02, 0x8c, 0x77, 0xba, 0xdb, 0x4d, 0xa7, 0x8e, 0x7c, 0x85, 0x43, + 0x82, 0x39, 0xc6, 0x61, 0x8c, 0xad, 0x4f, 0xbe, 0x0a, 0x13, 0x78, 0xc6, 0x09, 0xa7, 0xdc, 0xa4, + 0x76, 0x1d, 0xa7, 0x95, 0x71, 0x4d, 0xa7, 0xce, 0x40, 0x56, 0x8a, 0xdf, 0x8c, 0xce, 0x68, 0xbe, + 0x06, 0x93, 0xfa, 0x48, 0x3e, 0x85, 0x5b, 0xb9, 0xd0, 0x47, 0xa2, 0x50, 0x1c, 0xbd, 0x9d, 0x2f, + 0x40, 0x71, 0x8c, 0x7b, 0x47, 0x98, 0xb0, 0x11, 0x7e, 0x93, 0x49, 0xee, 0x74, 0xb7, 0xa9, 0xd7, + 0xa6, 0x01, 0xf5, 0xc5, 0x21, 0xc0, 0x37, 0xf3, 0xa5, 0x4e, 0xc7, 0x37, 0x7e, 0x35, 0x0b, 0x23, + 0xa5, 0xad, 0x5a, 0xb5, 0xbd, 0xe3, 0xe2, 0xdd, 0x5a, 0x78, 0xa5, 0xa2, 0xde, 0xad, 0x85, 0x57, + 0x2a, 0xea, 0x45, 0xca, 0xd5, 0x94, 0x63, 0x1c, 0xba, 0xdf, 0x2a, 0xc7, 0x38, 0xed, 0x00, 0x1a, + 0xdd, 0x2e, 0xe5, 0x06, 0xb8, 0x5d, 0x0a, 0x0d, 0x80, 0xf9, 0x23, 0x0d, 0x80, 0xe4, 0x2d, 0x18, + 0xab, 0xb6, 0x03, 0xba, 0xeb, 0x45, 0x33, 0x3d, 0x3c, 0x52, 0x86, 0x60, 0x55, 0xb5, 0x57, 0xb0, + 0xd9, 0x34, 0xe2, 0x46, 0xc7, 0xd0, 0xd8, 0x88, 0xd3, 0x88, 0xdb, 0x26, 0x63, 0xf6, 0x00, 0x89, + 0x68, 0x54, 0x62, 0x73, 0x44, 0xde, 0xe0, 0x73, 0xe5, 0x73, 0x32, 0xb2, 0xba, 0xb3, 0x8e, 0x2d, + 0x4f, 0xa7, 0xdf, 0xe0, 0x1b, 0xdf, 0xc9, 0xc2, 0x58, 0xa9, 0xd3, 0x79, 0xc6, 0xfd, 0xa8, 0xbe, + 0xac, 0x89, 0x57, 0x79, 0x16, 0x0a, 0xbf, 0x6b, 0x20, 0x17, 0xaa, 0x5f, 0xca, 0xc2, 0x54, 0x8c, + 0x42, 0x6d, 0x7d, 0x66, 0x40, 0xef, 0xa9, 0xec, 0x80, 0xde, 0x53, 0xb9, 0xc1, 0xbc, 0xa7, 0xf2, + 0x4f, 0x22, 0x32, 0x5f, 0x86, 0x5c, 0xa9, 0xd3, 0x89, 0xdf, 0xc2, 0x76, 0x3a, 0xf7, 0xaf, 0xf3, + 0xf3, 0xac, 0xdd, 0xe9, 0x98, 0x0c, 0x43, 0x93, 0x63, 0xc3, 0x03, 0xca, 0x31, 0xe3, 0x75, 0x18, + 0x45, 0x5e, 0xe8, 0xb3, 0x74, 0x1e, 0x70, 0x31, 0x0b, 0x77, 0x25, 0xad, 0x2e, 0xb1, 0xcc, 0xff, + 0xbf, 0x0c, 0x0c, 0xe1, 0xef, 0x67, 0x74, 0x8e, 0x2d, 0x6a, 0x73, 0xac, 0xa8, 0xcc, 0xb1, 0x41, + 0x66, 0xd7, 0xff, 0x95, 0xc7, 0xde, 0x12, 0xf3, 0x4a, 0xb8, 0x0a, 0x65, 0x52, 0x5c, 0x85, 0xde, + 0x04, 0x45, 0x6a, 0xaa, 0xd6, 0x22, 0x65, 0xcf, 0x50, 0x4f, 0x1a, 0x11, 0x32, 0x79, 0x10, 0x77, + 0x1a, 0xca, 0xe1, 0x60, 0x5c, 0x88, 0x37, 0xf5, 0xa9, 0xf8, 0x0b, 0xad, 0x00, 0xa9, 0xb6, 0x7d, + 0x5a, 0xef, 0x7a, 0xb4, 0xf6, 0xc0, 0xe9, 0xdc, 0xa7, 0x9e, 0xb3, 0x73, 0x20, 0x4e, 0xf7, 0xb8, + 0x2f, 0x3b, 0xa2, 0xd4, 0xf2, 0x1f, 0x38, 0x1d, 0x76, 0x14, 0x71, 0x76, 0x0e, 0xcc, 0x14, 0x1a, + 0xf2, 0x1e, 0x8c, 0x98, 0x74, 0xdf, 0x73, 0x02, 0x79, 0x15, 0x3e, 0x19, 0x1e, 0x9c, 0x11, 0xca, + 0x0f, 0x86, 0x1e, 0xff, 0xa1, 0x8e, 0xbf, 0x28, 0x27, 0x8b, 0x5c, 0xf0, 0xf1, 0x2b, 0xef, 0x89, + 0xe8, 0x6b, 0x4b, 0x5b, 0xb5, 0x5e, 0x72, 0x8f, 0x5c, 0x86, 0x21, 0x94, 0x9e, 0x42, 0x27, 0x40, + 0x17, 0x72, 0xdc, 0x43, 0x55, 0xd1, 0x8e, 0x18, 0xe4, 0x79, 0x80, 0xf0, 0x06, 0xc2, 0x9f, 0x2b, + 0xe0, 0x6e, 0xad, 0x40, 0xe2, 0xa2, 0x7f, 0xf4, 0x38, 0xa2, 0xff, 0xb3, 0xf3, 0x94, 0xf9, 0xa5, + 0x2c, 0x5c, 0x08, 0xc5, 0xd9, 0xba, 0x57, 0x2b, 0xdd, 0x5d, 0xad, 0x36, 0x36, 0x84, 0xf6, 0xbf, + 0xe1, 0xb9, 0x0f, 0x1d, 0x76, 0xfa, 0xbb, 0x76, 0xc4, 0x62, 0x5c, 0xe5, 0xb3, 0x96, 0x9b, 0x0e, + 0xb3, 0x9a, 0x4f, 0x81, 0xb2, 0x6b, 0x08, 0xb7, 0x87, 0x4e, 0x27, 0x61, 0x49, 0x5c, 0x79, 0xce, + 0x8c, 0x18, 0x90, 0x1f, 0xcc, 0xc0, 0xc9, 0xf4, 0x86, 0x88, 0x13, 0xe1, 0x82, 0xd4, 0x3c, 0x7b, + 0xb4, 0xb6, 0xfc, 0xf2, 0xe3, 0xc3, 0x85, 0x0b, 0xbe, 0xdd, 0x6a, 0x5a, 0x4e, 0x83, 0xd7, 0xe6, + 0xd4, 0xa9, 0xd5, 0x11, 0x08, 0x5a, 0xbd, 0x3d, 0x6a, 0xfa, 0x0a, 0xc8, 0x35, 0x39, 0x97, 0x29, + 0x03, 0x14, 0xa4, 0x75, 0xc6, 0xf8, 0x7b, 0x19, 0x50, 0x66, 0x54, 0xc1, 0xa4, 0x0d, 0xc7, 0xa3, + 0xf5, 0x00, 0x25, 0x5a, 0x18, 0x11, 0xc1, 0x61, 0x31, 0x17, 0x12, 0x84, 0x91, 0x77, 0x61, 0x84, + 0xdb, 0x72, 0xb8, 0x0d, 0x25, 0x9a, 0x89, 0xc2, 0xee, 0xc3, 0x43, 0x67, 0x38, 0x86, 0x3a, 0x8b, + 0x05, 0x11, 0xd3, 0x6f, 0x6f, 0x6f, 0x6d, 0x2e, 0x35, 0x6d, 0xa7, 0xe5, 0x0b, 0x39, 0x86, 0xdd, + 0xfa, 0xf1, 0x7e, 0x60, 0xd5, 0x11, 0xaa, 0xea, 0xb7, 0x21, 0xaa, 0x71, 0x4b, 0x9a, 0x9d, 0x8e, + 0xf0, 0x83, 0x5a, 0x80, 0xa1, 0xfb, 0xd1, 0xf1, 0xb3, 0x3c, 0xfa, 0xf8, 0x70, 0x81, 0x4f, 0x17, + 0x93, 0xc3, 0x8d, 0xbf, 0x92, 0x81, 0x49, 0x7d, 0x3e, 0x91, 0x2b, 0x30, 0x2c, 0xa2, 0x11, 0x32, + 0x78, 0xcc, 0x66, 0xbd, 0x30, 0xcc, 0xe3, 0x10, 0xb4, 0xe8, 0x03, 0x81, 0xc5, 0x24, 0xb1, 0xe0, + 0x20, 0xec, 0x48, 0x28, 0x89, 0xeb, 0x1c, 0x64, 0xca, 0x32, 0x62, 0x30, 0x35, 0xcc, 0xef, 0x36, + 0x03, 0xd5, 0xfa, 0xea, 0x21, 0xc4, 0x14, 0x25, 0xc6, 0x12, 0x0c, 0xf3, 0x25, 0x1c, 0xf3, 0xbf, + 0xc8, 0x1c, 0xc3, 0xff, 0xc2, 0x38, 0xcc, 0x00, 0xd4, 0x6a, 0x2b, 0x77, 0xe8, 0xc1, 0x86, 0xed, + 0x78, 0x78, 0x5d, 0x80, 0xe2, 0xf2, 0x8e, 0x58, 0x5c, 0xe3, 0xe2, 0xba, 0x80, 0x8b, 0xd6, 0x07, + 0xf4, 0x40, 0xbb, 0x2e, 0x90, 0xa8, 0x28, 0x93, 0x3d, 0xe7, 0xa1, 0x1d, 0x50, 0x46, 0x98, 0x45, + 0x42, 0x2e, 0x93, 0x39, 0x34, 0x46, 0xa9, 0x20, 0x93, 0xaf, 0xc3, 0x64, 0xf4, 0x2b, 0xbc, 0xf4, + 0x98, 0x0c, 0x17, 0xb0, 0x5e, 0x58, 0x7e, 0xfe, 0xf1, 0xe1, 0xc2, 0xbc, 0xc2, 0x35, 0x7e, 0x1d, + 0x12, 0x63, 0x66, 0xfc, 0x42, 0x06, 0xaf, 0xfa, 0xe4, 0x07, 0x5e, 0x84, 0x7c, 0xe8, 0x55, 0x36, + 0xce, 0x2d, 0x35, 0x31, 0xc3, 0x2e, 0x96, 0x93, 0x0b, 0x90, 0x8b, 0xbe, 0x04, 0x45, 0xa4, 0xfe, + 0x05, 0xac, 0x94, 0xdc, 0x82, 0x91, 0x81, 0xda, 0x8c, 0x4b, 0x23, 0xa5, 0xad, 0x92, 0x1a, 0x47, + 0xe1, 0xf6, 0xd6, 0xe6, 0xe7, 0x77, 0x14, 0x7e, 0x3c, 0x0b, 0x53, 0xac, 0x5f, 0x4b, 0xdd, 0x60, + 0xcf, 0xf5, 0x9c, 0xe0, 0xe0, 0x99, 0xb5, 0x53, 0xbc, 0xad, 0x29, 0x39, 0xf3, 0x72, 0x97, 0x51, + 0xbf, 0x6d, 0x20, 0x73, 0xc5, 0x7f, 0x33, 0x04, 0x33, 0x29, 0x54, 0xe4, 0x35, 0xcd, 0x94, 0x38, + 0x27, 0xa3, 0x0d, 0x3f, 0x39, 0x5c, 0x18, 0x97, 0xe8, 0x9b, 0x51, 0xf4, 0xe1, 0xa2, 0x7e, 0x6f, + 0xce, 0x7b, 0x0a, 0x2d, 0x8b, 0xea, 0xbd, 0xb9, 0x7e, 0x5b, 0x7e, 0x19, 0x86, 0x4c, 0xb7, 0x49, + 0xa5, 0x93, 0x07, 0x6e, 0xec, 0x1e, 0x03, 0x68, 0x77, 0x63, 0x0c, 0x40, 0x56, 0x60, 0x84, 0xfd, + 0x71, 0xd7, 0xee, 0x08, 0xab, 0x2f, 0x09, 0xd5, 0x6c, 0x84, 0x76, 0x9c, 0xf6, 0xae, 0xaa, 0x69, + 0x37, 0xa9, 0xd5, 0xb2, 0x3b, 0x9a, 0x06, 0xc2, 0x11, 0x35, 0x8d, 0xbd, 0xd0, 0x5b, 0x63, 0xcf, + 0x1c, 0xa9, 0xb1, 0xef, 0x00, 0xd4, 0x9c, 0xdd, 0xb6, 0xd3, 0xde, 0x2d, 0x35, 0x77, 0x45, 0xcc, + 0xe6, 0xe5, 0xde, 0xa3, 0x70, 0x25, 0x42, 0xc6, 0x89, 0x7b, 0x06, 0xaf, 0x66, 0x38, 0xcc, 0xb2, + 0x9b, 0xbb, 0x9a, 0x6f, 0xb9, 0xc2, 0x99, 0xac, 0x01, 0x94, 0xea, 0x81, 0xf3, 0x90, 0x4d, 0x61, + 0x5f, 0x78, 0x23, 0xcb, 0x26, 0x2f, 0x95, 0xee, 0xd0, 0x83, 0x1a, 0x0d, 0x22, 0x23, 0xb7, 0x8d, + 0xa8, 0x6c, 0x25, 0x68, 0x8e, 0xc3, 0x11, 0x07, 0xd2, 0x81, 0x13, 0xa5, 0x46, 0xc3, 0x61, 0xdf, + 0x60, 0x37, 0xf1, 0xd6, 0x86, 0x36, 0x90, 0xf5, 0x78, 0x3a, 0xeb, 0xcb, 0x82, 0xf5, 0x0b, 0x76, + 0x48, 0x65, 0x05, 0x9c, 0x2c, 0x5e, 0x4d, 0x3a, 0x63, 0xa3, 0x06, 0x93, 0xfa, 0xc7, 0xeb, 0xb1, + 0xa6, 0xe3, 0x50, 0x30, 0x6b, 0x25, 0xab, 0xb6, 0x52, 0xba, 0x56, 0xcc, 0x90, 0x22, 0x8c, 0x8b, + 0x5f, 0x8b, 0xd6, 0xe2, 0x1b, 0x37, 0x8a, 0x59, 0x0d, 0xf2, 0xc6, 0xb5, 0xc5, 0x62, 0x6e, 0x3e, + 0x3b, 0x97, 0x89, 0x85, 0x79, 0x8c, 0x14, 0x0b, 0xdc, 0x9c, 0x61, 0xfc, 0x72, 0x06, 0x0a, 0xb2, + 0xed, 0xe4, 0x06, 0xe4, 0x6a, 0xb5, 0x95, 0x58, 0x60, 0x46, 0xb4, 0xcb, 0x70, 0x79, 0xea, 0xfb, + 0xaa, 0xf7, 0x1d, 0x23, 0x60, 0x74, 0x9b, 0xab, 0x35, 0xa1, 0x1c, 0x48, 0xba, 0x48, 0x78, 0x73, + 0xba, 0x14, 0x6f, 0xf5, 0x1b, 0x90, 0xbb, 0xbd, 0xb5, 0x29, 0x94, 0x79, 0x49, 0x17, 0xc9, 0x53, + 0x4e, 0xf7, 0xf1, 0xbe, 0x2a, 0xe5, 0x19, 0x81, 0x61, 0xc2, 0x98, 0x32, 0x91, 0xf9, 0xa6, 0xdb, + 0x72, 0xc3, 0x00, 0x4b, 0xb1, 0xe9, 0x32, 0x88, 0x29, 0x4a, 0x98, 0x8e, 0xb0, 0xea, 0xd6, 0xed, + 0xa6, 0xd8, 0xbd, 0x51, 0x47, 0x68, 0x32, 0x80, 0xc9, 0xe1, 0xc6, 0x6f, 0x66, 0xa0, 0x88, 0x9a, + 0x14, 0x7a, 0xcf, 0xb9, 0x0f, 0x68, 0xfb, 0xfe, 0x35, 0xf2, 0xba, 0x5c, 0x72, 0x99, 0xf0, 0xe8, + 0x38, 0x84, 0x4b, 0x2e, 0x66, 0x7b, 0x16, 0xcb, 0x4e, 0x89, 0x61, 0xcd, 0x0e, 0x1e, 0xfb, 0x76, + 0x44, 0x0c, 0xeb, 0x02, 0x0c, 0x61, 0x73, 0x84, 0x70, 0xc4, 0x96, 0x07, 0x0c, 0x60, 0x72, 0xb8, + 0x22, 0x9b, 0x7e, 0x32, 0x9b, 0xf8, 0x86, 0xc5, 0xcf, 0x55, 0xfc, 0x98, 0xfe, 0x71, 0x03, 0xc9, + 0xeb, 0x0f, 0x61, 0x36, 0xde, 0x25, 0x78, 0xac, 0x2f, 0xc1, 0x94, 0x0e, 0x97, 0x27, 0xfc, 0x53, + 0xa9, 0x75, 0xdd, 0x5f, 0x34, 0xe3, 0xf8, 0xc6, 0xff, 0x9e, 0x81, 0x51, 0xfc, 0xd3, 0xec, 0x36, + 0xd1, 0x19, 0xa2, 0xb4, 0x55, 0x13, 0x26, 0x3c, 0x55, 0x99, 0xb3, 0xf7, 0x7d, 0x4b, 0x58, 0xf9, + 0x34, 0x19, 0x13, 0x22, 0x0b, 0x52, 0x6e, 0x9b, 0x93, 0xf7, 0x94, 0x21, 0x29, 0x37, 0xe2, 0xf9, + 0x31, 0x52, 0x81, 0x8c, 0x2e, 0x54, 0x5b, 0x35, 0x36, 0xfd, 0xd4, 0xdb, 0x49, 0xa4, 0x73, 0x9b, + 0xba, 0x0b, 0x15, 0x47, 0xc3, 0xcb, 0xc9, 0xad, 0x5a, 0xc9, 0x5c, 0xd3, 0x2e, 0x27, 0x59, 0x1b, + 0x35, 0x57, 0x5d, 0x81, 0x64, 0xfc, 0xc3, 0xd1, 0x78, 0x07, 0x8a, 0x0d, 0xef, 0x98, 0x6b, 0xe3, + 0x2d, 0x18, 0x2a, 0x35, 0x9b, 0xee, 0xbe, 0x90, 0x12, 0xd2, 0xca, 0x10, 0xf6, 0x1f, 0xdf, 0xcf, + 0x6c, 0x86, 0xa2, 0xc5, 0xc4, 0x30, 0x00, 0x59, 0x82, 0xd1, 0xd2, 0x56, 0xad, 0x5a, 0xad, 0x6c, + 0x6e, 0x72, 0xff, 0xff, 0x5c, 0xf9, 0x25, 0xd9, 0x3f, 0x8e, 0xd3, 0xb0, 0xe2, 0xf7, 0x63, 0x91, + 0xfe, 0x1e, 0xd1, 0x91, 0x77, 0x00, 0x6e, 0xbb, 0x4e, 0xfb, 0x2e, 0x0d, 0xf6, 0xdc, 0x86, 0xf8, + 0xf8, 0x73, 0x8f, 0x0f, 0x17, 0xc6, 0x3e, 0x76, 0x9d, 0xb6, 0xd5, 0x42, 0x30, 0x6b, 0x7b, 0x84, + 0x64, 0x2a, 0x7f, 0xb3, 0x9e, 0x2e, 0xbb, 0xdc, 0xc1, 0x61, 0x28, 0xea, 0xe9, 0x6d, 0x37, 0xe1, + 0xdb, 0x20, 0xd1, 0x48, 0x0b, 0xa6, 0x6a, 0xdd, 0xdd, 0x5d, 0xca, 0x24, 0xbb, 0xb0, 0x5b, 0x0c, + 0x8b, 0x33, 0x6e, 0x98, 0x75, 0x81, 0x9f, 0x47, 0xd8, 0x29, 0xc5, 0x2f, 0xbf, 0xc6, 0x26, 0xf2, + 0x77, 0x0f, 0x17, 0xc4, 0xbd, 0x1b, 0x53, 0xd5, 0x7c, 0x49, 0x9f, 0xb4, 0x5a, 0xc4, 0x79, 0x93, + 0x75, 0x18, 0xbe, 0xe5, 0x04, 0x2b, 0xdd, 0x6d, 0xe1, 0xcf, 0xfe, 0x42, 0x9f, 0x45, 0xc3, 0x11, + 0xb9, 0xe1, 0x77, 0xd7, 0x09, 0xf6, 0xba, 0xaa, 0x47, 0xb1, 0x60, 0x43, 0xb6, 0xa0, 0xb0, 0xe4, + 0x78, 0xf5, 0x26, 0x5d, 0xaa, 0x8a, 0xbd, 0xff, 0x42, 0x1f, 0x96, 0x12, 0x95, 0xf7, 0x4b, 0x1d, + 0x7f, 0xd5, 0x1d, 0x55, 0x17, 0x90, 0x18, 0xe4, 0xaf, 0x65, 0xe0, 0x4c, 0xd8, 0xfa, 0xd2, 0x2e, + 0x6d, 0x07, 0x77, 0xed, 0xa0, 0xbe, 0x47, 0x3d, 0xd1, 0x4b, 0xa3, 0xfd, 0x7a, 0xe9, 0x2b, 0x89, + 0x5e, 0xba, 0x14, 0xf5, 0x92, 0xcd, 0x98, 0x59, 0x2d, 0xce, 0x2d, 0xd9, 0x67, 0xfd, 0x6a, 0x25, + 0x16, 0x40, 0x64, 0xc9, 0x17, 0xf1, 0x50, 0x2f, 0xf5, 0xf9, 0xe0, 0x08, 0x59, 0xf8, 0x31, 0x87, + 0xbf, 0x35, 0x7f, 0x9e, 0x10, 0x4a, 0xee, 0xc8, 0xe0, 0x11, 0xae, 0x95, 0x9c, 0xef, 0xc3, 0x9b, + 0x07, 0x94, 0xcc, 0xf4, 0x09, 0x13, 0xe3, 0xa3, 0xbd, 0x6a, 0x6f, 0x0b, 0x45, 0xe4, 0x88, 0xd1, + 0x5e, 0xb5, 0xa3, 0xd1, 0x6e, 0xda, 0xf1, 0xd1, 0x5e, 0xb5, 0xb7, 0xc9, 0x12, 0x8f, 0x78, 0xe3, + 0xe1, 0x51, 0xcf, 0xf7, 0xe3, 0xb6, 0xb4, 0xc1, 0x77, 0xe6, 0x94, 0xc8, 0xb7, 0x8f, 0x60, 0xb4, + 0xd6, 0xb1, 0xeb, 0xb4, 0xe9, 0xec, 0x04, 0xe2, 0x6a, 0xe7, 0xc5, 0x3e, 0xac, 0x42, 0x5c, 0x71, + 0x2d, 0x20, 0x7f, 0xaa, 0xc7, 0xa4, 0x10, 0x87, 0xb5, 0x70, 0x73, 0xe3, 0xee, 0xdc, 0xd4, 0x91, + 0x2d, 0xdc, 0xdc, 0xb8, 0x2b, 0x74, 0x8e, 0x4e, 0x4b, 0xd3, 0x39, 0x36, 0xee, 0x1a, 0xbf, 0x96, + 0x83, 0x53, 0x3d, 0x68, 0xc8, 0x9a, 0x94, 0x51, 0x19, 0xcd, 0xbc, 0xd8, 0x03, 0xfd, 0xca, 0x91, + 0x62, 0x6b, 0x15, 0x8a, 0xcb, 0x77, 0x50, 0xb9, 0x65, 0x3f, 0x69, 0x63, 0xa9, 0x24, 0xa5, 0xfb, + 0xf9, 0xc7, 0x87, 0x0b, 0x67, 0xe9, 0x03, 0x74, 0x0d, 0xb2, 0x79, 0xa1, 0x55, 0xd7, 0x82, 0xd7, + 0x12, 0x94, 0xf3, 0x3f, 0x90, 0x85, 0x3c, 0xee, 0x34, 0xb1, 0x94, 0x1d, 0x99, 0x63, 0xa5, 0xec, + 0x78, 0x1f, 0xc6, 0x97, 0xef, 0xf0, 0xa3, 0xe7, 0x8a, 0xed, 0xef, 0x09, 0x39, 0x88, 0x37, 0x6d, + 0xf4, 0x81, 0x25, 0x4e, 0xaa, 0x7b, 0xb6, 0xa6, 0xe4, 0x69, 0x14, 0xe4, 0x1e, 0xcc, 0xf0, 0xb6, + 0x39, 0x3b, 0x4e, 0x9d, 0x47, 0xfe, 0x3b, 0x76, 0x53, 0x08, 0xc5, 0x0b, 0x8f, 0x0f, 0x17, 0x16, + 0xe8, 0x03, 0x74, 0x7a, 0x12, 0xe5, 0x96, 0x8f, 0x08, 0xaa, 0xf7, 0x53, 0x0a, 0xbd, 0x1a, 0x8e, + 0x6c, 0x8e, 0x62, 0x85, 0xac, 0x36, 0x56, 0x37, 0xc3, 0xe5, 0x48, 0xc6, 0xdf, 0x1b, 0x82, 0xf9, + 0xde, 0xf2, 0x8c, 0x7c, 0xa0, 0x0f, 0xe0, 0xc5, 0x23, 0x25, 0xe0, 0xd1, 0x63, 0xf8, 0x55, 0x98, + 0x5d, 0x6e, 0x07, 0xd4, 0xeb, 0x78, 0x8e, 0x0c, 0x40, 0x5f, 0x71, 0x7d, 0xe9, 0x64, 0x86, 0xde, + 0x5e, 0x34, 0x2c, 0x17, 0x56, 0x42, 0x74, 0x79, 0x53, 0x58, 0xa5, 0x72, 0x20, 0xcb, 0x30, 0xa9, + 0xc0, 0x9b, 0xdd, 0x5d, 0xb1, 0x83, 0xa3, 0x07, 0xa3, 0xca, 0xb3, 0xd9, 0x55, 0x3d, 0x70, 0x62, + 0x44, 0xf3, 0xbf, 0x90, 0x13, 0xd3, 0xe2, 0x02, 0xe4, 0x6a, 0xdd, 0x6d, 0x31, 0x1d, 0xb8, 0xaa, + 0xae, 0x89, 0x75, 0x56, 0x4a, 0xbe, 0x0c, 0x60, 0xd2, 0x8e, 0xeb, 0x3b, 0x81, 0xeb, 0x1d, 0xa8, + 0x71, 0x0c, 0x5e, 0x08, 0xd5, 0x3d, 0x36, 0x25, 0x94, 0xac, 0xc0, 0x54, 0xf4, 0x6b, 0x7d, 0xbf, + 0x2d, 0x4c, 0x9b, 0xa3, 0xdc, 0xa6, 0x10, 0x91, 0x5b, 0x2e, 0x2b, 0x53, 0x37, 0xaa, 0x18, 0x19, + 0x59, 0x84, 0xc2, 0x96, 0xeb, 0x3d, 0xd8, 0x61, 0x03, 0x95, 0x8f, 0xb6, 0xd2, 0x7d, 0x01, 0x53, + 0xb7, 0x0c, 0x89, 0xc7, 0xe6, 0xfc, 0x72, 0xfb, 0xa1, 0xe3, 0xb9, 0xed, 0x16, 0x6d, 0x07, 0xea, + 0x2d, 0x24, 0x8d, 0xc0, 0x5a, 0x04, 0x59, 0x04, 0x66, 0x27, 0xe7, 0x52, 0x3d, 0x70, 0x3d, 0x71, + 0x05, 0xc9, 0x87, 0x9b, 0x01, 0xb4, 0xe1, 0x66, 0x00, 0xd6, 0x89, 0x26, 0xdd, 0x11, 0xb6, 0x73, + 0xec, 0x44, 0x8f, 0xee, 0x68, 0xe1, 0x71, 0x74, 0x87, 0xa9, 0x02, 0x26, 0xdd, 0xc1, 0xe3, 0xbe, + 0x96, 0x55, 0x66, 0x27, 0x61, 0x28, 0x12, 0x68, 0xc6, 0xef, 0x8c, 0xf6, 0x9c, 0xb7, 0x4c, 0xf6, + 0x1e, 0x6f, 0xde, 0xae, 0xda, 0x03, 0xcc, 0xdb, 0xd7, 0x42, 0x3f, 0x50, 0x35, 0x26, 0x14, 0x21, + 0xaa, 0xf0, 0xe7, 0x38, 0xf3, 0xbf, 0x58, 0x38, 0xce, 0x24, 0x12, 0x9d, 0x94, 0x1d, 0xb4, 0x93, + 0x72, 0x03, 0x75, 0x12, 0x29, 0xc3, 0x44, 0x98, 0x97, 0x68, 0xc3, 0x0e, 0x34, 0xd9, 0x14, 0x26, + 0x93, 0xb2, 0x3a, 0x76, 0xa0, 0xca, 0x26, 0x9d, 0x84, 0xbc, 0x0d, 0x63, 0xc2, 0x19, 0x1a, 0x39, + 0x0c, 0x45, 0xee, 0x68, 0xd2, 0x73, 0x3a, 0x46, 0xaf, 0xa2, 0xb3, 0x25, 0xb9, 0xe1, 0x74, 0x68, + 0xd3, 0x69, 0xd3, 0x1a, 0xda, 0xce, 0xc5, 0x8c, 0xc1, 0x25, 0xd9, 0x11, 0x25, 0x16, 0x37, 0xab, + 0x6b, 0x56, 0x33, 0x8d, 0x28, 0x3e, 0x59, 0x47, 0x8e, 0x35, 0x59, 0xb9, 0x37, 0x88, 0xb7, 0xea, + 0xee, 0x3a, 0xd2, 0xff, 0x4d, 0x7a, 0x83, 0x78, 0x56, 0x93, 0x41, 0x63, 0xde, 0x20, 0x1c, 0x95, + 0xe9, 0xf5, 0xec, 0x47, 0xb5, 0x22, 0xee, 0x69, 0x50, 0xaf, 0x47, 0x22, 0xdd, 0xe9, 0x90, 0x23, + 0xc9, 0x6a, 0x96, 0x5b, 0xb6, 0xd3, 0x14, 0xa1, 0x7f, 0x51, 0x35, 0x94, 0x41, 0xe3, 0xd5, 0x20, + 0x2a, 0xa9, 0xc3, 0xb8, 0x49, 0x77, 0x36, 0x3c, 0x37, 0xa0, 0xf5, 0x80, 0x36, 0x84, 0x2e, 0x23, + 0xd5, 0xf9, 0xb2, 0xeb, 0x72, 0x3d, 0xad, 0xfc, 0xfa, 0xef, 0x1c, 0x2e, 0x64, 0xbe, 0x7b, 0xb8, + 0x00, 0x0c, 0xc4, 0x3d, 0x5a, 0x1f, 0x1f, 0x2e, 0x9c, 0x62, 0xe3, 0xdf, 0x91, 0xc4, 0xea, 0x16, + 0xa3, 0x32, 0x25, 0xdf, 0xcb, 0x84, 0x6e, 0xd8, 0x25, 0x51, 0x65, 0xe3, 0x3d, 0x2a, 0x7b, 0x23, + 0xb5, 0xb2, 0x05, 0xa5, 0xb7, 0x53, 0x2b, 0x4d, 0xad, 0x84, 0xbc, 0x03, 0x63, 0x4b, 0xd5, 0x25, + 0xb7, 0xbd, 0xe3, 0xec, 0xd6, 0x56, 0x4a, 0xa8, 0x10, 0x09, 0x6f, 0xe6, 0xba, 0x63, 0xd5, 0x11, + 0x6e, 0xf9, 0x7b, 0xb6, 0x16, 0xd4, 0x12, 0xe1, 0x93, 0x5b, 0x30, 0x29, 0x7f, 0x9a, 0x74, 0xe7, + 0x9e, 0x59, 0x45, 0x3d, 0x48, 0xba, 0x90, 0x87, 0x1c, 0x58, 0x47, 0x74, 0x3d, 0x55, 0x3f, 0x8e, + 0x91, 0xb1, 0xc9, 0x58, 0xa1, 0x9d, 0xa6, 0x7b, 0xc0, 0x9a, 0xb7, 0xe9, 0x50, 0x0f, 0x35, 0x1f, + 0x31, 0x19, 0x1b, 0x61, 0x89, 0x15, 0x38, 0x9a, 0xb8, 0x8d, 0x11, 0x91, 0x35, 0x98, 0x16, 0x53, + 0xfc, 0xbe, 0xe3, 0x3b, 0xdb, 0x4e, 0xd3, 0x09, 0x0e, 0x30, 0xcc, 0x50, 0x68, 0x21, 0x72, 0x5d, + 0x3c, 0x0c, 0x4b, 0x15, 0x66, 0x49, 0x52, 0xe3, 0x97, 0xb3, 0x70, 0xb6, 0x9f, 0xfe, 0x4f, 0x6a, + 0xba, 0x30, 0xbb, 0x34, 0xc0, 0x99, 0xe1, 0x68, 0x71, 0xb6, 0x0c, 0x93, 0xeb, 0xde, 0xae, 0xdd, + 0x76, 0xbe, 0x8d, 0xe7, 0xba, 0xd0, 0x29, 0x06, 0x3b, 0xc3, 0x55, 0x4a, 0xf4, 0xd9, 0x1e, 0x23, + 0x9a, 0x7f, 0x28, 0xc4, 0xdc, 0xa7, 0x0d, 0xaf, 0xb8, 0x01, 0xa3, 0x4b, 0x6e, 0x3b, 0xa0, 0x8f, + 0x82, 0x58, 0x14, 0x20, 0x07, 0xc6, 0x43, 0x4b, 0x24, 0xaa, 0xf1, 0xff, 0x67, 0xe1, 0x5c, 0x5f, + 0x05, 0x98, 0x6c, 0xea, 0xbd, 0x76, 0x79, 0x10, 0xad, 0xf9, 0xe8, 0x6e, 0x5b, 0x4c, 0xf8, 0x6f, + 0x1c, 0xe9, 0xbd, 0x3c, 0xff, 0xdf, 0x65, 0x44, 0x27, 0x7d, 0x01, 0x46, 0xb0, 0xaa, 0xb0, 0x8b, + 0xb8, 0x6d, 0x08, 0xa5, 0xb0, 0xa3, 0xdb, 0x86, 0x38, 0x1a, 0xb9, 0x0e, 0x85, 0x25, 0xbb, 0xd9, + 0x54, 0x62, 0x24, 0x51, 0xaf, 0xaf, 0x23, 0x2c, 0xe6, 0xee, 0x23, 0x11, 0xc9, 0x9b, 0x00, 0xfc, + 0x6f, 0x65, 0xaf, 0x40, 0x61, 0x29, 0xc8, 0x62, 0xdb, 0x85, 0x82, 0x8c, 0x99, 0xd5, 0xea, 0x6e, + 0x18, 0xcc, 0xc5, 0x33, 0xab, 0x31, 0x80, 0x96, 0x59, 0x8d, 0x01, 0x8c, 0x5f, 0xc9, 0xc1, 0xf3, + 0xfd, 0x4f, 0x71, 0xe4, 0x9e, 0x3e, 0x04, 0xaf, 0x0c, 0x74, 0xf6, 0x3b, 0x7a, 0x0c, 0x64, 0x9e, + 0x42, 0xde, 0x21, 0x97, 0x92, 0x4e, 0xc6, 0x9f, 0x1c, 0x2e, 0x28, 0x3e, 0x64, 0xb7, 0x5d, 0xa7, + 0xad, 0xdc, 0x14, 0x7c, 0x0b, 0xa0, 0x16, 0xd8, 0x81, 0x53, 0xbf, 0xbd, 0x75, 0x47, 0x86, 0xf1, + 0xdf, 0x18, 0xac, 0x65, 0x11, 0x1d, 0x97, 0x2b, 0x22, 0xbe, 0x01, 0xa1, 0xd6, 0xc7, 0xfb, 0x0f, + 0xb4, 0x73, 0x6a, 0x84, 0x3c, 0xff, 0x15, 0x28, 0xc6, 0x49, 0xc9, 0x45, 0xc8, 0x63, 0x03, 0x14, + 0x4f, 0xe9, 0x18, 0x07, 0x2c, 0x9f, 0xbf, 0x2b, 0xe6, 0xce, 0x32, 0x4c, 0x8a, 0xeb, 0x69, 0xdd, + 0x22, 0x86, 0xeb, 0x55, 0xde, 0x6e, 0x27, 0xad, 0x62, 0x31, 0x22, 0xe3, 0x4f, 0x33, 0x70, 0xba, + 0xe7, 0xf9, 0x98, 0x6c, 0xe8, 0x03, 0xf6, 0xd2, 0x51, 0x07, 0xea, 0x23, 0xc7, 0x6a, 0xfe, 0x47, + 0xe5, 0xdc, 0x7f, 0x17, 0xc6, 0x6b, 0xdd, 0xed, 0xf8, 0x21, 0x8b, 0x07, 0x75, 0x2b, 0x70, 0x75, + 0x07, 0x53, 0xf1, 0xd9, 0xf7, 0xcb, 0xfb, 0x77, 0xe1, 0x5e, 0xc1, 0x0f, 0x7e, 0xf8, 0xfd, 0x61, + 0x78, 0x14, 0x06, 0xe0, 0xa9, 0x9d, 0x18, 0x23, 0x32, 0x7e, 0x29, 0x9b, 0x7e, 0x5a, 0x65, 0x67, + 0xed, 0x63, 0x9c, 0x56, 0x6f, 0x2d, 0x6d, 0x1c, 0xfd, 0xed, 0xff, 0xa5, 0xfc, 0x76, 0xbc, 0x8e, + 0x14, 0x12, 0x4f, 0x9a, 0xf7, 0xc4, 0x75, 0xa4, 0x94, 0x8e, 0xbe, 0x7e, 0x1d, 0x29, 0x91, 0xc9, + 0x1b, 0x30, 0xba, 0xea, 0xf2, 0xc0, 0x58, 0xf9, 0xc5, 0x3c, 0x7e, 0x48, 0x02, 0x55, 0xf1, 0x18, + 0x62, 0xb2, 0xb3, 0x85, 0x3e, 0xf0, 0xd2, 0xc9, 0x1b, 0xcf, 0x16, 0xb1, 0xe9, 0xa2, 0x1b, 0xc1, + 0x74, 0x32, 0xe3, 0x47, 0xb3, 0x30, 0xc9, 0x27, 0x2f, 0x37, 0xd2, 0x3e, 0xb3, 0x06, 0xf0, 0xb7, + 0x34, 0x03, 0xb8, 0xcc, 0xff, 0xa0, 0x7e, 0xda, 0x40, 0xe6, 0xef, 0x3d, 0x20, 0x49, 0x1a, 0x62, + 0xc2, 0xb8, 0x0a, 0xed, 0x6f, 0xf9, 0xbe, 0x16, 0xa5, 0x0a, 0x11, 0xb2, 0x03, 0xaf, 0x1f, 0x7c, + 0x53, 0xe3, 0x61, 0xfc, 0x95, 0x2c, 0x4c, 0x28, 0xd7, 0x95, 0xcf, 0x6c, 0xc7, 0x7f, 0x45, 0xeb, + 0xf8, 0xb9, 0xd0, 0x31, 0x39, 0xfc, 0xb2, 0x81, 0xfa, 0xbd, 0x0b, 0xd3, 0x09, 0x92, 0xf8, 0xad, + 0x6f, 0x66, 0x90, 0x5b, 0xdf, 0xd7, 0x92, 0x79, 0x07, 0x78, 0xfa, 0xce, 0x30, 0x98, 0x55, 0x4d, + 0x74, 0xf0, 0xe3, 0x59, 0x98, 0x15, 0xbf, 0x30, 0x51, 0x0f, 0x97, 0xde, 0xcf, 0xec, 0x58, 0x94, + 0xb4, 0xb1, 0x58, 0xd0, 0xc7, 0x42, 0xf9, 0xc0, 0xde, 0x43, 0x62, 0xfc, 0x25, 0x80, 0xb9, 0x5e, + 0x04, 0x03, 0xc7, 0xff, 0x44, 0xde, 0xd5, 0xd9, 0x01, 0xbc, 0xab, 0x57, 0xa1, 0x88, 0x55, 0x89, + 0x54, 0x1c, 0x3e, 0x3b, 0x03, 0xe4, 0x22, 0x85, 0x9b, 0x67, 0x53, 0x12, 0xa9, 0x41, 0xfc, 0xd8, + 0x21, 0x20, 0x41, 0x49, 0x7e, 0x21, 0x03, 0x93, 0x08, 0x5c, 0x7e, 0x48, 0xdb, 0x01, 0x32, 0xcb, + 0x0b, 0x67, 0xe0, 0xd0, 0x3e, 0x5e, 0x0b, 0x3c, 0xa7, 0xbd, 0x2b, 0x0c, 0xe4, 0xdb, 0xc2, 0x40, + 0xfe, 0x36, 0x37, 0xec, 0x5f, 0xa9, 0xbb, 0xad, 0xab, 0xbb, 0x9e, 0xfd, 0xd0, 0xe1, 0x37, 0xf1, + 0x76, 0xf3, 0x6a, 0x94, 0x3d, 0xba, 0xe3, 0xc4, 0xf2, 0x41, 0x0b, 0x56, 0x78, 0xf9, 0xc0, 0x1b, + 0x4a, 0xb1, 0xda, 0xf8, 0x59, 0x45, 0x6f, 0x11, 0xf9, 0x1e, 0x38, 0xc5, 0xe3, 0xec, 0x99, 0xca, + 0xeb, 0xb4, 0xbb, 0x6e, 0xd7, 0x2f, 0xdb, 0xf5, 0x07, 0x6c, 0xdf, 0xe3, 0x01, 0x0d, 0xf8, 0xe5, + 0xf5, 0xb0, 0xd0, 0xda, 0xe6, 0xa5, 0x5a, 0x00, 0x57, 0x3a, 0x03, 0xb2, 0x02, 0xd3, 0xbc, 0xa8, + 0xd4, 0x0d, 0xdc, 0x5a, 0xdd, 0x6e, 0x3a, 0xed, 0x5d, 0x3c, 0x53, 0x17, 0xf8, 0x7e, 0x6c, 0x77, + 0x03, 0xd7, 0xf2, 0x39, 0x5c, 0x3d, 0xba, 0x24, 0x88, 0x48, 0x15, 0xa6, 0x4c, 0x6a, 0x37, 0xee, + 0xda, 0x8f, 0x96, 0xec, 0x8e, 0x5d, 0x67, 0x07, 0xa1, 0x02, 0x5e, 0x26, 0xe1, 0xd9, 0xcc, 0xa3, + 0x76, 0xc3, 0x6a, 0xd9, 0x8f, 0xac, 0xba, 0x28, 0xd4, 0x6d, 0x58, 0x1a, 0x5d, 0xc8, 0xca, 0x69, + 0x87, 0xac, 0x46, 0xe3, 0xac, 0x9c, 0x76, 0x6f, 0x56, 0x11, 0x9d, 0x64, 0xb5, 0x69, 0x7b, 0xbb, + 0x34, 0xe0, 0x8e, 0x6c, 0xec, 0x3c, 0x9e, 0x51, 0x58, 0x05, 0x58, 0x66, 0xa1, 0x53, 0x5b, 0x9c, + 0x95, 0x42, 0xc7, 0x66, 0xde, 0x96, 0xe7, 0x04, 0x54, 0xfd, 0xc2, 0x31, 0x6c, 0x16, 0xf6, 0x3f, + 0xba, 0x00, 0xf6, 0xfa, 0xc4, 0x04, 0x65, 0xc4, 0x4d, 0xf9, 0xc8, 0xf1, 0x04, 0xb7, 0xf4, 0xaf, + 0x4c, 0x50, 0x86, 0xdc, 0xd4, 0xef, 0x9c, 0xc0, 0xef, 0x54, 0xb8, 0xf5, 0xf8, 0xd0, 0x04, 0x25, + 0x59, 0x63, 0x9d, 0x16, 0xd0, 0x36, 0x9b, 0xd1, 0xc2, 0x91, 0x6f, 0x12, 0x9b, 0xf6, 0xa2, 0xf0, + 0x46, 0x29, 0x7a, 0xb2, 0xd8, 0x4a, 0x71, 0xeb, 0x8b, 0x13, 0x93, 0xef, 0x83, 0xa9, 0x7b, 0x3e, + 0xbd, 0x59, 0xdd, 0xa8, 0xc9, 0xb0, 0x7c, 0x3c, 0x6d, 0x4f, 0x2e, 0x5e, 0x3b, 0x42, 0xe8, 0x5c, + 0x51, 0x69, 0x30, 0x89, 0x33, 0x1f, 0xb7, 0xae, 0x4f, 0xad, 0x1d, 0xa7, 0xe3, 0x87, 0x39, 0x4e, + 0xd4, 0x71, 0x8b, 0x55, 0x65, 0xac, 0xc0, 0x74, 0x82, 0x0d, 0x99, 0x04, 0x60, 0x40, 0xeb, 0xde, + 0x5a, 0x6d, 0x79, 0xb3, 0xf8, 0x1c, 0x29, 0xc2, 0x38, 0xfe, 0x5e, 0x5e, 0x2b, 0x95, 0x57, 0x97, + 0x2b, 0xc5, 0x0c, 0x99, 0x86, 0x09, 0x84, 0x54, 0xaa, 0x35, 0x0e, 0xca, 0xf2, 0x14, 0x9e, 0x66, + 0x91, 0x2f, 0xdd, 0x80, 0x2d, 0x00, 0xdc, 0x53, 0x8c, 0xbf, 0x9e, 0x85, 0xd3, 0x72, 0x5b, 0xa1, + 0xc1, 0xbe, 0xeb, 0x3d, 0x70, 0xda, 0xbb, 0xcf, 0xf8, 0xee, 0x70, 0x53, 0xdb, 0x1d, 0x5e, 0x8c, + 0xed, 0xd4, 0xb1, 0xaf, 0xec, 0xb3, 0x45, 0xfc, 0xd3, 0x02, 0x9c, 0xeb, 0x4b, 0x45, 0x3e, 0x60, + 0xbb, 0xb9, 0x43, 0xdb, 0x41, 0xb5, 0xd1, 0xa4, 0x9b, 0x4e, 0x8b, 0xba, 0xdd, 0x40, 0x38, 0x8e, + 0x5e, 0xc0, 0x03, 0x2e, 0x16, 0x5a, 0x4e, 0xa3, 0x49, 0xad, 0x80, 0x17, 0x6b, 0xd3, 0x2d, 0x49, + 0xcd, 0x58, 0x86, 0x09, 0xe5, 0xab, 0xed, 0x80, 0x7a, 0x0f, 0xd1, 0x39, 0x25, 0x64, 0xf9, 0x80, + 0xd2, 0x8e, 0x65, 0xb3, 0x52, 0xcb, 0x11, 0xc5, 0x3a, 0xcb, 0x04, 0x35, 0xb9, 0xa9, 0xb0, 0x5c, + 0x62, 0xea, 0xf0, 0x5d, 0xfb, 0x91, 0xb8, 0x2d, 0x17, 0xf9, 0x99, 0x42, 0x96, 0x3c, 0xe6, 0xa8, + 0x65, 0x3f, 0x32, 0x93, 0x24, 0xe4, 0xeb, 0x70, 0x42, 0x6c, 0x40, 0x22, 0x66, 0x54, 0x7e, 0x31, + 0x8f, 0x48, 0x7d, 0xf9, 0xf1, 0xe1, 0xc2, 0x29, 0x99, 0xd9, 0x4a, 0x46, 0x09, 0xa7, 0x7d, 0x75, + 0x3a, 0x17, 0xb2, 0xc9, 0x36, 0xe4, 0x58, 0x77, 0xdc, 0xa5, 0xbe, 0x6f, 0xef, 0xca, 0x9b, 0x75, + 0xee, 0x65, 0xaf, 0x74, 0xa6, 0xd5, 0xe2, 0xe5, 0x66, 0x4f, 0x4a, 0xb2, 0x02, 0x93, 0x5b, 0x74, + 0x5b, 0x1d, 0x9f, 0xe1, 0x50, 0x54, 0x15, 0xf7, 0xe9, 0x76, 0xef, 0xc1, 0x89, 0xd1, 0x11, 0x07, + 0x0d, 0x66, 0x8f, 0x0e, 0x56, 0x1d, 0x3f, 0xa0, 0x6d, 0xea, 0x61, 0x2e, 0x82, 0x11, 0x14, 0x06, + 0x73, 0x91, 0x86, 0xac, 0x97, 0x97, 0x5f, 0x78, 0x7c, 0xb8, 0x70, 0x8e, 0x47, 0x95, 0x34, 0x05, + 0xdc, 0x8a, 0xa5, 0x63, 0x4f, 0x72, 0x25, 0xdf, 0x84, 0x29, 0xd3, 0xed, 0x06, 0x4e, 0x7b, 0xb7, + 0x16, 0x78, 0x76, 0x40, 0x77, 0xf9, 0x86, 0x14, 0x25, 0x3d, 0x88, 0x95, 0x8a, 0xbb, 0x16, 0x0e, + 0xb4, 0x7c, 0x01, 0xd5, 0x76, 0x04, 0x9d, 0x80, 0x7c, 0x03, 0x26, 0x79, 0xb4, 0x60, 0x58, 0xc1, + 0xa8, 0x96, 0x4a, 0x56, 0x2f, 0xbc, 0x7f, 0x8d, 0x1f, 0x50, 0x79, 0xd4, 0x61, 0x5a, 0x05, 0x31, + 0x6e, 0xe4, 0x23, 0xd1, 0x59, 0x1b, 0x4e, 0x7b, 0x37, 0x9c, 0xc6, 0x80, 0x3d, 0xff, 0x7a, 0xd4, + 0x25, 0x1d, 0xd6, 0x5c, 0x39, 0x8d, 0x7b, 0x78, 0x6a, 0x24, 0xf9, 0x90, 0x00, 0xce, 0x95, 0x7c, + 0xdf, 0xf1, 0x03, 0xe1, 0x5e, 0xbd, 0xfc, 0x88, 0xd6, 0xbb, 0x0c, 0x79, 0xcb, 0xf5, 0x1e, 0x50, + 0x8f, 0xbb, 0xf7, 0x0d, 0x95, 0xaf, 0x3c, 0x3e, 0x5c, 0x78, 0xc5, 0x46, 0x44, 0x4b, 0x78, 0x64, + 0x5b, 0x54, 0xa2, 0x5a, 0xfb, 0x1c, 0x57, 0xf9, 0x86, 0xfe, 0x4c, 0xc9, 0x37, 0xe0, 0xe4, 0x92, + 0xed, 0xd3, 0x6a, 0xdb, 0xa7, 0x6d, 0xdf, 0x09, 0x9c, 0x87, 0x54, 0x74, 0x2a, 0x6e, 0x7e, 0x05, + 0x4c, 0x5c, 0x6f, 0xd4, 0x6d, 0x9f, 0x2d, 0xcc, 0x10, 0xc5, 0x12, 0x83, 0xa2, 0x54, 0xd3, 0x83, + 0x8b, 0x71, 0x98, 0x81, 0x62, 0xbc, 0xdb, 0xc9, 0x57, 0x61, 0x94, 0xbb, 0x24, 0x50, 0x7f, 0x4f, + 0x04, 0xba, 0xc9, 0x1b, 0xee, 0x10, 0xae, 0x13, 0x89, 0xd0, 0x04, 0xee, 0xf0, 0x40, 0xd5, 0xfb, + 0x5a, 0x0c, 0x4d, 0x90, 0x44, 0xa4, 0x01, 0xe3, 0xbc, 0x67, 0x29, 0x66, 0x27, 0x11, 0x9e, 0x69, + 0x2f, 0xa8, 0x33, 0x59, 0x14, 0xc5, 0xf8, 0xa3, 0xc9, 0x5b, 0x8c, 0x1f, 0x47, 0xd0, 0xaa, 0xd0, + 0xb8, 0x96, 0x01, 0x0a, 0x92, 0xd0, 0x38, 0x0d, 0xa7, 0x7a, 0xb4, 0xd9, 0x78, 0x88, 0xd7, 0x60, + 0x3d, 0x6a, 0x24, 0x5f, 0x85, 0x59, 0x24, 0x5c, 0x72, 0xdb, 0x6d, 0x5a, 0x0f, 0x50, 0x74, 0x48, + 0xd3, 0x51, 0x8e, 0xdf, 0xb5, 0xf2, 0xef, 0xad, 0x87, 0x08, 0x56, 0xdc, 0x82, 0x94, 0xca, 0xc1, + 0xf8, 0x99, 0x2c, 0xcc, 0x09, 0x69, 0x64, 0xd2, 0xba, 0xeb, 0x35, 0x9e, 0xfd, 0xdd, 0x6f, 0x59, + 0xdb, 0xfd, 0x2e, 0x84, 0x91, 0xcd, 0x69, 0x1f, 0xd9, 0x67, 0xf3, 0xfb, 0xa5, 0x0c, 0x9c, 0xed, + 0x47, 0xc4, 0x7a, 0x27, 0xcc, 0xc6, 0x32, 0x9a, 0xc8, 0xba, 0xd2, 0x81, 0x19, 0x1c, 0xd0, 0xa5, + 0x3d, 0x5a, 0x7f, 0xe0, 0xaf, 0xb8, 0x7e, 0x80, 0xce, 0xb1, 0xd9, 0x1e, 0x17, 0x35, 0xaf, 0xa5, + 0x5e, 0xd4, 0x9c, 0xe4, 0xb3, 0xac, 0x8e, 0x3c, 0x78, 0xbe, 0x98, 0x07, 0xf4, 0xc0, 0x37, 0xd3, + 0x58, 0xa3, 0x93, 0x63, 0xa9, 0x1b, 0xec, 0x6d, 0x78, 0x74, 0x87, 0x7a, 0xb4, 0x5d, 0xa7, 0x9f, + 0x33, 0x27, 0x47, 0xfd, 0xe3, 0x06, 0xb2, 0x36, 0xfc, 0x5b, 0x13, 0x30, 0x9b, 0x46, 0xc6, 0xfa, + 0x45, 0x39, 0xe0, 0xc6, 0xdf, 0xc0, 0xf9, 0xa1, 0x0c, 0x8c, 0xd7, 0x68, 0xdd, 0x6d, 0x37, 0x6e, + 0xe2, 0x75, 0xb8, 0xe8, 0x1d, 0x8b, 0x6f, 0xf0, 0x0c, 0x6e, 0xed, 0xc4, 0xee, 0xc9, 0x3f, 0x39, + 0x5c, 0x78, 0x7f, 0xb0, 0x73, 0x65, 0xdd, 0xc5, 0xe8, 0xe4, 0x00, 0x73, 0xb4, 0x86, 0x55, 0xa0, + 0x65, 0x5b, 0xab, 0x94, 0x94, 0x61, 0x42, 0x2c, 0x57, 0x57, 0x4d, 0xc6, 0xc3, 0x83, 0xbf, 0x65, + 0x41, 0x22, 0x81, 0x9a, 0x46, 0x42, 0xae, 0x43, 0xee, 0xde, 0xe2, 0x4d, 0x31, 0x06, 0x32, 0xcb, + 0xed, 0xbd, 0xc5, 0x9b, 0x68, 0xba, 0x62, 0xc7, 0x81, 0x89, 0xee, 0xa2, 0x76, 0x43, 0x7d, 0x6f, + 0xf1, 0x26, 0xf9, 0x8b, 0x70, 0xa2, 0xe2, 0xf8, 0xa2, 0x0a, 0xee, 0x6e, 0xdb, 0xc0, 0x20, 0x93, + 0xe1, 0x1e, 0xb3, 0xf7, 0x4b, 0xa9, 0xb3, 0xf7, 0x85, 0x46, 0xc8, 0xc4, 0xe2, 0xbe, 0xbc, 0x8d, + 0x78, 0xd2, 0xa1, 0xf4, 0x7a, 0xc8, 0xc7, 0x30, 0x89, 0xa6, 0x57, 0xf4, 0x40, 0xc6, 0x3c, 0x8f, + 0x23, 0x3d, 0x6a, 0xfe, 0x42, 0x6a, 0xcd, 0xf3, 0x68, 0xc9, 0xb5, 0xd0, 0x8f, 0x19, 0x73, 0x42, + 0x6a, 0x27, 0x74, 0x8d, 0x33, 0xb9, 0x0d, 0x53, 0x42, 0x55, 0x5a, 0xdf, 0xd9, 0xdc, 0xa3, 0x15, + 0xfb, 0x40, 0x5c, 0x2e, 0xe3, 0xe9, 0x4b, 0xe8, 0x57, 0x96, 0xbb, 0x63, 0x05, 0x7b, 0xd4, 0x6a, + 0xd8, 0x9a, 0x52, 0x11, 0x23, 0x24, 0xdf, 0x0b, 0x63, 0xab, 0x6e, 0x9d, 0x69, 0xc9, 0x28, 0x19, + 0xf8, 0x7d, 0xf3, 0x87, 0xf8, 0xca, 0x0a, 0x07, 0xc7, 0x54, 0x9f, 0x4f, 0x0e, 0x17, 0xde, 0x3a, + 0xee, 0xa4, 0x51, 0x2a, 0x30, 0xd5, 0xda, 0xc8, 0x12, 0x14, 0xb6, 0xe8, 0x36, 0xfb, 0xda, 0xf8, + 0x0b, 0x0c, 0x12, 0x2c, 0xdc, 0x49, 0xc4, 0x2f, 0xcd, 0x9d, 0x44, 0xc0, 0x88, 0x07, 0xd3, 0xd8, + 0x3f, 0x1b, 0xb6, 0xef, 0xef, 0xbb, 0x5e, 0x03, 0x53, 0xed, 0xf6, 0xba, 0xca, 0x5e, 0x4c, 0xed, + 0xfc, 0xb3, 0xbc, 0xf3, 0x3b, 0x0a, 0x07, 0x55, 0xd9, 0x4b, 0xb0, 0x27, 0xdf, 0x84, 0x49, 0x93, + 0x7e, 0xab, 0xeb, 0x78, 0xf4, 0xee, 0xcd, 0x12, 0xae, 0xca, 0x71, 0x2d, 0x54, 0x47, 0x2f, 0xe4, + 0x1a, 0xa5, 0xc7, 0x61, 0xd2, 0x5a, 0x64, 0xb5, 0x76, 0x6c, 0xfd, 0xb6, 0x40, 0x25, 0x21, 0x1b, + 0x30, 0x56, 0xa1, 0x0f, 0x9d, 0x3a, 0xc5, 0x70, 0x02, 0xe1, 0xca, 0x17, 0xa6, 0x90, 0x8f, 0x4a, + 0xb8, 0xdd, 0xa4, 0x81, 0x00, 0x1e, 0x9c, 0xa0, 0x7b, 0x8b, 0x85, 0x88, 0xe4, 0x06, 0xe4, 0xaa, + 0x95, 0x0d, 0xe1, 0xc9, 0x27, 0x3d, 0xf4, 0xab, 0x8d, 0x0d, 0x99, 0x70, 0x1b, 0x9d, 0x3f, 0x9c, + 0x86, 0xe6, 0x07, 0x58, 0xad, 0x6c, 0x90, 0x1d, 0x98, 0xc0, 0x0e, 0x58, 0xa1, 0x36, 0xef, 0xdb, + 0xa9, 0x1e, 0x7d, 0x7b, 0x25, 0xb5, 0x6f, 0xe7, 0x78, 0xdf, 0xee, 0x09, 0x6a, 0x2d, 0x83, 0xb0, + 0xca, 0x96, 0xa9, 0x9f, 0x22, 0xab, 0xb9, 0xcc, 0x7b, 0xbb, 0xb9, 0x8a, 0x97, 0xdb, 0x42, 0xfd, + 0x94, 0x49, 0xd0, 0xc3, 0x44, 0xbc, 0x3d, 0x1d, 0x85, 0x93, 0x7c, 0xc8, 0x57, 0x20, 0xbf, 0xfe, + 0x20, 0xb0, 0xe7, 0xa6, 0xb5, 0x7e, 0x64, 0x20, 0xf9, 0xf9, 0x68, 0x31, 0x74, 0x1f, 0x68, 0x69, + 0x29, 0x90, 0x86, 0x2c, 0xc2, 0xc8, 0x46, 0xf5, 0x7e, 0xad, 0xe9, 0x06, 0x73, 0x24, 0x3c, 0xd3, + 0x90, 0x8e, 0xf3, 0xd0, 0xf2, 0x9b, 0xae, 0xfe, 0x32, 0x82, 0x44, 0x64, 0xc3, 0xb7, 0x62, 0x7b, + 0x8d, 0x7d, 0xdb, 0xc3, 0x38, 0xb0, 0x19, 0xad, 0x5a, 0xa5, 0x84, 0x0f, 0xdf, 0x9e, 0x00, 0xc4, + 0x82, 0xc3, 0x54, 0x16, 0xe4, 0x7b, 0xe0, 0xb4, 0xef, 0xec, 0xb6, 0xed, 0xa0, 0xeb, 0x51, 0xcb, + 0x6e, 0xee, 0xba, 0x9e, 0x13, 0xec, 0xb5, 0x2c, 0xbf, 0xeb, 0x04, 0x74, 0x6e, 0x56, 0x7b, 0x37, + 0xad, 0x26, 0xf1, 0x4a, 0x12, 0xad, 0xc6, 0xb0, 0xcc, 0x53, 0x7e, 0x7a, 0x81, 0xb0, 0x34, 0x4c, + 0x8b, 0x29, 0x28, 0xba, 0xed, 0xee, 0xcd, 0x92, 0xf1, 0x9f, 0x65, 0x50, 0x18, 0x93, 0x57, 0x30, + 0x2a, 0x3e, 0xbc, 0x3c, 0x46, 0x9b, 0xa9, 0xdd, 0x89, 0xe5, 0xa1, 0xe4, 0x28, 0xe4, 0x35, 0x18, + 0xbe, 0x69, 0xd7, 0x69, 0x20, 0x2f, 0x8d, 0x10, 0x79, 0x07, 0x21, 0xaa, 0x81, 0x95, 0xe3, 0x30, + 0x3d, 0x91, 0x4f, 0xd2, 0x52, 0xf4, 0xdc, 0xdd, 0x52, 0x49, 0xde, 0x19, 0xa1, 0x9e, 0x28, 0x26, + 0xb7, 0xf2, 0x1e, 0x5e, 0xcc, 0xbf, 0x32, 0x95, 0x83, 0xf1, 0xc7, 0x99, 0x48, 0xba, 0x90, 0x97, + 0x21, 0x6f, 0x6e, 0x84, 0xed, 0xe7, 0xf1, 0x56, 0xb1, 0xe6, 0x23, 0x02, 0xf9, 0x08, 0x4e, 0x28, + 0x7c, 0x12, 0xce, 0x9e, 0x2f, 0x61, 0x38, 0x90, 0xd2, 0x92, 0x74, 0x8f, 0xcf, 0x74, 0x1e, 0xa8, + 0x14, 0x47, 0x05, 0x15, 0xda, 0x76, 0x38, 0x6f, 0xe5, 0x63, 0x55, 0xde, 0x0d, 0x44, 0x88, 0x7f, + 0x6c, 0x1a, 0x07, 0x1e, 0x0d, 0x64, 0xfc, 0x7a, 0x46, 0x93, 0x1a, 0xe1, 0xbb, 0x62, 0x99, 0x23, + 0xde, 0x15, 0x7b, 0x13, 0xa0, 0xd4, 0x0d, 0xdc, 0xe5, 0xb6, 0xe7, 0x36, 0xb9, 0xe5, 0x42, 0xa4, + 0x62, 0x45, 0x7b, 0x2c, 0x45, 0xb0, 0x16, 0xb4, 0x10, 0x22, 0xa7, 0xfa, 0xc5, 0xe6, 0x3e, 0xad, + 0x5f, 0xac, 0xf1, 0xbb, 0x19, 0x6d, 0xdd, 0x30, 0x6d, 0x4f, 0x2e, 0x3d, 0xc5, 0x6d, 0x21, 0xb9, + 0xf4, 0xa2, 0x85, 0xf7, 0x6f, 0x66, 0xe0, 0x24, 0x77, 0x30, 0x5d, 0xeb, 0xb6, 0xb6, 0xa9, 0x77, + 0xdf, 0x6e, 0x3a, 0x0d, 0x1e, 0xf3, 0xc6, 0x15, 0xd9, 0x4b, 0xc9, 0x45, 0x98, 0x8e, 0xcf, 0x0f, + 0x87, 0xdc, 0xe1, 0xd5, 0x6a, 0x63, 0xa1, 0xf5, 0x30, 0x2c, 0x55, 0x0f, 0x87, 0xe9, 0xf4, 0xc6, + 0x2f, 0x67, 0xe0, 0x85, 0x23, 0x6b, 0x21, 0x57, 0x61, 0x44, 0xe6, 0xc0, 0xcd, 0x60, 0xc7, 0xa3, + 0xb3, 0x57, 0x32, 0xff, 0xad, 0xc4, 0x22, 0x5f, 0x83, 0x13, 0x2a, 0xab, 0x4d, 0xcf, 0x76, 0xd4, + 0x4c, 0xb3, 0x29, 0xad, 0x0e, 0x18, 0x4a, 0x5c, 0xeb, 0x4a, 0x67, 0x62, 0xfc, 0xbf, 0x19, 0xe5, + 0xa5, 0xc1, 0x67, 0x54, 0x17, 0xbf, 0xa1, 0xe9, 0xe2, 0x32, 0x1f, 0x51, 0xf8, 0x55, 0xac, 0x2c, + 0xf5, 0xfc, 0x34, 0xa5, 0x38, 0x2d, 0x22, 0xe0, 0x3b, 0x59, 0x18, 0xbb, 0xe7, 0x53, 0x8f, 0x5f, + 0x9e, 0x7e, 0xbe, 0xf2, 0xce, 0x84, 0xdf, 0x35, 0x50, 0x66, 0x90, 0x3f, 0xcc, 0xa0, 0x51, 0x5d, + 0xa5, 0x60, 0xbd, 0xa1, 0xbc, 0x2e, 0x82, 0xbd, 0x81, 0xef, 0x8a, 0x20, 0x94, 0x67, 0x0f, 0x59, + 0xd5, 0x1f, 0x1a, 0xc2, 0xd7, 0xa6, 0x56, 0xc9, 0xfb, 0x30, 0x74, 0x0f, 0x4d, 0x84, 0x7a, 0x7c, + 0x73, 0xc8, 0x1f, 0x0b, 0xb9, 0x90, 0xee, 0xb2, 0x3f, 0xd5, 0x3d, 0x06, 0xcb, 0x48, 0x0d, 0x46, + 0x96, 0x3c, 0x8a, 0xef, 0x06, 0xe6, 0x07, 0x8f, 0xce, 0xab, 0x73, 0x92, 0x78, 0x74, 0x9e, 0xe0, + 0x64, 0xfc, 0x74, 0x16, 0x48, 0xf4, 0x8d, 0x98, 0x24, 0xdf, 0x7f, 0x66, 0x07, 0xfd, 0x3d, 0x6d, + 0xd0, 0xcf, 0x25, 0x06, 0x9d, 0x7f, 0xde, 0x40, 0x63, 0xff, 0x9b, 0x19, 0x38, 0x99, 0x4e, 0x48, + 0x2e, 0xc0, 0xf0, 0xfa, 0xe6, 0x86, 0x0c, 0x91, 0x17, 0x9f, 0xe2, 0x76, 0xf0, 0xcc, 0x6f, 0x8a, + 0x22, 0xf2, 0x3a, 0x0c, 0x7f, 0x60, 0x2e, 0xb1, 0x7d, 0x48, 0xc9, 0xe6, 0xfa, 0x2d, 0xcf, 0xaa, + 0xeb, 0x5b, 0x91, 0x40, 0x52, 0xc7, 0x36, 0xf7, 0xd4, 0xc6, 0xf6, 0xc7, 0xb3, 0x30, 0x55, 0xaa, + 0xd7, 0xa9, 0xef, 0x33, 0x25, 0x87, 0xfa, 0xc1, 0x33, 0x3b, 0xb0, 0xe9, 0xc1, 0xef, 0xda, 0xb7, + 0x0d, 0x34, 0xaa, 0xbf, 0x9d, 0x81, 0x13, 0x92, 0xea, 0xa1, 0x43, 0xf7, 0x37, 0xf7, 0x3c, 0xea, + 0xef, 0xb9, 0xcd, 0xc6, 0xc0, 0x29, 0xa3, 0x99, 0xa2, 0x87, 0x79, 0x20, 0xd5, 0x9b, 0xf4, 0x1d, + 0x84, 0x68, 0x8a, 0x1e, 0xcf, 0x15, 0x79, 0x15, 0x46, 0x4a, 0x9d, 0x8e, 0xe7, 0x3e, 0xe4, 0xcb, + 0x7e, 0x42, 0x04, 0x2b, 0x72, 0x90, 0x16, 0xdc, 0xc8, 0x41, 0xac, 0x19, 0x15, 0xda, 0xe6, 0xd9, + 0x7a, 0x26, 0x78, 0x33, 0x1a, 0xb4, 0xad, 0xea, 0xc7, 0x58, 0x6e, 0xd4, 0x80, 0x6c, 0x78, 0x6e, + 0xcb, 0x0d, 0x68, 0x83, 0x7f, 0x0f, 0xc6, 0x84, 0x1e, 0x99, 0x66, 0x64, 0xd3, 0x09, 0x9a, 0x5a, + 0x9a, 0x91, 0x80, 0x01, 0x4c, 0x0e, 0x37, 0xfe, 0xef, 0x21, 0x18, 0x57, 0x7b, 0x87, 0x18, 0x3c, + 0x0f, 0xac, 0xeb, 0xa9, 0x81, 0xc9, 0x36, 0x42, 0x4c, 0x51, 0x12, 0x45, 0xf5, 0x67, 0x8f, 0x8c, + 0xea, 0xdf, 0x82, 0x89, 0x0d, 0xcf, 0xed, 0xb8, 0x3e, 0x6d, 0xf0, 0xf7, 0x64, 0xb9, 0x28, 0x9c, + 0x51, 0xce, 0x8f, 0x6c, 0x20, 0xf1, 0x0e, 0x12, 0xad, 0x27, 0x1d, 0x81, 0x6d, 0xc5, 0x5f, 0x9b, + 0xd5, 0xf9, 0x70, 0xf7, 0x06, 0xdb, 0x17, 0x49, 0xb9, 0x42, 0xf7, 0x06, 0x06, 0xd1, 0xdd, 0x1b, + 0x18, 0x44, 0x5d, 0x6b, 0x43, 0x4f, 0x6b, 0xad, 0x91, 0x9f, 0xce, 0xc0, 0x58, 0xa9, 0xdd, 0x16, + 0xd9, 0x02, 0x8e, 0x08, 0x94, 0xfc, 0x9a, 0xf0, 0x70, 0x78, 0xeb, 0x53, 0x79, 0x38, 0xa0, 0xde, + 0xe2, 0xa3, 0xa6, 0x1a, 0x55, 0xa8, 0x9e, 0xa0, 0x94, 0x76, 0x90, 0xb7, 0xa0, 0x18, 0x4e, 0xf2, + 0x6a, 0xbb, 0x41, 0x1f, 0x51, 0x7f, 0x6e, 0xe4, 0x7c, 0xee, 0xd2, 0x84, 0x48, 0xc7, 0xa7, 0x6a, + 0xa6, 0x71, 0x44, 0xb2, 0x09, 0x60, 0x87, 0xb3, 0x2b, 0xf6, 0x92, 0x4f, 0x72, 0xfa, 0x09, 0xed, + 0x19, 0x7f, 0xe3, 0x25, 0x92, 0xaa, 0x3d, 0x47, 0x7c, 0x48, 0x0b, 0xa6, 0xf8, 0x33, 0x3a, 0xf8, + 0xbc, 0x2e, 0x66, 0x9d, 0x85, 0x23, 0xc7, 0xe1, 0x65, 0x61, 0x07, 0x3b, 0x23, 0x1e, 0xe7, 0xc1, + 0x17, 0x7b, 0xad, 0x94, 0x14, 0xb4, 0x71, 0xde, 0x3c, 0xf9, 0xa1, 0x79, 0x2a, 0xd9, 0x5e, 0x3e, + 0xe9, 0x7f, 0x3c, 0x03, 0x27, 0xd5, 0x49, 0x5f, 0xeb, 0x6e, 0xb7, 0x1c, 0x3c, 0x0b, 0x92, 0x2b, + 0x30, 0x2a, 0xe6, 0x64, 0x78, 0x88, 0x4a, 0x26, 0xcf, 0x8d, 0x50, 0xc8, 0x32, 0x9b, 0x86, 0x8c, + 0x87, 0xd0, 0xba, 0x67, 0x62, 0x72, 0x8a, 0x15, 0x45, 0x4f, 0xb4, 0x79, 0xf8, 0x5b, 0x9f, 0x9f, + 0x0c, 0x62, 0xbc, 0x0b, 0xd3, 0xfa, 0x48, 0xd4, 0x68, 0x40, 0x2e, 0xc3, 0x88, 0x1c, 0xbe, 0x4c, + 0xfa, 0xf0, 0xc9, 0x72, 0x63, 0x0b, 0x48, 0x82, 0xde, 0x47, 0x57, 0x24, 0x1a, 0x48, 0x57, 0x39, + 0x79, 0x11, 0x98, 0x40, 0x0c, 0xdf, 0x2c, 0x1f, 0xd3, 0x7c, 0x63, 0x19, 0xa9, 0xf1, 0xc7, 0x93, + 0x30, 0x93, 0x22, 0x73, 0x8f, 0xd0, 0x89, 0x16, 0x74, 0x01, 0x31, 0x1a, 0xc6, 0x59, 0x4b, 0xb1, + 0xf0, 0xae, 0x7c, 0x5e, 0xba, 0x8f, 0x38, 0xe8, 0xf7, 0xe6, 0xf4, 0x67, 0xa1, 0x17, 0xa9, 0xa9, + 0x10, 0x86, 0x9e, 0x5a, 0x2a, 0x84, 0x32, 0x4c, 0x88, 0xaf, 0x12, 0xe2, 0x6a, 0x38, 0xb2, 0x14, + 0x7b, 0xbc, 0xc0, 0x4a, 0x88, 0x2d, 0x9d, 0x84, 0xf3, 0xf0, 0xdd, 0xe6, 0x43, 0x2a, 0x78, 0x8c, + 0xa8, 0x3c, 0xb0, 0x20, 0x95, 0x87, 0x42, 0x42, 0xfe, 0x23, 0x7c, 0x09, 0x04, 0x21, 0xaa, 0xcc, + 0x2a, 0xf4, 0x93, 0x59, 0x8d, 0xa7, 0x23, 0xb3, 0xce, 0xc9, 0x36, 0xa6, 0xcb, 0xae, 0x94, 0x66, + 0x91, 0x5f, 0xcc, 0xc0, 0x34, 0x8f, 0xc7, 0x57, 0x1b, 0xdb, 0x37, 0xc6, 0xba, 0xfe, 0x74, 0x1a, + 0x7b, 0x56, 0x64, 0xc0, 0x4f, 0x6f, 0x6b, 0xb2, 0x51, 0xe4, 0x7b, 0x00, 0xc2, 0x15, 0xe5, 0xcf, + 0x01, 0x2e, 0xb5, 0xb3, 0x29, 0x52, 0x20, 0x44, 0x8a, 0xb2, 0xf5, 0x06, 0x21, 0x9d, 0xf6, 0xfe, + 0x4b, 0x08, 0x25, 0x7f, 0x11, 0x66, 0xd9, 0x7a, 0x09, 0x21, 0x22, 0x7b, 0xc8, 0xdc, 0x18, 0xd6, + 0xf2, 0xc5, 0xde, 0x3a, 0xd1, 0x95, 0x34, 0x32, 0x9e, 0x5b, 0x30, 0x7a, 0x43, 0x2f, 0x50, 0x03, + 0x8d, 0x53, 0x2b, 0xc2, 0xa4, 0x3c, 0xd8, 0x7a, 0x9e, 0x51, 0xb7, 0x87, 0x7c, 0x3b, 0x2d, 0xd7, + 0x02, 0x97, 0x6f, 0xbe, 0x1e, 0x28, 0x87, 0x20, 0xf2, 0x01, 0x90, 0x30, 0x90, 0x9d, 0xc3, 0xa8, + 0xcc, 0xb6, 0xcb, 0xcd, 0xc6, 0x51, 0x40, 0xbc, 0x27, 0x8b, 0xd5, 0x49, 0x92, 0x24, 0x26, 0x14, + 0x66, 0xc5, 0x47, 0x33, 0xa8, 0x7c, 0xa6, 0xc3, 0x9f, 0x9b, 0xd4, 0x72, 0xb3, 0x44, 0x25, 0xd1, + 0x63, 0x7b, 0xca, 0x5b, 0x1f, 0x9a, 0xc9, 0x29, 0x8d, 0x1d, 0xb9, 0x01, 0xa3, 0x18, 0xad, 0xb6, + 0x22, 0x1d, 0xac, 0x84, 0xb3, 0x07, 0xc6, 0xb5, 0x59, 0x7b, 0xba, 0x9b, 0x54, 0x84, 0xca, 0x8e, + 0x03, 0x15, 0xef, 0xc0, 0xec, 0xb6, 0xd1, 0xb8, 0x2b, 0xec, 0x1d, 0x0d, 0xef, 0xc0, 0xf2, 0xba, + 0x7a, 0x38, 0x23, 0x22, 0x91, 0x6f, 0xc2, 0xd8, 0x5d, 0xfb, 0x91, 0xb4, 0xed, 0x0a, 0x03, 0xee, + 0x40, 0xcf, 0xc4, 0xb7, 0xec, 0x47, 0x56, 0xa3, 0x1b, 0xcf, 0x6c, 0xc8, 0x9f, 0x89, 0x57, 0x58, + 0x92, 0xaf, 0x03, 0x28, 0x16, 0x67, 0x72, 0x64, 0x05, 0x2f, 0xc8, 0x8c, 0x43, 0xa9, 0x96, 0x68, + 0xe4, 0xaf, 0x30, 0x8c, 0x69, 0x0e, 0xb3, 0x9f, 0x9d, 0xe6, 0x70, 0xe2, 0xb3, 0xd3, 0x1c, 0xe6, + 0xb7, 0xe1, 0x74, 0xcf, 0xa5, 0x93, 0x92, 0x08, 0xf2, 0xaa, 0x9e, 0x08, 0xf2, 0x74, 0xaf, 0x2d, + 0xd6, 0xd7, 0x13, 0x34, 0xcf, 0x14, 0x67, 0x7b, 0x6b, 0x27, 0xdf, 0xcd, 0xc6, 0xb6, 0x5c, 0x71, + 0xb0, 0xe0, 0x09, 0xfd, 0x7b, 0xe9, 0x24, 0x59, 0x7c, 0x7c, 0x8d, 0x6f, 0xca, 0xd9, 0xe8, 0x40, + 0x13, 0x7b, 0xaf, 0x96, 0x6f, 0xcf, 0x4f, 0xba, 0xfb, 0xbe, 0x0d, 0x93, 0xfc, 0xd9, 0xa5, 0x3b, + 0xf4, 0x60, 0xdf, 0xf5, 0x1a, 0xf2, 0x51, 0x52, 0xd4, 0xc1, 0x13, 0x8f, 0x1d, 0xc6, 0x70, 0x49, + 0x45, 0x06, 0x40, 0x0d, 0x61, 0xed, 0xa7, 0x53, 0xa5, 0x18, 0x43, 0xe8, 0x17, 0x1b, 0x45, 0xde, + 0x08, 0x15, 0x35, 0xea, 0xa9, 0x69, 0x9a, 0x3d, 0x09, 0x4c, 0xd1, 0xd7, 0xa8, 0x67, 0xfc, 0x7e, + 0x0e, 0x08, 0xaf, 0x69, 0xc9, 0xee, 0xd8, 0x18, 0x1e, 0xe8, 0x60, 0x9a, 0x8b, 0xa2, 0xc0, 0xb1, + 0xb7, 0x9b, 0x54, 0xcd, 0x11, 0x23, 0x1c, 0x5a, 0xc3, 0x32, 0x2b, 0x7e, 0xd0, 0x49, 0x10, 0xf6, + 0x10, 0x75, 0xd9, 0x27, 0x11, 0x75, 0xdf, 0x84, 0x33, 0xa5, 0x0e, 0xbe, 0xdf, 0x26, 0x6b, 0xb9, + 0xe9, 0x7a, 0x52, 0x48, 0x69, 0x81, 0x27, 0x76, 0x88, 0x96, 0x68, 0x69, 0x3f, 0x16, 0x8a, 0x9e, + 0xc2, 0xe6, 0x65, 0x27, 0x50, 0x03, 0x99, 0xa5, 0x9e, 0xd2, 0xc1, 0x92, 0x14, 0x3d, 0x85, 0x93, + 0x48, 0x1e, 0x8e, 0x27, 0xf5, 0x14, 0x7c, 0x98, 0x20, 0xe2, 0xe1, 0x78, 0xb4, 0x87, 0xae, 0x13, + 0x92, 0x90, 0xb7, 0x61, 0xac, 0xd4, 0x0d, 0x5c, 0xc1, 0x58, 0x78, 0x62, 0x47, 0x3e, 0xd3, 0xa2, + 0x29, 0xda, 0xd1, 0x27, 0x42, 0x37, 0xfe, 0x28, 0x07, 0xa7, 0x93, 0xc3, 0x2b, 0x4a, 0xc3, 0xf5, + 0x91, 0x39, 0x62, 0x7d, 0xa4, 0xcd, 0x06, 0x7e, 0x59, 0xf0, 0xd4, 0x66, 0x03, 0x7f, 0x06, 0xee, + 0x53, 0xce, 0x86, 0x1a, 0x8c, 0xa9, 0xfb, 0x5d, 0xfe, 0xd3, 0xee, 0x77, 0x2a, 0x17, 0x76, 0xa8, + 0xe7, 0xf1, 0xdb, 0x43, 0xd1, 0xd5, 0x51, 0x3c, 0x74, 0x9b, 0x63, 0x90, 0x7f, 0x03, 0xce, 0x73, + 0x99, 0x14, 0xff, 0xd8, 0xf2, 0x81, 0xe4, 0x28, 0x06, 0x6e, 0xf1, 0xf1, 0xe1, 0xc2, 0x15, 0x6e, + 0x2a, 0xb1, 0x12, 0xdd, 0x66, 0x6d, 0x1f, 0x58, 0xb2, 0x65, 0x4a, 0x25, 0x47, 0xf2, 0xc6, 0xb7, + 0xdf, 0x94, 0x77, 0xb9, 0x5e, 0x4f, 0x0b, 0x51, 0xe1, 0xb9, 0x4e, 0x39, 0x58, 0x8f, 0x4e, 0x91, + 0xe6, 0xb0, 0x6c, 0xaa, 0x39, 0x4c, 0xda, 0x53, 0x72, 0xa9, 0xf6, 0x94, 0x0a, 0x4c, 0xd5, 0xba, + 0xdb, 0xb2, 0x6e, 0x44, 0xcc, 0x6b, 0x51, 0x76, 0x69, 0x1f, 0x14, 0x27, 0x31, 0x7e, 0x24, 0x0b, + 0xe3, 0x1b, 0xcd, 0xee, 0xae, 0xd3, 0xae, 0xd8, 0x81, 0xfd, 0xcc, 0x5a, 0xe8, 0xde, 0xd4, 0x2c, + 0x74, 0x61, 0x24, 0x56, 0xf8, 0x61, 0x03, 0x99, 0xe7, 0x7e, 0x2a, 0x03, 0x53, 0x11, 0x09, 0xdf, + 0x67, 0x57, 0x20, 0xcf, 0x7e, 0x88, 0x73, 0xeb, 0xf9, 0x04, 0x63, 0xfe, 0x18, 0x4c, 0xf8, 0x97, + 0xb0, 0x99, 0xe9, 0x2f, 0x2d, 0x20, 0x87, 0xf9, 0x2f, 0xc1, 0x68, 0xc4, 0xf6, 0x38, 0x8f, 0xc0, + 0xfc, 0x4a, 0x06, 0x8a, 0xf1, 0x2f, 0x21, 0x77, 0x60, 0x84, 0x71, 0x72, 0xa8, 0x3c, 0x52, 0xbf, + 0xd8, 0xe3, 0x9b, 0xaf, 0x08, 0x34, 0xde, 0x3c, 0xec, 0x7c, 0xca, 0x21, 0xa6, 0xe4, 0x30, 0x6f, + 0xc2, 0xb8, 0x8a, 0x95, 0xd2, 0xba, 0xd7, 0x74, 0xe5, 0xe2, 0x64, 0x7a, 0x3f, 0x68, 0x4f, 0xd7, + 0x68, 0xad, 0x16, 0x7a, 0xc3, 0x45, 0x6d, 0x72, 0x61, 0x5f, 0xc5, 0xe6, 0x0d, 0x9f, 0x66, 0x8b, + 0x51, 0xfa, 0x65, 0x75, 0x9e, 0xa5, 0x4c, 0xe8, 0x10, 0x8f, 0xbc, 0x06, 0xc3, 0xbc, 0x3e, 0xf5, + 0x09, 0x87, 0x0e, 0x42, 0x54, 0x15, 0x97, 0xe3, 0x18, 0x7f, 0x33, 0x07, 0x27, 0xa3, 0xe6, 0xdd, + 0xeb, 0x34, 0xec, 0x80, 0x6e, 0xd8, 0x9e, 0xdd, 0xf2, 0x8f, 0x58, 0x01, 0x97, 0x12, 0x4d, 0xc3, + 0x94, 0xfe, 0xb2, 0x69, 0x4a, 0x83, 0x8c, 0x58, 0x83, 0xd0, 0x7c, 0xc9, 0x1b, 0x24, 0x9b, 0x41, + 0xee, 0x40, 0xae, 0x46, 0x03, 0x21, 0x36, 0x2f, 0x26, 0x7a, 0x55, 0x6d, 0xd7, 0x95, 0x1a, 0x0d, + 0xf8, 0x20, 0xf2, 0xbc, 0x22, 0x54, 0xcb, 0xeb, 0x58, 0xa3, 0x01, 0xd9, 0x82, 0xe1, 0xe5, 0x47, + 0x1d, 0x5a, 0x0f, 0xc4, 0x13, 0x46, 0x97, 0xfb, 0xf3, 0xe3, 0xb8, 0xca, 0x0b, 0x46, 0x14, 0x01, + 0x6a, 0x67, 0x71, 0x94, 0xf9, 0x1b, 0x50, 0x90, 0x95, 0x1f, 0x67, 0xe6, 0xce, 0xbf, 0x09, 0x63, + 0x4a, 0x25, 0xc7, 0x9a, 0xf4, 0x3f, 0xc7, 0xe4, 0xaa, 0xdb, 0x94, 0xaf, 0x1e, 0x2d, 0x27, 0xd4, + 0xbc, 0x4c, 0x14, 0x0f, 0xcc, 0xd5, 0x3c, 0xeb, 0x81, 0x28, 0xea, 0xa3, 0xef, 0x55, 0x61, 0xaa, + 0xf6, 0xc0, 0xe9, 0x44, 0xe9, 0xf5, 0xb4, 0xcd, 0x14, 0xf3, 0xd1, 0x8b, 0x33, 0x77, 0x7c, 0x33, + 0x8d, 0xd3, 0x19, 0x7f, 0x9a, 0x81, 0x61, 0xf6, 0xd7, 0xfd, 0x1b, 0xcf, 0xa8, 0xc8, 0xbc, 0xae, + 0x89, 0xcc, 0x69, 0x25, 0xc3, 0x2d, 0x0a, 0x8e, 0x1b, 0x47, 0x08, 0xcb, 0x43, 0x31, 0x40, 0x1c, + 0x99, 0xdc, 0x82, 0x11, 0xe1, 0xd5, 0x23, 0xdc, 0xaf, 0xd5, 0x94, 0xb9, 0xd2, 0xdf, 0x27, 0x3c, + 0x9c, 0xbb, 0x9d, 0xb8, 0x35, 0x43, 0x52, 0x33, 0x95, 0x5c, 0x26, 0x3a, 0xd4, 0xde, 0xca, 0x73, + 0x31, 0xb6, 0x8d, 0x27, 0x7c, 0x55, 0x5e, 0xb7, 0xec, 0x91, 0x34, 0xa0, 0x24, 0x2e, 0x32, 0x72, + 0xfd, 0x98, 0x9c, 0x94, 0x4f, 0x89, 0xa5, 0xde, 0x71, 0xfc, 0xc1, 0x0c, 0x4f, 0x93, 0x2a, 0x1b, + 0xf6, 0x0e, 0x8c, 0xdf, 0x74, 0xbd, 0x7d, 0xdb, 0xe3, 0xc9, 0xef, 0x84, 0xe7, 0x00, 0x3b, 0x3a, + 0x4e, 0xec, 0x70, 0x38, 0x4f, 0x9f, 0xf7, 0xc9, 0xe1, 0x42, 0xbe, 0xec, 0xba, 0x4d, 0x53, 0x43, + 0x27, 0xeb, 0x30, 0x71, 0xd7, 0x7e, 0xa4, 0x1c, 0x7a, 0x79, 0xb0, 0xca, 0x65, 0x36, 0x81, 0xd9, + 0xa9, 0xf9, 0x68, 0x17, 0x2b, 0x9d, 0x9e, 0x38, 0x30, 0xb9, 0xe1, 0x7a, 0x81, 0xa8, 0xc4, 0x69, + 0xef, 0x8a, 0x8f, 0x4d, 0x3a, 0x89, 0x5d, 0x4d, 0x75, 0x12, 0x3b, 0xdd, 0x71, 0xbd, 0xc0, 0xda, + 0x09, 0xc9, 0xb5, 0x84, 0x3c, 0x1a, 0x63, 0xf2, 0x0e, 0x4c, 0x2b, 0x09, 0xc7, 0x6e, 0xba, 0x5e, + 0xcb, 0x96, 0x4a, 0x39, 0xda, 0x81, 0xd1, 0xdf, 0x64, 0x07, 0xc1, 0x66, 0x12, 0x93, 0x7c, 0x94, + 0x16, 0xfe, 0x33, 0x14, 0x79, 0x99, 0xa5, 0x84, 0xff, 0xf4, 0xf2, 0x32, 0x4b, 0x06, 0x02, 0xed, + 0xf6, 0xf3, 0x42, 0x2d, 0x94, 0xaf, 0x89, 0xe3, 0xf7, 0xd1, 0x5e, 0xa6, 0xe1, 0xb8, 0xf5, 0xf0, + 0x36, 0x5d, 0x84, 0x5c, 0x79, 0xe3, 0x26, 0xde, 0x5e, 0x48, 0x47, 0x9b, 0xf6, 0x9e, 0xdd, 0xae, + 0xa3, 0xb2, 0x2c, 0x3c, 0xbf, 0x55, 0x89, 0x5c, 0xde, 0xb8, 0x49, 0x6c, 0x98, 0xd9, 0xa0, 0x5e, + 0xcb, 0x09, 0xbe, 0x7a, 0xed, 0x9a, 0x32, 0x50, 0x05, 0x6c, 0xda, 0x55, 0xd1, 0xb4, 0x85, 0x0e, + 0xa2, 0x58, 0x8f, 0xae, 0x5d, 0x4b, 0x1d, 0x8e, 0xb0, 0x61, 0x69, 0xbc, 0x98, 0x64, 0xbc, 0x6b, + 0x3f, 0x8a, 0x1c, 0xf6, 0x7d, 0x11, 0x48, 0x79, 0x4e, 0x4e, 0xac, 0xc8, 0xd9, 0x5f, 0x93, 0x8c, + 0x3a, 0x11, 0x3b, 0xeb, 0x44, 0xd3, 0xcb, 0x17, 0x21, 0x28, 0xf3, 0xd2, 0xa4, 0x23, 0xa3, 0x6d, + 0x55, 0x85, 0x5d, 0x41, 0x27, 0xf7, 0xc2, 0x13, 0x1b, 0x3f, 0xf1, 0x88, 0x87, 0xb2, 0xae, 0xaa, + 0x27, 0x36, 0x6e, 0x48, 0xd1, 0x3e, 0x6b, 0x2a, 0x3c, 0xe6, 0xf3, 0x08, 0x06, 0x53, 0xe7, 0x92, + 0x3c, 0x08, 0x8e, 0x1f, 0xff, 0x20, 0x48, 0x21, 0xbf, 0xea, 0xd6, 0x1f, 0x88, 0x2c, 0x42, 0x1f, + 0xb0, 0xe5, 0xde, 0x74, 0xeb, 0x0f, 0x9e, 0x9e, 0x77, 0x2d, 0xb2, 0x27, 0x6b, 0xac, 0xa9, 0x6c, + 0x16, 0x88, 0x3e, 0x11, 0x1e, 0x9b, 0xb3, 0xe1, 0x49, 0x48, 0x29, 0xe3, 0x8a, 0x0f, 0x9f, 0x34, + 0xb2, 0x6b, 0x4d, 0x9d, 0x9c, 0x50, 0x28, 0x56, 0xa8, 0xff, 0x20, 0x70, 0x3b, 0x4b, 0x4d, 0xa7, + 0xb3, 0xed, 0xda, 0x5e, 0x03, 0x6d, 0x77, 0x69, 0xeb, 0xfb, 0xe5, 0xd4, 0xf5, 0x3d, 0xdd, 0xe0, + 0xf4, 0x56, 0x5d, 0x32, 0x30, 0x13, 0x2c, 0xc9, 0x47, 0x30, 0xc9, 0x26, 0xf7, 0xf2, 0xa3, 0x80, + 0xb6, 0xf9, 0xc8, 0x4f, 0xa3, 0xea, 0x30, 0xab, 0xa4, 0x16, 0x0f, 0x0b, 0xf9, 0x9c, 0xc2, 0xc5, + 0x4e, 0x43, 0x02, 0x2d, 0x03, 0x93, 0xc6, 0x8a, 0x34, 0x60, 0xee, 0xae, 0xfd, 0x48, 0x79, 0xde, + 0x4b, 0x99, 0xa4, 0x04, 0x27, 0x18, 0xbe, 0xc8, 0xce, 0x26, 0x58, 0x94, 0xfc, 0xb3, 0xc7, 0x7c, + 0xed, 0xc9, 0x89, 0x7c, 0x2f, 0x9c, 0x12, 0x9f, 0x55, 0xc1, 0xf7, 0x36, 0x5c, 0xef, 0xa0, 0xb6, + 0x67, 0x63, 0xac, 0xce, 0xcc, 0xf1, 0x04, 0xa2, 0xec, 0xb0, 0x86, 0xe4, 0x63, 0xf9, 0x9c, 0x91, + 0xd9, 0xab, 0x06, 0xf2, 0x31, 0x4c, 0xf2, 0x2b, 0x9b, 0x15, 0xd7, 0x0f, 0xf0, 0x40, 0x3f, 0x7b, + 0x3c, 0x17, 0x74, 0x7e, 0x0f, 0xc4, 0x83, 0x36, 0x62, 0x06, 0x80, 0x18, 0x67, 0xf2, 0x16, 0x8c, + 0x6d, 0x38, 0x6d, 0x9e, 0x23, 0xad, 0xba, 0x81, 0xa6, 0x47, 0xb1, 0xff, 0x74, 0x9c, 0xb6, 0x25, + 0x4f, 0xd5, 0x9d, 0x50, 0x5c, 0xa8, 0xd8, 0x64, 0x0b, 0xc6, 0x6a, 0xb5, 0x95, 0x9b, 0x0e, 0xdb, + 0x00, 0x3b, 0x07, 0x73, 0x27, 0x7b, 0xb4, 0xf2, 0x42, 0x6a, 0x2b, 0x27, 0x7c, 0x7f, 0x0f, 0x9f, + 0x4c, 0xb6, 0xea, 0x6e, 0xe7, 0xc0, 0x54, 0x39, 0xa5, 0xb8, 0x65, 0x9f, 0x7a, 0xca, 0x6e, 0xd9, + 0x55, 0x98, 0x52, 0x1c, 0x2c, 0xd1, 0xb9, 0x72, 0x2e, 0x4a, 0x09, 0xa6, 0xba, 0x61, 0xc7, 0x43, + 0x06, 0xe3, 0x74, 0xd2, 0x1f, 0xfb, 0xf4, 0x71, 0xfd, 0xb1, 0x1d, 0x98, 0xe6, 0x83, 0x21, 0xe6, + 0x01, 0x8e, 0xf4, 0x7c, 0x8f, 0x3e, 0xbc, 0x9c, 0xda, 0x87, 0x33, 0x62, 0xa4, 0xe5, 0x24, 0xc3, + 0x2b, 0xca, 0x24, 0x57, 0xb2, 0x03, 0x44, 0x00, 0xc5, 0x83, 0xcd, 0x58, 0xd7, 0x99, 0x1e, 0x75, + 0xbd, 0x98, 0x5a, 0xd7, 0xa4, 0xac, 0x6b, 0x9b, 0x57, 0x93, 0xc2, 0x91, 0xb4, 0x65, 0x3d, 0x72, + 0x7e, 0x61, 0xc7, 0x9e, 0xd5, 0xec, 0xa0, 0x49, 0x04, 0x9e, 0xa0, 0x34, 0x3e, 0x69, 0xe3, 0xfd, + 0x9e, 0xc2, 0x99, 0x3c, 0x82, 0x93, 0xc9, 0x56, 0x60, 0x9d, 0xe7, 0xb0, 0xce, 0x73, 0x5a, 0x9d, + 0x71, 0x24, 0x3e, 0x6f, 0xf4, 0xcf, 0x8a, 0xd7, 0xda, 0x83, 0xff, 0xed, 0x7c, 0x61, 0xa2, 0x38, + 0x99, 0xe6, 0x69, 0xfd, 0x1b, 0xd9, 0x98, 0xd0, 0x26, 0x55, 0x18, 0x11, 0x63, 0x21, 0xb4, 0xd8, + 0x64, 0x8f, 0x9f, 0x4b, 0xed, 0xf1, 0x11, 0x31, 0xac, 0xa6, 0xa4, 0x27, 0xfb, 0x8c, 0x15, 0xba, + 0xc4, 0x0b, 0xb5, 0xff, 0xeb, 0x5c, 0x26, 0x23, 0x48, 0xdb, 0x7d, 0x2a, 0xc7, 0x0f, 0x08, 0xd2, + 0xe3, 0xcd, 0x70, 0x1b, 0x92, 0xb5, 0x91, 0x07, 0xfc, 0x15, 0x82, 0x5c, 0x18, 0x55, 0xa2, 0x3f, + 0x39, 0xf0, 0xd4, 0x2a, 0x64, 0xb5, 0x18, 0xbf, 0x9e, 0x81, 0x09, 0x4d, 0xea, 0x93, 0x1b, 0x4a, + 0xc8, 0x54, 0x14, 0xf1, 0xab, 0xe1, 0xa0, 0x20, 0x88, 0x07, 0x53, 0xdd, 0x10, 0x7e, 0xd3, 0xd9, + 0xde, 0x74, 0xa9, 0xef, 0x96, 0xf7, 0x37, 0x92, 0x85, 0x6f, 0x1b, 0xe5, 0x7b, 0xbc, 0x6d, 0xf4, + 0xab, 0x67, 0x60, 0x52, 0x3f, 0x16, 0x90, 0xd7, 0x60, 0x18, 0x6d, 0x8b, 0xf2, 0x8c, 0xc9, 0x5f, + 0xf7, 0x45, 0x88, 0xf6, 0xba, 0x2f, 0x42, 0xc8, 0x4b, 0x00, 0xa1, 0x03, 0xab, 0xb4, 0xac, 0x0f, + 0x3d, 0x3e, 0x5c, 0xc8, 0xbc, 0x6e, 0x2a, 0x05, 0xe4, 0x1b, 0x00, 0x6b, 0x6e, 0x83, 0x86, 0xef, + 0xaf, 0xf5, 0xb9, 0x3d, 0x7e, 0x39, 0x91, 0xa1, 0xfb, 0x44, 0xdb, 0x6d, 0xd0, 0x64, 0x3a, 0x6e, + 0x85, 0x23, 0xf9, 0x0a, 0x0c, 0x99, 0x5d, 0x76, 0x9e, 0xe5, 0xa6, 0x84, 0x31, 0x29, 0x7d, 0xbb, + 0x4d, 0x1a, 0x1d, 0x96, 0xbc, 0x6e, 0xdc, 0x31, 0x8a, 0x01, 0xc8, 0x7b, 0x3c, 0x73, 0xb7, 0x48, + 0xb4, 0x35, 0x14, 0xdd, 0x35, 0x28, 0xbb, 0x72, 0x22, 0xd5, 0x96, 0x42, 0x42, 0xd6, 0x61, 0x44, + 0x35, 0x92, 0x2b, 0xb1, 0xb7, 0xea, 0x45, 0x8a, 0x72, 0xf2, 0x12, 0x0f, 0xb7, 0xc5, 0xed, 0xe7, + 0x92, 0x0b, 0x79, 0x1b, 0x46, 0x19, 0x7b, 0xb6, 0x84, 0x7d, 0xa1, 0x71, 0xe3, 0x8d, 0x82, 0xd2, + 0x20, 0x26, 0x01, 0xb4, 0x74, 0x58, 0x21, 0x01, 0xf9, 0x08, 0xdf, 0x26, 0x13, 0x5d, 0xdd, 0xd7, + 0xab, 0xe0, 0x62, 0xa2, 0xab, 0xf1, 0xb1, 0xb2, 0xe4, 0xb3, 0xb5, 0x21, 0x3f, 0xb2, 0x1b, 0xa6, + 0x69, 0x1a, 0x24, 0xdb, 0xfa, 0x2b, 0x89, 0x0a, 0xe6, 0x64, 0xe6, 0xa1, 0xe4, 0x3b, 0x7a, 0x1a, + 0x5f, 0xd2, 0x81, 0x62, 0xa4, 0xf0, 0x88, 0xba, 0xa0, 0x5f, 0x5d, 0xaf, 0x27, 0xea, 0x52, 0x07, + 0x30, 0x51, 0x5d, 0x82, 0x3b, 0x69, 0xc0, 0xa4, 0x14, 0x9e, 0xa2, 0xbe, 0xb1, 0x7e, 0xf5, 0xbd, + 0x94, 0xa8, 0x6f, 0xa6, 0xb1, 0x9d, 0xac, 0x27, 0xc6, 0x93, 0xbc, 0x0d, 0x13, 0x12, 0x82, 0xeb, + 0x43, 0xbc, 0x8f, 0x8b, 0x56, 0x91, 0xc6, 0x36, 0xba, 0xcc, 0xeb, 0xaf, 0x0b, 0xaa, 0xc8, 0x2a, + 0x35, 0x9f, 0x1d, 0x13, 0x1a, 0x75, 0x7c, 0x56, 0xe8, 0xc8, 0xe4, 0x43, 0x18, 0xab, 0xb6, 0xd8, + 0x87, 0xb8, 0x6d, 0x3b, 0xa0, 0x22, 0x2e, 0x4b, 0x7a, 0x48, 0x28, 0x25, 0xca, 0x54, 0xe5, 0xef, + 0xf5, 0x45, 0x45, 0xda, 0x7b, 0x7d, 0x11, 0x98, 0x75, 0x1e, 0xbf, 0x15, 0x11, 0x73, 0x58, 0xc6, + 0x6c, 0x9d, 0x4b, 0xf1, 0x52, 0x50, 0xd8, 0x8b, 0x84, 0x76, 0x0c, 0x2a, 0x6f, 0x25, 0x62, 0x09, + 0xed, 0x54, 0x9e, 0xe4, 0x1d, 0x18, 0x13, 0x0f, 0x51, 0x94, 0xcc, 0x35, 0x7f, 0xae, 0x88, 0x1f, + 0x8f, 0x91, 0xe6, 0xf2, 0xcd, 0x0a, 0xcb, 0xf6, 0x62, 0xee, 0x78, 0x11, 0x3e, 0xf9, 0x2a, 0xcc, + 0x6e, 0x39, 0xed, 0x86, 0xbb, 0xef, 0x8b, 0x6d, 0x4a, 0x08, 0xba, 0xe9, 0x28, 0x18, 0x66, 0x9f, + 0x97, 0x87, 0x7a, 0x4a, 0x42, 0xf0, 0xa5, 0x72, 0x20, 0x7f, 0x21, 0xc1, 0x99, 0xcf, 0x20, 0xd2, + 0x6f, 0x06, 0x2d, 0x26, 0x66, 0x50, 0xb2, 0xfa, 0xf8, 0x74, 0x4a, 0xad, 0x86, 0xb8, 0x40, 0xf4, + 0xfd, 0xfd, 0xb6, 0xeb, 0xb4, 0xe7, 0x66, 0x50, 0x16, 0x9e, 0x89, 0xc7, 0x76, 0x23, 0xde, 0x86, + 0xdb, 0x74, 0xea, 0x07, 0xfc, 0x6d, 0xfc, 0xb8, 0x3e, 0xfa, 0xb1, 0xab, 0xd9, 0x8c, 0x53, 0x58, + 0x93, 0x0f, 0x61, 0x9c, 0xfd, 0x1f, 0x1e, 0x98, 0x67, 0x35, 0xbf, 0x36, 0x05, 0x53, 0xd4, 0x83, + 0x63, 0x84, 0x2f, 0x65, 0xa4, 0x9c, 0xa5, 0x35, 0x56, 0xe4, 0x4d, 0x00, 0xa6, 0x39, 0x09, 0x71, + 0x7c, 0x22, 0xca, 0x1f, 0x88, 0xfa, 0x56, 0x52, 0x10, 0x47, 0xc8, 0xec, 0x14, 0xcf, 0x7e, 0xd5, + 0xba, 0x0d, 0x97, 0xad, 0x8d, 0x93, 0x48, 0xcb, 0xc3, 0xdd, 0x18, 0xad, 0xcf, 0xe1, 0x5a, 0xb8, + 0x5b, 0x84, 0x4e, 0x56, 0x60, 0x0a, 0xf3, 0x3c, 0x56, 0x1b, 0xb4, 0x1d, 0xe0, 0x6d, 0xe5, 0xdc, + 0x29, 0xe5, 0x36, 0x97, 0x15, 0x59, 0x4e, 0x58, 0xa6, 0xea, 0xd9, 0x31, 0x32, 0xe2, 0xc3, 0x4c, + 0x24, 0x5d, 0xa2, 0xbb, 0xe1, 0x39, 0xec, 0x24, 0xa9, 0x5d, 0x26, 0x31, 0xb8, 0x3c, 0x66, 0x23, + 0xa2, 0x08, 0x2e, 0x69, 0x59, 0x57, 0x2b, 0x4c, 0xe3, 0x4e, 0x4c, 0x20, 0xb7, 0x96, 0x36, 0xe2, + 0x89, 0x10, 0x4f, 0xe3, 0x17, 0xe0, 0x30, 0xef, 0xd6, 0xa3, 0x97, 0x21, 0x53, 0x92, 0x21, 0xa6, + 0x50, 0x93, 0x6f, 0xc3, 0x09, 0x29, 0x41, 0x44, 0x91, 0x98, 0xd7, 0xf3, 0xc7, 0x94, 0xc4, 0x8d, + 0xed, 0xb0, 0xea, 0xc4, 0x94, 0x4e, 0xaf, 0x82, 0xd8, 0x30, 0x86, 0xc3, 0x2a, 0x6a, 0x3c, 0xd3, + 0xaf, 0xc6, 0x4b, 0x89, 0x1a, 0x4f, 0xe2, 0x44, 0x49, 0x56, 0xa6, 0xf2, 0x24, 0x65, 0x98, 0x10, + 0xeb, 0x48, 0xcc, 0xb6, 0xb3, 0xd8, 0x5b, 0x68, 0x60, 0x91, 0x2b, 0x30, 0x31, 0xe1, 0x74, 0x12, + 0x55, 0x22, 0x73, 0x8b, 0xfa, 0x39, 0x4d, 0x22, 0xc7, 0x0d, 0xe9, 0x3a, 0x32, 0x93, 0x48, 0x91, + 0x16, 0xb3, 0xfc, 0xa8, 0xe3, 0x09, 0xf3, 0xc9, 0xf3, 0xd1, 0xfb, 0x00, 0x8a, 0xf2, 0x63, 0xd1, + 0x10, 0x43, 0x15, 0x09, 0x69, 0x1c, 0xc8, 0x3d, 0x98, 0x09, 0x77, 0x6d, 0x85, 0xf1, 0x42, 0xf4, + 0xce, 0x42, 0xb4, 0xd5, 0xa7, 0xf3, 0x4d, 0xa3, 0x27, 0x36, 0x9c, 0xd2, 0xf6, 0x69, 0x85, 0xf5, + 0x79, 0x64, 0x8d, 0x2f, 0x91, 0xea, 0x9b, 0x7c, 0x3a, 0xfb, 0x5e, 0x7c, 0xc8, 0xc7, 0x30, 0x1f, + 0xdf, 0x9b, 0x95, 0x5a, 0x5e, 0xc0, 0x5a, 0x5e, 0x79, 0x7c, 0xb8, 0x70, 0x31, 0xb1, 0xbd, 0xa7, + 0x57, 0xd4, 0x87, 0x1b, 0xf9, 0x06, 0xcc, 0xe9, 0xfb, 0xb3, 0x52, 0x93, 0x81, 0x35, 0xe1, 0xd2, + 0x09, 0x37, 0xf6, 0xf4, 0x1a, 0x7a, 0xf2, 0x20, 0x01, 0x2c, 0xa4, 0xce, 0x6e, 0xa5, 0x9a, 0x0b, + 0xd1, 0x07, 0x25, 0x56, 0x49, 0x7a, 0x75, 0x47, 0xb1, 0x24, 0xfb, 0xf0, 0x7c, 0xda, 0x36, 0xa1, + 0x54, 0xfa, 0x62, 0x68, 0xa0, 0x7c, 0x35, 0x7d, 0xcb, 0x49, 0xaf, 0xf9, 0x08, 0xb6, 0xe4, 0x23, + 0x38, 0xa1, 0xac, 0x2f, 0xa5, 0xbe, 0x97, 0xb0, 0x3e, 0x0c, 0x65, 0x55, 0x17, 0x66, 0x7a, 0x2d, + 0xe9, 0x3c, 0x48, 0x0b, 0x66, 0xe4, 0x87, 0xa3, 0x25, 0x58, 0x6c, 0x3d, 0x17, 0x35, 0xa9, 0x9a, + 0xc4, 0x50, 0x9e, 0x70, 0xde, 0xb6, 0x3a, 0x11, 0xa1, 0x3a, 0xd3, 0x53, 0xf8, 0x92, 0x15, 0x18, + 0xae, 0x6d, 0x54, 0x6f, 0xde, 0x5c, 0x9e, 0x7b, 0x19, 0x6b, 0x90, 0x71, 0x2f, 0x1c, 0xa8, 0x1d, + 0x9a, 0x84, 0xbb, 0x55, 0xc7, 0xd9, 0xd9, 0xd1, 0xc2, 0x8b, 0x38, 0xea, 0xed, 0x7c, 0xe1, 0x52, + 0xf1, 0xf2, 0xed, 0x7c, 0xe1, 0x72, 0xf1, 0x15, 0xf3, 0x6c, 0xfa, 0xeb, 0xbb, 0xfc, 0x63, 0xcd, + 0x8b, 0xfd, 0x4a, 0xa3, 0xae, 0x30, 0x7e, 0x2e, 0x03, 0x33, 0x29, 0xed, 0x20, 0x17, 0x21, 0x8f, + 0x0f, 0x17, 0x28, 0x17, 0xcc, 0xb1, 0x07, 0x0b, 0xb0, 0x9c, 0x7c, 0x01, 0x46, 0x2a, 0x6b, 0xb5, + 0x5a, 0x69, 0x4d, 0x1e, 0xd9, 0xb8, 0xb8, 0x6a, 0xfb, 0x96, 0x6f, 0xeb, 0xf7, 0x52, 0x02, 0x8d, + 0xbc, 0x0e, 0xc3, 0xd5, 0x0d, 0x24, 0xe0, 0x1e, 0x4e, 0x78, 0x84, 0x71, 0x3a, 0x71, 0x7c, 0x81, + 0x64, 0xfc, 0x68, 0x06, 0x48, 0xb2, 0x53, 0xc9, 0x35, 0x18, 0x53, 0x87, 0x8e, 0x1f, 0x30, 0xf1, + 0x0e, 0x45, 0x19, 0x18, 0x53, 0xc5, 0x21, 0x15, 0x18, 0xc2, 0x87, 0x96, 0xc2, 0x0b, 0xb1, 0xd4, + 0x0d, 0xe0, 0x54, 0x62, 0x03, 0x18, 0xc2, 0x67, 0x9c, 0x4c, 0x4e, 0x6c, 0xfc, 0x76, 0x06, 0x48, + 0x72, 0xd3, 0x1c, 0xf8, 0x42, 0xfe, 0x0d, 0x25, 0x42, 0x55, 0x4d, 0x4d, 0x1e, 0xbe, 0x2b, 0xa1, + 0x1e, 0x96, 0xa2, 0x58, 0xd6, 0x8b, 0xda, 0xe1, 0xbc, 0x77, 0x58, 0xd3, 0x65, 0x18, 0xba, 0x4f, + 0xbd, 0x6d, 0xe9, 0xbc, 0x87, 0x0e, 0x3f, 0x0f, 0x19, 0x40, 0x3d, 0xac, 0x22, 0x86, 0xf1, 0x47, + 0x19, 0x98, 0x4d, 0xd3, 0xe4, 0x8e, 0x88, 0x3e, 0x32, 0x62, 0x81, 0x53, 0x78, 0x19, 0xcf, 0xbd, + 0x81, 0xc2, 0x70, 0xa9, 0x05, 0x18, 0x62, 0x1f, 0x2b, 0x47, 0x18, 0x8d, 0x05, 0xac, 0x37, 0x7c, + 0x93, 0xc3, 0x19, 0x02, 0xcf, 0xa8, 0x94, 0xc7, 0xc4, 0x59, 0x88, 0x80, 0x8a, 0x82, 0xc9, 0xe1, + 0x0c, 0xe1, 0xae, 0xdb, 0x08, 0xdf, 0x18, 0x45, 0x84, 0x16, 0x03, 0x98, 0x1c, 0x4e, 0x2e, 0xc2, + 0xc8, 0x7a, 0x7b, 0x95, 0xda, 0x0f, 0xe5, 0xd3, 0x18, 0xe8, 0x3c, 0xe0, 0xb6, 0xad, 0x26, 0x83, + 0x99, 0xb2, 0xd0, 0xf8, 0xa9, 0x0c, 0x4c, 0x27, 0x94, 0xc8, 0xa3, 0x03, 0xac, 0xfa, 0x47, 0x3a, + 0x0c, 0xf2, 0x7d, 0xbc, 0xf9, 0xf9, 0xf4, 0xe6, 0x1b, 0xff, 0x4f, 0x1e, 0x4e, 0xf5, 0x38, 0xd3, + 0x47, 0x91, 0x58, 0x99, 0x23, 0x23, 0xb1, 0xbe, 0xc6, 0xce, 0xd0, 0xb6, 0xd3, 0xf2, 0x37, 0xdd, + 0xa8, 0xc5, 0x91, 0x43, 0x37, 0x96, 0xc9, 0x67, 0x56, 0xa5, 0xe7, 0xef, 0x69, 0xfe, 0xd4, 0xb5, + 0x15, 0xb8, 0x49, 0x95, 0x42, 0x63, 0x96, 0x88, 0x85, 0xca, 0xfd, 0x19, 0x89, 0x85, 0xd2, 0xbd, + 0xf3, 0xf3, 0x4f, 0xd5, 0x3b, 0x3f, 0xdd, 0xb3, 0x6f, 0xe8, 0x49, 0xfc, 0x3c, 0x97, 0x60, 0x82, + 0x7b, 0x4f, 0x94, 0x7c, 0x3e, 0x48, 0xc3, 0x09, 0x8f, 0x0b, 0xdb, 0x4f, 0x8e, 0x85, 0x46, 0x43, + 0x56, 0x74, 0x4f, 0xf2, 0x11, 0xbc, 0xf5, 0xb9, 0xd8, 0xdb, 0x53, 0x5c, 0xbb, 0xed, 0x55, 0x49, + 0x8d, 0x9f, 0xca, 0xea, 0x81, 0x52, 0x7f, 0x16, 0x67, 0xde, 0x65, 0x18, 0xda, 0xda, 0xa3, 0x9e, + 0x94, 0x77, 0xd8, 0x90, 0x7d, 0x06, 0x50, 0x1b, 0x82, 0x18, 0xe4, 0x26, 0x4c, 0x6e, 0xf0, 0x91, + 0x90, 0xdd, 0x9b, 0x8f, 0x8e, 0x5a, 0x1d, 0x61, 0x10, 0x48, 0xe9, 0xdf, 0x18, 0x95, 0x71, 0x0b, + 0xce, 0x69, 0x0b, 0x52, 0x24, 0x76, 0xe0, 0x0e, 0xdd, 0x7c, 0x47, 0x9c, 0x8c, 0x5c, 0xd8, 0x23, + 0xe9, 0x61, 0xc6, 0xa0, 0xc6, 0x0e, 0x3c, 0xdf, 0x97, 0x11, 0xdb, 0x88, 0xa0, 0x13, 0xfe, 0x8a, + 0x79, 0x9d, 0xf5, 0x25, 0x35, 0x15, 0x3a, 0xe3, 0x7b, 0x61, 0x5c, 0xed, 0x65, 0x94, 0xa9, 0xec, + 0xb7, 0x10, 0x6a, 0x5c, 0xa6, 0x32, 0x80, 0xc9, 0xe1, 0x47, 0x3e, 0x4f, 0x1f, 0x0d, 0x7f, 0xee, + 0xa8, 0xe1, 0x67, 0x95, 0xe3, 0x92, 0x55, 0x2a, 0xc7, 0xdf, 0x6a, 0xe5, 0x98, 0xb9, 0xc1, 0xe4, + 0xf0, 0xa7, 0x5a, 0xf9, 0x6f, 0xc9, 0x07, 0x02, 0xd0, 0x5f, 0x5c, 0x9e, 0x89, 0xa3, 0xe7, 0x3f, + 0x67, 0xd2, 0x4e, 0xba, 0x11, 0x66, 0xb4, 0x49, 0x66, 0x8f, 0xda, 0x24, 0x8f, 0x33, 0x11, 0xaf, + 0xc2, 0x48, 0x49, 0xdc, 0xc9, 0xe6, 0x23, 0xc5, 0xc6, 0x4e, 0x5c, 0xc0, 0x4a, 0x2c, 0xe3, 0x67, + 0x33, 0x70, 0x22, 0xd5, 0x54, 0xc6, 0x6a, 0xe5, 0x36, 0x39, 0x65, 0x1d, 0xc6, 0x0d, 0x72, 0x1c, + 0xe3, 0x38, 0x61, 0xbb, 0x83, 0x7f, 0x8b, 0xf1, 0x02, 0x8c, 0x86, 0x17, 0x35, 0x64, 0x56, 0x0e, + 0x1d, 0x3a, 0xea, 0x48, 0x7b, 0x7f, 0x0d, 0x80, 0xb5, 0xe0, 0xa9, 0xba, 0x95, 0x19, 0xbf, 0x95, + 0xe5, 0x8f, 0x47, 0x3d, 0xb3, 0x99, 0xf4, 0xd2, 0x7d, 0xc1, 0xd8, 0x27, 0xf5, 0xce, 0x9f, 0x47, + 0x96, 0x61, 0xb8, 0x16, 0xd8, 0x41, 0x57, 0x46, 0x1b, 0xcf, 0xa8, 0x64, 0x58, 0x70, 0x7f, 0x31, + 0x8a, 0x37, 0xf5, 0x11, 0xa2, 0x1d, 0x0e, 0x10, 0xa2, 0xb8, 0x94, 0x39, 0x30, 0xae, 0xd2, 0x92, + 0x0f, 0x61, 0x52, 0xa6, 0x07, 0xe3, 0x21, 0xd8, 0xe2, 0x52, 0x49, 0x3a, 0x27, 0xc8, 0xf4, 0x60, + 0x6a, 0xc8, 0xb6, 0x86, 0xaf, 0x4a, 0xea, 0x8e, 0x8a, 0x6c, 0xfc, 0xf1, 0x30, 0x9f, 0x07, 0x22, + 0xcf, 0xdf, 0x36, 0x4c, 0xae, 0x57, 0x2b, 0x4b, 0x8a, 0xe1, 0x4b, 0x7f, 0xd2, 0x61, 0xf9, 0x51, + 0x40, 0xbd, 0xb6, 0xdd, 0x14, 0x08, 0x07, 0xd1, 0xde, 0xe0, 0x3a, 0x8d, 0x7a, 0xba, 0x51, 0x2c, + 0xc6, 0x91, 0xd5, 0xc1, 0x0f, 0x37, 0x61, 0x1d, 0xd9, 0x01, 0xeb, 0xf0, 0xed, 0x56, 0xb3, 0x47, + 0x1d, 0x3a, 0x47, 0xb2, 0x07, 0xc5, 0x5b, 0xa8, 0xc7, 0x28, 0xb5, 0xe4, 0xfa, 0xd7, 0x72, 0x41, + 0xd4, 0x72, 0x86, 0x2b, 0x40, 0xe9, 0xf5, 0x24, 0xb8, 0x46, 0x0b, 0x38, 0x7f, 0xe4, 0x02, 0xfe, + 0xcb, 0x19, 0x18, 0xe6, 0x8a, 0x92, 0x98, 0x5f, 0x3d, 0x54, 0xb1, 0xad, 0xa7, 0xa3, 0x8a, 0x15, + 0x51, 0x80, 0x6b, 0x33, 0x8d, 0x97, 0x91, 0x4a, 0x6c, 0xc2, 0x4a, 0x17, 0x45, 0x34, 0x61, 0xf3, + 0x92, 0xa3, 0xe7, 0x2b, 0xa9, 0x46, 0xa1, 0xb9, 0x23, 0x47, 0x46, 0x7f, 0xc9, 0x70, 0xe6, 0x11, + 0x11, 0x9a, 0xab, 0x07, 0xe4, 0xae, 0xc2, 0xa8, 0x08, 0xf8, 0x2d, 0x1f, 0x88, 0x8b, 0xaa, 0xa2, + 0x76, 0x0d, 0xde, 0x28, 0x1f, 0x44, 0x4a, 0xa0, 0x08, 0x19, 0xb6, 0xb6, 0x0f, 0xb4, 0x47, 0xb2, + 0x24, 0x22, 0x59, 0xe7, 0x8f, 0xc7, 0xf0, 0x4c, 0x88, 0x7a, 0x9a, 0xe2, 0x10, 0x2e, 0x52, 0x89, + 0xc8, 0xa8, 0xc1, 0x94, 0xc4, 0x87, 0x11, 0x0f, 0xb2, 0x0a, 0x45, 0xf1, 0xb0, 0x3e, 0xf7, 0xa3, + 0xa8, 0x56, 0x78, 0x50, 0xa9, 0x70, 0x7f, 0x93, 0xcf, 0xf2, 0x0b, 0x0f, 0x0c, 0x3d, 0x9e, 0x23, + 0x41, 0xc9, 0x0e, 0x6e, 0xc5, 0xf8, 0xec, 0x23, 0x6f, 0xc3, 0x58, 0x98, 0x89, 0x32, 0x8c, 0x28, + 0x43, 0x83, 0x75, 0x94, 0xba, 0x52, 0x8b, 0x2d, 0x53, 0xd1, 0xc9, 0x22, 0x14, 0xd8, 0x22, 0x8e, + 0x3f, 0xcf, 0xd5, 0x15, 0x30, 0xd5, 0x4d, 0x5c, 0xe2, 0x91, 0x1a, 0xcc, 0xb0, 0x45, 0x53, 0x73, + 0xda, 0xbb, 0x4d, 0xba, 0xea, 0xee, 0xba, 0xdd, 0xe0, 0x9e, 0xb9, 0x2a, 0x84, 0x2b, 0x57, 0x95, + 0xed, 0x56, 0x53, 0x2b, 0xf6, 0xb4, 0xc7, 0x57, 0x53, 0xa8, 0x15, 0x19, 0xf6, 0x07, 0x59, 0x18, + 0x53, 0xe6, 0x13, 0xb9, 0x0c, 0x85, 0xaa, 0xbf, 0xea, 0xd6, 0x1f, 0x84, 0xb9, 0xa6, 0x26, 0x1e, + 0x1f, 0x2e, 0x8c, 0x3a, 0xbe, 0xd5, 0x44, 0xa0, 0x19, 0x16, 0x93, 0x32, 0x4c, 0xf0, 0xbf, 0x64, + 0x36, 0xef, 0x6c, 0xe4, 0xed, 0xc6, 0x91, 0x65, 0x1e, 0x6f, 0x55, 0xae, 0x69, 0x24, 0xe4, 0xeb, + 0x00, 0x1c, 0x80, 0xd1, 0x89, 0xb9, 0xc1, 0xe3, 0x2a, 0x45, 0x05, 0x29, 0x71, 0x89, 0x0a, 0x43, + 0xf2, 0x4d, 0x9e, 0xb9, 0x52, 0xce, 0xff, 0xfc, 0xe0, 0x81, 0xa1, 0x8c, 0xbf, 0x95, 0x1e, 0x9f, + 0xae, 0xb2, 0x14, 0x69, 0xf1, 0xe6, 0x4d, 0x5a, 0x77, 0x1f, 0x52, 0xef, 0xa0, 0x14, 0x20, 0xa2, + 0x82, 0x61, 0xfc, 0x2f, 0x19, 0x65, 0xd5, 0x90, 0x35, 0x7c, 0x51, 0x8e, 0xcf, 0x08, 0xe1, 0xb3, + 0x11, 0x2a, 0xf3, 0x12, 0x6e, 0xd2, 0x9d, 0xf2, 0x19, 0xe1, 0x6c, 0x39, 0x13, 0xce, 0xab, 0xd8, + 0x4b, 0x73, 0x1c, 0x48, 0xde, 0x87, 0x3c, 0x76, 0x5d, 0xf6, 0xc8, 0x4f, 0x93, 0xfb, 0x69, 0x9e, + 0xf5, 0x19, 0x7e, 0x08, 0x52, 0x92, 0x2f, 0x88, 0xc8, 0x2e, 0xde, 0xf9, 0x93, 0xca, 0xa6, 0xc8, + 0xda, 0x11, 0x6e, 0xa4, 0x51, 0x8a, 0x02, 0x65, 0xf6, 0xfc, 0x3b, 0x59, 0x28, 0xc6, 0xd7, 0x2a, + 0x79, 0x0f, 0xc6, 0xe5, 0x4e, 0x87, 0x4f, 0x0e, 0xb3, 0xaf, 0x1c, 0x17, 0xe9, 0xa5, 0xe5, 0x76, + 0x17, 0x7f, 0x71, 0x58, 0x25, 0x60, 0x5a, 0xc7, 0xa6, 0x48, 0x19, 0xa4, 0xac, 0x92, 0xc0, 0x0d, + 0x3a, 0xb1, 0xe4, 0x87, 0x12, 0x8d, 0xbc, 0x01, 0xb9, 0xbb, 0x37, 0x4b, 0x22, 0x8c, 0x40, 0x8a, + 0xa4, 0xbb, 0x37, 0x4b, 0x7c, 0x35, 0x73, 0x37, 0x29, 0xdd, 0x69, 0x8b, 0xe1, 0x93, 0x55, 0x25, + 0xb7, 0xe8, 0xb0, 0xf6, 0xfe, 0x8f, 0x04, 0x87, 0x1f, 0x77, 0x74, 0x92, 0x51, 0xfe, 0x96, 0xb1, + 0xc8, 0xb2, 0xf7, 0x1f, 0xe4, 0x60, 0x34, 0xac, 0x9f, 0x10, 0x40, 0xa5, 0x4a, 0x9c, 0x64, 0xf0, + 0x6f, 0x72, 0x1a, 0x0a, 0x52, 0x8f, 0x12, 0xd1, 0x04, 0x23, 0xbe, 0xd0, 0xa1, 0xe6, 0x40, 0x2a, + 0x4c, 0x7c, 0x99, 0x9b, 0xf2, 0x27, 0xb9, 0x06, 0xa1, 0x36, 0xd4, 0x4b, 0x6d, 0xca, 0xb3, 0x01, + 0x33, 0x43, 0x34, 0x32, 0x09, 0x59, 0x87, 0x67, 0x6e, 0x19, 0x35, 0xb3, 0x4e, 0x83, 0xbc, 0x07, + 0x05, 0xbb, 0xd1, 0xa0, 0x0d, 0xcb, 0x96, 0xce, 0x0f, 0xfd, 0x26, 0x4d, 0x81, 0x71, 0xe3, 0x9b, + 0x00, 0x52, 0x95, 0x02, 0x52, 0x82, 0xd1, 0xa6, 0xcd, 0x1d, 0xa9, 0x1a, 0x03, 0xec, 0x28, 0x11, + 0x87, 0x02, 0x23, 0xbb, 0xe7, 0xd3, 0x06, 0x79, 0x19, 0xf2, 0x6c, 0x34, 0xc5, 0x16, 0x22, 0xd5, + 0x37, 0x36, 0x98, 0xbc, 0xc3, 0x56, 0x9e, 0x33, 0x11, 0x81, 0xbc, 0x08, 0xb9, 0xee, 0xe2, 0x8e, + 0xd8, 0x1c, 0x8a, 0x51, 0x9e, 0xdf, 0x10, 0x8d, 0x15, 0x93, 0xeb, 0x50, 0xd8, 0xd7, 0x53, 0xc4, + 0x9e, 0x88, 0x0d, 0x63, 0x88, 0x1f, 0x22, 0x96, 0x0b, 0x30, 0xcc, 0x37, 0x02, 0xe3, 0x79, 0x80, + 0xa8, 0xea, 0x64, 0xd0, 0x87, 0xf1, 0x75, 0x18, 0x0d, 0xab, 0x24, 0xe7, 0x00, 0x1e, 0xd0, 0x03, + 0x6b, 0xcf, 0x6e, 0x37, 0x9a, 0x5c, 0xbf, 0x1b, 0x37, 0x47, 0x1f, 0xd0, 0x83, 0x15, 0x04, 0x90, + 0x53, 0x30, 0xd2, 0x61, 0xa3, 0x2a, 0xa6, 0xee, 0xb8, 0x39, 0xdc, 0xe9, 0x6e, 0xb3, 0x19, 0x3a, + 0x07, 0x23, 0x68, 0x79, 0x13, 0x0b, 0x6d, 0xc2, 0x94, 0x3f, 0x8d, 0xff, 0x3a, 0x8b, 0x4f, 0x19, + 0x28, 0xed, 0x24, 0x17, 0x60, 0xa2, 0xee, 0x51, 0xdc, 0x73, 0x6c, 0xa6, 0x49, 0x89, 0x7a, 0xc6, + 0x23, 0x60, 0xb5, 0x41, 0x2e, 0xc2, 0x94, 0x78, 0xbe, 0x9b, 0x35, 0xa8, 0xbe, 0x2d, 0xf2, 0x39, + 0x8f, 0x9b, 0x13, 0x1c, 0x7c, 0x87, 0x1e, 0x2c, 0x6d, 0x63, 0xc6, 0xa1, 0xa2, 0x9a, 0x30, 0x32, + 0x08, 0x5f, 0x5d, 0x34, 0xa7, 0x14, 0x38, 0xfa, 0x34, 0x9d, 0x84, 0x61, 0xdb, 0xde, 0xed, 0x3a, + 0x3c, 0x33, 0xc8, 0xb8, 0x29, 0x7e, 0x91, 0x57, 0x61, 0x3a, 0xca, 0x2b, 0x2a, 0x3f, 0x63, 0x08, + 0x3f, 0xa3, 0x18, 0x16, 0x2c, 0x71, 0x38, 0x79, 0x1d, 0x88, 0x5a, 0x9f, 0xbb, 0xfd, 0x31, 0xad, + 0xf3, 0xa9, 0x36, 0x6e, 0x4e, 0x2b, 0x25, 0xeb, 0x58, 0x40, 0x5e, 0x80, 0x71, 0x8f, 0xfa, 0xa8, + 0xc5, 0x61, 0xb7, 0xe1, 0x4b, 0x3f, 0xe6, 0x98, 0x84, 0xb1, 0xbe, 0xbb, 0x04, 0x45, 0xa5, 0x3b, + 0x30, 0x27, 0x27, 0x4f, 0x66, 0x6c, 0x4e, 0x46, 0x70, 0xb3, 0x53, 0x6d, 0x18, 0x65, 0x98, 0x4e, + 0xac, 0x5c, 0xe5, 0xa5, 0x5c, 0x2e, 0x89, 0xfa, 0xbf, 0x94, 0x6b, 0xb4, 0x61, 0x5c, 0x95, 0xc4, + 0x47, 0xe4, 0xd4, 0x3e, 0x89, 0x91, 0xe5, 0x5c, 0x4c, 0x0d, 0x3f, 0x3e, 0x5c, 0xc8, 0x3a, 0x0d, + 0x8c, 0x27, 0xbf, 0x04, 0x05, 0xa9, 0x34, 0x88, 0xbd, 0x1a, 0x2d, 0xa7, 0x42, 0x5b, 0x3d, 0x30, + 0xc3, 0x52, 0xe3, 0x65, 0x18, 0x11, 0xc2, 0xb6, 0xbf, 0xbd, 0xd4, 0xf8, 0xe1, 0x2c, 0x4c, 0x99, + 0x94, 0x89, 0x02, 0xca, 0x13, 0xe9, 0x3f, 0xb3, 0xc7, 0xb7, 0xf4, 0xfc, 0x64, 0xda, 0xb7, 0xf5, + 0x49, 0x61, 0xff, 0x77, 0x33, 0x30, 0x93, 0x82, 0xfb, 0xa9, 0x9e, 0x5b, 0xbb, 0x01, 0xa3, 0x15, + 0xc7, 0x6e, 0x96, 0x1a, 0x8d, 0x30, 0xcc, 0x1c, 0x55, 0xcd, 0x06, 0x9b, 0x69, 0x36, 0x83, 0xaa, + 0xdb, 0x6e, 0x88, 0x4a, 0x5e, 0x11, 0x93, 0x22, 0x7a, 0xea, 0x1a, 0x27, 0xc5, 0x27, 0x87, 0x0b, + 0xc0, 0xdb, 0x14, 0x3d, 0xe9, 0x89, 0x39, 0x03, 0x39, 0x30, 0x72, 0x03, 0x7f, 0x66, 0x87, 0x2e, + 0x3d, 0x67, 0x60, 0xfc, 0xf3, 0x06, 0xca, 0x62, 0xff, 0x63, 0x59, 0x38, 0x99, 0x4e, 0xf8, 0x69, + 0x5f, 0xce, 0xc3, 0xf7, 0x03, 0x94, 0x3c, 0xa7, 0xf8, 0x72, 0x1e, 0x7f, 0x6c, 0x00, 0xf1, 0x23, + 0x04, 0xb2, 0x03, 0x13, 0xab, 0xb6, 0x1f, 0xac, 0x50, 0xdb, 0x0b, 0xb6, 0xa9, 0x1d, 0x0c, 0xa0, + 0x7b, 0xbe, 0x28, 0xaf, 0x25, 0x71, 0xfb, 0xdb, 0x93, 0x94, 0x31, 0xed, 0x50, 0x67, 0x1b, 0x4e, + 0x94, 0xfc, 0x00, 0x13, 0xe5, 0x5b, 0x30, 0x55, 0xa3, 0x2d, 0xbb, 0xb3, 0xe7, 0x7a, 0x32, 0x8e, + 0xf0, 0x0a, 0x4c, 0x84, 0xa0, 0xd4, 0xd9, 0xa2, 0x17, 0x6b, 0xf8, 0x4a, 0x47, 0x44, 0xa2, 0x44, + 0x2f, 0x36, 0xfe, 0x7a, 0x16, 0x4e, 0x95, 0xea, 0xc2, 0x5b, 0x48, 0x14, 0x48, 0xa7, 0xc6, 0xcf, + 0xb8, 0x6e, 0x72, 0x15, 0x46, 0xef, 0xda, 0x8f, 0x56, 0xa9, 0xed, 0x53, 0x5f, 0xbc, 0x5b, 0xc4, + 0x15, 0x35, 0xfb, 0x51, 0xe4, 0x44, 0x63, 0x46, 0x38, 0xea, 0x49, 0x36, 0xff, 0x84, 0x27, 0x59, + 0x03, 0x86, 0x57, 0xdc, 0x66, 0x43, 0x6c, 0x63, 0xe2, 0x7a, 0x6d, 0x0f, 0x21, 0xa6, 0x28, 0x61, + 0x07, 0xc0, 0xc9, 0xb0, 0xc5, 0xd8, 0x84, 0xcf, 0xbc, 0x4b, 0x2e, 0xc2, 0x08, 0x56, 0x54, 0xad, + 0xa8, 0x9b, 0x46, 0x93, 0xe2, 0xeb, 0x33, 0x0d, 0x53, 0x16, 0xaa, 0x3d, 0x31, 0xf4, 0x64, 0x3d, + 0x61, 0xfc, 0x87, 0x78, 0x73, 0xa7, 0x7e, 0x25, 0xdb, 0x89, 0x94, 0x86, 0x64, 0x06, 0x6c, 0x48, + 0xf6, 0xa9, 0x0d, 0x49, 0xae, 0xe7, 0x90, 0x7c, 0x27, 0x0b, 0x63, 0x61, 0x63, 0x3f, 0x67, 0xc9, + 0x76, 0xc3, 0xef, 0x1a, 0x28, 0xf6, 0xbf, 0xa6, 0xc8, 0x0a, 0x11, 0x62, 0xff, 0x3e, 0x0c, 0x8b, + 0xc5, 0x94, 0x89, 0x39, 0xf7, 0xc5, 0x46, 0xb7, 0x3c, 0x29, 0x58, 0x0f, 0xe3, 0x80, 0xfa, 0xa6, + 0xa0, 0xc3, 0xe4, 0x0a, 0x5b, 0x74, 0x5b, 0x5c, 0xe4, 0x3e, 0xb3, 0x7b, 0x54, 0x7a, 0x72, 0x85, + 0xe8, 0xc3, 0x06, 0xda, 0x9d, 0xfe, 0x51, 0x01, 0x8a, 0x71, 0x92, 0xa3, 0xd3, 0x19, 0x6f, 0x74, + 0xb7, 0xb9, 0x16, 0xce, 0xd3, 0x19, 0x77, 0xba, 0xdb, 0x26, 0x83, 0xa1, 0x9f, 0x87, 0xe7, 0x3c, + 0xc4, 0xaf, 0x1e, 0x17, 0x7e, 0x1e, 0x9e, 0xf3, 0x50, 0xf3, 0xf3, 0xf0, 0x9c, 0x87, 0x78, 0xf4, + 0x5d, 0xad, 0x61, 0x3c, 0x28, 0xaa, 0xe0, 0xe2, 0xe8, 0xdb, 0xf4, 0xe3, 0x4f, 0x8c, 0x48, 0x34, + 0xb6, 0x55, 0x96, 0xa9, 0xed, 0x89, 0xd4, 0xbb, 0x42, 0x9c, 0xe1, 0x56, 0xb9, 0x8d, 0x60, 0xfe, + 0x7a, 0xaf, 0xa9, 0x22, 0x91, 0x26, 0x10, 0xe5, 0xa7, 0x5c, 0xc0, 0x47, 0x9f, 0x06, 0xa5, 0x63, + 0xce, 0xac, 0xca, 0xda, 0x52, 0x57, 0x73, 0x0a, 0xdf, 0xa7, 0x69, 0x80, 0xdc, 0x10, 0xf9, 0xc4, + 0xd0, 0xe4, 0x51, 0x38, 0x92, 0x99, 0x0c, 0x98, 0x06, 0x9e, 0x6f, 0x2c, 0x34, 0x7c, 0x44, 0x4c, + 0xc8, 0xbb, 0x30, 0xa6, 0x46, 0xf9, 0xf2, 0x58, 0xd4, 0xb3, 0x3c, 0x45, 0x54, 0x8f, 0x07, 0xe4, + 0x54, 0x02, 0xb2, 0x0d, 0xa7, 0x96, 0xdc, 0xb6, 0xdf, 0x6d, 0xc9, 0x64, 0x54, 0x51, 0x0a, 0x4c, + 0x08, 0x1f, 0x80, 0x7f, 0xb1, 0x2e, 0x50, 0x44, 0x50, 0xa9, 0xf4, 0x9c, 0xd6, 0x0f, 0x20, 0xbd, + 0x18, 0x91, 0x4d, 0x18, 0x43, 0x23, 0x9e, 0x70, 0xcd, 0x1a, 0xd3, 0xc5, 0x46, 0x54, 0x52, 0x61, + 0x0b, 0x83, 0x67, 0x53, 0xb1, 0x5b, 0x4d, 0xe9, 0xb8, 0xab, 0x1a, 0x23, 0x15, 0x64, 0xf2, 0x75, + 0x98, 0xe4, 0xc7, 0xcd, 0x2d, 0xba, 0xcd, 0xe7, 0xce, 0xb8, 0x76, 0x76, 0xd6, 0x0b, 0xf9, 0x45, + 0xaf, 0x30, 0x9d, 0xee, 0xd3, 0x6d, 0x3e, 0xf6, 0x9a, 0xdb, 0xbc, 0x86, 0x4f, 0xee, 0xc1, 0xcc, + 0x8a, 0xed, 0x73, 0xa0, 0x12, 0xae, 0x39, 0x81, 0x36, 0x45, 0x74, 0x67, 0xdc, 0xb3, 0x7d, 0x69, + 0x8b, 0x4d, 0x0d, 0xcf, 0x4c, 0xa3, 0x27, 0x3f, 0x9c, 0x81, 0x39, 0xcd, 0x54, 0x2b, 0x9c, 0x6a, + 0x5a, 0xb4, 0x1d, 0xa0, 0x7f, 0xfc, 0x64, 0xf8, 0x6e, 0x70, 0x2f, 0x34, 0x3e, 0x24, 0x31, 0x6b, + 0xb0, 0x17, 0x95, 0xab, 0x7e, 0x82, 0xbd, 0x78, 0x88, 0x85, 0x8a, 0x6b, 0x7a, 0x4a, 0x5f, 0xa8, + 0xb1, 0x75, 0x2d, 0xd1, 0x8c, 0x1b, 0xf1, 0xfe, 0x16, 0xa6, 0x99, 0x4c, 0x68, 0x9a, 0x99, 0x85, + 0x21, 0xec, 0x55, 0x99, 0x5d, 0x02, 0x7f, 0x18, 0x5f, 0x50, 0xe5, 0x90, 0x50, 0x0b, 0xfb, 0xca, + 0x21, 0xe3, 0x7f, 0x18, 0x86, 0xa9, 0xd8, 0xb4, 0x10, 0xe7, 0xd4, 0x4c, 0xe2, 0x9c, 0x5a, 0x03, + 0xe0, 0xc6, 0xc9, 0x01, 0xad, 0x88, 0x32, 0x36, 0x67, 0x4c, 0xc4, 0xb6, 0x85, 0x6b, 0x4a, 0x61, + 0xc3, 0x98, 0xf2, 0x15, 0x3b, 0xa0, 0x55, 0x37, 0x64, 0xca, 0x17, 0xbd, 0xc2, 0x34, 0x62, 0x43, + 0x16, 0x60, 0x08, 0x53, 0xc2, 0xa9, 0xa1, 0x51, 0x0e, 0x03, 0x98, 0x1c, 0x4e, 0x2e, 0xc0, 0x30, + 0x53, 0xa2, 0xaa, 0x15, 0x21, 0x04, 0x71, 0x6f, 0x61, 0x5a, 0x16, 0xd3, 0x58, 0x44, 0x11, 0xb9, + 0x01, 0xe3, 0xfc, 0x2f, 0x91, 0x15, 0x60, 0x58, 0xf7, 0xf4, 0xb2, 0x9c, 0x86, 0x4c, 0x0c, 0xa0, + 0xe1, 0xb1, 0xd3, 0x45, 0xad, 0xbb, 0xcd, 0xdf, 0xbd, 0x17, 0x39, 0x44, 0xf1, 0x74, 0xe1, 0x73, + 0x20, 0xbe, 0xcb, 0x1d, 0x22, 0x30, 0x5d, 0x46, 0x38, 0x28, 0x17, 0xf0, 0x4c, 0x89, 0xba, 0x0c, + 0x77, 0x4c, 0x36, 0x45, 0x09, 0xb9, 0xcc, 0x2f, 0x03, 0x50, 0x2d, 0xe4, 0x4f, 0x2a, 0xa1, 0xa5, + 0x1d, 0x0d, 0x13, 0xa8, 0x1b, 0x86, 0xc5, 0xac, 0x72, 0xf6, 0xf7, 0x72, 0xcb, 0x76, 0x9a, 0x42, + 0xac, 0x60, 0xe5, 0x88, 0x4b, 0x19, 0xd4, 0x8c, 0x10, 0xc8, 0xdb, 0x30, 0xc9, 0x7e, 0x2c, 0xb9, + 0xad, 0x96, 0xdb, 0x46, 0xf6, 0x63, 0x51, 0x82, 0x19, 0x24, 0xa9, 0x63, 0x11, 0xaf, 0x25, 0x86, + 0xcb, 0xf6, 0x13, 0xbc, 0x68, 0xec, 0xf2, 0x6b, 0x8a, 0xf1, 0x68, 0x3f, 0x41, 0x52, 0x9f, 0xc3, + 0x4d, 0x15, 0x89, 0xbc, 0x09, 0x13, 0xec, 0xe7, 0x2d, 0xe7, 0x21, 0xe5, 0x15, 0x4e, 0x44, 0x57, + 0xdf, 0x48, 0xb5, 0xcb, 0x4a, 0x78, 0x7d, 0x3a, 0x26, 0xf9, 0x00, 0x4e, 0x20, 0xa7, 0xba, 0xdb, + 0xa1, 0x8d, 0xd2, 0xce, 0x8e, 0xd3, 0x74, 0xb8, 0xeb, 0x0d, 0x8f, 0x7f, 0x47, 0xab, 0x31, 0xaf, + 0x18, 0x31, 0x2c, 0x3b, 0x42, 0x31, 0xd3, 0x29, 0xc9, 0x16, 0x14, 0x97, 0xba, 0x7e, 0xe0, 0xb6, + 0x4a, 0x41, 0xe0, 0x39, 0xdb, 0xdd, 0x80, 0xfa, 0x73, 0x53, 0x5a, 0x94, 0x38, 0x5b, 0x1c, 0x61, + 0x21, 0xb7, 0x07, 0xd5, 0x91, 0xc2, 0xb2, 0x43, 0x12, 0x33, 0xc1, 0xc4, 0xf8, 0xef, 0x33, 0x30, + 0xa1, 0x91, 0x92, 0x37, 0x60, 0xfc, 0xa6, 0xe7, 0xd0, 0x76, 0xa3, 0x79, 0xa0, 0x1c, 0x54, 0xf1, + 0x14, 0xb3, 0x23, 0xe0, 0xfc, 0xab, 0x35, 0xb4, 0xd0, 0xce, 0x93, 0x4d, 0xf5, 0x8b, 0xbb, 0xca, + 0x23, 0xf4, 0xc4, 0x04, 0xcd, 0x45, 0x69, 0x2b, 0x70, 0x82, 0x8a, 0xd9, 0xa9, 0xa0, 0x90, 0x77, + 0x60, 0x98, 0x5f, 0x49, 0x0a, 0x27, 0xad, 0xd3, 0x69, 0x9f, 0xc9, 0xa3, 0x41, 0x71, 0x22, 0xa2, + 0x43, 0x88, 0x6f, 0x0a, 0x22, 0xe3, 0xa7, 0x33, 0x40, 0x92, 0xa8, 0x47, 0xd8, 0xbd, 0x8e, 0x74, + 0x34, 0x79, 0x3f, 0x5c, 0x8d, 0x39, 0xcd, 0xca, 0xcb, 0x6a, 0xe2, 0x05, 0xbc, 0xe3, 0xc5, 0xaa, + 0x53, 0x0d, 0x71, 0xbc, 0xd8, 0xf8, 0x4b, 0x59, 0x80, 0x08, 0x9b, 0x7c, 0x99, 0xbf, 0xbc, 0xf1, + 0x41, 0xd7, 0x6e, 0x3a, 0x3b, 0x8e, 0x9e, 0x8a, 0x0e, 0x99, 0x7c, 0x4b, 0x96, 0x98, 0x3a, 0x22, + 0x79, 0x0f, 0xa6, 0x6a, 0x1b, 0x3a, 0xad, 0xf2, 0xca, 0x80, 0xdf, 0xb1, 0x62, 0xe4, 0x71, 0x6c, + 0x74, 0xc6, 0x54, 0x47, 0x83, 0x3b, 0x63, 0xf2, 0x81, 0x10, 0x25, 0x4c, 0xb0, 0xd4, 0x36, 0x84, + 0xff, 0x6f, 0xa3, 0x5a, 0x11, 0x52, 0x0a, 0x5b, 0xe7, 0x77, 0xac, 0x8e, 0x70, 0x0c, 0x66, 0x72, + 0x42, 0xc3, 0x8b, 0x3a, 0x72, 0xa8, 0x47, 0xc4, 0xe7, 0xcf, 0xa0, 0xd9, 0xaf, 0xe5, 0x06, 0x54, + 0x58, 0x3b, 0x9e, 0xd9, 0x73, 0x4f, 0x74, 0x9f, 0x3d, 0xa4, 0x05, 0xb2, 0x69, 0x5f, 0x27, 0xbc, + 0x29, 0xae, 0x47, 0x87, 0x14, 0x7e, 0xb3, 0x9d, 0xe2, 0x7f, 0xf1, 0xb7, 0x33, 0x70, 0x22, 0x95, + 0x96, 0x5c, 0x01, 0x88, 0x6c, 0x4a, 0xa2, 0x97, 0x50, 0x62, 0x46, 0xc9, 0x1a, 0x4c, 0x05, 0x83, + 0x7c, 0x2d, 0x6e, 0x0d, 0x3a, 0x7a, 0x23, 0x9c, 0x97, 0xc9, 0x78, 0x74, 0x6b, 0x50, 0x8a, 0x0d, + 0xc8, 0xf8, 0xbb, 0x39, 0x98, 0x56, 0x72, 0x41, 0xf0, 0xb6, 0x1e, 0xe1, 0x1c, 0xfb, 0x00, 0xc6, + 0xd9, 0xd7, 0x38, 0x75, 0x11, 0x4d, 0xc3, 0x7d, 0x2f, 0x5e, 0x49, 0x84, 0x22, 0x09, 0x6e, 0x57, + 0x54, 0x64, 0x9e, 0x22, 0x0b, 0x45, 0x27, 0xda, 0xda, 0xeb, 0xc9, 0xa8, 0x1a, 0x8d, 0x39, 0xf1, + 0x61, 0xa2, 0x72, 0xd0, 0xb6, 0x5b, 0x61, 0x6d, 0xdc, 0x07, 0xe3, 0xd5, 0x9e, 0xb5, 0x69, 0xd8, + 0xbc, 0xba, 0xc8, 0x69, 0x9f, 0x97, 0xa5, 0xc4, 0x8b, 0x6a, 0x54, 0xf3, 0xef, 0xc1, 0x74, 0xa2, + 0xd1, 0xc7, 0xca, 0xd6, 0xb5, 0x05, 0x24, 0xd9, 0x8e, 0x14, 0x0e, 0xaf, 0xea, 0xb9, 0xe0, 0x4e, + 0x84, 0xd7, 0xad, 0xf8, 0x1e, 0x30, 0xf7, 0xe8, 0x58, 0x54, 0x73, 0x79, 0xfd, 0x4c, 0x56, 0x0d, + 0x07, 0x7b, 0xd6, 0x57, 0xdd, 0xfb, 0xda, 0x69, 0xf8, 0xf9, 0x5e, 0x63, 0x3a, 0x90, 0xd5, 0xe1, + 0xbb, 0x39, 0x38, 0xd5, 0x83, 0x92, 0x1c, 0xc4, 0x27, 0x11, 0xb7, 0x42, 0x5c, 0xeb, 0x5f, 0xe1, + 0xd3, 0x98, 0x4a, 0xe4, 0xcb, 0x3c, 0x20, 0xbc, 0x8e, 0xef, 0xd8, 0x8a, 0xf3, 0x37, 0x7f, 0x02, + 0x3d, 0x84, 0xc6, 0x23, 0xc1, 0x39, 0x94, 0xbc, 0x07, 0x43, 0x18, 0x0b, 0x18, 0xcb, 0x45, 0xc5, + 0x30, 0x10, 0xae, 0x24, 0xee, 0x62, 0x3f, 0xb5, 0xc4, 0x5d, 0x0c, 0x40, 0xbe, 0x04, 0xb9, 0xd2, + 0x56, 0x4d, 0x8c, 0xcb, 0xa4, 0x4a, 0xbe, 0x55, 0x8b, 0xf2, 0x85, 0xdb, 0x5a, 0x62, 0x6f, 0x46, + 0xc1, 0x08, 0x6f, 0x2d, 0x6d, 0x88, 0x51, 0x51, 0x09, 0x6f, 0x2d, 0x6d, 0x44, 0x84, 0xbb, 0x75, + 0x2d, 0xb7, 0xc7, 0xad, 0xa5, 0x8d, 0xcf, 0x6e, 0xda, 0xff, 0xd5, 0x2c, 0x8f, 0x62, 0xe7, 0x1f, + 0xf6, 0x1e, 0x8c, 0x6b, 0xb9, 0x3a, 0x33, 0x91, 0x3e, 0x16, 0xa6, 0x44, 0x8d, 0x39, 0xad, 0x68, + 0x04, 0x32, 0xf3, 0x3e, 0xfb, 0x8d, 0x1a, 0xaf, 0xea, 0x1e, 0x12, 0x72, 0x40, 0x9d, 0x38, 0x9e, + 0x79, 0x3f, 0x24, 0x21, 0xd7, 0xa1, 0xb0, 0x49, 0xdb, 0x76, 0x3b, 0x08, 0x0d, 0xa2, 0xe8, 0x78, + 0x1a, 0x20, 0x4c, 0xd7, 0x1a, 0x42, 0x44, 0x74, 0x92, 0xec, 0x6e, 0xfb, 0x75, 0xcf, 0xc1, 0x6c, + 0x17, 0xe1, 0x5e, 0xcc, 0x9d, 0x24, 0x95, 0x12, 0x9d, 0x41, 0x8c, 0xc8, 0xf8, 0x99, 0x0c, 0x8c, + 0x88, 0x81, 0xe4, 0x2f, 0xa6, 0xec, 0x46, 0x7b, 0x89, 0x78, 0x31, 0x65, 0xd7, 0x89, 0xbf, 0x98, + 0xb2, 0xcb, 0x53, 0x4a, 0x8c, 0x8a, 0x80, 0xcc, 0xf0, 0x6a, 0x90, 0x3f, 0xde, 0xcd, 0x81, 0x7a, + 0xb5, 0x11, 0xea, 0xa0, 0xd1, 0x27, 0xc6, 0xdf, 0x14, 0x2d, 0xbb, 0xb5, 0xb4, 0x41, 0x16, 0xa1, + 0xb0, 0xea, 0xd6, 0x6d, 0x65, 0x9f, 0x43, 0xb1, 0xd3, 0x14, 0x30, 0xb5, 0x83, 0x24, 0x1e, 0x6b, + 0xdf, 0x86, 0xe7, 0x8a, 0xb3, 0x8c, 0xd2, 0xbe, 0x0e, 0x07, 0xc6, 0xda, 0x17, 0xa2, 0x0e, 0xdc, + 0x3e, 0x9a, 0x22, 0x24, 0xee, 0x5f, 0xc7, 0x94, 0xe4, 0xb7, 0xd5, 0xa8, 0x1e, 0x51, 0x24, 0x25, + 0xc5, 0x7c, 0x2f, 0x49, 0x71, 0xff, 0xba, 0x99, 0x42, 0x85, 0xf7, 0x6a, 0x11, 0xb8, 0x46, 0xbd, + 0x87, 0xcf, 0xb0, 0x94, 0x4e, 0xbf, 0x57, 0x8b, 0x7f, 0xde, 0x40, 0x42, 0xfa, 0xbf, 0xcd, 0xc2, + 0xc9, 0x74, 0x42, 0xf5, 0x5b, 0x32, 0x7d, 0xbe, 0xe5, 0x12, 0x14, 0x56, 0x5c, 0x3f, 0x50, 0xfc, + 0xd4, 0xd0, 0xfc, 0xbf, 0x27, 0x60, 0x66, 0x58, 0xca, 0xce, 0xdc, 0xec, 0xef, 0x70, 0x79, 0x22, + 0x3f, 0x8c, 0xdd, 0x66, 0x67, 0x6e, 0x5e, 0x44, 0x6e, 0x41, 0xc1, 0x14, 0x51, 0x25, 0xb1, 0xae, + 0x91, 0xe0, 0x50, 0x9b, 0x22, 0x9e, 0x80, 0x68, 0x29, 0x53, 0x05, 0x8c, 0x94, 0x60, 0x44, 0x8c, + 0x7e, 0xec, 0xea, 0x38, 0x65, 0xca, 0xe8, 0x59, 0x8c, 0x25, 0x1d, 0x93, 0x28, 0x78, 0x09, 0x58, + 0xad, 0xc8, 0x00, 0x11, 0x94, 0x28, 0xfc, 0x92, 0x50, 0x77, 0x09, 0x0c, 0x11, 0x8d, 0x1f, 0xce, + 0x02, 0x48, 0xab, 0xcd, 0x33, 0x3b, 0xc3, 0xbe, 0xa4, 0xcd, 0x30, 0xc5, 0x43, 0x66, 0xf0, 0x17, + 0xfe, 0xd6, 0xd1, 0x53, 0x65, 0xf0, 0xf7, 0xfd, 0x16, 0x60, 0x68, 0x33, 0x32, 0x68, 0x89, 0x70, + 0x05, 0x34, 0x47, 0x73, 0xb8, 0xb1, 0x0d, 0xb3, 0xb7, 0x68, 0x10, 0x99, 0xb7, 0xe4, 0xd5, 0x63, + 0x7f, 0xb6, 0xaf, 0xc1, 0xa8, 0xc0, 0x0f, 0xe5, 0x17, 0xb7, 0xc5, 0x88, 0x74, 0x08, 0x68, 0x8b, + 0x91, 0x08, 0x4c, 0x1a, 0x55, 0x68, 0x93, 0x06, 0xf4, 0xb3, 0xad, 0xa6, 0x06, 0x84, 0x7f, 0x0a, + 0x7e, 0xd9, 0x60, 0x35, 0x1c, 0xd9, 0x3f, 0xf7, 0xe1, 0x44, 0xd8, 0xf6, 0xa7, 0xc9, 0xf7, 0x2a, + 0x3b, 0x52, 0x8a, 0x04, 0xc0, 0x11, 0xc7, 0x3e, 0xbe, 0x27, 0x8f, 0x60, 0x5e, 0x12, 0x6c, 0x39, + 0xa1, 0xab, 0xdf, 0x40, 0xb4, 0xe4, 0x6d, 0x18, 0x53, 0x68, 0x44, 0x02, 0x5b, 0x34, 0x53, 0xef, + 0x3b, 0xc1, 0x9e, 0xe5, 0x73, 0xb8, 0x6a, 0xa6, 0x56, 0xd0, 0x8d, 0x8f, 0xe0, 0x4c, 0x18, 0x52, + 0x92, 0x52, 0x75, 0x8c, 0x79, 0xe6, 0x78, 0xcc, 0xd7, 0xa2, 0xcf, 0xaa, 0xb6, 0xc3, 0x30, 0x50, + 0xc9, 0x9b, 0xa8, 0x9f, 0x25, 0x3e, 0xe6, 0x6c, 0x22, 0xb0, 0x54, 0x89, 0x1f, 0x35, 0xde, 0x52, + 0x1a, 0x9b, 0xc2, 0x50, 0x23, 0xce, 0xc4, 0x89, 0x7f, 0x38, 0x0b, 0x53, 0xeb, 0xd5, 0xca, 0x52, + 0xe8, 0x7d, 0xf4, 0x39, 0x7b, 0x7f, 0x50, 0xfb, 0xb6, 0xde, 0xf2, 0xc6, 0xb8, 0x07, 0x33, 0xb1, + 0x6e, 0x40, 0xd5, 0xe1, 0x5d, 0x1e, 0xf3, 0x10, 0x82, 0xa5, 0xda, 0x70, 0x32, 0x8d, 0xfd, 0xfd, + 0xeb, 0x66, 0x0c, 0xdb, 0xf8, 0xc7, 0xa3, 0x31, 0xbe, 0x42, 0x84, 0xbd, 0x06, 0xa3, 0x55, 0xdf, + 0xef, 0x52, 0xef, 0x9e, 0xb9, 0xaa, 0x9a, 0x0a, 0x1c, 0x04, 0x5a, 0x5d, 0xaf, 0x69, 0x46, 0x08, + 0xe4, 0x32, 0x14, 0x44, 0x4e, 0x57, 0x29, 0x13, 0xd0, 0x6a, 0x1b, 0xa6, 0x84, 0x35, 0xc3, 0x62, + 0xf2, 0x06, 0x8c, 0xf3, 0xbf, 0xf9, 0x6c, 0x13, 0x1d, 0x8e, 0xc6, 0x41, 0x81, 0xce, 0x67, 0xa7, + 0xa9, 0xa1, 0x91, 0x57, 0x20, 0x57, 0x5a, 0x32, 0x85, 0x39, 0x48, 0xe8, 0x8d, 0xf8, 0xaa, 0x70, + 0x97, 0xea, 0x87, 0x88, 0x25, 0x93, 0x69, 0x7f, 0x32, 0xe4, 0x5c, 0x58, 0xb2, 0xf9, 0xe3, 0xc7, + 0x02, 0x16, 0xdb, 0xcc, 0x10, 0x46, 0xae, 0xc2, 0x48, 0xc5, 0xf1, 0x3b, 0x4d, 0xfb, 0x40, 0xd8, + 0xb1, 0xf9, 0xe3, 0x3a, 0x1c, 0xa4, 0x45, 0x92, 0x73, 0x10, 0xb9, 0x2c, 0x1f, 0x1d, 0x29, 0x44, + 0xa1, 0x13, 0x3d, 0x5e, 0x16, 0x79, 0x0d, 0x86, 0x45, 0xe6, 0xd3, 0x51, 0x25, 0xa7, 0x79, 0x3c, + 0xe3, 0xa9, 0xc0, 0x49, 0x06, 0x37, 0xc2, 0xd3, 0x0c, 0x6e, 0xdc, 0x86, 0x53, 0xb7, 0xd0, 0x7a, + 0xa3, 0xe7, 0x48, 0xb9, 0x67, 0x56, 0x85, 0x3d, 0x1c, 0xaf, 0x81, 0xb8, 0x81, 0x27, 0x9e, 0x66, + 0xc5, 0xea, 0x7a, 0xea, 0x5b, 0x71, 0xbd, 0x18, 0x91, 0xaf, 0xc2, 0x6c, 0x5a, 0x91, 0xb0, 0x9a, + 0x63, 0x36, 0x90, 0xf4, 0x0a, 0xd4, 0x6c, 0x20, 0x69, 0x1c, 0xc8, 0x2a, 0x14, 0x39, 0xbc, 0xd4, + 0x68, 0x39, 0x6d, 0x6e, 0xf9, 0xe7, 0x56, 0x75, 0x8c, 0x65, 0x10, 0x5c, 0x6d, 0x56, 0xc8, 0x6f, + 0x00, 0xb4, 0xe8, 0x97, 0x18, 0x25, 0xf9, 0x89, 0x0c, 0x3b, 0xcd, 0xf1, 0x3c, 0xa1, 0xf7, 0xcc, + 0x55, 0x5f, 0x64, 0x92, 0x3a, 0x19, 0x05, 0xb6, 0xd4, 0x02, 0xcf, 0x69, 0xef, 0x8a, 0xc8, 0x96, + 0x4d, 0x11, 0xd9, 0xf2, 0xf6, 0xa7, 0x8a, 0x6c, 0xe1, 0xac, 0xfc, 0xc7, 0x87, 0x0b, 0xe3, 0x9e, + 0xa8, 0x13, 0x57, 0x91, 0xd6, 0x02, 0x7c, 0xe7, 0xbc, 0xd9, 0x74, 0xf7, 0xef, 0xb5, 0x1f, 0x52, + 0xcf, 0xd9, 0x71, 0x68, 0x83, 0x7f, 0xe4, 0x14, 0x4a, 0x70, 0xfe, 0xce, 0x39, 0x2b, 0xb7, 0xba, + 0x21, 0x42, 0xe2, 0x43, 0x53, 0x39, 0xb0, 0x83, 0xa7, 0x8c, 0x9e, 0xe0, 0x91, 0x9a, 0xc5, 0xe8, + 0xe0, 0x29, 0x43, 0x2d, 0x2c, 0x9c, 0x46, 0xea, 0xe4, 0xd1, 0x48, 0xc8, 0x55, 0x18, 0xbe, 0x6b, + 0x3f, 0x2a, 0xed, 0x52, 0xf1, 0x98, 0xd4, 0x84, 0x14, 0x7f, 0x08, 0x2c, 0x17, 0x7e, 0x8f, 0x7b, + 0xe7, 0x3f, 0x67, 0x0a, 0x34, 0xf2, 0xfd, 0x19, 0x38, 0xc9, 0x97, 0xb1, 0xfc, 0xca, 0x1a, 0x0d, + 0x02, 0xd6, 0x0f, 0x22, 0xa5, 0x94, 0x7c, 0x8a, 0xa1, 0x56, 0x5b, 0x4f, 0xc7, 0xe3, 0xaf, 0x72, + 0x0b, 0xc9, 0x10, 0x76, 0x9c, 0x2f, 0x4a, 0xb5, 0xbc, 0x91, 0xa9, 0xf4, 0xc2, 0xf3, 0xfc, 0x4b, + 0xb2, 0xe5, 0xe4, 0x75, 0x35, 0xa0, 0x30, 0x87, 0x7a, 0xee, 0x48, 0xcb, 0x7e, 0x64, 0xd9, 0xbb, + 0x54, 0xbb, 0xcf, 0x0e, 0x23, 0x0d, 0x4f, 0xf7, 0x6c, 0x1b, 0xb9, 0x01, 0xa7, 0xe4, 0xfb, 0xec, + 0x7b, 0x41, 0xd0, 0xf1, 0x2d, 0x79, 0x16, 0x10, 0x11, 0x88, 0xe6, 0x09, 0x51, 0xbc, 0xc2, 0x4a, + 0xe5, 0xf1, 0xc0, 0x37, 0xfe, 0x70, 0x94, 0xef, 0x69, 0xa5, 0x6e, 0xb0, 0x27, 0x77, 0xc1, 0xc5, + 0xb4, 0x18, 0x1a, 0xee, 0xdc, 0xa7, 0xc4, 0xd0, 0xe8, 0x91, 0x33, 0xf2, 0x32, 0x22, 0x9b, 0x7a, + 0x19, 0xf1, 0x1a, 0x8c, 0x2e, 0xed, 0xd1, 0xfa, 0x83, 0x30, 0x8e, 0xa1, 0x20, 0xac, 0xbd, 0x0c, + 0xc8, 0x53, 0x8a, 0x46, 0x08, 0xe4, 0x2a, 0x00, 0x06, 0xd5, 0x71, 0x15, 0x49, 0x49, 0x0b, 0x8e, + 0x31, 0x78, 0xc2, 0x5f, 0x42, 0x41, 0x41, 0xf6, 0x35, 0xf3, 0xa6, 0xea, 0x60, 0xc1, 0xd9, 0xfb, + 0xde, 0x8e, 0x40, 0x8f, 0x10, 0xd8, 0xe7, 0x29, 0x13, 0x5d, 0x88, 0xe5, 0x62, 0x62, 0x35, 0xa8, + 0x48, 0xe8, 0xbb, 0x28, 0x9d, 0xb6, 0x51, 0x2a, 0x8f, 0x0b, 0xdf, 0xc5, 0xd0, 0xc1, 0xdb, 0x8c, + 0x10, 0xc8, 0x97, 0x60, 0x64, 0x89, 0x7a, 0xc1, 0xe6, 0xe6, 0x2a, 0xfa, 0x40, 0xf0, 0xdc, 0xd9, + 0x05, 0xcc, 0x73, 0x1c, 0x04, 0xcd, 0x4f, 0x0e, 0x17, 0x26, 0x02, 0xa7, 0x45, 0xaf, 0x84, 0x03, + 0x2c, 0xb1, 0x49, 0x19, 0x8a, 0xfc, 0x96, 0x36, 0x52, 0x85, 0x51, 0x50, 0x17, 0xf8, 0xb6, 0x21, + 0xae, 0x74, 0xf7, 0xe9, 0x76, 0x98, 0xe5, 0x39, 0x81, 0x4f, 0x96, 0x65, 0x72, 0x74, 0xf5, 0x23, + 0x21, 0xb2, 0xcd, 0xc4, 0x27, 0x30, 0xfb, 0xd6, 0x24, 0x05, 0x29, 0xc1, 0xc4, 0x92, 0xdb, 0xea, + 0xd8, 0x81, 0x83, 0x2f, 0x0d, 0x1d, 0x08, 0x99, 0x8c, 0xf6, 0xa5, 0xba, 0x5a, 0xa0, 0x09, 0x78, + 0xb5, 0x80, 0xdc, 0x84, 0x49, 0xd3, 0xed, 0xb2, 0x41, 0x92, 0x87, 0x42, 0x2e, 0x76, 0xd1, 0x53, + 0xc1, 0x63, 0x25, 0x6c, 0x97, 0x10, 0x27, 0x40, 0x2d, 0x47, 0x9d, 0x46, 0x45, 0xd6, 0x52, 0xac, + 0xf3, 0xaa, 0xac, 0x55, 0x73, 0x3d, 0x27, 0x98, 0xa5, 0x18, 0xf6, 0xaf, 0xc3, 0x58, 0xad, 0xb6, + 0xbe, 0x49, 0xfd, 0xe0, 0x66, 0xd3, 0xdd, 0x47, 0x51, 0x5b, 0x10, 0x6f, 0x60, 0xf8, 0xae, 0x15, + 0x50, 0x3f, 0xb0, 0x76, 0x9a, 0xee, 0xbe, 0xa9, 0x62, 0x91, 0x6f, 0xb0, 0xfe, 0x50, 0x14, 0x13, + 0x91, 0x8d, 0xaf, 0x9f, 0xee, 0x84, 0x02, 0x2d, 0x5a, 0x32, 0x4c, 0x83, 0xd2, 0x3b, 0x4b, 0x41, + 0xc7, 0xa0, 0x1c, 0x76, 0x9c, 0x2d, 0x35, 0x1a, 0x1e, 0xf5, 0x7d, 0x21, 0x13, 0x79, 0x50, 0x0e, + 0x9e, 0x7d, 0x6d, 0x5e, 0xa0, 0x05, 0xe5, 0x28, 0x04, 0xe4, 0x3b, 0x19, 0x38, 0xa1, 0xfa, 0xf5, + 0xe3, 0x62, 0x41, 0xaf, 0x0b, 0x2e, 0x21, 0x5f, 0xbf, 0x22, 0xf7, 0x84, 0x2b, 0x0a, 0xda, 0x95, + 0x87, 0xd7, 0xae, 0x94, 0xa2, 0x9f, 0x35, 0x49, 0x24, 0x12, 0x5a, 0xa5, 0xf1, 0x53, 0xe5, 0xbb, + 0x9d, 0x42, 0x4a, 0x96, 0x98, 0xda, 0xc0, 0xe6, 0x13, 0x7a, 0xf1, 0x54, 0x37, 0x50, 0xc0, 0x0a, + 0xf3, 0x9e, 0x98, 0x7d, 0xdc, 0xdf, 0xc7, 0xe9, 0xe8, 0xda, 0x81, 0x42, 0x43, 0xaa, 0x30, 0xc5, + 0x01, 0x4c, 0x24, 0xf0, 0x07, 0x12, 0x66, 0xa2, 0x24, 0xcd, 0x82, 0x0d, 0x5e, 0x3c, 0xe3, 0x23, + 0x09, 0x6a, 0xf2, 0xb8, 0x18, 0x1d, 0xea, 0xed, 0xb5, 0xd2, 0xdd, 0xd5, 0x48, 0xf9, 0xfc, 0x7c, + 0xf9, 0xe5, 0x6b, 0xdf, 0xd6, 0xc7, 0x2f, 0xff, 0x1e, 0x8f, 0x54, 0x54, 0xba, 0x41, 0xea, 0xed, + 0x1a, 0x38, 0xae, 0xb7, 0xc7, 0x68, 0xcc, 0x18, 0xb6, 0xf1, 0x49, 0x21, 0xc6, 0x57, 0xf8, 0xe2, + 0x19, 0x30, 0xcc, 0xd5, 0x72, 0xf5, 0xb5, 0x6d, 0xae, 0xb4, 0x9b, 0xa2, 0x84, 0x9c, 0x86, 0x5c, + 0xad, 0xb6, 0x2e, 0x3a, 0x19, 0x3d, 0xf2, 0x7c, 0xdf, 0x35, 0x19, 0x8c, 0x8d, 0x10, 0xba, 0xd9, + 0x29, 0x79, 0x78, 0x99, 0x04, 0x35, 0x11, 0xca, 0xfa, 0x5b, 0x2a, 0xc9, 0xf9, 0xa8, 0xbf, 0x85, + 0x92, 0x1c, 0xa9, 0xc6, 0x4b, 0x30, 0x57, 0xf2, 0x7d, 0xea, 0xb1, 0x09, 0x2a, 0xbc, 0xb7, 0x3c, + 0xa1, 0xc8, 0x89, 0x8d, 0x02, 0x2b, 0xb5, 0xeb, 0xbe, 0xd9, 0x13, 0x91, 0x5c, 0x82, 0x42, 0xa9, + 0xdb, 0x70, 0x68, 0xbb, 0xae, 0x25, 0xd9, 0xb1, 0x05, 0xcc, 0x0c, 0x4b, 0xc9, 0x07, 0x70, 0x22, + 0x96, 0x68, 0x4a, 0xf4, 0xc0, 0x48, 0xb4, 0x9a, 0xa5, 0xa2, 0x19, 0xdd, 0x38, 0xf3, 0x2e, 0x49, + 0xa7, 0x24, 0x25, 0x28, 0x2e, 0x63, 0x1c, 0x4a, 0x85, 0x72, 0xe3, 0xb7, 0xeb, 0xf1, 0xd8, 0x1a, + 0x7e, 0x2c, 0xe0, 0x31, 0x2a, 0x56, 0x23, 0x2c, 0x34, 0x13, 0xe8, 0xe4, 0x0e, 0xcc, 0xc4, 0x61, + 0x6c, 0x4f, 0xe0, 0x27, 0x00, 0x4c, 0x04, 0x99, 0xe0, 0x82, 0xbb, 0x42, 0x1a, 0x15, 0xd9, 0x86, + 0xe9, 0xc8, 0xe3, 0x42, 0x3f, 0x17, 0x48, 0x47, 0xce, 0xb0, 0x5c, 0x9e, 0x0d, 0xce, 0x88, 0xc9, + 0x38, 0x13, 0x79, 0x6f, 0x84, 0xe7, 0x03, 0x33, 0xc9, 0x8e, 0x34, 0x60, 0xb2, 0xe6, 0xec, 0xb6, + 0x9d, 0xf6, 0xee, 0x1d, 0x7a, 0xb0, 0x61, 0x3b, 0x9e, 0x70, 0xa9, 0x93, 0x0e, 0xb3, 0x25, 0xff, + 0xa0, 0xd5, 0xa2, 0x81, 0x87, 0xbb, 0x2d, 0x2b, 0xc7, 0xb0, 0x50, 0xa6, 0xef, 0xcd, 0xfb, 0x9c, + 0x0e, 0x43, 0xae, 0x3a, 0xb6, 0xa3, 0x6d, 0x2b, 0x3a, 0x4f, 0xed, 0x6c, 0x36, 0x3e, 0xe0, 0xd9, + 0xac, 0x09, 0xd3, 0xcb, 0xed, 0xba, 0x77, 0x80, 0x77, 0x10, 0xb2, 0x71, 0x13, 0x47, 0x34, 0xee, + 0x45, 0xd1, 0xb8, 0xb3, 0xb6, 0x9c, 0x61, 0x69, 0xcd, 0x4b, 0x32, 0x26, 0x35, 0x98, 0x46, 0x05, + 0xba, 0x5a, 0xd9, 0xa8, 0xb6, 0x9d, 0xc0, 0xc1, 0x37, 0xa1, 0xf9, 0x76, 0xf5, 0x92, 0xe0, 0x79, + 0x8e, 0xeb, 0xe0, 0x4e, 0xa3, 0x63, 0x39, 0x12, 0x45, 0x65, 0x9a, 0xa0, 0xef, 0xa7, 0x08, 0x4f, + 0xfd, 0xab, 0x51, 0x84, 0xf1, 0xd5, 0xa4, 0x58, 0xb8, 0x74, 0x31, 0x92, 0xed, 0x3e, 0x16, 0xb1, + 0x2d, 0xc2, 0xed, 0xa2, 0x7a, 0xa2, 0xbd, 0x9a, 0xa4, 0xd3, 0x19, 0xdf, 0x19, 0xe5, 0xb2, 0x5d, + 0xd5, 0x5f, 0x7b, 0xb9, 0xd2, 0xc5, 0xf4, 0xda, 0xec, 0x71, 0xf4, 0xda, 0xdc, 0xd1, 0x7a, 0x6d, + 0xfe, 0x28, 0xbd, 0x36, 0xa6, 0x78, 0x0e, 0x1d, 0x5b, 0xf1, 0x1c, 0x3e, 0x86, 0xe2, 0x39, 0x72, + 0x2c, 0xc5, 0x53, 0xd3, 0xa0, 0x0b, 0x47, 0x69, 0xd0, 0x7f, 0xae, 0xa6, 0x3e, 0xab, 0x6a, 0x6a, + 0x9a, 0xaa, 0x70, 0x2c, 0x35, 0xb5, 0xb7, 0x96, 0x59, 0xfc, 0xd7, 0xad, 0x65, 0x4e, 0x3f, 0x1d, + 0x2d, 0x93, 0x7c, 0x4a, 0x2d, 0xf3, 0xfb, 0xa0, 0x18, 0xdf, 0xf8, 0x8e, 0xce, 0xaf, 0xf7, 0xd4, + 0x72, 0x41, 0xb1, 0x6d, 0x39, 0xbe, 0xf1, 0xb0, 0x83, 0xf4, 0x86, 0xe7, 0x3c, 0xb4, 0x03, 0x7a, + 0x47, 0xba, 0x1e, 0x88, 0xdc, 0x90, 0x1c, 0x8a, 0xe2, 0x43, 0x41, 0x09, 0x75, 0xae, 0x6c, 0x9a, + 0xce, 0x65, 0xfc, 0x48, 0x16, 0xa6, 0x79, 0xde, 0x96, 0x67, 0xdf, 0x02, 0xfe, 0xae, 0xa6, 0x49, + 0x4b, 0x47, 0xb7, 0xd8, 0xd7, 0xf5, 0xb1, 0x81, 0x7f, 0x1d, 0x4e, 0x24, 0xba, 0x02, 0xb5, 0xe9, + 0x8a, 0xcc, 0x98, 0x93, 0xd0, 0xa7, 0xe7, 0xd2, 0x2b, 0xb9, 0x7f, 0xdd, 0x4c, 0x50, 0x18, 0xff, + 0x2c, 0x9f, 0xe0, 0x2f, 0xac, 0xe1, 0xaa, 0x7d, 0x3b, 0x73, 0x3c, 0xfb, 0x76, 0x76, 0x30, 0xfb, + 0x76, 0x6c, 0x9b, 0xca, 0x0d, 0xb2, 0x4d, 0x7d, 0x00, 0x13, 0x9b, 0xd4, 0x6e, 0xf9, 0x9b, 0xae, + 0x48, 0x00, 0xcf, 0x1d, 0x5d, 0x65, 0x42, 0x1c, 0x56, 0x26, 0x95, 0xc1, 0xd0, 0x61, 0x27, 0x60, + 0x04, 0x4c, 0xb4, 0xf2, 0x8c, 0xf0, 0xa6, 0xce, 0x41, 0xd5, 0xf0, 0x87, 0xfa, 0x68, 0xf8, 0x35, + 0x18, 0x17, 0x74, 0x51, 0x52, 0xc1, 0x48, 0x15, 0x65, 0x45, 0x08, 0x97, 0xb5, 0x87, 0x4f, 0xf4, + 0x85, 0xb5, 0x73, 0x2d, 0x54, 0x63, 0xc2, 0xba, 0x60, 0xb9, 0xdd, 0xe8, 0xb8, 0x4e, 0x1b, 0xbb, + 0x60, 0x24, 0xea, 0x02, 0x2a, 0xc0, 0xbc, 0x0b, 0x14, 0x24, 0xf2, 0x36, 0x4c, 0x96, 0x36, 0xaa, + 0x2a, 0x59, 0x21, 0x32, 0xb1, 0xdb, 0x1d, 0xc7, 0xd2, 0x48, 0x63, 0xb8, 0xfd, 0xb4, 0xb2, 0xd1, + 0x7f, 0x35, 0x5a, 0x99, 0xf1, 0x0f, 0x46, 0xe5, 0xf2, 0xfe, 0x6c, 0x8d, 0x81, 0xba, 0x79, 0x2f, + 0x77, 0x4c, 0xf3, 0x5e, 0xfe, 0x28, 0xe5, 0x44, 0xd3, 0x98, 0x86, 0x8e, 0xa1, 0x31, 0x0d, 0x3f, + 0xb1, 0xa9, 0x6e, 0xe4, 0x98, 0x3a, 0x50, 0x6c, 0xa5, 0x15, 0x06, 0x59, 0x69, 0xa9, 0x7a, 0xd3, + 0xe8, 0x93, 0xeb, 0x4d, 0x70, 0x6c, 0xbd, 0xa9, 0x16, 0x85, 0x8d, 0x8d, 0x1d, 0xe9, 0x8d, 0x7b, + 0x4e, 0x9c, 0x57, 0xa6, 0xd3, 0x53, 0xf6, 0x84, 0x01, 0x64, 0x9f, 0x2b, 0x65, 0xec, 0x9b, 0xe9, + 0xca, 0x58, 0xff, 0xdd, 0xe6, 0xcf, 0xd5, 0xb1, 0xa7, 0xa2, 0x8e, 0x79, 0x38, 0x60, 0x5b, 0xb6, + 0xd7, 0xc6, 0x23, 0xe7, 0x55, 0x18, 0x91, 0x59, 0xb0, 0x32, 0x91, 0xf5, 0x24, 0x99, 0xfe, 0x4a, + 0x62, 0x91, 0x45, 0x28, 0x48, 0x62, 0x35, 0xa3, 0xf7, 0xbe, 0x80, 0x69, 0x09, 0x86, 0x04, 0xcc, + 0xf8, 0x3b, 0x79, 0x29, 0x14, 0x58, 0x3b, 0xc4, 0xeb, 0xcf, 0x65, 0x65, 0x12, 0x28, 0xca, 0x60, + 0x6c, 0x98, 0x63, 0x7e, 0x7a, 0x3a, 0xc9, 0xa7, 0xca, 0x4b, 0x16, 0xbd, 0x3a, 0x95, 0x1b, 0xe0, + 0xd5, 0xa9, 0x37, 0xb5, 0x27, 0x9b, 0xf2, 0xd1, 0x1b, 0x21, 0x6c, 0xa1, 0xf4, 0x7f, 0xac, 0xe9, + 0x86, 0xfa, 0xb6, 0xd2, 0x50, 0x94, 0xa2, 0x03, 0x29, 0xfb, 0xbc, 0xaa, 0x14, 0x6a, 0xb7, 0xc3, + 0xc7, 0xc9, 0xf8, 0x37, 0xf2, 0xaf, 0x35, 0xe3, 0xdf, 0x32, 0x80, 0xf2, 0xe2, 0x2e, 0xbf, 0xdc, + 0x79, 0x89, 0x75, 0xd3, 0xd1, 0xaf, 0xed, 0x2a, 0x84, 0xc6, 0xef, 0x12, 0x98, 0xae, 0xd5, 0xd6, + 0x2b, 0x8e, 0xbd, 0xdb, 0x76, 0xfd, 0xc0, 0xa9, 0x57, 0xdb, 0x3b, 0x2e, 0x53, 0xed, 0x42, 0x01, + 0xa3, 0xa4, 0x76, 0x8b, 0x84, 0x4b, 0x58, 0xcc, 0x8e, 0x0e, 0xcb, 0x9e, 0xe7, 0x7a, 0xea, 0xd1, + 0x81, 0x32, 0x80, 0xc9, 0xe1, 0x4c, 0x7b, 0xaa, 0x75, 0xf9, 0xd3, 0xa9, 0xfc, 0xbe, 0x0d, 0xb5, + 0x27, 0x9f, 0x83, 0x4c, 0x59, 0x46, 0x68, 0x72, 0xc2, 0x0a, 0x6d, 0xfa, 0x94, 0x96, 0x37, 0x30, + 0x2a, 0xe6, 0xe2, 0x53, 0x6c, 0x6f, 0xb8, 0x14, 0x3b, 0x08, 0x57, 0xaf, 0xb7, 0x13, 0x6b, 0xe0, + 0x00, 0x4e, 0x68, 0x01, 0x4c, 0x83, 0x1a, 0x0e, 0x5f, 0x11, 0xda, 0x9a, 0x81, 0xf1, 0xb2, 0x29, + 0xd6, 0x43, 0xf5, 0x8d, 0x83, 0xd4, 0x1a, 0xc8, 0x8f, 0x64, 0xe0, 0x5c, 0x6a, 0x49, 0xb8, 0xba, + 0xc7, 0xb4, 0xdc, 0x8d, 0x8a, 0xd0, 0xe0, 0xaf, 0x39, 0xf4, 0xaa, 0xda, 0x4a, 0x11, 0x05, 0xfd, + 0x6b, 0x22, 0xbf, 0x96, 0x81, 0x53, 0x1a, 0x46, 0x28, 0x3e, 0xfd, 0x30, 0xb6, 0x37, 0x75, 0x5e, + 0x7f, 0xfc, 0x74, 0xe6, 0xf5, 0x05, 0xfd, 0x5b, 0x22, 0xe9, 0xae, 0x7e, 0x43, 0xaf, 0x16, 0x92, + 0x87, 0x30, 0x8d, 0x45, 0xd2, 0x88, 0xc9, 0xe6, 0xac, 0xb0, 0x7d, 0xce, 0x46, 0xcd, 0xe6, 0x41, + 0x79, 0xf8, 0x22, 0xdf, 0xe2, 0x77, 0x0f, 0x17, 0x26, 0x34, 0x74, 0x99, 0x0d, 0xd1, 0x8a, 0x2c, + 0xa1, 0x4e, 0x7b, 0xc7, 0x55, 0xb7, 0xde, 0x44, 0x15, 0xe4, 0xbf, 0xc8, 0xc0, 0x1c, 0x83, 0xf2, + 0xcf, 0xb8, 0xe9, 0xb9, 0xad, 0xb0, 0x5c, 0xfa, 0x49, 0xf4, 0xe8, 0xb6, 0xe6, 0xd3, 0xe9, 0xb6, + 0x97, 0xb0, 0xc9, 0x5c, 0x26, 0x58, 0x3b, 0x9e, 0xdb, 0x8a, 0x9a, 0xaf, 0xbd, 0x28, 0xdb, 0xab, + 0x91, 0xe4, 0x07, 0x32, 0x70, 0x5a, 0xb3, 0xbc, 0xa8, 0x39, 0xa3, 0x45, 0xe8, 0xe3, 0x4c, 0x18, + 0x14, 0x1d, 0x15, 0x95, 0xaf, 0x88, 0xf9, 0x7f, 0x11, 0x5b, 0x10, 0xed, 0x16, 0xd8, 0x16, 0xab, + 0xc5, 0xb1, 0x94, 0x26, 0xf4, 0xae, 0x85, 0x38, 0x30, 0x8d, 0x77, 0x94, 0x9a, 0x3f, 0xcf, 0x6c, + 0x6f, 0x7f, 0x9e, 0xf0, 0xe5, 0x24, 0x4c, 0x48, 0xdb, 0xdb, 0xa9, 0x27, 0xc9, 0x95, 0xfc, 0x05, + 0x38, 0x9d, 0x00, 0x86, 0xab, 0xed, 0x44, 0xcf, 0xd5, 0xf6, 0xea, 0xe3, 0xc3, 0x85, 0x97, 0xd3, + 0x6a, 0x4b, 0x5b, 0x69, 0xbd, 0x6b, 0x20, 0x36, 0x40, 0x54, 0x28, 0x1e, 0xa6, 0x4d, 0x9f, 0xa0, + 0xaf, 0x8a, 0xf9, 0xa1, 0xe0, 0x33, 0x59, 0xae, 0xb4, 0x41, 0xdd, 0xf2, 0x22, 0x24, 0x42, 0x61, + 0x5c, 0x49, 0xc6, 0x7b, 0x80, 0x2f, 0xd4, 0xf6, 0xac, 0xe4, 0xbb, 0x87, 0x0b, 0x1a, 0x36, 0x53, + 0xb1, 0xd5, 0x2c, 0xbf, 0xaa, 0x8a, 0xad, 0x21, 0x92, 0x5f, 0xc9, 0xc0, 0x2c, 0x03, 0x44, 0x93, + 0x4a, 0x7c, 0xd4, 0x5c, 0xbf, 0x59, 0xbf, 0xf7, 0x74, 0x66, 0xfd, 0x0b, 0xd8, 0x46, 0x75, 0xd6, + 0x27, 0xba, 0x24, 0xb5, 0x71, 0x38, 0xdb, 0xb5, 0xeb, 0x70, 0x6d, 0xb6, 0x9f, 0x1e, 0x60, 0xb6, + 0xf3, 0x01, 0x38, 0x7a, 0xb6, 0xf7, 0xac, 0x85, 0x6c, 0xc2, 0xb8, 0xd0, 0xae, 0x79, 0x87, 0x3d, + 0xaf, 0x25, 0xf2, 0x54, 0x8b, 0xf8, 0x91, 0x47, 0xe4, 0x2a, 0x4e, 0x7c, 0xa1, 0xc6, 0x85, 0xb4, + 0x61, 0x86, 0xff, 0xd6, 0x6d, 0x1d, 0x0b, 0x3d, 0x6d, 0x1d, 0x97, 0xc4, 0x17, 0x9d, 0x17, 0xfc, + 0x63, 0x26, 0x0f, 0x35, 0x97, 0x42, 0x0a, 0x63, 0xd2, 0x01, 0xa2, 0x81, 0xf9, 0xa2, 0x3d, 0xdf, + 0xdf, 0xc2, 0xf1, 0xb2, 0xa8, 0x73, 0x21, 0x5e, 0x67, 0x7c, 0xe5, 0xa6, 0xf0, 0x26, 0x36, 0x4c, + 0x09, 0x28, 0x3b, 0x4b, 0xa3, 0x84, 0x7f, 0x41, 0xcb, 0x66, 0x11, 0x2b, 0xe5, 0x8a, 0xb9, 0xac, + 0x09, 0xb3, 0x8d, 0xc4, 0x04, 0x7a, 0x9c, 0x1f, 0x59, 0x87, 0xe9, 0x52, 0xa7, 0xd3, 0x74, 0x68, + 0x03, 0xbf, 0x92, 0x3f, 0x32, 0x6a, 0x44, 0x0f, 0x4b, 0xd8, 0xbc, 0x50, 0x9c, 0x16, 0xe2, 0x2f, + 0x8c, 0x26, 0x69, 0x8d, 0xef, 0x64, 0x12, 0x8d, 0x26, 0xaf, 0xc1, 0x28, 0xfe, 0x50, 0x02, 0xa4, + 0xd1, 0x08, 0xc0, 0x9b, 0x88, 0xc6, 0x88, 0x08, 0x81, 0x29, 0x4b, 0x6a, 0x92, 0xa4, 0x1c, 0x57, + 0x96, 0xc4, 0x49, 0x35, 0x3a, 0x9b, 0x2e, 0x48, 0x3f, 0xcb, 0x5c, 0xa4, 0x74, 0xa1, 0x9f, 0xa5, + 0xf0, 0xae, 0x34, 0x7e, 0x20, 0xab, 0x4f, 0x3b, 0x72, 0x49, 0xd1, 0xdb, 0x95, 0x34, 0x4d, 0x52, + 0x6f, 0x57, 0xb4, 0xf5, 0xbf, 0x9d, 0x81, 0x99, 0x75, 0x6f, 0xd7, 0x6e, 0x3b, 0xdf, 0xe6, 0xe9, + 0x1e, 0x5d, 0x1c, 0x97, 0xfe, 0x6f, 0xf4, 0x3c, 0xad, 0xb7, 0x46, 0x5c, 0xa5, 0x62, 0x36, 0x53, + 0x70, 0xca, 0x98, 0x69, 0xed, 0x41, 0xcf, 0x75, 0x6c, 0x98, 0xf2, 0xe4, 0x0b, 0x47, 0xe7, 0x70, + 0xe3, 0xc7, 0xb2, 0x30, 0xa6, 0x2c, 0x01, 0xf2, 0x45, 0x18, 0x57, 0xf9, 0xa8, 0x06, 0x24, 0xb5, + 0x5a, 0x53, 0xc3, 0x42, 0x0b, 0x12, 0xb5, 0x5b, 0x9a, 0x05, 0x89, 0x4d, 0x74, 0x84, 0x1e, 0xf3, + 0x68, 0xf3, 0x5e, 0xca, 0xd1, 0xe6, 0x58, 0xaf, 0xd1, 0xbe, 0x9d, 0x3c, 0xe0, 0x0c, 0xfe, 0x78, + 0xac, 0xf1, 0x93, 0x19, 0x28, 0xc6, 0x17, 0xe9, 0x67, 0xd2, 0x2b, 0xc7, 0xb8, 0x2d, 0xf8, 0xd1, + 0x6c, 0x98, 0x89, 0x5b, 0xc6, 0xe3, 0x3c, 0xab, 0x2e, 0x31, 0xef, 0x68, 0x86, 0xfc, 0x33, 0x7a, + 0x6a, 0x19, 0x35, 0x92, 0x35, 0x3d, 0x9f, 0x54, 0xfe, 0x67, 0x7f, 0x7e, 0xe1, 0x39, 0xe3, 0x43, + 0x98, 0x8d, 0x77, 0x07, 0x1a, 0xf3, 0x4b, 0x30, 0xa5, 0xc3, 0xe3, 0x79, 0xfc, 0xe3, 0x54, 0x66, + 0x1c, 0xdf, 0xf8, 0xbd, 0x6c, 0x9c, 0xb7, 0x70, 0x8f, 0x61, 0x42, 0xa7, 0x6d, 0x6f, 0x37, 0xc3, + 0x3c, 0xde, 0x5c, 0xe8, 0x70, 0x90, 0x29, 0xcb, 0x8e, 0xf3, 0xb0, 0x45, 0x18, 0x55, 0x92, 0x4b, + 0x8f, 0x2a, 0x21, 0x37, 0x62, 0x3e, 0x66, 0x4a, 0x0a, 0x84, 0x7d, 0xba, 0x6d, 0x45, 0x7e, 0x66, + 0x31, 0xd7, 0xb2, 0x25, 0x98, 0xd5, 0xf2, 0x79, 0x4a, 0xfa, 0xa1, 0xc8, 0x76, 0x1b, 0x60, 0x01, + 0x27, 0x4e, 0x45, 0x26, 0x2b, 0x30, 0xc2, 0x9a, 0x79, 0xd7, 0xee, 0x08, 0x1b, 0x3d, 0x09, 0x63, + 0xcc, 0x9a, 0xe1, 0x81, 0x4f, 0x09, 0x33, 0x6b, 0x52, 0xb6, 0xe5, 0x6b, 0x8f, 0x39, 0x73, 0x44, + 0xe3, 0x9f, 0x67, 0xd8, 0xfa, 0xaf, 0x3f, 0xf8, 0x9c, 0xbd, 0x8e, 0xc1, 0x3e, 0xa9, 0x8f, 0xf7, + 0xd6, 0x1f, 0x66, 0x79, 0x2a, 0x76, 0x31, 0x7d, 0xde, 0x84, 0xe1, 0x4d, 0xdb, 0xdb, 0xa5, 0x81, + 0x48, 0x52, 0xae, 0x72, 0xe1, 0x05, 0x51, 0x82, 0x86, 0x00, 0x7f, 0x9b, 0x82, 0x40, 0xb5, 0x85, + 0x65, 0x07, 0xb2, 0x85, 0x29, 0x96, 0xde, 0xdc, 0x53, 0xb3, 0xf4, 0x7e, 0x4f, 0x98, 0x75, 0xbd, + 0x14, 0x0c, 0x90, 0x2e, 0xf2, 0x7c, 0xfc, 0xd5, 0x82, 0x44, 0x62, 0xcf, 0x88, 0x1d, 0xb9, 0xa1, + 0xbe, 0x83, 0xa0, 0x04, 0x6a, 0x1c, 0xf1, 0xe2, 0x81, 0xf1, 0x87, 0x39, 0xde, 0xc7, 0xa2, 0xa3, + 0x2e, 0x6a, 0x41, 0x5c, 0xb8, 0x4e, 0x98, 0xa0, 0x57, 0xe3, 0x69, 0xd1, 0xb1, 0xe3, 0x22, 0xe4, + 0xd9, 0xdc, 0x14, 0xbd, 0x89, 0x78, 0x6c, 0xfe, 0xaa, 0x78, 0xac, 0x9c, 0xad, 0x65, 0xdc, 0x93, + 0xd4, 0x97, 0x67, 0x70, 0xdb, 0x52, 0xd7, 0x32, 0x62, 0x90, 0x4b, 0x90, 0x5f, 0x73, 0x1b, 0x32, + 0x2d, 0xe9, 0x2c, 0x86, 0xf2, 0xba, 0x0d, 0x85, 0xe5, 0x5c, 0xc6, 0x44, 0x0c, 0xf6, 0xad, 0x61, + 0x22, 0x73, 0xf5, 0x5b, 0x5b, 0x3b, 0xb6, 0xc8, 0x9d, 0xa5, 0x7e, 0x6b, 0x94, 0xf3, 0x7c, 0x19, + 0x26, 0xf5, 0xb7, 0x27, 0x85, 0x6f, 0x1b, 0x5a, 0x6c, 0x63, 0x4f, 0x58, 0xaa, 0x86, 0x76, 0x9d, + 0x88, 0x94, 0x61, 0x42, 0x4b, 0x87, 0x26, 0x2e, 0xcb, 0xd0, 0xbc, 0xa9, 0x27, 0x53, 0x53, 0xcd, + 0x9b, 0x1a, 0x09, 0xdb, 0xcf, 0x45, 0xfb, 0x95, 0x2b, 0xb3, 0x44, 0xdb, 0x05, 0x0e, 0xb9, 0x0e, + 0x05, 0x1e, 0x33, 0x5b, 0xad, 0xa8, 0x17, 0x1f, 0x3e, 0xc2, 0x62, 0x31, 0xe7, 0x12, 0x51, 0x89, + 0x91, 0xfc, 0x02, 0x14, 0x85, 0x48, 0x8a, 0x5e, 0x79, 0x3c, 0x0b, 0xf9, 0xa5, 0x6a, 0xc5, 0x54, + 0xc5, 0x48, 0xdd, 0x69, 0x78, 0x26, 0x42, 0x8d, 0x9f, 0xca, 0xc0, 0xe9, 0x35, 0x1a, 0xec, 0xbb, + 0xde, 0x03, 0x93, 0xfa, 0x81, 0xe7, 0xf0, 0x87, 0x8b, 0x70, 0x21, 0x7e, 0x91, 0xbc, 0x0d, 0x43, + 0xe8, 0x64, 0x15, 0xdb, 0x19, 0xe2, 0x75, 0x94, 0x27, 0xc4, 0x04, 0x1e, 0x42, 0x8f, 0x2d, 0x93, + 0x13, 0x91, 0x37, 0x21, 0x5f, 0xa1, 0xed, 0x83, 0xd8, 0xd3, 0x2d, 0x09, 0xe2, 0x50, 0x20, 0x34, + 0x68, 0xfb, 0xc0, 0x44, 0x12, 0xe3, 0x27, 0xb3, 0x70, 0x22, 0xa5, 0x59, 0xf7, 0xbf, 0xf8, 0x8c, + 0x4a, 0xc5, 0xb2, 0x26, 0x15, 0xe5, 0x7d, 0x67, 0xcf, 0x8e, 0x4f, 0x15, 0x92, 0x7f, 0x23, 0x03, + 0xa7, 0xf4, 0x09, 0x2a, 0xbc, 0x2a, 0xef, 0x5f, 0x27, 0x6f, 0xc1, 0xf0, 0x0a, 0xb5, 0x1b, 0x54, + 0x3e, 0xeb, 0x70, 0x22, 0xcc, 0x6e, 0xc3, 0x03, 0x02, 0x79, 0x21, 0x67, 0x1b, 0x85, 0x8f, 0x70, + 0x28, 0xa9, 0x88, 0xc6, 0x71, 0x7d, 0xdc, 0x90, 0xc1, 0xb9, 0x69, 0x55, 0xf5, 0xf1, 0x1a, 0xf8, + 0x6e, 0x06, 0xce, 0xf4, 0xa1, 0x61, 0x03, 0xc7, 0x86, 0x5e, 0x1d, 0x38, 0xdc, 0x51, 0x11, 0x4a, + 0xde, 0x85, 0xa9, 0x4d, 0xa1, 0xcf, 0xcb, 0xe1, 0xc8, 0x46, 0xeb, 0x45, 0xaa, 0xfa, 0x96, 0x1c, + 0x97, 0x38, 0xb2, 0x16, 0x35, 0x9e, 0xeb, 0x1b, 0x35, 0xae, 0x06, 0x61, 0xe7, 0x07, 0x0d, 0xc2, + 0xfe, 0x30, 0xfe, 0x62, 0xbb, 0xc8, 0x85, 0x17, 0x85, 0xa0, 0x67, 0x7a, 0x87, 0xa0, 0xf7, 0xcd, + 0xb8, 0x65, 0xfc, 0x58, 0x06, 0x8a, 0x3a, 0xef, 0x27, 0x1d, 0xcf, 0x77, 0xb4, 0xf1, 0x3c, 0x93, + 0x3e, 0x9e, 0xbd, 0x07, 0xf2, 0xff, 0xcc, 0xc4, 0x3f, 0x76, 0xa0, 0x11, 0x34, 0x60, 0xb8, 0xe2, + 0xb6, 0x6c, 0xa7, 0xad, 0x3e, 0x1a, 0xda, 0x40, 0x88, 0x29, 0x4a, 0x06, 0x8b, 0xd8, 0x3f, 0x0f, + 0x43, 0x6b, 0x6e, 0xbb, 0x54, 0x11, 0x4e, 0x87, 0xc8, 0xa7, 0xed, 0xb6, 0x2d, 0xbb, 0x61, 0xf2, + 0x02, 0xb2, 0x0a, 0x50, 0xab, 0x7b, 0x94, 0xb6, 0x6b, 0xce, 0xb7, 0x69, 0x4c, 0xd3, 0x60, 0x3d, + 0xd4, 0xec, 0xa2, 0x60, 0xc1, 0x3b, 0x1e, 0x1f, 0x11, 0x2d, 0xdf, 0xf9, 0xb6, 0x2a, 0x6f, 0x15, + 0x7a, 0x83, 0x02, 0x44, 0x44, 0xf8, 0x82, 0x9a, 0xd3, 0x10, 0xaf, 0xe2, 0x4e, 0x88, 0x17, 0xd4, + 0x18, 0x40, 0x7b, 0x41, 0x8d, 0x01, 0x98, 0x68, 0x5f, 0xa1, 0xce, 0xee, 0x1e, 0xf7, 0x3e, 0x99, + 0xe0, 0x53, 0x75, 0x0f, 0x21, 0xaa, 0x68, 0xe7, 0x38, 0xc6, 0xbf, 0x18, 0x82, 0xd3, 0x26, 0xdd, + 0x75, 0x98, 0x9a, 0x7c, 0xcf, 0x77, 0xda, 0xbb, 0x5a, 0x4c, 0xb5, 0x11, 0x9b, 0x48, 0x22, 0x01, + 0x31, 0x83, 0x84, 0x1d, 0x73, 0x19, 0x0a, 0x6c, 0x57, 0x54, 0xe6, 0x12, 0xde, 0xa1, 0xe0, 0x93, + 0xdf, 0x7c, 0x92, 0xcb, 0x62, 0xf2, 0x8a, 0xd8, 0xb5, 0x95, 0x14, 0xf1, 0x6c, 0xd7, 0xfe, 0xe4, + 0x70, 0x01, 0x6a, 0x07, 0x7e, 0x40, 0xf1, 0xc4, 0x26, 0x76, 0xee, 0x50, 0xb5, 0xce, 0xf7, 0x50, + 0xad, 0xef, 0xc2, 0x6c, 0xa9, 0xc1, 0x85, 0xb5, 0xdd, 0xdc, 0xf0, 0x9c, 0x76, 0xdd, 0xe9, 0xd8, + 0x4d, 0x79, 0x5c, 0xc4, 0x5e, 0xb6, 0xc3, 0x72, 0xab, 0x13, 0x22, 0x98, 0xa9, 0x64, 0xec, 0x33, + 0x2a, 0x6b, 0x35, 0x0c, 0x3d, 0x16, 0xd7, 0x63, 0xf8, 0x19, 0x8d, 0xb6, 0x8f, 0x5f, 0xe1, 0x9b, + 0x61, 0x31, 0x2a, 0xf5, 0xe8, 0xce, 0xb0, 0xb9, 0x5a, 0x8b, 0xa2, 0x93, 0x78, 0x06, 0x5b, 0xee, + 0xf2, 0x10, 0x34, 0x7d, 0x74, 0x7b, 0xd0, 0xf0, 0x22, 0xba, 0x5a, 0x6d, 0x85, 0xd1, 0x15, 0x12, + 0x74, 0xbe, 0xbf, 0xa7, 0xd2, 0x71, 0x3c, 0x72, 0x95, 0x4d, 0x85, 0x96, 0x1b, 0x50, 0x9c, 0xe7, + 0xa3, 0xd1, 0x11, 0xc0, 0x43, 0x28, 0x3f, 0x02, 0x28, 0x28, 0xe4, 0x6d, 0x98, 0x59, 0x5e, 0x5a, + 0x94, 0x46, 0xcd, 0x8a, 0x5b, 0xef, 0xe2, 0x05, 0x35, 0x60, 0x7d, 0x38, 0x86, 0xb4, 0xbe, 0xc8, + 0x26, 0x77, 0x1a, 0x1a, 0xb9, 0x08, 0x23, 0xd5, 0x0a, 0xef, 0xfb, 0x31, 0xf5, 0x99, 0x06, 0xe1, + 0xf8, 0x21, 0x0b, 0xc9, 0x7a, 0xa4, 0xa3, 0x8e, 0x1f, 0xa9, 0x4c, 0x9e, 0x1e, 0x40, 0x3f, 0x7d, + 0x13, 0x26, 0xca, 0x6e, 0x50, 0x6d, 0xfb, 0x81, 0xdd, 0xae, 0xd3, 0x6a, 0x45, 0xcd, 0x99, 0xb8, + 0xed, 0x06, 0x96, 0x23, 0x4a, 0x58, 0xcb, 0x75, 0x4c, 0xf2, 0x65, 0x24, 0xbd, 0x45, 0xdb, 0xd4, + 0x8b, 0x72, 0x25, 0x0e, 0xf1, 0xbe, 0x65, 0xa4, 0xbb, 0x61, 0x89, 0xa9, 0x23, 0x8a, 0x27, 0x24, + 0xf8, 0x53, 0x45, 0x4b, 0x6e, 0x83, 0xfa, 0xf7, 0xaf, 0x7d, 0xce, 0x9e, 0x90, 0x50, 0xbe, 0x0d, + 0x45, 0xe6, 0xb5, 0x54, 0xf9, 0xfa, 0xef, 0xe2, 0x13, 0x12, 0x09, 0x5c, 0xf2, 0x65, 0x18, 0xc2, + 0x9f, 0x42, 0xd9, 0x9a, 0x49, 0x61, 0x1b, 0x29, 0x5a, 0x75, 0xfe, 0xd2, 0x30, 0x12, 0x90, 0x2a, + 0x8c, 0x08, 0x3d, 0xff, 0x38, 0x89, 0xd0, 0xc5, 0x81, 0x81, 0xcf, 0x0c, 0x41, 0x6f, 0x34, 0x60, + 0x5c, 0xad, 0x90, 0xad, 0x88, 0x15, 0xdb, 0xdf, 0xa3, 0x0d, 0xf6, 0x4b, 0xbc, 0x61, 0x82, 0x2b, + 0x62, 0x0f, 0xa1, 0x16, 0x6b, 0x87, 0xa9, 0xa0, 0x30, 0x11, 0x5f, 0xf5, 0xef, 0xf9, 0xa2, 0x29, + 0xe2, 0xe4, 0xef, 0xa0, 0x15, 0xa9, 0x61, 0x8a, 0x22, 0xe3, 0x7b, 0x60, 0x76, 0xad, 0xdb, 0x6c, + 0xda, 0xdb, 0x4d, 0x2a, 0x73, 0x5c, 0x07, 0x76, 0x40, 0x49, 0x19, 0x86, 0x6a, 0xca, 0xdb, 0x85, + 0x33, 0x61, 0x12, 0xf1, 0x08, 0x07, 0x7d, 0xec, 0x32, 0x18, 0x06, 0x1e, 0x7b, 0xb5, 0x90, 0x93, + 0x1a, 0xbf, 0x13, 0xbd, 0x79, 0xbd, 0xe9, 0xd9, 0xf5, 0x07, 0xe1, 0xfb, 0x95, 0x83, 0x3e, 0xdf, + 0x7d, 0x5b, 0x36, 0x42, 0xdf, 0x3f, 0xd3, 0x1a, 0x7c, 0x54, 0x63, 0xc8, 0xdb, 0x30, 0x26, 0xf6, + 0x50, 0x25, 0x79, 0x11, 0x66, 0x88, 0x90, 0x0f, 0xe8, 0xc7, 0x7c, 0x1c, 0x54, 0x74, 0x54, 0x0d, + 0xf4, 0x4f, 0xb9, 0x7f, 0xed, 0xb3, 0x50, 0x0d, 0xf4, 0x3a, 0xfa, 0x4c, 0xdd, 0xdf, 0x18, 0x8b, + 0xf7, 0xad, 0x98, 0xbb, 0x37, 0xd4, 0x74, 0x25, 0x99, 0xe8, 0xa0, 0x16, 0xa5, 0x2b, 0x51, 0x0f, + 0x6a, 0x21, 0x6a, 0x38, 0x26, 0xd9, 0x23, 0xc6, 0xe4, 0x5d, 0x39, 0x26, 0xb9, 0xde, 0x13, 0x63, + 0xa6, 0xcf, 0x38, 0xd4, 0xa2, 0x15, 0x92, 0x1f, 0xe8, 0x94, 0xff, 0x1c, 0xe6, 0x65, 0xe5, 0x24, + 0x71, 0x29, 0x2a, 0x38, 0xa9, 0xa6, 0x83, 0xa1, 0xc1, 0x99, 0x1e, 0x21, 0x9a, 0xbf, 0x02, 0xe3, + 0xa5, 0x20, 0xb0, 0xeb, 0x7b, 0xb4, 0x51, 0x61, 0xe2, 0x49, 0xc9, 0xac, 0x60, 0x0b, 0xb8, 0x7a, + 0x87, 0xa3, 0xe2, 0xf2, 0x4c, 0x61, 0xb6, 0x2f, 0xbc, 0xf5, 0xc2, 0x4c, 0x61, 0x0c, 0xa2, 0x67, + 0x0a, 0x63, 0x10, 0x72, 0x15, 0x46, 0xaa, 0xed, 0x87, 0x0e, 0xeb, 0x93, 0x82, 0xf2, 0x4a, 0x3f, + 0x07, 0xa9, 0xc2, 0x55, 0x60, 0x91, 0x37, 0x15, 0x1d, 0x7b, 0x34, 0x3a, 0x4f, 0x73, 0x0b, 0x4c, + 0x18, 0x94, 0xad, 0xea, 0xcf, 0xa1, 0xd2, 0x7d, 0x03, 0x46, 0xa4, 0x61, 0x0d, 0xa2, 0x33, 0xb4, + 0xa0, 0x4c, 0x46, 0x7f, 0x4a, 0x64, 0x7c, 0xf2, 0x50, 0x79, 0x8b, 0x65, 0x4c, 0x79, 0xf2, 0x50, + 0x79, 0x8b, 0x45, 0x7b, 0xf2, 0x50, 0x79, 0x95, 0x25, 0xb4, 0x49, 0x8c, 0x1f, 0x69, 0x93, 0xb8, + 0x0f, 0xe3, 0x1b, 0xb6, 0x17, 0x38, 0x4c, 0x47, 0x69, 0x07, 0xfe, 0xdc, 0x84, 0x66, 0xc6, 0x53, + 0x8a, 0xca, 0xcf, 0xcb, 0x57, 0xfa, 0x3a, 0x0a, 0xbe, 0xfe, 0x9c, 0x5c, 0x04, 0x4f, 0xf7, 0xd5, + 0x9b, 0x7c, 0x12, 0x5f, 0x3d, 0xec, 0x54, 0x34, 0xdd, 0x4c, 0x45, 0x06, 0x02, 0xd4, 0xa1, 0x63, + 0xf6, 0x9b, 0x10, 0x91, 0x7c, 0x0d, 0xc6, 0xd9, 0xdf, 0xf8, 0x30, 0xbe, 0x43, 0xfd, 0xb9, 0x22, + 0x7e, 0xdc, 0xf3, 0xa9, 0xab, 0x9f, 0xbf, 0x9e, 0x5f, 0xa3, 0x01, 0x5f, 0xc0, 0xc8, 0x38, 0x6e, + 0x93, 0xd5, 0xb8, 0x91, 0xf7, 0x60, 0x9c, 0xcd, 0xbe, 0x6d, 0xdb, 0xe7, 0xaa, 0xe9, 0x74, 0xe4, + 0x6d, 0xd9, 0x10, 0xf0, 0x44, 0xb2, 0x3e, 0x95, 0x80, 0x6d, 0xf3, 0xa5, 0x0e, 0x17, 0x90, 0x44, + 0x99, 0xed, 0x9d, 0x84, 0x70, 0x94, 0x68, 0xe4, 0x7d, 0x18, 0x2f, 0x75, 0x3a, 0x91, 0xc4, 0x99, + 0x51, 0xec, 0x32, 0x9d, 0x8e, 0x95, 0x2a, 0x75, 0x34, 0x8a, 0xb8, 0x60, 0x9e, 0x3d, 0x96, 0x60, + 0x26, 0xaf, 0x87, 0xda, 0xfa, 0x89, 0xc8, 0xc8, 0x28, 0xce, 0x31, 0x9a, 0xea, 0xcf, 0x15, 0xf7, + 0x25, 0x98, 0xe0, 0x56, 0x37, 0xa9, 0xcd, 0x9c, 0x4c, 0xac, 0x9e, 0x14, 0xa5, 0x46, 0xa7, 0x21, + 0xcb, 0x30, 0xc9, 0x03, 0xdd, 0x9a, 0x22, 0x8b, 0xe2, 0xdc, 0xa9, 0xe8, 0xf9, 0x65, 0x1e, 0x1f, + 0xd7, 0xc4, 0xe4, 0xda, 0xb6, 0xc6, 0x25, 0x46, 0x64, 0xfc, 0x51, 0x06, 0x4e, 0xf5, 0x18, 0xf1, + 0x30, 0xc7, 0x5e, 0xa6, 0x7f, 0x8e, 0x3d, 0x26, 0x39, 0xf4, 0x43, 0x3a, 0x7e, 0xbf, 0xd0, 0xb2, + 0xd4, 0xf1, 0x92, 0xfa, 0x96, 0x0b, 0x44, 0xe4, 0xaf, 0x17, 0x55, 0xdf, 0x76, 0xd1, 0x52, 0x98, + 0x4b, 0x6e, 0x42, 0x02, 0x8f, 0x37, 0xaa, 0x6c, 0x3c, 0x3e, 0x5c, 0x78, 0x5e, 0xa4, 0xc7, 0x0f, + 0x87, 0xf5, 0x63, 0x57, 0x5b, 0xc1, 0x29, 0xac, 0x8d, 0xc3, 0x0c, 0x8c, 0x29, 0xeb, 0x90, 0x9c, + 0x57, 0xc2, 0xe6, 0x8a, 0xfc, 0x81, 0x05, 0x85, 0x43, 0x96, 0xef, 0x44, 0xb8, 0xa8, 0xb2, 0x47, + 0xdb, 0x43, 0xef, 0x32, 0x55, 0x48, 0xc9, 0x43, 0xd8, 0xd2, 0x8c, 0x97, 0x26, 0x96, 0xe3, 0xe3, + 0xa2, 0xb6, 0x1f, 0x94, 0xea, 0x81, 0xf3, 0x90, 0x0e, 0xb0, 0xe9, 0x44, 0x8f, 0x8b, 0xda, 0x7e, + 0x60, 0xd9, 0x48, 0x96, 0x78, 0x5c, 0x34, 0x64, 0x68, 0xfc, 0x60, 0x06, 0xe0, 0x5e, 0x75, 0x09, + 0x13, 0x89, 0x3e, 0xa9, 0x52, 0x90, 0x9e, 0x9c, 0x4d, 0x72, 0xef, 0xa3, 0x0e, 0xfc, 0x8f, 0x19, + 0x98, 0xd4, 0xd1, 0xc8, 0xbb, 0x30, 0x55, 0xab, 0x7b, 0x6e, 0xb3, 0xb9, 0x6d, 0xd7, 0x1f, 0xac, + 0x3a, 0x6d, 0xca, 0xd3, 0x62, 0x0d, 0xf1, 0xbd, 0xc8, 0x0f, 0x8b, 0xac, 0x26, 0x2b, 0x33, 0xe3, + 0xc8, 0xe4, 0x87, 0x32, 0x30, 0x51, 0xdb, 0x73, 0xf7, 0xa3, 0x37, 0xdf, 0xf9, 0x80, 0x7c, 0x9d, + 0xad, 0x6d, 0x7f, 0xcf, 0xdd, 0xb7, 0x52, 0x1e, 0x7e, 0xff, 0xe4, 0x70, 0xe1, 0x9d, 0xc1, 0xae, + 0x89, 0xeb, 0x2e, 0x9e, 0x64, 0x02, 0xff, 0x8a, 0x56, 0x89, 0xa9, 0xd7, 0x69, 0xfc, 0x69, 0x06, + 0xc6, 0xf0, 0xcc, 0xd3, 0x6c, 0xa2, 0xce, 0xf5, 0x79, 0x7a, 0xea, 0x27, 0xfc, 0xae, 0x3e, 0x03, + 0xfb, 0x06, 0x4c, 0xc5, 0xd0, 0x88, 0x01, 0xc3, 0x35, 0x0c, 0x95, 0x56, 0x0d, 0x14, 0x3c, 0x78, + 0xda, 0x14, 0x25, 0xc6, 0xb2, 0x42, 0x76, 0xff, 0x1a, 0xde, 0x32, 0x2e, 0x02, 0x38, 0x12, 0x24, + 0x4f, 0x36, 0x24, 0xde, 0x92, 0xfb, 0xd7, 0x4c, 0x05, 0xcb, 0x58, 0x83, 0xe1, 0x9a, 0xeb, 0x05, + 0xe5, 0x03, 0x7e, 0x98, 0xa8, 0x50, 0xbf, 0xae, 0x5e, 0x23, 0x3a, 0x68, 0xba, 0xaf, 0x9b, 0xa2, + 0x88, 0x2c, 0xc0, 0xd0, 0x4d, 0x87, 0x36, 0x1b, 0xaa, 0xbf, 0xe8, 0x0e, 0x03, 0x98, 0x1c, 0xce, + 0x0e, 0x5c, 0x27, 0xa3, 0x7c, 0xdb, 0x91, 0x63, 0xea, 0x93, 0xae, 0x9b, 0x25, 0xad, 0x7f, 0x5f, + 0xd0, 0x5f, 0xd2, 0xd5, 0x6a, 0xea, 0xd3, 0xd5, 0xff, 0x49, 0x06, 0xe6, 0x7b, 0x93, 0xa8, 0xbe, + 0xae, 0x99, 0x3e, 0xbe, 0xae, 0x2f, 0xc5, 0xaf, 0xbd, 0x10, 0x4d, 0x5c, 0x7b, 0x45, 0x97, 0x5d, + 0x15, 0x74, 0x35, 0xae, 0x87, 0x0f, 0x9d, 0x9f, 0xef, 0xd3, 0x66, 0x44, 0xe4, 0xc3, 0x1c, 0x20, + 0x8d, 0x29, 0x68, 0x8d, 0x5f, 0xcf, 0xc3, 0xe9, 0x9e, 0x14, 0x64, 0x45, 0x49, 0xdd, 0x3f, 0x19, + 0x26, 0x0d, 0xef, 0x89, 0x7f, 0x05, 0xff, 0x45, 0x6f, 0xb2, 0x78, 0x30, 0xcd, 0x7a, 0x98, 0xb2, + 0x3d, 0x8b, 0xbc, 0x5e, 0x3d, 0x92, 0x17, 0x47, 0x47, 0x66, 0x90, 0xcc, 0xde, 0x8e, 0x61, 0x57, + 0x34, 0xb0, 0x9d, 0xa6, 0xaf, 0x2e, 0xbb, 0x06, 0x07, 0x99, 0xb2, 0x2c, 0x72, 0x40, 0xce, 0xa7, + 0x3b, 0x20, 0x1b, 0xff, 0x22, 0x03, 0xa3, 0x61, 0xb3, 0xc9, 0x3c, 0x9c, 0xdc, 0x34, 0x4b, 0x4b, + 0xcb, 0xd6, 0xe6, 0x87, 0x1b, 0xcb, 0xd6, 0xbd, 0xb5, 0xda, 0xc6, 0xf2, 0x52, 0xf5, 0x66, 0x75, + 0xb9, 0x52, 0x7c, 0x8e, 0x4c, 0xc3, 0xc4, 0xbd, 0xb5, 0x3b, 0x6b, 0xeb, 0x5b, 0x6b, 0xd6, 0xb2, + 0x69, 0xae, 0x9b, 0xc5, 0x0c, 0x99, 0x80, 0x51, 0xb3, 0x5c, 0x5a, 0xb2, 0xd6, 0xd6, 0x2b, 0xcb, + 0xc5, 0x2c, 0x29, 0xc2, 0xf8, 0xd2, 0xfa, 0xda, 0xda, 0xf2, 0xd2, 0x66, 0xf5, 0x7e, 0x75, 0xf3, + 0xc3, 0x62, 0x8e, 0x10, 0x98, 0x44, 0x84, 0x0d, 0xb3, 0xba, 0xb6, 0x54, 0xdd, 0x28, 0xad, 0x16, + 0xf3, 0x0c, 0xc6, 0xf0, 0x15, 0xd8, 0x50, 0xc8, 0xe8, 0xce, 0xbd, 0xf2, 0x72, 0x71, 0x98, 0xa1, + 0xb0, 0xbf, 0x14, 0x94, 0x11, 0x56, 0x3d, 0xa2, 0x54, 0x4a, 0x9b, 0xa5, 0x72, 0xa9, 0xb6, 0x5c, + 0x2c, 0x90, 0x53, 0x30, 0xa3, 0x81, 0xac, 0xd5, 0xf5, 0x5b, 0xd5, 0xb5, 0xe2, 0x28, 0x99, 0x85, + 0x62, 0x08, 0xab, 0x94, 0xad, 0x7b, 0xb5, 0x65, 0xb3, 0x08, 0x71, 0xe8, 0x5a, 0xe9, 0xee, 0x72, + 0x71, 0xcc, 0x78, 0x87, 0x87, 0x39, 0xf1, 0xae, 0x26, 0x27, 0x81, 0xd4, 0x36, 0x4b, 0x9b, 0xf7, + 0x6a, 0xb1, 0x8f, 0x1f, 0x83, 0x91, 0xda, 0xbd, 0xa5, 0xa5, 0xe5, 0x5a, 0xad, 0x98, 0x21, 0x00, + 0xc3, 0x37, 0x4b, 0xd5, 0xd5, 0xe5, 0x4a, 0x31, 0x6b, 0xfc, 0x44, 0x06, 0xa6, 0xa5, 0x06, 0x28, + 0xef, 0x30, 0x9e, 0x70, 0x2d, 0xbe, 0xab, 0x1d, 0x6c, 0x65, 0x14, 0x4a, 0xac, 0x92, 0x3e, 0xcb, + 0xd0, 0x83, 0x13, 0xa9, 0xc8, 0xe4, 0x43, 0x28, 0xca, 0x06, 0xdc, 0xb5, 0x83, 0xfa, 0x5e, 0x24, + 0xc6, 0x9e, 0x8f, 0x55, 0x12, 0x43, 0xe3, 0x56, 0xcd, 0xe8, 0x2d, 0xc1, 0x04, 0x1b, 0xe3, 0x67, + 0x33, 0x70, 0xaa, 0x07, 0x31, 0x59, 0x82, 0xe1, 0x30, 0x93, 0x79, 0x1f, 0x2f, 0xa9, 0xd9, 0xef, + 0x1e, 0x2e, 0x08, 0x44, 0x7c, 0x52, 0x0d, 0xff, 0x32, 0x87, 0xc3, 0xd4, 0xe4, 0x98, 0x1f, 0x9c, + 0xf7, 0xc9, 0xe9, 0x58, 0x77, 0x8a, 0x9a, 0x4a, 0x5b, 0xb5, 0xf2, 0x98, 0xe8, 0x90, 0x9c, 0xbd, + 0xef, 0x63, 0x82, 0x70, 0xe3, 0xa7, 0x32, 0x4c, 0x63, 0x8b, 0x23, 0x32, 0x45, 0xb6, 0xe4, 0xfb, + 0xdd, 0x16, 0x35, 0xdd, 0x26, 0x2d, 0x99, 0x6b, 0x62, 0x2f, 0x40, 0x15, 0xd4, 0xc6, 0x02, 0x3c, + 0x2b, 0x58, 0xb6, 0xd7, 0xd6, 0x6e, 0x44, 0x55, 0x1a, 0xf2, 0x26, 0x40, 0xf8, 0xb4, 0xbd, 0xcc, + 0x54, 0xc0, 0x33, 0x75, 0x08, 0xa8, 0xae, 0x44, 0x2b, 0xc8, 0xc6, 0x5f, 0xce, 0xc0, 0xb8, 0x38, + 0x09, 0x95, 0x9a, 0xd4, 0x0b, 0x9e, 0x6c, 0xce, 0xbc, 0xa9, 0xcd, 0x99, 0x30, 0x28, 0x40, 0xe1, + 0xcf, 0x8a, 0x53, 0xa7, 0xcb, 0x3f, 0xca, 0x40, 0x31, 0x8e, 0x48, 0xde, 0x85, 0x42, 0x8d, 0x3e, + 0xa4, 0x9e, 0x13, 0x1c, 0x08, 0xe9, 0x27, 0xdf, 0x7c, 0xe1, 0x38, 0xa2, 0x8c, 0x5b, 0x79, 0x7d, + 0xf1, 0xcb, 0x0c, 0x69, 0x06, 0x15, 0xe2, 0x8a, 0x2d, 0x23, 0xf7, 0xb4, 0x6c, 0x19, 0xc6, 0xff, + 0x96, 0x85, 0x53, 0xb7, 0x68, 0xa0, 0x7e, 0x53, 0x78, 0x85, 0xfd, 0x85, 0xc1, 0xbe, 0x4b, 0xf9, + 0x92, 0x39, 0x18, 0xc1, 0x22, 0x39, 0xbe, 0xa6, 0xfc, 0x49, 0xca, 0xe1, 0xbc, 0xce, 0x69, 0x8f, + 0x4a, 0xf4, 0xa8, 0xfb, 0x8a, 0x92, 0x66, 0x3e, 0x9c, 0xd6, 0x17, 0x61, 0x12, 0xf3, 0xa8, 0x76, + 0xd9, 0x72, 0xa0, 0x0d, 0x61, 0xd3, 0x29, 0x98, 0x31, 0x28, 0x79, 0x05, 0x8a, 0x0c, 0x52, 0xaa, + 0x3f, 0x68, 0xbb, 0xfb, 0x4d, 0xda, 0xd8, 0xa5, 0xfc, 0x2d, 0xf2, 0x82, 0x99, 0x80, 0x4b, 0x9e, + 0xf7, 0xda, 0xfc, 0x3c, 0x46, 0x1b, 0x68, 0x78, 0x11, 0x3c, 0x23, 0xe8, 0xfc, 0x9b, 0x30, 0xf6, + 0x29, 0x9f, 0x8c, 0x30, 0xfe, 0xd7, 0x0c, 0xcc, 0xe2, 0xc7, 0x29, 0x15, 0xcb, 0xe7, 0xbc, 0x64, + 0x6f, 0x29, 0x59, 0xd4, 0x6d, 0x06, 0xd2, 0x97, 0x42, 0xd8, 0x8b, 0x91, 0xa1, 0x27, 0x3b, 0x80, + 0xa1, 0xa7, 0x76, 0x9c, 0xa7, 0x4b, 0x07, 0xb4, 0x53, 0xf1, 0x07, 0xe7, 0xa3, 0x21, 0x37, 0x7e, + 0x28, 0x0b, 0x23, 0x26, 0xc5, 0x37, 0x1d, 0xc9, 0x45, 0x18, 0x59, 0x73, 0x03, 0xea, 0xdf, 0xd5, + 0x1e, 0xf0, 0x6c, 0x33, 0x90, 0xd5, 0x6a, 0x98, 0xb2, 0x90, 0x4d, 0xf8, 0x0d, 0xcf, 0x6d, 0x74, + 0xeb, 0x81, 0x3a, 0xe1, 0x3b, 0x1c, 0x64, 0xca, 0x32, 0xf2, 0x1a, 0x8c, 0x0a, 0xce, 0xe1, 0xc5, + 0x21, 0x3a, 0xbc, 0x7a, 0x34, 0x7c, 0x13, 0x34, 0x42, 0x40, 0x45, 0x95, 0x6b, 0x0d, 0x79, 0x45, + 0x51, 0x4d, 0x28, 0x02, 0x52, 0xff, 0x1e, 0xea, 0xa3, 0x7f, 0x7f, 0x01, 0x86, 0x4b, 0xbe, 0x4f, + 0x03, 0x19, 0x79, 0x3d, 0x1e, 0xa6, 0xc1, 0xf1, 0x69, 0xc0, 0x19, 0xdb, 0x58, 0x6e, 0x0a, 0x3c, + 0xe3, 0x9f, 0x67, 0x61, 0x08, 0xff, 0xc4, 0xcb, 0x52, 0xaf, 0xbe, 0xa7, 0x5d, 0x96, 0x7a, 0xf5, + 0x3d, 0x13, 0xa1, 0xe4, 0x1a, 0x9a, 0x1f, 0x64, 0xc2, 0x7f, 0xf1, 0xf5, 0x68, 0x57, 0x6f, 0x44, + 0x60, 0x53, 0xc5, 0x09, 0x6f, 0x91, 0x73, 0xa9, 0xf9, 0x16, 0x4e, 0x42, 0x76, 0xbd, 0x26, 0xbe, + 0x18, 0xf3, 0xc2, 0xb8, 0xbe, 0x99, 0x5d, 0xaf, 0x61, 0x6f, 0xac, 0x94, 0x16, 0xdf, 0xb8, 0xa1, + 0xbe, 0x35, 0xeb, 0xef, 0xd9, 0x8b, 0x6f, 0xdc, 0x30, 0x45, 0x09, 0xeb, 0x5f, 0x6c, 0x33, 0xde, + 0xa6, 0xf2, 0x48, 0x61, 0xec, 0x5f, 0xfc, 0x36, 0xbc, 0x39, 0x35, 0x23, 0x04, 0xb2, 0x08, 0x63, + 0x22, 0x3e, 0x1d, 0xf1, 0x95, 0xf8, 0x71, 0x11, 0xbf, 0xce, 0x29, 0x54, 0x24, 0x7e, 0xaf, 0x26, + 0x06, 0x48, 0x3e, 0x4b, 0x26, 0xee, 0xd5, 0xe4, 0x10, 0xfa, 0xa6, 0x82, 0x12, 0x05, 0x3a, 0x47, + 0x11, 0xc0, 0x6a, 0xa0, 0x33, 0xe6, 0xc5, 0x0d, 0x11, 0x8c, 0x5f, 0xcc, 0x42, 0x61, 0xa3, 0xd9, + 0xdd, 0x75, 0xda, 0xf7, 0xaf, 0x11, 0x02, 0x78, 0x36, 0x93, 0x89, 0x93, 0xd9, 0xdf, 0xe4, 0x34, + 0x14, 0xe4, 0x71, 0x4c, 0x0a, 0x24, 0x5f, 0x1c, 0xc5, 0xe6, 0x40, 0x8e, 0xbb, 0x78, 0x98, 0x5e, + 0xfe, 0x24, 0xd7, 0x20, 0x3c, 0x54, 0xf5, 0x3a, 0x7d, 0xe5, 0xd9, 0x62, 0x31, 0x43, 0x34, 0xf2, + 0x3a, 0xe0, 0x26, 0x21, 0x4e, 0x04, 0xd2, 0x4a, 0xcd, 0x9b, 0x26, 0x94, 0x0f, 0x4e, 0x82, 0x68, + 0xe4, 0x3a, 0x88, 0x89, 0x29, 0x9e, 0xbf, 0x3c, 0xa1, 0x13, 0xf0, 0x07, 0x85, 0x24, 0x89, 0x40, + 0x25, 0x6f, 0xc3, 0x58, 0xf4, 0xf0, 0x7c, 0xf4, 0xaa, 0xa5, 0x4a, 0xb9, 0x14, 0x95, 0xdf, 0xbf, + 0x66, 0xaa, 0xe8, 0xc6, 0x7f, 0x35, 0x0c, 0xe3, 0x6a, 0x7b, 0x88, 0x09, 0x33, 0x7e, 0x93, 0x1d, + 0xc8, 0x85, 0x43, 0x53, 0x07, 0x0b, 0xc5, 0x76, 0x7a, 0x5e, 0x6f, 0x10, 0xc3, 0xe3, 0xde, 0x4d, + 0x32, 0xb0, 0x7e, 0xe5, 0x39, 0x73, 0xda, 0x8f, 0xc0, 0x1c, 0x8f, 0x94, 0xa0, 0xe0, 0x76, 0xfc, + 0x5d, 0xda, 0x76, 0xe4, 0x25, 0xca, 0x05, 0x8d, 0xd1, 0xba, 0x28, 0x4c, 0xf0, 0x0a, 0xc9, 0xc8, + 0x1b, 0x30, 0xec, 0x76, 0x68, 0xdb, 0x76, 0xc4, 0x1e, 0x77, 0x26, 0xc6, 0x80, 0xb6, 0x4b, 0x55, + 0x85, 0x50, 0x20, 0x93, 0xab, 0x90, 0x77, 0x1f, 0x84, 0xe3, 0x75, 0x5a, 0x27, 0x7a, 0x10, 0xd8, + 0x0a, 0x09, 0x22, 0x32, 0x82, 0x8f, 0xed, 0xd6, 0x8e, 0x18, 0x31, 0x9d, 0xe0, 0xb6, 0xdd, 0xda, + 0x51, 0x09, 0x18, 0x22, 0x79, 0x0f, 0xa0, 0x63, 0xef, 0x52, 0xcf, 0x6a, 0x74, 0x83, 0x03, 0x31, + 0x6e, 0xcf, 0x6b, 0x64, 0x1b, 0xac, 0xb8, 0xd2, 0x0d, 0x0e, 0x14, 0xda, 0xd1, 0x8e, 0x04, 0x92, + 0x12, 0x40, 0xcb, 0x0e, 0x02, 0xea, 0xb5, 0x5c, 0xe1, 0x51, 0x36, 0x16, 0xbe, 0x1a, 0xc9, 0x19, + 0xdc, 0x0d, 0x8b, 0x15, 0x0e, 0x0a, 0x11, 0x36, 0xda, 0xf1, 0x6c, 0xf1, 0x08, 0x69, 0xac, 0xd1, + 0x8e, 0xa7, 0x7d, 0x25, 0x43, 0x24, 0x5f, 0x86, 0x91, 0x86, 0xe3, 0xd7, 0x5d, 0xaf, 0x21, 0x32, + 0x2e, 0x9c, 0xd5, 0x68, 0x2a, 0xbc, 0x4c, 0x21, 0x93, 0xe8, 0xac, 0xb5, 0x22, 0xa9, 0xdb, 0x9a, + 0xbb, 0x8f, 0xb6, 0xfb, 0x78, 0x6b, 0x6b, 0x61, 0xb1, 0xda, 0xda, 0x88, 0x88, 0x0d, 0xe5, 0xae, + 0x13, 0x34, 0xed, 0x6d, 0x71, 0x79, 0xad, 0x0f, 0xe5, 0x2d, 0x2c, 0x52, 0x87, 0x92, 0x23, 0x93, + 0x37, 0xa1, 0x40, 0xdb, 0x81, 0x67, 0x5b, 0x4e, 0x43, 0x44, 0xe2, 0xe9, 0x8d, 0x66, 0x1b, 0xb0, + 0x5d, 0xad, 0xa8, 0x8d, 0x46, 0xfc, 0x6a, 0x83, 0xf5, 0x8f, 0x5f, 0x77, 0x5a, 0x22, 0x80, 0x4e, + 0xef, 0x9f, 0xda, 0x52, 0xf5, 0xae, 0xda, 0x3f, 0x0c, 0x91, 0x3c, 0x0f, 0x10, 0xdd, 0x5b, 0xf3, + 0x5b, 0x06, 0x53, 0x81, 0x7c, 0x25, 0xff, 0x7f, 0xfc, 0xfc, 0x42, 0xa6, 0x0c, 0x50, 0x90, 0x29, + 0x27, 0x8c, 0x55, 0x38, 0xdd, 0x73, 0x51, 0x90, 0xcb, 0x50, 0xdc, 0xb1, 0x85, 0x9d, 0xab, 0xbe, + 0x67, 0xb7, 0xdb, 0xb4, 0x29, 0xc4, 0xd1, 0x94, 0x84, 0x2f, 0x71, 0x30, 0xe7, 0x6c, 0xbc, 0x07, + 0xb3, 0x69, 0xbd, 0x41, 0x5e, 0x80, 0x71, 0x35, 0xbb, 0x86, 0x60, 0x32, 0x66, 0x77, 0x1c, 0x99, + 0x5f, 0x43, 0x30, 0xf8, 0xb5, 0x0c, 0x9c, 0xed, 0xb7, 0xb6, 0xc8, 0x3c, 0x14, 0x3a, 0x9e, 0xe3, + 0xa2, 0x0e, 0xc7, 0x25, 0x60, 0xf8, 0x9b, 0x9c, 0x03, 0xe0, 0xca, 0x46, 0x60, 0xef, 0x0a, 0x0f, + 0x7b, 0x73, 0x14, 0x21, 0x9b, 0xf6, 0xae, 0x4f, 0x5e, 0x85, 0xe9, 0x06, 0xdd, 0xb1, 0xbb, 0xcd, + 0xc0, 0xf2, 0xeb, 0x7b, 0xb4, 0x81, 0x41, 0x2d, 0xe8, 0x39, 0x65, 0x16, 0x45, 0x41, 0x4d, 0xc2, + 0x13, 0x2d, 0x1e, 0xea, 0xd1, 0xe2, 0xdb, 0xf9, 0x42, 0xa6, 0x98, 0x35, 0xd1, 0x81, 0xc8, 0xf8, + 0xfe, 0x2c, 0xcc, 0xf5, 0x9a, 0x4c, 0xe4, 0x9d, 0xb4, 0x3e, 0xe0, 0xa6, 0x7a, 0x15, 0xae, 0x9a, + 0xea, 0x95, 0xda, 0xc8, 0x22, 0x84, 0x21, 0x29, 0x47, 0x85, 0x97, 0x4b, 0x18, 0xa3, 0xe9, 0xd8, + 0xbe, 0xbf, 0xcf, 0xd6, 0x4b, 0x4e, 0xc9, 0x9e, 0x27, 0x60, 0x2a, 0x8d, 0x84, 0x91, 0x2f, 0x01, + 0xd4, 0x9b, 0xae, 0x4f, 0xf1, 0x46, 0x5c, 0x6c, 0xc4, 0xdc, 0x2f, 0x37, 0x84, 0xaa, 0x57, 0xa0, + 0x08, 0x5d, 0x72, 0x1b, 0x54, 0x0c, 0xa0, 0x0d, 0xa7, 0x7a, 0x48, 0x0f, 0x36, 0x3c, 0xd1, 0x5b, + 0x9b, 0x32, 0x73, 0x7f, 0x37, 0x7c, 0x71, 0x33, 0xde, 0xe3, 0xd9, 0x5e, 0x73, 0xe4, 0x00, 0x48, + 0x52, 0x44, 0x30, 0xee, 0xc2, 0xbb, 0xb4, 0xeb, 0x85, 0xdc, 0x39, 0xe4, 0x9e, 0xd7, 0x24, 0x0b, + 0x30, 0x26, 0x5f, 0xe6, 0x61, 0x8a, 0x2e, 0x67, 0x0e, 0x02, 0x74, 0x87, 0xe2, 0xe4, 0xc1, 0x24, + 0x8f, 0x18, 0x78, 0x24, 0xb6, 0xd0, 0x51, 0x84, 0x6c, 0x1e, 0x74, 0xe4, 0xd7, 0x9d, 0x95, 0xf3, + 0x5b, 0x17, 0xdc, 0xa2, 0xf4, 0xa7, 0x33, 0x72, 0xf8, 0x93, 0x92, 0xef, 0xa8, 0xf6, 0x11, 0xc0, + 0x30, 0x11, 0xd1, 0x30, 0xfc, 0x9b, 0x6d, 0xe9, 0x72, 0xd5, 0x89, 0x2d, 0x5d, 0xfc, 0x24, 0x17, + 0x61, 0xca, 0xe3, 0x8e, 0x84, 0x81, 0x2b, 0xfa, 0x13, 0x47, 0xca, 0x9c, 0xe0, 0xe0, 0x4d, 0x17, + 0xfb, 0x54, 0xb4, 0xeb, 0x76, 0xd8, 0x61, 0xca, 0x46, 0x40, 0xae, 0xc0, 0x28, 0xdb, 0x08, 0x30, + 0x79, 0x45, 0xcc, 0x3f, 0x1d, 0xf1, 0x70, 0x5b, 0x35, 0x0b, 0x1f, 0x8b, 0xbf, 0x05, 0xaf, 0x7f, + 0x90, 0x91, 0xcc, 0xd4, 0x6d, 0x88, 0x9c, 0x82, 0x11, 0xd7, 0xdb, 0x55, 0x3e, 0x6d, 0xd8, 0xf5, + 0x76, 0xd9, 0x77, 0x5d, 0x82, 0x22, 0x0f, 0x97, 0xe0, 0x71, 0xe8, 0xfe, 0x41, 0x9b, 0x9f, 0x53, + 0x0b, 0xe6, 0x24, 0x87, 0xe3, 0xf3, 0xa3, 0x07, 0xed, 0x3a, 0xc3, 0xf4, 0x7d, 0xd7, 0x52, 0x33, + 0xd6, 0x88, 0xcf, 0x9e, 0xf4, 0x7d, 0x37, 0x4a, 0x5d, 0xd3, 0x20, 0x65, 0x98, 0x60, 0x7c, 0xc2, + 0xbc, 0x39, 0x62, 0x97, 0x3c, 0x97, 0xdc, 0x25, 0x0f, 0xda, 0x75, 0xd9, 0x44, 0x73, 0xdc, 0x57, + 0x7e, 0x89, 0xaf, 0xf9, 0x99, 0x2c, 0x9c, 0x4c, 0x47, 0xc7, 0xf1, 0x62, 0x95, 0x60, 0xd4, 0x10, + 0xb7, 0x59, 0x9a, 0xa3, 0x0c, 0xc2, 0x13, 0x23, 0xa4, 0xb5, 0x36, 0x9b, 0xda, 0xda, 0x57, 0x60, + 0x1a, 0x19, 0x09, 0xbd, 0xa4, 0xe9, 0xf8, 0x81, 0x88, 0xf7, 0x37, 0xa7, 0x58, 0x01, 0x17, 0x70, + 0xab, 0x0c, 0x4c, 0x5e, 0x82, 0x49, 0x29, 0xa2, 0xdc, 0xfd, 0x36, 0xab, 0x98, 0xcb, 0xa7, 0x09, + 0x01, 0x5d, 0x47, 0x20, 0x39, 0x01, 0xc3, 0x76, 0xa7, 0xc3, 0xaa, 0xe4, 0x62, 0x69, 0xc8, 0xee, + 0x74, 0xaa, 0x0d, 0x72, 0x01, 0x26, 0x30, 0x46, 0xca, 0xda, 0x41, 0x47, 0x11, 0xe1, 0x95, 0x66, + 0x8e, 0x23, 0x90, 0x3b, 0x8f, 0xf8, 0x6c, 0x21, 0x30, 0x5a, 0x89, 0x32, 0x82, 0x28, 0x60, 0x77, + 0x24, 0x82, 0xe8, 0x99, 0x2f, 0xc3, 0x94, 0xd8, 0x4d, 0x85, 0x84, 0x47, 0x4a, 0x31, 0xff, 0x98, + 0x9a, 0x2b, 0x52, 0x96, 0x83, 0x00, 0x55, 0x1b, 0x92, 0xf2, 0xf7, 0x33, 0x70, 0x22, 0x75, 0x3b, + 0x26, 0xdf, 0x04, 0x1e, 0x32, 0x12, 0xb8, 0x96, 0x47, 0xeb, 0x4e, 0xc7, 0xc1, 0xa0, 0x7a, 0x6e, + 0x84, 0x5a, 0xec, 0xb7, 0x91, 0x63, 0xf8, 0xc9, 0xa6, 0x6b, 0x86, 0x44, 0xfc, 0x1c, 0x5d, 0xf4, + 0x62, 0xe0, 0xf9, 0x8f, 0xe0, 0x44, 0x2a, 0x6a, 0xca, 0xf9, 0xf6, 0x35, 0xfd, 0x65, 0x37, 0x79, + 0xab, 0x10, 0xfb, 0x68, 0xe5, 0xdc, 0x2b, 0x3e, 0xef, 0x37, 0xc3, 0xcf, 0x8b, 0x6d, 0xdc, 0x64, + 0x39, 0x3e, 0x2d, 0xd3, 0x74, 0x4f, 0x49, 0xd4, 0x73, 0x66, 0x92, 0x8f, 0xe0, 0x84, 0x98, 0x2a, + 0xbb, 0x9e, 0xdd, 0xd9, 0x8b, 0xd8, 0xf1, 0x86, 0xbe, 0x9c, 0xc6, 0x8e, 0xcf, 0xa1, 0x5b, 0x0c, + 0x3f, 0xe4, 0x3a, 0x63, 0x27, 0x81, 0xe2, 0x1b, 0x3c, 0xb9, 0xe9, 0xa7, 0xb4, 0x26, 0x65, 0x0e, + 0x66, 0xd2, 0xe6, 0xe0, 0xc0, 0x0b, 0x40, 0xd4, 0xf9, 0x03, 0x19, 0x38, 0x7f, 0x54, 0x9b, 0xc9, + 0x16, 0x9c, 0xc4, 0x7b, 0x6f, 0xdf, 0x0d, 0x3f, 0xdb, 0xaa, 0xdb, 0xf5, 0x3d, 0x2a, 0x66, 0x89, + 0x91, 0xfa, 0xf1, 0x9d, 0x4e, 0xad, 0xb6, 0xae, 0x7c, 0x77, 0xa7, 0x53, 0xf3, 0x5d, 0xf9, 0x7b, + 0x89, 0x91, 0x8b, 0x36, 0x34, 0xe0, 0x4c, 0x1f, 0x4a, 0x65, 0x59, 0x65, 0xd4, 0x65, 0x75, 0x09, + 0x8a, 0x3b, 0xb4, 0xc1, 0x54, 0x28, 0xda, 0xc0, 0xa6, 0x3d, 0x5c, 0xe4, 0xcf, 0x23, 0x9a, 0x93, + 0x21, 0xbc, 0xe6, 0xbb, 0xf7, 0x17, 0x45, 0x2d, 0x2d, 0x29, 0x21, 0x55, 0x15, 0x8d, 0x5c, 0x81, + 0x99, 0x58, 0x82, 0x80, 0x28, 0xe2, 0xd4, 0x9c, 0x66, 0x45, 0x7a, 0x3a, 0x99, 0x17, 0x60, 0x5c, + 0x0e, 0x83, 0x17, 0xc6, 0xad, 0x98, 0x63, 0x02, 0xc6, 0x66, 0xb9, 0xa8, 0xee, 0xef, 0x64, 0xa5, + 0xca, 0x54, 0x76, 0xdd, 0xc0, 0x0f, 0x3c, 0xbb, 0xa3, 0x9d, 0x9b, 0x48, 0x0b, 0x4e, 0xbb, 0x76, + 0x37, 0xd8, 0x5b, 0xb4, 0xd8, 0xbf, 0xae, 0x27, 0x83, 0x48, 0xeb, 0xd2, 0x13, 0x6e, 0x6c, 0xf1, + 0xaa, 0x2e, 0x3a, 0x4b, 0x0c, 0xbb, 0xa4, 0x22, 0xb3, 0x1d, 0x5e, 0xe1, 0xba, 0xf2, 0x9c, 0x79, + 0x8a, 0xf3, 0x4c, 0x60, 0x91, 0x15, 0x18, 0xdf, 0xa6, 0xb6, 0x47, 0x3d, 0x2b, 0x7a, 0x87, 0x3d, + 0x7e, 0x70, 0x2a, 0x23, 0x02, 0x3a, 0x85, 0xea, 0x5c, 0xc7, 0xb6, 0xa3, 0x12, 0xf2, 0x2e, 0x8c, + 0x3a, 0x0d, 0x91, 0xff, 0x4e, 0x1c, 0x9f, 0x74, 0x95, 0xbd, 0xda, 0xe0, 0xe9, 0xf0, 0x22, 0x1e, + 0xec, 0xec, 0xe5, 0x08, 0x68, 0x79, 0x42, 0x3b, 0x61, 0x1a, 0x65, 0xb9, 0x3b, 0x27, 0xc9, 0x12, + 0xaf, 0xc8, 0x9f, 0x84, 0x61, 0x5f, 0x49, 0xc8, 0x67, 0x8a, 0x5f, 0xc6, 0xf7, 0xc1, 0xa5, 0x41, + 0xfb, 0x88, 0xbc, 0x0e, 0xa4, 0x47, 0x87, 0x8f, 0x9a, 0xd3, 0x76, 0xa2, 0xdf, 0x5e, 0x00, 0x35, + 0xa3, 0x98, 0x23, 0x07, 0x5c, 0xc2, 0xee, 0x79, 0x8e, 0xf1, 0x83, 0x39, 0x98, 0xd4, 0xcf, 0xd4, + 0xe4, 0x55, 0xc8, 0x87, 0x6c, 0x27, 0x43, 0xdb, 0xaf, 0x8a, 0xc4, 0x98, 0x9b, 0x88, 0xc4, 0x36, + 0x08, 0xbc, 0xff, 0xb1, 0x5a, 0xaa, 0x79, 0xd6, 0x1c, 0x47, 0xa0, 0x34, 0xcb, 0xde, 0x06, 0xfe, + 0x1a, 0x2f, 0xca, 0xb2, 0x60, 0xb0, 0xb7, 0xe7, 0x0b, 0xec, 0x64, 0x8f, 0x76, 0xb5, 0x71, 0x46, + 0xcb, 0xe4, 0x09, 0x3e, 0x37, 0x1f, 0x1d, 0x99, 0xf2, 0xbd, 0x8f, 0x4c, 0xe2, 0x53, 0x7a, 0x1c, + 0x99, 0x86, 0xfa, 0x1c, 0x99, 0x22, 0x4a, 0xf5, 0xc8, 0x84, 0x07, 0xe7, 0x91, 0x5e, 0x07, 0xe7, + 0x88, 0x86, 0x1f, 0x9c, 0x5f, 0x14, 0x9f, 0xeb, 0xd9, 0xfb, 0x16, 0xf6, 0x03, 0xf7, 0x54, 0xe3, + 0x1f, 0x62, 0xda, 0xfb, 0x78, 0x53, 0x56, 0x1e, 0x05, 0x79, 0xbd, 0x66, 0xfc, 0xb5, 0x4c, 0xec, + 0x90, 0x23, 0x87, 0xe2, 0x25, 0x98, 0x74, 0x5a, 0x4c, 0xfb, 0xa2, 0x0d, 0x45, 0x6b, 0x98, 0x30, + 0x27, 0x24, 0x94, 0x6b, 0x0e, 0x2f, 0xc3, 0x54, 0x88, 0xc6, 0x43, 0x9a, 0xb9, 0xdb, 0xbd, 0x19, + 0x52, 0x8b, 0x90, 0xe6, 0x57, 0x61, 0x3a, 0x44, 0x14, 0x8a, 0x2a, 0x57, 0x1c, 0x26, 0xcc, 0xa2, + 0x2c, 0x10, 0xef, 0x4a, 0xfa, 0xc6, 0x6e, 0x7c, 0x57, 0xfa, 0x8c, 0x5a, 0x65, 0xfc, 0x66, 0x4e, + 0x53, 0x00, 0x65, 0x35, 0x65, 0x18, 0x63, 0xa2, 0x51, 0x74, 0x92, 0x10, 0x2b, 0x2f, 0xf4, 0xe8, + 0x7e, 0x71, 0x41, 0x59, 0xab, 0xad, 0x9b, 0xe0, 0xfb, 0xae, 0xbc, 0xaf, 0xb4, 0xb8, 0xf4, 0xe7, + 0x3a, 0x0c, 0x4e, 0x3f, 0xc9, 0x8e, 0xcb, 0x90, 0x57, 0xfa, 0xb3, 0x2b, 0x75, 0x3a, 0xd8, 0x46, + 0x36, 0xfb, 0x70, 0x17, 0x08, 0x7f, 0xc9, 0x0a, 0xee, 0x01, 0x9e, 0x97, 0x7c, 0x9d, 0x79, 0x2e, + 0x65, 0x5f, 0x4d, 0x30, 0xc7, 0x5e, 0x42, 0xce, 0xf8, 0xfa, 0xbf, 0xaf, 0xb2, 0x5d, 0x86, 0x71, + 0x76, 0xfa, 0x0e, 0x19, 0xe6, 0xb5, 0xf8, 0xa3, 0x5e, 0x1f, 0xbf, 0x54, 0xbd, 0x6b, 0x8e, 0x31, + 0x3a, 0xc9, 0x66, 0x0f, 0x4e, 0xab, 0x3a, 0xa2, 0xde, 0xc8, 0x21, 0x99, 0x2a, 0xae, 0x6f, 0x0f, + 0x44, 0xaa, 0x24, 0x36, 0xf5, 0xa4, 0xad, 0x03, 0x04, 0x9a, 0xb1, 0x07, 0xf3, 0xbd, 0x87, 0x84, + 0x1d, 0x3b, 0xa8, 0x1a, 0xf4, 0x6c, 0xca, 0x9f, 0xca, 0x06, 0x99, 0x55, 0x37, 0xc8, 0xd3, 0x50, + 0x90, 0x4e, 0x6e, 0xf2, 0xa0, 0x62, 0x73, 0x07, 0x37, 0xe3, 0x6f, 0xe5, 0xe0, 0xc2, 0x00, 0xc3, + 0xd5, 0xa7, 0xce, 0xf7, 0x61, 0x8c, 0x1b, 0x0c, 0xb9, 0xf8, 0xe4, 0x37, 0xe8, 0x72, 0x1b, 0x60, + 0x4c, 0x85, 0xac, 0x63, 0x2a, 0x4c, 0x24, 0xef, 0xc0, 0x0f, 0xff, 0x26, 0xdf, 0x84, 0x29, 0x2e, + 0xd0, 0xb8, 0x8f, 0xc1, 0x4e, 0xb7, 0x39, 0x80, 0x44, 0x3b, 0x23, 0x1d, 0xa2, 0x63, 0xa4, 0x28, + 0xe4, 0x50, 0x62, 0xd4, 0x42, 0x18, 0xd9, 0x84, 0x31, 0x44, 0xdb, 0xb1, 0x9d, 0xe6, 0x40, 0x9e, + 0xb9, 0xd2, 0xdd, 0x5a, 0x25, 0xe3, 0xae, 0x51, 0x0c, 0x70, 0x13, 0x7f, 0xb3, 0x43, 0x5e, 0xbb, + 0xdb, 0xb2, 0xec, 0x4e, 0x87, 0xcf, 0x05, 0x71, 0xeb, 0x33, 0x64, 0x4e, 0xb4, 0xbb, 0xad, 0x52, + 0xa7, 0x83, 0x43, 0x8a, 0xd7, 0x43, 0xd3, 0x0c, 0x8f, 0xaf, 0x5a, 0x89, 0x39, 0x8c, 0x98, 0x8c, + 0x01, 0x5f, 0xb7, 0x02, 0x77, 0x16, 0xb8, 0x07, 0x00, 0x37, 0x77, 0x9b, 0xfc, 0x87, 0xf1, 0x27, + 0x59, 0xa9, 0x9b, 0xf5, 0x9e, 0xf7, 0x7f, 0x3e, 0x44, 0x29, 0x43, 0x74, 0x09, 0x8a, 0xac, 0xeb, + 0x23, 0xa1, 0x12, 0x8e, 0xd1, 0x64, 0xbb, 0xdb, 0x0a, 0xfb, 0x4e, 0xed, 0xf8, 0x61, 0xb5, 0xe3, + 0xbf, 0x24, 0x15, 0xd2, 0x54, 0xf1, 0xd0, 0xbb, 0xcb, 0x8d, 0x7f, 0x9a, 0x83, 0x8b, 0x83, 0x09, + 0x81, 0x3f, 0x1f, 0xb7, 0x94, 0x71, 0x8b, 0x1d, 0x82, 0x87, 0xe2, 0x87, 0xe0, 0xb4, 0xb5, 0x37, + 0x9c, 0xb6, 0xf6, 0x12, 0x47, 0xee, 0x91, 0x94, 0x23, 0x77, 0xea, 0x02, 0x2d, 0x1c, 0xb1, 0x40, + 0x47, 0xd5, 0x79, 0xf2, 0x4f, 0xb2, 0x30, 0x93, 0x72, 0x25, 0x42, 0x3e, 0x82, 0x19, 0xa9, 0xda, + 0xf3, 0x9d, 0x83, 0xab, 0xdc, 0x7c, 0xf7, 0xbd, 0x9c, 0xa6, 0xd4, 0x23, 0x5a, 0x8a, 0xe2, 0x3d, + 0x2d, 0xd4, 0xf9, 0xa8, 0xfc, 0xcf, 0x8e, 0x22, 0x4f, 0x3e, 0x84, 0x93, 0x98, 0xcb, 0xb4, 0x6e, + 0x29, 0xfa, 0xbc, 0xe5, 0xd1, 0x1d, 0x31, 0x1f, 0x5e, 0x48, 0xa8, 0xbd, 0x4e, 0x5d, 0x69, 0x8e, + 0x49, 0x77, 0x56, 0x9e, 0x33, 0x67, 0xfd, 0x14, 0x78, 0xfc, 0x8c, 0xf0, 0x1f, 0x67, 0xc0, 0x38, + 0xba, 0xbf, 0xd0, 0x56, 0x19, 0xef, 0xf0, 0x51, 0x73, 0xcc, 0x56, 0x7a, 0xef, 0x02, 0x4c, 0x78, + 0x74, 0xc7, 0xa3, 0xfe, 0x9e, 0xd2, 0x7d, 0xa3, 0xe6, 0xb8, 0x00, 0xca, 0x8e, 0x91, 0x19, 0x8c, + 0x8e, 0xa5, 0x64, 0x4b, 0x22, 0xe3, 0x66, 0x78, 0xf4, 0x4b, 0x1d, 0x07, 0x36, 0x9b, 0xd4, 0x06, + 0xf2, 0x1f, 0xb7, 0xf3, 0x85, 0x6c, 0x31, 0x67, 0x8a, 0x3c, 0x4b, 0x3b, 0x4e, 0x93, 0x1a, 0xbf, + 0x9a, 0x91, 0x1a, 0x41, 0x5a, 0xe7, 0x91, 0x8f, 0x14, 0x27, 0x9e, 0x5c, 0x42, 0x0d, 0x49, 0x23, + 0x51, 0xfd, 0x1d, 0x44, 0xea, 0x1f, 0x04, 0x68, 0xa9, 0x7f, 0x10, 0xf2, 0x24, 0x9e, 0x08, 0x6f, + 0xca, 0x3b, 0x40, 0x26, 0xed, 0xee, 0x5f, 0x23, 0x97, 0x61, 0x84, 0x5f, 0xfb, 0xc9, 0x86, 0x4e, + 0x69, 0x0d, 0xbd, 0x7f, 0xcd, 0x94, 0xe5, 0xc6, 0xcf, 0x66, 0xc2, 0x8b, 0x8f, 0x78, 0xf3, 0xef, + 0x5f, 0x23, 0x5f, 0x1a, 0xcc, 0x1d, 0xa7, 0x20, 0xdd, 0x71, 0x42, 0x57, 0x9c, 0x2f, 0x6b, 0xae, + 0x38, 0x2f, 0xf6, 0xef, 0x27, 0x61, 0x62, 0x8d, 0x3f, 0x10, 0xfd, 0x27, 0x19, 0x38, 0xd7, 0x97, + 0x82, 0x9c, 0x85, 0x42, 0x69, 0xa3, 0xba, 0x19, 0x8d, 0x2c, 0x5b, 0x2d, 0x12, 0x42, 0x6e, 0xc1, + 0x68, 0xd9, 0xf6, 0x9d, 0x3a, 0x9b, 0xc0, 0xa9, 0x46, 0xa3, 0x04, 0xdb, 0x10, 0x7d, 0xe5, 0x39, + 0x33, 0xa2, 0x25, 0x16, 0x4c, 0xe3, 0x2a, 0x48, 0x3c, 0xc0, 0x1a, 0x37, 0x18, 0x24, 0x18, 0x26, + 0xc8, 0x98, 0x84, 0x49, 0x00, 0xe3, 0x8b, 0xef, 0xa1, 0xd4, 0x42, 0x7a, 0x37, 0xf0, 0x18, 0xd9, + 0xba, 0x2e, 0x41, 0x61, 0x43, 0x5e, 0x7e, 0x28, 0xef, 0xaf, 0xcb, 0x8b, 0x0e, 0x33, 0x2c, 0x35, + 0xfe, 0x6a, 0x46, 0x9e, 0xea, 0x8f, 0xfe, 0x10, 0x25, 0xb7, 0x7f, 0xa3, 0x7f, 0x6e, 0xff, 0xc6, + 0xa7, 0xcc, 0xed, 0x6f, 0xfc, 0xa2, 0xc8, 0xa5, 0x59, 0x6d, 0x6c, 0xc4, 0x9e, 0x9b, 0x7a, 0x52, + 0xe7, 0xc2, 0x65, 0x6d, 0x76, 0x5e, 0x50, 0xde, 0x1b, 0x49, 0xd6, 0xd5, 0xdb, 0xc7, 0x50, 0x99, + 0xaa, 0xff, 0x24, 0x0b, 0x67, 0xfb, 0x91, 0xa7, 0xbe, 0x8c, 0x95, 0x39, 0xde, 0xcb, 0x58, 0x97, + 0xa1, 0xc0, 0x61, 0xfa, 0x63, 0xc1, 0x82, 0x94, 0x75, 0xb8, 0x2c, 0x26, 0x17, 0x60, 0xb8, 0xb4, + 0x54, 0x8b, 0x1e, 0x44, 0x40, 0x6f, 0x18, 0xbb, 0xee, 0xa3, 0x9f, 0x85, 0x28, 0x22, 0xdf, 0x48, + 0xbe, 0x01, 0x22, 0x5e, 0x42, 0x38, 0xa3, 0x74, 0x48, 0x22, 0xcd, 0x2d, 0xb6, 0x37, 0x4a, 0xcb, + 0x2a, 0x32, 0x1d, 0x9a, 0xc9, 0xf7, 0x44, 0x0c, 0x18, 0xde, 0xf0, 0xa8, 0x4f, 0x03, 0xd5, 0x53, + 0xa5, 0x83, 0x10, 0x53, 0x94, 0x08, 0x3f, 0x12, 0xfb, 0x80, 0xc7, 0x02, 0x0e, 0xab, 0xf1, 0xd9, + 0xe8, 0x78, 0xc2, 0xc0, 0xa6, 0x82, 0x62, 0x7c, 0x27, 0x03, 0xb3, 0x69, 0xcd, 0x22, 0x67, 0x21, + 0xdf, 0x4e, 0x7d, 0xbd, 0xa4, 0xcd, 0x23, 0x92, 0xc6, 0xf0, 0xa1, 0xd6, 0x1d, 0xd7, 0x6b, 0xd9, + 0x81, 0xea, 0x9e, 0xa3, 0x80, 0x4d, 0x60, 0x3f, 0x6e, 0xe2, 0xdf, 0x64, 0x41, 0x0a, 0xdb, 0x5c, + 0xe2, 0xbd, 0x13, 0xfc, 0xcf, 0x28, 0x01, 0x54, 0x1b, 0x1b, 0xeb, 0x1d, 0x9e, 0x35, 0xf5, 0x3a, + 0xe4, 0x59, 0xb3, 0x62, 0x93, 0x91, 0x4d, 0x87, 0xd2, 0xdd, 0x55, 0x81, 0xc4, 0x5b, 0xe5, 0xdb, + 0xad, 0xa6, 0x89, 0xc8, 0xc6, 0x16, 0x4c, 0xea, 0x18, 0x64, 0x59, 0xcf, 0xb3, 0x35, 0xb6, 0x58, + 0x14, 0x9c, 0xca, 0xae, 0xcb, 0x5d, 0x44, 0xcb, 0xa7, 0xbf, 0x7b, 0xb8, 0x00, 0xec, 0x27, 0xa7, + 0x49, 0xcb, 0xc3, 0x65, 0xfc, 0x78, 0x16, 0x66, 0xa3, 0x50, 0x33, 0xb9, 0x24, 0x9e, 0xd9, 0xb8, + 0x87, 0x92, 0xe6, 0x97, 0x2f, 0x35, 0xa6, 0xe4, 0x07, 0xf6, 0x71, 0x07, 0xbe, 0x05, 0x73, 0xbd, + 0xf0, 0xc9, 0xab, 0x89, 0x87, 0xd4, 0x45, 0x1e, 0x86, 0xf0, 0xc5, 0x75, 0xe5, 0x5d, 0xf5, 0x7f, + 0x98, 0x81, 0x79, 0xe1, 0xd8, 0x78, 0xd7, 0x76, 0xda, 0x01, 0x6d, 0xdb, 0xed, 0x3a, 0x7d, 0x3a, + 0x71, 0x3b, 0xb7, 0x34, 0xb1, 0xf4, 0x92, 0xee, 0xbf, 0x9a, 0xa8, 0xad, 0xf7, 0xd7, 0x92, 0xcb, + 0x98, 0x71, 0xa3, 0xce, 0x27, 0x6f, 0x9e, 0xc7, 0x49, 0xb6, 0x19, 0x40, 0x8d, 0x93, 0x44, 0x0c, + 0xe3, 0x5f, 0x52, 0x77, 0x6d, 0x3d, 0x6e, 0x1b, 0xd7, 0xdf, 0x94, 0xb4, 0xeb, 0xdd, 0xa3, 0xbd, + 0x70, 0x27, 0x8e, 0xbd, 0x7f, 0x5f, 0x36, 0x8e, 0xfe, 0x8e, 0x13, 0x2b, 0x89, 0x13, 0xc7, 0xcd, + 0xc5, 0x69, 0xd3, 0x84, 0x2b, 0x51, 0x2b, 0x66, 0x25, 0x52, 0x21, 0xa9, 0xdd, 0x38, 0x97, 0x12, + 0xca, 0x8a, 0xde, 0x55, 0xa3, 0xa5, 0x14, 0x89, 0x8a, 0xe3, 0xbc, 0xb4, 0x7d, 0xc9, 0x43, 0x8b, + 0x14, 0x6d, 0xd0, 0x87, 0xa2, 0x2d, 0x50, 0x14, 0xc8, 0xb7, 0xe8, 0x17, 0x08, 0x10, 0x14, 0xc8, + 0x43, 0xdf, 0x0a, 0x04, 0xad, 0x81, 0xbe, 0xf4, 0xb5, 0xe8, 0x4b, 0x9e, 0x8a, 0x39, 0x33, 0x43, + 0x0e, 0xa9, 0x4b, 0x76, 0xed, 0xa4, 0x45, 0xdf, 0xa4, 0x99, 0x73, 0x86, 0x43, 0xce, 0xcc, 0x99, + 0x73, 0xe6, 0xcc, 0xf9, 0x9d, 0x1f, 0xc1, 0xc6, 0xec, 0x07, 0x90, 0xb7, 0x61, 0x19, 0x51, 0xea, + 0x9b, 0xfd, 0xfd, 0x41, 0xab, 0xed, 0x8b, 0x33, 0x2d, 0x71, 0xa4, 0x28, 0xd7, 0x31, 0x94, 0x11, + 0x1e, 0xb7, 0xb7, 0x8f, 0xf8, 0xf7, 0x9c, 0x29, 0x71, 0x7b, 0x58, 0x6e, 0xad, 0xf0, 0x63, 0x05, + 0xc8, 0x78, 0x1b, 0xe4, 0x39, 0x58, 0x6a, 0xba, 0x25, 0x27, 0x6c, 0x0d, 0xc2, 0x6a, 0x6f, 0x34, + 0xe0, 0xe8, 0x1d, 0x2c, 0x8c, 0x2b, 0xdc, 0xa3, 0x92, 0x61, 0x10, 0x7a, 0x07, 0xbd, 0xd1, 0xc0, + 0x4e, 0xd0, 0x21, 0x14, 0xbe, 0xef, 0xbf, 0xdb, 0x6e, 0xdd, 0x49, 0x42, 0xe1, 0xf3, 0xb2, 0x04, + 0x14, 0x3e, 0x2f, 0x2b, 0x7c, 0xaa, 0xc0, 0x39, 0x71, 0xe3, 0xa1, 0x3d, 0xa1, 0x2f, 0x25, 0x0c, + 0x56, 0x1e, 0x08, 0xf4, 0xb2, 0x59, 0xba, 0xe9, 0x9a, 0x88, 0xe7, 0xc7, 0x0e, 0xa2, 0x92, 0xca, + 0x78, 0xc9, 0x2b, 0x90, 0x73, 0xc2, 0x5e, 0xff, 0x08, 0x01, 0xfd, 0x6a, 0x34, 0xa2, 0x61, 0xaf, + 0x8f, 0x4d, 0x20, 0x67, 0xc1, 0x87, 0x53, 0x72, 0xe7, 0x44, 0x8f, 0x49, 0x1d, 0x4e, 0x72, 0x78, + 0x97, 0x94, 0x77, 0x68, 0xc6, 0x3b, 0x6d, 0xae, 0x0a, 0xd4, 0x00, 0x8e, 0x9e, 0x65, 0x8b, 0x36, + 0x0a, 0x3f, 0x57, 0x20, 0x4f, 0x95, 0x07, 0x34, 0xc7, 0xee, 0x77, 0x4a, 0x27, 0xf5, 0x40, 0xe1, + 0x5c, 0x8c, 0x9a, 0x3f, 0xd2, 0xe6, 0xfa, 0x2c, 0xac, 0xa6, 0x18, 0x48, 0x01, 0xe3, 0x45, 0xbb, + 0x9d, 0xbd, 0x16, 0x43, 0xd6, 0x66, 0x9e, 0xb9, 0x44, 0x59, 0xe1, 0xa7, 0x0a, 0x9c, 0xa2, 0xc6, + 0xbb, 0x81, 0xe7, 0xb6, 0xf6, 0xa8, 0x2b, 0xd6, 0x3b, 0x55, 0x88, 0xc4, 0xd5, 0x19, 0x16, 0xcb, + 0xc6, 0x14, 0x22, 0x5e, 0x66, 0x47, 0xb5, 0xa4, 0x0a, 0x0b, 0x7c, 0x7f, 0x19, 0x72, 0xd0, 0xab, + 0x0d, 0xe9, 0x54, 0x20, 0x6e, 0x98, 0x13, 0xd1, 0x37, 0x41, 0x11, 0xc6, 0x79, 0xec, 0x88, 0xbb, + 0xf0, 0x4f, 0x05, 0xce, 0x4c, 0xe1, 0x21, 0x2f, 0xc1, 0x1c, 0x5e, 0xc9, 0xe7, 0xa3, 0x77, 0x7e, + 0xca, 0x23, 0xc2, 0xbd, 0x83, 0x9d, 0x6b, 0x6c, 0x23, 0x3a, 0xa4, 0x7f, 0x6c, 0xc6, 0x45, 0xde, + 0x84, 0x45, 0xad, 0xdd, 0xe6, 0x76, 0x49, 0x26, 0x61, 0x97, 0x4c, 0x79, 0xe2, 0xd5, 0x88, 0x9e, + 0xd9, 0x25, 0xec, 0x72, 0x68, 0xbb, 0xed, 0xf1, 0x70, 0x83, 0xb8, 0xbd, 0xb3, 0xdf, 0x83, 0x95, + 0x24, 0xf1, 0xb1, 0xec, 0x92, 0x5f, 0x2b, 0xa0, 0x26, 0xfb, 0xf0, 0xed, 0xe0, 0x1d, 0x4c, 0x1a, + 0xe6, 0xaf, 0x99, 0x54, 0xbf, 0xcc, 0xc0, 0x83, 0x13, 0xbf, 0x30, 0x79, 0x12, 0xe6, 0xb5, 0x7e, + 0xdf, 0x28, 0xf3, 0x59, 0xc5, 0x15, 0x1e, 0x3c, 0xee, 0x4d, 0x98, 0x6d, 0x8c, 0x88, 0x5c, 0x87, + 0x05, 0x9c, 0x99, 0x94, 0x21, 0x13, 0xc3, 0x4f, 0xb1, 0xd3, 0x90, 0x14, 0xfc, 0x94, 0x20, 0x24, + 0x15, 0x58, 0xe1, 0xa1, 0xcf, 0xb6, 0xbf, 0xef, 0x7f, 0x10, 0xe1, 0xa0, 0x22, 0x54, 0xab, 0x38, + 0x43, 0xf6, 0x06, 0xac, 0x4e, 0x0e, 0xfe, 0x4d, 0x72, 0x61, 0x62, 0x7f, 0xda, 0xa6, 0xdc, 0x12, + 0xc3, 0xc0, 0x62, 0x89, 0xfd, 0xb1, 0x13, 0x53, 0xda, 0x1a, 0xe3, 0x8c, 0x86, 0x4b, 0x1b, 0x0e, + 0x3b, 0xfb, 0xc1, 0xa1, 0x1f, 0x84, 0xdf, 0xde, 0x70, 0xc5, 0xcf, 0x38, 0xd2, 0x70, 0xfd, 0x2a, + 0xc7, 0x16, 0x73, 0x9a, 0x8d, 0x6a, 0x34, 0x12, 0xec, 0x21, 0x6a, 0x34, 0x98, 0xca, 0x92, 0x05, + 0xf7, 0x96, 0xe1, 0x24, 0x0b, 0xba, 0x16, 0x2b, 0xe3, 0xc2, 0xc4, 0x2e, 0x30, 0x9a, 0x9d, 0x6b, + 0x4c, 0x7d, 0x61, 0xb1, 0x01, 0x43, 0x5b, 0xb0, 0x92, 0x1d, 0xc8, 0x97, 0xba, 0x7e, 0x2b, 0x18, + 0xf5, 0xdd, 0xa3, 0xb9, 0x01, 0xd7, 0xf9, 0xbb, 0x2c, 0xed, 0x31, 0x36, 0x74, 0x1f, 0xa2, 0x24, + 0x97, 0x1b, 0x22, 0x6e, 0x74, 0x5d, 0x38, 0x87, 0x47, 0x8e, 0x4f, 0xcf, 0xf8, 0x3e, 0xe9, 0x42, + 0xe4, 0x4b, 0xde, 0x85, 0xe7, 0xf7, 0x89, 0x3d, 0x58, 0xa9, 0xb5, 0x86, 0xa1, 0x3b, 0x68, 0x05, + 0x43, 0x04, 0x6b, 0x3a, 0x02, 0x98, 0x85, 0x48, 0x7a, 0xcb, 0x8e, 0x22, 0xc3, 0x88, 0x95, 0x1d, + 0x45, 0x26, 0x9b, 0xa3, 0xfa, 0x52, 0xa5, 0x13, 0xb4, 0xba, 0x9d, 0x0f, 0x45, 0x54, 0x05, 0xd3, + 0x97, 0x6e, 0x89, 0x42, 0x3b, 0xae, 0x2f, 0xbc, 0x35, 0x36, 0x6e, 0xac, 0x97, 0x79, 0x38, 0xc9, + 0x03, 0xe9, 0x58, 0x60, 0x59, 0x43, 0x37, 0xcb, 0x86, 0xb9, 0xa5, 0x2a, 0x64, 0x05, 0xa0, 0x61, + 0x5b, 0x25, 0xdd, 0x71, 0xe8, 0xff, 0x0c, 0xfd, 0xcf, 0xa3, 0xce, 0x2a, 0xcd, 0x9a, 0x9a, 0x95, + 0x02, 0xcf, 0x72, 0x85, 0xcf, 0x15, 0x38, 0x3d, 0x79, 0x28, 0x89, 0x0b, 0x18, 0x7a, 0xc8, 0x1d, + 0xc2, 0xcf, 0xcd, 0x1c, 0xf7, 0x89, 0xc5, 0xe9, 0x10, 0xc6, 0x90, 0x85, 0xc6, 0x65, 0x84, 0xd7, + 0x27, 0x4e, 0xd7, 0xda, 0x69, 0x17, 0x4a, 0xb0, 0x3e, 0xad, 0x8d, 0xe4, 0xab, 0xae, 0x42, 0x5e, + 0x6b, 0x34, 0x6a, 0x46, 0x49, 0x73, 0x0d, 0xcb, 0x54, 0x15, 0xb2, 0x08, 0x73, 0x5b, 0xb6, 0xd5, + 0x6c, 0xa8, 0x99, 0xc2, 0x27, 0x0a, 0x2c, 0x1b, 0x41, 0xe8, 0xef, 0xb3, 0x5b, 0xaa, 0xf7, 0xbb, + 0xf8, 0x5e, 0x4c, 0x2c, 0xbe, 0xf5, 0x28, 0x48, 0x37, 0x7a, 0xc0, 0x91, 0x56, 0xde, 0x9f, 0x15, + 0x58, 0x1b, 0xe3, 0x21, 0x0e, 0x9c, 0xd4, 0x76, 0x1d, 0xcb, 0x28, 0x97, 0x78, 0xcf, 0x84, 0x56, + 0xce, 0x4b, 0xc7, 0x9f, 0xc2, 0x62, 0x60, 0x6e, 0x0f, 0xbd, 0x5e, 0xa7, 0x2d, 0x25, 0x89, 0xaa, + 0x9e, 0xb0, 0x45, 0x4b, 0xb8, 0x93, 0x7d, 0x38, 0x1a, 0xf8, 0xd8, 0x6c, 0x26, 0x71, 0xa2, 0x19, + 0x95, 0x8f, 0x37, 0x8c, 0x97, 0x32, 0x5b, 0xb4, 0x7e, 0xbc, 0xe9, 0xb8, 0xbd, 0xcd, 0x65, 0xc8, + 0x73, 0xab, 0x05, 0x0d, 0x82, 0x8f, 0x15, 0x58, 0x9f, 0xd6, 0x57, 0x6a, 0x08, 0x25, 0x03, 0xe2, + 0x4e, 0x47, 0x30, 0xbf, 0xc9, 0x48, 0x38, 0x41, 0x46, 0x5e, 0x86, 0x3c, 0xcb, 0x81, 0xed, 0x5c, + 0x6f, 0xda, 0x06, 0x9f, 0x20, 0x17, 0xfe, 0xf1, 0xe5, 0x43, 0x67, 0x58, 0xc6, 0x6c, 0x6f, 0x78, + 0xdd, 0x1b, 0x0d, 0x3a, 0x09, 0x48, 0x54, 0x99, 0xa3, 0xf0, 0x91, 0x02, 0x67, 0xa7, 0xbf, 0x24, + 0xdd, 0x65, 0x5c, 0xaa, 0x9b, 0xc7, 0x31, 0x45, 0xb8, 0xcb, 0xa0, 0xbe, 0x9e, 0x0a, 0x2a, 0x8a, + 0x08, 0x29, 0x53, 0x94, 0x7e, 0x31, 0x33, 0x96, 0x75, 0x2d, 0xc9, 0x24, 0x08, 0x0b, 0xbf, 0xcd, + 0xc0, 0x69, 0x3a, 0x81, 0xba, 0xfe, 0x70, 0xa8, 0x8d, 0xc2, 0x03, 0x3f, 0x08, 0xb9, 0x4a, 0x45, + 0x9e, 0x87, 0xf9, 0x83, 0xe3, 0x9d, 0x06, 0x32, 0x72, 0x42, 0x00, 0x85, 0xb2, 0xb8, 0xd4, 0x49, + 0x7f, 0x93, 0x0b, 0x20, 0x65, 0xb9, 0x43, 0x99, 0xba, 0x64, 0x2f, 0xf6, 0xa3, 0x5c, 0x77, 0x2f, + 0xc0, 0x1c, 0x5a, 0xff, 0x5c, 0x34, 0x0a, 0x95, 0x76, 0x72, 0xcf, 0xf0, 0x6c, 0xc0, 0x66, 0x0c, + 0xe4, 0x29, 0x80, 0x18, 0x4e, 0x96, 0xcb, 0x3e, 0x61, 0x46, 0x47, 0x88, 0xb2, 0xf6, 0xe2, 0xe1, + 0xad, 0x16, 0xc7, 0x68, 0x2d, 0xc2, 0x9a, 0xf8, 0x24, 0x7d, 0x81, 0x5d, 0xc3, 0xdd, 0x53, 0xab, + 0xac, 0xc2, 0xe8, 0x73, 0xfc, 0x9a, 0xc2, 0xdf, 0x33, 0xb0, 0xb8, 0x4b, 0x15, 0x05, 0x34, 0x7f, + 0x67, 0x9b, 0xd3, 0xcf, 0x40, 0xbe, 0xd6, 0x6b, 0xf1, 0xb3, 0xfb, 0x21, 0x87, 0xcf, 0xc2, 0xc0, + 0x9a, 0x6e, 0xaf, 0x25, 0xdc, 0x00, 0x43, 0x5b, 0x26, 0xfa, 0x9a, 0xa0, 0xa0, 0x57, 0x61, 0x9e, + 0xf9, 0x52, 0xf8, 0x41, 0x8d, 0x50, 0x15, 0xa3, 0x1e, 0x5d, 0x65, 0xd5, 0xd2, 0x71, 0x33, 0xf3, + 0xc7, 0xc8, 0x7a, 0x0b, 0x47, 0xcf, 0x92, 0x8c, 0xfd, 0xb9, 0xa3, 0x19, 0xfb, 0x12, 0x4a, 0xc8, + 0xfc, 0x51, 0x50, 0x42, 0xce, 0xde, 0x80, 0xbc, 0xd4, 0x9f, 0x63, 0x69, 0x8e, 0x3f, 0xc9, 0xc0, + 0x32, 0xbe, 0x55, 0x74, 0xb1, 0xe2, 0x7f, 0xf3, 0xe8, 0xe2, 0xc5, 0xc4, 0xd1, 0xc5, 0xba, 0x3c, + 0x5e, 0xec, 0xcd, 0x66, 0x9c, 0x59, 0xbc, 0x0a, 0x6b, 0x63, 0x84, 0xe4, 0x59, 0x98, 0xa3, 0xdd, + 0x17, 0xa6, 0x9e, 0x9a, 0x9e, 0x01, 0x31, 0xa2, 0x1c, 0x7d, 0xf1, 0xa1, 0xcd, 0xa8, 0x0b, 0xff, + 0x52, 0x60, 0x89, 0xe3, 0x0b, 0x07, 0xb7, 0x7a, 0x5f, 0xfb, 0x39, 0x2f, 0xa7, 0x3f, 0x27, 0x0b, + 0x71, 0xe5, 0x9f, 0xf3, 0x3f, 0xfd, 0x11, 0x6f, 0x24, 0x3e, 0xe2, 0x99, 0x08, 0x5f, 0x46, 0xbc, + 0xce, 0x8c, 0x6f, 0xf8, 0x47, 0x44, 0x5c, 0x4b, 0x12, 0x92, 0x1f, 0xc0, 0xa2, 0xe9, 0xdf, 0x4e, + 0x58, 0x4c, 0x97, 0xa7, 0x34, 0x7a, 0x35, 0x22, 0x64, 0x6b, 0x0a, 0x37, 0x9b, 0xc0, 0xbf, 0xed, + 0x8d, 0xb9, 0x71, 0xe2, 0x26, 0xa9, 0xd1, 0x94, 0x64, 0x3b, 0xce, 0xd4, 0xe7, 0x81, 0x14, 0x18, + 0xb5, 0xfd, 0x87, 0x1c, 0x40, 0x7c, 0x07, 0x9d, 0x2e, 0xc0, 0x84, 0x07, 0x5b, 0x9c, 0x1d, 0x63, + 0x91, 0x3c, 0xc7, 0x85, 0x63, 0xfb, 0x32, 0x3f, 0x14, 0xcd, 0x4c, 0xc7, 0xff, 0xc1, 0xe3, 0xd1, + 0x12, 0xbf, 0xe3, 0xdd, 0xf6, 0xbb, 0x2d, 0x26, 0x8b, 0xb3, 0x9b, 0x97, 0x10, 0xee, 0x2d, 0x2a, + 0x9d, 0x92, 0x28, 0x0e, 0x6f, 0x82, 0x97, 0x29, 0xc1, 0x58, 0x5c, 0x47, 0xee, 0xde, 0xe3, 0x3a, + 0xe6, 0xee, 0x21, 0xae, 0x63, 0xfe, 0x88, 0x71, 0x1d, 0x0d, 0x58, 0xec, 0x04, 0xef, 0xfb, 0x41, + 0xd8, 0x1b, 0xdc, 0x41, 0x2f, 0x75, 0x7c, 0x94, 0x45, 0x3f, 0xb5, 0x21, 0xea, 0xd8, 0x78, 0xe3, + 0x86, 0x19, 0xd1, 0xcb, 0xc3, 0x1d, 0x15, 0x92, 0xef, 0x40, 0xec, 0xf5, 0xe0, 0xa0, 0xe0, 0xd3, + 0xf7, 0xd9, 0x3d, 0xe1, 0x14, 0x79, 0x05, 0x92, 0xce, 0x0f, 0x1e, 0x15, 0xc9, 0x92, 0x9a, 0xca, + 0x15, 0x32, 0xe4, 0xd5, 0x9e, 0xe4, 0x1f, 0xe1, 0xd7, 0x5e, 0xbf, 0xca, 0x00, 0x19, 0xef, 0x38, + 0x79, 0x11, 0xf2, 0x4c, 0xf4, 0x7b, 0x83, 0xe1, 0x7b, 0x3c, 0x18, 0x81, 0x45, 0xe5, 0x4b, 0xc5, + 0x72, 0x54, 0x3e, 0x2b, 0xb6, 0x87, 0xef, 0x75, 0xc9, 0xdb, 0xf0, 0x00, 0x0e, 0x7c, 0xdf, 0x1f, + 0x74, 0x7a, 0x6d, 0x0f, 0x71, 0xd1, 0x5a, 0x5d, 0x9e, 0x6e, 0xe6, 0x49, 0xcc, 0x8b, 0x36, 0x5e, + 0x3d, 0x65, 0x82, 0xe0, 0x9d, 0xff, 0x06, 0x52, 0x36, 0x18, 0x21, 0x71, 0x41, 0x95, 0xf9, 0x6f, + 0x8d, 0xba, 0x5d, 0x3e, 0xe7, 0x8a, 0xd4, 0xfc, 0x4d, 0xd7, 0x4d, 0x69, 0x78, 0x25, 0x6e, 0xb8, + 0x32, 0xea, 0x76, 0xc9, 0xf3, 0x00, 0xbd, 0xc0, 0x3b, 0xec, 0x0c, 0x87, 0xcc, 0x91, 0x11, 0xc5, + 0xeb, 0xc4, 0xa5, 0xf2, 0xf0, 0xf5, 0x82, 0x3a, 0x2b, 0xa4, 0xc3, 0xd7, 0x6f, 0xed, 0xfb, 0x18, + 0xe5, 0xca, 0x2e, 0xad, 0x70, 0x00, 0x69, 0x51, 0x98, 0x9c, 0x46, 0xfb, 0xbe, 0xd3, 0xf9, 0x50, + 0xdc, 0x39, 0x7e, 0x03, 0xd6, 0xf8, 0x75, 0xd1, 0xdd, 0x4e, 0x78, 0xc0, 0xf5, 0xee, 0xfb, 0x51, + 0xda, 0x25, 0xc5, 0xfb, 0x2f, 0x39, 0x00, 0x6d, 0xd7, 0x11, 0x00, 0x12, 0x57, 0x60, 0x8e, 0x5a, + 0x13, 0xe2, 0x54, 0x02, 0xcf, 0x74, 0xb1, 0x5d, 0xf9, 0x4c, 0x17, 0x29, 0xa8, 0x9c, 0xb0, 0xfd, + 0x7d, 0x3c, 0x18, 0xcb, 0xc4, 0x47, 0x18, 0x03, 0x56, 0x94, 0xd0, 0x5e, 0x59, 0x11, 0xa9, 0x01, + 0xc4, 0x90, 0x0e, 0xdc, 0xbe, 0x5d, 0x8b, 0x63, 0xa3, 0x79, 0x05, 0x47, 0x06, 0x8e, 0x61, 0x21, + 0xe4, 0xe9, 0x13, 0x93, 0x91, 0x6d, 0xc8, 0xb9, 0xad, 0x28, 0x1a, 0x65, 0x0a, 0xd0, 0xc5, 0x45, + 0x9e, 0x0e, 0x28, 0x06, 0xbb, 0x58, 0x09, 0x5b, 0x89, 0xac, 0x69, 0xd8, 0x08, 0xd1, 0x61, 0x9e, + 0xa7, 0x7a, 0x9c, 0x82, 0x7a, 0xc4, 0x33, 0x3d, 0x72, 0xac, 0x43, 0x2c, 0x94, 0xb5, 0x1d, 0x9e, + 0xd4, 0xf1, 0x19, 0xc8, 0x3a, 0x4e, 0x9d, 0x87, 0x77, 0x2e, 0xc7, 0xb6, 0x8a, 0xe3, 0xd4, 0x45, + 0x66, 0xdc, 0x43, 0x89, 0x8d, 0x12, 0x93, 0xef, 0x42, 0x5e, 0x52, 0xc4, 0x79, 0x60, 0x34, 0x7e, + 0x83, 0x4e, 0x5c, 0x2c, 0x8b, 0x33, 0x89, 0x9a, 0xd4, 0x40, 0xdd, 0x1e, 0xbd, 0xe3, 0x6b, 0xfd, + 0x3e, 0x46, 0x52, 0xbc, 0xef, 0x0f, 0x18, 0x6a, 0xf1, 0x42, 0x0c, 0x13, 0xe8, 0xb5, 0xfa, 0x7d, + 0xaf, 0x2d, 0x6a, 0xe5, 0x93, 0x99, 0x34, 0x27, 0x69, 0xc0, 0x9a, 0xe3, 0x87, 0xa3, 0x3e, 0xbb, + 0x86, 0x51, 0xe9, 0x0d, 0xa8, 0x69, 0xc2, 0x04, 0x06, 0x22, 0xaa, 0x0d, 0x69, 0xa5, 0xb8, 0xfb, + 0x72, 0xab, 0x37, 0x48, 0x99, 0x29, 0xe3, 0xcc, 0x05, 0x5f, 0x1e, 0x72, 0xba, 0xdf, 0x27, 0x0d, + 0x1e, 0xdc, 0xef, 0x85, 0xc1, 0x13, 0x9b, 0x39, 0x4f, 0x4d, 0x80, 0xfa, 0x40, 0x37, 0x9a, 0x04, + 0xf5, 0x91, 0x00, 0xf8, 0xf8, 0x34, 0x27, 0x41, 0x48, 0xf1, 0xb1, 0x78, 0x09, 0xe0, 0xd5, 0x5e, + 0x27, 0xa8, 0xfb, 0xe1, 0x41, 0xaf, 0x2d, 0x21, 0x8e, 0xe4, 0x7f, 0xd8, 0xeb, 0x04, 0xde, 0x21, + 0x16, 0x7f, 0xf5, 0xe5, 0x43, 0x12, 0x91, 0x2d, 0xfd, 0x26, 0x4f, 0xc0, 0x22, 0xfd, 0xe7, 0xc6, + 0x97, 0x49, 0xd8, 0x01, 0x26, 0x72, 0xf3, 0x0c, 0xdb, 0x11, 0x01, 0xb9, 0x81, 0xd0, 0xe2, 0x9d, + 0x7e, 0x28, 0xa9, 0xd5, 0x02, 0x47, 0xbc, 0xd3, 0x0f, 0xd3, 0xa8, 0x80, 0x12, 0x31, 0xa9, 0x46, + 0x5d, 0x17, 0xe0, 0xf4, 0x1c, 0xc1, 0x1c, 0x4f, 0xe9, 0xf8, 0x5c, 0xf3, 0x04, 0x1c, 0x99, 0x9c, + 0x46, 0x2c, 0xc5, 0x86, 0x9d, 0x70, 0xaa, 0x65, 0xe6, 0x56, 0xe1, 0xbb, 0x1b, 0xeb, 0xc4, 0xf0, + 0xa0, 0xed, 0xed, 0x61, 0x71, 0xa2, 0x13, 0x11, 0x31, 0xd9, 0x84, 0x55, 0x16, 0x17, 0x1f, 0x25, + 0xb9, 0xe1, 0x3b, 0x1d, 0xca, 0xb6, 0x38, 0x0b, 0x8e, 0xfc, 0xf8, 0x14, 0x03, 0xa9, 0xc0, 0x1c, + 0x9a, 0x96, 0xfc, 0x32, 0xf8, 0x39, 0xd9, 0xa6, 0x4e, 0xaf, 0x23, 0x94, 0x2b, 0x68, 0x4d, 0xcb, + 0x72, 0x05, 0x49, 0xc9, 0xeb, 0x00, 0x7a, 0x30, 0xe8, 0x75, 0xbb, 0x08, 0x98, 0xb7, 0x80, 0x86, + 0xd9, 0x85, 0xe4, 0x7a, 0xc4, 0x56, 0x62, 0x22, 0x8e, 0x03, 0x83, 0xff, 0xbd, 0x14, 0xac, 0x9e, + 0xd4, 0x56, 0xc1, 0x80, 0x79, 0xb6, 0x18, 0x11, 0x7c, 0x92, 0xc3, 0x69, 0x4b, 0xd0, 0x85, 0x0c, + 0x7c, 0x92, 0x97, 0x8f, 0x83, 0x4f, 0x4a, 0x0c, 0x85, 0x6d, 0x38, 0x35, 0xe9, 0xc5, 0x12, 0xc6, + 0xb0, 0x72, 0x54, 0x63, 0xf8, 0xf7, 0x59, 0x58, 0xc2, 0xd6, 0x84, 0x14, 0xd6, 0x60, 0xd9, 0x19, + 0xbd, 0x13, 0x81, 0x38, 0x08, 0x69, 0x8c, 0xfd, 0x1b, 0xca, 0x15, 0xb2, 0xc3, 0x2b, 0xc1, 0x41, + 0x74, 0x58, 0x11, 0x3b, 0xc1, 0x96, 0xb8, 0x60, 0x1e, 0xe1, 0x3e, 0x0a, 0x78, 0xa1, 0xf1, 0x24, + 0x5f, 0x29, 0xa6, 0x78, 0x3f, 0xc8, 0x1e, 0x67, 0x3f, 0xc8, 0x1d, 0x69, 0x3f, 0x78, 0x13, 0x96, + 0xc4, 0xd3, 0x50, 0x92, 0xcf, 0xdd, 0x9f, 0x24, 0x4f, 0x34, 0x46, 0x6a, 0x91, 0x44, 0x9f, 0x9f, + 0x29, 0xd1, 0xd1, 0x8b, 0x28, 0x56, 0xd9, 0x58, 0xde, 0x5e, 0xde, 0x06, 0x66, 0xc1, 0xd9, 0x2a, + 0x35, 0xee, 0x61, 0x97, 0x7c, 0x16, 0x16, 0x6b, 0x3d, 0xe1, 0x40, 0x92, 0x4e, 0xee, 0xbb, 0xa2, + 0x50, 0x56, 0x17, 0x22, 0xca, 0x68, 0x77, 0xcb, 0x7e, 0x13, 0xbb, 0xdb, 0x0d, 0x00, 0x1e, 0xb9, + 0x10, 0x67, 0xaf, 0xc0, 0x25, 0x23, 0x62, 0x74, 0x93, 0x0e, 0x04, 0x89, 0x98, 0x4a, 0x27, 0x7e, + 0xd5, 0x44, 0xdb, 0xdb, 0xeb, 0x8d, 0x82, 0x30, 0x91, 0xee, 0x8d, 0x87, 0xeb, 0xd3, 0x2d, 0x01, + 0xeb, 0x64, 0xf1, 0x90, 0x62, 0xfb, 0x66, 0x07, 0x84, 0xbc, 0x16, 0xdd, 0x91, 0x9b, 0x99, 0xfd, + 0xba, 0x30, 0xf6, 0x85, 0xa6, 0xde, 0x8c, 0x2b, 0x7c, 0xae, 0xc8, 0xa0, 0xbb, 0xf7, 0x30, 0xd4, + 0x2f, 0x00, 0x44, 0x1e, 0x7c, 0x31, 0xd6, 0xcc, 0x92, 0x8b, 0x4a, 0xe5, 0xaf, 0x1c, 0xd3, 0x4a, + 0x6f, 0x93, 0xfd, 0xa6, 0xde, 0xc6, 0x85, 0xbc, 0xf5, 0x6e, 0xd8, 0x8a, 0xaf, 0x7c, 0x80, 0x13, + 0x69, 0xb2, 0x28, 0x99, 0x44, 0x96, 0xee, 0x58, 0x0f, 0x9e, 0x9a, 0xa5, 0x3b, 0x62, 0x2c, 0xbc, + 0x06, 0xab, 0x72, 0x20, 0xe1, 0x9d, 0x60, 0x8f, 0x7c, 0x9f, 0xa1, 0x85, 0x29, 0x09, 0x1b, 0x47, + 0x22, 0xa2, 0x12, 0xf7, 0x4e, 0xb0, 0xc7, 0xf4, 0x9f, 0xd6, 0x6d, 0xb9, 0xaf, 0x68, 0x7d, 0x7e, + 0xa1, 0x00, 0x19, 0x27, 0x97, 0xa5, 0x89, 0xf2, 0x5f, 0xd0, 0x2e, 0x53, 0x5a, 0x59, 0xee, 0x38, + 0x5a, 0x59, 0xf1, 0x17, 0x0a, 0xac, 0x1a, 0x5a, 0x9d, 0x23, 0xe4, 0x32, 0x4f, 0xc4, 0xc3, 0x70, + 0xc1, 0xd0, 0xea, 0x5e, 0xc3, 0xaa, 0x19, 0xa5, 0x9b, 0xde, 0x44, 0xe0, 0xbb, 0x0b, 0xf0, 0x7f, + 0xe3, 0x24, 0xb1, 0xc7, 0xe2, 0x3c, 0xac, 0x8f, 0x57, 0x0b, 0x70, 0xbc, 0xc9, 0xcc, 0x02, 0x47, + 0x2f, 0x5b, 0x7c, 0x19, 0x56, 0x05, 0x66, 0x9c, 0x5b, 0x73, 0x10, 0x6a, 0x76, 0x15, 0xf2, 0x3b, + 0xba, 0x6d, 0x54, 0x6e, 0x7a, 0x95, 0x66, 0xad, 0xa6, 0x9e, 0x20, 0xcb, 0xb0, 0xc8, 0x0b, 0x4a, + 0x9a, 0xaa, 0x90, 0x25, 0x58, 0x30, 0x4c, 0x47, 0x2f, 0x35, 0x6d, 0x5d, 0xcd, 0x14, 0x5f, 0x86, + 0x95, 0xc6, 0xa0, 0xf3, 0x7e, 0x2b, 0xf4, 0xb7, 0xfd, 0x3b, 0xe8, 0x70, 0x38, 0x09, 0x59, 0x5b, + 0xdb, 0x55, 0x4f, 0x10, 0x80, 0xf9, 0xc6, 0x76, 0xc9, 0xb9, 0x76, 0x4d, 0x55, 0x48, 0x1e, 0x4e, + 0x6e, 0x95, 0x1a, 0xde, 0x76, 0xdd, 0x51, 0x33, 0xf4, 0x8f, 0xb6, 0xeb, 0xe0, 0x9f, 0x6c, 0xf1, + 0x69, 0x58, 0x43, 0x5d, 0xa1, 0xd6, 0x19, 0x86, 0x7e, 0xe0, 0x0f, 0xb0, 0x0f, 0x4b, 0xb0, 0xe0, + 0xf8, 0x74, 0x91, 0x87, 0x3e, 0xeb, 0x40, 0x7d, 0xd4, 0x0d, 0x3b, 0xfd, 0xae, 0xff, 0x81, 0xaa, + 0x14, 0x6f, 0xc0, 0xaa, 0xdd, 0x1b, 0x85, 0x9d, 0x60, 0xdf, 0x09, 0x29, 0xc5, 0xfe, 0x1d, 0xf2, + 0x20, 0xac, 0x35, 0x4d, 0xad, 0xbe, 0x69, 0x6c, 0x35, 0xad, 0xa6, 0xe3, 0xd5, 0x35, 0xb7, 0x54, + 0x65, 0xee, 0x8e, 0xba, 0xe5, 0xb8, 0x9e, 0xad, 0x97, 0x74, 0xd3, 0x55, 0x95, 0xe2, 0xcf, 0x14, + 0x58, 0x69, 0x0e, 0xf9, 0x15, 0xdd, 0x26, 0x06, 0xda, 0x5d, 0x84, 0xf3, 0x4d, 0x47, 0xb7, 0x3d, + 0xd7, 0xda, 0xd6, 0x4d, 0xaf, 0xe9, 0x68, 0x5b, 0x69, 0xd4, 0xc5, 0x87, 0xe0, 0x9c, 0x44, 0x61, + 0xeb, 0x25, 0x6b, 0x47, 0xb7, 0xbd, 0x86, 0xe6, 0x38, 0xbb, 0x96, 0x5d, 0x56, 0x15, 0x72, 0x16, + 0x4e, 0x4f, 0x20, 0xa8, 0x57, 0x34, 0x35, 0x33, 0x56, 0x67, 0xea, 0xbb, 0x5a, 0xcd, 0xdb, 0xb4, + 0x5c, 0x35, 0x5b, 0xac, 0xd3, 0x8d, 0x0e, 0x81, 0xc9, 0x18, 0xac, 0xfc, 0x02, 0xe4, 0x4c, 0xcb, + 0xd4, 0xd3, 0x2e, 0xa9, 0x25, 0x58, 0xd0, 0x1a, 0x0d, 0xdb, 0xda, 0xc1, 0x01, 0x05, 0x98, 0x2f, + 0xeb, 0x26, 0xed, 0x59, 0x96, 0xd6, 0x34, 0x6c, 0xab, 0x6e, 0xb9, 0x7a, 0x59, 0xcd, 0x15, 0x6d, + 0xb1, 0x60, 0x44, 0xa3, 0x7b, 0x3d, 0xe6, 0xff, 0x29, 0xeb, 0x15, 0xad, 0x59, 0x73, 0xf9, 0x07, + 0xb9, 0xe9, 0xd9, 0xfa, 0x6b, 0x4d, 0xdd, 0x71, 0x1d, 0x55, 0x21, 0x2a, 0x2c, 0x99, 0xba, 0x5e, + 0x76, 0x3c, 0x5b, 0xdf, 0x31, 0xf4, 0x5d, 0x35, 0x43, 0xdb, 0x64, 0xbf, 0xe9, 0x13, 0x8a, 0x9f, + 0x2a, 0x40, 0x18, 0xa8, 0x9b, 0x80, 0xff, 0xc6, 0xf1, 0xd9, 0x80, 0xb3, 0x55, 0xfa, 0x61, 0xf1, + 0xd5, 0xea, 0x56, 0x39, 0xfd, 0xc9, 0x4e, 0x03, 0x49, 0xd5, 0x5b, 0x95, 0x8a, 0xaa, 0x90, 0x73, + 0xf0, 0x40, 0xaa, 0xbc, 0x6c, 0x5b, 0x0d, 0x35, 0x73, 0x36, 0xb3, 0xa0, 0x90, 0x33, 0x63, 0x95, + 0xdb, 0xba, 0xde, 0x50, 0xb3, 0x74, 0x88, 0x52, 0x15, 0x62, 0x02, 0x32, 0xf6, 0x5c, 0xf1, 0x23, + 0x05, 0x4e, 0xb3, 0x6e, 0x8a, 0xd9, 0x1c, 0x75, 0xf5, 0x3c, 0xac, 0x73, 0xfc, 0xc9, 0x49, 0x1d, + 0x3d, 0x05, 0x6a, 0xa2, 0x96, 0x75, 0xf3, 0x41, 0x58, 0x4b, 0x94, 0x62, 0x3f, 0x32, 0x74, 0xad, + 0x26, 0x8a, 0x37, 0x75, 0xc7, 0xf5, 0xf4, 0x4a, 0xc5, 0xb2, 0x5d, 0xd6, 0x91, 0x6c, 0xb1, 0x00, + 0x6b, 0x25, 0x7f, 0x10, 0x52, 0x1b, 0x24, 0x18, 0x76, 0x7a, 0x01, 0x76, 0x61, 0x19, 0x16, 0xf5, + 0xd7, 0x5d, 0xdd, 0x74, 0x0c, 0xcb, 0x54, 0x4f, 0x14, 0xcf, 0xa7, 0x68, 0xc4, 0xaa, 0x71, 0x9c, + 0xaa, 0x7a, 0xa2, 0xd8, 0x82, 0x65, 0x71, 0x25, 0x96, 0xcd, 0x8a, 0x0d, 0x38, 0x2b, 0xe6, 0x1a, + 0xae, 0xdf, 0xf4, 0x2b, 0xac, 0xc3, 0xa9, 0xf1, 0x7a, 0xdd, 0x55, 0x15, 0x3a, 0x0a, 0xa9, 0x1a, + 0x5a, 0x9e, 0x29, 0xfe, 0x4e, 0x81, 0x75, 0x9e, 0x68, 0x93, 0xfb, 0x23, 0x18, 0xe4, 0x35, 0xc2, + 0xc7, 0x15, 0xe1, 0xb2, 0x6b, 0x37, 0x1d, 0x57, 0x2f, 0x7b, 0x65, 0x7d, 0xc7, 0x28, 0xe9, 0x38, + 0x5d, 0x0c, 0x5b, 0xaf, 0xeb, 0xa6, 0x9b, 0x7a, 0xf4, 0xe3, 0xf0, 0xe8, 0x0c, 0x5a, 0xd3, 0x72, + 0xc5, 0x7f, 0xba, 0x4a, 0x1e, 0x85, 0xff, 0x9f, 0x41, 0x1c, 0x11, 0x66, 0x8a, 0x6f, 0xc1, 0x52, + 0x22, 0x8d, 0xc7, 0x19, 0x78, 0x40, 0xfe, 0xdf, 0xf0, 0x83, 0x76, 0x27, 0xd8, 0x57, 0x4f, 0xa4, + 0x2b, 0xec, 0x51, 0x10, 0xd0, 0x0a, 0x5c, 0x90, 0x72, 0x85, 0xeb, 0x0f, 0x0e, 0x3b, 0x41, 0x2b, + 0xf4, 0xdb, 0x6a, 0xa6, 0x78, 0x15, 0x96, 0x13, 0x38, 0x83, 0xf4, 0xcb, 0xd7, 0x2c, 0x2e, 0xaf, + 0xea, 0x7a, 0xd9, 0x68, 0xd6, 0xd5, 0x39, 0xba, 0x14, 0xab, 0xc6, 0x56, 0x55, 0x85, 0xe2, 0x27, + 0x0a, 0xd5, 0x98, 0xf1, 0xfb, 0xd4, 0x2b, 0x9a, 0x18, 0x2b, 0x3a, 0x4f, 0x18, 0x24, 0xa9, 0xee, + 0x38, 0xcc, 0x95, 0x7a, 0x1e, 0xd6, 0xf9, 0x1f, 0x4f, 0x33, 0xcb, 0x5e, 0x55, 0xb3, 0xcb, 0xbb, + 0x9a, 0x4d, 0x27, 0xcf, 0x4d, 0x35, 0x83, 0x2b, 0x42, 0x2a, 0xf1, 0x5c, 0xab, 0x59, 0xaa, 0xaa, + 0x59, 0x3a, 0x01, 0x13, 0xe5, 0x0d, 0xc3, 0x54, 0x73, 0xb8, 0xbe, 0xc6, 0xa8, 0xb1, 0x59, 0x5a, + 0x3f, 0x57, 0xbc, 0xab, 0xc0, 0x19, 0xa7, 0xb3, 0x1f, 0xb4, 0xc2, 0xd1, 0xc0, 0xd7, 0xba, 0xfb, + 0xbd, 0x41, 0x27, 0x3c, 0x38, 0x74, 0x46, 0x9d, 0xd0, 0x27, 0x57, 0xe0, 0x11, 0xc7, 0xd8, 0x32, + 0x35, 0x97, 0xae, 0x0f, 0xad, 0xb6, 0x65, 0xd9, 0x86, 0x5b, 0xad, 0x7b, 0x4e, 0xd3, 0x18, 0x9b, + 0x3a, 0x97, 0xe0, 0xe2, 0x74, 0xd2, 0x9a, 0xbe, 0xa5, 0x95, 0x6e, 0xaa, 0xca, 0xec, 0x06, 0x37, + 0xb5, 0x9a, 0x66, 0x96, 0xf4, 0xb2, 0xb7, 0x73, 0x4d, 0xcd, 0x90, 0x47, 0xe0, 0xe1, 0xe9, 0xa4, + 0x15, 0xa3, 0xe1, 0x50, 0xb2, 0xec, 0xec, 0xe7, 0x56, 0x9d, 0x3a, 0xa5, 0xca, 0x15, 0x3b, 0xa0, + 0xa6, 0x23, 0xa8, 0xc7, 0x1c, 0xf7, 0x76, 0xd3, 0x34, 0x99, 0x94, 0x5c, 0x85, 0xbc, 0xe5, 0x56, + 0x75, 0x9b, 0x23, 0xe3, 0x22, 0x14, 0x6e, 0xd3, 0xd4, 0x9a, 0x6e, 0xd5, 0xb2, 0x8d, 0x37, 0x50, + 0x5c, 0xae, 0xc3, 0x29, 0xa7, 0xa6, 0x95, 0xb6, 0x71, 0x66, 0x1a, 0xa6, 0x57, 0xaa, 0x6a, 0xa6, + 0xa9, 0xd7, 0x54, 0x28, 0xfe, 0x46, 0x61, 0x1e, 0xf4, 0x49, 0xa1, 0x56, 0xe4, 0x09, 0x78, 0xcc, + 0xda, 0x76, 0x35, 0xaf, 0x51, 0x6b, 0x6e, 0x19, 0xa6, 0xe7, 0xdc, 0x34, 0x4b, 0x62, 0x23, 0x2d, + 0x8d, 0x4b, 0x94, 0xc7, 0xe0, 0xd2, 0x4c, 0xea, 0x18, 0xc3, 0xf6, 0x32, 0x14, 0x66, 0x52, 0xf2, + 0x17, 0x29, 0xfe, 0x49, 0x81, 0x73, 0x33, 0x3c, 0x8f, 0xe4, 0x49, 0xb8, 0x52, 0xd5, 0xb5, 0x72, + 0x4d, 0x77, 0x1c, 0x8f, 0xbe, 0xaf, 0x6e, 0xba, 0xdc, 0xc1, 0x3f, 0x51, 0x5e, 0x5c, 0x81, 0x47, + 0x66, 0x93, 0xc7, 0x3b, 0xcf, 0x63, 0x70, 0x69, 0x36, 0x29, 0xdf, 0x89, 0x32, 0x54, 0x6a, 0xcc, + 0xa6, 0x8c, 0x76, 0xb0, 0x6c, 0xf1, 0x63, 0x05, 0x4e, 0x4f, 0x36, 0xd8, 0x69, 0xdf, 0x0c, 0xd3, + 0x71, 0xb5, 0x5a, 0xcd, 0x6b, 0x68, 0xb6, 0x56, 0xf7, 0x74, 0xd3, 0xb6, 0x6a, 0xb5, 0x49, 0x92, + 0xfb, 0x12, 0x5c, 0x9c, 0x4e, 0xea, 0x94, 0x6c, 0xa3, 0x41, 0x45, 0x60, 0x01, 0x36, 0xa6, 0x53, + 0xe9, 0x46, 0x49, 0x57, 0x33, 0x9b, 0x2f, 0x7d, 0xf6, 0xb7, 0x8d, 0x13, 0x9f, 0xdd, 0xdd, 0x50, + 0xbe, 0xb8, 0xbb, 0xa1, 0xfc, 0xf5, 0xee, 0x86, 0xf2, 0xc6, 0xe3, 0xc7, 0xc8, 0x12, 0xfe, 0xce, + 0x3c, 0xde, 0x68, 0xb9, 0xfe, 0xef, 0x00, 0x00, 0x00, 0xff, 0xff, 0x06, 0xe0, 0xdc, 0x09, 0x3b, + 0x91, 0x01, 0x00, } func (this *PluginSpecV1) Equal(that interface{}) bool { @@ -36694,6 +36704,15 @@ func (m *GithubAuthRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } + if len(m.ClientUserAgent) > 0 { + i -= len(m.ClientUserAgent) + copy(dAtA[i:], m.ClientUserAgent) + i = encodeVarintTypes(dAtA, i, uint64(len(m.ClientUserAgent))) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x92 + } if len(m.ClientLoginIP) > 0 { i -= len(m.ClientLoginIP) copy(dAtA[i:], m.ClientLoginIP) @@ -38379,6 +38398,11 @@ func (m *RegisterUsingTokenRequest) MarshalToSizedBuffer(dAtA []byte) (int, erro i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } + if m.BotGeneration != 0 { + i = encodeVarintTypes(dAtA, i, uint64(m.BotGeneration)) + i-- + dAtA[i] = 0x70 + } if len(m.BotInstanceID) > 0 { i -= len(m.BotInstanceID) copy(dAtA[i:], m.BotInstanceID) @@ -51633,6 +51657,10 @@ func (m *GithubAuthRequest) Size() (n int) { if l > 0 { n += 2 + l + sovTypes(uint64(l)) } + l = len(m.ClientUserAgent) + if l > 0 { + n += 2 + l + sovTypes(uint64(l)) + } if m.XXX_unrecognized != nil { n += len(m.XXX_unrecognized) } @@ -52371,6 +52399,9 @@ func (m *RegisterUsingTokenRequest) Size() (n int) { if l > 0 { n += 1 + l + sovTypes(uint64(l)) } + if m.BotGeneration != 0 { + n += 1 + sovTypes(uint64(m.BotGeneration)) + } if m.XXX_unrecognized != nil { n += len(m.XXX_unrecognized) } @@ -98366,6 +98397,38 @@ func (m *GithubAuthRequest) Unmarshal(dAtA []byte) error { } m.ClientLoginIP = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 18: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ClientUserAgent", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ClientUserAgent = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipTypes(dAtA[iNdEx:]) @@ -103171,6 +103234,25 @@ func (m *RegisterUsingTokenRequest) Unmarshal(dAtA []byte) error { } m.BotInstanceID = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 14: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field BotGeneration", wireType) + } + m.BotGeneration = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.BotGeneration |= int32(b&0x7F) << shift + if b < 0x80 { + break + } + } default: iNdEx = preIndex skippy, err := skipTypes(dAtA[iNdEx:]) diff --git a/build.assets/macos/tshdev/README.md b/build.assets/macos/tshdev/README.md index 67c2060ba4d20..c2b82452c3726 100644 --- a/build.assets/macos/tshdev/README.md +++ b/build.assets/macos/tshdev/README.md @@ -181,6 +181,15 @@ launch the daemon with the following error: After resetting the db and restarting the device, everything seemed to be working again. +In theory, it's possible to list all app bundles with a certain bundle identifier by running the +following command: + +``` +mdfind kMDItemCFBundleIdentifier = "com.goteleport.tshdev" +``` + +In practice, getting rid of all but one bundle didn't appear to solve the problem. + ### Daemon does not start List all jobs loaded into launchd. The second column is the status which you can then inspect. diff --git a/docs/pages/access-controls/getting-started.mdx b/docs/pages/access-controls/getting-started.mdx index 33cb5224b410b..0bc74d3710db5 100644 --- a/docs/pages/access-controls/getting-started.mdx +++ b/docs/pages/access-controls/getting-started.mdx @@ -20,18 +20,9 @@ wrap up with creating your own role. ## Step 1/3. Add local users with preset roles -Teleport provides several preset roles: `editor`, `auditor`, and `access`. +Teleport provides several preset roles: -- The `editor` role authorizes users to modify cluster configuration. -- The `auditor` role authorizes users to view audit logs. -- The `access` role authorizes users to access cluster resources. - -
-Teleport Enterprise contains two additional preset roles: `reviewer` and `requester`. - -- The `reviewer` role authorizes users to review Access Requests. -- The `requester` role authorizes users to request resources. -
+(!docs/pages/includes/preset-roles-table.mdx!) diff --git a/docs/pages/access-controls/reference.mdx b/docs/pages/access-controls/reference.mdx index ccdc012592432..68432fd468ff9 100644 --- a/docs/pages/access-controls/reference.mdx +++ b/docs/pages/access-controls/reference.mdx @@ -74,15 +74,9 @@ user: ## Preset roles -Teleport provides several pre-defined roles out-of-the-box: - -| Role | Description | -| --- | --- | -| `editor` | Allows editing of cluster configuration settings. | -| `auditor`| Allows reading cluster events, audit logs, and playing back session records. | -| `access`| Allows access to cluster resources. | -| `requester`| Enterprise-only role that allows a user to create Access Requests. | -| `reviewer`| Enterprise-only role that allows review of Access Requests. | +Teleport provides several preset roles: + +(!docs/pages/includes/preset-roles-table.mdx!) ### Role versions diff --git a/docs/pages/choose-an-edition/migrate-to-cloud.mdx b/docs/pages/choose-an-edition/migrate-to-cloud.mdx index 836118f467468..6a696f08ba9b4 100644 --- a/docs/pages/choose-an-edition/migrate-to-cloud.mdx +++ b/docs/pages/choose-an-edition/migrate-to-cloud.mdx @@ -323,7 +323,7 @@ your new Teleport cluster, ensure that the setup is complete. List all registered Windows desktops: ```code - $ tctl get windows_desktop + $ tctl desktop ls ``` 1. Ensure that end users have the expected SSO access to your infrastructure. diff --git a/docs/pages/enroll-resources/desktop-access/getting-started.mdx b/docs/pages/enroll-resources/desktop-access/getting-started.mdx index 9aeee4468fdbf..040bb796e51f9 100644 --- a/docs/pages/enroll-resources/desktop-access/getting-started.mdx +++ b/docs/pages/enroll-resources/desktop-access/getting-started.mdx @@ -285,6 +285,10 @@ Windows login to use for the connection. To view the recording, select **Management** in the Teleport Web UI, then click **Session Recordings** in the Activity section. +## Uninstall + +(!docs/pages/includes/uninstall-windows-auth.mdx!) + ## Next steps For more general information about how to create, assign, and update roles, see [Access Controls diff --git a/docs/pages/includes/preset-roles-table.mdx b/docs/pages/includes/preset-roles-table.mdx new file mode 100644 index 0000000000000..5d757ff8e2e00 --- /dev/null +++ b/docs/pages/includes/preset-roles-table.mdx @@ -0,0 +1,13 @@ +| Role | Description | +| --- | --- | +| `access`| Allows access to cluster resources. | +| `editor` | Allows editing of cluster configuration settings. | +| `auditor`| Allows reading cluster events, audit logs, and playing back session records. | +| `requester`| Enterprise-only role that allows a user to create Access Requests. | +| `reviewer`| Enterprise-only role that allows review of Access Requests. | +| `group-access`| Allows access to all user groups. | +| `device-admin`| Used to manage trusted devices. | +| `device-enroll`| Used to grant device enrollment powers to users. | +| `require-trusted-device`| Requires trusted device access to resources. | +| `terraform-provider`| Allows the Teleport Terraform provider to configure all of its supported Teleport resources. | + diff --git a/docs/pages/includes/uninstall-windows-auth.mdx b/docs/pages/includes/uninstall-windows-auth.mdx new file mode 100644 index 0000000000000..76e1ed1d8cf2e --- /dev/null +++ b/docs/pages/includes/uninstall-windows-auth.mdx @@ -0,0 +1,8 @@ +If you are using Teleport's Windows auth package to provide passwordless logins for local users, +you can remove it by running the setup program from an administrative command prompt: + +``` +> teleport-windows-auth-setup.exe uninstall +``` + +A reboot is necessary after the uninstall completes in order to fully remove the package. diff --git a/docs/pages/management/admin/uninstall-teleport.mdx b/docs/pages/management/admin/uninstall-teleport.mdx index 52531ec9ff59c..30dc2a7ebd304 100644 --- a/docs/pages/management/admin/uninstall-teleport.mdx +++ b/docs/pages/management/admin/uninstall-teleport.mdx @@ -152,7 +152,6 @@ Follow the instructions for your Linux distribution: - ### macOS @@ -187,6 +186,8 @@ Follow the instructions for your Linux distribution: ``` (!docs/pages/includes/uninstall-teleport-connect-windows.mdx!) +(!docs/pages/includes/uninstall-windows-auth.mdx!) + ## Step 3/3. Remove Teleport data and configuration files diff --git a/docs/pages/management/dynamic-resources/teleport-operator.mdx b/docs/pages/management/dynamic-resources/teleport-operator.mdx index e4ab426ee9ccd..9b2fc860b306d 100644 --- a/docs/pages/management/dynamic-resources/teleport-operator.mdx +++ b/docs/pages/management/dynamic-resources/teleport-operator.mdx @@ -45,6 +45,33 @@ follow [the guide for Helm-deployed clusters](./teleport-operator-helm.mdx). If you are hosting Teleport out of Kubernetes (Teleport Cloud, Terraform, ...), follow [the standalone operator guide](./teleport-operator-standalone.mdx). +### Control reconciliation with annotations + +The operator supports two annotations on CRs: + +#### `teleport.dev/keep` + +This annotation instructs the operator to keep the Teleport resource if the CR is deleted. +This is useful if you want to migrate between two resource versions. + +For example, to migrate from `TeleportRoleV6` to `TeleportRoleV7`: +- Annotate the existing `TeleportRoleV6` resource with `teleport.dev/keep: "true"` +- Delete the `TeleportRoleV6` CR, the operator won't delete the associated Teleport role +- Create a `TeleportRoleV7` CR with the same name, the operator will find the existing v6 role and adopt it. + +Possible values are `"true"` or `"false"` (those are strings, as Booleans are not valid label values in Kubernetes). + +#### `teleport.dev/ignore` + +This annotation instructs the operator to ignore the CR when reconciling. +This means the resource will not be created, updated, or deleted in Teleport. + +This also means the operator will not remove its finalizer if you try to delete an ignored CR. +The finalizer will stay and the deletion be blocked until you patch the resource to remove the +finalizer or remove the ignore annotation. + +Possible values are `"true"` or `"false"` (those are strings, as Booleans are not valid label values in Kubernetes). + ### Troubleshooting (!docs/pages/includes/diagnostics/kubernetes-operator-troubleshooting.mdx!) diff --git a/docs/pages/upgrading/automatic-agent-updates.mdx b/docs/pages/upgrading/automatic-agent-updates.mdx index ba6eb626da644..86f2174bb335d 100644 --- a/docs/pages/upgrading/automatic-agent-updates.mdx +++ b/docs/pages/upgrading/automatic-agent-updates.mdx @@ -189,9 +189,16 @@ Server ID Hostname Services Version Upgrader - ```code - $ curl https://goteleport.com/static/install.sh | bash -s ${TELEPORT_VERSION?} enterprise - ``` + 1. Follow the instructions in the Teleport [installation + guide](../installation.mdx#package-repositories) to install the `teleport` + binary on your Linux server for your package manager. + + 1. Using your package manager, install `teleport-ent-updater` on the + server where you installed `teleport`. For example: + + ```code + $ apt-get install -y teleport-ent-updater + ``` diff --git a/e b/e index c725cd98a5c1f..943a87fde7187 160000 --- a/e +++ b/e @@ -1 +1 @@ -Subproject commit c725cd98a5c1f3040297b9877a93f2fce9a922dd +Subproject commit 943a87fde7187fa19f3d44b233f7ca79681d60a0 diff --git a/examples/k8s-auth/get-kubeconfig.sh b/examples/k8s-auth/get-kubeconfig.sh index 65908aa161f56..77adaae2ea987 100755 --- a/examples/k8s-auth/get-kubeconfig.sh +++ b/examples/k8s-auth/get-kubeconfig.sh @@ -160,7 +160,7 @@ EOF echo "--- Done! -Copy the generated kubeconfig file to your Teleport Proxy server, and set the +Copy the generated kubeconfig file to your Teleport Kubernetes Service, and set the kubeconfig_file parameter in your teleport.yaml config file to point to this kubeconfig file. diff --git a/examples/service-discovery-api-client/go.mod b/examples/service-discovery-api-client/go.mod index b391f9995a84f..7ae70793cc804 100644 --- a/examples/service-discovery-api-client/go.mod +++ b/examples/service-discovery-api-client/go.mod @@ -5,7 +5,7 @@ go 1.21 toolchain go1.21.2 require ( - github.com/docker/docker v26.0.2+incompatible + github.com/docker/docker v26.1.4+incompatible github.com/gravitational/teleport/api v0.0.0-20240220221413-126de63e7e40 github.com/gravitational/trace v1.3.1 google.golang.org/grpc v1.63.0 diff --git a/examples/service-discovery-api-client/go.sum b/examples/service-discovery-api-client/go.sum index ec18cb6c8a9dc..ac7c84a2c35ac 100644 --- a/examples/service-discovery-api-client/go.sum +++ b/examples/service-discovery-api-client/go.sum @@ -37,8 +37,8 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/distribution/reference v0.6.0 h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5QvfrDyIgxBk= github.com/distribution/reference v0.6.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E= -github.com/docker/docker v26.0.2+incompatible h1:yGVmKUFGgcxA6PXWAokO0sQL22BrQ67cgVjko8tGdXE= -github.com/docker/docker v26.0.2+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v26.1.4+incompatible h1:vuTpXDuoga+Z38m1OZHzl7NKisKWaWlhjQk7IDPSLsU= +github.com/docker/docker v26.1.4+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ= github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= diff --git a/gen/proto/go/accessgraph/v1alpha/access_graph_service_grpc.pb.go b/gen/proto/go/accessgraph/v1alpha/access_graph_service_grpc.pb.go index 7f0812c5f881f..5f1ddcb26c27c 100644 --- a/gen/proto/go/accessgraph/v1alpha/access_graph_service_grpc.pb.go +++ b/gen/proto/go/accessgraph/v1alpha/access_graph_service_grpc.pb.go @@ -17,7 +17,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: -// - protoc-gen-go-grpc v1.4.0 +// - protoc-gen-go-grpc v1.5.0 // - protoc (unknown) // source: accessgraph/v1alpha/access_graph_service.proto @@ -32,8 +32,8 @@ import ( // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. -// Requires gRPC-Go v1.62.0 or later. -const _ = grpc.SupportPackageIsVersion8 +// Requires gRPC-Go v1.64.0 or later. +const _ = grpc.SupportPackageIsVersion9 const ( AccessGraphService_Query_FullMethodName = "/accessgraph.v1alpha.AccessGraphService/Query" @@ -64,11 +64,11 @@ type AccessGraphServiceClient interface { // This stream is used to sync the access graph with the Teleport database state. // Once Teleport finishes syncing the current state, it sends a sync command // to the access graph service and resumes sending events. - EventsStream(ctx context.Context, opts ...grpc.CallOption) (AccessGraphService_EventsStreamClient, error) + EventsStream(ctx context.Context, opts ...grpc.CallOption) (grpc.ClientStreamingClient[EventsStreamRequest, EventsStreamResponse], error) // EventsStreamV2 is a stream of commands to the access graph service. // This stream works the same way as EventsStream, but it returns a stream of events // instead of a single response. - EventsStreamV2(ctx context.Context, opts ...grpc.CallOption) (AccessGraphService_EventsStreamV2Client, error) + EventsStreamV2(ctx context.Context, opts ...grpc.CallOption) (grpc.BidiStreamingClient[EventsStreamV2Request, EventsStreamV2Response], error) // Register submits a new tenant representing this Teleport cluster to the TAG service, // identified by its HostCA certificate. // The method is idempotent: it succeeds if the tenant has already registered and has the specific CA associated. @@ -87,11 +87,11 @@ type AccessGraphServiceClient interface { // Teleport Discovery Service creates a stream to the access graph service // and pushes all AWS resources and following events to it. // This stream is used to sync the access graph with the AWS database state. - AWSEventsStream(ctx context.Context, opts ...grpc.CallOption) (AccessGraphService_AWSEventsStreamClient, error) + AWSEventsStream(ctx context.Context, opts ...grpc.CallOption) (grpc.ClientStreamingClient[AWSEventsStreamRequest, AWSEventsStreamResponse], error) // GitlabEventsStream is a stream of commands to the Gitlab importer. - GitlabEventsStream(ctx context.Context, opts ...grpc.CallOption) (AccessGraphService_GitlabEventsStreamClient, error) + GitlabEventsStream(ctx context.Context, opts ...grpc.CallOption) (grpc.BidiStreamingClient[GitlabEventsStreamRequest, GitlabEventsStreamResponse], error) // EntraEventsStream is a stream of commands to the Entra ID SSO importer. - EntraEventsStream(ctx context.Context, opts ...grpc.CallOption) (AccessGraphService_EntraEventsStreamClient, error) + EntraEventsStream(ctx context.Context, opts ...grpc.CallOption) (grpc.BidiStreamingClient[EntraEventsStreamRequest, EntraEventsStreamResponse], error) } type accessGraphServiceClient struct { @@ -122,72 +122,31 @@ func (c *accessGraphServiceClient) GetFile(ctx context.Context, in *GetFileReque return out, nil } -func (c *accessGraphServiceClient) EventsStream(ctx context.Context, opts ...grpc.CallOption) (AccessGraphService_EventsStreamClient, error) { +func (c *accessGraphServiceClient) EventsStream(ctx context.Context, opts ...grpc.CallOption) (grpc.ClientStreamingClient[EventsStreamRequest, EventsStreamResponse], error) { cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) stream, err := c.cc.NewStream(ctx, &AccessGraphService_ServiceDesc.Streams[0], AccessGraphService_EventsStream_FullMethodName, cOpts...) if err != nil { return nil, err } - x := &accessGraphServiceEventsStreamClient{ClientStream: stream} + x := &grpc.GenericClientStream[EventsStreamRequest, EventsStreamResponse]{ClientStream: stream} return x, nil } -type AccessGraphService_EventsStreamClient interface { - Send(*EventsStreamRequest) error - CloseAndRecv() (*EventsStreamResponse, error) - grpc.ClientStream -} - -type accessGraphServiceEventsStreamClient struct { - grpc.ClientStream -} +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type AccessGraphService_EventsStreamClient = grpc.ClientStreamingClient[EventsStreamRequest, EventsStreamResponse] -func (x *accessGraphServiceEventsStreamClient) Send(m *EventsStreamRequest) error { - return x.ClientStream.SendMsg(m) -} - -func (x *accessGraphServiceEventsStreamClient) CloseAndRecv() (*EventsStreamResponse, error) { - if err := x.ClientStream.CloseSend(); err != nil { - return nil, err - } - m := new(EventsStreamResponse) - if err := x.ClientStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} - -func (c *accessGraphServiceClient) EventsStreamV2(ctx context.Context, opts ...grpc.CallOption) (AccessGraphService_EventsStreamV2Client, error) { +func (c *accessGraphServiceClient) EventsStreamV2(ctx context.Context, opts ...grpc.CallOption) (grpc.BidiStreamingClient[EventsStreamV2Request, EventsStreamV2Response], error) { cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) stream, err := c.cc.NewStream(ctx, &AccessGraphService_ServiceDesc.Streams[1], AccessGraphService_EventsStreamV2_FullMethodName, cOpts...) if err != nil { return nil, err } - x := &accessGraphServiceEventsStreamV2Client{ClientStream: stream} + x := &grpc.GenericClientStream[EventsStreamV2Request, EventsStreamV2Response]{ClientStream: stream} return x, nil } -type AccessGraphService_EventsStreamV2Client interface { - Send(*EventsStreamV2Request) error - Recv() (*EventsStreamV2Response, error) - grpc.ClientStream -} - -type accessGraphServiceEventsStreamV2Client struct { - grpc.ClientStream -} - -func (x *accessGraphServiceEventsStreamV2Client) Send(m *EventsStreamV2Request) error { - return x.ClientStream.SendMsg(m) -} - -func (x *accessGraphServiceEventsStreamV2Client) Recv() (*EventsStreamV2Response, error) { - m := new(EventsStreamV2Response) - if err := x.ClientStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type AccessGraphService_EventsStreamV2Client = grpc.BidiStreamingClient[EventsStreamV2Request, EventsStreamV2Response] func (c *accessGraphServiceClient) Register(ctx context.Context, in *RegisterRequest, opts ...grpc.CallOption) (*RegisterResponse, error) { cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) @@ -209,108 +168,48 @@ func (c *accessGraphServiceClient) ReplaceCAs(ctx context.Context, in *ReplaceCA return out, nil } -func (c *accessGraphServiceClient) AWSEventsStream(ctx context.Context, opts ...grpc.CallOption) (AccessGraphService_AWSEventsStreamClient, error) { +func (c *accessGraphServiceClient) AWSEventsStream(ctx context.Context, opts ...grpc.CallOption) (grpc.ClientStreamingClient[AWSEventsStreamRequest, AWSEventsStreamResponse], error) { cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) stream, err := c.cc.NewStream(ctx, &AccessGraphService_ServiceDesc.Streams[2], AccessGraphService_AWSEventsStream_FullMethodName, cOpts...) if err != nil { return nil, err } - x := &accessGraphServiceAWSEventsStreamClient{ClientStream: stream} + x := &grpc.GenericClientStream[AWSEventsStreamRequest, AWSEventsStreamResponse]{ClientStream: stream} return x, nil } -type AccessGraphService_AWSEventsStreamClient interface { - Send(*AWSEventsStreamRequest) error - CloseAndRecv() (*AWSEventsStreamResponse, error) - grpc.ClientStream -} - -type accessGraphServiceAWSEventsStreamClient struct { - grpc.ClientStream -} - -func (x *accessGraphServiceAWSEventsStreamClient) Send(m *AWSEventsStreamRequest) error { - return x.ClientStream.SendMsg(m) -} +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type AccessGraphService_AWSEventsStreamClient = grpc.ClientStreamingClient[AWSEventsStreamRequest, AWSEventsStreamResponse] -func (x *accessGraphServiceAWSEventsStreamClient) CloseAndRecv() (*AWSEventsStreamResponse, error) { - if err := x.ClientStream.CloseSend(); err != nil { - return nil, err - } - m := new(AWSEventsStreamResponse) - if err := x.ClientStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} - -func (c *accessGraphServiceClient) GitlabEventsStream(ctx context.Context, opts ...grpc.CallOption) (AccessGraphService_GitlabEventsStreamClient, error) { +func (c *accessGraphServiceClient) GitlabEventsStream(ctx context.Context, opts ...grpc.CallOption) (grpc.BidiStreamingClient[GitlabEventsStreamRequest, GitlabEventsStreamResponse], error) { cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) stream, err := c.cc.NewStream(ctx, &AccessGraphService_ServiceDesc.Streams[3], AccessGraphService_GitlabEventsStream_FullMethodName, cOpts...) if err != nil { return nil, err } - x := &accessGraphServiceGitlabEventsStreamClient{ClientStream: stream} + x := &grpc.GenericClientStream[GitlabEventsStreamRequest, GitlabEventsStreamResponse]{ClientStream: stream} return x, nil } -type AccessGraphService_GitlabEventsStreamClient interface { - Send(*GitlabEventsStreamRequest) error - Recv() (*GitlabEventsStreamResponse, error) - grpc.ClientStream -} - -type accessGraphServiceGitlabEventsStreamClient struct { - grpc.ClientStream -} - -func (x *accessGraphServiceGitlabEventsStreamClient) Send(m *GitlabEventsStreamRequest) error { - return x.ClientStream.SendMsg(m) -} - -func (x *accessGraphServiceGitlabEventsStreamClient) Recv() (*GitlabEventsStreamResponse, error) { - m := new(GitlabEventsStreamResponse) - if err := x.ClientStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type AccessGraphService_GitlabEventsStreamClient = grpc.BidiStreamingClient[GitlabEventsStreamRequest, GitlabEventsStreamResponse] -func (c *accessGraphServiceClient) EntraEventsStream(ctx context.Context, opts ...grpc.CallOption) (AccessGraphService_EntraEventsStreamClient, error) { +func (c *accessGraphServiceClient) EntraEventsStream(ctx context.Context, opts ...grpc.CallOption) (grpc.BidiStreamingClient[EntraEventsStreamRequest, EntraEventsStreamResponse], error) { cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) stream, err := c.cc.NewStream(ctx, &AccessGraphService_ServiceDesc.Streams[4], AccessGraphService_EntraEventsStream_FullMethodName, cOpts...) if err != nil { return nil, err } - x := &accessGraphServiceEntraEventsStreamClient{ClientStream: stream} + x := &grpc.GenericClientStream[EntraEventsStreamRequest, EntraEventsStreamResponse]{ClientStream: stream} return x, nil } -type AccessGraphService_EntraEventsStreamClient interface { - Send(*EntraEventsStreamRequest) error - Recv() (*EntraEventsStreamResponse, error) - grpc.ClientStream -} - -type accessGraphServiceEntraEventsStreamClient struct { - grpc.ClientStream -} - -func (x *accessGraphServiceEntraEventsStreamClient) Send(m *EntraEventsStreamRequest) error { - return x.ClientStream.SendMsg(m) -} - -func (x *accessGraphServiceEntraEventsStreamClient) Recv() (*EntraEventsStreamResponse, error) { - m := new(EntraEventsStreamResponse) - if err := x.ClientStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type AccessGraphService_EntraEventsStreamClient = grpc.BidiStreamingClient[EntraEventsStreamRequest, EntraEventsStreamResponse] // AccessGraphServiceServer is the server API for AccessGraphService service. // All implementations must embed UnimplementedAccessGraphServiceServer -// for forward compatibility +// for forward compatibility. // // AccessGraphService is a service for interacting the access graph service. type AccessGraphServiceServer interface { @@ -325,11 +224,11 @@ type AccessGraphServiceServer interface { // This stream is used to sync the access graph with the Teleport database state. // Once Teleport finishes syncing the current state, it sends a sync command // to the access graph service and resumes sending events. - EventsStream(AccessGraphService_EventsStreamServer) error + EventsStream(grpc.ClientStreamingServer[EventsStreamRequest, EventsStreamResponse]) error // EventsStreamV2 is a stream of commands to the access graph service. // This stream works the same way as EventsStream, but it returns a stream of events // instead of a single response. - EventsStreamV2(AccessGraphService_EventsStreamV2Server) error + EventsStreamV2(grpc.BidiStreamingServer[EventsStreamV2Request, EventsStreamV2Response]) error // Register submits a new tenant representing this Teleport cluster to the TAG service, // identified by its HostCA certificate. // The method is idempotent: it succeeds if the tenant has already registered and has the specific CA associated. @@ -348,17 +247,20 @@ type AccessGraphServiceServer interface { // Teleport Discovery Service creates a stream to the access graph service // and pushes all AWS resources and following events to it. // This stream is used to sync the access graph with the AWS database state. - AWSEventsStream(AccessGraphService_AWSEventsStreamServer) error + AWSEventsStream(grpc.ClientStreamingServer[AWSEventsStreamRequest, AWSEventsStreamResponse]) error // GitlabEventsStream is a stream of commands to the Gitlab importer. - GitlabEventsStream(AccessGraphService_GitlabEventsStreamServer) error + GitlabEventsStream(grpc.BidiStreamingServer[GitlabEventsStreamRequest, GitlabEventsStreamResponse]) error // EntraEventsStream is a stream of commands to the Entra ID SSO importer. - EntraEventsStream(AccessGraphService_EntraEventsStreamServer) error + EntraEventsStream(grpc.BidiStreamingServer[EntraEventsStreamRequest, EntraEventsStreamResponse]) error mustEmbedUnimplementedAccessGraphServiceServer() } -// UnimplementedAccessGraphServiceServer must be embedded to have forward compatible implementations. -type UnimplementedAccessGraphServiceServer struct { -} +// UnimplementedAccessGraphServiceServer must be embedded to have +// forward compatible implementations. +// +// NOTE: this should be embedded by value instead of pointer to avoid a nil +// pointer dereference when methods are called. +type UnimplementedAccessGraphServiceServer struct{} func (UnimplementedAccessGraphServiceServer) Query(context.Context, *QueryRequest) (*QueryResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method Query not implemented") @@ -366,10 +268,10 @@ func (UnimplementedAccessGraphServiceServer) Query(context.Context, *QueryReques func (UnimplementedAccessGraphServiceServer) GetFile(context.Context, *GetFileRequest) (*GetFileResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method GetFile not implemented") } -func (UnimplementedAccessGraphServiceServer) EventsStream(AccessGraphService_EventsStreamServer) error { +func (UnimplementedAccessGraphServiceServer) EventsStream(grpc.ClientStreamingServer[EventsStreamRequest, EventsStreamResponse]) error { return status.Errorf(codes.Unimplemented, "method EventsStream not implemented") } -func (UnimplementedAccessGraphServiceServer) EventsStreamV2(AccessGraphService_EventsStreamV2Server) error { +func (UnimplementedAccessGraphServiceServer) EventsStreamV2(grpc.BidiStreamingServer[EventsStreamV2Request, EventsStreamV2Response]) error { return status.Errorf(codes.Unimplemented, "method EventsStreamV2 not implemented") } func (UnimplementedAccessGraphServiceServer) Register(context.Context, *RegisterRequest) (*RegisterResponse, error) { @@ -378,16 +280,17 @@ func (UnimplementedAccessGraphServiceServer) Register(context.Context, *Register func (UnimplementedAccessGraphServiceServer) ReplaceCAs(context.Context, *ReplaceCAsRequest) (*ReplaceCAsResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method ReplaceCAs not implemented") } -func (UnimplementedAccessGraphServiceServer) AWSEventsStream(AccessGraphService_AWSEventsStreamServer) error { +func (UnimplementedAccessGraphServiceServer) AWSEventsStream(grpc.ClientStreamingServer[AWSEventsStreamRequest, AWSEventsStreamResponse]) error { return status.Errorf(codes.Unimplemented, "method AWSEventsStream not implemented") } -func (UnimplementedAccessGraphServiceServer) GitlabEventsStream(AccessGraphService_GitlabEventsStreamServer) error { +func (UnimplementedAccessGraphServiceServer) GitlabEventsStream(grpc.BidiStreamingServer[GitlabEventsStreamRequest, GitlabEventsStreamResponse]) error { return status.Errorf(codes.Unimplemented, "method GitlabEventsStream not implemented") } -func (UnimplementedAccessGraphServiceServer) EntraEventsStream(AccessGraphService_EntraEventsStreamServer) error { +func (UnimplementedAccessGraphServiceServer) EntraEventsStream(grpc.BidiStreamingServer[EntraEventsStreamRequest, EntraEventsStreamResponse]) error { return status.Errorf(codes.Unimplemented, "method EntraEventsStream not implemented") } func (UnimplementedAccessGraphServiceServer) mustEmbedUnimplementedAccessGraphServiceServer() {} +func (UnimplementedAccessGraphServiceServer) testEmbeddedByValue() {} // UnsafeAccessGraphServiceServer may be embedded to opt out of forward compatibility for this service. // Use of this interface is not recommended, as added methods to AccessGraphServiceServer will @@ -397,6 +300,13 @@ type UnsafeAccessGraphServiceServer interface { } func RegisterAccessGraphServiceServer(s grpc.ServiceRegistrar, srv AccessGraphServiceServer) { + // If the following call pancis, it indicates UnimplementedAccessGraphServiceServer was + // embedded by pointer and is nil. This will cause panics if an + // unimplemented method is ever invoked, so we test this at initialization + // time to prevent it from happening at runtime later due to I/O. + if t, ok := srv.(interface{ testEmbeddedByValue() }); ok { + t.testEmbeddedByValue() + } s.RegisterService(&AccessGraphService_ServiceDesc, srv) } @@ -437,56 +347,18 @@ func _AccessGraphService_GetFile_Handler(srv interface{}, ctx context.Context, d } func _AccessGraphService_EventsStream_Handler(srv interface{}, stream grpc.ServerStream) error { - return srv.(AccessGraphServiceServer).EventsStream(&accessGraphServiceEventsStreamServer{ServerStream: stream}) -} - -type AccessGraphService_EventsStreamServer interface { - SendAndClose(*EventsStreamResponse) error - Recv() (*EventsStreamRequest, error) - grpc.ServerStream -} - -type accessGraphServiceEventsStreamServer struct { - grpc.ServerStream -} - -func (x *accessGraphServiceEventsStreamServer) SendAndClose(m *EventsStreamResponse) error { - return x.ServerStream.SendMsg(m) + return srv.(AccessGraphServiceServer).EventsStream(&grpc.GenericServerStream[EventsStreamRequest, EventsStreamResponse]{ServerStream: stream}) } -func (x *accessGraphServiceEventsStreamServer) Recv() (*EventsStreamRequest, error) { - m := new(EventsStreamRequest) - if err := x.ServerStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type AccessGraphService_EventsStreamServer = grpc.ClientStreamingServer[EventsStreamRequest, EventsStreamResponse] func _AccessGraphService_EventsStreamV2_Handler(srv interface{}, stream grpc.ServerStream) error { - return srv.(AccessGraphServiceServer).EventsStreamV2(&accessGraphServiceEventsStreamV2Server{ServerStream: stream}) + return srv.(AccessGraphServiceServer).EventsStreamV2(&grpc.GenericServerStream[EventsStreamV2Request, EventsStreamV2Response]{ServerStream: stream}) } -type AccessGraphService_EventsStreamV2Server interface { - Send(*EventsStreamV2Response) error - Recv() (*EventsStreamV2Request, error) - grpc.ServerStream -} - -type accessGraphServiceEventsStreamV2Server struct { - grpc.ServerStream -} - -func (x *accessGraphServiceEventsStreamV2Server) Send(m *EventsStreamV2Response) error { - return x.ServerStream.SendMsg(m) -} - -func (x *accessGraphServiceEventsStreamV2Server) Recv() (*EventsStreamV2Request, error) { - m := new(EventsStreamV2Request) - if err := x.ServerStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type AccessGraphService_EventsStreamV2Server = grpc.BidiStreamingServer[EventsStreamV2Request, EventsStreamV2Response] func _AccessGraphService_Register_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(RegisterRequest) @@ -525,82 +397,25 @@ func _AccessGraphService_ReplaceCAs_Handler(srv interface{}, ctx context.Context } func _AccessGraphService_AWSEventsStream_Handler(srv interface{}, stream grpc.ServerStream) error { - return srv.(AccessGraphServiceServer).AWSEventsStream(&accessGraphServiceAWSEventsStreamServer{ServerStream: stream}) -} - -type AccessGraphService_AWSEventsStreamServer interface { - SendAndClose(*AWSEventsStreamResponse) error - Recv() (*AWSEventsStreamRequest, error) - grpc.ServerStream -} - -type accessGraphServiceAWSEventsStreamServer struct { - grpc.ServerStream -} - -func (x *accessGraphServiceAWSEventsStreamServer) SendAndClose(m *AWSEventsStreamResponse) error { - return x.ServerStream.SendMsg(m) + return srv.(AccessGraphServiceServer).AWSEventsStream(&grpc.GenericServerStream[AWSEventsStreamRequest, AWSEventsStreamResponse]{ServerStream: stream}) } -func (x *accessGraphServiceAWSEventsStreamServer) Recv() (*AWSEventsStreamRequest, error) { - m := new(AWSEventsStreamRequest) - if err := x.ServerStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type AccessGraphService_AWSEventsStreamServer = grpc.ClientStreamingServer[AWSEventsStreamRequest, AWSEventsStreamResponse] func _AccessGraphService_GitlabEventsStream_Handler(srv interface{}, stream grpc.ServerStream) error { - return srv.(AccessGraphServiceServer).GitlabEventsStream(&accessGraphServiceGitlabEventsStreamServer{ServerStream: stream}) -} - -type AccessGraphService_GitlabEventsStreamServer interface { - Send(*GitlabEventsStreamResponse) error - Recv() (*GitlabEventsStreamRequest, error) - grpc.ServerStream -} - -type accessGraphServiceGitlabEventsStreamServer struct { - grpc.ServerStream -} - -func (x *accessGraphServiceGitlabEventsStreamServer) Send(m *GitlabEventsStreamResponse) error { - return x.ServerStream.SendMsg(m) + return srv.(AccessGraphServiceServer).GitlabEventsStream(&grpc.GenericServerStream[GitlabEventsStreamRequest, GitlabEventsStreamResponse]{ServerStream: stream}) } -func (x *accessGraphServiceGitlabEventsStreamServer) Recv() (*GitlabEventsStreamRequest, error) { - m := new(GitlabEventsStreamRequest) - if err := x.ServerStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type AccessGraphService_GitlabEventsStreamServer = grpc.BidiStreamingServer[GitlabEventsStreamRequest, GitlabEventsStreamResponse] func _AccessGraphService_EntraEventsStream_Handler(srv interface{}, stream grpc.ServerStream) error { - return srv.(AccessGraphServiceServer).EntraEventsStream(&accessGraphServiceEntraEventsStreamServer{ServerStream: stream}) -} - -type AccessGraphService_EntraEventsStreamServer interface { - Send(*EntraEventsStreamResponse) error - Recv() (*EntraEventsStreamRequest, error) - grpc.ServerStream -} - -type accessGraphServiceEntraEventsStreamServer struct { - grpc.ServerStream -} - -func (x *accessGraphServiceEntraEventsStreamServer) Send(m *EntraEventsStreamResponse) error { - return x.ServerStream.SendMsg(m) + return srv.(AccessGraphServiceServer).EntraEventsStream(&grpc.GenericServerStream[EntraEventsStreamRequest, EntraEventsStreamResponse]{ServerStream: stream}) } -func (x *accessGraphServiceEntraEventsStreamServer) Recv() (*EntraEventsStreamRequest, error) { - m := new(EntraEventsStreamRequest) - if err := x.ServerStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type AccessGraphService_EntraEventsStreamServer = grpc.BidiStreamingServer[EntraEventsStreamRequest, EntraEventsStreamResponse] // AccessGraphService_ServiceDesc is the grpc.ServiceDesc for AccessGraphService service. // It's only intended for direct use with grpc.RegisterService, diff --git a/gen/proto/go/teleport/lib/teleterm/v1/service_grpc.pb.go b/gen/proto/go/teleport/lib/teleterm/v1/service_grpc.pb.go index f389a1704c7e7..1af4f8cd62df8 100644 --- a/gen/proto/go/teleport/lib/teleterm/v1/service_grpc.pb.go +++ b/gen/proto/go/teleport/lib/teleterm/v1/service_grpc.pb.go @@ -17,7 +17,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: -// - protoc-gen-go-grpc v1.4.0 +// - protoc-gen-go-grpc v1.5.0 // - protoc (unknown) // source: teleport/lib/teleterm/v1/service.proto @@ -32,8 +32,8 @@ import ( // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. -// Requires gRPC-Go v1.62.0 or later. -const _ = grpc.SupportPackageIsVersion8 +// Requires gRPC-Go v1.64.0 or later. +const _ = grpc.SupportPackageIsVersion9 const ( TerminalService_UpdateTshdEventsServerAddress_FullMethodName = "/teleport.lib.teleterm.v1.TerminalService/UpdateTshdEventsServerAddress" @@ -171,11 +171,11 @@ type TerminalServiceClient interface { // <- Send list of credentials (e.g. usernames) associated with device // -> Receive the index number associated with the selected credential in list // <- End - LoginPasswordless(ctx context.Context, opts ...grpc.CallOption) (TerminalService_LoginPasswordlessClient, error) + LoginPasswordless(ctx context.Context, opts ...grpc.CallOption) (grpc.BidiStreamingClient[LoginPasswordlessRequest, LoginPasswordlessResponse], error) // ClusterLogin logs out a user from cluster Logout(ctx context.Context, in *LogoutRequest, opts ...grpc.CallOption) (*EmptyResponse, error) // TransferFile sends a request to download/upload a file - TransferFile(ctx context.Context, in *FileTransferRequest, opts ...grpc.CallOption) (TerminalService_TransferFileClient, error) + TransferFile(ctx context.Context, in *FileTransferRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[FileTransferProgress], error) // ReportUsageEvent allows to send usage events that are then anonymized and forwarded to prehog ReportUsageEvent(ctx context.Context, in *ReportUsageEventRequest, opts ...grpc.CallOption) (*EmptyResponse, error) // UpdateHeadlessAuthenticationState updates a headless authentication resource's state. @@ -491,37 +491,18 @@ func (c *terminalServiceClient) Login(ctx context.Context, in *LoginRequest, opt return out, nil } -func (c *terminalServiceClient) LoginPasswordless(ctx context.Context, opts ...grpc.CallOption) (TerminalService_LoginPasswordlessClient, error) { +func (c *terminalServiceClient) LoginPasswordless(ctx context.Context, opts ...grpc.CallOption) (grpc.BidiStreamingClient[LoginPasswordlessRequest, LoginPasswordlessResponse], error) { cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) stream, err := c.cc.NewStream(ctx, &TerminalService_ServiceDesc.Streams[0], TerminalService_LoginPasswordless_FullMethodName, cOpts...) if err != nil { return nil, err } - x := &terminalServiceLoginPasswordlessClient{ClientStream: stream} + x := &grpc.GenericClientStream[LoginPasswordlessRequest, LoginPasswordlessResponse]{ClientStream: stream} return x, nil } -type TerminalService_LoginPasswordlessClient interface { - Send(*LoginPasswordlessRequest) error - Recv() (*LoginPasswordlessResponse, error) - grpc.ClientStream -} - -type terminalServiceLoginPasswordlessClient struct { - grpc.ClientStream -} - -func (x *terminalServiceLoginPasswordlessClient) Send(m *LoginPasswordlessRequest) error { - return x.ClientStream.SendMsg(m) -} - -func (x *terminalServiceLoginPasswordlessClient) Recv() (*LoginPasswordlessResponse, error) { - m := new(LoginPasswordlessResponse) - if err := x.ClientStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type TerminalService_LoginPasswordlessClient = grpc.BidiStreamingClient[LoginPasswordlessRequest, LoginPasswordlessResponse] func (c *terminalServiceClient) Logout(ctx context.Context, in *LogoutRequest, opts ...grpc.CallOption) (*EmptyResponse, error) { cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) @@ -533,13 +514,13 @@ func (c *terminalServiceClient) Logout(ctx context.Context, in *LogoutRequest, o return out, nil } -func (c *terminalServiceClient) TransferFile(ctx context.Context, in *FileTransferRequest, opts ...grpc.CallOption) (TerminalService_TransferFileClient, error) { +func (c *terminalServiceClient) TransferFile(ctx context.Context, in *FileTransferRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[FileTransferProgress], error) { cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) stream, err := c.cc.NewStream(ctx, &TerminalService_ServiceDesc.Streams[1], TerminalService_TransferFile_FullMethodName, cOpts...) if err != nil { return nil, err } - x := &terminalServiceTransferFileClient{ClientStream: stream} + x := &grpc.GenericClientStream[FileTransferRequest, FileTransferProgress]{ClientStream: stream} if err := x.ClientStream.SendMsg(in); err != nil { return nil, err } @@ -549,22 +530,8 @@ func (c *terminalServiceClient) TransferFile(ctx context.Context, in *FileTransf return x, nil } -type TerminalService_TransferFileClient interface { - Recv() (*FileTransferProgress, error) - grpc.ClientStream -} - -type terminalServiceTransferFileClient struct { - grpc.ClientStream -} - -func (x *terminalServiceTransferFileClient) Recv() (*FileTransferProgress, error) { - m := new(FileTransferProgress) - if err := x.ClientStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type TerminalService_TransferFileClient = grpc.ServerStreamingClient[FileTransferProgress] func (c *terminalServiceClient) ReportUsageEvent(ctx context.Context, in *ReportUsageEventRequest, opts ...grpc.CallOption) (*EmptyResponse, error) { cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) @@ -678,7 +645,7 @@ func (c *terminalServiceClient) AuthenticateWebDevice(ctx context.Context, in *A // TerminalServiceServer is the server API for TerminalService service. // All implementations must embed UnimplementedTerminalServiceServer -// for forward compatibility +// for forward compatibility. // // TerminalService is used by the Electron app to communicate with the tsh daemon. // @@ -768,11 +735,11 @@ type TerminalServiceServer interface { // <- Send list of credentials (e.g. usernames) associated with device // -> Receive the index number associated with the selected credential in list // <- End - LoginPasswordless(TerminalService_LoginPasswordlessServer) error + LoginPasswordless(grpc.BidiStreamingServer[LoginPasswordlessRequest, LoginPasswordlessResponse]) error // ClusterLogin logs out a user from cluster Logout(context.Context, *LogoutRequest) (*EmptyResponse, error) // TransferFile sends a request to download/upload a file - TransferFile(*FileTransferRequest, TerminalService_TransferFileServer) error + TransferFile(*FileTransferRequest, grpc.ServerStreamingServer[FileTransferProgress]) error // ReportUsageEvent allows to send usage events that are then anonymized and forwarded to prehog ReportUsageEvent(context.Context, *ReportUsageEventRequest) (*EmptyResponse, error) // UpdateHeadlessAuthenticationState updates a headless authentication resource's state. @@ -811,9 +778,12 @@ type TerminalServiceServer interface { mustEmbedUnimplementedTerminalServiceServer() } -// UnimplementedTerminalServiceServer must be embedded to have forward compatible implementations. -type UnimplementedTerminalServiceServer struct { -} +// UnimplementedTerminalServiceServer must be embedded to have +// forward compatible implementations. +// +// NOTE: this should be embedded by value instead of pointer to avoid a nil +// pointer dereference when methods are called. +type UnimplementedTerminalServiceServer struct{} func (UnimplementedTerminalServiceServer) UpdateTshdEventsServerAddress(context.Context, *UpdateTshdEventsServerAddressRequest) (*UpdateTshdEventsServerAddressResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method UpdateTshdEventsServerAddress not implemented") @@ -896,13 +866,13 @@ func (UnimplementedTerminalServiceServer) GetCluster(context.Context, *GetCluste func (UnimplementedTerminalServiceServer) Login(context.Context, *LoginRequest) (*EmptyResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method Login not implemented") } -func (UnimplementedTerminalServiceServer) LoginPasswordless(TerminalService_LoginPasswordlessServer) error { +func (UnimplementedTerminalServiceServer) LoginPasswordless(grpc.BidiStreamingServer[LoginPasswordlessRequest, LoginPasswordlessResponse]) error { return status.Errorf(codes.Unimplemented, "method LoginPasswordless not implemented") } func (UnimplementedTerminalServiceServer) Logout(context.Context, *LogoutRequest) (*EmptyResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method Logout not implemented") } -func (UnimplementedTerminalServiceServer) TransferFile(*FileTransferRequest, TerminalService_TransferFileServer) error { +func (UnimplementedTerminalServiceServer) TransferFile(*FileTransferRequest, grpc.ServerStreamingServer[FileTransferProgress]) error { return status.Errorf(codes.Unimplemented, "method TransferFile not implemented") } func (UnimplementedTerminalServiceServer) ReportUsageEvent(context.Context, *ReportUsageEventRequest) (*EmptyResponse, error) { @@ -939,6 +909,7 @@ func (UnimplementedTerminalServiceServer) AuthenticateWebDevice(context.Context, return nil, status.Errorf(codes.Unimplemented, "method AuthenticateWebDevice not implemented") } func (UnimplementedTerminalServiceServer) mustEmbedUnimplementedTerminalServiceServer() {} +func (UnimplementedTerminalServiceServer) testEmbeddedByValue() {} // UnsafeTerminalServiceServer may be embedded to opt out of forward compatibility for this service. // Use of this interface is not recommended, as added methods to TerminalServiceServer will @@ -948,6 +919,13 @@ type UnsafeTerminalServiceServer interface { } func RegisterTerminalServiceServer(s grpc.ServiceRegistrar, srv TerminalServiceServer) { + // If the following call pancis, it indicates UnimplementedTerminalServiceServer was + // embedded by pointer and is nil. This will cause panics if an + // unimplemented method is ever invoked, so we test this at initialization + // time to prevent it from happening at runtime later due to I/O. + if t, ok := srv.(interface{ testEmbeddedByValue() }); ok { + t.testEmbeddedByValue() + } s.RegisterService(&TerminalService_ServiceDesc, srv) } @@ -1438,30 +1416,11 @@ func _TerminalService_Login_Handler(srv interface{}, ctx context.Context, dec fu } func _TerminalService_LoginPasswordless_Handler(srv interface{}, stream grpc.ServerStream) error { - return srv.(TerminalServiceServer).LoginPasswordless(&terminalServiceLoginPasswordlessServer{ServerStream: stream}) -} - -type TerminalService_LoginPasswordlessServer interface { - Send(*LoginPasswordlessResponse) error - Recv() (*LoginPasswordlessRequest, error) - grpc.ServerStream -} - -type terminalServiceLoginPasswordlessServer struct { - grpc.ServerStream -} - -func (x *terminalServiceLoginPasswordlessServer) Send(m *LoginPasswordlessResponse) error { - return x.ServerStream.SendMsg(m) + return srv.(TerminalServiceServer).LoginPasswordless(&grpc.GenericServerStream[LoginPasswordlessRequest, LoginPasswordlessResponse]{ServerStream: stream}) } -func (x *terminalServiceLoginPasswordlessServer) Recv() (*LoginPasswordlessRequest, error) { - m := new(LoginPasswordlessRequest) - if err := x.ServerStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type TerminalService_LoginPasswordlessServer = grpc.BidiStreamingServer[LoginPasswordlessRequest, LoginPasswordlessResponse] func _TerminalService_Logout_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(LogoutRequest) @@ -1486,21 +1445,11 @@ func _TerminalService_TransferFile_Handler(srv interface{}, stream grpc.ServerSt if err := stream.RecvMsg(m); err != nil { return err } - return srv.(TerminalServiceServer).TransferFile(m, &terminalServiceTransferFileServer{ServerStream: stream}) -} - -type TerminalService_TransferFileServer interface { - Send(*FileTransferProgress) error - grpc.ServerStream -} - -type terminalServiceTransferFileServer struct { - grpc.ServerStream + return srv.(TerminalServiceServer).TransferFile(m, &grpc.GenericServerStream[FileTransferRequest, FileTransferProgress]{ServerStream: stream}) } -func (x *terminalServiceTransferFileServer) Send(m *FileTransferProgress) error { - return x.ServerStream.SendMsg(m) -} +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type TerminalService_TransferFileServer = grpc.ServerStreamingServer[FileTransferProgress] func _TerminalService_ReportUsageEvent_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(ReportUsageEventRequest) diff --git a/gen/proto/go/teleport/lib/teleterm/v1/tshd_events_service_grpc.pb.go b/gen/proto/go/teleport/lib/teleterm/v1/tshd_events_service_grpc.pb.go index bd558541e9342..7dc9087c46d05 100644 --- a/gen/proto/go/teleport/lib/teleterm/v1/tshd_events_service_grpc.pb.go +++ b/gen/proto/go/teleport/lib/teleterm/v1/tshd_events_service_grpc.pb.go @@ -17,7 +17,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: -// - protoc-gen-go-grpc v1.4.0 +// - protoc-gen-go-grpc v1.5.0 // - protoc (unknown) // source: teleport/lib/teleterm/v1/tshd_events_service.proto @@ -32,8 +32,8 @@ import ( // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. -// Requires gRPC-Go v1.62.0 or later. -const _ = grpc.SupportPackageIsVersion8 +// Requires gRPC-Go v1.64.0 or later. +const _ = grpc.SupportPackageIsVersion9 const ( TshdEventsService_Relogin_FullMethodName = "/teleport.lib.teleterm.v1.TshdEventsService/Relogin" @@ -147,7 +147,7 @@ func (c *tshdEventsServiceClient) ReportUnexpectedVnetShutdown(ctx context.Conte // TshdEventsServiceServer is the server API for TshdEventsService service. // All implementations must embed UnimplementedTshdEventsServiceServer -// for forward compatibility +// for forward compatibility. // // TshdEventsService is served by the Electron app. The tsh daemon calls this service to notify the // app about actions that happen outside of the app itself. @@ -179,9 +179,12 @@ type TshdEventsServiceServer interface { mustEmbedUnimplementedTshdEventsServiceServer() } -// UnimplementedTshdEventsServiceServer must be embedded to have forward compatible implementations. -type UnimplementedTshdEventsServiceServer struct { -} +// UnimplementedTshdEventsServiceServer must be embedded to have +// forward compatible implementations. +// +// NOTE: this should be embedded by value instead of pointer to avoid a nil +// pointer dereference when methods are called. +type UnimplementedTshdEventsServiceServer struct{} func (UnimplementedTshdEventsServiceServer) Relogin(context.Context, *ReloginRequest) (*ReloginResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method Relogin not implemented") @@ -202,6 +205,7 @@ func (UnimplementedTshdEventsServiceServer) ReportUnexpectedVnetShutdown(context return nil, status.Errorf(codes.Unimplemented, "method ReportUnexpectedVnetShutdown not implemented") } func (UnimplementedTshdEventsServiceServer) mustEmbedUnimplementedTshdEventsServiceServer() {} +func (UnimplementedTshdEventsServiceServer) testEmbeddedByValue() {} // UnsafeTshdEventsServiceServer may be embedded to opt out of forward compatibility for this service. // Use of this interface is not recommended, as added methods to TshdEventsServiceServer will @@ -211,6 +215,13 @@ type UnsafeTshdEventsServiceServer interface { } func RegisterTshdEventsServiceServer(s grpc.ServiceRegistrar, srv TshdEventsServiceServer) { + // If the following call pancis, it indicates UnimplementedTshdEventsServiceServer was + // embedded by pointer and is nil. This will cause panics if an + // unimplemented method is ever invoked, so we test this at initialization + // time to prevent it from happening at runtime later due to I/O. + if t, ok := srv.(interface{ testEmbeddedByValue() }); ok { + t.testEmbeddedByValue() + } s.RegisterService(&TshdEventsService_ServiceDesc, srv) } diff --git a/gen/proto/go/teleport/lib/teleterm/vnet/v1/vnet_service_grpc.pb.go b/gen/proto/go/teleport/lib/teleterm/vnet/v1/vnet_service_grpc.pb.go index 2987dd3c82811..a3b9e909eeaa2 100644 --- a/gen/proto/go/teleport/lib/teleterm/vnet/v1/vnet_service_grpc.pb.go +++ b/gen/proto/go/teleport/lib/teleterm/vnet/v1/vnet_service_grpc.pb.go @@ -16,7 +16,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: -// - protoc-gen-go-grpc v1.4.0 +// - protoc-gen-go-grpc v1.5.0 // - protoc (unknown) // source: teleport/lib/teleterm/vnet/v1/vnet_service.proto @@ -31,8 +31,8 @@ import ( // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. -// Requires gRPC-Go v1.62.0 or later. -const _ = grpc.SupportPackageIsVersion8 +// Requires gRPC-Go v1.64.0 or later. +const _ = grpc.SupportPackageIsVersion9 const ( VnetService_Start_FullMethodName = "/teleport.lib.teleterm.vnet.v1.VnetService/Start" @@ -116,7 +116,7 @@ func (c *vnetServiceClient) GetBackgroundItemStatus(ctx context.Context, in *Get // VnetServiceServer is the server API for VnetService service. // All implementations must embed UnimplementedVnetServiceServer -// for forward compatibility +// for forward compatibility. // // VnetService provides methods to manage a VNet instance. type VnetServiceServer interface { @@ -140,9 +140,12 @@ type VnetServiceServer interface { mustEmbedUnimplementedVnetServiceServer() } -// UnimplementedVnetServiceServer must be embedded to have forward compatible implementations. -type UnimplementedVnetServiceServer struct { -} +// UnimplementedVnetServiceServer must be embedded to have +// forward compatible implementations. +// +// NOTE: this should be embedded by value instead of pointer to avoid a nil +// pointer dereference when methods are called. +type UnimplementedVnetServiceServer struct{} func (UnimplementedVnetServiceServer) Start(context.Context, *StartRequest) (*StartResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method Start not implemented") @@ -157,6 +160,7 @@ func (UnimplementedVnetServiceServer) GetBackgroundItemStatus(context.Context, * return nil, status.Errorf(codes.Unimplemented, "method GetBackgroundItemStatus not implemented") } func (UnimplementedVnetServiceServer) mustEmbedUnimplementedVnetServiceServer() {} +func (UnimplementedVnetServiceServer) testEmbeddedByValue() {} // UnsafeVnetServiceServer may be embedded to opt out of forward compatibility for this service. // Use of this interface is not recommended, as added methods to VnetServiceServer will @@ -166,6 +170,13 @@ type UnsafeVnetServiceServer interface { } func RegisterVnetServiceServer(s grpc.ServiceRegistrar, srv VnetServiceServer) { + // If the following call pancis, it indicates UnimplementedVnetServiceServer was + // embedded by pointer and is nil. This will cause panics if an + // unimplemented method is ever invoked, so we test this at initialization + // time to prevent it from happening at runtime later due to I/O. + if t, ok := srv.(interface{ testEmbeddedByValue() }); ok { + t.testEmbeddedByValue() + } s.RegisterService(&VnetService_ServiceDesc, srv) } diff --git a/go.mod b/go.mod index acb5c2976fb0b..a38a0ccd22a57 100644 --- a/go.mod +++ b/go.mod @@ -206,7 +206,7 @@ require ( google.golang.org/api v0.187.0 google.golang.org/genproto/googleapis/rpc v0.0.0-20240701130421-f6361c86f094 google.golang.org/grpc v1.65.0 - google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.4.0 + google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.5.0 google.golang.org/protobuf v1.34.2 gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c gopkg.in/dnaeon/go-vcr.v3 v3.2.0 @@ -309,7 +309,7 @@ require ( github.com/dmarkham/enumer v1.5.9 // indirect github.com/docker/cli v25.0.1+incompatible // indirect github.com/docker/distribution v2.8.3+incompatible // indirect - github.com/docker/docker v26.1.1+incompatible // indirect + github.com/docker/docker v26.1.4+incompatible // indirect github.com/docker/docker-credential-helpers v0.8.2 // indirect github.com/docker/go-connections v0.5.0 // indirect github.com/docker/go-metrics v0.0.1 // indirect diff --git a/go.sum b/go.sum index 0e0887041f210..c0ae6fa8ba340 100644 --- a/go.sum +++ b/go.sum @@ -1117,8 +1117,8 @@ github.com/docker/cli v25.0.1+incompatible h1:mFpqnrS6Hsm3v1k7Wa/BO23oz0k121MTbT github.com/docker/cli v25.0.1+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= github.com/docker/distribution v2.8.3+incompatible h1:AtKxIZ36LoNK51+Z6RpzLpddBirtxJnzDrHLEKxTAYk= github.com/docker/distribution v2.8.3+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/docker v26.1.1+incompatible h1:oI+4kkAgIwwb54b9OC7Xc3hSgu1RlJA/Lln/DF72djQ= -github.com/docker/docker v26.1.1+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v26.1.4+incompatible h1:vuTpXDuoga+Z38m1OZHzl7NKisKWaWlhjQk7IDPSLsU= +github.com/docker/docker v26.1.4+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/docker-credential-helpers v0.8.2 h1:bX3YxiGzFP5sOXWc3bTPEXdEaZSeVMrFgOr3T+zrFAo= github.com/docker/docker-credential-helpers v0.8.2/go.mod h1:P3ci7E3lwkZg6XiHdRKft1KckHiO9a2rNtyFbZ/ry9M= github.com/docker/go-connections v0.5.0 h1:USnMq7hx7gwdVZq1L49hLXaFtUdTADjXGp+uj1Br63c= @@ -3121,8 +3121,8 @@ google.golang.org/grpc v1.56.3/go.mod h1:I9bI3vqKfayGqPUAwGdOSu7kt6oIJLixfffKrpX google.golang.org/grpc v1.65.0 h1:bs/cUb4lp1G5iImFFd3u5ixQzweKizoZJAwBNLR42lc= google.golang.org/grpc v1.65.0/go.mod h1:WgYC2ypjlB0EiQi6wdKixMqukr6lBc0Vo+oOgjrM5ZQ= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= -google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.4.0 h1:9SxA29VM43MF5Z9dQu694wmY5t8E/Gxr7s+RSxiIDmc= -google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.4.0/go.mod h1:yZOK5zhQMiALmuweVdIVoQPa6eIJyXn2B9g5dJDhqX4= +google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.5.0 h1:LbGOiI82o4xuOWAYyRCrb7qgrRsKvlLRLcFal5iDz5w= +google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.5.0/go.mod h1:BQzMLXlekia34Yc4jZRJW0Rs0bhTn5/jMYPN349sUPA= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= diff --git a/integration/proxy/teleterm_test.go b/integration/proxy/teleterm_test.go index 8608111886aec..e6172b0e3e664 100644 --- a/integration/proxy/teleterm_test.go +++ b/integration/proxy/teleterm_test.go @@ -297,7 +297,7 @@ func testGatewayCertRenewal(ctx context.Context, t *testing.T, params gatewayCer } type mockTSHDEventsService struct { - *api.UnimplementedTshdEventsServiceServer + api.UnimplementedTshdEventsServiceServer t *testing.T tc *libclient.TeleportClient diff --git a/integrations/event-handler/app.go b/integrations/event-handler/app.go index bcc6feb7bc36d..6a44e76aa4221 100644 --- a/integrations/event-handler/app.go +++ b/integrations/event-handler/app.go @@ -18,6 +18,7 @@ package main import ( "context" + "path/filepath" "time" "github.com/gravitational/trace" @@ -27,6 +28,7 @@ import ( "github.com/gravitational/teleport/integrations/lib" "github.com/gravitational/teleport/integrations/lib/backoff" "github.com/gravitational/teleport/integrations/lib/logger" + "github.com/gravitational/teleport/lib/integrations/diagnostics" ) // App is the app structure @@ -77,6 +79,7 @@ func (a *App) Run(ctx context.Context) error { a.SpawnCriticalJob(a.eventsJob) a.SpawnCriticalJob(a.sessionEventsJob) + a.SpawnCritical(a.sessionEventsJob.processMissingRecordings) <-a.Process.Done() lastWindow := a.EventWatcher.getWindowStartTime() @@ -142,7 +145,6 @@ func (a *App) SendEvent(ctx context.Context, url string, e *TeleportEvent) error } log.WithFields(fields).Debug("Event sent") - log.WithField("event", e).Debug("Event dump") return nil } @@ -247,3 +249,9 @@ func (a *App) RegisterSession(ctx context.Context, e *TeleportEvent) { log.Error("Registering session: ", err) } } + +func (a *App) Profile() { + if err := diagnostics.Profile(filepath.Join(a.Config.StorageDir, "profiles")); err != nil { + logrus.WithError(err).Warn("failed to capture profiles") + } +} diff --git a/integrations/event-handler/fluentd_client.go b/integrations/event-handler/fluentd_client.go index 79468b6f3da27..92015bef4d312 100644 --- a/integrations/event-handler/fluentd_client.go +++ b/integrations/event-handler/fluentd_client.go @@ -91,7 +91,7 @@ func getCertPool(c *FluentdConfig) (*x509.CertPool, error) { // Send sends event to fluentd func (f *FluentdClient) Send(ctx context.Context, url string, b []byte) error { - log.WithField("json", string(b)).Debug("JSON to send") + log.WithField("payload", string(b)).Debug("Sending event to Fluentd") req, err := http.NewRequestWithContext(ctx, "POST", url, bytes.NewReader(b)) if err != nil { diff --git a/integrations/event-handler/go.mod b/integrations/event-handler/go.mod index 11fd3836b122a..a03e76ecd8bb7 100644 --- a/integrations/event-handler/go.mod +++ b/integrations/event-handler/go.mod @@ -18,7 +18,6 @@ require ( github.com/sethvargo/go-limiter v1.0.0 github.com/sirupsen/logrus v1.9.3 github.com/stretchr/testify v1.9.0 - golang.org/x/sync v0.7.0 google.golang.org/protobuf v1.34.2 ) @@ -116,7 +115,7 @@ require ( github.com/distribution/reference v0.6.0 // indirect github.com/docker/cli v25.0.1+incompatible // indirect github.com/docker/distribution v2.8.3+incompatible // indirect - github.com/docker/docker v26.1.1+incompatible // indirect + github.com/docker/docker v26.1.4+incompatible // indirect github.com/docker/docker-credential-helpers v0.8.2 // indirect github.com/docker/go-connections v0.5.0 // indirect github.com/docker/go-metrics v0.0.1 // indirect @@ -279,6 +278,7 @@ require ( golang.org/x/mod v0.18.0 // indirect golang.org/x/net v0.26.0 // indirect golang.org/x/oauth2 v0.21.0 // indirect + golang.org/x/sync v0.7.0 // indirect golang.org/x/sys v0.21.0 // indirect golang.org/x/term v0.21.0 // indirect golang.org/x/text v0.16.0 // indirect @@ -288,7 +288,7 @@ require ( google.golang.org/genproto/googleapis/api v0.0.0-20240701130421-f6361c86f094 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20240701130421-f6361c86f094 // indirect google.golang.org/grpc v1.65.0 // indirect - google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.4.0 // indirect + google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.5.0 // indirect gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22 // indirect diff --git a/integrations/event-handler/go.sum b/integrations/event-handler/go.sum index 31b54526320ec..148d3d4db54d5 100644 --- a/integrations/event-handler/go.sum +++ b/integrations/event-handler/go.sum @@ -885,8 +885,8 @@ github.com/docker/cli v25.0.1+incompatible h1:mFpqnrS6Hsm3v1k7Wa/BO23oz0k121MTbT github.com/docker/cli v25.0.1+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= github.com/docker/distribution v2.8.3+incompatible h1:AtKxIZ36LoNK51+Z6RpzLpddBirtxJnzDrHLEKxTAYk= github.com/docker/distribution v2.8.3+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/docker v26.1.1+incompatible h1:oI+4kkAgIwwb54b9OC7Xc3hSgu1RlJA/Lln/DF72djQ= -github.com/docker/docker v26.1.1+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v26.1.4+incompatible h1:vuTpXDuoga+Z38m1OZHzl7NKisKWaWlhjQk7IDPSLsU= +github.com/docker/docker v26.1.4+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/docker-credential-helpers v0.8.2 h1:bX3YxiGzFP5sOXWc3bTPEXdEaZSeVMrFgOr3T+zrFAo= github.com/docker/docker-credential-helpers v0.8.2/go.mod h1:P3ci7E3lwkZg6XiHdRKft1KckHiO9a2rNtyFbZ/ry9M= github.com/docker/go-connections v0.5.0 h1:USnMq7hx7gwdVZq1L49hLXaFtUdTADjXGp+uj1Br63c= @@ -2339,8 +2339,8 @@ google.golang.org/grpc v1.56.3/go.mod h1:I9bI3vqKfayGqPUAwGdOSu7kt6oIJLixfffKrpX google.golang.org/grpc v1.65.0 h1:bs/cUb4lp1G5iImFFd3u5ixQzweKizoZJAwBNLR42lc= google.golang.org/grpc v1.65.0/go.mod h1:WgYC2ypjlB0EiQi6wdKixMqukr6lBc0Vo+oOgjrM5ZQ= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= -google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.4.0 h1:9SxA29VM43MF5Z9dQu694wmY5t8E/Gxr7s+RSxiIDmc= -google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.4.0/go.mod h1:yZOK5zhQMiALmuweVdIVoQPa6eIJyXn2B9g5dJDhqX4= +google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.5.0 h1:LbGOiI82o4xuOWAYyRCrb7qgrRsKvlLRLcFal5iDz5w= +google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.5.0/go.mod h1:BQzMLXlekia34Yc4jZRJW0Rs0bhTn5/jMYPN349sUPA= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= diff --git a/integrations/event-handler/session_events_job.go b/integrations/event-handler/session_events_job.go index bdbee2ffe93c1..4013f419183e0 100644 --- a/integrations/event-handler/session_events_job.go +++ b/integrations/event-handler/session_events_job.go @@ -16,34 +16,26 @@ package main import ( "context" - "os" "time" "github.com/gravitational/trace" "github.com/jonboulle/clockwork" "github.com/sirupsen/logrus" - "golang.org/x/sync/semaphore" + "github.com/gravitational/teleport/api/utils/retryutils" "github.com/gravitational/teleport/integrations/lib" "github.com/gravitational/teleport/integrations/lib/backoff" "github.com/gravitational/teleport/integrations/lib/logger" ) -const ( - // sessionBackoffBase is an initial (minimum) backoff value. - sessionBackoffBase = 3 * time.Second - // sessionBackoffMax is a backoff threshold - sessionBackoffMax = 2 * time.Minute - // sessionBackoffNumTries is the maximum number of backoff tries - sessionBackoffNumTries = 5 -) - // session is the utility struct used for session ingestion type session struct { // ID current ID ID string // Index current event index Index int64 + // UploadTime is the time at which the recording was uploaded. + UploadTime time.Time } // SessionEventsJob incapsulates session events consumption logic @@ -51,14 +43,14 @@ type SessionEventsJob struct { lib.ServiceJob app *App sessions chan session - semaphore *semaphore.Weighted + semaphore chan struct{} } // NewSessionEventsJob creates new EventsJob structure func NewSessionEventsJob(app *App) *SessionEventsJob { j := &SessionEventsJob{ app: app, - semaphore: semaphore.NewWeighted(int64(app.Config.Concurrency)), + semaphore: make(chan struct{}, app.Config.Concurrency), sessions: make(chan session), } @@ -92,50 +84,22 @@ func (j *SessionEventsJob) run(ctx context.Context) error { logger.Info("Starting session ingest") - if err := j.semaphore.Acquire(ctx, 1); err != nil { - logger.WithError(err).Error("Failed to acquire semaphore") - continue + select { + case j.semaphore <- struct{}{}: + case <-ctx.Done(): + logger.WithError(ctx.Err()).Error("Failed to acquire semaphore") + return nil } func(s session, log logrus.FieldLogger) { j.app.SpawnCritical(func(ctx context.Context) error { - defer j.semaphore.Release(1) - - backoff := backoff.NewDecorr(sessionBackoffBase, sessionBackoffMax, clockwork.NewRealClock()) - backoffCount := sessionBackoffNumTries - - for { - retry, err := j.consumeSession(ctx, s) - - // If sessions needs to retry - if err != nil && retry { - log.WithError(err).WithField("n", backoffCount).Error("Session ingestion error, retrying") - - // Sleep for required interval - err := backoff.Do(ctx) - if err != nil { - return trace.Wrap(err) - } - - // Check if there are number of tries left - backoffCount-- - if backoffCount < 0 { - log.WithField("limit", sessionBackoffNumTries).Error("Session ingestion exceeded attempt limit, aborting") - return nil - } - continue - } - - if err != nil { - if !lib.IsCanceled(err) { - log.WithField("err", err).Error("Session ingestion failed") - } - return err - } - - // No errors, we've finished with this session - return nil + defer func() { <-j.semaphore }() + + if err := j.processSession(ctx, s, 0); err != nil { + return trace.Wrap(err) } + + return nil }) }(s, logger) case <-ctx.Done(): @@ -147,6 +111,125 @@ func (j *SessionEventsJob) run(ctx context.Context) error { } } +func (j *SessionEventsJob) processSession(ctx context.Context, s session, processingAttempt int) error { + const ( + // maxNumberOfProcessingAttempts is the number of times a non-existent + // session recording will be processed before assuming the recording + // is lost forever. + maxNumberOfProcessingAttempts = 2 + // eventTimeCutOff is the point of time in the past at which a missing + // session recording is assumed to be lost forever. + eventTimeCutOff = -48 * time.Hour + // sessionBackoffBase is an initial (minimum) backoff value. + sessionBackoffBase = 3 * time.Second + // sessionBackoffMax is a backoff threshold + sessionBackoffMax = time.Minute + // sessionBackoffNumTries is the maximum number of backoff tries + sessionBackoffNumTries = 3 + ) + + log := logger.Get(ctx).WithField("id", s.ID).WithField("index", s.Index) + backoff := backoff.NewDecorr(sessionBackoffBase, sessionBackoffMax, clockwork.NewRealClock()) + attempt := sessionBackoffNumTries + + for { + retry, err := j.consumeSession(ctx, s) + switch { + case trace.IsNotFound(err): + // If the session was not found, and it was from more + // than the [eventTimeCutOff], abort processing it any further + // as the recording is likely never going to exist. + if (!s.UploadTime.IsZero() && s.UploadTime.Before(time.Now().Add(eventTimeCutOff))) || + processingAttempt > maxNumberOfProcessingAttempts { + // Remove any trace of the session so that it is not + // processed again in the future and doesn't stick around + // on disk forever. + return trace.NewAggregate(j.app.State.RemoveMissingRecording(s.ID), j.app.State.RemoveSession(s.ID)) + } + + // Otherwise, mark that the session was failed to be processed + // so that it can be tried again in the background. + return trace.NewAggregate(j.app.State.SetMissingRecording(s, processingAttempt+1), j.app.State.RemoveSession(s.ID)) + case err != nil && retry: + // If the number of retries has been exceeded, then + // abort processing the session any further. + attempt-- + if attempt <= 0 { + log.WithField("limit", sessionBackoffNumTries).Error("Session ingestion exceeded attempt limit, aborting") + return trace.LimitExceeded("Session ingestion exceeded attempt limit") + } + + log.WithError(err).WithField("n", attempt).Error("Session ingestion error, retrying") + + // Perform backoff before retrying the session again. + if err := backoff.Do(ctx); err != nil { + return trace.Wrap(err) + } + case err != nil: + // Abort on any errors that don't require a retry. + if !lib.IsCanceled(err) { + log.WithField("err", err).Error("Session ingestion failed") + } + return trace.Wrap(err) + default: + // No errors, we've finished processing the session. + return nil + } + } +} + +// processMissingRecordings periodically attempts to reconcile events +// from session recordings that were previously not found. +func (j *SessionEventsJob) processMissingRecordings(ctx context.Context) error { + const ( + initialProcessingDelay = time.Minute + processingInterval = 3 * time.Minute + maxNumberOfInflightSessions = 10 + ) + + ctx, cancel := context.WithCancel(ctx) + j.app.Process.OnTerminate(func(_ context.Context) error { + cancel() + return nil + }) + + jitter := retryutils.NewSeventhJitter() + timer := time.NewTimer(jitter(initialProcessingDelay)) + defer timer.Stop() + + semaphore := make(chan struct{}, maxNumberOfInflightSessions) + for { + select { + case <-timer.C: + case <-ctx.Done(): + return nil + } + + err := j.app.State.IterateMissingRecordings(func(sess session, attempts int) error { + select { + case semaphore <- struct{}{}: + case <-ctx.Done(): + return trace.Wrap(ctx.Err()) + } + + go func() { + defer func() { <-semaphore }() + + if err := j.processSession(ctx, sess, attempts); err != nil { + logger.Get(ctx).WithError(err).Debug("Failed processing session recording") + } + }() + + return nil + }) + if err != nil && !lib.IsCanceled(err) { + logger.Get(ctx).WithError(err).Warn("Unable to load previously failed sessions for processing") + } + + timer.Reset(jitter(processingInterval)) + } +} + // restartPausedSessions restarts sessions saved in state func (j *SessionEventsJob) restartPausedSessions() error { sessions, err := j.app.State.GetSessions() @@ -184,11 +267,7 @@ func (j *SessionEventsJob) restartPausedSessions() error { // consumeSession ingests session func (j *SessionEventsJob) consumeSession(ctx context.Context, s session) (bool, error) { - log := logger.Get(ctx) - url := j.app.Config.FluentdSessionURL + "." + s.ID + ".log" - - log.WithField("id", s.ID).WithField("index", s.Index).Info("Started session events ingest") chEvt, chErr := j.app.EventWatcher.StreamUnstructuredSessionEvents(ctx, s.ID, s.Index) Loop: @@ -199,7 +278,7 @@ Loop: case evt, ok := <-chEvt: if !ok { - log.WithField("id", s.ID).Info("Finished session events ingest") + logrus.WithField("id", s.ID).Info("Finished session events ingest") break Loop // Break the main loop } @@ -236,12 +315,7 @@ Loop: // We have finished ingestion and do not need session state anymore err := j.app.State.RemoveSession(s.ID) - // If the session had no events, the file won't exist, so we ignore the error - if err != nil && !os.IsNotExist(err) { - return false, trace.Wrap(err) - } - - return false, nil + return false, trace.Wrap(err) } // RegisterSession starts session event ingestion @@ -251,7 +325,7 @@ func (j *SessionEventsJob) RegisterSession(ctx context.Context, e *TeleportEvent return trace.Wrap(err) } - s := session{ID: e.SessionID, Index: 0} + s := session{ID: e.SessionID, Index: 0, UploadTime: e.Time} go func() { select { diff --git a/integrations/event-handler/state.go b/integrations/event-handler/state.go index 517e31be6cced..0706f0ef8a561 100644 --- a/integrations/event-handler/state.go +++ b/integrations/event-handler/state.go @@ -18,14 +18,19 @@ package main import ( "encoding/binary" + "encoding/json" + "errors" + "io/fs" "net" "os" "path" "strings" + "syscall" "time" "github.com/gravitational/trace" "github.com/peterbourgon/diskv/v3" + "github.com/sirupsen/logrus" "github.com/gravitational/teleport/integrations/lib/logger" @@ -51,6 +56,9 @@ const ( // sessionPrefix is the session key prefix sessionPrefix = "session" + // missingRecordingPrefix is the missing recording key prefix + missingRecordingPrefix = "missing_recording" + // storageDirPerms is storage directory permissions when created storageDirPerms = 0755 ) @@ -238,7 +246,100 @@ func (s *State) SetSessionIndex(id string, index int64) error { return s.dv.Write(sessionPrefix+id, b) } -// RemoveSession removes session from the state +// SetMissingRecording writes the session with missing recording into state. +func (s *State) SetMissingRecording(sess session, attempt int) error { + b, err := json.Marshal(missingRecording{ + Index: sess.Index, + Attempt: attempt, + Timestamp: sess.UploadTime, + }) + if err != nil { + return trace.Wrap(err) + } + + if err := s.dv.Write(missingRecordingPrefix+sess.ID, b); err != nil { + return trace.Wrap(err) + } + + return trace.Wrap(s.RemoveSession(sess.ID)) +} + +type missingRecording struct { + ID string `json:"id,omitempty"` + Index int64 + Attempt int + Timestamp time.Time +} + +// IterateMissingRecordings finds any sessions with a missing recording and +// provides them to the callback for processing. +func (s *State) IterateMissingRecordings(callback func(s session, attempts int) error) error { + closeC := make(chan struct{}) + defer close(closeC) + for key := range s.dv.KeysPrefix(missingRecordingPrefix, closeC) { + b, err := s.dv.Read(key) + if err != nil { + // Ignore any errors caused by the file being removed + // by an external entity. + var pathError *fs.PathError + if !errors.Is(err, fs.ErrNotExist) || + errors.As(err, &pathError) && errors.Is(pathError.Err, syscall.ENOENT) { + continue + } + + return trace.Wrap(err) + } + + var m missingRecording + if err := json.Unmarshal(b, &m); err != nil { + logrus.WithError(err).Warnf("Failed to unmarshal missing recording %s from persisted state", key) + continue + } + + s := session{ + ID: key[len(missingRecordingPrefix):], + Index: m.Index, + UploadTime: m.Timestamp, + } + + if err := callback(s, m.Attempt); err != nil { + return trace.Wrap(err) + } + } + + return nil +} + +// RemoveMissingRecording removes the session with a missing recording from state. +func (s *State) RemoveMissingRecording(id string) error { + err := s.dv.Erase(missingRecordingPrefix + id) + if err == nil { + return nil + } + + // If the session had no events, the file won't exist, so we ignore the error + var pathError *fs.PathError + if !errors.Is(err, fs.ErrNotExist) || + errors.As(err, &pathError) && errors.Is(pathError.Err, syscall.ENOENT) { + return nil + } + + return trace.Wrap(err) +} + +// RemoveSession removes session from the state. func (s *State) RemoveSession(id string) error { - return s.dv.Erase(sessionPrefix + id) + err := s.dv.Erase(sessionPrefix + id) + if err == nil { + return nil + } + + // If the session had no events, the file won't exist, so we ignore the error + var pathError *fs.PathError + if !errors.Is(err, fs.ErrNotExist) || + errors.As(err, &pathError) && errors.Is(pathError.Err, syscall.ENOENT) { + return nil + } + + return trace.Wrap(err) } diff --git a/integrations/event-handler/state_test.go b/integrations/event-handler/state_test.go index 828f38ff09f76..11ee192b95051 100644 --- a/integrations/event-handler/state_test.go +++ b/integrations/event-handler/state_test.go @@ -17,6 +17,9 @@ limitations under the License. package main import ( + "cmp" + "slices" + "strconv" "testing" "time" @@ -88,3 +91,60 @@ func TestStatePersist(t *testing.T) { assert.Equal(t, "testCursor", cursor) assert.Equal(t, "testId", id) } + +func TestStateMissingRecordings(t *testing.T) { + config := newStartCmdConfig(t) + state, err := NewState(config) + require.NoError(t, err) + + // Iterating should find no records if nothing has been stored yet. + err = state.IterateMissingRecordings(func(s session, attempts int) error { + t.Errorf("no missing sessions should have been found, got %v", s) + return nil + }) + require.NoError(t, err) + + // Removing a missing item should not produce an error. + err = state.RemoveMissingRecording("llama") + require.NoError(t, err) + + expected := make([]session, 0, 10) + for i := 0; i < 10; i++ { + s := session{ + ID: strconv.Itoa(i), + Index: int64(i), + UploadTime: time.Now().UTC(), + } + err := state.SetMissingRecording(s, 0) + expected = append(expected, s) + assert.NoError(t, err) + } + + // Iterating find all stored records and validate they match + // the original sessions. + records := make([]session, 0, 10) + err = state.IterateMissingRecordings(func(s session, attempts int) error { + records = append(records, s) + return nil + }) + require.NoError(t, err) + + slices.SortFunc(records, func(a, b session) int { + return cmp.Compare(a.Index, b.Index) + }) + + require.EqualValues(t, expected, records) + + // Remove all items and validate they no longer exist. + for i := 0; i < 10; i++ { + err = state.RemoveMissingRecording(expected[i].ID) + require.NoError(t, err) + } + + err = state.IterateMissingRecordings(func(s session, attempts int) error { + t.Errorf("no missing sessions should have been found, got %v", s) + return nil + }) + require.NoError(t, err) + +} diff --git a/integrations/lib/signals.go b/integrations/lib/signals.go index 47ffaca19984a..4774915a6271b 100644 --- a/integrations/lib/signals.go +++ b/integrations/lib/signals.go @@ -41,6 +41,7 @@ func ServeSignals(app Terminable, shutdownTimeout time.Duration) { signal.Notify(sigC, syscall.SIGTERM, // graceful shutdown syscall.SIGINT, // graceful-then-fast shutdown + syscall.SIGUSR1, // capture pprof profiles ) defer signal.Stop(sigC) @@ -67,6 +68,10 @@ func ServeSignals(app Terminable, shutdownTimeout time.Duration) { } go gracefulShutdown() alreadyInterrupted = true + case syscall.SIGUSR1: + if p, ok := app.(interface{ Profile() }); ok { + go p.Profile() + } } } } diff --git a/integrations/operator/crdgen/testdata/protofiles/teleport/legacy/types/events/events.proto b/integrations/operator/crdgen/testdata/protofiles/teleport/legacy/types/events/events.proto index a47222154eaa8..704e84c47d7a8 100644 --- a/integrations/operator/crdgen/testdata/protofiles/teleport/legacy/types/events/events.proto +++ b/integrations/operator/crdgen/testdata/protofiles/teleport/legacy/types/events/events.proto @@ -3562,6 +3562,8 @@ message RouteToApp { string AzureIdentity = 6 [(gogoproto.jsontag) = "azure_identity,omitempty"]; // GCPServiceAccount is the GCP service account to assume when accessing GCP API. string GCPServiceAccount = 7 [(gogoproto.jsontag) = "gcp_service_account,omitempty"]; + // URI is the application URI. + string URI = 8 [(gogoproto.jsontag) = "uri,omitempty"]; } // RouteToDatabase combines parameters for database service routing information. diff --git a/integrations/terraform/go.mod b/integrations/terraform/go.mod index 878a662ab28c7..4512760306376 100644 --- a/integrations/terraform/go.mod +++ b/integrations/terraform/go.mod @@ -132,7 +132,7 @@ require ( github.com/distribution/reference v0.6.0 // indirect github.com/docker/cli v25.0.1+incompatible // indirect github.com/docker/distribution v2.8.3+incompatible // indirect - github.com/docker/docker v26.1.1+incompatible // indirect + github.com/docker/docker v26.1.4+incompatible // indirect github.com/docker/docker-credential-helpers v0.8.2 // indirect github.com/docker/go-connections v0.5.0 // indirect github.com/docker/go-metrics v0.0.1 // indirect @@ -341,7 +341,7 @@ require ( google.golang.org/genproto v0.0.0-20240624140628-dc46fd24d27d // indirect google.golang.org/genproto/googleapis/api v0.0.0-20240701130421-f6361c86f094 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20240701130421-f6361c86f094 // indirect - google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.4.0 // indirect + google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.5.0 // indirect gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22 // indirect diff --git a/integrations/terraform/go.sum b/integrations/terraform/go.sum index fe076981af841..17b19d460949c 100644 --- a/integrations/terraform/go.sum +++ b/integrations/terraform/go.sum @@ -971,8 +971,8 @@ github.com/docker/cli v25.0.1+incompatible h1:mFpqnrS6Hsm3v1k7Wa/BO23oz0k121MTbT github.com/docker/cli v25.0.1+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= github.com/docker/distribution v2.8.3+incompatible h1:AtKxIZ36LoNK51+Z6RpzLpddBirtxJnzDrHLEKxTAYk= github.com/docker/distribution v2.8.3+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/docker v26.1.1+incompatible h1:oI+4kkAgIwwb54b9OC7Xc3hSgu1RlJA/Lln/DF72djQ= -github.com/docker/docker v26.1.1+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v26.1.4+incompatible h1:vuTpXDuoga+Z38m1OZHzl7NKisKWaWlhjQk7IDPSLsU= +github.com/docker/docker v26.1.4+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/docker-credential-helpers v0.8.2 h1:bX3YxiGzFP5sOXWc3bTPEXdEaZSeVMrFgOr3T+zrFAo= github.com/docker/docker-credential-helpers v0.8.2/go.mod h1:P3ci7E3lwkZg6XiHdRKft1KckHiO9a2rNtyFbZ/ry9M= github.com/docker/go-connections v0.5.0 h1:USnMq7hx7gwdVZq1L49hLXaFtUdTADjXGp+uj1Br63c= @@ -2717,8 +2717,8 @@ google.golang.org/grpc v1.56.3/go.mod h1:I9bI3vqKfayGqPUAwGdOSu7kt6oIJLixfffKrpX google.golang.org/grpc v1.65.0 h1:bs/cUb4lp1G5iImFFd3u5ixQzweKizoZJAwBNLR42lc= google.golang.org/grpc v1.65.0/go.mod h1:WgYC2ypjlB0EiQi6wdKixMqukr6lBc0Vo+oOgjrM5ZQ= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= -google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.4.0 h1:9SxA29VM43MF5Z9dQu694wmY5t8E/Gxr7s+RSxiIDmc= -google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.4.0/go.mod h1:yZOK5zhQMiALmuweVdIVoQPa6eIJyXn2B9g5dJDhqX4= +google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.5.0 h1:LbGOiI82o4xuOWAYyRCrb7qgrRsKvlLRLcFal5iDz5w= +google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.5.0/go.mod h1:BQzMLXlekia34Yc4jZRJW0Rs0bhTn5/jMYPN349sUPA= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= diff --git a/lib/auth/auth.go b/lib/auth/auth.go index 6403a31d06650..8d395e3977246 100644 --- a/lib/auth/auth.go +++ b/lib/auth/auth.go @@ -2042,6 +2042,8 @@ type certRequest struct { appClusterName string // appName is the name of the application to generate cert for. appName string + // appURI is the URI of the app. This is the internal endpoint where the application is running and isn't user-facing. + appURI string // awsRoleARN is the role ARN to generate certificate for. awsRoleARN string // azureIdentity is the Azure identity to generate certificate for. @@ -3116,6 +3118,7 @@ func generateCert(ctx context.Context, a *Server, req certRequest, caType types. KubernetesUsers: kubeUsers, RouteToApp: tlsca.RouteToApp{ SessionID: req.appSessionID, + URI: req.appURI, PublicAddr: req.appPublicAddr, ClusterName: req.appClusterName, Name: req.appName, @@ -4250,7 +4253,7 @@ func (a *Server) ExtendWebSession(ctx context.Context, req authclient.WebSession } sessionTTL := utils.ToTTL(a.clock, expiresAt) - sess, err := a.newWebSession(ctx, NewWebSessionRequest{ + sess, _, err := a.newWebSession(ctx, NewWebSessionRequest{ User: req.User, LoginIP: identity.LoginIP, Roles: roles, diff --git a/lib/auth/auth_test.go b/lib/auth/auth_test.go index 3a7b5e7a7bc0a..cf027a047a90e 100644 --- a/lib/auth/auth_test.go +++ b/lib/auth/auth_test.go @@ -3070,7 +3070,7 @@ func TestNewWebSession(t *testing.T) { } bearerTokenTTL := min(req.SessionTTL, defaults.BearerTokenTTL) - ws, err := p.a.newWebSession(ctx, req, nil /* opts */) + ws, _, err := p.a.newWebSession(ctx, req, nil /* opts */) require.NoError(t, err) require.Equal(t, user.GetName(), ws.GetUser()) require.Equal(t, duration, ws.GetIdleTimeout()) diff --git a/lib/auth/auth_with_roles.go b/lib/auth/auth_with_roles.go index 83bcd6099d310..d70f10acc49f2 100644 --- a/lib/auth/auth_with_roles.go +++ b/lib/auth/auth_with_roles.go @@ -49,6 +49,7 @@ import ( "github.com/gravitational/teleport/entitlements" "github.com/gravitational/teleport/lib/auth/authclient" "github.com/gravitational/teleport/lib/auth/clusterconfig/clusterconfigv1" + experiment "github.com/gravitational/teleport/lib/auth/machineid/machineidv1/bot_instance_experiment" "github.com/gravitational/teleport/lib/auth/okta" "github.com/gravitational/teleport/lib/authz" "github.com/gravitational/teleport/lib/backend" @@ -584,21 +585,33 @@ func (a *ServerWithRoles) RegisterUsingToken(ctx context.Context, req *types.Reg } } - // Similarly, do not trust bot instance IDs in the request unless from the - // proxy (via the join service). They will be derived from the client - // certificate otherwise. - if !isProxy && req.BotInstanceID != "" { - log.WithFields(logrus.Fields{ - "bot_instance_id": req.BotInstanceID, - }).Warnf("Untrusted client attempted to provide a bot instance ID, this will be ignored") + // Similarly, do not trust bot instance IDs or generation values in the + // request unless from a component with the proxy role (e.g. the join + // service). They will be derived from the client certificate otherwise. + if !isProxy { + if req.BotInstanceID != "" { + log.WithFields(logrus.Fields{ + "bot_instance_id": req.BotInstanceID, + }).Warnf("Untrusted client attempted to provide a bot instance ID, this will be ignored") + + req.BotInstanceID = "" + } - req.BotInstanceID = "" + if req.BotGeneration > 0 { + log.WithFields(logrus.Fields{ + "bot_generation": req.BotGeneration, + }).Warnf("Untrusted client attempted to provide a bot generation, this will be ignored") + + req.BotGeneration = 0 + } } - // If the identity has a BotInstanceID included, copy it onto the request - - // but only if one wasn't already passed along via the proxy. + // If the identity has a BotInstanceID or BotGeneration included, copy it + // onto the request - but only if one wasn't already passed along via the + // proxy. ident := a.context.Identity.GetIdentity() req.BotInstanceID = cmp.Or(req.BotInstanceID, ident.BotInstanceID) + req.BotGeneration = cmp.Or(req.BotGeneration, int32(ident.Generation)) // tokens have authz mechanism on their own, no need to check return a.authServer.RegisterUsingToken(ctx, req) @@ -3209,6 +3222,8 @@ func (a *ServerWithRoles) generateUserCerts(ctx context.Context, req proto.UserC GCPServiceAccount: req.RouteToApp.GCPServiceAccount, MFAVerified: verifiedMFADeviceID, DeviceExtensions: DeviceExtensions(a.context.Identity.GetIdentity().DeviceExtensions), + AppName: req.RouteToApp.Name, + AppURI: req.RouteToApp.URI, }) if err != nil { return nil, trace.Wrap(err) @@ -3292,6 +3307,7 @@ func (a *ServerWithRoles) generateUserCerts(ctx context.Context, req proto.UserC appSessionID: appSessionID, appName: req.RouteToApp.Name, appPublicAddr: req.RouteToApp.PublicAddr, + appURI: req.RouteToApp.URI, appClusterName: req.RouteToApp.ClusterName, awsRoleARN: req.RouteToApp.AWSRoleARN, azureIdentity: req.RouteToApp.AzureIdentity, @@ -3306,13 +3322,21 @@ func (a *ServerWithRoles) generateUserCerts(ctx context.Context, req proto.UserC }, connectionDiagnosticID: req.ConnectionDiagnosticID, botName: getBotName(user), + } + if experiment.Enabled() { // Always pass through a bot instance ID if available. Legacy bots // joining without an instance ID may have one generated when // `updateBotInstance()` is called below, and this (empty) value will be // overridden. - botInstanceID: a.context.Identity.GetIdentity().BotInstanceID, + // Note that this copy needs to be tied to the experiment for downgrade + // compatibility. If a cluster is downgraded the ID needs to be dropped + // from certs so a new one can be generated, otherwise the generation + // counter in the stored identity will mismatch when auth is upgraded + // again. + certReq.botInstanceID = a.context.Identity.GetIdentity().BotInstanceID } + if user.GetName() != a.context.User.GetName() { certReq.impersonator = a.context.User.GetName() } else if isRoleImpersonation(req) { @@ -3361,14 +3385,20 @@ func (a *ServerWithRoles) generateUserCerts(ctx context.Context, req proto.UserC // If the cert is renewable, process any certificate generation counter. if certReq.renewable { currentIdentityGeneration := a.context.Identity.GetIdentity().Generation - if err := a.authServer.validateGenerationLabel(ctx, user.GetName(), &certReq, currentIdentityGeneration); err != nil { - return nil, trace.Wrap(err) - } - // Update the bot instance based on this authentication. This may create - // a new bot instance record if the identity is missing an instance ID. - if err := a.authServer.updateBotInstance(ctx, &certReq, certReq.botName, certReq.botInstanceID, nil); err != nil { - return nil, trace.Wrap(err) + if experiment.Enabled() { + // Update the bot instance based on this authentication. This may create + // a new bot instance record if the identity is missing an instance ID. + if err := a.authServer.updateBotInstance( + ctx, &certReq, user.GetName(), certReq.botName, + certReq.botInstanceID, nil, int32(currentIdentityGeneration), + ); err != nil { + return nil, trace.Wrap(err) + } + } else { + if err := a.authServer.validateGenerationLabel(ctx, user.GetName(), &certReq, currentIdentityGeneration); err != nil { + return nil, trace.Wrap(err) + } } } diff --git a/lib/auth/authclient/clt.go b/lib/auth/authclient/clt.go index c9eeb82bf562a..e29fe5cfc4e23 100644 --- a/lib/auth/authclient/clt.go +++ b/lib/auth/authclient/clt.go @@ -1769,6 +1769,8 @@ func TryCreateAppSessionForClientCertV15(ctx context.Context, client CreateAppSe AWSRoleARN: routeToApp.AWSRoleARN, AzureIdentity: routeToApp.AzureIdentity, GCPServiceAccount: routeToApp.GCPServiceAccount, + URI: routeToApp.URI, + AppName: routeToApp.Name, }) if err != nil { return "", trace.Wrap(err) diff --git a/lib/auth/bot.go b/lib/auth/bot.go index 99c132f469267..dbcf6d3fcbae2 100644 --- a/lib/auth/bot.go +++ b/lib/auth/bot.go @@ -116,33 +116,8 @@ func (a *Server) validateGenerationLabel(ctx context.Context, username string, c // The current generations must match to continue: if currentIdentityGeneration != currentUserGeneration { - // Lock the bot user indefinitely. - lock, err := types.NewLock(uuid.New().String(), types.LockSpecV2{ - Target: types.LockTarget{ - User: user.GetName(), - }, - Message: fmt.Sprintf( - "The bot user %q has been locked due to a certificate generation mismatch, possibly indicating a stolen certificate.", - user.GetName(), - ), - }) - if err != nil { - return trace.Wrap(err) - } - if err := a.UpsertLock(ctx, lock); err != nil { - return trace.Wrap(err) - } - - // Emit an audit event. - userMetadata := authz.ClientUserMetadata(ctx) - if err := a.emitter.EmitAuditEvent(a.closeCtx, &apievents.RenewableCertificateGenerationMismatch{ - Metadata: apievents.Metadata{ - Type: events.RenewableCertificateGenerationMismatchEvent, - Code: events.RenewableCertificateGenerationMismatchCode, - }, - UserMetadata: userMetadata, - }); err != nil { - log.WithError(err).Warn("Failed to emit renewable cert generation mismatch event") + if err := a.tryLockBotDueToGenerationMismatch(ctx, user.GetName()); err != nil { + log.WithError(err).Warnf("Failed to lock bot %q when a generation mismatch was detected", user.GetName()) } return trace.AccessDenied( @@ -184,13 +159,105 @@ func sshPublicKeyToPKIXPEM(pubKey []byte) ([]byte, error) { return keys.MarshalPublicKey(cryptoPubKey) } +// commitGenerationCounterToBotUser updates the legacy generation counter label +// for a user, but only when the counter is greater than the previous value. If +// multiple bot instances exist for a given bot user, only the largest counter +// value is persisted. This ensures that, if a cluster is downgraded, exactly +// one bot instance (with the largest generation value) will be able to +// reauthenticate. +func (a *Server) commitLegacyGenerationCounterToBotUser(ctx context.Context, username string, newValue uint64) error { + var err error + + for i := 0; i < 3; i++ { + user, err := a.Services.GetUser(ctx, username, false) + if err != nil { + return trace.Wrap(err) + } + + var currentUserGeneration uint64 + label := user.BotGenerationLabel() + if label != "" { + currentUserGeneration, err = strconv.ParseUint(label, 10, 64) + if err != nil { + return trace.BadParameter("user has invalid value for label %q", types.BotGenerationLabel) + } + } + + if newValue <= currentUserGeneration { + // Nothing to do, value is up to date + return nil + } + + // Clone the user and update the generation label. + userV2, ok := user.(*types.UserV2) + if !ok { + return trace.BadParameter("unsupported version of user: %T", user) + } + newUser := apiutils.CloneProtoMsg(userV2) + metadata := newUser.GetMetadata() + metadata.Labels[types.BotGenerationLabel] = fmt.Sprint(newValue) + newUser.SetMetadata(metadata) + + // Attempt to commit the change. If it fails due to a comparison + // failure, try again. + err = a.CompareAndSwapUser(ctx, newUser, user) + if err == nil { + return nil + } else if trace.IsCompareFailed(err) { + continue + } else { + return trace.Wrap(err) + } + } + + return trace.Wrap(err) +} + +// tryLockBotDueToGenerationMismatch creates a lock for the given bot user and +// emits a `RenewableCertificateGenerationMismatch` audit event. +func (a *Server) tryLockBotDueToGenerationMismatch(ctx context.Context, username string) error { + // TODO: In the future, consider only locking the current join method / token. + + // Lock the bot user indefinitely. + lock, err := types.NewLock(uuid.New().String(), types.LockSpecV2{ + Target: types.LockTarget{ + User: username, + }, + Message: fmt.Sprintf( + "The bot user %q has been locked due to a certificate generation mismatch, possibly indicating a stolen certificate.", + username, + ), + }) + if err != nil { + return trace.Wrap(err) + } + if err := a.UpsertLock(ctx, lock); err != nil { + return trace.Wrap(err) + } + + // Emit an audit event. + userMetadata := authz.ClientUserMetadata(ctx) + if err := a.emitter.EmitAuditEvent(a.closeCtx, &apievents.RenewableCertificateGenerationMismatch{ + Metadata: apievents.Metadata{ + Type: events.RenewableCertificateGenerationMismatchEvent, + Code: events.RenewableCertificateGenerationMismatchCode, + }, + UserMetadata: userMetadata, + }); err != nil { + log.WithError(err).Warn("Failed to emit renewable cert generation mismatch event") + } + + return nil +} + // updateBotInstance updates the bot instance associated with the context // identity, if any. If the optional `templateAuthRecord` is provided, various // metadata fields will be copied into the newly generated auth record. func (a *Server) updateBotInstance( ctx context.Context, req *certRequest, - botName, botInstanceID string, + username, botName, botInstanceID string, templateAuthRecord *machineidv1pb.BotInstanceStatusAuthentication, + currentIdentityGeneration int32, ) error { if !experiment.Enabled() { // Only attempt to update bot instances if the experiment is enabled. @@ -203,14 +270,22 @@ func (a *Server) updateBotInstance( } // Check if this bot instance actually exists. + var instanceGeneration int32 instanceNotFound := false if botInstanceID != "" { - _, err := a.BotInstance.GetBotInstance(ctx, botName, botInstanceID) + existingInstance, err := a.BotInstance.GetBotInstance(ctx, botName, botInstanceID) if trace.IsNotFound(err) { instanceNotFound = true } else if err != nil { // Some other error, bail. return trace.Wrap(err) + } else { + // We have an existing instance, so fetch its generation. + auths := existingInstance.Status.LatestAuthentications + if len(auths) > 0 { + latest := auths[len(auths)-1] + instanceGeneration = latest.Generation + } } } @@ -232,12 +307,6 @@ func (a *Server) updateBotInstance( AuthenticatedAt: timestamppb.New(a.GetClock().Now()), PublicKey: publicKeyPEM, - // TODO: for now, this copy of the certificate generation only is - // informational. Future changes will transition to trusting (and - // verifying) this value in lieu of the old generation label on bot - // users. - Generation: int32(req.generation), - // Note: This is presumed to be a token join. If not, a // `templateAuthRecord` should be provided to override this value. JoinMethod: string(types.JoinMethodToken), @@ -258,6 +327,30 @@ func (a *Server) updateBotInstance( return trace.Wrap(err) } + // TODO(timothyb89): consider making this the only path where bot + // instances are created. We could call `updateBotInstance()` + // unconditionally from `generateInitialBotCerts()` and have only one + // codepath. (But may need to clean up log messages.) + + // Set the initial generation counter. Note that with bot instances, the + // counter is now set for all join methods, but only enforced for token + // joins. + if currentIdentityGeneration > 0 { + // If the incoming identity has a nonzero generation, validate it + // using the legacy check. This will increment the counter on the + // request automatically + if err := a.validateGenerationLabel(ctx, username, req, uint64(currentIdentityGeneration)); err != nil { + return trace.Wrap(err) + } + + // Copy the value from the request into the auth record. + authRecord.Generation = int32(req.generation) + } else { + // Otherwise, just set it to 1. + req.generation = 1 + authRecord.Generation = 1 + } + log.WithFields(logrus.Fields{ "bot_name": botName, "invalid_instance_id": botInstanceID, @@ -281,6 +374,52 @@ func (a *Server) updateBotInstance( return nil } + l := log.WithFields(logrus.Fields{ + "bot_name": botName, + "bot_instance_id": botInstanceID, + }) + + if currentIdentityGeneration == 0 { + // Nothing to do. + l.Warn("bot attempted to fetch certificates without providing a current identity generation, this is not allowed") + + return trace.AccessDenied("a current identity generation must be provided") + } else if currentIdentityGeneration > 0 && currentIdentityGeneration != instanceGeneration { + // For now, continue to only enforce generation counter checks on + // renewable (i.e. token) identities. + if req.renewable { + if err := a.tryLockBotDueToGenerationMismatch(ctx, username); err != nil { + l.WithError(err).Warn("Failed to lock bot when a generation mismatch was detected") + } + + return trace.AccessDenied( + "renewable cert generation mismatch for bot %s/%s: stored=%v, presented=%v", + botName, botInstanceID, + instanceGeneration, currentIdentityGeneration, + ) + } else { + // We'll still log the check failure, but won't deny access. This + // log data will help make an informed decision about reliability of + // the generation counter for all join methods in the future. + l.WithFields(logrus.Fields{ + "bot_instance_generation": instanceGeneration, + "bot_identity_generation": currentIdentityGeneration, + "bot_join_method": authRecord.JoinMethod, + }).Warn("Bot generation counter mismatch detected. This check is not enforced for this join method, " + + "but may indicate multiple uses of a bot identity and possibly a compromised certificate.") + } + } + + // Increment the generation counter the cert and bot instance. The counter + // should be incremented and stored even if it is not validated above. + newGeneration := instanceGeneration + 1 + authRecord.Generation = newGeneration + req.generation = uint64(newGeneration) + + if err := a.commitLegacyGenerationCounterToBotUser(ctx, username, uint64(newGeneration)); err != nil { + l.WithError(err).Warn("unable to commit legacy generation counter to bot user") + } + _, err := a.BotInstance.PatchBotInstance(ctx, botName, botInstanceID, func(bi *machineidv1pb.BotInstance) (*machineidv1pb.BotInstance, error) { if bi.Status == nil { bi.Status = &machineidv1pb.BotInstanceStatus{} @@ -300,10 +439,7 @@ func (a *Server) updateBotInstance( // An initial auth record should have been added during initial join, // but if not, add it now. if bi.Status.InitialAuthentication == nil { - log.WithFields(logrus.Fields{ - "bot_name": botName, - "bot_instance_id": botInstanceID, - }).Warn("bot instance is missing its initial authentication record, a new one will be added") + l.Warn("bot instance is missing its initial authentication record, a new one will be added") bi.Status.InitialAuthentication = authRecord } @@ -349,7 +485,7 @@ func (a *Server) generateInitialBotCerts( sshPubKey, tlsPubKey []byte, expires time.Time, renewable bool, initialAuth *machineidv1pb.BotInstanceStatusAuthentication, - existingInstanceID string, + existingInstanceID string, currentIdentityGeneration int32, ) (*proto.Certs, string, error) { var err error @@ -387,13 +523,6 @@ func (a *Server) generateInitialBotCerts( return nil, "", trace.Wrap(err) } - // renewable cert request must include a generation - var generation uint64 - if renewable { - generation = 1 - initialAuth.Generation = 1 - } - // Generate certificate certReq := certRequest{ user: userState, @@ -404,7 +533,6 @@ func (a *Server) generateInitialBotCerts( traits: accessInfo.Traits, renewable: renewable, includeHostCA: true, - generation: generation, loginIP: loginIP, botName: botName, } @@ -417,6 +545,8 @@ func (a *Server) generateInitialBotCerts( return nil, "", trace.Wrap(err) } + initialAuth.Generation = 1 + bi := newBotInstance(&machineidv1pb.BotInstanceSpec{ BotName: botName, InstanceId: uuid.String(), @@ -428,13 +558,17 @@ func (a *Server) generateInitialBotCerts( } certReq.botInstanceID = uuid.String() + certReq.generation = 1 } else { // Otherwise, reuse the existing instance ID, and pass the // initialAuth along. // Note: botName is derived from the provision token rather than any // value sent by the client, so we can trust it. - if err := a.updateBotInstance(ctx, &certReq, botName, existingInstanceID, initialAuth); err != nil { + if err := a.updateBotInstance( + ctx, &certReq, username, botName, existingInstanceID, + initialAuth, currentIdentityGeneration, + ); err != nil { return nil, "", trace.Wrap(err) } @@ -444,10 +578,19 @@ func (a *Server) generateInitialBotCerts( certReq.botInstanceID = existingInstanceID } } - } - if err := a.validateGenerationLabel(ctx, userState.GetName(), &certReq, 0); err != nil { - return nil, "", trace.Wrap(err) + } else { + // Unlike the new codepath, legacy generation counters are only nonzero + // for renewable certs, so we need to set it conditionally. + if renewable { + certReq.generation = 1 + } + + // If the bot instance experiment is disabled, fall back to old generation + // counter behavior. + if err := a.validateGenerationLabel(ctx, userState.GetName(), &certReq, 0); err != nil { + return nil, "", trace.Wrap(err) + } } certs, err := a.generateUserCert(ctx, certReq) diff --git a/lib/auth/bot_test.go b/lib/auth/bot_test.go index b10d7c9e00fd9..ca0de6b01326d 100644 --- a/lib/auth/bot_test.go +++ b/lib/auth/bot_test.go @@ -715,8 +715,8 @@ func authClientForCerts(t *testing.T, ctx context.Context, addr *utils.NetAddr, } // instanceIDFromCerts parses a TLS identity from the certificates and returns -// the embedded BotInstanceID, if any. -func instanceIDFromCerts(t *testing.T, certs *proto.Certs) string { +// the embedded BotInstanceID and generation, if any. +func instanceIDFromCerts(t *testing.T, certs *proto.Certs) (string, uint64) { t.Helper() cert, err := tlsca.ParseCertificatePEM(certs.TLS) @@ -725,7 +725,7 @@ func instanceIDFromCerts(t *testing.T, certs *proto.Certs) string { ident, err := tlsca.FromSubject(cert.Subject, cert.NotAfter) require.NoError(t, err) - return ident.BotInstanceID + return ident.BotInstanceID, ident.Generation } // registerHelper calls `join.Register` with the given token, prefilling params @@ -864,13 +864,15 @@ func TestRegisterBot_BotInstanceRejoin(t *testing.T) { p.KubernetesReadFileFunc = k8sReadFileFunc }) require.NoError(t, err) - initialK8sInstanceID := instanceIDFromCerts(t, k8sCerts) + initialK8sInstanceID, initialK8sGeneration := instanceIDFromCerts(t, k8sCerts) require.NotEmpty(t, initialK8sInstanceID) + require.Equal(t, uint64(1), initialK8sGeneration) awsCerts, err := registerHelper(ctx, awsToken, addr, tlsPublicKey, sshPublicKey) require.NoError(t, err) - initialAWSInstanceID := instanceIDFromCerts(t, awsCerts) + initialAWSInstanceID, initialAWSGeneration := instanceIDFromCerts(t, awsCerts) require.NotEmpty(t, initialAWSInstanceID) + require.Equal(t, uint64(1), initialAWSGeneration) // They should be issued unique IDs despite being the same bot. require.NotEqual(t, initialK8sInstanceID, initialAWSInstanceID, "instance IDs must not be the same when no client certs are provided") @@ -883,7 +885,10 @@ func TestRegisterBot_BotInstanceRejoin(t *testing.T) { p.AuthClient = k8sClient }) require.NoError(t, err) - require.Equal(t, initialK8sInstanceID, instanceIDFromCerts(t, rejoinedK8sCerts)) + + rejoinedK8sID, rejoinedK8sGeneration := instanceIDFromCerts(t, rejoinedK8sCerts) + require.Equal(t, initialK8sInstanceID, rejoinedK8sID) + require.Equal(t, uint64(2), rejoinedK8sGeneration) // Repeat for the AWS client. Note that the AWS client is routed through the // join service, the instance ID must be provided to auth by the proxy as @@ -893,7 +898,10 @@ func TestRegisterBot_BotInstanceRejoin(t *testing.T) { p.AuthClient = iamClient }) require.NoError(t, err) - require.Equal(t, initialAWSInstanceID, instanceIDFromCerts(t, rejoinedAWSCerts)) + + rejoinedAWSID, rejoinedAWSGeneration := instanceIDFromCerts(t, rejoinedAWSCerts) + require.Equal(t, initialAWSInstanceID, rejoinedAWSID) + require.Equal(t, uint64(2), rejoinedAWSGeneration) // Last, try to lie to auth. The k8s value should be overwritten with the // correct instance ID since auth can directly inspect the client identity. @@ -909,7 +917,10 @@ func TestRegisterBot_BotInstanceRejoin(t *testing.T) { BotInstanceID: initialAWSInstanceID, }) require.NoError(t, err) - require.Equal(t, initialK8sInstanceID, instanceIDFromCerts(t, certs)) + + rejoinedK8sID, rejoinedK8sGeneration = instanceIDFromCerts(t, certs) + require.Equal(t, initialK8sInstanceID, rejoinedK8sID) + require.Equal(t, uint64(3), rejoinedK8sGeneration) // Note: Lying via IAM join not tested as that must be routed through the // join service (along with Azure and TPM). @@ -999,9 +1010,10 @@ func TestRegisterBotWithInvalidInstanceID(t *testing.T) { require.NoError(t, err) // Should not issue certs with an obviously invalid instance ID, or no ID. - id := instanceIDFromCerts(t, certs) + id, generation := instanceIDFromCerts(t, certs) require.NotEmpty(t, id) require.NotEqual(t, "foo", id) + require.Equal(t, uint64(1), generation) // Try registering with a non-proxy client; this is untrusted and the // client-provided ID should be discarded. @@ -1019,9 +1031,226 @@ func TestRegisterBotWithInvalidInstanceID(t *testing.T) { // generated. require.NoError(t, err) - id = instanceIDFromCerts(t, certs) + id, generation = instanceIDFromCerts(t, certs) require.NotEmpty(t, id) require.NotEqual(t, "foo", id) + require.Equal(t, uint64(1), generation) +} + +func TestRegisterBotMultipleTokens(t *testing.T) { + // TODO: Enable parallel once the experiment is removed + // t.Parallel() + + experimentBefore := experiment.Enabled() + experiment.SetEnabled(true) + t.Cleanup(func() { + experiment.SetEnabled(experimentBefore) + }) + + ctx, cancel := context.WithCancel(context.Background()) + t.Cleanup(cancel) + + srv := newTestTLSServer(t) + + // Initial setup, create a bot and join token. + client, err := srv.NewClient(TestAdmin()) + require.NoError(t, err) + bot, err := client.BotServiceClient().CreateBot(ctx, &machineidv1pb.CreateBotRequest{ + Bot: &machineidv1pb.Bot{ + Metadata: &headerv1.Metadata{ + Name: "test", + }, + Spec: &machineidv1pb.BotSpec{ + Roles: []string{"example"}, + }, + }, + }) + require.NoError(t, err) + + tokenA, err := types.NewProvisionTokenFromSpec("a", time.Time{}, types.ProvisionTokenSpecV2{ + Roles: types.SystemRoles{types.RoleBot}, + BotName: bot.Metadata.Name, + }) + require.NoError(t, err) + require.NoError(t, client.CreateToken(ctx, tokenA)) + + tokenB, err := types.NewProvisionTokenFromSpec("b", time.Time{}, types.ProvisionTokenSpecV2{ + Roles: types.SystemRoles{types.RoleBot}, + BotName: bot.Metadata.Name, + }) + require.NoError(t, err) + require.NoError(t, client.CreateToken(ctx, tokenB)) + + _, sshPublicKey, tlsPrivateKey, tlsPublicKey := newSSHAndTLSKeyPairs(t) + + certsA, err := join.Register(ctx, join.RegisterParams{ + Token: tokenA.GetName(), + ID: state.IdentityID{ + Role: types.RoleBot, + }, + AuthServers: []utils.NetAddr{*utils.MustParseAddr(srv.Addr().String())}, + PublicTLSKey: tlsPublicKey, + PublicSSHKey: sshPublicKey, + }) + require.NoError(t, err) + + initialInstanceA, _ := instanceIDFromCerts(t, certsA) + require.NotEmpty(t, initialInstanceA) + + tlsA, err := tls.X509KeyPair(certsA.TLS, tlsPrivateKey) + require.NoError(t, err) + + certsB, err := join.Register(ctx, join.RegisterParams{ + Token: tokenB.GetName(), + ID: state.IdentityID{ + Role: types.RoleBot, + }, + AuthServers: []utils.NetAddr{*utils.MustParseAddr(srv.Addr().String())}, + PublicTLSKey: tlsPublicKey, + PublicSSHKey: sshPublicKey, + }) + require.NoError(t, err) + + initialInstanceB, _ := instanceIDFromCerts(t, certsB) + require.NotEmpty(t, initialInstanceB) + + require.NotEqual(t, initialInstanceA, initialInstanceB) + + tlsB, err := tls.X509KeyPair(certsB.TLS, tlsPrivateKey) + require.NoError(t, err) + + for i := 0; i < 6; i++ { + _, certsA, tlsA, err = renewBotCerts(ctx, srv, tlsA, bot.Status.UserName, sshPublicKey, tlsPublicKey, tlsPrivateKey) + require.NoError(t, err) + + instanceA, generationA := instanceIDFromCerts(t, certsA) + require.Equal(t, initialInstanceA, instanceA) + require.Equal(t, uint64(i+2), generationA) + + // Only renew bot B 3x. + if i < 3 { + _, certsB, tlsB, err = renewBotCerts(ctx, srv, tlsB, bot.Status.UserName, sshPublicKey, tlsPublicKey, tlsPrivateKey) + require.NoError(t, err) + + instanceB, generationB := instanceIDFromCerts(t, certsB) + require.Equal(t, initialInstanceB, instanceB) + require.Equal(t, uint64(i+2), generationB) + } + } + + // Renew B again. This will be the final renewal, but the legacy generation + // counter on the user will be greater as it should have been incremented by + // bot A. + _, certsB, _, err = renewBotCerts(ctx, srv, tlsB, bot.Status.UserName, sshPublicKey, tlsPublicKey, tlsPrivateKey) + require.NoError(t, err) + + instanceB, generationB := instanceIDFromCerts(t, certsB) + require.Equal(t, initialInstanceB, instanceB) + require.Equal(t, uint64(5), generationB) + + botUser, err := client.GetUser(ctx, bot.Status.UserName, false) + require.NoError(t, err) + genStr := botUser.BotGenerationLabel() + require.Equal(t, "7", genStr) +} + +func TestRegisterBotGenerationCounterUpgradeDowngrade(t *testing.T) { + // Note, sadly we won't be able to keep this test without an experiment flag + // to toggle, so it'll be short lived. + experimentBefore := experiment.Enabled() + t.Cleanup(func() { + experiment.SetEnabled(experimentBefore) + }) + + ctx, cancel := context.WithCancel(context.Background()) + t.Cleanup(cancel) + + srv := newTestTLSServer(t) + + _, err := CreateRole(ctx, srv.Auth(), "example", types.RoleSpecV6{}) + require.NoError(t, err) + + // Create a new bot. + client, err := srv.NewClient(TestAdmin()) + require.NoError(t, err) + bot, err := client.BotServiceClient().CreateBot(ctx, &machineidv1pb.CreateBotRequest{ + Bot: &machineidv1pb.Bot{ + Metadata: &headerv1.Metadata{ + Name: "test", + }, + Spec: &machineidv1pb.BotSpec{ + Roles: []string{"example"}, + }, + }, + }) + require.NoError(t, err) + + token, err := types.NewProvisionTokenFromSpec("testxyzzy", time.Time{}, types.ProvisionTokenSpecV2{ + Roles: types.SystemRoles{types.RoleBot}, + BotName: bot.Metadata.Name, + }) + require.NoError(t, err) + require.NoError(t, client.CreateToken(ctx, token)) + + _, sshPublicKey, tlsPrivateKey, tlsPublicKey := newSSHAndTLSKeyPairs(t) + + // First, with the experiment disabled, join a bot + experiment.SetEnabled(false) + + certs, err := join.Register(ctx, join.RegisterParams{ + Token: token.GetName(), + ID: state.IdentityID{ + Role: types.RoleBot, + }, + AuthServers: []utils.NetAddr{*utils.MustParseAddr(srv.Addr().String())}, + PublicTLSKey: tlsPublicKey, + PublicSSHKey: sshPublicKey, + }) + require.NoError(t, err) + + tlsCert, err := tls.X509KeyPair(certs.TLS, tlsPrivateKey) + require.NoError(t, err) + + // It should have no instance ID but should have a sane generation counter. + instanceID, generation := instanceIDFromCerts(t, certs) + require.Empty(t, instanceID) + require.Equal(t, uint64(1), generation) + + // Increment the counter once for good measure + _, certs, tlsCert, err = renewBotCerts(ctx, srv, tlsCert, bot.Status.UserName, sshPublicKey, tlsPublicKey, tlsPrivateKey) + require.NoError(t, err) + + instanceID, generation = instanceIDFromCerts(t, certs) + require.Empty(t, instanceID) + require.Equal(t, uint64(2), generation) + + // Enable the experiment and try again. The bot should be issued a new + // instance ID, but the counter should be retained. + experiment.SetEnabled(true) + + _, certs, tlsCert, err = renewBotCerts(ctx, srv, tlsCert, bot.Status.UserName, sshPublicKey, tlsPublicKey, tlsPrivateKey) + require.NoError(t, err) + + instanceID, generation = instanceIDFromCerts(t, certs) + require.NotEmpty(t, instanceID) + require.Equal(t, uint64(3), generation) + + _, certs, tlsCert, err = renewBotCerts(ctx, srv, tlsCert, bot.Status.UserName, sshPublicKey, tlsPublicKey, tlsPrivateKey) + require.NoError(t, err) + + instanceID, generation = instanceIDFromCerts(t, certs) + require.NotEmpty(t, instanceID) + require.Equal(t, uint64(4), generation) + + // Toggle the experiment off again and + experiment.SetEnabled(false) + + _, certs, _, err = renewBotCerts(ctx, srv, tlsCert, bot.Status.UserName, sshPublicKey, tlsPublicKey, tlsPrivateKey) + require.NoError(t, err) + + instanceID, generation = instanceIDFromCerts(t, certs) + require.Empty(t, instanceID) + require.Equal(t, uint64(5), generation) } func checkCertLoginIP(t *testing.T, certBytes []byte, loginIP string) { diff --git a/lib/auth/github.go b/lib/auth/github.go index 7f535a935b8eb..ea1fdf0c13013 100644 --- a/lib/auth/github.go +++ b/lib/auth/github.go @@ -713,13 +713,15 @@ func (a *Server) validateGithubAuthCallback(ctx context.Context, diagCtx *SSODia // If the request is coming from a browser, create a web session. if req.CreateWebSession { session, err := a.CreateWebSessionFromReq(ctx, NewWebSessionRequest{ - User: userState.GetName(), - Roles: userState.GetRoles(), - Traits: userState.GetTraits(), - SessionTTL: params.SessionTTL, - LoginTime: a.clock.Now().UTC(), - LoginIP: req.ClientLoginIP, - AttestWebSession: true, + User: userState.GetName(), + Roles: userState.GetRoles(), + Traits: userState.GetTraits(), + SessionTTL: params.SessionTTL, + LoginTime: a.clock.Now().UTC(), + LoginIP: req.ClientLoginIP, + LoginUserAgent: req.ClientUserAgent, + AttestWebSession: true, + CreateDeviceWebToken: true, }) if err != nil { return nil, trace.Wrap(err, "Failed to create web session.") diff --git a/lib/auth/join.go b/lib/auth/join.go index bf1ed3219fdf4..66c5c8ce06814 100644 --- a/lib/auth/join.go +++ b/lib/auth/join.go @@ -377,9 +377,6 @@ func (a *Server) generateCertsBot( // TODO(nklaassen): consider logging the SSH public key as well, for now // the SSH and TLS public keys are still identical for tbot. PublicKey: req.PublicTLSKey, - - // Note: Generation will be set during `generateInitialBotCerts()` as - // needed. } if joinAttributeSrc != nil { @@ -409,6 +406,7 @@ func (a *Server) generateCertsBot( renewable, auth, req.BotInstanceID, + req.BotGeneration, ) if err != nil { return nil, trace.Wrap(err) diff --git a/lib/auth/methods.go b/lib/auth/methods.go index 3f1b4973bede3..cba958b2ab6bf 100644 --- a/lib/auth/methods.go +++ b/lib/auth/methods.go @@ -30,7 +30,6 @@ import ( "github.com/gravitational/teleport/api/client/proto" "github.com/gravitational/teleport/api/constants" - devicepb "github.com/gravitational/teleport/api/gen/proto/go/teleport/devicetrust/v1" mfav1 "github.com/gravitational/teleport/api/gen/proto/go/teleport/mfa/v1" "github.com/gravitational/teleport/api/types" apievents "github.com/gravitational/teleport/api/types/events" @@ -39,9 +38,7 @@ import ( wantypes "github.com/gravitational/teleport/lib/auth/webauthntypes" "github.com/gravitational/teleport/lib/authz" "github.com/gravitational/teleport/lib/defaults" - dtconfig "github.com/gravitational/teleport/lib/devicetrust/config" "github.com/gravitational/teleport/lib/events" - "github.com/gravitational/teleport/lib/modules" "github.com/gravitational/teleport/lib/services" "github.com/gravitational/teleport/lib/sshutils" "github.com/gravitational/teleport/lib/utils" @@ -632,89 +629,22 @@ func (a *Server) AuthenticateWebUser(ctx context.Context, req authclient.Authent } sess, err := a.CreateWebSessionFromReq(ctx, NewWebSessionRequest{ - User: user.GetName(), - LoginIP: loginIP, - Roles: user.GetRoles(), - Traits: user.GetTraits(), - LoginTime: a.clock.Now().UTC(), - AttestWebSession: true, + User: user.GetName(), + LoginIP: loginIP, + LoginUserAgent: userAgent, + Roles: user.GetRoles(), + Traits: user.GetTraits(), + LoginTime: a.clock.Now().UTC(), + AttestWebSession: true, + CreateDeviceWebToken: true, }) if err != nil { return nil, trace.Wrap(err) } - // Create the device trust DeviceWebToken. - // We only get a token if the server is enabled for Device Trust and the user - // has a suitable trusted device. - if loginIP != "" && userAgent != "" { - webToken, err := a.createDeviceWebToken(ctx, &devicepb.DeviceWebToken{ - WebSessionId: sess.GetName(), - BrowserUserAgent: userAgent, - BrowserIp: loginIP, - User: sess.GetUser(), - }) - switch { - case err != nil: - log.WithError(err).Warn("Failed to create DeviceWebToken for user") - case webToken != nil: // May be nil even if err==nil. - sess.SetDeviceWebToken(&types.DeviceWebToken{ - Id: webToken.Id, - Token: webToken.Token, - }) - } - } - - // Calculate the trusted device requirement for the session. Helps inform the - // frontend if the user might run into access problems without a trusted - // device. - trustedDeviceRequirement, err := a.calculateTrustedDeviceMode(ctx, func() ([]types.Role, error) { - // TODO(codingllama): Levegare the checker inside CreateWebSessionFromReq to - // avoid duplicate work here. - roles, err := services.FetchRoles(user.GetRoles(), a, user.GetTraits()) - if err != nil { - return nil, trace.Wrap(err) - } - return roles, nil - }) - if err != nil { - return nil, trace.Wrap(err) - } - sess.SetTrustedDeviceRequirement(trustedDeviceRequirement) - return sess, nil } -func (a *Server) calculateTrustedDeviceMode(ctx context.Context, getRoles func() ([]types.Role, error)) (types.TrustedDeviceRequirement, error) { - const unspecified = types.TrustedDeviceRequirement_TRUSTED_DEVICE_REQUIREMENT_UNSPECIFIED - - // Don't evaluate for OSS. - if !modules.GetModules().IsEnterpriseBuild() { - return unspecified, nil - } - - // Required by cluster mode? - ap, err := a.GetAuthPreference(ctx) - if err != nil { - return unspecified, trace.Wrap(err) - } - if dtconfig.GetEffectiveMode(ap.GetDeviceTrust()) == constants.DeviceTrustModeRequired { - return types.TrustedDeviceRequirement_TRUSTED_DEVICE_REQUIREMENT_REQUIRED, nil - } - - // Required by roles? - roles, err := getRoles() - if err != nil { - return unspecified, trace.Wrap(err) - } - for _, role := range roles { - if role.GetOptions().DeviceTrustMode == constants.DeviceTrustModeRequired { - return types.TrustedDeviceRequirement_TRUSTED_DEVICE_REQUIREMENT_REQUIRED, nil - } - } - - return types.TrustedDeviceRequirement_TRUSTED_DEVICE_REQUIREMENT_NOT_REQUIRED, nil -} - // AuthenticateSSHUser authenticates an SSH user and returns SSH and TLS // certificates for the public key in req. func (a *Server) AuthenticateSSHUser(ctx context.Context, req authclient.AuthenticateSSHRequest) (*authclient.SSHLoginResponse, error) { diff --git a/lib/auth/middleware.go b/lib/auth/middleware.go index 2a27513193061..72c086c2eae00 100644 --- a/lib/auth/middleware.go +++ b/lib/auth/middleware.go @@ -461,9 +461,14 @@ func (a *Middleware) displayRejectedClientAlert(ctx context.Context, userAgent s return } + alertVersion := semver.Version{ + Major: a.OldestSupportedVersion.Major, + Minor: a.OldestSupportedVersion.Minor, + Patch: a.OldestSupportedVersion.Patch, + } alert, err := types.NewClusterAlert( "rejected-unsupported-connection", - fmt.Sprintf("Connections were rejected from %s running unsupported Teleport versions(<%s), they will be inaccessible until upgraded.", connectionType, a.OldestSupportedVersion), + fmt.Sprintf("Connections were rejected from %s running unsupported Teleport versions(<%s), they will be inaccessible until upgraded.", connectionType, alertVersion), types.WithAlertSeverity(types.AlertSeverity_MEDIUM), types.WithAlertLabel(types.AlertOnLogin, "yes"), types.WithAlertLabel(types.AlertVerbPermit, fmt.Sprintf("%s:%s", types.KindToken, types.VerbCreate)), diff --git a/lib/auth/middleware_test.go b/lib/auth/middleware_test.go index dc56ecfb2635f..971953d4c82ab 100644 --- a/lib/auth/middleware_test.go +++ b/lib/auth/middleware_test.go @@ -789,6 +789,8 @@ func TestRejectedClientClusterAlert(t *testing.T) { require.Len(t, alerts, 1) require.Equal(t, "rejected-unsupported-connection", alerts[0].GetName()) require.Contains(t, alerts[0].Spec.Message, "agents") + // Assert that the version in the message does not contain any prereleases + require.NotContains(t, alerts[0].Spec.Message, "-aa") for _, tool := range []string{"tsh", "tctl", "tbot"} { t.Run(tool, func(t *testing.T) { @@ -825,6 +827,8 @@ func TestRejectedClientClusterAlert(t *testing.T) { require.Len(t, alerts, 1) assert.Equal(t, "rejected-unsupported-connection", alerts[0].GetName()) require.Contains(t, alerts[0].Spec.Message, tool) + // Assert that the version in the message does not contain any prereleases + require.NotContains(t, alerts[0].Spec.Message, "-aa") }) } diff --git a/lib/auth/sessions.go b/lib/auth/sessions.go index 65c7abe66f7ec..484c7d9a08ab7 100644 --- a/lib/auth/sessions.go +++ b/lib/auth/sessions.go @@ -28,13 +28,18 @@ import ( "github.com/gravitational/teleport" "github.com/gravitational/teleport/api/client/proto" + "github.com/gravitational/teleport/api/constants" apidefaults "github.com/gravitational/teleport/api/defaults" + devicepb "github.com/gravitational/teleport/api/gen/proto/go/teleport/devicetrust/v1" mfav1 "github.com/gravitational/teleport/api/gen/proto/go/teleport/mfa/v1" "github.com/gravitational/teleport/api/types" + apievents "github.com/gravitational/teleport/api/types/events" "github.com/gravitational/teleport/api/utils/keys" "github.com/gravitational/teleport/entitlements" "github.com/gravitational/teleport/lib/cryptosuites" "github.com/gravitational/teleport/lib/defaults" + dtconfig "github.com/gravitational/teleport/lib/devicetrust/config" + "github.com/gravitational/teleport/lib/events" "github.com/gravitational/teleport/lib/jwt" "github.com/gravitational/teleport/lib/modules" "github.com/gravitational/teleport/lib/services" @@ -50,6 +55,9 @@ type NewWebSessionRequest struct { User string // LoginIP is an observed IP of the client, it will be embedded into certificates. LoginIP string + // LoginUserAgent is the user agent of the client's browser, as captured by + // the Proxy. + LoginUserAgent string // Roles optionally lists additional user roles Roles []string // Traits optionally lists role traits @@ -77,6 +85,13 @@ type NewWebSessionRequest struct { // This should be provided when extending an attested web session in order // to maintain the session attested status. TLSPrivateKey *keys.PrivateKey + // CreateDeviceWebToken informs Auth to issue a DeviceWebToken when creating + // this session. + // A DeviceWebToken must only be issued for users that have been authenticated + // in the same RPC. + // May only be set internally by Auth (and Auth-related logic), not allowed + // for external requests. + CreateDeviceWebToken bool } // CheckAndSetDefaults validates the request and sets defaults. @@ -97,7 +112,7 @@ func (r *NewWebSessionRequest) CheckAndSetDefaults() error { } func (a *Server) CreateWebSessionFromReq(ctx context.Context, req NewWebSessionRequest) (types.WebSession, error) { - session, err := a.newWebSession(ctx, req, nil /* opts */) + session, sessionChecker, err := a.newWebSession(ctx, req, nil /* opts */) if err != nil { return nil, trace.Wrap(err) } @@ -107,9 +122,96 @@ func (a *Server) CreateWebSessionFromReq(ctx context.Context, req NewWebSessionR return nil, trace.Wrap(err) } + // Issue and assign the DeviceWebToken, but never persist it with the + // session. + if req.CreateDeviceWebToken { + if err := a.augmentSessionForDeviceTrust(ctx, session, req.LoginIP, req.LoginUserAgent); err != nil { + return nil, trace.Wrap(err) + } + } + + // Assign the TrustedDeviceRequirement to the session, but do not persist it, + // so only the initial session gets it. + // This avoids persisting a possibly stale value. + if tdr, err := a.calculateTrustedDeviceMode(ctx, func() ([]types.Role, error) { + return sessionChecker.Roles(), nil + }); err != nil { + log. + WithError(err). + Warnf("Failed to calculate trusted device mode for session") + } else { + session.SetTrustedDeviceRequirement(tdr) + } + return session, nil } +func (a *Server) augmentSessionForDeviceTrust( + ctx context.Context, + session types.WebSession, + loginIP, userAgent string, +) error { + // IP and user agent are mandatory for device web authentication. + if loginIP == "" || userAgent == "" { + return nil + } + + // Create the device trust DeviceWebToken. + // We only get a token if the server is enabled for Device Trust and the user + // has a suitable trusted device. + webToken, err := a.createDeviceWebToken(ctx, &devicepb.DeviceWebToken{ + WebSessionId: session.GetName(), + BrowserUserAgent: userAgent, + BrowserIp: loginIP, + User: session.GetUser(), + }) + switch { + case err != nil: + log.WithError(err).Warn("Failed to create DeviceWebToken for user") + case webToken != nil: // May be nil even if err==nil. + session.SetDeviceWebToken(&types.DeviceWebToken{ + Id: webToken.Id, + Token: webToken.Token, + }) + } + + return nil +} + +func (a *Server) calculateTrustedDeviceMode( + ctx context.Context, + getRoles func() ([]types.Role, error), +) (types.TrustedDeviceRequirement, error) { + const unspecified = types.TrustedDeviceRequirement_TRUSTED_DEVICE_REQUIREMENT_UNSPECIFIED + + // Don't evaluate for OSS. + if !modules.GetModules().IsEnterpriseBuild() { + return unspecified, nil + } + + // Required by cluster mode? + ap, err := a.GetAuthPreference(ctx) + if err != nil { + return unspecified, trace.Wrap(err) + } + if dtconfig.GetEffectiveMode(ap.GetDeviceTrust()) == constants.DeviceTrustModeRequired { + return types.TrustedDeviceRequirement_TRUSTED_DEVICE_REQUIREMENT_REQUIRED, nil + } + + // Required by roles? + roles, err := getRoles() + if err != nil { + return unspecified, trace.Wrap(err) + } + for _, role := range roles { + if role.GetOptions().DeviceTrustMode == constants.DeviceTrustModeRequired { + return types.TrustedDeviceRequirement_TRUSTED_DEVICE_REQUIREMENT_REQUIRED, nil + } + } + + return types.TrustedDeviceRequirement_TRUSTED_DEVICE_REQUIREMENT_NOT_REQUIRED, nil +} + // newWebSessionOpts are WebSession creation options exclusive to Auth. // These options complement [types.NewWebSessionRequest]. // See [Server.newWebSession]. @@ -125,10 +227,10 @@ func (a *Server) newWebSession( ctx context.Context, req NewWebSessionRequest, opts *newWebSessionOpts, -) (types.WebSession, error) { +) (types.WebSession, services.AccessChecker, error) { userState, err := a.GetUserOrLoginState(ctx, req.User) if err != nil { - return nil, trace.Wrap(err) + return nil, nil, trace.Wrap(err) } if req.LoginIP == "" { // TODO(antonam): consider turning this into error after all use cases are covered (before v14.0 testplan) @@ -137,7 +239,7 @@ func (a *Server) newWebSession( clusterName, err := a.GetClusterName() if err != nil { - return nil, trace.Wrap(err) + return nil, nil, trace.Wrap(err) } checker, err := services.NewAccessChecker(&services.AccessInfo{ @@ -146,24 +248,24 @@ func (a *Server) newWebSession( AllowedResourceIDs: req.RequestedResourceIDs, }, clusterName.GetClusterName(), a) if err != nil { - return nil, trace.Wrap(err) + return nil, nil, trace.Wrap(err) } idleTimeout, err := a.getWebIdleTimeout(ctx) if err != nil { - return nil, trace.Wrap(err) + return nil, nil, trace.Wrap(err) } var sshKey, tlsKey crypto.Signer if req.SSHPrivateKey != nil || req.TLSPrivateKey != nil { if req.SSHPrivateKey == nil || req.TLSPrivateKey == nil { - return nil, trace.BadParameter("invalid to set only one of SSHPrivateKey or TLSPrivateKey (this is a bug)") + return nil, nil, trace.BadParameter("invalid to set only one of SSHPrivateKey or TLSPrivateKey (this is a bug)") } sshKey, tlsKey = req.SSHPrivateKey.Signer, req.TLSPrivateKey.Signer } else { sshKey, tlsKey, err = cryptosuites.GenerateUserSSHAndTLSKey(ctx, a) if err != nil { - return nil, trace.Wrap(err) + return nil, nil, trace.Wrap(err) } } @@ -178,23 +280,23 @@ func (a *Server) newWebSession( // will be marked with the web session private key policy. webAttData, err := services.NewWebSessionAttestationData(pubKey) if err != nil { - return nil, trace.Wrap(err) + return nil, nil, trace.Wrap(err) } if err = a.UpsertKeyAttestationData(ctx, webAttData, sessionTTL); err != nil { - return nil, trace.Wrap(err) + return nil, nil, trace.Wrap(err) } } } sshPub, err := ssh.NewPublicKey(sshKey.Public()) if err != nil { - return nil, trace.Wrap(err) + return nil, nil, trace.Wrap(err) } sshAuthorizedKey := ssh.MarshalAuthorizedKey(sshPub) tlsPublicKeyPEM, err := keys.MarshalPublicKey(tlsKey.Public()) if err != nil { - return nil, trace.Wrap(err) + return nil, nil, trace.Wrap(err) } certReq := certRequest{ @@ -216,15 +318,15 @@ func (a *Server) newWebSession( certs, err := a.generateUserCert(ctx, certReq) if err != nil { - return nil, trace.Wrap(err) + return nil, nil, trace.Wrap(err) } token, err := utils.CryptoRandomHex(defaults.SessionTokenBytes) if err != nil { - return nil, trace.Wrap(err) + return nil, nil, trace.Wrap(err) } bearerToken, err := utils.CryptoRandomHex(defaults.SessionTokenBytes) if err != nil { - return nil, trace.Wrap(err) + return nil, nil, trace.Wrap(err) } bearerTokenTTL := min(sessionTTL, defaults.BearerTokenTTL) @@ -235,11 +337,11 @@ func (a *Server) newWebSession( sshPrivateKeyPEM, err := keys.MarshalPrivateKey(sshKey) if err != nil { - return nil, trace.Wrap(err) + return nil, nil, trace.Wrap(err) } tlsPrivateKeyPEM, err := keys.MarshalPrivateKey(tlsKey) if err != nil { - return nil, trace.Wrap(err) + return nil, nil, trace.Wrap(err) } sessionSpec := types.WebSessionSpecV2{ @@ -259,9 +361,9 @@ func (a *Server) newWebSession( sess, err := types.NewWebSession(token, types.KindWebSession, sessionSpec) if err != nil { - return nil, trace.Wrap(err) + return nil, nil, trace.Wrap(err) } - return sess, nil + return sess, checker, nil } func (a *Server) getWebIdleTimeout(ctx context.Context) (time.Duration, error) { @@ -307,6 +409,14 @@ type NewAppSessionRequest struct { MFAVerified string // DeviceExtensions holds device-aware user certificate extensions. DeviceExtensions DeviceExtensions + // AppName is the name of the app. + AppName string + // AppURI is the URI of the app. This is the internal endpoint where the application is running and isn't user-facing. + AppURI string + // Identity is the identity of the user. + Identity tlsca.Identity + // ClientAddr is a client (user's) address. + ClientAddr string } // CreateAppSession creates and inserts a services.WebSession into the @@ -365,6 +475,8 @@ func (a *Server) CreateAppSession(ctx context.Context, req *proto.CreateAppSessi AzureIdentity: req.AzureIdentity, GCPServiceAccount: req.GCPServiceAccount, MFAVerified: verifiedMFADeviceID, + AppName: req.AppName, + AppURI: req.URI, DeviceExtensions: DeviceExtensions(identity.DeviceExtensions), }) if err != nil { @@ -380,6 +492,10 @@ func (a *Server) CreateAppSessionFromReq(ctx context.Context, req NewAppSessionR "this Teleport cluster is not licensed for application access, please contact the cluster administrator") } + if req.CreateDeviceWebToken { + return nil, trace.BadParameter("parameter CreateDeviceWebToken disallowed for App Sessions") + } + user, err := a.GetUserOrLoginState(ctx, req.User) if err != nil { return nil, trace.Wrap(err) @@ -478,6 +594,42 @@ func (a *Server) CreateAppSessionFromReq(ctx context.Context, req NewAppSessionR } log.Debugf("Generated application web session for %v with TTL %v.", req.User, req.SessionTTL) UserLoginCount.Inc() + + userMetadata := req.Identity.GetUserMetadata() + userMetadata.User = session.GetUser() + userMetadata.AWSRoleARN = req.AWSRoleARN + + err = a.emitter.EmitAuditEvent(a.closeCtx, &apievents.AppSessionStart{ + Metadata: apievents.Metadata{ + Type: events.AppSessionStartEvent, + Code: events.AppSessionStartCode, + ClusterName: req.ClusterName, + }, + ServerMetadata: apievents.ServerMetadata{ + ServerVersion: teleport.Version, + ServerID: a.ServerID, + ServerNamespace: apidefaults.Namespace, + }, + SessionMetadata: apievents.SessionMetadata{ + SessionID: session.GetName(), + WithMFA: req.MFAVerified, + PrivateKeyPolicy: string(req.Identity.PrivateKeyPolicy), + }, + UserMetadata: userMetadata, + ConnectionMetadata: apievents.ConnectionMetadata{ + RemoteAddr: req.ClientAddr, + }, + PublicAddr: req.PublicAddr, + AppMetadata: apievents.AppMetadata{ + AppURI: req.AppURI, + AppPublicAddr: req.PublicAddr, + AppName: req.AppName, + }, + }) + if err != nil { + log.WithError(err).Warn("Failed to emit app session start event") + } + return session, nil } diff --git a/lib/cloud/aws/policy_statements.go b/lib/cloud/aws/policy_statements.go index ead15df770078..07b890ea99aa0 100644 --- a/lib/cloud/aws/policy_statements.go +++ b/lib/cloud/aws/policy_statements.go @@ -219,6 +219,8 @@ func StatementForListRDSDatabases() *Statement { "rds:DescribeDBInstances", "rds:DescribeDBClusters", "ec2:DescribeSecurityGroups", + "ec2:DescribeSubnets", + "ec2:DescribeVpcs", }, Resources: allResources, } diff --git a/lib/config/configuration.go b/lib/config/configuration.go index a3b821ce4449d..8f1973a70596f 100644 --- a/lib/config/configuration.go +++ b/lib/config/configuration.go @@ -336,6 +336,12 @@ type IntegrationConfEC2SSMIAM struct { // No trailing / is expected. // Eg https://tenant.teleport.sh ProxyPublicURL string + // ClusterName is the Teleport cluster name. + // Used for resource tagging. + ClusterName string + // IntegrationName is the Teleport AWS OIDC Integration name. + // Used for resource tagging. + IntegrationName string } // IntegrationConfEKSIAM contains the arguments of diff --git a/lib/devicetrust/authn/authn.go b/lib/devicetrust/authn/authn.go index ebb1140d743a7..80a875cb92123 100644 --- a/lib/devicetrust/authn/authn.go +++ b/lib/devicetrust/authn/authn.go @@ -20,6 +20,8 @@ package authn import ( "context" + "errors" + "io" "github.com/gravitational/trace" @@ -153,7 +155,10 @@ func (c *Ceremony) run( Payload: &devicepb.AuthenticateDeviceRequest_Init{ Init: init, }, - }); err != nil { + }); err != nil && !errors.Is(err, io.EOF) { + // [io.EOF] indicates that the server has closed the stream. + // The client should handle the underlying error on the subsequent Recv call. + // All other errors are client-side errors and should be returned. return nil, trace.Wrap(devicetrust.HandleUnimplemented(err)) } resp, err := stream.Recv() @@ -203,7 +208,13 @@ func (c *Ceremony) authenticateDeviceMacOS( }, }, }) - return trace.Wrap(err) + if err != nil && !errors.Is(err, io.EOF) { + // [io.EOF] indicates that the server has closed the stream. + // The client should handle the underlying error on the subsequent Recv call. + // All other errors are client-side errors and should be returned. + return trace.Wrap(err) + } + return nil } func (c *Ceremony) authenticateDeviceTPM( @@ -223,5 +234,11 @@ func (c *Ceremony) authenticateDeviceTPM( TpmChallengeResponse: challengeResponse, }, }) - return trace.Wrap(err) + if err != nil && !errors.Is(err, io.EOF) { + // [io.EOF] indicates that the server has closed the stream. + // The client should handle the underlying error on the subsequent Recv call. + // All other errors are client-side errors and should be returned. + return trace.Wrap(err) + } + return nil } diff --git a/lib/devicetrust/enroll/enroll.go b/lib/devicetrust/enroll/enroll.go index 0e7175a99f25e..dd733aa39c0d2 100644 --- a/lib/devicetrust/enroll/enroll.go +++ b/lib/devicetrust/enroll/enroll.go @@ -20,6 +20,8 @@ package enroll import ( "context" + "errors" + "io" "github.com/gravitational/trace" "github.com/gravitational/trace/trail" @@ -182,7 +184,10 @@ func (c *Ceremony) Run(ctx context.Context, devicesClient devicepb.DeviceTrustSe Payload: &devicepb.EnrollDeviceRequest_Init{ Init: init, }, - }); err != nil { + }); err != nil && !errors.Is(err, io.EOF) { + // [io.EOF] indicates that the server has closed the stream. + // The client should handle the underlying error on the subsequent Recv call. + // All other errors are client-side errors and should be returned. return nil, trace.Wrap(devicetrust.HandleUnimplemented(err)) } resp, err := stream.Recv() @@ -236,7 +241,13 @@ func (c *Ceremony) enrollDeviceMacOS(stream devicepb.DeviceTrustService_EnrollDe }, }, }) - return trace.Wrap(err) + if err != nil && !errors.Is(err, io.EOF) { + // [io.EOF] indicates that the server has closed the stream. + // The client should handle the underlying error on the subsequent Recv call. + // All other errors are client-side errors and should be returned. + return trace.Wrap(err) + } + return nil } func (c *Ceremony) enrollDeviceTPM(ctx context.Context, stream devicepb.DeviceTrustService_EnrollDeviceClient, resp *devicepb.EnrollDeviceResponse, debug bool) error { @@ -259,5 +270,11 @@ func (c *Ceremony) enrollDeviceTPM(ctx context.Context, stream devicepb.DeviceTr TpmChallengeResponse: challengeResponse, }, }) - return trace.Wrap(err) + // [io.EOF] indicates that the server has closed the stream. + // The client should handle the underlying error on the subsequent Recv call. + // All other errors are client-side errors and should be returned. + if err != nil && !errors.Is(err, io.EOF) { + return trace.Wrap(err) + } + return nil } diff --git a/lib/httplib/httpheaders.go b/lib/httplib/httpheaders.go index b5f6ff9cae464..2c1d500980c3c 100644 --- a/lib/httplib/httpheaders.go +++ b/lib/httplib/httpheaders.go @@ -62,9 +62,10 @@ func newCSPCache() *cspCache { } } -type cspMap map[string][]string +// CSPMap holds a map of Content Security Policy. +type CSPMap map[string][]string -var defaultContentSecurityPolicy = cspMap{ +var defaultContentSecurityPolicy = CSPMap{ "default-src": {"'self'"}, "script-src": {"'self'"}, // specify CSP directives not covered by `default-src` @@ -77,24 +78,24 @@ var defaultContentSecurityPolicy = cspMap{ "style-src": {"'self'", "'unsafe-inline'"}, } -var defaultFontSrc = cspMap{"font-src": {"'self'", "data:"}} -var defaultConnectSrc = cspMap{"connect-src": {"'self'", "wss:"}} +var defaultFontSrc = CSPMap{"font-src": {"'self'", "data:"}} +var defaultConnectSrc = CSPMap{"connect-src": {"'self'", "wss:"}} -var stripeSecurityPolicy = cspMap{ +var stripeSecurityPolicy = CSPMap{ // auto-pay plans in Cloud use stripe.com to manage billing information "script-src": {"https://js.stripe.com"}, "frame-src": {"https://js.stripe.com"}, } -var wasmSecurityPolicy = cspMap{ +var wasmSecurityPolicy = CSPMap{ "script-src": {"'self'", "'wasm-unsafe-eval'"}, } // combineCSPMaps combines multiple CSP maps into a single map. -// When multiple of the input cspMaps have the same key, their +// When multiple of the input CSPMap have the same key, their // respective lists are concatenated. -func combineCSPMaps(cspMaps ...cspMap) cspMap { - combinedMap := make(cspMap) +func combineCSPMaps(cspMaps ...CSPMap) CSPMap { + combinedMap := make(CSPMap) for _, cspMap := range cspMaps { for key, value := range cspMap { @@ -106,11 +107,11 @@ func combineCSPMaps(cspMaps ...cspMap) cspMap { return combinedMap } -// getContentSecurityPolicyString combines multiple CSP maps into a single +// GetContentSecurityPolicyString combines multiple CSP maps into a single // CSP string, alphabetically sorted by the directive key. // When multiple of the input cspMaps have the same key, their // respective lists are concatenated. -func getContentSecurityPolicyString(cspMaps ...cspMap) string { +func GetContentSecurityPolicyString(cspMaps ...CSPMap) string { combined := combineCSPMaps(cspMaps...) keys := make([]string, 0, len(combined)) @@ -175,8 +176,8 @@ func SetDefaultSecurityHeaders(h http.Header) { h.Set("Strict-Transport-Security", "max-age=31536000; includeSubDomains") } -func getIndexContentSecurityPolicy(withStripe, withWasm bool) cspMap { - cspMaps := []cspMap{defaultContentSecurityPolicy, defaultFontSrc, defaultConnectSrc} +func getIndexContentSecurityPolicy(withStripe, withWasm bool) CSPMap { + cspMaps := []CSPMap{defaultContentSecurityPolicy, defaultFontSrc, defaultConnectSrc} if withStripe { cspMaps = append(cspMaps, stripeSecurityPolicy) @@ -209,7 +210,7 @@ func getIndexContentSecurityPolicyString(cfg proto.Features, urlPath string) str // Nothing found in cache, calculate regex and result withWasm := desktopSessionRe.MatchString(urlPath) || recordingRe.MatchString(urlPath) - cspString := getContentSecurityPolicyString( + cspString := GetContentSecurityPolicyString( getIndexContentSecurityPolicy(withStripe, withWasm), ) // Add result to cache @@ -231,9 +232,9 @@ func getRedirectPageContentSecurityPolicyString(scriptSrc string) string { return cspString } - cspString := getContentSecurityPolicyString( + cspString := GetContentSecurityPolicyString( defaultContentSecurityPolicy, - cspMap{ + CSPMap{ "script-src": {"'" + scriptSrc + "'"}, }, ) diff --git a/lib/integrations/awsoidc/ec2_ssm_iam_config.go b/lib/integrations/awsoidc/ec2_ssm_iam_config.go index 8f1903bd19b47..55ebcccaa0a03 100644 --- a/lib/integrations/awsoidc/ec2_ssm_iam_config.go +++ b/lib/integrations/awsoidc/ec2_ssm_iam_config.go @@ -31,6 +31,7 @@ import ( "github.com/gravitational/trace" awslib "github.com/gravitational/teleport/lib/cloud/aws" + "github.com/gravitational/teleport/lib/integrations/awsoidc/tags" ) const ( @@ -60,6 +61,13 @@ type EC2SSMIAMConfigureRequest struct { // No trailing / is expected. // Eg https://tenant.teleport.sh ProxyPublicURL string + + // ClusterName is the Teleport cluster name. + // Used for resource tagging. + ClusterName string + // IntegrationName is the Teleport AWS OIDC Integration name. + // Used for resource tagging. + IntegrationName string } // CheckAndSetDefaults ensures the required fields are present. @@ -84,6 +92,14 @@ func (r *EC2SSMIAMConfigureRequest) CheckAndSetDefaults() error { return trace.BadParameter("proxy public url is required") } + if r.ClusterName == "" { + return trace.BadParameter("cluster name is required") + } + + if r.IntegrationName == "" { + return trace.BadParameter("integration name is required") + } + return nil } @@ -165,11 +181,14 @@ func ConfigureEC2SSM(ctx context.Context, clt EC2SSMConfigureClient, req EC2SSMI slog.InfoContext(ctx, "IntegrationRole: IAM Policy added to Role", "policy", req.IntegrationRoleEC2SSMPolicy, "role", req.IntegrationRole) + ownershipTags := tags.DefaultResourceCreationTags(req.ClusterName, req.IntegrationName) + _, err = clt.CreateDocument(ctx, &ssm.CreateDocumentInput{ Name: aws.String(req.SSMDocumentName), DocumentType: ssmtypes.DocumentTypeCommand, DocumentFormat: ssmtypes.DocumentFormatYaml, Content: aws.String(awslib.EC2DiscoverySSMDocument(req.ProxyPublicURL)), + Tags: ownershipTags.ToSSMTags(), }) if err != nil { var docAlreadyExistsError *ssmtypes.DocumentAlreadyExists diff --git a/lib/integrations/awsoidc/ec2_ssm_iam_config_test.go b/lib/integrations/awsoidc/ec2_ssm_iam_config_test.go index 1e2828be03785..298a464a10492 100644 --- a/lib/integrations/awsoidc/ec2_ssm_iam_config_test.go +++ b/lib/integrations/awsoidc/ec2_ssm_iam_config_test.go @@ -39,6 +39,8 @@ func TestEC2SSMIAMConfigReqDefaults(t *testing.T) { IntegrationRole: "integrationrole", SSMDocumentName: "MyDoc", ProxyPublicURL: "https://proxy.example.com", + ClusterName: "my-cluster", + IntegrationName: "my-integration", } } @@ -58,6 +60,8 @@ func TestEC2SSMIAMConfigReqDefaults(t *testing.T) { IntegrationRoleEC2SSMPolicy: "EC2DiscoverWithSSM", SSMDocumentName: "MyDoc", ProxyPublicURL: "https://proxy.example.com", + ClusterName: "my-cluster", + IntegrationName: "my-integration", }, }, { @@ -78,6 +82,24 @@ func TestEC2SSMIAMConfigReqDefaults(t *testing.T) { }, errCheck: badParameterCheck, }, + { + name: "missing integration name", + req: func() EC2SSMIAMConfigureRequest { + req := baseReq() + req.IntegrationName = "" + return req + }, + errCheck: badParameterCheck, + }, + { + name: "missing cluster name", + req: func() EC2SSMIAMConfigureRequest { + req := baseReq() + req.ClusterName = "" + return req + }, + errCheck: badParameterCheck, + }, { name: "missing ssm document", req: func() EC2SSMIAMConfigureRequest { @@ -118,6 +140,8 @@ func TestEC2SSMIAMConfig(t *testing.T) { IntegrationRole: "integrationrole", SSMDocumentName: "MyDoc", ProxyPublicURL: "https://proxy.example.com", + ClusterName: "my-cluster", + IntegrationName: "my-integration", } } @@ -157,13 +181,21 @@ func TestEC2SSMIAMConfig(t *testing.T) { err := ConfigureEC2SSM(ctx, &clt, tt.req()) tt.errCheck(t, err) + if err == nil { + require.Contains(t, clt.existingDocs, tt.req().SSMDocumentName) + require.ElementsMatch(t, []ssmtypes.Tag{ + {Key: aws.String("teleport.dev/cluster"), Value: aws.String("my-cluster")}, + {Key: aws.String("teleport.dev/integration"), Value: aws.String("my-integration")}, + {Key: aws.String("teleport.dev/origin"), Value: aws.String("integration_awsoidc")}, + }, clt.existingDocs[tt.req().SSMDocumentName]) + } }) } } type mockEC2SSMIAMConfigClient struct { existingRoles []string - existingDocs []string + existingDocs map[string][]ssmtypes.Tag } // PutRolePolicy creates or replaces a Policy by its name in a IAM Role. @@ -179,8 +211,12 @@ func (m *mockEC2SSMIAMConfigClient) PutRolePolicy(ctx context.Context, params *i // CreateDocument creates an SSM document. func (m *mockEC2SSMIAMConfigClient) CreateDocument(ctx context.Context, params *ssm.CreateDocumentInput, optFns ...func(*ssm.Options)) (*ssm.CreateDocumentOutput, error) { - if slices.Contains(m.existingDocs, aws.ToString(params.Name)) { + if m.existingDocs == nil { + m.existingDocs = make(map[string][]ssmtypes.Tag) + } + if _, ok := m.existingDocs[aws.ToString(params.Name)]; ok { return nil, &ssmtypes.DocumentAlreadyExists{} } + m.existingDocs[aws.ToString(params.Name)] = params.Tags return nil, nil } diff --git a/lib/integrations/awsoidc/tags/tags.go b/lib/integrations/awsoidc/tags/tags.go index 0ed290105a19b..f8b39c04a8a2b 100644 --- a/lib/integrations/awsoidc/tags/tags.go +++ b/lib/integrations/awsoidc/tags/tags.go @@ -28,6 +28,7 @@ import ( ecsTypes "github.com/aws/aws-sdk-go-v2/service/ecs/types" iamTypes "github.com/aws/aws-sdk-go-v2/service/iam/types" s3types "github.com/aws/aws-sdk-go-v2/service/s3/types" + ssmtypes "github.com/aws/aws-sdk-go-v2/service/ssm/types" "github.com/gravitational/teleport/api/types" ) @@ -151,6 +152,18 @@ func (d AWSTags) ToAthenaTags() []athenatypes.Tag { return athenaTags } +// ToSSMTags returns the default tags using the expected type for SSM resources: [ssmtypes.Tag] +func (d AWSTags) ToSSMTags() []ssmtypes.Tag { + ssmTags := make([]ssmtypes.Tag, 0, len(d)) + for k, v := range d { + ssmTags = append(ssmTags, ssmtypes.Tag{ + Key: &k, + Value: &v, + }) + } + return ssmTags +} + // ToMap returns the default tags using the expected type for other aws resources. // Eg Glue resources func (d AWSTags) ToMap() map[string]string { diff --git a/lib/integrations/awsoidc/tags/tags_test.go b/lib/integrations/awsoidc/tags/tags_test.go index 7b07e86f9340e..287c4caebe3a6 100644 --- a/lib/integrations/awsoidc/tags/tags_test.go +++ b/lib/integrations/awsoidc/tags/tags_test.go @@ -25,6 +25,7 @@ import ( ec2types "github.com/aws/aws-sdk-go-v2/service/ec2/types" ecstypes "github.com/aws/aws-sdk-go-v2/service/ecs/types" iamtypes "github.com/aws/aws-sdk-go-v2/service/iam/types" + ssmtypes "github.com/aws/aws-sdk-go-v2/service/ssm/types" "github.com/stretchr/testify/require" ) @@ -67,6 +68,15 @@ func TestDefaultTags(t *testing.T) { require.ElementsMatch(t, expectedEC2Tags, d.ToEC2Tags()) }) + t.Run("ssm tags", func(t *testing.T) { + expectedTags := []ssmtypes.Tag{ + {Key: aws.String("teleport.dev/cluster"), Value: aws.String("mycluster")}, + {Key: aws.String("teleport.dev/integration"), Value: aws.String("myawsaccount")}, + {Key: aws.String("teleport.dev/origin"), Value: aws.String("integration_awsoidc")}, + } + require.ElementsMatch(t, expectedTags, d.ToSSMTags()) + }) + t.Run("resource is teleport managed", func(t *testing.T) { t.Run("ECS Tags", func(t *testing.T) { t.Run("all tags match", func(t *testing.T) { diff --git a/lib/integrations/diagnostics/profile.go b/lib/integrations/diagnostics/profile.go new file mode 100644 index 0000000000000..dc18ba8c028b5 --- /dev/null +++ b/lib/integrations/diagnostics/profile.go @@ -0,0 +1,111 @@ +// Teleport +// Copyright (C) 2024 Gravitational, Inc. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +package diagnostics + +import ( + "os" + "path/filepath" + "runtime" + "runtime/pprof" + runtimetrace "runtime/trace" + "strconv" + "time" + + "github.com/gravitational/trace" + "github.com/sirupsen/logrus" +) + +// Profile captures various Go pprof profiles and writes +// them to the profivided directory. All profiles are prefixed +// with the same epoch time so that profiles can easily be associated +// as being captured from the same call. +func Profile(dir string) error { + if err := os.MkdirAll(dir, 0o755); err != nil { + return trace.Wrap(err, "creating profile directory %v", dir) + } + + timestamp := strconv.FormatInt(time.Now().UnixMilli(), 10) + traceFile, err := os.Create(filepath.Join(dir, timestamp+"-trace.profile")) + if err != nil { + return trace.Wrap(err, "creating trace proile file") + } + defer traceFile.Close() + + cpuFile, err := os.Create(filepath.Join(dir, timestamp+"-cpu.profile")) + if err != nil { + return trace.Wrap(err, "creating cpu proile file") + } + defer cpuFile.Close() + + heapFile, err := os.Create(filepath.Join(dir, timestamp+"-heap.profile")) + if err != nil { + return trace.Wrap(err, "creating heap proile file") + } + defer heapFile.Close() + + goroutineFile, err := os.Create(filepath.Join(dir, timestamp+"-goroutine.profile")) + if err != nil { + return trace.Wrap(err, "creating goroutine proile file") + } + defer goroutineFile.Close() + + blockFile, err := os.Create(filepath.Join(dir, timestamp+"-block.profile")) + if err != nil { + return trace.Wrap(err, "creating block proile file") + } + defer blockFile.Close() + + logrus.Debugf("capturing trace profile to %s", traceFile.Name()) + + if err := runtimetrace.Start(traceFile); err != nil { + return trace.Wrap(err, "capturing trace profile") + } + + logrus.Debugf("capturing cpu profile to %s", cpuFile.Name()) + + if err := pprof.StartCPUProfile(cpuFile); err != nil { + return trace.Wrap(err, "capturing cpu profile") + } + + defer func() { + logrus.Debugf("capturing goroutine profile to %s", cpuFile.Name()) + + if err := pprof.Lookup("goroutine").WriteTo(goroutineFile, 0); err != nil { + logrus.WithError(err).Warn("failed to capture goroutine profile") + } + + logrus.Debugf("capturing block profile to %s", cpuFile.Name()) + + if err := pprof.Lookup("block").WriteTo(blockFile, 0); err != nil { + logrus.WithError(err).Warn("failed to capture block profile") + } + + runtime.GC() + + logrus.Debugf("capturing heap profile to %s", cpuFile.Name()) + + if err := pprof.WriteHeapProfile(heapFile); err != nil { + logrus.WithError(err).Warn("failed to capture heap profile") + } + + pprof.StopCPUProfile() + runtimetrace.Stop() + }() + + <-time.After(30 * time.Second) + return nil +} diff --git a/lib/joinserver/joinserver.go b/lib/joinserver/joinserver.go index 1fee288d99fae..735dae1e6ab08 100644 --- a/lib/joinserver/joinserver.go +++ b/lib/joinserver/joinserver.go @@ -62,7 +62,7 @@ type joinServiceClient interface { // server. On the Auth Server, this is passed to auth.ServerWithRoles and // through to auth.Server to be handled. type JoinServiceGRPCServer struct { - *proto.UnimplementedJoinServiceServer + proto.UnimplementedJoinServiceServer joinServiceClient joinServiceClient clock clockwork.Clock @@ -133,7 +133,7 @@ func (s *JoinServiceGRPCServer) registerUsingIAMMethod(srv proto.JoinService_Reg if err := setClientRemoteAddr(ctx, req.RegisterUsingTokenRequest); err != nil { return nil, trace.Wrap(err) } - setBotInstanceID(ctx, req.RegisterUsingTokenRequest) + setBotParameters(ctx, req.RegisterUsingTokenRequest) return req, nil }) @@ -205,9 +205,9 @@ func setClientRemoteAddr(ctx context.Context, req *types.RegisterUsingTokenReque return nil } -// setBotInstanceID extracts a bot instance ID from either the incoming request +// setBotParameters extracts a bot instance ID from either the incoming request // or the context identity. -func setBotInstanceID(ctx context.Context, req *types.RegisterUsingTokenRequest) { +func setBotParameters(ctx context.Context, req *types.RegisterUsingTokenRequest) { user, err := authz.UserFromContext(ctx) if err != nil { return @@ -233,6 +233,8 @@ func setBotInstanceID(ctx context.Context, req *types.RegisterUsingTokenRequest) // trusted source, i.e. another proxy or certificate field. req.BotInstanceID = "" } + + req.BotGeneration = int32(ident.Generation) } func (s *JoinServiceGRPCServer) registerUsingAzureMethod(srv proto.JoinService_RegisterUsingAzureMethodServer) error { @@ -252,7 +254,7 @@ func (s *JoinServiceGRPCServer) registerUsingAzureMethod(srv proto.JoinService_R if err := setClientRemoteAddr(ctx, req.RegisterUsingTokenRequest); err != nil { return nil, trace.Wrap(err) } - setBotInstanceID(ctx, req.RegisterUsingTokenRequest) + setBotParameters(ctx, req.RegisterUsingTokenRequest) return req, nil }) @@ -330,7 +332,7 @@ func (s *JoinServiceGRPCServer) registerUsingTPMMethod( return trace.Wrap(err, "setting client address") } - setBotInstanceID(ctx, initReq.JoinRequest) + setBotParameters(ctx, initReq.JoinRequest) certs, err := s.joinServiceClient.RegisterUsingTPMMethod( ctx, diff --git a/lib/multiplexer/test/ping_grpc.pb.go b/lib/multiplexer/test/ping_grpc.pb.go index 4c882f1a4aae8..33e683f0f58af 100644 --- a/lib/multiplexer/test/ping_grpc.pb.go +++ b/lib/multiplexer/test/ping_grpc.pb.go @@ -17,7 +17,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: -// - protoc-gen-go-grpc v1.4.0 +// - protoc-gen-go-grpc v1.5.0 // - protoc (unknown) // source: teleport/lib/multiplexer/test/ping.proto @@ -32,8 +32,8 @@ import ( // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. -// Requires gRPC-Go v1.62.0 or later. -const _ = grpc.SupportPackageIsVersion8 +// Requires gRPC-Go v1.64.0 or later. +const _ = grpc.SupportPackageIsVersion9 const ( Pinger_Ping_FullMethodName = "/teleport.lib.multiplexer.test.Pinger/Ping" @@ -68,7 +68,7 @@ func (c *pingerClient) Ping(ctx context.Context, in *Request, opts ...grpc.CallO // PingerServer is the server API for Pinger service. // All implementations must embed UnimplementedPingerServer -// for forward compatibility +// for forward compatibility. // // Pinger is a service used in tests type PingerServer interface { @@ -76,14 +76,18 @@ type PingerServer interface { mustEmbedUnimplementedPingerServer() } -// UnimplementedPingerServer must be embedded to have forward compatible implementations. -type UnimplementedPingerServer struct { -} +// UnimplementedPingerServer must be embedded to have +// forward compatible implementations. +// +// NOTE: this should be embedded by value instead of pointer to avoid a nil +// pointer dereference when methods are called. +type UnimplementedPingerServer struct{} func (UnimplementedPingerServer) Ping(context.Context, *Request) (*Response, error) { return nil, status.Errorf(codes.Unimplemented, "method Ping not implemented") } func (UnimplementedPingerServer) mustEmbedUnimplementedPingerServer() {} +func (UnimplementedPingerServer) testEmbeddedByValue() {} // UnsafePingerServer may be embedded to opt out of forward compatibility for this service. // Use of this interface is not recommended, as added methods to PingerServer will @@ -93,6 +97,13 @@ type UnsafePingerServer interface { } func RegisterPingerServer(s grpc.ServiceRegistrar, srv PingerServer) { + // If the following call pancis, it indicates UnimplementedPingerServer was + // embedded by pointer and is nil. This will cause panics if an + // unimplemented method is ever invoked, so we test this at initialization + // time to prevent it from happening at runtime later due to I/O. + if t, ok := srv.(interface{ testEmbeddedByValue() }); ok { + t.testEmbeddedByValue() + } s.RegisterService(&Pinger_ServiceDesc, srv) } diff --git a/lib/resumption/client.go b/lib/resumption/client.go index f12f51a35805f..3325a3b74e7f4 100644 --- a/lib/resumption/client.go +++ b/lib/resumption/client.go @@ -219,6 +219,12 @@ func runClientResumableUnlocking(ctx context.Context, resumableConn *Conn, first case <-detached: } + reconnectTicker.Stop() + select { + case <-reconnectTicker.Chan(): + default: + } + slog.DebugContext(ctx, "connection lost, starting reconnection loop", "host_id", hostID) reconnectDeadline := time.Now().Add(reconnectTimeout) backoff := minBackoff @@ -262,10 +268,6 @@ func runClientResumableUnlocking(ctx context.Context, resumableConn *Conn, first } reconnectTicker.Reset(replacementInterval) - select { - case <-reconnectTicker.Chan(): - default: - } } } diff --git a/lib/resumption/resumption_test.go b/lib/resumption/resumption_test.go index de6f74a89f58c..db915fcb062f3 100644 --- a/lib/resumption/resumption_test.go +++ b/lib/resumption/resumption_test.go @@ -212,6 +212,9 @@ func testResumption(t *testing.T, network, address string, expectedHostID string default: } + // wait until the reconnection loop has passed the reconnection phase + // and is waiting on the reconnection timer again + clock.BlockUntil(1) clock.Advance(replacementInterval) redialingSyncPoint <- struct{}{} diff --git a/lib/secretsscanner/authorizedkeys/authorized_keys.go b/lib/secretsscanner/authorizedkeys/authorized_keys.go new file mode 100644 index 0000000000000..7919ac6162e6a --- /dev/null +++ b/lib/secretsscanner/authorizedkeys/authorized_keys.go @@ -0,0 +1,390 @@ +/* + * Teleport + * Copyright (C) 2024 Gravitational, Inc. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package authorizedkeys + +import ( + "bufio" + "context" + "errors" + "log/slog" + "os" + "os/user" + "path/filepath" + "runtime" + "strings" + "sync" + "time" + + "github.com/fsnotify/fsnotify" + "github.com/gravitational/trace" + "github.com/jonboulle/clockwork" + "golang.org/x/crypto/ssh" + + "github.com/gravitational/teleport/api/constants" + accessgraphsecretsv1pb "github.com/gravitational/teleport/api/gen/proto/go/teleport/accessgraph/v1" + clusterconfigpb "github.com/gravitational/teleport/api/gen/proto/go/teleport/clusterconfig/v1" + "github.com/gravitational/teleport/api/types/accessgraph" + "github.com/gravitational/teleport/api/utils/retryutils" +) + +var ( + // ErrUnsupportedPlatform is returned when the operating system is not supported. + ErrUnsupportedPlatform = errors.New("unsupported platform") +) + +// Watcher watches for changes to authorized_keys files +// and reports them to the cluster. If the cluster does not have +// scanning enabled, the watcher will hold until the feature is enabled. +type Watcher struct { + // client is the client to use to communicate with the cluster. + client ClusterClient + logger *slog.Logger + clock clockwork.Clock + hostID string + usersAccountFile string +} + +// ClusterClient is the client to use to communicate with the cluster. +type ClusterClient interface { + GetClusterAccessGraphConfig(context.Context) (*clusterconfigpb.AccessGraphConfig, error) + AccessGraphSecretsScannerClient() accessgraphsecretsv1pb.SecretsScannerServiceClient +} + +// WatcherConfig is the configuration for the Watcher. +type WatcherConfig struct { + // Client is the client to use to communicate with the cluster. + Client ClusterClient + // Logger is the logger to use. + Logger *slog.Logger + // Clock is the clock to use. + Clock clockwork.Clock + // HostID is the ID of the host. + HostID string + // getRuntimeOS returns the runtime operating system. + // used for testing purposes. + getRuntimeOS func() string + // etcPasswdFile is the path to the file that contains the users account information on the system. + // This file is used to get the list of users on the system and their home directories. + // Value is set to "/etc/passwd" by default. + etcPasswdFile string +} + +// NewWatcher creates a new Watcher instance. +// Returns [ErrUnsupportedPlatform] if the operating system is not supported. +func NewWatcher(ctx context.Context, config WatcherConfig) (*Watcher, error) { + + if getOS(config) != constants.LinuxOS { + return nil, trace.Wrap(ErrUnsupportedPlatform) + } + + if config.HostID == "" { + return nil, trace.BadParameter("missing host ID") + } + if config.Client == nil { + return nil, trace.BadParameter("missing client") + } + if config.Logger == nil { + config.Logger = slog.Default() + } + if config.Clock == nil { + config.Clock = clockwork.NewRealClock() + } + if config.etcPasswdFile == "" { + // etcPasswordPath is the path to the password file. + // This file is used to get the list of users on the system and their home directories. + const etcPasswordPath = "/etc/passwd" + config.etcPasswdFile = etcPasswordPath + } + + w := &Watcher{ + client: config.Client, + logger: config.Logger, + clock: config.Clock, + hostID: config.HostID, + usersAccountFile: config.etcPasswdFile, + } + + return w, nil +} + +func (w *Watcher) Run(ctx context.Context) error { + return trace.Wrap(w.monitorClusterConfigAndStart(ctx)) +} + +func (w *Watcher) monitorClusterConfigAndStart(ctx context.Context) error { + const tickerInterval = 30 * time.Minute + return trace.Wrap(supervisorRunner(ctx, supervisorRunnerConfig{ + clock: w.clock, + tickerInterval: tickerInterval, + runner: w.start, + checkIfMonitorEnabled: w.isAuthorizedKeysReportEnabled, + logger: w.logger, + })) +} + +// start starts the watcher. +func (w *Watcher) start(ctx context.Context) error { + wg := sync.WaitGroup{} + defer wg.Wait() + + fileWatcher, err := fsnotify.NewWatcher() + if err != nil { + return trace.Wrap(err) + } + defer func() { + if err := fileWatcher.Close(); err != nil { + w.logger.WarnContext(ctx, "Failed to close watcher", "error", err) + } + }() + + ctx, cancel := context.WithCancel(ctx) + defer cancel() + reload := make(chan struct{}) + wg.Add(1) + go func() { + defer wg.Done() + for { + select { + case <-ctx.Done(): + return + case <-fileWatcher.Events: + innerLoop: + for { + select { + case <-ctx.Done(): + return + case <-fileWatcher.Events: + case reload <- struct{}{}: + break innerLoop + } + } + case err := <-fileWatcher.Errors: + w.logger.WarnContext(ctx, "Error watching authorized_keys file", "error", err) + } + } + }() + + if err := fileWatcher.Add(w.usersAccountFile); err != nil { + w.logger.WarnContext(ctx, "Failed to add watcher for file", "error", err) + } + + stream, err := w.client.AccessGraphSecretsScannerClient().ReportAuthorizedKeys(ctx) + if err != nil { + return trace.Wrap(err) + } + + // Wait for the initial delay before sending the first report to spread the load. + // The initial delay is a random value between 0 and maxInitialDelay. + const maxInitialDelay = 5 * time.Minute + select { + case <-ctx.Done(): + return nil + case <-w.clock.After(retryutils.NewFullJitter()(maxInitialDelay)): + } + + jitterFunc := retryutils.NewHalfJitter() + // maxReSendInterval is the maximum interval to re-send the authorized keys report + // to the cluster in case of no changes. + const maxReSendInterval = accessgraph.AuthorizedKeyDefaultKeyTTL - 20*time.Minute + timer := w.clock.NewTimer(jitterFunc(maxReSendInterval)) + defer timer.Stop() + for { + + if err := w.fetchAndReportAuthorizedKeys(ctx, stream, fileWatcher); err != nil { + w.logger.WarnContext(ctx, "Failed to report authorized keys", "error", err) + } + + if !timer.Stop() { + <-timer.Chan() + } + timer.Reset(jitterFunc(maxReSendInterval)) + + select { + case <-ctx.Done(): + return nil + case <-reload: + case <-timer.Chan(): + } + } +} + +// isAuthorizedKeysReportEnabled checks if the cluster has authorized keys report enabled. +func (w *Watcher) isAuthorizedKeysReportEnabled(ctx context.Context) (bool, error) { + accessGraphConfig, err := w.client.GetClusterAccessGraphConfig(ctx) + if err != nil { + return false, trace.Wrap(err) + } + return accessGraphConfig.GetEnabled() && accessGraphConfig.GetSecretsScanConfig().GetSshScanEnabled(), nil +} + +// fetchAndReportAuthorizedKeys fetches the authorized keys from the system and reports them to the cluster. +func (w *Watcher) fetchAndReportAuthorizedKeys( + ctx context.Context, + stream accessgraphsecretsv1pb.SecretsScannerService_ReportAuthorizedKeysClient, + fileWatcher *fsnotify.Watcher, +) error { + users, err := userList(ctx, w.logger, w.usersAccountFile) + if err != nil { + return trace.Wrap(err) + } + var keys []*accessgraphsecretsv1pb.AuthorizedKey + for _, u := range users { + if u.HomeDir == "" { + w.logger.DebugContext(ctx, "Skipping user with empty home directory", "user", u.Name) + continue + } + + for _, file := range []string{"authorized_keys", "authorized_keys2"} { + authorizedKeysPath := filepath.Join(u.HomeDir, ".ssh", file) + if fs, err := os.Stat(authorizedKeysPath); err != nil || fs.IsDir() { + continue + } + + hostKeys, err := w.parseAuthorizedKeysFile(ctx, u, authorizedKeysPath) + if errors.Is(err, os.ErrNotExist) { + continue + } else if err != nil { + w.logger.WarnContext(ctx, "Failed to parse authorized_keys file", "error", err) + continue + } + + // Add the file to the watcher. If file was already added, this is a no-op. + if err := fileWatcher.Add(authorizedKeysPath); err != nil { + w.logger.WarnContext(ctx, "Failed to add watcher for file", "error", err) + } + keys = append(keys, hostKeys...) + } + } + + const maxKeysPerReport = 500 + for i := 0; i < len(keys); i += maxKeysPerReport { + start := i + end := min(i+maxKeysPerReport, len(keys)) + if err := stream.Send( + &accessgraphsecretsv1pb.ReportAuthorizedKeysRequest{ + Keys: keys[start:end], + Operation: accessgraphsecretsv1pb.OperationType_OPERATION_TYPE_ADD, + }, + ); err != nil { + return trace.Wrap(err) + } + } + + if err := stream.Send( + &accessgraphsecretsv1pb.ReportAuthorizedKeysRequest{Operation: accessgraphsecretsv1pb.OperationType_OPERATION_TYPE_SYNC}, + ); err != nil { + return trace.Wrap(err) + } + return nil +} + +// userList retrieves all users on the system +func userList(ctx context.Context, log *slog.Logger, filePath string) ([]user.User, error) { + file, err := os.Open(filePath) + if err != nil { + return nil, err + } + defer func() { + if err := file.Close(); err != nil { + log.DebugContext(ctx, "Failed to close file", "error", err, "file", filePath) + } + }() + + var users []user.User + scanner := bufio.NewScanner(file) + for scanner.Scan() { + line := scanner.Text() + // Skip empty lines and comments + if line == "" || strings.HasPrefix(line, "#") { + continue + } + // username:password:uid:gid:gecos:home:shell + parts := strings.Split(line, ":") + if len(parts) < 7 { + continue + } + users = append(users, user.User{ + Username: parts[0], + Uid: parts[2], + Gid: parts[3], + Name: parts[4], + HomeDir: parts[5], + }) + } + + if err := scanner.Err(); err != nil { + return nil, err + } + + return users, nil +} + +func (w *Watcher) parseAuthorizedKeysFile(ctx context.Context, u user.User, authorizedKeysPath string) ([]*accessgraphsecretsv1pb.AuthorizedKey, error) { + file, err := os.Open(authorizedKeysPath) + if err != nil { + return nil, trace.Wrap(err) + } + defer func() { + if err := file.Close(); err != nil { + w.logger.WarnContext(ctx, "Failed to close file", "error", err, "path", authorizedKeysPath) + } + }() + + var keys []*accessgraphsecretsv1pb.AuthorizedKey + scanner := bufio.NewScanner(file) + scanner.Split(bufio.ScanLines) + for scanner.Scan() { + payload := scanner.Bytes() + if len(payload) == 0 || payload[0] == '#' { + continue + } + parsedKey, comment, _, _, err := ssh.ParseAuthorizedKey(payload) + if err != nil { + w.logger.WarnContext(ctx, "Failed to parse authorized key", "error", err) + continue + } else if parsedKey == nil { + continue + } + + authorizedKey, err := accessgraph.NewAuthorizedKey( + &accessgraphsecretsv1pb.AuthorizedKeySpec{ + HostId: w.hostID, + HostUser: u.Username, + KeyFingerprint: ssh.FingerprintSHA256(parsedKey), + KeyComment: comment, + KeyType: parsedKey.Type(), + }, + ) + if err != nil { + w.logger.WarnContext(ctx, "Failed to create authorized key", "error", err) + continue + } + keys = append(keys, authorizedKey) + } + + return keys, nil +} + +func getOS(config WatcherConfig) string { + goos := runtime.GOOS + if config.getRuntimeOS != nil { + goos = config.getRuntimeOS() + } + return goos +} diff --git a/lib/secretsscanner/authorizedkeys/authorized_keys_test.go b/lib/secretsscanner/authorizedkeys/authorized_keys_test.go new file mode 100644 index 0000000000000..b6d995dcdcf62 --- /dev/null +++ b/lib/secretsscanner/authorizedkeys/authorized_keys_test.go @@ -0,0 +1,231 @@ +/* + * Teleport + * Copyright (C) 2024 Gravitational, Inc. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package authorizedkeys + +import ( + "context" + "fmt" + "log/slog" + "os" + "path/filepath" + "slices" + "sync" + "testing" + "time" + + "github.com/google/go-cmp/cmp" + "github.com/gravitational/trace" + "github.com/jonboulle/clockwork" + "github.com/stretchr/testify/require" + "golang.org/x/sync/errgroup" + "google.golang.org/grpc" + "google.golang.org/protobuf/testing/protocmp" + + "github.com/gravitational/teleport/api/constants" + accessgraphsecretsv1pb "github.com/gravitational/teleport/api/gen/proto/go/teleport/accessgraph/v1" + clusterconfigpb "github.com/gravitational/teleport/api/gen/proto/go/teleport/clusterconfig/v1" + headerv1 "github.com/gravitational/teleport/api/gen/proto/go/teleport/header/v1" + "github.com/gravitational/teleport/api/types/accessgraph" +) + +func TestAuthorizedKeys(t *testing.T) { + hostID := "hostID" + + etcPasswdFile := createFSData(t) + clock := clockwork.NewFakeClockAt(time.Date(2024, time.January, 1, 0, 0, 0, 0, time.UTC)) + client := &fakeClient{} + + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + watcher, err := NewWatcher(ctx, WatcherConfig{ + Client: client, + etcPasswdFile: etcPasswdFile, + HostID: hostID, + Clock: clock, + Logger: slog.Default(), + getRuntimeOS: func() string { + return constants.LinuxOS + }, + }) + require.NoError(t, err) + + // Start the watcher + group, ctx := errgroup.WithContext(ctx) + group.Go(func() error { + return trace.Wrap(watcher.Run(ctx)) + }) + + // Wait for the watcher to start and to block on the initial spread. + clock.BlockUntil(2) // wait for clock to blocked at supervisor and initial delay routine + // Advance the clock to trigger the first scan + clock.Advance(5 * time.Minute) + + // Wait for the watcher to start + require.Eventually(t, func() bool { + return len(client.getReqReceived()) == 2 + }, 1*time.Second, 10*time.Millisecond, "expected watcher to start, but it did not") + + // Check the requests + got := client.getReqReceived() + require.Len(t, got, 2) + expected := []*accessgraphsecretsv1pb.ReportAuthorizedKeysRequest{ + { + Keys: createKeysForUsers(t, hostID), + Operation: accessgraphsecretsv1pb.OperationType_OPERATION_TYPE_ADD, + }, + { + Operation: accessgraphsecretsv1pb.OperationType_OPERATION_TYPE_SYNC, + }, + } + require.Empty(t, cmp.Diff(got, expected, + protocmp.Transform(), + protocmp.SortRepeated( + func(a, b *accessgraphsecretsv1pb.AuthorizedKey) bool { + return a.Metadata.Name < b.Metadata.Name + }, + ), + protocmp.IgnoreFields(&headerv1.Metadata{}, "expires"), + ), + ) + + // Clear the requests + client.clear() + + // Update the etcPasswdFile + createUsersAndAuthorizedKeys(t, filepath.Dir(etcPasswdFile)) + + cancel() + err = group.Wait() + require.NoError(t, err) + +} + +func createFSData(t *testing.T) string { + dir := t.TempDir() + etcPasswd := exampleEtcPasswdFile(dir) + createFile(t, dir, "passwd", etcPasswd) + + createUsersAndAuthorizedKeys(t, dir) + return filepath.Join(dir, "passwd") +} + +func createFile(t *testing.T, dir, name, content string) { + err := os.MkdirAll(dir, 0755) + require.NoError(t, err) + path := fmt.Sprintf("%s/%s", dir, name) + err = os.WriteFile(path, []byte(content), 0644) + require.NoError(t, err) +} + +func exampleEtcPasswdFile(dir string) string { + return fmt.Sprintf( + `root:x:0:0::%s/root:/usr/bin/bash +bin:x:1:1::/:/usr/bin/nologin +user:x:1000:1000::%s/user:/usr/bin/zsh`, + dir, + dir, + ) +} + +const authorizedFileExample = ` +ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQClwXUKOp/S4XEtFjgr8mfaCy4OyI7N9ZMibdCGxvk2VHP9+Vn8Al1lUSVwuBxHI7EHiq42RCTBetIpTjzn6yiPNAeGNL5cfl9i6r+P5k7og1hz+2oheWveGodx6Dp+Z4o2dw65NGf5EPaotXF8AcHJc3+OiMS5yp/x2A3tu2I1SPQ6dtPa067p8q1L49BKbFwrFRBCVwkr6kpEQAIjnMESMPGD5Buu/AtyAdEZQSLTt8RZajJZDfXFKMEtQm2UF248NFl3hSMAcbbTxITBbZxX7THbwQz22Yuw7422G5CYBPf6WRXBY84Rs6jCS4I4GMxj+3rF4mGtjvuz0wOE32s3w4eMh9h3bPuEynufjE8henmPCIW49+kuZO4LZut7Zg5BfVDQnZYclwokEIMz+gR02YpyflxQOa98t/0mENu+t4f0LNAdkQEBpYtGKKDth5kLphi2Sdi9JpGO2sTivlxMsGyBqdd0wT9VwQpWf4wro6t09HdZJX1SAuEi/0tNI10= friel@test +# comment +ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGtqQKEkGIY5+Bc4EmEv7NeSn6aA7KMl5eiNEAOqwTBl friel@test +invalidLine +# comment +` + +func createUsersAndAuthorizedKeys(t *testing.T, dir string) { + for _, user := range []string{"root", "user"} { + dir := filepath.Join(dir, user, ".ssh") + createFile(t, dir, "authorized_keys", authorizedFileExample) + } +} + +type fakeClient struct { + accessgraphsecretsv1pb.SecretsScannerServiceClient + accessgraphsecretsv1pb.SecretsScannerService_ReportAuthorizedKeysClient + mu sync.Mutex + reqReceived []*accessgraphsecretsv1pb.ReportAuthorizedKeysRequest +} + +func (f *fakeClient) GetClusterAccessGraphConfig(_ context.Context) (*clusterconfigpb.AccessGraphConfig, error) { + return &clusterconfigpb.AccessGraphConfig{ + Enabled: true, + SecretsScanConfig: &clusterconfigpb.AccessGraphSecretsScanConfiguration{ + SshScanEnabled: true, + }, + }, nil +} +func (f *fakeClient) AccessGraphSecretsScannerClient() accessgraphsecretsv1pb.SecretsScannerServiceClient { + return f +} + +func (f *fakeClient) ReportAuthorizedKeys(_ context.Context, _ ...grpc.CallOption) (accessgraphsecretsv1pb.SecretsScannerService_ReportAuthorizedKeysClient, error) { + return f, nil +} + +func (f *fakeClient) Send(req *accessgraphsecretsv1pb.ReportAuthorizedKeysRequest) error { + f.mu.Lock() + defer f.mu.Unlock() + f.reqReceived = append(f.reqReceived, req) + return nil +} + +func (f *fakeClient) clear() { + f.mu.Lock() + defer f.mu.Unlock() + f.reqReceived = nil +} + +func (f *fakeClient) getReqReceived() []*accessgraphsecretsv1pb.ReportAuthorizedKeysRequest { + f.mu.Lock() + defer f.mu.Unlock() + return slices.Clone(f.reqReceived) +} + +func createKeysForUsers(t *testing.T, hostID string) []*accessgraphsecretsv1pb.AuthorizedKey { + var keys []*accessgraphsecretsv1pb.AuthorizedKey + for _, k := range []struct { + fingerprint string + keyType string + }{ + { + fingerprint: "SHA256:GbJlTLeQgZhvGoklWGXHo0AinGgGEcldllgYExoSy+s", + keyType: "ssh-ed25519", + }, + { + fingerprint: "SHA256:ewwMB/nCAYurNrYFXYZuxLZv7T7vgpPd7QuIo0d5n+U", + keyType: "ssh-rsa", + }, + } { + for _, user := range []string{"root", "user"} { + at, err := accessgraph.NewAuthorizedKey(&accessgraphsecretsv1pb.AuthorizedKeySpec{ + HostId: hostID, + HostUser: user, + KeyFingerprint: k.fingerprint, + KeyComment: "friel@test", + KeyType: k.keyType, + }) + require.NoError(t, err) + keys = append(keys, at) + } + } + return keys +} diff --git a/lib/secretsscanner/authorizedkeys/supervisor.go b/lib/secretsscanner/authorizedkeys/supervisor.go new file mode 100644 index 0000000000000..c0048abb07877 --- /dev/null +++ b/lib/secretsscanner/authorizedkeys/supervisor.go @@ -0,0 +1,112 @@ +/* + * Teleport + * Copyright (C) 2024 Gravitational, Inc. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package authorizedkeys + +import ( + "context" + "errors" + "log/slog" + "sync" + "time" + + "github.com/jonboulle/clockwork" + + "github.com/gravitational/teleport/api/utils/retryutils" +) + +var errShutdown = errors.New("watcher is shutting down") + +type supervisorRunnerConfig struct { + clock clockwork.Clock + tickerInterval time.Duration + runner func(context.Context) error + checkIfMonitorEnabled func(context.Context) (bool, error) + logger *slog.Logger +} + +// supervisorRunner runs the runner based on the checkIfMonitorEnabled result. +// If the monitor is enabled, the runner is started. If the monitor is disabled, +// the runner is stopped if it is running. +// The checkIfMonitorEnabled is evaluated every tickerInterval duration to determine +// if the monitor should be started or stopped. +// tickerInterval is jittered to prevent all watchers from running at the same time. +// If the watcher is stopped, it will be restarted after the next checkIfMonitorEnabled evaluation. +func supervisorRunner(parentCtx context.Context, cfg supervisorRunnerConfig) error { + var ( + isRunning = false + runCtx context.Context + runCtxCancel context.CancelCauseFunc + wg sync.WaitGroup + mu sync.Mutex + ) + + getIsRunning := func() bool { + mu.Lock() + defer mu.Unlock() + return isRunning + } + + setIsRunning := func(s bool) { + mu.Lock() + defer mu.Unlock() + isRunning = s + } + + runRoutine := func(ctx context.Context, cancel context.CancelCauseFunc) { + defer func() { + wg.Done() + cancel(errShutdown) + setIsRunning(false) + }() + if err := cfg.runner(ctx); err != nil && !errors.Is(err, errShutdown) { + cfg.logger.WarnContext(ctx, "Runner failed", "error", err) + } + } + + jitterFunc := retryutils.NewHalfJitter() + t := cfg.clock.NewTimer(jitterFunc(cfg.tickerInterval)) + for { + switch enabled, err := cfg.checkIfMonitorEnabled(parentCtx); { + case err != nil: + cfg.logger.WarnContext(parentCtx, "Failed to check if authorized keys report is enabled", "error", err) + case enabled && !getIsRunning(): + runCtx, runCtxCancel = context.WithCancelCause(parentCtx) + setIsRunning(true) + wg.Add(1) + go runRoutine(runCtx, runCtxCancel) + case !enabled && getIsRunning(): + runCtxCancel(errShutdown) + // Wait for the runner to stop before checking if the monitor is enabled again. + wg.Wait() + } + + select { + case <-t.Chan(): + if !t.Stop() { + select { + case <-t.Chan(): + default: + } + } + t.Reset(jitterFunc(cfg.tickerInterval)) + case <-parentCtx.Done(): + return nil + } + } +} diff --git a/lib/secretsscanner/authorizedkeys/supervisor_test.go b/lib/secretsscanner/authorizedkeys/supervisor_test.go new file mode 100644 index 0000000000000..93399ec1fdc5b --- /dev/null +++ b/lib/secretsscanner/authorizedkeys/supervisor_test.go @@ -0,0 +1,135 @@ +/* + * Teleport + * Copyright (C) 2024 Gravitational, Inc. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package authorizedkeys + +import ( + "context" + "log/slog" + "sync" + "testing" + "time" + + "github.com/jonboulle/clockwork" + "github.com/stretchr/testify/require" + "golang.org/x/sync/errgroup" +) + +func TestSupervisorRunner(t *testing.T) { + // Create a mock clock + clock := clockwork.NewFakeClock() + + t.Run("runner starts and stops based on monitor state", func(t *testing.T) { + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + + var mu sync.Mutex + var running bool + + runner := func(ctx context.Context) error { + mu.Lock() + running = true + mu.Unlock() + <-ctx.Done() + mu.Lock() + running = false + mu.Unlock() + return nil + } + + checker, enable, disable := checkIfMonitorEnabled() + enable() + + cfg := supervisorRunnerConfig{ + clock: clock, + tickerInterval: 1 * time.Second, + runner: runner, + checkIfMonitorEnabled: checker, + logger: slog.Default(), + } + + g, ctx := errgroup.WithContext(ctx) + g.Go(func() error { + return supervisorRunner(ctx, cfg) + }) + + require.Eventually(t, func() bool { + mu.Lock() + defer mu.Unlock() + return running + }, 100*time.Millisecond, 10*time.Millisecond, "expected runner to start, but it did not") + + disable() + + clock.BlockUntil(1) + clock.Advance(2 * time.Second) + + require.Eventually(t, func() bool { + mu.Lock() + defer mu.Unlock() + return !running + }, 100*time.Millisecond, 10*time.Millisecond, "expected runner to stop, but it did not") + + enable() + clock.BlockUntil(1) + clock.Advance(2 * time.Second) + + require.Eventually(t, func() bool { + mu.Lock() + defer mu.Unlock() + return running + }, 100*time.Millisecond, 10*time.Millisecond, "expected runner to re-start, but it did not") + + disable() + clock.BlockUntil(1) + clock.Advance(2 * time.Second) + + require.Eventually(t, func() bool { + mu.Lock() + defer mu.Unlock() + return !running + }, 100*time.Millisecond, 10*time.Millisecond, "expected runner to re-stop, but it did not") + + // Cancel the context to stop the supervisor + cancel() + if err := g.Wait(); err != nil { + t.Fatal(err) + } + }) + +} + +func checkIfMonitorEnabled() (checker func(context.Context) (bool, error), enable func(), disable func()) { + var ( + enabled bool + mu sync.Mutex + ) + return func(ctx context.Context) (bool, error) { + mu.Lock() + defer mu.Unlock() + return enabled, nil + }, func() { + mu.Lock() + defer mu.Unlock() + enabled = true + }, func() { + mu.Lock() + defer mu.Unlock() + enabled = false + } +} diff --git a/lib/secretsscanner/reporter/env_test.go b/lib/secretsscanner/reporter/env_test.go index 04ffebb5c6711..734260c3c81af 100644 --- a/lib/secretsscanner/reporter/env_test.go +++ b/lib/secretsscanner/reporter/env_test.go @@ -43,6 +43,7 @@ type env struct { type opts struct { device *device + preAssertError error preReconcileError error } @@ -68,6 +69,12 @@ func withPreReconcileError(err error) option { } } +func withPreAssertError(err error) option { + return func(o *opts) { + o.preAssertError = err + } +} + func setup(t *testing.T, ops ...option) env { t.Helper() @@ -91,6 +98,7 @@ func setup(t *testing.T, ops ...option) env { svc := newServiceFake(dtFakeSvc.Service) svc.preReconcileError = o.preReconcileError + svc.preAssertError = o.preAssertError tlsConfig, err := fixtures.LocalTLSConfig() require.NoError(t, err) @@ -130,9 +138,13 @@ type serviceFake struct { privateKeysReported []*accessgraphsecretsv1pb.PrivateKey deviceTrustSvc *dttestenv.FakeDeviceService preReconcileError error + preAssertError error } func (s *serviceFake) ReportSecrets(in accessgraphsecretsv1pb.SecretsScannerService_ReportSecretsServer) error { + if s.preAssertError != nil { + return s.preAssertError + } // Step 1. Assert the device. if _, err := s.deviceTrustSvc.AssertDevice(in.Context(), streamAdapter{stream: in}); err != nil { return trace.Wrap(err) diff --git a/lib/secretsscanner/reporter/report.go b/lib/secretsscanner/reporter/report.go index 22dd8c22b9d3b..09e0bfe0ba9e3 100644 --- a/lib/secretsscanner/reporter/report.go +++ b/lib/secretsscanner/reporter/report.go @@ -138,7 +138,10 @@ func (r *Reporter) reportPrivateKeys(stream accessgraphsecretsv1pb.SecretsScanne Keys: privateKeys[start:end], }, }, - }); err != nil { + }); err != nil && !errors.Is(err, io.EOF) { + // [io.EOF] indicates that the server has closed the stream. + // The client should handle the underlying error on the subsequent Recv call. + // All other errors are client-side errors and should be returned. return trace.Wrap(err, "failed to send private keys") } } diff --git a/lib/secretsscanner/reporter/report_test.go b/lib/secretsscanner/reporter/report_test.go index 76c2d661cd116..afc63df273899 100644 --- a/lib/secretsscanner/reporter/report_test.go +++ b/lib/secretsscanner/reporter/report_test.go @@ -52,6 +52,7 @@ func TestReporter(t *testing.T) { tests := []struct { name string preReconcileError error + preAssertError error assertErr require.ErrorAssertionFunc report []*accessgraphsecretsv1pb.PrivateKey want []*accessgraphsecretsv1pb.PrivateKey @@ -62,6 +63,14 @@ func TestReporter(t *testing.T) { want: newPrivateKeys(t, deviceID), assertErr: require.NoError, }, + { + name: "pre-assert error", + preAssertError: errors.New("pre-assert error"), + report: newPrivateKeys(t, deviceID), + assertErr: func(t require.TestingT, err error, _ ...any) { + require.ErrorContains(t, err, "pre-assert error") + }, + }, { name: "pre-reconcile error", preReconcileError: errors.New("pre-reconcile error"), @@ -80,6 +89,7 @@ func TestReporter(t *testing.T) { t, withDevice(deviceID, device), withPreReconcileError(tt.preReconcileError), + withPreAssertError(tt.preAssertError), ) ctx := context.Background() diff --git a/lib/services/local/access_graph_test.go b/lib/services/local/access_graph_test.go index 2eda122f8c045..b2a56819195b1 100644 --- a/lib/services/local/access_graph_test.go +++ b/lib/services/local/access_graph_test.go @@ -55,21 +55,25 @@ func TestAccessGraphAuthorizedKeys(t *testing.T) { HostId: "host1", HostUser: "user1", KeyFingerprint: "AAAAB3NzaC1yc2EAAAADAQABAAABAQC...", + KeyType: "ssh-rsa", }, { HostId: "host1", HostUser: "user2", KeyFingerprint: "AAAAB3NzaC1yc2EAAAADAQABAAABAQC...", + KeyType: "ssh-rsa", }, { HostId: "host2", HostUser: "user1", KeyFingerprint: "AAAAB3NzaC1yc2EAAAADAQABAAABAQC...", + KeyType: "ssh-rsa", }, { HostId: "host2", HostUser: "user2", KeyFingerprint: "AAAAB3NzaC1yc2EAAAADAQABAAABAQC...", + KeyType: "ssh-rsa", }, } var authKeys []*accessgraphsecretspb.AuthorizedKey diff --git a/lib/srv/discovery/database_watcher.go b/lib/srv/discovery/database_watcher.go index c49b32f4eaeb5..c3ab1abb437bf 100644 --- a/lib/srv/discovery/database_watcher.go +++ b/lib/srv/discovery/database_watcher.go @@ -138,16 +138,17 @@ func (s *Server) getCurrentDatabases() map[string]types.Database { func (s *Server) onDatabaseCreate(ctx context.Context, database types.Database) error { s.Log.Debugf("Creating database %s.", database.GetName()) err := s.AccessPoint.CreateDatabase(ctx, database) - // If the database already exists but has an empty discovery group, update it. - if trace.IsAlreadyExists(err) && s.updatesEmptyDiscoveryGroup( - func() (types.ResourceWithLabels, error) { + // If the database already exists but has cloud origin and an empty + // discovery group, then update it. + if err != nil { + err := s.resolveCreateErr(err, types.OriginCloud, func() (types.ResourceWithLabels, error) { return s.AccessPoint.GetDatabase(ctx, database.GetName()) - }) { + }) + if err != nil { + return trace.Wrap(err) + } return trace.Wrap(s.onDatabaseUpdate(ctx, database, nil)) } - if err != nil { - return trace.Wrap(err) - } err = s.emitUsageEvents(map[string]*usageeventsv1.ResourceCreateEvent{ databaseEventPrefix + database.GetName(): { ResourceType: types.DiscoveredResourceDatabase, diff --git a/lib/srv/discovery/discovery.go b/lib/srv/discovery/discovery.go index 0e10172e6a3fa..0c6103895e641 100644 --- a/lib/srv/discovery/discovery.go +++ b/lib/srv/discovery/discovery.go @@ -1686,14 +1686,42 @@ func splitMatchers[T types.Matcher](matchers []T, matcherTypeCheck func(string) return } -func (s *Server) updatesEmptyDiscoveryGroup(getter func() (types.ResourceWithLabels, error)) bool { - if s.DiscoveryGroup == "" { - return false +func (s *Server) resolveCreateErr(createErr error, discoveryOrigin string, getter func() (types.ResourceWithLabels, error)) error { + // We can only resolve the error if we have a discovery group configured + // and the error is that the resource already exists. + if s.DiscoveryGroup == "" || !trace.IsAlreadyExists(createErr) { + return trace.Wrap(createErr) } + old, err := getter() if err != nil { - return false + return trace.NewAggregate(createErr, err) + } + + // Check that the registered resource origin matches the origin we want. + oldOrigin, err := types.GetOrigin(old) + if err != nil { + return trace.NewAggregate(createErr, err) + } + if oldOrigin != discoveryOrigin { + return trace.Wrap(createErr, + "not updating because the resource origin indicates that it is not managed by auto-discovery", + ) } + + // Check that the registered resource's discovery group is blank or matches + // this server's discovery group. + // We check if the old group is empty because that's a special case where + // the old/new groups don't match but we still want to update the resource. + // In this way, discovery agents with a discovery_group essentially claim + // the resources they discover that used to be (or currently are) discovered + // by an agent that did not have a discovery_group configured. oldDiscoveryGroup, _ := old.GetLabel(types.TeleportInternalDiscoveryGroupName) - return oldDiscoveryGroup == "" + if oldDiscoveryGroup != "" && oldDiscoveryGroup != s.DiscoveryGroup { + return trace.Wrap(createErr, + "not updating because the resource is in a different discovery group", + ) + } + + return nil } diff --git a/lib/srv/discovery/discovery_test.go b/lib/srv/discovery/discovery_test.go index 18c02109becf9..ce0e18db784a2 100644 --- a/lib/srv/discovery/discovery_test.go +++ b/lib/srv/discovery/discovery_test.go @@ -2793,12 +2793,7 @@ func TestGCPVMDiscovery(t *testing.T) { // TestServer_onCreate tests the update of the discovery_group of a resource // when a resource already exists with the same name but an empty discovery_group. func TestServer_onCreate(t *testing.T) { - _, awsRedshiftDB := makeRedshiftCluster(t, "aws-redshift", "us-east-1", "test") - _, awsRedshiftDBEmptyDiscoveryGroup := makeRedshiftCluster(t, "aws-redshift", "us-east-1", "" /* empty discovery group */) - accessPoint := &fakeAccessPoint{ - kube: mustConvertEKSToKubeCluster(t, eksMockClusters[0], "" /* empty discovery group */), - database: awsRedshiftDBEmptyDiscoveryGroup, - } + accessPoint := &fakeAccessPoint{} s := &Server{ Config: &Config{ DiscoveryGroup: "test-cluster", @@ -2808,31 +2803,106 @@ func TestServer_onCreate(t *testing.T) { } t.Run("onCreate update kube", func(t *testing.T) { + // With cloud origin and an empty discovery group, it should update. + accessPoint.kube = mustConvertEKSToKubeCluster(t, eksMockClusters[0], "" /* empty discovery group */) err := s.onKubeCreate(context.Background(), mustConvertEKSToKubeCluster(t, eksMockClusters[0], "test-cluster")) require.NoError(t, err) - require.True(t, accessPoint.updateKube) + require.True(t, accessPoint.updatedKube) + + // Reset the updated flag and set the registered kube cluster to have + // non-cloud origin. It should not update. + accessPoint.updatedKube = false + accessPoint.kube.SetOrigin(types.OriginDynamic) + err = s.onKubeCreate(context.Background(), mustConvertEKSToKubeCluster(t, eksMockClusters[0], "test-cluster")) + require.Error(t, err) + require.False(t, accessPoint.updatedKube) - // Reset the update flag. - accessPoint.updateKube = false + // Reset the updated flag and set the registered kube cluster to have + // an empty origin. It should not update. + accessPoint.updatedKube = false + accessPoint.kube.SetOrigin("") + err = s.onKubeCreate(context.Background(), mustConvertEKSToKubeCluster(t, eksMockClusters[0], "test-cluster")) + require.Error(t, err) + require.False(t, accessPoint.updatedKube) + + // Reset the update flag and set the registered kube cluster to have + // a non-empty discovery group. It should not update. + accessPoint.updatedKube = false accessPoint.kube = mustConvertEKSToKubeCluster(t, eksMockClusters[0], "nonEmpty") - // Update the kube cluster with non-empty discovery group. err = s.onKubeCreate(context.Background(), mustConvertEKSToKubeCluster(t, eksMockClusters[0], "test-cluster")) require.Error(t, err) - require.False(t, accessPoint.updateKube) + require.False(t, accessPoint.updatedKube) }) t.Run("onCreate update database", func(t *testing.T) { + _, awsRedshiftDB := makeRedshiftCluster(t, "aws-redshift", "us-east-1", "test") + _, awsRedshiftDBEmptyDiscoveryGroup := makeRedshiftCluster(t, "aws-redshift", "us-east-1", "" /* empty discovery group */) + + // With cloud origin and an empty discovery group, it should update. + accessPoint.database = awsRedshiftDBEmptyDiscoveryGroup err := s.onDatabaseCreate(context.Background(), awsRedshiftDB) require.NoError(t, err) - require.True(t, accessPoint.updateDatabase) + require.True(t, accessPoint.updatedDatabase) - // Reset the update flag. - accessPoint.updateDatabase = false + // Reset the updated flag and set the db to empty discovery group + // but non-cloud origin. It should not update. + accessPoint.updatedDatabase = false + accessPoint.database.SetOrigin(types.OriginDynamic) + err = s.onDatabaseCreate(context.Background(), awsRedshiftDB) + require.Error(t, err) + require.False(t, accessPoint.updatedDatabase) + + // Reset the updated flag and set the db to empty discovery group + // but empty origin. It should not update. + accessPoint.updatedDatabase = false + accessPoint.database.SetOrigin("") + err = s.onDatabaseCreate(context.Background(), awsRedshiftDB) + require.Error(t, err) + require.False(t, accessPoint.updatedDatabase) + + // Reset the updated flag and set the registered db to have a non-empty + // discovery group. It should not update. + accessPoint.updatedDatabase = false accessPoint.database = awsRedshiftDB - // Update the db with non-empty discovery group. err = s.onDatabaseCreate(context.Background(), awsRedshiftDB) require.Error(t, err) - require.False(t, accessPoint.updateDatabase) + require.False(t, accessPoint.updatedDatabase) + }) + + t.Run("onCreate update app", func(t *testing.T) { + kubeSvc := newMockKubeService("service1", "ns1", "", + map[string]string{"test-label": "testval"}, nil, + []corev1.ServicePort{{Port: 42, Name: "http", Protocol: corev1.ProtocolTCP}}) + + // With kube origin and empty discovery group, it should update. + accessPoint.app = mustConvertKubeServiceToApp(t, "" /*empty discovery group*/, "http", kubeSvc, kubeSvc.Spec.Ports[0]) + err := s.onAppCreate(context.Background(), mustConvertKubeServiceToApp(t, "notEmpty", "http", kubeSvc, kubeSvc.Spec.Ports[0])) + require.NoError(t, err) + require.True(t, accessPoint.updatedApp) + + // Reset the updated flag and set the app to empty discovery group + // but non-cloud origin. It should not update. + accessPoint.updatedApp = false + accessPoint.app.SetOrigin(types.OriginDynamic) + err = s.onAppCreate(context.Background(), mustConvertKubeServiceToApp(t, "notEmpty", "http", kubeSvc, kubeSvc.Spec.Ports[0])) + require.Error(t, err) + require.False(t, accessPoint.updatedApp) + + // Reset the updated flag and set the app to empty discovery group + // but non-cloud origin. It should not update. + accessPoint.updatedApp = false + accessPoint.app.SetOrigin("") + err = s.onAppCreate(context.Background(), mustConvertKubeServiceToApp(t, "notEmpty", "http", kubeSvc, kubeSvc.Spec.Ports[0])) + require.Error(t, err) + require.False(t, accessPoint.updatedApp) + + // Reset the updated flag and set the app to non-empty discovery group. + // It should not update. + accessPoint.updatedApp = false + accessPoint.app = mustConvertKubeServiceToApp(t, "nonEmpty", "http", kubeSvc, kubeSvc.Spec.Ports[0]) + err = s.onAppCreate(context.Background(), mustConvertKubeServiceToApp(t, "notEmpty", "http", kubeSvc, kubeSvc.Spec.Ports[0])) + require.Error(t, err) + require.False(t, accessPoint.updatedApp) }) } @@ -2931,10 +3001,12 @@ type fakeAccessPoint struct { ping func(context.Context) (proto.PingResponse, error) enrollEKSClusters func(context.Context, *integrationpb.EnrollEKSClustersRequest, ...grpc.CallOption) (*integrationpb.EnrollEKSClustersResponse, error) - updateKube bool - updateDatabase bool + updatedKube bool + updatedDatabase bool + updatedApp bool kube types.KubeCluster database types.Database + app types.Application upsertedServerInfos chan types.ServerInfo reports map[string][]discoveryconfig.Status } @@ -2981,7 +3053,7 @@ func (f *fakeAccessPoint) CreateDatabase(ctx context.Context, database types.Dat } func (f *fakeAccessPoint) UpdateDatabase(ctx context.Context, database types.Database) error { - f.updateDatabase = true + f.updatedDatabase = true return nil } @@ -2991,7 +3063,20 @@ func (f *fakeAccessPoint) CreateKubernetesCluster(ctx context.Context, cluster t // UpdateKubernetesCluster updates existing kubernetes cluster resource. func (f *fakeAccessPoint) UpdateKubernetesCluster(ctx context.Context, cluster types.KubeCluster) error { - f.updateKube = true + f.updatedKube = true + return nil +} + +func (f *fakeAccessPoint) GetApp(ctx context.Context, name string) (types.Application, error) { + return f.app, nil +} + +func (f *fakeAccessPoint) CreateApp(ctx context.Context, _ types.Application) error { + return trace.AlreadyExists("already exists") +} + +func (f *fakeAccessPoint) UpdateApp(ctx context.Context, _ types.Application) error { + f.updatedApp = true return nil } diff --git a/lib/srv/discovery/kube_services_watcher.go b/lib/srv/discovery/kube_services_watcher.go index 88b978f283cff..eb6d68cc964f7 100644 --- a/lib/srv/discovery/kube_services_watcher.go +++ b/lib/srv/discovery/kube_services_watcher.go @@ -122,11 +122,14 @@ func (s *Server) onAppCreate(ctx context.Context, app types.Application) error { // In this case, we need to update the resource with the // discovery group label to ensure the user doesn't have to manually delete // the resource. - if trace.IsAlreadyExists(err) { - return trace.Wrap(s.onAppUpdate(ctx, app, nil)) - } if err != nil { - return trace.Wrap(err) + err := s.resolveCreateErr(err, types.OriginDiscoveryKubernetes, func() (types.ResourceWithLabels, error) { + return s.AccessPoint.GetApp(ctx, app.GetName()) + }) + if err != nil { + return trace.Wrap(err) + } + return trace.Wrap(s.onAppUpdate(ctx, app, nil)) } err = s.emitUsageEvents(map[string]*usageeventsv1.ResourceCreateEvent{ appEventPrefix + app.GetName(): { diff --git a/lib/srv/discovery/kube_watcher.go b/lib/srv/discovery/kube_watcher.go index 58c61475c8f32..e18cc23e68c99 100644 --- a/lib/srv/discovery/kube_watcher.go +++ b/lib/srv/discovery/kube_watcher.go @@ -121,15 +121,15 @@ func (s *Server) onKubeCreate(ctx context.Context, kubeCluster types.KubeCluster s.Log.Debugf("Creating kube_cluster %s.", kubeCluster.GetName()) err := s.AccessPoint.CreateKubernetesCluster(ctx, kubeCluster) // If the kube already exists but has an empty discovery group, update it. - if trace.IsAlreadyExists(err) && s.updatesEmptyDiscoveryGroup( - func() (types.ResourceWithLabels, error) { + if err != nil { + err := s.resolveCreateErr(err, types.OriginCloud, func() (types.ResourceWithLabels, error) { return s.AccessPoint.GetKubernetesCluster(ctx, kubeCluster.GetName()) - }) { + }) + if err != nil { + return trace.Wrap(err) + } return trace.Wrap(s.onKubeUpdate(ctx, kubeCluster, nil)) } - if err != nil { - return trace.Wrap(err) - } err = s.emitUsageEvents(map[string]*usageeventsv1.ResourceCreateEvent{ kubeEventPrefix + kubeCluster.GetName(): { ResourceType: types.DiscoveredResourceKubernetes, diff --git a/lib/srv/regular/sshserver.go b/lib/srv/regular/sshserver.go index 301f1c1d6345f..9975612c12c3d 100644 --- a/lib/srv/regular/sshserver.go +++ b/lib/srv/regular/sshserver.go @@ -26,6 +26,7 @@ import ( "errors" "fmt" "io" + "log/slog" "maps" "net" "os" @@ -62,6 +63,7 @@ import ( "github.com/gravitational/teleport/lib/proxy" "github.com/gravitational/teleport/lib/reversetunnel" "github.com/gravitational/teleport/lib/reversetunnelclient" + authorizedkeysreporter "github.com/gravitational/teleport/lib/secretsscanner/authorizedkeys" "github.com/gravitational/teleport/lib/service/servicecfg" "github.com/gravitational/teleport/lib/services" "github.com/gravitational/teleport/lib/services/local" @@ -850,6 +852,12 @@ func New( } s.srv = server + if !s.proxyMode { + if err := s.startAuthorizedKeysManager(ctx, auth); err != nil { + log.WithError(err).Infof("Failed to start authorized keys manager.") + } + } + var heartbeatMode srv.HeartbeatMode if s.proxyMode { heartbeatMode = srv.HeartbeatModeProxy @@ -904,6 +912,31 @@ func (s *Server) tunnelWithAccessChecker(ctx *srv.ServerContext) (reversetunnelc return reversetunnelclient.NewTunnelWithRoles(s.proxyTun, clusterName.GetClusterName(), ctx.Identity.AccessChecker, s.proxyAccessPoint), nil } +// startAuthorizedKeysManager starts the authorized keys manager. +func (s *Server) startAuthorizedKeysManager(ctx context.Context, auth authclient.ClientI) error { + authorizedKeysWatcher, err := authorizedkeysreporter.NewWatcher( + ctx, + authorizedkeysreporter.WatcherConfig{ + Client: auth, + Logger: slog.Default(), + HostID: s.uuid, + Clock: s.clock, + }, + ) + if errors.Is(err, authorizedkeysreporter.ErrUnsupportedPlatform) { + return nil + } else if err != nil { + return trace.Wrap(err) + } + + go func() { + if err := authorizedKeysWatcher.Run(ctx); err != nil { + s.Warningf("Failed to start authorized keys watcher: %v", err) + } + }() + return nil +} + // Context returns server shutdown context func (s *Server) Context() context.Context { return s.ctx diff --git a/lib/tbot/config/config.go b/lib/tbot/config/config.go index 49d70b02dc181..59c99b863850a 100644 --- a/lib/tbot/config/config.go +++ b/lib/tbot/config/config.go @@ -625,6 +625,27 @@ func destinationFromURI(uriString string) (bot.Destination, error) { ) } return &DestinationMemory{}, nil + case "kubernetes-secret": + if uri.Host != "" { + return nil, trace.BadParameter( + "kubernetes-secret scheme should not be specified with host", + ) + } + if uri.Path == "" { + return nil, trace.BadParameter( + "kubernetes-secret scheme should have a path specified", + ) + } + // kubernetes-secret:///my-secret + // TODO(noah): Eventually we'll support namespace in the host part of + // the URI. For now, we'll default to the namespace tbot is running in. + + // Path will be prefixed with '/' so we'll strip it off. + secretName := strings.TrimPrefix(uri.Path, "/") + + return &DestinationKubernetesSecret{ + Name: secretName, + }, nil default: return nil, trace.BadParameter( "unrecognized data storage scheme", diff --git a/lib/tbot/config/config_test.go b/lib/tbot/config/config_test.go index c98e4a0cee227..123e1b6b6c8e3 100644 --- a/lib/tbot/config/config_test.go +++ b/lib/tbot/config/config_test.go @@ -198,6 +198,19 @@ func TestDestinationFromURI(t *testing.T) { in: "foobar://", wantErr: true, }, + { + in: "kubernetes-secret:///my-secret", + want: &DestinationKubernetesSecret{ + Name: "my-secret", + }, + }, + { + in: "kubernetes-secret://my-secret", + want: &DestinationKubernetesSecret{ + Name: "my-secret", + }, + wantErr: true, + }, } for _, tt := range tests { t.Run(tt.in, func(t *testing.T) { diff --git a/lib/teleterm/clusters/cluster_apps.go b/lib/teleterm/clusters/cluster_apps.go index 65f49e2ad377d..035b27a165862 100644 --- a/lib/teleterm/clusters/cluster_apps.go +++ b/lib/teleterm/clusters/cluster_apps.go @@ -169,6 +169,7 @@ func (c *Cluster) ReissueAppCert(ctx context.Context, clusterClient *client.Clus AWSRoleARN: "", AzureIdentity: "", GCPServiceAccount: "", + URI: app.GetURI(), } // TODO (Joerger): DELETE IN v17.0.0 diff --git a/lib/teleterm/daemon/daemon_test.go b/lib/teleterm/daemon/daemon_test.go index 4046043d805d0..827a9c13cba9c 100644 --- a/lib/teleterm/daemon/daemon_test.go +++ b/lib/teleterm/daemon/daemon_test.go @@ -581,7 +581,7 @@ func TestImportantModalSemaphore(t *testing.T) { } type mockTSHDEventsService struct { - *api.UnimplementedTshdEventsServiceServer + api.UnimplementedTshdEventsServiceServer reloginErr error reloginCount atomic.Uint32 sendNotificationCount atomic.Uint32 diff --git a/lib/tlsca/ca.go b/lib/tlsca/ca.go index 2b589e28e8874..19e04dc386d45 100644 --- a/lib/tlsca/ca.go +++ b/lib/tlsca/ca.go @@ -228,6 +228,9 @@ type RouteToApp struct { // GCPServiceAccount is the GCP service account to assume when accessing GCP API. GCPServiceAccount string + + // URI is the URI of the app. This is the internal endpoint where the application is running and isn't user-facing. + URI string } // RouteToDatabase contains routing information for databases. @@ -304,6 +307,7 @@ func (id *Identity) GetEventIdentity() events.Identity { AWSRoleARN: id.RouteToApp.AWSRoleARN, AzureIdentity: id.RouteToApp.AzureIdentity, GCPServiceAccount: id.RouteToApp.GCPServiceAccount, + URI: id.RouteToApp.URI, } } var routeToDatabase *events.RouteToDatabase diff --git a/lib/uds/cred_test.go b/lib/uds/cred_test.go index fa296ef847e70..d496758db3bbd 100644 --- a/lib/uds/cred_test.go +++ b/lib/uds/cred_test.go @@ -76,7 +76,7 @@ func TestGetCreds(t *testing.T) { } type service struct { - *machineidv1.UnimplementedBotServiceServer + machineidv1.UnimplementedBotServiceServer lastCalledCreds *Creds } diff --git a/lib/vnet/daemon/client_darwin.go b/lib/vnet/daemon/client_darwin.go index 3aa1e7320ad21..9c53d8a7ee580 100644 --- a/lib/vnet/daemon/client_darwin.go +++ b/lib/vnet/daemon/client_darwin.go @@ -19,11 +19,9 @@ package daemon -// #cgo CFLAGS: -Wall -xobjective-c -fblocks -fobjc-arc -mmacosx-version-min=10.15 -// #cgo LDFLAGS: -framework Foundation -framework ServiceManagement // #include // #include "client_darwin.h" -// #include "protocol_darwin.h" +// #include "common_darwin.h" import "C" import ( @@ -304,6 +302,28 @@ func startByCalling(ctx context.Context, bundlePath string, config Config) error return } + if errorDomain == nsCocoaErrorDomain && errorCode == errorCodeNSXPCConnectionInterrupted { + const clientNSXPCConnectionInterruptedDebugMsg = "The connection was interrupted when trying to " + + "reach the XPC service. If there's no clear error logs on the daemon side, it might mean that " + + "the client does not satisfy the code signing requirement enforced by the daemon. " + + "Start capturing logs in Console.app and repeat the scenario. Look for " + + "\"xpc_support_check_token: error: status: -67050\" in the logs to verify " + + "that the connection was interrupted due to the code signing requirement." + log.DebugContext(ctx, clientNSXPCConnectionInterruptedDebugMsg) + errC <- trace.Wrap(errXPCConnectionInterrupted) + return + } + + if errorDomain == vnetErrorDomain && errorCode == errorCodeMissingCodeSigningIdentifiers { + errC <- trace.Wrap(errMissingCodeSigningIdentifiers) + return + } + + if errorDomain == nsCocoaErrorDomain && errorCode == errorCodeNSXPCConnectionCodeSigningRequirementFailure { + errC <- trace.Wrap(errXPCConnectionCodeSigningRequirementFailure, "the daemon does not appear to be code signed correctly") + return + } + errC <- trace.Errorf("could not start VNet daemon: %v", C.GoString(res.error_description)) return } @@ -319,15 +339,6 @@ func startByCalling(ctx context.Context, bundlePath string, config Config) error } } -var ( - // vnetErrorDomain is a custom error domain used for Objective-C errors that pertain to VNet. - vnetErrorDomain = C.GoString(C.VNEErrorDomain) - // errorCodeAlreadyRunning is returned within [vnetErrorDomain] errors to indicate that the daemon - // received a message to start after it was already running. - errorCodeAlreadyRunning = int(C.VNEAlreadyRunningError) - errAlreadyRunning = errors.New("VNet is already running") -) - func sleepOrDone(ctx context.Context, d time.Duration) error { timer := time.NewTimer(d) defer timer.Stop() diff --git a/lib/vnet/daemon/client_darwin.h b/lib/vnet/daemon/client_darwin.h index a7f5e4c8bdb1c..e362c4add527b 100644 --- a/lib/vnet/daemon/client_darwin.h +++ b/lib/vnet/daemon/client_darwin.h @@ -2,7 +2,6 @@ #define TELEPORT_LIB_VNET_DAEMON_CLIENT_DARWIN_H_ #include "common_darwin.h" -#include "protocol_darwin.h" #import @@ -44,10 +43,15 @@ typedef struct StartVnetRequest { typedef struct StartVnetResult { bool ok; + // error_domain is either VNEErrorDomain, NSOSStatusErrorDomain, or NSCocoaErrorDomain. const char *error_domain; - // error_code is code taken from an NSError instance encountered during the call to StartVnet. - // If ok is false, error_code is greater than zero and identifies the reason behind the error. + // If error_domain is set to VNEErrorDomain, error_code is one of the VNE codes from common_darwin.h. + // If error_domain is NSOSStatusErrorDomain, error_code comes from OSStatus of Code Signing framework. + // https://developer.apple.com/documentation/security/1574088-code_signing_services_result_cod?language=objc + // If error_domain is NSCocoaErrorDomain, it's likely to be about XPC. It's best to inspect it + // on https://osstatus.com in that case. int error_code; + // error_description includes the full representation of the error, including domain and code. const char *error_description; } StartVnetResult; diff --git a/lib/vnet/daemon/client_darwin.m b/lib/vnet/daemon/client_darwin.m index d2fd9256ead73..b131926d04038 100644 --- a/lib/vnet/daemon/client_darwin.m +++ b/lib/vnet/daemon/client_darwin.m @@ -19,7 +19,6 @@ #include "client_darwin.h" #include "common_darwin.h" -#include "protocol_darwin.h" #import #import @@ -78,15 +77,17 @@ @interface VNEDaemonClient () @property(nonatomic, strong, readwrite) NSXPCConnection *connection; @property(nonatomic, strong, readonly) NSString *bundlePath; +@property(nonatomic, strong, readonly) NSString *codeSigningRequirement; @end @implementation VNEDaemonClient -- (id)initWithBundlePath:(NSString *)bundlePath { +- (id)initWithBundlePath:(NSString *)bundlePath codeSigningRequirement:(NSString *)codeSigningRequirement { self = [super init]; if (self) { _bundlePath = bundlePath; + _codeSigningRequirement = codeSigningRequirement; } return self; } @@ -102,6 +103,12 @@ - (NSXPCConnection *)connection { self->_connection = nil; }; + // The daemon won't even be started on macOS < 13.0, so we don't have to handle the else branch + // of this condition. + if (@available(macOS 13, *)) { + [_connection setCodeSigningRequirement:_codeSigningRequirement]; + } + // New connections always start in a suspended state. [_connection resume]; } @@ -134,7 +141,18 @@ - (void)invalidate { void StartVnet(StartVnetRequest *request, StartVnetResult *outResult) { if (!daemonClient) { - daemonClient = [[VNEDaemonClient alloc] initWithBundlePath:@(request->bundle_path)]; + NSString *requirement = nil; + NSError *error = nil; + bool ok = getCodeSigningRequirement(&requirement, &error); + if (!ok) { + outResult->ok = false; + outResult->error_domain = VNECopyNSString([error domain]); + outResult->error_code = (int)[error code]; + outResult->error_description = VNECopyNSString([error description]); + return; + } + + daemonClient = [[VNEDaemonClient alloc] initWithBundlePath:@(request->bundle_path) codeSigningRequirement:requirement]; } dispatch_semaphore_t sema = dispatch_semaphore_create(0); @@ -142,6 +160,7 @@ void StartVnet(StartVnetRequest *request, StartVnetResult *outResult) { [daemonClient startVnet:request->vnet_config completion:^(NSError *error) { if (error) { + outResult->ok = false; outResult->error_domain = VNECopyNSString([error domain]); outResult->error_code = (int)[error code]; outResult->error_description = VNECopyNSString([error description]); diff --git a/lib/vnet/daemon/common_darwin.go b/lib/vnet/daemon/common_darwin.go new file mode 100644 index 0000000000000..1daae730aa9a3 --- /dev/null +++ b/lib/vnet/daemon/common_darwin.go @@ -0,0 +1,57 @@ +// Teleport +// Copyright (C) 2024 Gravitational, Inc. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +//go:build vnetdaemon +// +build vnetdaemon + +package daemon + +// #cgo CFLAGS: -Wall -xobjective-c -fblocks -fobjc-arc -mmacosx-version-min=10.15 +// #cgo LDFLAGS: -framework Foundation -framework ServiceManagement +// #include "common_darwin.h" +import "C" + +import ( + "errors" +) + +var ( + // vnetErrorDomain is a custom error domain used for Objective-C errors that pertain to VNet. + vnetErrorDomain = C.GoString(C.VNEErrorDomain) + + // errorCodeAlreadyRunning is returned within [vnetErrorDomain] errors to indicate that the daemon + // received a message to start after it was already running. + errorCodeAlreadyRunning = int(C.VNEAlreadyRunningError) + errAlreadyRunning = errors.New("VNet is already running") + + // errorCodeMissingCodeSigningIdentifiers is returned within [vnetErrorDomain] Obj-C errors and + // transformed to [errMissingCodeSigningIdentifiers] in Go. + errorCodeMissingCodeSigningIdentifiers = int(C.VNEMissingCodeSigningIdentifiersError) + errMissingCodeSigningIdentifiers = errors.New("either identifier or team identifier is missing in code signing information; is the binary signed?") +) + +var ( + // nsCocoaErrorDomain is a generic error domain used in a lot of Apple's Cocoa frameworks. + nsCocoaErrorDomain = "NSCocoaErrorDomain" + + // https://developer.apple.com/documentation/foundation/1448136-nserror_codes/nsxpcconnectioninterrupted?changes=latest_major&language=objc + errorCodeNSXPCConnectionInterrupted = int(C.NSXPCConnectionInterrupted) + errXPCConnectionInterrupted = errors.New("XPC connection interrupted") + + // https://developer.apple.com/documentation/foundation/1448136-nserror_codes/nsxpcconnectioncodesigningrequirementfailure?language=objc + errorCodeNSXPCConnectionCodeSigningRequirementFailure = int(C.NSXPCConnectionCodeSigningRequirementFailure) + errXPCConnectionCodeSigningRequirementFailure = errors.New("code signing requirement failed") +) diff --git a/lib/vnet/daemon/common_darwin.h b/lib/vnet/daemon/common_darwin.h index f549ca1b8ef79..92c73b310f4b3 100644 --- a/lib/vnet/daemon/common_darwin.h +++ b/lib/vnet/daemon/common_darwin.h @@ -3,6 +3,35 @@ #import +// VNEErrorDomain is a custom error domain used for Objective-C errors that pertain to VNet. +extern const char* const VNEErrorDomain; + +// VNEAlreadyRunningError indicates that the daemon already received a VNet config. +// It won't accept a new one during its lifetime, instead it's expected to stop, after +// which the client might spawn a new instance of the daemon. +extern const int VNEAlreadyRunningError; +// VNEMissingCodeSigningIdentifiersError indicates that either the identifier or the team identifier are missing. +// This can happen if the binary is unsigned, see the docs for SecCodeCopySigningInformation. +// https://developer.apple.com/documentation/security/1395809-seccodecopysigninginformation?language=objc +extern const int VNEMissingCodeSigningIdentifiersError; + +typedef struct VnetConfig { + const char *socket_path; + const char *ipv6_prefix; + const char *dns_addr; + const char *home_path; +} VnetConfig; + +@protocol VNEDaemonProtocol +// startVnet passes the config back to Go code (which then starts VNet in a separate thread) +// and returns immediately. +// +// Only the first call to this method starts VNet. Subsequent calls return VNEAlreadyRunningError. +// The daemon process exits after VNet is stopped, after which it can be spawned again by calling +// this method. +- (void)startVnet:(VnetConfig *)vnetConfig completion:(void (^)(NSError *error))completion; +@end + // Returns the label for the daemon by getting the identifier of the bundle // this executable is shipped in and appending ".vnetd" to it. // @@ -16,4 +45,15 @@ NSString *DaemonLabel(NSString *bundlePath); // The caller is expected to free the returned pointer. const char *VNECopyNSString(NSString *val); +// getCodeSigningRequirement calculates the requirement that will be matched against +// the designated requirement of the app on the other side of an XPC connection. +// It does so based on the code signing information of the current binary, as it assumes that +// both the VNet client and the VNet daemon use the same binary. +// +// On success, it returns true and sets outRequirement. +// On error, it returns false and sets outError. Returns errors of VNEErrorDomain and +// NSOSStatusErrorDomain. Errors with the latter domain are likely to match Code Signing OSStatus values. +// https://developer.apple.com/documentation/security/1574088-code_signing_services_result_cod?language=objc +bool getCodeSigningRequirement(NSString **outRequirement, NSError **outError); + #endif /* TELEPORT_LIB_VNET_DAEMON_COMMON_DARWIN_H_ */ diff --git a/lib/vnet/daemon/common_darwin.m b/lib/vnet/daemon/common_darwin.m index 194ac7f0f0f2e..3a405209893f8 100644 --- a/lib/vnet/daemon/common_darwin.m +++ b/lib/vnet/daemon/common_darwin.m @@ -17,10 +17,17 @@ // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . +#import #import +#import #include +const char* const VNEErrorDomain = "com.Gravitational.Vnet.ErrorDomain"; + +const int VNEAlreadyRunningError = 1; +const int VNEMissingCodeSigningIdentifiersError = 2; + NSString *DaemonLabel(NSString *bundlePath) { NSBundle *main = [NSBundle bundleWithPath:bundlePath]; if (!main) { @@ -41,3 +48,73 @@ } return strdup(""); } + +bool getCodeSigningRequirement(NSString **outRequirement, NSError **outError) { + SecCodeRef codeObj = nil; + OSStatus status = SecCodeCopySelf(kSecCSDefaultFlags, &codeObj); + if (status != errSecSuccess) { + if (outError) { + *outError = [NSError errorWithDomain:NSOSStatusErrorDomain code:status userInfo:nil]; + } + return false; + } + + CFDictionaryRef cfCodeSignInfo = nil; + // kSecCSSigningInformation must be provided as a flag for the team identifier to be included + // in the returned dictionary. + status = SecCodeCopySigningInformation(codeObj, kSecCSSigningInformation, &cfCodeSignInfo); + // codeObj is no longer needed. Manually release it, as we own it since we got it from a function + // with "Copy" in its name. + // https://developer.apple.com/library/archive/documentation/CoreFoundation/Conceptual/CFMemoryMgmt/Concepts/Ownership.html#//apple_ref/doc/writerid/cfCreateRule + CFRelease(codeObj); + if (status != errSecSuccess) { + if (outError) { + *outError = [NSError errorWithDomain:NSOSStatusErrorDomain code:status userInfo:nil]; + } + return false; + } + + // Transfer ownership of cfCodeSignInfo to Obj-C, which means we don't have to CFRelease it manually. + // We can transfer the ownership of cfCodeSignInfo because we own it (we got it from a function + // with "Copy" in its name). + // https://developer.apple.com/documentation/foundation/1587932-cfbridgingrelease + NSDictionary *codeSignInfo = (NSDictionary *)CFBridgingRelease(cfCodeSignInfo); + // We don't own kSecCodeInfoIdentifier, so we cannot call CFBridgingRelease on it. + // __bridge transfers a pointer between Obj-C and CoreFoundation with no transfer of ownership. + // Values extracted out of codeSignInfo are cast to toll-free bridged Obj-C types. + // https://developer.apple.com/library/archive/documentation/CoreFoundation/Conceptual/CFDesignConcepts/Articles/tollFreeBridgedTypes.html#//apple_ref/doc/uid/TP40010677-SW2 + // https://stackoverflow.com/questions/18067108/when-should-you-use-bridge-vs-cfbridgingrelease-cfbridgingretain + NSString *identifier = codeSignInfo[(__bridge NSString *)kSecCodeInfoIdentifier]; + NSString *teamIdentifier = codeSignInfo[(__bridge NSString *)kSecCodeInfoTeamIdentifier]; + + if (!identifier || [identifier length] == 0 || !teamIdentifier || [teamIdentifier length] == 0) { + if (outError) { + *outError = [NSError errorWithDomain:@(VNEErrorDomain) code:VNEMissingCodeSigningIdentifiersError userInfo:nil]; + } + return false; + } + + // The requirement will be matched against the designated requirement of the application on + // the other side of an XPC connection. It is based on the designated requirement of tsh.app. + // To inspect the designated requirement of an app, use the following command: + // + // codesign --display -r - + // + // Breakdown of individual parts of the requirement: + // * `identifier "foo"` is satisfied if the code signing identifier matches the provided one. + // It is not the same as the bundle identifier. + // * `anchor apple generic` is satisfied by any code signed with any code signing identity issued + // by Apple. + // * `certificate leaf[field(bunch of specific numbers)]` is satisfied by code signed with + // Developer ID Application certs. + // * `certificate leaf[subject.OU]` is satisfied by certs with a specific Team ID. + // + // Read more at: + // https://developer.apple.com/documentation/technotes/tn3127-inside-code-signing-requirements#Designated-requirement + // https://developer.apple.com/documentation/technotes/tn3127-inside-code-signing-requirements#Xcode-designated-requirement-for-Developer-ID-code + if (outRequirement) { + *outRequirement = [NSString stringWithFormat:@"identifier \"%@\" and anchor apple generic and certificate leaf[field.1.2.840.113635.100.6.1.13] and certificate leaf[subject.OU] = %@", identifier, teamIdentifier]; + } + + return true; +} diff --git a/lib/vnet/daemon/protocol_darwin.h b/lib/vnet/daemon/protocol_darwin.h deleted file mode 100644 index d150bb99d37a4..0000000000000 --- a/lib/vnet/daemon/protocol_darwin.h +++ /dev/null @@ -1,31 +0,0 @@ -#ifndef TELEPORT_LIB_VNET_DAEMON_PROTOCOL_DARWIN_H_ -#define TELEPORT_LIB_VNET_DAEMON_PROTOCOL_DARWIN_H_ - -#import - -// VNEErrorDomain is a custom error domain used for Objective-C errors that pertain to VNet. -extern const char* const VNEErrorDomain; - -// VNEAlreadyRunningError indicates that the daemon already received a VNet config. -// It won't accept a new one during its lifetime, instead it's expected to stop, after -// which the client might spawn a new instance of the daemon. -extern const int VNEAlreadyRunningError; - -typedef struct VnetConfig { - const char *socket_path; - const char *ipv6_prefix; - const char *dns_addr; - const char *home_path; -} VnetConfig; - -@protocol VNEDaemonProtocol -// startVnet passes the config back to Go code (which then starts VNet in a separate thread) -// and returns immediately. -// -// Only the first call to this method starts VNet. Subsequent calls return VNEAlreadyRunningError. -// The daemon process exits after VNet is stopped, after which it can be spawned again by calling -// this method. -- (void)startVnet:(VnetConfig *)vnetConfig completion:(void (^)(NSError *error))completion; -@end - -#endif /* TELEPORT_LIB_VNET_DAEMON_PROTOCOL_DARWIN_H_ */ diff --git a/lib/vnet/daemon/protocol_darwin.m b/lib/vnet/daemon/protocol_darwin.m deleted file mode 100644 index f00e4948ef0c1..0000000000000 --- a/lib/vnet/daemon/protocol_darwin.m +++ /dev/null @@ -1,22 +0,0 @@ -//go:build vnetdaemon -// +build vnetdaemon - -// Teleport -// Copyright (C) 2024 Gravitational, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -const char* const VNEErrorDomain = "com.Gravitational.Vnet.ErrorDomain"; - -const int VNEAlreadyRunningError = 1; diff --git a/lib/vnet/daemon/service_darwin.go b/lib/vnet/daemon/service_darwin.go index cf996097efe3f..bd7db4096da06 100644 --- a/lib/vnet/daemon/service_darwin.go +++ b/lib/vnet/daemon/service_darwin.go @@ -19,8 +19,6 @@ package daemon -// #cgo CFLAGS: -Wall -xobjective-c -fblocks -fobjc-arc -mmacosx-version-min=10.15 -// #cgo LDFLAGS: -framework Foundation // #include // #include "service_darwin.h" import "C" @@ -47,7 +45,23 @@ func Start(ctx context.Context, workFn func(context.Context, Config) error) erro cBundlePath := C.CString(bundlePath) defer C.free(unsafe.Pointer(cBundlePath)) - C.DaemonStart(cBundlePath) + var result C.DaemonStartResult + defer func() { + C.free(unsafe.Pointer(result.error_domain)) + C.free(unsafe.Pointer(result.error_description)) + }() + C.DaemonStart(cBundlePath, &result) + if !result.ok { + errorDomain := C.GoString(result.error_domain) + errorCode := int(result.error_code) + + if errorDomain == vnetErrorDomain && errorCode == errorCodeMissingCodeSigningIdentifiers { + return trace.Wrap(errMissingCodeSigningIdentifiers) + } + + return trace.Errorf("could not start daemon: %s", C.GoString(result.error_description)) + } + defer func() { log.InfoContext(ctx, "Stopping daemon") C.DaemonStop() diff --git a/lib/vnet/daemon/service_darwin.h b/lib/vnet/daemon/service_darwin.h index 779c33585b8a4..fd39979eed25f 100644 --- a/lib/vnet/daemon/service_darwin.h +++ b/lib/vnet/daemon/service_darwin.h @@ -5,7 +5,7 @@ @interface VNEDaemonService : NSObject -- (id)initWithBundlePath:(NSString *)bundlePath; +- (id)initWithBundlePath:(NSString *)bundlePath codeSigningRequirement:(NSString *)codeSigningRequirement; // start begins listening for incoming XPC connections. - (void)start; @@ -19,9 +19,23 @@ @end +typedef struct DaemonStartResult { + bool ok; + // error_domain is set to either VNEErrorDomain or NSOSStatusErrorDomain if ok is false. + const char *error_domain; + // If error_domain is set to VNEErrorDomain, error_code is one of the VNE codes from common_darwin.h. + // If error_domain is NSOSStatusErrorDomain, error_code comes from OSStatus of Code Signing framework. + // https://developer.apple.com/documentation/security/1574088-code_signing_services_result_cod?language=objc + int error_code; + // error_description includes the full representation of the error, including domain and code. + const char *error_description; +} DaemonStartResult; + // DaemonStart initializes the XPC service and starts listening for new connections. // It's expected to be called only once, noop if the daemon was already started. -void DaemonStart(const char *bundle_path); +// It might fail if it runs into problems with Code Signing APIs while calucating the code signing +// requirement. In such case, outResult.ok is set to false and the error fields are populated. +void DaemonStart(const char *bundle_path, DaemonStartResult *outResult); // DaemonStop stops the XPC service. Noop if DaemonStart wasn't called. void DaemonStop(void); diff --git a/lib/vnet/daemon/service_darwin.m b/lib/vnet/daemon/service_darwin.m index 8258254eaf249..01b636f72fe6a 100644 --- a/lib/vnet/daemon/service_darwin.m +++ b/lib/vnet/daemon/service_darwin.m @@ -18,7 +18,6 @@ // along with this program. If not, see . #include "common_darwin.h" -#include "protocol_darwin.h" #include "service_darwin.h" #import @@ -44,14 +43,19 @@ @interface VNEDaemonService () @implementation VNEDaemonService -- (id)initWithBundlePath:(NSString *)bundlePath { +- (id)initWithBundlePath:(NSString *)bundlePath codeSigningRequirement:(NSString *)codeSigningRequirement { self = [super init]; if (self) { - // Launch daemons must configure their listener with the machServiceName - // initializer. + // Launch daemons must configure their listener with the machServiceName initializer. _listener = [[NSXPCListener alloc] initWithMachServiceName:DaemonLabel(bundlePath)]; _listener.delegate = self; + // The daemon won't even be started on macOS < 13.0, so we don't have to handle the else branch + // of this condition. + if (@available(macOS 13, *)) { + [_listener setConnectionCodeSigningRequirement:codeSigningRequirement]; + } + _started = NO; _gotVnetConfigSema = dispatch_semaphore_create(0); } @@ -126,12 +130,26 @@ - (BOOL)listener:(NSXPCListener *)listener static VNEDaemonService *daemonService = NULL; -void DaemonStart(const char *bundle_path) { +void DaemonStart(const char *bundle_path, DaemonStartResult *outResult) { if (daemonService) { + outResult->ok = true; + return; + } + + NSString *requirement = nil; + NSError *error = nil; + bool ok = getCodeSigningRequirement(&requirement, &error); + if (!ok) { + outResult->ok = false; + outResult->error_domain = VNECopyNSString([error domain]); + outResult->error_code = (int)[error code]; + outResult->error_description = VNECopyNSString([error description]); return; } - daemonService = [[VNEDaemonService alloc] initWithBundlePath:@(bundle_path)]; + + daemonService = [[VNEDaemonService alloc] initWithBundlePath:@(bundle_path) codeSigningRequirement:requirement]; [daemonService start]; + outResult->ok = true; } void DaemonStop(void) { diff --git a/lib/web/apiserver.go b/lib/web/apiserver.go index 1eb3d4502306e..8795226d2f284 100644 --- a/lib/web/apiserver.go +++ b/lib/web/apiserver.go @@ -1786,6 +1786,7 @@ func (h *Handler) githubLoginWeb(w http.ResponseWriter, r *http.Request, p httpr CreateWebSession: true, ClientRedirectURL: req.ClientRedirectURL, ClientLoginIP: remoteAddr, + ClientUserAgent: r.UserAgent(), }) if err != nil { logger.WithError(err).Error("Error creating auth request.") @@ -1883,6 +1884,9 @@ func (h *Handler) githubCallback(w http.ResponseWriter, r *http.Request, p httpr return client.LoginFailedRedirectURL } + if dwt := response.Session.GetDeviceWebToken(); dwt != nil { + logger.Debug("GitHub WebSession created with device web token") + } return res.ClientRedirectURL } diff --git a/lib/web/apps.go b/lib/web/apps.go index c2678c6e7821b..7366cdbed5135 100644 --- a/lib/web/apps.go +++ b/lib/web/apps.go @@ -29,17 +29,13 @@ import ( "github.com/gravitational/trace" "github.com/julienschmidt/httprouter" - "github.com/gravitational/teleport" apiclient "github.com/gravitational/teleport/api/client" "github.com/gravitational/teleport/api/client/proto" apidefaults "github.com/gravitational/teleport/api/defaults" "github.com/gravitational/teleport/api/types" - apievents "github.com/gravitational/teleport/api/types/events" wantypes "github.com/gravitational/teleport/lib/auth/webauthntypes" - "github.com/gravitational/teleport/lib/events" "github.com/gravitational/teleport/lib/httplib" "github.com/gravitational/teleport/lib/reversetunnelclient" - "github.com/gravitational/teleport/lib/tlsca" "github.com/gravitational/teleport/lib/utils" "github.com/gravitational/teleport/lib/web/app" "github.com/gravitational/teleport/lib/web/ui" @@ -260,58 +256,14 @@ func (h *Handler) createAppSession(w http.ResponseWriter, r *http.Request, p htt ClusterName: result.ClusterName, AWSRoleARN: req.AWSRole, MFAResponse: mfaProtoResponse, + AppName: result.App.GetName(), + URI: result.App.GetURI(), + ClientAddr: r.RemoteAddr, }) if err != nil { return nil, trace.Wrap(err) } - // Extract the identity of the user. - certificate, err := tlsca.ParseCertificatePEM(ws.GetTLSCert()) - if err != nil { - return nil, trace.Wrap(err) - } - identity, err := tlsca.FromSubject(certificate.Subject, certificate.NotAfter) - if err != nil { - return nil, trace.Wrap(err) - } - - userMetadata := identity.GetUserMetadata() - userMetadata.User = ws.GetUser() - userMetadata.AWSRoleARN = req.AWSRole - - // Now that the certificate has been issued, emit a "new session created" - // for all events associated with this certificate. - appSessionStartEvent := &apievents.AppSessionStart{ - Metadata: apievents.Metadata{ - Type: events.AppSessionStartEvent, - Code: events.AppSessionStartCode, - ClusterName: identity.RouteToApp.ClusterName, - }, - ServerMetadata: apievents.ServerMetadata{ - ServerVersion: teleport.Version, - ServerID: h.cfg.HostUUID, - ServerNamespace: apidefaults.Namespace, - }, - SessionMetadata: apievents.SessionMetadata{ - SessionID: identity.RouteToApp.SessionID, - WithMFA: identity.MFAVerified, - PrivateKeyPolicy: string(identity.PrivateKeyPolicy), - }, - UserMetadata: userMetadata, - ConnectionMetadata: apievents.ConnectionMetadata{ - RemoteAddr: r.RemoteAddr, - }, - PublicAddr: identity.RouteToApp.PublicAddr, - AppMetadata: apievents.AppMetadata{ - AppURI: result.App.GetURI(), - AppPublicAddr: result.App.GetPublicAddr(), - AppName: result.App.GetName(), - }, - } - if err := h.cfg.Emitter.EmitAuditEvent(h.cfg.Context, appSessionStartEvent); err != nil { - return nil, trace.Wrap(err) - } - return &CreateAppSessionResponse{ CookieValue: ws.GetName(), SubjectCookieValue: ws.GetBearerToken(), diff --git a/lib/web/integrations_awsoidc.go b/lib/web/integrations_awsoidc.go index cd70b482fa7ad..299d6844e4c29 100644 --- a/lib/web/integrations_awsoidc.go +++ b/lib/web/integrations_awsoidc.go @@ -369,6 +369,11 @@ func (h *Handler) awsOIDCConfigureAWSAppAccessIAM(w http.ResponseWriter, r *http func (h *Handler) awsOIDCConfigureEC2SSMIAM(w http.ResponseWriter, r *http.Request, p httprouter.Params) (any, error) { queryParams := r.URL.Query() + integrationName := queryParams.Get("integrationName") + if len(integrationName) == 0 { + return nil, trace.BadParameter("missing integrationName param") + } + role := queryParams.Get("role") if err := aws.IsValidIAMRoleName(role); err != nil { return nil, trace.BadParameter("invalid role %q", role) @@ -390,6 +395,11 @@ func (h *Handler) awsOIDCConfigureEC2SSMIAM(w http.ResponseWriter, r *http.Reque proxyPublicURL = "https://" + proxyPublicURL } + clusterName, err := h.GetProxyClient().GetDomainName(r.Context()) + if err != nil { + return nil, trace.Wrap(err) + } + // The script must execute the following command: // teleport integration configure ec2-ssm-iam argsList := []string{ @@ -398,6 +408,8 @@ func (h *Handler) awsOIDCConfigureEC2SSMIAM(w http.ResponseWriter, r *http.Reque fmt.Sprintf("--aws-region=%s", shsprintf.EscapeDefaultContext(region)), fmt.Sprintf("--ssm-document-name=%s", shsprintf.EscapeDefaultContext(ssmDocumentName)), fmt.Sprintf("--proxy-public-url=%s", shsprintf.EscapeDefaultContext(proxyPublicURL)), + fmt.Sprintf("--cluster=%s", shsprintf.EscapeDefaultContext(clusterName)), + fmt.Sprintf("--name=%s", shsprintf.EscapeDefaultContext(integrationName)), } script, err := oneoff.BuildScript(oneoff.OneOffScriptParams{ TeleportArgs: strings.Join(argsList, " "), diff --git a/lib/web/integrations_awsoidc_test.go b/lib/web/integrations_awsoidc_test.go index 41d01db465c7c..ec0b091f80438 100644 --- a/lib/web/integrations_awsoidc_test.go +++ b/lib/web/integrations_awsoidc_test.go @@ -284,30 +284,36 @@ func TestBuildEC2SSMIAMScript(t *testing.T) { { name: "valid", reqQuery: url.Values{ - "awsRegion": []string{"us-east-1"}, - "role": []string{"myRole"}, - "ssmDocument": []string{"TeleportDiscoveryInstallerTest"}, + "awsRegion": []string{"us-east-1"}, + "role": []string{"myRole"}, + "ssmDocument": []string{"TeleportDiscoveryInstallerTest"}, + "integrationName": []string{"my-integration"}, }, errCheck: require.NoError, expectedTeleportArgs: "integration configure ec2-ssm-iam " + "--role=myRole " + "--aws-region=us-east-1 " + "--ssm-document-name=TeleportDiscoveryInstallerTest " + - "--proxy-public-url=" + proxyPublicURL, + "--proxy-public-url=" + proxyPublicURL + " " + + "--cluster=localhost " + + "--name=my-integration", }, { name: "valid with symbols in role", reqQuery: url.Values{ - "awsRegion": []string{"us-east-1"}, - "role": []string{"Test+1=2,3.4@5-6_7"}, - "ssmDocument": []string{"TeleportDiscoveryInstallerTest"}, + "awsRegion": []string{"us-east-1"}, + "role": []string{"Test+1=2,3.4@5-6_7"}, + "ssmDocument": []string{"TeleportDiscoveryInstallerTest"}, + "integrationName": []string{"my-integration"}, }, errCheck: require.NoError, expectedTeleportArgs: "integration configure ec2-ssm-iam " + "--role=Test\\+1=2,3.4\\@5-6_7 " + "--aws-region=us-east-1 " + "--ssm-document-name=TeleportDiscoveryInstallerTest " + - "--proxy-public-url=" + proxyPublicURL, + "--proxy-public-url=" + proxyPublicURL + " " + + "--cluster=localhost " + + "--name=my-integration", }, { name: "missing aws-region", diff --git a/tool/tctl/common/auth_command.go b/tool/tctl/common/auth_command.go index 4e002ced36d34..413553f99894d 100644 --- a/tool/tctl/common/auth_command.go +++ b/tool/tctl/common/auth_command.go @@ -897,6 +897,7 @@ func (a *AuthCommand) generateUserKeys(ctx context.Context, clusterAPI certifica Name: a.appName, PublicAddr: server.GetApp().GetPublicAddr(), ClusterName: a.leafCluster, + URI: server.GetApp().GetURI(), } // TODO (Joerger): DELETE IN v17.0.0 diff --git a/tool/teleport/common/integration_configure.go b/tool/teleport/common/integration_configure.go index dab36f0a5f8b3..ca2296555e3cf 100644 --- a/tool/teleport/common/integration_configure.go +++ b/tool/teleport/common/integration_configure.go @@ -92,6 +92,8 @@ func onIntegrationConfEC2SSMIAM(ctx context.Context, params config.IntegrationCo IntegrationRole: params.RoleName, SSMDocumentName: params.SSMDocumentName, ProxyPublicURL: params.ProxyPublicURL, + ClusterName: params.ClusterName, + IntegrationName: params.IntegrationName, } return trace.Wrap(awsoidc.ConfigureEC2SSM(ctx, awsClt, confReq)) } diff --git a/tool/teleport/common/teleport.go b/tool/teleport/common/teleport.go index 02f846853e697..b139f8cff3080 100644 --- a/tool/teleport/common/teleport.go +++ b/tool/teleport/common/teleport.go @@ -484,6 +484,8 @@ func Run(options Options) (app *kingpin.Application, executedCommand string, con integrationConfEC2SSMCmd.Flag("ssm-document-name", "The AWS SSM Document name to create that will be used to install teleport.").Required().StringVar(&ccf.IntegrationConfEC2SSMIAMArguments.SSMDocumentName) integrationConfEC2SSMCmd.Flag("proxy-public-url", "Proxy Public URL (eg https://mytenant.teleport.sh).").StringVar(&ccf. IntegrationConfEC2SSMIAMArguments.ProxyPublicURL) + integrationConfEC2SSMCmd.Flag("cluster", "Teleport Cluster's name.").Required().StringVar(&ccf.IntegrationConfEC2SSMIAMArguments.ClusterName) + integrationConfEC2SSMCmd.Flag("name", "Integration name.").Required().StringVar(&ccf.IntegrationConfEC2SSMIAMArguments.IntegrationName) integrationConfAWSAppAccessCmd := integrationConfigureCmd.Command("aws-app-access-iam", "Adds required IAM permissions to connect to AWS using App Access.") integrationConfAWSAppAccessCmd.Flag("role", "The AWS Role name used by the AWS OIDC Integration.").Required().StringVar(&ccf.IntegrationConfAWSAppAccessIAMArguments.RoleName) diff --git a/tool/tsh/common/app.go b/tool/tsh/common/app.go index e54c5c792dc83..c041431c22819 100644 --- a/tool/tsh/common/app.go +++ b/tool/tsh/common/app.go @@ -345,6 +345,7 @@ func onAppConfig(cf *CLIConf) error { AWSRoleARN: app.AWSRoleARN, AzureIdentity: app.AzureIdentity, GCPServiceAccount: app.GCPServiceAccount, + URI: app.GetURI(), } conf, err := formatAppConfig(tc, profile, routeToApp, cf.Format) if err != nil { @@ -528,6 +529,7 @@ func getAppInfo(cf *CLIConf, tc *client.TeleportClient, matchRouteToApp func(tls Name: app.GetName(), PublicAddr: app.GetPublicAddr(), ClusterName: tc.SiteName, + URI: app.GetURI(), }, app: app, } @@ -655,5 +657,6 @@ func tlscaRouteToAppToProto(route tlsca.RouteToApp) proto.RouteToApp { AWSRoleARN: route.AWSRoleARN, AzureIdentity: route.AzureIdentity, GCPServiceAccount: route.GCPServiceAccount, + URI: route.URI, } } diff --git a/tool/tsh/common/app_test.go b/tool/tsh/common/app_test.go index 72b13180c59f9..7ffe458a7ba87 100644 --- a/tool/tsh/common/app_test.go +++ b/tool/tsh/common/app_test.go @@ -37,10 +37,12 @@ import ( "github.com/gravitational/teleport/api/client/proto" "github.com/gravitational/teleport/api/constants" "github.com/gravitational/teleport/api/types" + apievents "github.com/gravitational/teleport/api/types/events" "github.com/gravitational/teleport/lib" "github.com/gravitational/teleport/lib/asciitable" "github.com/gravitational/teleport/lib/auth/mocku2f" "github.com/gravitational/teleport/lib/client" + "github.com/gravitational/teleport/lib/events" "github.com/gravitational/teleport/lib/service/servicecfg" testserver "github.com/gravitational/teleport/tool/teleport/testenv" ) @@ -261,6 +263,26 @@ func TestAppCommands(t *testing.T) { assert.Equal(t, http.StatusOK, resp.StatusCode) assert.Equal(t, app.name, resp.Header.Get("Server")) + // Verify that the app.session.start event was emitted. + if app.cluster == "root" { + require.EventuallyWithT(t, func(t *assert.CollectT) { + now := time.Now() + ctx := context.Background() + es, _, err := rootAuthServer.SearchEvents(ctx, events.SearchEventsRequest{ + From: now.Add(-time.Hour), + To: now.Add(time.Hour), + Order: types.EventOrderDescending, + EventTypes: []string{events.AppSessionStartEvent}, + }) + assert.NoError(t, err) + + for _, e := range es { + assert.Equal(t, e.(*apievents.AppSessionStart).AppName, app.name) + return + } + t.Errorf("failed to find AppSessionStartCode event (0/%d events matched)", len(es)) + }, 5*time.Second, 500*time.Millisecond) + } // app logout. err = Run(ctx, []string{ "app", diff --git a/tool/tsh/common/tsh.go b/tool/tsh/common/tsh.go index 215b043c6c732..a984861bd810d 100644 --- a/tool/tsh/common/tsh.go +++ b/tool/tsh/common/tsh.go @@ -31,7 +31,7 @@ import ( "os" "os/exec" "os/signal" - "path" + "path/filepath" "regexp" "runtime" "runtime/pprof" @@ -596,7 +596,7 @@ func Main() { // lets see: if the executable name is 'ssh' or 'scp' we convert // that to "tsh ssh" or "tsh scp" - switch path.Base(os.Args[0]) { + switch filepath.Base(os.Args[0]) { case "ssh": cmdLine = append([]string{"ssh"}, cmdLineOrig...) case "scp": @@ -5172,10 +5172,10 @@ func serializeEnvironment(profile *client.ProfileStatus, format string) (string, func setEnvFlags(cf *CLIConf) { // these can only be set with env vars. if homeDir := os.Getenv(types.HomeEnvVar); homeDir != "" { - cf.HomePath = path.Clean(homeDir) + cf.HomePath = filepath.Clean(homeDir) } if configPath := os.Getenv(globalTshConfigEnvVar); configPath != "" { - cf.GlobalTshConfigPath = path.Clean(configPath) + cf.GlobalTshConfigPath = filepath.Clean(configPath) } // prioritize CLI input for the rest. diff --git a/tool/tsh/common/vnet_common.go b/tool/tsh/common/vnet_common.go index 6dae51fc692d1..80f03eaa3c536 100644 --- a/tool/tsh/common/vnet_common.go +++ b/tool/tsh/common/vnet_common.go @@ -177,6 +177,7 @@ func (p *vnetAppProvider) reissueAppCert(ctx context.Context, tc *client.Telepor Name: app.GetName(), PublicAddr: app.GetPublicAddr(), ClusterName: tc.SiteName, + URI: app.GetURI(), } profile, err := tc.ProfileStatus() diff --git a/web/packages/design/src/Button/__snapshots__/buttons.story.test.tsx.snap b/web/packages/design/src/Button/__snapshots__/buttons.story.test.tsx.snap index b3e27d29c76c0..54ff29733c228 100644 --- a/web/packages/design/src/Button/__snapshots__/buttons.story.test.tsx.snap +++ b/web/packages/design/src/Button/__snapshots__/buttons.story.test.tsx.snap @@ -1856,6 +1856,7 @@ exports[`buttons 1`] = ` display: block; height: 40px; font-size: 16px; + font-weight: 300; padding: 0 16px; outline: none; width: 100%; diff --git a/web/packages/design/src/CardError/CardError.jsx b/web/packages/design/src/CardError/CardError.jsx index 994d9fd4edfa2..0443d9ba83325 100644 --- a/web/packages/design/src/CardError/CardError.jsx +++ b/web/packages/design/src/CardError/CardError.jsx @@ -20,7 +20,7 @@ import React from 'react'; import PropTypes from 'prop-types'; import styled from 'styled-components'; -import { Text, Alert, Card, H1 } from 'design'; +import { Alert, Card, H1, P1 } from 'design'; export default function CardError(props) { return ( @@ -77,13 +77,7 @@ export const Failed = ({ message, ...rest }) => ( export const Offline = ({ message, title }) => (
{title}
- - {message} - - } - /> + {message}} />
); @@ -98,9 +92,9 @@ export const LoginFailed = ({ message, loginUrl }) => ( + Please attempt to log in again. - + } /> @@ -117,9 +111,9 @@ export const LogoutFailed = ({ message, loginUrl }) => ( + Return to login. - + } /> diff --git a/web/packages/design/src/DataTable/DataTable.story.tsx b/web/packages/design/src/DataTable/DataTable.story.tsx index 12d126a241c9f..585c5fa77ea13 100644 --- a/web/packages/design/src/DataTable/DataTable.story.tsx +++ b/web/packages/design/src/DataTable/DataTable.story.tsx @@ -147,6 +147,13 @@ export const DefaultBasicEmpty = () => { return {...props} />; }; +export const EmptyWithHint = () => { + const props = getDefaultProps(); + props.data = []; + props.emptyHint = 'Gimme some data'; + return {...props} />; +}; + // state.pagination table view with fetching props export const ClientSidePagination = () => { const [allData, setAllData] = useState(data); diff --git a/web/packages/design/src/DataTable/Pager/PageIndicatorText.tsx b/web/packages/design/src/DataTable/Pager/PageIndicatorText.tsx index 3a8c73aa738dd..c0d39004116ae 100644 --- a/web/packages/design/src/DataTable/Pager/PageIndicatorText.tsx +++ b/web/packages/design/src/DataTable/Pager/PageIndicatorText.tsx @@ -35,12 +35,10 @@ export function PageIndicatorText({ return ( Showing {from} - {to} of{' '} diff --git a/web/packages/design/src/DataTable/StyledTable.tsx b/web/packages/design/src/DataTable/StyledTable.tsx index 4995206f2e4b5..eea4ef0069499 100644 --- a/web/packages/design/src/DataTable/StyledTable.tsx +++ b/web/packages/design/src/DataTable/StyledTable.tsx @@ -52,7 +52,8 @@ export const StyledTable = styled.table` & > thead > tr > th { color: ${props => props.theme.colors.text.main}; - ${props => props.theme.typography.h6}; + ${props => props.theme.typography.h3}; + line-height: 24px; cursor: pointer; padding-bottom: 0; padding-top: 0; diff --git a/web/packages/design/src/DataTable/Table.tsx b/web/packages/design/src/DataTable/Table.tsx index ddeafcf65fd1e..493e36fcaf419 100644 --- a/web/packages/design/src/DataTable/Table.tsx +++ b/web/packages/design/src/DataTable/Table.tsx @@ -18,7 +18,7 @@ import React from 'react'; -import { Box, Flex, Indicator, Text } from 'design'; +import { Box, Flex, Indicator, P1, Text } from 'design'; import * as Icons from 'design/Icon'; import { StyledTable, StyledPanel } from './StyledTable'; @@ -392,16 +392,7 @@ const EmptyIndicator = ({ - {emptyHint && ( - - {emptyHint} - - )} + {emptyHint && {emptyHint}} {emptyButton} diff --git a/web/packages/design/src/Input/Input.tsx b/web/packages/design/src/Input/Input.tsx index f4e66cf180471..c92564a4f2e21 100644 --- a/web/packages/design/src/Input/Input.tsx +++ b/web/packages/design/src/Input/Input.tsx @@ -55,6 +55,7 @@ const Input = styled.input` display: block; height: 40px; font-size: 16px; + font-weight: 300; padding: 0 16px; outline: none; width: 100%; diff --git a/web/packages/design/src/LabelInput/LabelInput.tsx b/web/packages/design/src/LabelInput/LabelInput.tsx index a0bbdaecd4141..5151f4d4df4f5 100644 --- a/web/packages/design/src/LabelInput/LabelInput.tsx +++ b/web/packages/design/src/LabelInput/LabelInput.tsx @@ -34,6 +34,7 @@ const LabelInput = styled.label` font-size: ${p => p.theme.fontSizes[1]}px; width: 100%; margin-bottom: ${props => props.theme.space[1]}px; + ${props => props.theme.typography.body3} ${space} `; diff --git a/web/packages/design/src/ResourceIcon/ResourceIcon.story.tsx b/web/packages/design/src/ResourceIcon/ResourceIcon.story.tsx index e7435b87001a7..c6fbb88276d2d 100644 --- a/web/packages/design/src/ResourceIcon/ResourceIcon.story.tsx +++ b/web/packages/design/src/ResourceIcon/ResourceIcon.story.tsx @@ -62,7 +62,7 @@ const IconBox: React.FC> = ({ {children} - + {text} diff --git a/web/packages/design/src/SVGIcon/SvgIcon.story.tsx b/web/packages/design/src/SVGIcon/SvgIcon.story.tsx index 9fac1ffcab654..f420ef57eedb5 100644 --- a/web/packages/design/src/SVGIcon/SvgIcon.story.tsx +++ b/web/packages/design/src/SVGIcon/SvgIcon.story.tsx @@ -71,7 +71,7 @@ const IconBox = ({ children, text }) => { {children} - + {text} diff --git a/web/packages/design/src/StepSlider/StepHeader.tsx b/web/packages/design/src/StepSlider/StepHeader.tsx index 564ae16ba858c..005e00d9deb4e 100644 --- a/web/packages/design/src/StepSlider/StepHeader.tsx +++ b/web/packages/design/src/StepSlider/StepHeader.tsx @@ -37,7 +37,7 @@ export function StepHeader({ return ( {flowLength > 1 && ( - + Step {stepIndex + 1} of {flowLength} )} diff --git a/web/packages/design/src/Text/Text.story.jsx b/web/packages/design/src/Text/Text.story.tsx similarity index 52% rename from web/packages/design/src/Text/Text.story.jsx rename to web/packages/design/src/Text/Text.story.tsx index feee02d056a10..fa3ff2abed2a5 100644 --- a/web/packages/design/src/Text/Text.story.jsx +++ b/web/packages/design/src/Text/Text.story.tsx @@ -18,9 +18,9 @@ import React from 'react'; -import Text, { H1 } from '../Text'; +import Box from 'design/Box'; -import { H2 } from './Text'; +import Text, { H1, H2, H3, H4, P1, P2 } from '.'; export default { title: 'Design/Text', @@ -30,26 +30,14 @@ export const FontSizes = () => ( <>

H1 Heading

H2 Heading

- - h3 - - - h4 - - - h5 - - - h6 - +

H3 Heading

+

H4 Heading

); export const FontAttributes = () => ( <> - - Hello Regular - + Hello Regular Hello Bold @@ -74,3 +62,36 @@ export const Alignments = () => ( Hello Right ); + +export const Paragraphs = () => ( + <> + + + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod + tempor incididunt ut labore et dolore magna aliqua. + + + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod + tempor incididunt ut labore et dolore magna aliqua. + + + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod + tempor incididunt ut labore et dolore magna aliqua. + + + + + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod + tempor incididunt ut labore et dolore magna aliqua. + + + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod + tempor incididunt ut labore et dolore magna aliqua. + + + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod + tempor incididunt ut labore et dolore magna aliqua. + + + +); diff --git a/web/packages/design/src/Text/Text.tsx b/web/packages/design/src/Text/Text.tsx index 85198cb0860ae..f5401f07e960f 100644 --- a/web/packages/design/src/Text/Text.tsx +++ b/web/packages/design/src/Text/Text.tsx @@ -79,12 +79,86 @@ export const H1 = (props: TextProps) => ( ); +/** Subtitle for heading level 1. Renders as a paragraph. */ +export const Subtitle1 = (props: TextProps) => ( + +); + /** - * H2 heading. Example usage: side panel titles, dialog titles. + * H2 heading. Example usage: dialog titles, dialog-like side panel titles. * - * Do not use where `h1` typography is used only to make the text bigger (i.e. + * Do not use where `h2` typography is used only to make the text bigger (i.e. * there's no following content that is logically tied to the heading). */ export const H2 = (props: TextProps) => ( ); + +/** Subtitle for heading level 2. Renders as a paragraph. */ +export const Subtitle2 = (props: TextProps) => ( + +); + +/** + * H3 heading. Example usage: explanatory side panel titles, resource enrollment + * step boxes. + * + * Do not use where `h3` typography is used only to make the text stand out more + * (i.e. there's no following content that is logically tied to the heading). + */ +export const H3 = (props: TextProps) => ( + +); + +/** Subtitle for heading level 3. Renders as a paragraph. */ +export const Subtitle3 = (props: TextProps) => ( + +); + +/** + * H4 heading. + * + * Do not use where `h4` typography is used only to make the text stand out more + * (i.e. there's no following content that is logically tied to the heading). + */ +export const H4 = (props: TextProps) => ( + +); + +/** + * A paragraph. Use for text consisting of actual sentences. Applies + * inter-paragraph spacing if grouped with other paragraphs, but doesn't apply + * typography. Use directly when typography is expected to be set by the parent + * component; prefer {@link P1}, {@link P2}, {@link P3} otherwise. + */ +export const P = styled(Text).attrs({ as: 'p' })` + p + & { + margin-top: ${props => props.theme.space[3]}px; + // Allow overriding. + ${space} + } +`; + +/** + * A {@link P} that uses `body1` typography. Applies inter-paragraph spacing if + * grouped with other paragraphs. + */ +export const P1 = (props: TextProps) => ( + +); + +/** + * A {@link P} that uses `body2` typography. Applies inter-paragraph spacing if + * grouped with other paragraphs. + */ +export const P2 = (props: TextProps) => ( + +); + +/** + * A {@link P} that uses `body3` typography. Applies inter-paragraph spacing if + * grouped with other paragraphs. + */ +export const P3 = (props: TextProps) => ( + +); diff --git a/web/packages/design/src/Text/index.ts b/web/packages/design/src/Text/index.ts index b3cb1447423c2..d4c1d1a1bbaf6 100644 --- a/web/packages/design/src/Text/index.ts +++ b/web/packages/design/src/Text/index.ts @@ -17,5 +17,16 @@ */ import Text from './Text'; -export { H1, H2 } from './Text'; +export { + H1, + H2, + H3, + H4, + P1, + P2, + P3, + Subtitle1, + Subtitle2, + Subtitle3, +} from './Text'; export default Text; diff --git a/web/packages/design/src/ThemeProvider/globals.js b/web/packages/design/src/ThemeProvider/globals.js index 7f3de31e2065c..e2bb9f0fe0a65 100644 --- a/web/packages/design/src/ThemeProvider/globals.js +++ b/web/packages/design/src/ThemeProvider/globals.js @@ -23,7 +23,7 @@ const GlobalStyle = createGlobalStyle` html { font-family: ${props => props.theme.font}; - ${props => props.theme.typography.body1}; + ${props => props.theme.typography.body2}; } body { diff --git a/web/packages/design/src/index.ts b/web/packages/design/src/index.ts index fbfa4b629b3d5..72c312f635899 100644 --- a/web/packages/design/src/index.ts +++ b/web/packages/design/src/index.ts @@ -40,7 +40,18 @@ import LabelState from './LabelState'; import Link from './Link'; import { Mark } from './Mark'; import Image from './Image'; -import Text, { H1, H2 } from './Text'; +import Text, { + H1, + H2, + H3, + H4, + P1, + P2, + P3, + Subtitle1, + Subtitle2, + Subtitle3, +} from './Text'; import SideNav, { SideNavItem } from './SideNav'; import { StepSlider } from './StepSlider'; import TopNav from './TopNav'; @@ -57,14 +68,14 @@ export { Alert, Box, Button, + ButtonBorder, ButtonIcon, ButtonLink, - ButtonBorder, ButtonPrimary, ButtonSecondary, + ButtonText, ButtonWarning, ButtonWithMenu, - ButtonText, Card, CardSuccess, CardSuccessLogin, @@ -72,27 +83,35 @@ export { Flex, H1, H2, + H3, + H4, + Image, Indicator, Input, Label, LabelInput, LabelState, - Mark, Link, + Mark, + Menu, + MenuItem, + MenuItemIcon, + P1, + P2, + P3, Pill, Popover, - Image, ResourceIcon, SideNav, SideNavItem, StepSlider, + Subtitle1, + Subtitle2, + Subtitle3, Text, - TopNav, - Menu, - MenuItem, - MenuItemIcon, TextArea, Toggle, + TopNav, }; export type { TextAreaProps } from './TextArea'; export * from './keyframes'; diff --git a/web/packages/design/src/theme/themeColors.story.tsx b/web/packages/design/src/theme/themeColors.story.tsx index 12b693c97824c..498e6b10154fe 100644 --- a/web/packages/design/src/theme/themeColors.story.tsx +++ b/web/packages/design/src/theme/themeColors.story.tsx @@ -191,7 +191,7 @@ const ColorsComponent = () => { Primary - + Primary @@ -216,10 +216,7 @@ const ColorsComponent = () => { Secondary - + Secondary @@ -244,7 +241,7 @@ const ColorsComponent = () => { Placeholder - + Placeholder @@ -269,7 +266,7 @@ const ColorsComponent = () => { Disabled - + Disabled @@ -296,10 +293,7 @@ const ColorsComponent = () => { Primary Inverse - + Primary Inverse diff --git a/web/packages/design/src/theme/typography.story.jsx b/web/packages/design/src/theme/typography.story.jsx index 0fcf3d7df08de..e5eb0a08a5da7 100644 --- a/web/packages/design/src/theme/typography.story.jsx +++ b/web/packages/design/src/theme/typography.story.jsx @@ -83,24 +83,6 @@ const Specs = () => ( {typography.h4.fontWeight} - - - H5 - - - {typography.h5.fontSize}/{typography.h5.lineHeight} - - {typography.h5.fontWeight} - - - - H6 - - - {typography.h6.fontSize}/{typography.h6.lineHeight} - - {typography.h6.fontWeight} - Body1 @@ -119,24 +101,6 @@ const Specs = () => ( {typography.body2.fontWeight} - - - Paragraph - - - {typography.paragraph.fontSize}/{typography.paragraph.lineHeight} - - {typography.paragraph.fontWeight} - - - - Paragraph2 - - - {typography.paragraph2.fontSize}/{typography.paragraph2.lineHeight} - - {typography.paragraph2.fontWeight} - SubTitle1 @@ -155,6 +119,15 @@ const Specs = () => ( {typography.subtitle2.fontWeight} + + + subtitle3 + + + {typography.subtitle3.fontSize}/{typography.subtitle3.lineHeight} + + {typography.subtitle3.fontWeight} +
@@ -205,22 +178,6 @@ const Example = () => ( {sample} - - - H5 - - - {sample} - - - - - H6 - - - {sample} - - Body1 @@ -239,34 +196,26 @@ const Example = () => ( - Paragraph - - - {sample} - - - - - Paragraph2 + SubTitle1 - {sample} + {sample} - SubTitle1 + subtitle2 - {sample} + {sample} - subtitle2 + subtitle3 - {sample} + {sample} diff --git a/web/packages/design/src/theme/typography.ts b/web/packages/design/src/theme/typography.ts index 1c34a662e200d..6a882e7c52b16 100644 --- a/web/packages/design/src/theme/typography.ts +++ b/web/packages/design/src/theme/typography.ts @@ -26,6 +26,31 @@ export const fontSizes = [10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 34]; export const fontWeights = { light, regular, bold }; const typography = { + body1: { + fontSize: '16px', + fontWeight: light, + lineHeight: '24px', + letterSpacing: '0.08px', + }, + body2: { + fontSize: '14px', + fontWeight: light, + lineHeight: '24px', + letterSpacing: '0.035px', + }, + body3: { + fontSize: '12px', + fontWeight: regular, + lineHeight: '20px', + letterSpacing: '0.015px', + }, + body4: { + fontSize: '10px', + fontWeight: regular, + lineHeight: '16px', + letterSpacing: '0.013px', + }, + /** * Don't use directly, prefer the `H1` component except for text that doesn't * introduce document structure. @@ -44,60 +69,39 @@ const typography = { fontSize: '18px', lineHeight: '24px', }, + /** + * Don't use directly, prefer the `H3` component except for text that doesn't + * introduce document structure. + */ h3: { - fontWeight: 300, - fontSize: '22px', - lineHeight: '32px', - }, - h4: { - fontWeight: regular, - fontSize: '18px', - lineHeight: '32px', - }, - h5: { - fontWeight: regular, - fontSize: '16px', - lineHeight: '24px', - }, - h6: { fontWeight: bold, fontSize: '14px', - lineHeight: '24px', - }, - body1: { - fontWeight: regular, - fontSize: '14px', - lineHeight: '24px', - }, - body2: { - fontWeight: regular, - fontSize: '12px', - lineHeight: '16px', - }, - paragraph: { - fontWeight: light, - fontSize: '16px', - lineHeight: '32px', + lineHeight: '20px', }, - paragraph2: { - fontWeight: light, + h4: { + fontWeight: medium, fontSize: '12px', - lineHeight: '24px', + lineHeight: '20px', + letterSpacing: '0.03px', + textTransform: 'uppercase', }, subtitle1: { + fontSize: '16px', fontWeight: regular, - fontSize: '14px', lineHeight: '24px', + letterSpacing: '0.024px', }, subtitle2: { - fontWeight: bold, - fontSize: '10px', - lineHeight: '16px', + fontSize: '14px', + fontWeight: regular, + lineHeight: '20px', + letterSpacing: '0.014px', }, subtitle3: { - fontSize: '10px', - fontWeight: regular, - lineHeight: '14px', + fontSize: '12px', + fontWeight: bold, + lineHeight: '20px', + letterSpacing: '0.012px', }, table: { fontWeight: light, @@ -110,26 +114,6 @@ const typography = { fontSize: '14px', lineHeight: '20px', }, - - // TODO(bl-nero): Migrate everything to the new typography. - newBody1: { - fontSize: '16px', - fontWeight: light, - lineHeight: '24px', - letterSpacing: '0.08px', - }, - newBody2: { - fontSize: '14px', - fontWeight: light, - lineHeight: '20px', - letterSpacing: '0.035px', - }, - newBody3: { - fontSize: '12px', - fontWeight: regular, - lineHeight: '20px', - letterSpacing: '0.015px', - }, }; export default typography; diff --git a/web/packages/shared/components/AccessRequests/NewRequest/RequestCheckout/AdditionalOptions.tsx b/web/packages/shared/components/AccessRequests/NewRequest/RequestCheckout/AdditionalOptions.tsx index bf26e184b4439..a3dbbe8662afd 100644 --- a/web/packages/shared/components/AccessRequests/NewRequest/RequestCheckout/AdditionalOptions.tsx +++ b/web/packages/shared/components/AccessRequests/NewRequest/RequestCheckout/AdditionalOptions.tsx @@ -54,7 +54,7 @@ export function AdditionalOptions({ border-color: ${props => props.theme.colors.spotBackground[1]}; `} > - + Additional Options ({ {createAttempt.status === 'success' ? ( <> - +

Resources Requested Successfully

- + You've successfully requested {numRequestedResources}{' '} {pluralize(numRequestedResources, 'resource')} - +
@@ -489,7 +491,7 @@ function ResourceRequestRoles({ Roles - + {selectedRoles.length} role{selectedRoles.length !== 1 ? 's' : ''}{' '} selected @@ -551,10 +553,10 @@ function ResourceRequestRoles({ `} > - + Modifying this role set may disable access to some of the above resources. Use with caution. - + )}
diff --git a/web/packages/shared/components/AccessRequests/NewRequest/RequestCheckout/SelectReviewers.tsx b/web/packages/shared/components/AccessRequests/NewRequest/RequestCheckout/SelectReviewers.tsx index bfd6d0d4ee9a4..7444ae7997de8 100644 --- a/web/packages/shared/components/AccessRequests/NewRequest/RequestCheckout/SelectReviewers.tsx +++ b/web/packages/shared/components/AccessRequests/NewRequest/RequestCheckout/SelectReviewers.tsx @@ -201,7 +201,7 @@ function Reviewers({ `} > props.theme.colors.spotBackground[1]}; `} > - - + + Reviewers (optional)
Reviewers (optional)
@@ -1265,11 +1277,11 @@ exports[`failed state 1`] = ` Start Date
Immediately
Access Duration
Request Reason