From d9c645d4141e242995620ccda4e1c698f58552c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=C5=82=20Cie=C5=9Blak?= Date: Mon, 29 Jul 2024 16:09:08 +0200 Subject: [PATCH 01/28] VNet daemon: Set code signing requirements (#44639) * Move Go error definitions to common_darwin.go Both client_darwin.go and serivce_darwin.go are going to use them, so it doesn't make sense to keep them in either of those files or scattered across them. * Roll protocol_darwin into common_darwin There's little need for those two files to be kept separate. * Add function for getting code signing requirement Both the client and the daemon are going to set a requirement towards each other, hence why this function is in common. * Set code signing requirement towards daemon client * Set code signing requirement towards daemon service * Add info about mdfind to README * Keep #cgo declarations in a single file * Fix typos * Move const to where it's used --- build.assets/macos/tshdev/README.md | 9 ++++ lib/vnet/daemon/client_darwin.go | 35 ++++++++----- lib/vnet/daemon/client_darwin.h | 10 ++-- lib/vnet/daemon/client_darwin.m | 25 ++++++++-- lib/vnet/daemon/common_darwin.go | 57 +++++++++++++++++++++ lib/vnet/daemon/common_darwin.h | 40 +++++++++++++++ lib/vnet/daemon/common_darwin.m | 77 +++++++++++++++++++++++++++++ lib/vnet/daemon/protocol_darwin.h | 31 ------------ lib/vnet/daemon/protocol_darwin.m | 22 --------- lib/vnet/daemon/service_darwin.go | 20 ++++++-- lib/vnet/daemon/service_darwin.h | 18 ++++++- lib/vnet/daemon/service_darwin.m | 30 ++++++++--- 12 files changed, 292 insertions(+), 82 deletions(-) create mode 100644 lib/vnet/daemon/common_darwin.go delete mode 100644 lib/vnet/daemon/protocol_darwin.h delete mode 100644 lib/vnet/daemon/protocol_darwin.m 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/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) { From be520a30e92d1f91da78736b0b457f276d802dc1 Mon Sep 17 00:00:00 2001 From: Alan Parra Date: Mon, 29 Jul 2024 12:05:34 -0300 Subject: [PATCH 02/28] chore: Bump google.golang.org/grpc/cmd/protoc-gen-go-grpc to v1.5.0 (#44739) * chore: Bump google.golang.org/grpc/cmd/protoc-gen-go-grpc to v1.5.0 * Update generated protos * Fix various Unimplemented{Service}Server pointer embeds --- api/client/client_test.go | 4 +- api/client/joinservice_test.go | 2 +- api/client/proxy/client_test.go | 7 +- .../accessgraph/v1/secrets_service_grpc.pb.go | 141 +++----- .../v1/accesslist_service_grpc.pb.go | 25 +- ...access_monitoring_rules_service_grpc.pb.go | 25 +- .../teleport/auditlog/v1/auditlog_grpc.pb.go | 69 ++-- .../v1/clusterconfig_service_grpc.pb.go | 25 +- .../v1/crownjewel_service_grpc.pb.go | 25 +- .../dbobject/v1/dbobject_service_grpc.pb.go | 25 +- .../v1/dbobjectimportrule_service_grpc.pb.go | 25 +- .../v1/devicetrust_service_grpc.pb.go | 199 +++-------- .../v1/discoveryconfig_service_grpc.pb.go | 25 +- .../externalauditstorage_service_grpc.pb.go | 25 +- .../integration/v1/awsoidc_service_grpc.pb.go | 25 +- .../v1/integration_service_grpc.pb.go | 25 +- .../teleport/kube/v1/kube_service_grpc.pb.go | 25 +- .../kubewaitingcontainer_service_grpc.pb.go | 25 +- .../loginrule/v1/loginrule_service_grpc.pb.go | 25 +- .../v1/bot_instance_service_grpc.pb.go | 25 +- .../machineid/v1/bot_service_grpc.pb.go | 25 +- .../v1/workload_identity_service_grpc.pb.go | 25 +- .../v1/notifications_service_grpc.pb.go | 25 +- .../teleport/okta/v1/okta_service_grpc.pb.go | 25 +- .../plugins/v1/plugin_service_grpc.pb.go | 25 +- .../teleport/presence/v1/service_grpc.pb.go | 25 +- .../v1/resourceusage_service_grpc.pb.go | 25 +- .../go/teleport/samlidp/v1/samlidp_grpc.pb.go | 25 +- .../teleport/scim/v1/scim_service_grpc.pb.go | 25 +- .../v1/secreports_service_grpc.pb.go | 25 +- .../transport/v1/transport_service_grpc.pb.go | 141 +++----- .../trust/v1/trust_service_grpc.pb.go | 25 +- .../v1/userloginstate_service_grpc.pb.go | 25 +- .../users/v1/users_service_grpc.pb.go | 25 +- .../vnet/v1/vnet_config_service_grpc.pb.go | 25 +- .../v1/userpreferences_grpc.pb.go | 25 +- .../v1alpha/access_graph_service_grpc.pb.go | 321 ++++-------------- .../lib/teleterm/v1/service_grpc.pb.go | 127 +++---- .../v1/tshd_events_service_grpc.pb.go | 25 +- .../teleterm/vnet/v1/vnet_service_grpc.pb.go | 25 +- go.mod | 2 +- go.sum | 4 +- integration/proxy/teleterm_test.go | 2 +- integrations/event-handler/go.mod | 2 +- integrations/event-handler/go.sum | 4 +- integrations/terraform/go.mod | 2 +- integrations/terraform/go.sum | 4 +- lib/joinserver/joinserver.go | 2 +- lib/multiplexer/test/ping_grpc.pb.go | 25 +- lib/teleterm/daemon/daemon_test.go | 2 +- lib/uds/cred_test.go | 2 +- 51 files changed, 853 insertions(+), 984 deletions(-) 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/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/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/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..db3c63d92fa03 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 diff --git a/go.sum b/go.sum index 0e0887041f210..c520cbf0a5d58 100644 --- a/go.sum +++ b/go.sum @@ -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/go.mod b/integrations/event-handler/go.mod index 11fd3836b122a..de23220d86396 100644 --- a/integrations/event-handler/go.mod +++ b/integrations/event-handler/go.mod @@ -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..2cc5589fab8c0 100644 --- a/integrations/event-handler/go.sum +++ b/integrations/event-handler/go.sum @@ -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/terraform/go.mod b/integrations/terraform/go.mod index 878a662ab28c7..a1c00dbbe59e2 100644 --- a/integrations/terraform/go.mod +++ b/integrations/terraform/go.mod @@ -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..9928b0f40cfb0 100644 --- a/integrations/terraform/go.sum +++ b/integrations/terraform/go.sum @@ -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/joinserver/joinserver.go b/lib/joinserver/joinserver.go index 1fee288d99fae..5e56bd39e9c84 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 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/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/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 } From 50b60de063dcc3713c2fe9cd1c1a27e30694cf76 Mon Sep 17 00:00:00 2001 From: Yassine Bounekhla <56373201+rudream@users.noreply.github.com> Date: Mon, 29 Jul 2024 11:13:33 -0400 Subject: [PATCH 03/28] emit app.session.start when creating an app session (#43636) --- api/client/proto/authservice.pb.go | 2070 +++++++++-------- .../legacy/client/proto/authservice.proto | 8 + .../teleport/legacy/types/events/events.proto | 2 + api/types/events/events.pb.go | 1674 ++++++------- .../teleport/legacy/types/events/events.proto | 2 + lib/auth/auth.go | 3 + lib/auth/auth_with_roles.go | 3 + lib/auth/authclient/clt.go | 2 + lib/auth/sessions.go | 48 + lib/teleterm/clusters/cluster_apps.go | 1 + lib/tlsca/ca.go | 4 + lib/web/apps.go | 54 +- tool/tctl/common/auth_command.go | 1 + tool/tsh/common/app.go | 3 + tool/tsh/common/app_test.go | 22 + tool/tsh/common/vnet_common.go | 1 + 16 files changed, 2104 insertions(+), 1794 deletions(-) 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/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/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/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/lib/auth/auth.go b/lib/auth/auth.go index 6403a31d06650..9c22caf7b9201 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, diff --git a/lib/auth/auth_with_roles.go b/lib/auth/auth_with_roles.go index 83bcd6099d310..f311a81ae9f5e 100644 --- a/lib/auth/auth_with_roles.go +++ b/lib/auth/auth_with_roles.go @@ -3209,6 +3209,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 +3294,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, 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/sessions.go b/lib/auth/sessions.go index 65c7abe66f7ec..90db17ed44e7d 100644 --- a/lib/auth/sessions.go +++ b/lib/auth/sessions.go @@ -31,10 +31,12 @@ import ( apidefaults "github.com/gravitational/teleport/api/defaults" 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" + "github.com/gravitational/teleport/lib/events" "github.com/gravitational/teleport/lib/jwt" "github.com/gravitational/teleport/lib/modules" "github.com/gravitational/teleport/lib/services" @@ -307,6 +309,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 +375,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 { @@ -478,6 +490,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/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/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/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/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/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/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() From 965c98d29c5c357dd536b020adccfff189c0a487 Mon Sep 17 00:00:00 2001 From: Bartosz Leper Date: Mon, 29 Jul 2024 17:53:45 +0200 Subject: [PATCH 04/28] Implement new typography (H3, H4 header levels; paragraphs, body styles) (#44502) * Finalize switch to the new typography Implements H3 and beyond, new subitiles, new text body styles, and paragraphs. * Update snapshots * Change the resource enrollment workflow headings to H1 * Minor tweaks - Set body2 line height to 24px - Set input font weight to 300 - Correct the typography of small text in a couple of places * Update snapshots * Fix ResourceIcon story --- e | 2 +- .../__snapshots__/buttons.story.test.tsx.snap | 1 + .../design/src/CardError/CardError.jsx | 18 +- .../design/src/DataTable/DataTable.story.tsx | 7 + .../src/DataTable/Pager/PageIndicatorText.tsx | 4 +- .../design/src/DataTable/StyledTable.tsx | 3 +- web/packages/design/src/DataTable/Table.tsx | 13 +- web/packages/design/src/Input/Input.tsx | 1 + .../design/src/LabelInput/LabelInput.tsx | 1 + .../src/ResourceIcon/ResourceIcon.story.tsx | 2 +- .../design/src/SVGIcon/SvgIcon.story.tsx | 2 +- .../design/src/StepSlider/StepHeader.tsx | 2 +- .../Text/{Text.story.jsx => Text.story.tsx} | 55 +- web/packages/design/src/Text/Text.tsx | 78 +- web/packages/design/src/Text/index.ts | 13 +- .../design/src/ThemeProvider/globals.js | 2 +- web/packages/design/src/index.ts | 37 +- .../design/src/theme/themeColors.story.tsx | 16 +- .../design/src/theme/typography.story.jsx | 81 +- web/packages/design/src/theme/typography.ts | 106 +- .../RequestCheckout/AdditionalOptions.tsx | 2 +- .../RequestCheckout/RequestCheckout.tsx | 14 +- .../RequestCheckout/SelectReviewers.tsx | 6 +- .../RequestCheckout.story.test.tsx.snap | 412 ++++---- .../ResourceList.story.test.tsx.snap | 16 +- .../RequestList/RequestList.tsx | 4 +- .../RequestDelete/RequestDelete.tsx | 12 +- .../RequestDelete.story.test.tsx.snap | 261 ++--- .../RequestReview/RequestReview.tsx | 6 +- .../RequestReview.story.test.tsx.snap | 20 +- .../RequestView/RequestView.tsx | 86 +- .../RequestView.story.test.tsx.snap | 915 +++++++++--------- .../AdvancedSearchToggle.tsx | 28 +- .../AwsLaunchButton/AwsLaunchButton.tsx | 2 +- .../FieldCheckbox/FieldCheckbox.tsx | 4 +- .../__snapshots__/FieldInput.test.tsx.snap | 5 + .../FileList/FileListItem.tsx | 4 +- .../FileTransferStateless.tsx | 3 +- .../UploadForm/UploadForm.tsx | 6 +- .../__snapshots__/FormPassword.test.tsx.snap | 18 + .../components/Notification/Notification.tsx | 2 +- .../components/ToolTip/HoverTooltip.tsx | 2 +- .../CardsView/ResourceCard.tsx | 8 +- .../LockedAccessRequests.tsx | 8 +- .../AccessRequests.story.test.tsx.snap | 13 +- web/packages/teleport/src/Account/Account.tsx | 7 +- web/packages/teleport/src/Account/Header.tsx | 6 +- .../wizards/AddAuthDeviceWizard.tsx | 7 +- .../__snapshots__/Audit.story.test.tsx.snap | 14 +- .../src/AuthConnectors/AuthConnectors.tsx | 20 +- .../ConnectorList/ConnectorList.tsx | 2 +- .../DeleteConnectorDialog.tsx | 6 +- .../styles/AuthConnectors.styles.ts | 4 +- .../teleport/src/Bots/Add/AddBotsPicker.tsx | 6 +- web/packages/teleport/src/Bots/DeleteBot.tsx | 6 +- .../Clusters.story.test.tsx.snap | 1 + .../DocumentNodes.story.test.tsx.snap | 15 +- .../teleport/src/Console/Tabs/Tabs.tsx | 8 +- .../__snapshots__/Tabs.story.test.tsx.snap | 2 - .../src/DesktopSession/WarningDropdown.tsx | 6 +- .../src/DeviceTrust/DeviceTrustLocked.tsx | 8 +- .../CreateAppAccess/CreateAppAccess.tsx | 14 +- .../SetupAccess/SetupAccess.tsx | 8 +- .../TestConnection/TestConnection.tsx | 50 +- .../SetupConnect/SetupConnect.tsx | 38 +- .../TestConnection/TestConnection.tsx | 22 +- .../CreateDatabase/CreateDatabase.tsx | 9 +- .../CreateDatabase/CreateDatabaseDialog.tsx | 6 +- .../DeployService/AutoDeploy/AutoDeploy.tsx | 28 +- .../AutoDeploy/SelectSecurityGroups.tsx | 8 +- .../ManualDeploy/ManualDeploy.tsx | 6 +- .../EnrollRdsDatabase/EnrollRdsDatabase.tsx | 14 +- .../Discover/Database/IamPolicy/IamPolicy.tsx | 16 +- .../Database/SetupAccess/SetupAccess.tsx | 6 +- .../TestConnection/TestConnection.tsx | 44 +- .../teleport/src/Discover/Database/common.tsx | 17 +- .../EnrollEKSCluster/ManualHelmDialog.tsx | 21 +- .../Kubernetes/HelmChart/HelmChart.tsx | 32 +- .../TestConnection/TestConnection.tsx | 22 +- .../SelectResource/SelectResource.tsx | 8 +- .../SelectResource.story.test.tsx.snap | 283 +++--- .../Server/CreateEc2Ice/CreateEc2Ice.tsx | 6 +- .../DiscoveryConfigSsm/DiscoveryConfigSsm.tsx | 70 +- .../Server/DownloadScript/DownloadScript.tsx | 7 +- .../Server/TestConnection/TestConnection.tsx | 18 +- .../SelfHostedAutoDiscoverDirections.tsx | 50 +- .../Discover/Shared/Aws/ConfigureIamPerms.tsx | 13 +- .../ConnectionDiagnosticResult.tsx | 25 +- .../teleport/src/Discover/Shared/Header.tsx | 6 +- .../teleport/src/Discover/Shared/HintBox.tsx | 1 + .../LabelsCreater/LabelsCreater.story.tsx | 15 + .../Shared/LabelsCreater/LabelsCreater.tsx | 2 +- .../Shared/SetupAccess/SetupAccessWrapper.tsx | 7 +- .../Enroll/MachineIDIntegrationSection.tsx | 8 +- .../src/Integrations/Enroll/common.tsx | 7 +- .../Integrations/RemoveIntegrationDialog.tsx | 6 +- .../src/Kubes/ConnectDialog/ConnectDialog.tsx | 6 +- .../ConnectDialog.story.test.tsx.snap | 18 +- .../src/LocksV2/Locks/DeleteLockDialogue.tsx | 10 +- .../teleport/src/LocksV2/Locks/Locks.tsx | 11 +- .../NewLock/LockCheckout/LockCheckout.tsx | 5 +- .../teleport/src/Login/Login.story.tsx | 9 + web/packages/teleport/src/Login/Motd/Motd.tsx | 2 +- .../__snapshots__/LoginFailed.test.tsx.snap | 56 +- .../__snapshots__/Nodes.story.test.tsx.snap | 30 +- .../src/Notifications/Notification.tsx | 10 +- .../Recordings.story.test.tsx.snap | 1 + .../src/Roles/DeleteRole/DeleteRole.tsx | 8 +- web/packages/teleport/src/Roles/Roles.tsx | 16 +- .../Sessions/SessionList/SessionJoinBtn.tsx | 8 +- .../Sessions.story.test.tsx.snap | 39 +- web/packages/teleport/src/Support/Support.tsx | 6 +- .../__snapshots__/Support.story.test.tsx.snap | 75 +- .../ClusterSelector/ClusterSelector.tsx | 4 +- .../DeleteTrust/DeleteTrust.tsx | 6 +- .../src/TrustedClusters/TrustedClusters.tsx | 24 +- .../TrustedList/TrustedListItem.tsx | 2 +- .../src/Users/UserAddEdit/TraitsEditor.tsx | 2 +- .../__snapshots__/Users.story.test.tsx.snap | 13 +- .../teleport/src/Welcome/CardWelcome.tsx | 6 +- .../src/Welcome/NewCredentials/Expired.tsx | 10 +- .../NewCredentials.story.test.tsx.snap | 39 +- .../src/components/FormLogin/FormLogin.tsx | 10 +- .../FormLogin.story.test.tsx.snap | 61 +- .../RemoveDialog/RemoveDialog.tsx | 8 +- .../NewMfaDeviceForm/NewMfaDeviceForm.tsx | 2 +- .../ReAuthenticate.story.test.tsx.snap | 8 + .../RecoveryCodes.story.test.tsx.snap | 32 +- .../ResourceEditor/ResourceEditor.jsx | 12 +- .../src/components/SelectFilters/Pager.tsx | 4 +- .../src/components/TabIcon/TabIcon.tsx | 13 +- .../ClusterLogin/ClusterLogin.story.tsx | 11 + .../ClusterLogin/FormLogin/FormLogin.tsx | 8 +- .../FormPasswordless/FormPasswordless.tsx | 5 +- .../FormLogin/FormSso/SsoButtons.tsx | 4 +- .../src/ui/ClusterLogout/ClusterLogout.tsx | 14 +- .../DocumentGatewayCliClient.tsx | 2 +- .../src/ui/DocumentTerminal/Reconnect.tsx | 4 +- .../ui/Documents/KeyboardShortcutsPanel.tsx | 2 +- .../ui/DocumentsReopen/DocumentsReopen.tsx | 13 +- .../HeadlessPrompt/HeadlessPrompt.tsx | 13 +- .../ChangeAccessRequestKind.tsx | 18 +- .../modals/ReAuthenticate/ReAuthenticate.tsx | 2 +- .../ModalsHost/modals/UsageData/UsageData.tsx | 18 +- .../src/ui/Search/ResourceSearchErrors.tsx | 2 +- .../src/ui/Search/pickers/ActionPicker.tsx | 38 +- .../src/ui/Search/pickers/ParameterPicker.tsx | 8 +- web/packages/teleterm/src/ui/Tabs/Tabs.tsx | 2 +- .../teleterm/src/ui/ThemeProvider/globals.ts | 2 +- .../ClustersFilterableList/ClusterItem.tsx | 2 +- .../ConnectionItem.tsx | 4 +- .../ConnectionStatusIndicator.story.tsx | 6 +- .../EmptyIdentityList/EmptyIdentityList.tsx | 2 +- .../IdentityList/IdentityListItem.tsx | 2 +- .../src/ui/Vnet/VnetConnectionItem.tsx | 8 +- 155 files changed, 2179 insertions(+), 1889 deletions(-) rename web/packages/design/src/Text/{Text.story.jsx => Text.story.tsx} (52%) diff --git a/e b/e index c725cd98a5c1f..6a667cd431b53 160000 --- a/e +++ b/e @@ -1 +1 @@ -Subproject commit c725cd98a5c1f3040297b9877a93f2fce9a922dd +Subproject commit 6a667cd431b53a7e8ee2111697989a5881ddff0c 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