From 05f44b68403479ff34f6efc539414a73b1f36a2c Mon Sep 17 00:00:00 2001 From: Noah Stride Date: Fri, 8 Nov 2024 16:38:47 +0000 Subject: [PATCH 001/111] [v15] Machine ID: Support overriding Proxy address from ProxyPing when using TLS routing (#48677) * Machine ID: Support overriding Proxy address from ProxyPing when using TLS routing (#48373) * Start working on ability to use explicit proxy address * Convert more call-sites to use new helper * Convert final callsite * Simplify implementation * Fix teests * Remove additional check * Fix dialling auth client * Update env var name * Machine ID: TBOT_USE_PROXY_ADDR use "yes" vs "1" for consistency (#48667) * Prefer "yes" over "1" for historical consistency * Try and retrigger the CLA check with an empty commit --- lib/tbot/service_application_tunnel.go | 5 +- lib/tbot/service_database_tunnel.go | 5 +- lib/tbot/service_identity_output.go | 14 ++-- lib/tbot/service_identity_output_test.go | 14 ++-- lib/tbot/service_kubernetes_output.go | 10 ++- lib/tbot/service_kubernetes_output_test.go | 4 +- lib/tbot/service_ssh_multiplexer.go | 8 +- lib/tbot/tbot.go | 85 ++++++++++++++++++---- 8 files changed, 110 insertions(+), 35 deletions(-) diff --git a/lib/tbot/service_application_tunnel.go b/lib/tbot/service_application_tunnel.go index b21dc022a2fea..97cebbaa22a97 100644 --- a/lib/tbot/service_application_tunnel.go +++ b/lib/tbot/service_application_tunnel.go @@ -134,7 +134,10 @@ func (s *ApplicationTunnelService) buildLocalProxyConfig(ctx context.Context) (l if err != nil { return alpnproxy.LocalProxyConfig{}, trace.Wrap(err, "pinging proxy") } - proxyAddr := proxyPing.Proxy.SSH.PublicAddr + proxyAddr, err := proxyPing.proxyWebAddr() + if err != nil { + return alpnproxy.LocalProxyConfig{}, trace.Wrap(err, "determining proxy web addr") + } s.log.DebugContext(ctx, "Issuing initial certificate for local proxy.") appCert, app, err := s.issueCert(ctx, roles) diff --git a/lib/tbot/service_database_tunnel.go b/lib/tbot/service_database_tunnel.go index f487fa1db47a4..3681edc7ecc74 100644 --- a/lib/tbot/service_database_tunnel.go +++ b/lib/tbot/service_database_tunnel.go @@ -94,7 +94,10 @@ func (s *DatabaseTunnelService) buildLocalProxyConfig(ctx context.Context) (lpCf if err != nil { return alpnproxy.LocalProxyConfig{}, trace.Wrap(err, "pinging proxy") } - proxyAddr := proxyPing.Proxy.SSH.PublicAddr + proxyAddr, err := proxyPing.proxyWebAddr() + if err != nil { + return alpnproxy.LocalProxyConfig{}, trace.Wrap(err, "determining proxy web address") + } // Fetch information about the database and then issue the initial // certificate. We issue the initial certificate to allow us to fail faster. diff --git a/lib/tbot/service_identity_output.go b/lib/tbot/service_identity_output.go index a5b14a46d552b..f91ab93039d4c 100644 --- a/lib/tbot/service_identity_output.go +++ b/lib/tbot/service_identity_output.go @@ -29,7 +29,6 @@ import ( "github.com/gravitational/trace" "github.com/gravitational/teleport/api/client/proto" - "github.com/gravitational/teleport/api/client/webclient" "github.com/gravitational/teleport/api/types" "github.com/gravitational/teleport/lib/auth/authclient" "github.com/gravitational/teleport/lib/config/openssh" @@ -251,7 +250,7 @@ type alpnTester interface { func renderSSHConfig( ctx context.Context, log *slog.Logger, - proxyPing *webclient.PingResponse, + proxyPing *proxyPingResponse, clusterNames []string, dest bot.Destination, certAuthGetter certAuthGetter, @@ -267,11 +266,16 @@ func renderSSHConfig( ) defer span.End() - proxyHost, proxyPort, err := utils.SplitHostPort(proxyPing.Proxy.SSH.PublicAddr) + proxyAddr, err := proxyPing.proxyWebAddr() + if err != nil { + return trace.Wrap(err, "determining proxy web addr") + } + + proxyHost, proxyPort, err := utils.SplitHostPort(proxyAddr) if err != nil { return trace.BadParameter( "proxy %+v has no usable public address: %v", - proxyPing.Proxy.SSH.PublicAddr, err, + proxyAddr, err, ) } @@ -327,7 +331,7 @@ func renderSSHConfig( connUpgradeRequired := false if proxyPing.Proxy.TLSRoutingEnabled { connUpgradeRequired, err = alpnTester.isUpgradeRequired( - ctx, proxyPing.Proxy.SSH.PublicAddr, botCfg.Insecure, + ctx, proxyAddr, botCfg.Insecure, ) if err != nil { return trace.Wrap(err, "determining if ALPN upgrade is required") diff --git a/lib/tbot/service_identity_output_test.go b/lib/tbot/service_identity_output_test.go index e158d43e7d5e0..976d02ebf4cc9 100644 --- a/lib/tbot/service_identity_output_test.go +++ b/lib/tbot/service_identity_output_test.go @@ -175,12 +175,14 @@ func Test_renderSSHConfig(t *testing.T) { err := renderSSHConfig( context.Background(), utils.NewSlogLoggerForTests(), - &webclient.PingResponse{ - ClusterName: mockClusterName, - Proxy: webclient.ProxySettings{ - TLSRoutingEnabled: tc.TLSRouting, - SSH: webclient.SSHProxySettings{ - PublicAddr: mockProxyAddr, + &proxyPingResponse{ + PingResponse: &webclient.PingResponse{ + ClusterName: mockClusterName, + Proxy: webclient.ProxySettings{ + TLSRoutingEnabled: tc.TLSRouting, + SSH: webclient.SSHProxySettings{ + PublicAddr: mockProxyAddr, + }, }, }, }, diff --git a/lib/tbot/service_kubernetes_output.go b/lib/tbot/service_kubernetes_output.go index bf0be90e10bb8..2277e292d4538 100644 --- a/lib/tbot/service_kubernetes_output.go +++ b/lib/tbot/service_kubernetes_output.go @@ -32,7 +32,6 @@ import ( apiclient "github.com/gravitational/teleport/api/client" "github.com/gravitational/teleport/api/client/proto" - "github.com/gravitational/teleport/api/client/webclient" "github.com/gravitational/teleport/api/defaults" "github.com/gravitational/teleport/api/types" "github.com/gravitational/teleport/lib/auth/authclient" @@ -418,7 +417,7 @@ func getKubeCluster(ctx context.Context, clt *authclient.Client, name string) (t // selectKubeConnectionMethod determines the address and SNI that should be // put into the kubeconfig file. -func selectKubeConnectionMethod(proxyPong *webclient.PingResponse) ( +func selectKubeConnectionMethod(proxyPong *proxyPingResponse) ( clusterAddr string, sni string, err error, ) { // First we check for TLS routing. If this is enabled, we use the Proxy's @@ -427,8 +426,11 @@ func selectKubeConnectionMethod(proxyPong *webclient.PingResponse) ( // Even if KubePublicAddr is specified, we still use the general // PublicAddr when using TLS routing. if proxyPong.Proxy.TLSRoutingEnabled { - addr := proxyPong.Proxy.SSH.PublicAddr - host, _, err := net.SplitHostPort(proxyPong.Proxy.SSH.PublicAddr) + addr, err := proxyPong.proxyWebAddr() + if err != nil { + return "", "", trace.Wrap(err) + } + host, _, err := net.SplitHostPort(addr) if err != nil { return "", "", trace.Wrap(err, "parsing proxy public_addr") } diff --git a/lib/tbot/service_kubernetes_output_test.go b/lib/tbot/service_kubernetes_output_test.go index 778c947fd07be..aeb3157df6cf7 100644 --- a/lib/tbot/service_kubernetes_output_test.go +++ b/lib/tbot/service_kubernetes_output_test.go @@ -279,7 +279,9 @@ func Test_selectKubeConnectionMethod(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - addr, sni, err := selectKubeConnectionMethod(tt.proxyPing) + addr, sni, err := selectKubeConnectionMethod(&proxyPingResponse{ + PingResponse: tt.proxyPing, + }) require.NoError(t, err) require.Equal(t, tt.wantAddr, addr) require.Equal(t, tt.wantSNI, sni) diff --git a/lib/tbot/service_ssh_multiplexer.go b/lib/tbot/service_ssh_multiplexer.go index 6a678db209302..c6566ecf5d38a 100644 --- a/lib/tbot/service_ssh_multiplexer.go +++ b/lib/tbot/service_ssh_multiplexer.go @@ -274,11 +274,15 @@ func (s *SSHMultiplexerService) setup(ctx context.Context) ( if err != nil { return nil, nil, "", nil, trace.Wrap(err) } - proxyAddr := proxyPing.Proxy.SSH.PublicAddr - proxyHost, _, err = net.SplitHostPort(proxyPing.Proxy.SSH.PublicAddr) + proxyAddr, err := proxyPing.proxyWebAddr() + if err != nil { + return nil, nil, "", nil, trace.Wrap(err, "determining proxy web addr") + } + proxyHost, _, err = net.SplitHostPort(proxyAddr) if err != nil { return nil, nil, "", nil, trace.Wrap(err) } + connUpgradeRequired := false if proxyPing.Proxy.TLSRoutingEnabled { connUpgradeRequired, err = s.alpnUpgradeCache.isUpgradeRequired( diff --git a/lib/tbot/tbot.go b/lib/tbot/tbot.go index 2594d4b17ca80..7874b29c05b8d 100644 --- a/lib/tbot/tbot.go +++ b/lib/tbot/tbot.go @@ -152,17 +152,32 @@ func (b *Bot) Run(ctx context.Context) (err error) { return trace.Wrap(err) } - addr, _ := b.cfg.Address() - resolver, err := reversetunnelclient.CachingResolver( - ctx, - reversetunnelclient.WebClientResolver(&webclient.Config{ - Context: ctx, - ProxyAddr: addr, - Insecure: b.cfg.Insecure, - }), - nil /* clock */) - if err != nil { - return trace.Wrap(err) + addr, addrKind := b.cfg.Address() + var resolver reversetunnelclient.Resolver + if shouldUseProxyAddr() { + if addrKind != config.AddressKindProxy { + return trace.BadParameter("TBOT_USE_PROXY_ADDR requires that a proxy address is set using --proxy-server or proxy_server") + } + // If the user has indicated they want tbot to prefer using the proxy + // address they have configured, we use a static resolver set to this + // address. We also assume that they have TLS routing/multiplexing + // enabled, since otherwise we'd need them to manually configure an + // an entry for each kind of address. + resolver = reversetunnelclient.StaticResolver( + addr, types.ProxyListenerMode_Multiplex, + ) + } else { + resolver, err = reversetunnelclient.CachingResolver( + ctx, + reversetunnelclient.WebClientResolver(&webclient.Config{ + Context: ctx, + ProxyAddr: addr, + Insecure: b.cfg.Insecure, + }), + nil /* clock */) + if err != nil { + return trace.Wrap(err) + } } // Create an error group to manage all the services lifetimes. @@ -512,7 +527,8 @@ func (b *Bot) preRunChecks(ctx context.Context) (_ func() error, err error) { ctx, span := tracer.Start(ctx, "Bot/preRunChecks") defer func() { apitracing.EndSpan(span, err) }() - switch _, addrKind := b.cfg.Address(); addrKind { + _, addrKind := b.cfg.Address() + switch addrKind { case config.AddressKindUnspecified: return nil, trace.BadParameter( "either a proxy or auth address must be set using --proxy, --auth-server or configuration", @@ -716,10 +732,10 @@ type proxyPingCache struct { log *slog.Logger mu sync.RWMutex - cachedValue *webclient.PingResponse + cachedValue *proxyPingResponse } -func (p *proxyPingCache) ping(ctx context.Context) (*webclient.PingResponse, error) { +func (p *proxyPingCache) ping(ctx context.Context) (*proxyPingResponse, error) { p.mu.Lock() defer p.mu.Unlock() if p.cachedValue != nil { @@ -753,11 +769,50 @@ func (p *proxyPingCache) ping(ctx context.Context) (*webclient.PingResponse, err return nil, trace.Wrap(err) } p.log.DebugContext(ctx, "Successfully pinged proxy.", "pong", res) - p.cachedValue = res + p.cachedValue = &proxyPingResponse{ + PingResponse: res, + configuredProxyAddr: p.botCfg.ProxyServer, + } return p.cachedValue, nil } +type proxyPingResponse struct { + *webclient.PingResponse + configuredProxyAddr string +} + +// useProxyAddrEnv is an environment variable which can be set to +// force `tbot` to prefer using the proxy address explicitly provided by the +// user over the one fetched from the proxy ping. This is only intended to work +// in cases where TLS routing is enabled, and is intended to support cases where +// the Proxy is accessible from multiple addresses, and the one included in the +// ProxyPing is incorrect. +const useProxyAddrEnv = "TBOT_USE_PROXY_ADDR" + +// shouldUseProxyAddr returns true if the TBOT_USE_PROXY_ADDR environment +// variable is set to "yes". More generally, this indicates that the user wishes +// for tbot to prefer using the proxy address that has been explicitly provided +// by the user rather than the one fetched via a discovery process (e.g ping). +func shouldUseProxyAddr() bool { + return os.Getenv(useProxyAddrEnv) == "yes" +} + +// proxyWebAddr returns the address to use to connect to the proxy web port. +// In TLS routing mode, this address should be used for most/all connections. +// This function takes into account the TBOT_USE_PROXY_ADDR environment +// variable, which can be used to force the use of the proxy address explicitly +// provided by the user rather than use the one fetched from the proxy ping. +func (p *proxyPingResponse) proxyWebAddr() (string, error) { + if shouldUseProxyAddr() { + if p.configuredProxyAddr == "" { + return "", trace.BadParameter("TBOT_USE_PROXY_ADDR set but no explicit proxy address configured") + } + return p.configuredProxyAddr, nil + } + return p.Proxy.SSH.PublicAddr, nil +} + type alpnProxyConnUpgradeRequiredCache struct { botCfg *config.BotConfig log *slog.Logger From 47b8e1d099fec180b62983bf6bc18c0ea6f5f122 Mon Sep 17 00:00:00 2001 From: Noah Stride Date: Fri, 8 Nov 2024 16:49:45 +0000 Subject: [PATCH 002/111] [v15] Machine ID: Document `TBOT_USE_PROXY_ADDR` (#48674) * Document `TBOT_USE_PROXY_ADDR` * "1" -> "yes" --- .../machine-id/troubleshooting.mdx | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/docs/pages/enroll-resources/machine-id/troubleshooting.mdx b/docs/pages/enroll-resources/machine-id/troubleshooting.mdx index c6f9dc476c6aa..bf101104d1170 100644 --- a/docs/pages/enroll-resources/machine-id/troubleshooting.mdx +++ b/docs/pages/enroll-resources/machine-id/troubleshooting.mdx @@ -320,3 +320,18 @@ outputs: Failure to add the `disable_exec_plugin` flag will result in a warning being displayed: `Destination kubernetes_secret: identity-output must be a directory in exec plugin mode`. + +## Configuring `tbot` for split DNS proxies + +When you have deployed your Proxy Service in such a way that it is +accessible via two different DNS names, e.g an internal and external address, +you may find that a `tbot` that is configured to use one of these addresses may +attempt to use the other address and that this may cause connections to fail. + +This is because `tbot` queries an auto-configuration endpoint exposed by the +Proxy Service to determine the canonical address to use when connecting. + +To fix this, set a variable of `TBOT_USE_PROXY_ADDR=yes` in the environment of the +`tbot` process. This configures `tbot` to prefer using the address that you have +explicitly provided. This only functions correctly in cases where TLS +routing/multiplexing is enabled for the Teleport cluster. From fbae1d2d7a33f7ab3ab31e0f76e6fb26b5da9da2 Mon Sep 17 00:00:00 2001 From: Marco Dinis Date: Fri, 8 Nov 2024 17:29:17 +0000 Subject: [PATCH 003/111] Fix EKS Discover flow fields (#48665) (#48693) At a previous PR we added two new fields in the UI and backend, but failed to add them to the layers in between (grpc service). This PR adds them and also fixes a typo on the EndpointPublicAccess field name. --- .../integration/v1/awsoidc_service.pb.go | 191 ++++++++++-------- .../integration/v1/awsoidc_service.proto | 7 + lib/auth/integration/integrationv1/awsoidc.go | 23 ++- .../integration/integrationv1/awsoidc_test.go | 36 ++++ lib/integrations/awsoidc/eks_list_clusters.go | 20 +- .../awsoidc/eks_list_clusters_test.go | 24 +-- lib/web/ui/server.go | 28 +-- .../EnrollEKSCluster/EksClustersList.tsx | 2 +- .../EnrollEKSCluster.test.tsx | 2 +- .../EnrollEksCluster.story.tsx | 10 +- .../src/services/integrations/types.ts | 4 +- 11 files changed, 213 insertions(+), 134 deletions(-) diff --git a/api/gen/proto/go/teleport/integration/v1/awsoidc_service.pb.go b/api/gen/proto/go/teleport/integration/v1/awsoidc_service.pb.go index ad0b646b0e72f..81240133ed30e 100644 --- a/api/gen/proto/go/teleport/integration/v1/awsoidc_service.pb.go +++ b/api/gen/proto/go/teleport/integration/v1/awsoidc_service.pb.go @@ -1865,6 +1865,13 @@ type EKSCluster struct { // Known values are: // CREATING | ACTIVE | DELETING | FAILED | UPDATING | PENDING Status string `protobuf:"bytes,6,opt,name=status,proto3" json:"status,omitempty"` + // EndpointPublicAccess indicates whether this EKS Cluster is accessible publicly. + // If only private access is available, then the EKS Cluster can't be enrolled from Teleport Cloud. + EndpointPublicAccess bool `protobuf:"varint,7,opt,name=endpoint_public_access,json=endpointPublicAccess,proto3" json:"endpoint_public_access,omitempty"` + // AuthenticationMode is the allowed authentication mode for the cluster. + // Known values are: + // API | API_AND_CONFIG_MAP | CONFIG_MAP + AuthenticationMode string `protobuf:"bytes,8,opt,name=authentication_mode,json=authenticationMode,proto3" json:"authentication_mode,omitempty"` } func (x *EKSCluster) Reset() { @@ -1941,6 +1948,20 @@ func (x *EKSCluster) GetStatus() string { return "" } +func (x *EKSCluster) GetEndpointPublicAccess() bool { + if x != nil { + return x.EndpointPublicAccess + } + return false +} + +func (x *EKSCluster) GetAuthenticationMode() string { + if x != nil { + return x.AuthenticationMode + } + return "" +} + // ListEKSClustersResponse contains a page of AWS EKS Clusters. type ListEKSClustersResponse struct { state protoimpl.MessageState @@ -2255,7 +2276,7 @@ var file_teleport_integration_v1_awsoidc_service_proto_rawDesc = []byte{ 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x65, 0x78, 0x74, 0x54, - 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0xfb, 0x02, 0x0a, 0x0a, 0x45, 0x4b, 0x53, 0x43, 0x6c, 0x75, 0x73, + 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0xe2, 0x03, 0x0a, 0x0a, 0x45, 0x4b, 0x53, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x12, @@ -2271,94 +2292,100 @@ var file_teleport_integration_v1_awsoidc_service_proto_rawDesc = []byte{ 0x73, 0x74, 0x65, 0x72, 0x2e, 0x4a, 0x6f, 0x69, 0x6e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x6a, 0x6f, 0x69, 0x6e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, - 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, - 0x02, 0x38, 0x01, 0x1a, 0x3d, 0x0a, 0x0f, 0x4a, 0x6f, 0x69, 0x6e, 0x4c, 0x61, 0x62, 0x65, 0x6c, - 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, - 0x38, 0x01, 0x22, 0x79, 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x4b, 0x53, 0x43, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3f, 0x0a, - 0x08, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x23, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x67, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x4b, 0x53, 0x43, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x52, 0x08, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x12, 0x1d, - 0x0a, 0x0a, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x6e, 0x65, 0x78, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x32, 0x90, 0x08, - 0x0a, 0x0e, 0x41, 0x57, 0x53, 0x4f, 0x49, 0x44, 0x43, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x12, 0x5f, 0x0a, 0x08, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x49, 0x43, 0x45, 0x12, 0x28, 0x2e, 0x74, - 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x49, 0x43, 0x45, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, + 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x34, 0x0a, 0x16, 0x65, 0x6e, 0x64, 0x70, + 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x61, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x14, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, + 0x6e, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x2f, + 0x0a, 0x13, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x61, 0x75, 0x74, + 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x6f, 0x64, 0x65, 0x1a, + 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, + 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, + 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3d, 0x0a, 0x0f, 0x4a, 0x6f, + 0x69, 0x6e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, + 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, + 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x79, 0x0a, 0x17, 0x4c, 0x69, 0x73, + 0x74, 0x45, 0x4b, 0x53, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3f, 0x0a, 0x08, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, + 0x74, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, + 0x2e, 0x45, 0x4b, 0x53, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x08, 0x63, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x74, 0x6f, + 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x65, 0x78, 0x74, 0x54, + 0x6f, 0x6b, 0x65, 0x6e, 0x32, 0x90, 0x08, 0x0a, 0x0e, 0x41, 0x57, 0x53, 0x4f, 0x49, 0x44, 0x43, + 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x5f, 0x0a, 0x08, 0x4c, 0x69, 0x73, 0x74, 0x45, + 0x49, 0x43, 0x45, 0x12, 0x28, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x69, + 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, + 0x73, 0x74, 0x45, 0x49, 0x43, 0x45, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, + 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x49, 0x43, 0x45, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x65, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x45, 0x49, 0x43, 0x45, 0x12, 0x2a, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x49, 0x43, 0x45, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x65, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x49, 0x43, 0x45, 0x12, - 0x2a, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x67, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x45, 0x49, 0x43, 0x45, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x74, 0x65, - 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x49, 0x43, 0x45, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6e, 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, - 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x73, 0x12, 0x2d, 0x2e, 0x74, 0x65, 0x6c, 0x65, + 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x49, 0x43, 0x45, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x69, 0x6e, + 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x45, 0x49, 0x43, 0x45, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x6e, 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x73, + 0x12, 0x2d, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x69, 0x6e, 0x74, 0x65, + 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x44, + 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x2e, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x67, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x61, + 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x7d, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, 0x32, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, + 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, + 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x47, 0x72, 0x6f, 0x75, + 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, - 0x6f, 0x72, 0x74, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7d, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, - 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, 0x32, - 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x63, - 0x75, 0x72, 0x69, 0x74, 0x79, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x69, 0x6e, - 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, - 0x74, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x86, 0x01, 0x0a, 0x15, 0x44, 0x65, 0x70, 0x6c, - 0x6f, 0x79, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x12, 0x35, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x69, 0x6e, 0x74, - 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x70, 0x6c, - 0x6f, 0x79, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x36, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, + 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, + 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x86, + 0x01, 0x0a, 0x15, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, + 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x35, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, - 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x6e, 0x0a, 0x0d, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x12, 0x2d, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x69, 0x6e, 0x74, - 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x70, 0x6c, - 0x6f, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x2e, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x69, 0x6e, 0x74, 0x65, - 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, - 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x7a, 0x0a, 0x11, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x45, 0x4b, 0x53, 0x43, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x73, 0x12, 0x31, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, - 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, - 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x45, 0x4b, 0x53, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, + 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x36, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x67, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, + 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6e, 0x0a, 0x0d, 0x44, 0x65, 0x70, 0x6c, 0x6f, + 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x2d, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x76, 0x31, 0x2e, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x45, 0x4b, 0x53, 0x43, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5c, 0x0a, 0x07, - 0x4c, 0x69, 0x73, 0x74, 0x45, 0x43, 0x32, 0x12, 0x27, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, + 0x76, 0x31, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, - 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x43, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x28, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x69, 0x6e, 0x74, 0x65, - 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x45, - 0x43, 0x32, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x74, 0x0a, 0x0f, 0x4c, 0x69, - 0x73, 0x74, 0x45, 0x4b, 0x53, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x12, 0x2f, 0x2e, - 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x4b, 0x53, 0x43, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, + 0x31, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7a, 0x0a, 0x11, 0x45, 0x6e, 0x72, 0x6f, 0x6c, + 0x6c, 0x45, 0x4b, 0x53, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x12, 0x31, 0x2e, 0x74, + 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x45, 0x4b, 0x53, + 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x32, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x67, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, + 0x45, 0x4b, 0x53, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x5c, 0x0a, 0x07, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x43, 0x32, 0x12, 0x27, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x4b, 0x53, - 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x42, 0x5a, 0x5a, 0x58, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, - 0x72, 0x61, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x2f, 0x74, 0x65, 0x6c, - 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2f, - 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x3b, 0x69, - 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x33, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x43, 0x32, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, + 0x72, 0x74, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, + 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x43, 0x32, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x74, 0x0a, 0x0f, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x4b, 0x53, 0x43, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x73, 0x12, 0x2f, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, + 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4c, + 0x69, 0x73, 0x74, 0x45, 0x4b, 0x53, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, + 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, + 0x4c, 0x69, 0x73, 0x74, 0x45, 0x4b, 0x53, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x5a, 0x5a, 0x58, 0x67, 0x69, 0x74, 0x68, 0x75, + 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x61, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x61, 0x6c, 0x2f, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2f, 0x61, 0x70, 0x69, + 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x74, 0x65, + 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x3b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/api/proto/teleport/integration/v1/awsoidc_service.proto b/api/proto/teleport/integration/v1/awsoidc_service.proto index d4bcb25114531..ca50823c2ad71 100644 --- a/api/proto/teleport/integration/v1/awsoidc_service.proto +++ b/api/proto/teleport/integration/v1/awsoidc_service.proto @@ -418,6 +418,13 @@ message EKSCluster { // Known values are: // CREATING | ACTIVE | DELETING | FAILED | UPDATING | PENDING string status = 6; + // EndpointPublicAccess indicates whether this EKS Cluster is accessible publicly. + // If only private access is available, then the EKS Cluster can't be enrolled from Teleport Cloud. + bool endpoint_public_access = 7; + // AuthenticationMode is the allowed authentication mode for the cluster. + // Known values are: + // API | API_AND_CONFIG_MAP | CONFIG_MAP + string authentication_mode = 8; } // ListEKSClustersResponse contains a page of AWS EKS Clusters. diff --git a/lib/auth/integration/integrationv1/awsoidc.go b/lib/auth/integration/integrationv1/awsoidc.go index 8a100fea35614..8e025db1c6dc6 100644 --- a/lib/auth/integration/integrationv1/awsoidc.go +++ b/lib/auth/integration/integrationv1/awsoidc.go @@ -662,15 +662,7 @@ func (s *AWSOIDCService) ListEKSClusters(ctx context.Context, req *integrationpb clustersList := make([]*integrationpb.EKSCluster, 0, len(listEKSClustersResp.Clusters)) for _, cluster := range listEKSClustersResp.Clusters { - clusterPb := &integrationpb.EKSCluster{ - Name: cluster.Name, - Region: cluster.Region, - Arn: cluster.Arn, - Labels: cluster.Labels, - JoinLabels: cluster.JoinLabels, - Status: cluster.Status, - } - clustersList = append(clustersList, clusterPb) + clustersList = append(clustersList, convertEKSCluster(cluster)) } return &integrationpb.ListEKSClustersResponse{ @@ -678,3 +670,16 @@ func (s *AWSOIDCService) ListEKSClusters(ctx context.Context, req *integrationpb NextToken: listEKSClustersResp.NextToken, }, nil } + +func convertEKSCluster(clusterService awsoidc.EKSCluster) *integrationpb.EKSCluster { + return &integrationpb.EKSCluster{ + Name: clusterService.Name, + Region: clusterService.Region, + Arn: clusterService.Arn, + Labels: clusterService.Labels, + JoinLabels: clusterService.JoinLabels, + Status: clusterService.Status, + EndpointPublicAccess: clusterService.EndpointPublicAccess, + AuthenticationMode: clusterService.AuthenticationMode, + } +} diff --git a/lib/auth/integration/integrationv1/awsoidc_test.go b/lib/auth/integration/integrationv1/awsoidc_test.go index 3bcd19b14868f..87a5f7356002e 100644 --- a/lib/auth/integration/integrationv1/awsoidc_test.go +++ b/lib/auth/integration/integrationv1/awsoidc_test.go @@ -407,3 +407,39 @@ func TestDeployService(t *testing.T) { require.True(t, trace.IsBadParameter(err), "expected BadParameter error, but got %T", err) }) } + +func TestConvertEKSCluster(t *testing.T) { + for _, tt := range []struct { + name string + input awsoidc.EKSCluster + expected *integrationv1.EKSCluster + }{ + { + name: "valid", + input: awsoidc.EKSCluster{ + Name: "my-cluster", + Region: "us-east-1", + Arn: "my-arn", + Labels: map[string]string{}, + JoinLabels: map[string]string{}, + Status: "ACTIVE", + AuthenticationMode: "API", + EndpointPublicAccess: true, + }, + expected: &integrationv1.EKSCluster{ + Name: "my-cluster", + Region: "us-east-1", + Arn: "my-arn", + Labels: map[string]string{}, + JoinLabels: map[string]string{}, + Status: "ACTIVE", + AuthenticationMode: "API", + EndpointPublicAccess: true, + }, + }, + } { + t.Run(tt.name, func(t *testing.T) { + require.Equal(t, tt.expected, convertEKSCluster(tt.input)) + }) + } +} diff --git a/lib/integrations/awsoidc/eks_list_clusters.go b/lib/integrations/awsoidc/eks_list_clusters.go index 4079f98034b1b..f24c7ec1f6102 100644 --- a/lib/integrations/awsoidc/eks_list_clusters.go +++ b/lib/integrations/awsoidc/eks_list_clusters.go @@ -79,9 +79,9 @@ type EKSCluster struct { // https://aws.amazon.com/blogs/containers/a-deep-dive-into-simplified-amazon-eks-access-management-controls/ AuthenticationMode string - // EndpointPublicAddress indicates whether the Cluster's VPC Config has its endpoint as a public address. + // EndpointPublicAccess indicates whether the Cluster's VPC Config has its endpoint as a public address. // For Teleport Cloud, this is required to access the cluster and proceed with the installation. - EndpointPublicAddress bool + EndpointPublicAccess bool } // ListEKSClustersResponse contains a page of AWS EKS Clusters. @@ -171,14 +171,14 @@ func ListEKSClusters(ctx context.Context, clt ListEKSClustersClient, req ListEKS } ret.Clusters = append(ret.Clusters, EKSCluster{ - Name: aws.ToString(cluster.Name), - Region: req.Region, - Arn: aws.ToString(cluster.Arn), - Labels: cluster.Tags, - JoinLabels: extraLabels, - Status: strings.ToLower(string(cluster.Status)), - AuthenticationMode: string(cluster.AccessConfig.AuthenticationMode), - EndpointPublicAddress: cluster.ResourcesVpcConfig.EndpointPublicAccess, + Name: aws.ToString(cluster.Name), + Region: req.Region, + Arn: aws.ToString(cluster.Arn), + Labels: cluster.Tags, + JoinLabels: extraLabels, + Status: strings.ToLower(string(cluster.Status)), + AuthenticationMode: string(cluster.AccessConfig.AuthenticationMode), + EndpointPublicAccess: cluster.ResourcesVpcConfig.EndpointPublicAccess, }) return nil }) diff --git a/lib/integrations/awsoidc/eks_list_clusters_test.go b/lib/integrations/awsoidc/eks_list_clusters_test.go index 64298bdc6fc4d..9fe472d8cb659 100644 --- a/lib/integrations/awsoidc/eks_list_clusters_test.go +++ b/lib/integrations/awsoidc/eks_list_clusters_test.go @@ -178,9 +178,9 @@ func TestListEKSClusters(t *testing.T) { "region": "us-east-1", "teleport.dev/cloud": "AWS", }, - Status: "active", - AuthenticationMode: "API", - EndpointPublicAddress: true, + Status: "active", + AuthenticationMode: "API", + EndpointPublicAccess: true, }, }, expectedFetchingErrors: map[string]error{}, @@ -224,9 +224,9 @@ func TestListEKSClusters(t *testing.T) { "region": "us-east-1", "teleport.dev/cloud": "AWS", }, - Status: "active", - AuthenticationMode: "API", - EndpointPublicAddress: true, + Status: "active", + AuthenticationMode: "API", + EndpointPublicAccess: true, }, { Name: "EKS2", @@ -238,9 +238,9 @@ func TestListEKSClusters(t *testing.T) { "region": "us-east-1", "teleport.dev/cloud": "AWS", }, - Status: "active", - AuthenticationMode: "API", - EndpointPublicAddress: true, + Status: "active", + AuthenticationMode: "API", + EndpointPublicAccess: true, }, }, expectedFetchingErrors: map[string]error{}, @@ -296,9 +296,9 @@ func TestListEKSClusters(t *testing.T) { "region": "us-east-1", "teleport.dev/cloud": "AWS", }, - Status: "active", - AuthenticationMode: "API", - EndpointPublicAddress: true, + Status: "active", + AuthenticationMode: "API", + EndpointPublicAccess: true, }, }, expectedFetchingErrors: map[string]error{"erroredCluster": errors.New("erroredCluster")}, diff --git a/lib/web/ui/server.go b/lib/web/ui/server.go index 6037c1540e6ae..21c913559b237 100644 --- a/lib/web/ui/server.go +++ b/lib/web/ui/server.go @@ -136,12 +136,14 @@ func MakeServer(clusterName string, server types.Server, logins []string) Server // EKSCluster represents and EKS cluster, analog of awsoidc.EKSCluster, but used by web ui. type EKSCluster struct { - Name string `json:"name"` - Region string `json:"region"` - Arn string `json:"arn"` - Labels []Label `json:"labels"` - JoinLabels []Label `json:"joinLabels"` - Status string `json:"status"` + Name string `json:"name"` + Region string `json:"region"` + Arn string `json:"arn"` + Labels []Label `json:"labels"` + JoinLabels []Label `json:"joinLabels"` + Status string `json:"status"` + EndpointPublicAccess bool `json:"endpointPublicAccess"` + AuthenticationMode string `json:"authenticationMode"` } // KubeCluster describes a kube cluster. @@ -179,12 +181,14 @@ func MakeEKSClusters(clusters []*integrationv1.EKSCluster) []EKSCluster { for _, cluster := range clusters { uiEKSClusters = append(uiEKSClusters, EKSCluster{ - Name: cluster.Name, - Region: cluster.Region, - Arn: cluster.Arn, - Labels: makeLabels(cluster.Labels), - JoinLabels: makeLabels(cluster.JoinLabels), - Status: cluster.Status, + Name: cluster.Name, + Region: cluster.Region, + Arn: cluster.Arn, + Labels: makeLabels(cluster.Labels), + JoinLabels: makeLabels(cluster.JoinLabels), + Status: cluster.Status, + EndpointPublicAccess: cluster.EndpointPublicAccess, + AuthenticationMode: cluster.AuthenticationMode, }) } return uiEKSClusters diff --git a/web/packages/teleport/src/Discover/Kubernetes/EnrollEKSCluster/EksClustersList.tsx b/web/packages/teleport/src/Discover/Kubernetes/EnrollEKSCluster/EksClustersList.tsx index 24b4702317545..711efb508c861 100644 --- a/web/packages/teleport/src/Discover/Kubernetes/EnrollEKSCluster/EksClustersList.tsx +++ b/web/packages/teleport/src/Discover/Kubernetes/EnrollEKSCluster/EksClustersList.tsx @@ -142,7 +142,7 @@ function disabledStates( }; } - if (cfg.isCloud && !item.endpointPublicAddress) { + if (cfg.isCloud && !item.endpointPublicAccess) { return { disabled: true, disabledText: diff --git a/web/packages/teleport/src/Discover/Kubernetes/EnrollEKSCluster/EnrollEKSCluster.test.tsx b/web/packages/teleport/src/Discover/Kubernetes/EnrollEKSCluster/EnrollEKSCluster.test.tsx index 8db55bc33785e..97abbd46ecf85 100644 --- a/web/packages/teleport/src/Discover/Kubernetes/EnrollEKSCluster/EnrollEKSCluster.test.tsx +++ b/web/packages/teleport/src/Discover/Kubernetes/EnrollEKSCluster/EnrollEKSCluster.test.tsx @@ -211,7 +211,7 @@ const mockEKSClusters: AwsEksCluster[] = [ labels: [], joinLabels: [], authenticationMode: 'API', - endpointPublicAddress: true, + endpointPublicAccess: true, }, ]; diff --git a/web/packages/teleport/src/Discover/Kubernetes/EnrollEKSCluster/EnrollEksCluster.story.tsx b/web/packages/teleport/src/Discover/Kubernetes/EnrollEKSCluster/EnrollEksCluster.story.tsx index 5b079fc3c02c5..0267044890211 100644 --- a/web/packages/teleport/src/Discover/Kubernetes/EnrollEKSCluster/EnrollEksCluster.story.tsx +++ b/web/packages/teleport/src/Discover/Kubernetes/EnrollEKSCluster/EnrollEksCluster.story.tsx @@ -314,7 +314,7 @@ const eksClusters: AwsEksCluster[] = [ { name: 'account-id', value: '1234567789012' }, ], authenticationMode: 'API', - endpointPublicAddress: true, + endpointPublicAccess: true, }, { name: 'EKS2', @@ -328,7 +328,7 @@ const eksClusters: AwsEksCluster[] = [ { name: 'account-id', value: '1234567789012' }, ], authenticationMode: 'API', - endpointPublicAddress: true, + endpointPublicAccess: true, }, { name: 'EKS3', @@ -342,7 +342,7 @@ const eksClusters: AwsEksCluster[] = [ { name: 'account-id', value: '1234567789012' }, ], authenticationMode: 'API', - endpointPublicAddress: true, + endpointPublicAccess: true, }, { name: 'EKS4', @@ -356,7 +356,7 @@ const eksClusters: AwsEksCluster[] = [ { name: 'account-id', value: '1234567789012' }, ], authenticationMode: 'CONFIG_MAP', - endpointPublicAddress: true, + endpointPublicAccess: true, }, { name: 'EKS5', @@ -370,6 +370,6 @@ const eksClusters: AwsEksCluster[] = [ { name: 'account-id', value: '1234567789012' }, ], authenticationMode: 'API_AND_CONFIG_MAP', - endpointPublicAddress: false, + endpointPublicAccess: false, }, ]; diff --git a/web/packages/teleport/src/services/integrations/types.ts b/web/packages/teleport/src/services/integrations/types.ts index d117bf0499c3f..9105546e84495 100644 --- a/web/packages/teleport/src/services/integrations/types.ts +++ b/web/packages/teleport/src/services/integrations/types.ts @@ -364,11 +364,11 @@ export type AwsEksCluster = { authenticationMode: 'API' | 'API_AND_CONFIG_MAP' | 'CONFIG_MAP'; /** - * EndpointPublicAddress indicates whether this cluster is publicly accessible. + * EndpointPublicAccess indicates whether this cluster is publicly accessible. * This is a requirement for Teleport Cloud tenants because the control plane must be able to access the EKS Cluster * in order to deploy the helm chart. */ - endpointPublicAddress: boolean; + endpointPublicAccess: boolean; }; export type EnrollEksClustersRequest = { From 1890d36878bf8732f2bfd72967db3e9a6a0618b8 Mon Sep 17 00:00:00 2001 From: Steven Martin Date: Fri, 8 Nov 2024 15:05:05 -0500 Subject: [PATCH 004/111] docs: update tsh reference (#48639) --- docs/pages/reference/cli/tsh.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/pages/reference/cli/tsh.mdx b/docs/pages/reference/cli/tsh.mdx index f3b18116fe51c..d0ba638148800 100644 --- a/docs/pages/reference/cli/tsh.mdx +++ b/docs/pages/reference/cli/tsh.mdx @@ -13,7 +13,7 @@ Environment variables configure your tsh client and can help you avoid using fla | Environment Variable | Description | Example Value | | - | - | - | -| TELEPORT_AUTH | Name of a defined SAML, OIDC, or GitHub auth connector (or a local user) | okta | +| TELEPORT_AUTH | Any defined [authentication connector](../access-controls/authentication.mdx), including `passwordless` and `local` (i.e., no authentication connector) | okta | | TELEPORT_MFA_MODE | Preferred mode for MFA and Passwordless assertions | otp | | TELEPORT_CLUSTER | Name of a Teleport root or leaf cluster | cluster.example.com | | TELEPORT_LOGIN | Login name to be used by default on the remote host | root | From ab91891cb0b76a2151fa236ae48be359e4de0b6e Mon Sep 17 00:00:00 2001 From: Nic Klaassen Date: Mon, 11 Nov 2024 02:00:44 -0800 Subject: [PATCH 005/111] docs: add YubiHSM2 capabilities for ECDSA (#48719) --- docs/pages/admin-guides/deploy-a-cluster/hsm.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/pages/admin-guides/deploy-a-cluster/hsm.mdx b/docs/pages/admin-guides/deploy-a-cluster/hsm.mdx index bf627fcefcb0c..786a64e8cd944 100644 --- a/docs/pages/admin-guides/deploy-a-cluster/hsm.mdx +++ b/docs/pages/admin-guides/deploy-a-cluster/hsm.mdx @@ -207,7 +207,7 @@ to use. Created session 0 # Create an Authenticate Key for Teleport - yubihsm> put authkey 0 0 "Teleport Auth Key" 1 generate-asymmetric-key:sign-pkcs:delete-asymmetric-key sign-pkcs:sign-pss:decrypt-pkcs:decrypt-oaep hunter22 + yubihsm> put authkey 0 0 "Teleport Auth Key" 1 generate-asymmetric-key:sign-pkcs:sign-pss:sign-ecdsa:delete-asymmetric-key sign-pkcs:sign-pss:decrypt-pkcs:decrypt-oaep:sign-ecdsa hunter22 Stored Authentication key 0x85cf # Make sure you can open a session with the new authentication key and password From a395cfadde6887ec886c0b8d8779b0a2231b7a59 Mon Sep 17 00:00:00 2001 From: Marco Dinis Date: Mon, 11 Nov 2024 14:01:38 +0000 Subject: [PATCH 006/111] EKS Auto Enroll: wait for agent to be installed (#48732) After doing this flow a couple of times, it seems that 6 seconds is not enough. It should not take longer than 20 seconds. --- lib/integrations/awsoidc/eks_enroll_clusters.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/integrations/awsoidc/eks_enroll_clusters.go b/lib/integrations/awsoidc/eks_enroll_clusters.go index e23a3c3ee7799..587ec248538e0 100644 --- a/lib/integrations/awsoidc/eks_enroll_clusters.go +++ b/lib/integrations/awsoidc/eks_enroll_clusters.go @@ -552,12 +552,13 @@ func checkAgentAlreadyInstalled(ctx context.Context, actionConfig *action.Config var err error // We setup a little backoff loop because sometimes access entry auth needs a bit more time to propagate and take // effect, so we could get errors when trying to access cluster right after giving us permissions to do so. + // From real scenarios, we've seen this taking as long as 20 seconds. for attempt := 1; attempt <= 3; attempt++ { listCmd := action.NewList(actionConfig) releases, err = listCmd.Run() if err != nil { select { - case <-time.After(time.Duration(attempt) * time.Second): + case <-time.After(time.Duration(attempt*5) * time.Second): case <-ctx.Done(): return false, trace.NewAggregate(err, ctx.Err()) } From c65abe4e765f15ac0ace6db6dde8454c36bb0877 Mon Sep 17 00:00:00 2001 From: Tiago Silva Date: Mon, 11 Nov 2024 18:16:01 +0000 Subject: [PATCH 007/111] [kube] fixes duplicated session recordings in root and leaf clusters (#48739) This PR addresses a bug in Kubernetes session recordings where both the root proxy and the leaf cluster's Kubernetes services were recording the same session, resulting in the session being available in both clusters. This behavior was inconsistent with other protocols, where recordings of leaf resources are only accessible in leaf clusters. To maintain consistency, this PR removes session recordings on the root clusters. Signed-off-by: Tiago Silva --- integration/kube_integration_test.go | 5 +-- lib/kube/proxy/ephemeral_containers.go | 2 +- lib/kube/proxy/forwarder.go | 43 +++++++++++---------- lib/kube/proxy/resource_deletecollection.go | 2 +- lib/kube/proxy/resource_list.go | 2 +- lib/kube/proxy/self_subject_reviews.go | 2 +- lib/kube/proxy/sess.go | 2 +- 7 files changed, 30 insertions(+), 28 deletions(-) diff --git a/integration/kube_integration_test.go b/integration/kube_integration_test.go index bc6beb477b1eb..a6497441fecb7 100644 --- a/integration/kube_integration_test.go +++ b/integration/kube_integration_test.go @@ -760,7 +760,7 @@ func testKubeTrustedClustersClientCert(t *testing.T, suite *KubeSuite) { loop: for { select { - case event := <-main.UploadEventsC: + case event := <-aux.UploadEventsC: sessionID = event.SessionID break loop case <-timeoutC: @@ -769,7 +769,7 @@ loop: } // read back the entire session and verify that it matches the stated output - capturedStream, err := main.Process.GetAuthServer().GetSessionChunk(apidefaults.Namespace, session.ID(sessionID), 0, events.MaxChunkBytes) + capturedStream, err := aux.Process.GetAuthServer().GetSessionChunk(apidefaults.Namespace, session.ID(sessionID), 0, events.MaxChunkBytes) require.NoError(t, err) require.Equal(t, sessionStream, string(capturedStream)) @@ -1585,7 +1585,6 @@ func waitForContainer(ctx context.Context, podClient corev1client.PodInterface, } s := getContainerStatusByName(p, containerName) - fmt.Println("test", s) if s == nil { return false, nil } diff --git a/lib/kube/proxy/ephemeral_containers.go b/lib/kube/proxy/ephemeral_containers.go index e39cb7dbca3a8..1c9ae08e417a4 100644 --- a/lib/kube/proxy/ephemeral_containers.go +++ b/lib/kube/proxy/ephemeral_containers.go @@ -104,7 +104,7 @@ func (f *Forwarder) ephemeralContainers(authCtx *authContext, w http.ResponseWri f.log.Errorf("Failed to set up forwarding headers: %v.", err) return nil, trace.Wrap(err) } - if !f.isLocalKubeCluster(sess.teleportCluster.isRemote, sess.kubeClusterName) { + if !sess.isLocalKubernetesCluster { sess.forwarder.ServeHTTP(w, req) return nil, nil } diff --git a/lib/kube/proxy/forwarder.go b/lib/kube/proxy/forwarder.go index 14751aaa1f9cc..735f1debd2ec1 100644 --- a/lib/kube/proxy/forwarder.go +++ b/lib/kube/proxy/forwarder.go @@ -423,6 +423,10 @@ type authContext struct { kubeServers []types.KubeServer // apiResource holds the information about the requested API resource. apiResource apiResource + // isLocalKubernetesCluster is true if the target cluster is served by this teleport service. + // It is false if the target cluster is served by another teleport service or a different + // Teleport cluster. + isLocalKubernetesCluster bool } func (c authContext) String() string { @@ -760,7 +764,8 @@ func (f *Forwarder) setupContext( return nil, trace.NotFound("Kubernetes cluster %q not found", kubeCluster) } } - if f.isLocalKubeCluster(isRemoteCluster, kubeCluster) { + isLocalKubernetesCluster := f.isLocalKubeCluster(isRemoteCluster, kubeCluster) + if isLocalKubernetesCluster { kubeResource, apiResource, err = f.parseResourceFromRequest(req, kubeCluster) if err != nil { return nil, trace.Wrap(err) @@ -794,10 +799,11 @@ func (f *Forwarder) setupContext( remoteAddr: utils.NetAddr{AddrNetwork: "tcp", Addr: req.RemoteAddr}, isRemote: isRemoteCluster, }, - kubeServers: kubeServers, - requestVerb: apiResource.getVerb(req), - apiResource: apiResource, - kubeResource: kubeResource, + kubeServers: kubeServers, + requestVerb: apiResource.getVerb(req), + apiResource: apiResource, + kubeResource: kubeResource, + isLocalKubernetesCluster: isLocalKubernetesCluster, }, nil } @@ -850,9 +856,11 @@ func (f *Forwarder) emitAuditEvent(req *http.Request, sess *clusterSession, stat ) defer span.End() - if sess.noAuditEvents { + // If the session is not local, don't emit the event. + if !sess.isLocalKubernetesCluster { return } + r := sess.apiResource if r.skipEvent { return @@ -1146,7 +1154,7 @@ func (f *Forwarder) join(ctx *authContext, w http.ResponseWriter, req *http.Requ return nil, trace.Wrap(err) } - if !f.isLocalKubeCluster(ctx.teleportCluster.isRemote, ctx.kubeClusterName) { + if !sess.isLocalKubernetesCluster { return f.remoteJoin(ctx, w, req, p, sess) } @@ -1639,7 +1647,7 @@ func (f *Forwarder) exec(authCtx *authContext, w http.ResponseWriter, req *http. return upgradeRequestToRemoteCommandProxy(request, func(proxy *remoteCommandProxy) error { - if sess.noAuditEvents { + if !sess.isLocalKubernetesCluster { // We're forwarding this to another kubernetes_service instance, let it handle multiplexing. return f.remoteExec(authCtx, w, req, p, sess, request, proxy) } @@ -1736,7 +1744,7 @@ func (f *Forwarder) portForward(authCtx *authContext, w http.ResponseWriter, req } onPortForward := func(addr string, success bool) { - if sess.noAuditEvents { + if !sess.isLocalKubernetesCluster { return } portForward := &apievents.PortForward{ @@ -2007,7 +2015,7 @@ func (f *Forwarder) catchAll(authCtx *authContext, w http.ResponseWriter, req *h return nil, trace.Wrap(err) } - isLocalKubeCluster := f.isLocalKubeCluster(sess.teleportCluster.isRemote, sess.kubeClusterName) + isLocalKubeCluster := sess.isLocalKubernetesCluster isListRequest := authCtx.requestVerb == types.KubeVerbList // Watch requests can be send to a single resource or to a collection of resources. // isWatchingCollectionRequest is true when the request is a watch request and @@ -2104,10 +2112,8 @@ type clusterSession struct { // nil otherwise. kubeAPICreds kubeCreds forwarder *reverseproxy.Forwarder - // noAuditEvents is true if this teleport service should leave audit event - // logging to another service. - noAuditEvents bool - targetAddr string + // targetAddr is the address of the target cluster. + targetAddr string // kubeAddress is the address of this session's active connection (if there is one) kubeAddress string // upgradeToHTTP2 indicates whether the transport should be configured to use HTTP2. @@ -2316,11 +2322,8 @@ func (f *Forwarder) newClusterSessionLocal(ctx context.Context, authCtx authCont func (f *Forwarder) newClusterSessionDirect(ctx context.Context, authCtx authContext) (*clusterSession, error) { connCtx, cancel := context.WithCancelCause(ctx) return &clusterSession{ - parent: f, - authContext: authCtx, - // This session talks to a kubernetes_service, which should handle - // audit logging. Avoid duplicate logging. - noAuditEvents: true, + parent: f, + authContext: authCtx, requestContext: ctx, connCtx: connCtx, connMonitorCancel: cancel, @@ -2344,7 +2347,7 @@ func (f *Forwarder) makeSessionForwarder(sess *clusterSession) (*reverseproxy.Fo reverseproxy.WithLogger(f.log), reverseproxy.WithErrorHandler(f.formatForwardResponseError), } - if f.isLocalKubeCluster(sess.teleportCluster.isRemote, sess.kubeClusterName) { + if sess.isLocalKubernetesCluster { // If the target cluster is local, i.e. the cluster that is served by this // teleport service, then we set up the forwarder to allow re-writing // the response to the client to include user friendly error messages. diff --git a/lib/kube/proxy/resource_deletecollection.go b/lib/kube/proxy/resource_deletecollection.go index dced5822ffc71..89c658c551c05 100644 --- a/lib/kube/proxy/resource_deletecollection.go +++ b/lib/kube/proxy/resource_deletecollection.go @@ -62,7 +62,7 @@ func (f *Forwarder) deleteResourcesCollection(sess *clusterSession, w http.Respo defer span.End() req = req.WithContext(ctx) var ( - isLocalKubeCluster = f.isLocalKubeCluster(sess.teleportCluster.isRemote, sess.kubeClusterName) + isLocalKubeCluster = sess.isLocalKubernetesCluster kubeObjType string namespace string ) diff --git a/lib/kube/proxy/resource_list.go b/lib/kube/proxy/resource_list.go index 97b9dd0390b12..ad805b0066031 100644 --- a/lib/kube/proxy/resource_list.go +++ b/lib/kube/proxy/resource_list.go @@ -52,7 +52,7 @@ func (f *Forwarder) listResources(sess *clusterSession, w http.ResponseWriter, r req = req.WithContext(ctx) - isLocalKubeCluster := f.isLocalKubeCluster(sess.teleportCluster.isRemote, sess.kubeClusterName) + isLocalKubeCluster := sess.isLocalKubernetesCluster supportsType := false if isLocalKubeCluster { _, supportsType = sess.rbacSupportedResources.getTeleportResourceKindFromAPIResource(sess.apiResource) diff --git a/lib/kube/proxy/self_subject_reviews.go b/lib/kube/proxy/self_subject_reviews.go index fe8b463acea33..2130cfdaed034 100644 --- a/lib/kube/proxy/self_subject_reviews.go +++ b/lib/kube/proxy/self_subject_reviews.go @@ -80,7 +80,7 @@ func (f *Forwarder) selfSubjectAccessReviews(authCtx *authContext, w http.Respon // only allow self subject access reviews for the service that proxies the // request to the kubernetes API server. - if f.isLocalKubeCluster(sess.teleportCluster.isRemote, sess.kubeClusterName) { + if sess.isLocalKubernetesCluster { if err := f.validateSelfSubjectAccessReview(sess, w, req); trace.IsAccessDenied(err) { return nil, nil } else if err != nil { diff --git a/lib/kube/proxy/sess.go b/lib/kube/proxy/sess.go index 54ed10105b8e7..8a12d764fba99 100644 --- a/lib/kube/proxy/sess.go +++ b/lib/kube/proxy/sess.go @@ -748,7 +748,7 @@ func (s *session) lockedSetupLaunch(request *remoteCommandRequest, eventPodMeta s.started = true sessionStart := s.forwarder.cfg.Clock.Now().UTC() - if !s.sess.noAuditEvents { + if s.sess.isLocalKubernetesCluster { s.terminalSizeQueue.callback = func(termSize terminalResizeMessage) { s.mu.Lock() defer s.mu.Unlock() From f743bc83bbef6b41d58533e2134a71d230d0cbba Mon Sep 17 00:00:00 2001 From: rosstimothy <39066650+rosstimothy@users.noreply.github.com> Date: Tue, 12 Nov 2024 04:16:42 -0500 Subject: [PATCH 008/111] Remove OIDCClaimsToTraits helper function (#48679) The function was relocated to the only place it was being called in https://github.com/gravitational/teleport.e/pull/5374 and is no longer needed in lib/services. This also has the added benefit of removing go-oidc as a direct dependency of lib/services. --- lib/services/oidc.go | 28 ---------------------------- lib/services/oidc_test.go | 30 ------------------------------ lib/services/user_test.go | 21 ++++++++++++++++++++- 3 files changed, 20 insertions(+), 59 deletions(-) diff --git a/lib/services/oidc.go b/lib/services/oidc.go index b1562e7820463..ddfbad5ad633b 100644 --- a/lib/services/oidc.go +++ b/lib/services/oidc.go @@ -21,40 +21,12 @@ package services import ( "net/url" - "github.com/coreos/go-oidc/jose" "github.com/gravitational/trace" "github.com/gravitational/teleport/api/types" "github.com/gravitational/teleport/lib/utils" ) -// GetClaimNames returns a list of claim names from the claim values -func GetClaimNames(claims jose.Claims) []string { - var out []string - for claim := range claims { - out = append(out, claim) - } - return out -} - -// OIDCClaimsToTraits converts OIDC-style claims into teleport-specific trait format -func OIDCClaimsToTraits(claims jose.Claims) map[string][]string { - traits := make(map[string][]string) - - for claimName := range claims { - claimValue, ok, _ := claims.StringClaim(claimName) - if ok { - traits[claimName] = []string{claimValue} - } - claimValues, ok, _ := claims.StringsClaim(claimName) - if ok { - traits[claimName] = claimValues - } - } - - return traits -} - // GetRedirectURL gets a redirect URL for the given connector. If the connector // has a redirect URL which matches the host of the given Proxy address, then // that one will be returned. Otherwise, the first URL in the list will be returned. diff --git a/lib/services/oidc_test.go b/lib/services/oidc_test.go index ca3dd2f048a96..7504e24398fcf 100644 --- a/lib/services/oidc_test.go +++ b/lib/services/oidc_test.go @@ -21,7 +21,6 @@ package services import ( "testing" - "github.com/coreos/go-oidc/jose" "github.com/gravitational/trace" "github.com/stretchr/testify/require" @@ -29,35 +28,6 @@ import ( "github.com/gravitational/teleport/api/types" ) -// TestOIDCRoleMapping verifies basic mapping from OIDC claims to roles. -func TestOIDCRoleMapping(t *testing.T) { - // create a connector - oidcConnector, err := types.NewOIDCConnector("example", types.OIDCConnectorSpecV3{ - IssuerURL: "https://www.exmaple.com", - ClientID: "example-client-id", - ClientSecret: "example-client-secret", - Display: "sign in with example.com", - Scope: []string{"foo", "bar"}, - ClaimsToRoles: []types.ClaimMapping{{Claim: "roles", Value: "teleport-user", Roles: []string{"user"}}}, - RedirectURLs: []string{"https://localhost:3080/v1/webapi/oidc/callback"}, - }) - require.NoError(t, err) - - // create some claims - var claims = make(jose.Claims) - claims.Add("roles", "teleport-user") - claims.Add("email", "foo@example.com") - claims.Add("nickname", "foo") - claims.Add("full_name", "foo bar") - - traits := OIDCClaimsToTraits(claims) - require.Len(t, traits, 4) - - _, roles := TraitsToRoles(oidcConnector.GetTraitMappings(), traits) - require.Len(t, roles, 1) - require.Equal(t, "user", roles[0]) -} - // TestOIDCUnmarshal tests UnmarshalOIDCConnector func TestOIDCUnmarshal(t *testing.T) { for _, tc := range []struct { diff --git a/lib/services/user_test.go b/lib/services/user_test.go index 7e64cc25ec965..4f47f15c72aa3 100644 --- a/lib/services/user_test.go +++ b/lib/services/user_test.go @@ -273,7 +273,7 @@ func TestOIDCMapping(t *testing.T) { } for _, input := range testCase.inputs { comment := fmt.Sprintf("OIDC Test case %v %q, input %q", i, testCase.comment, input.comment) - _, outRoles := TraitsToRoles(conn.GetTraitMappings(), OIDCClaimsToTraits(input.claims)) + _, outRoles := TraitsToRoles(conn.GetTraitMappings(), oidcClaimsToTraits(input.claims)) require.Empty(t, cmp.Diff(outRoles, input.expectedRoles), comment) } @@ -325,6 +325,25 @@ func claimMappingsToAttributeMappings(in []types.ClaimMapping) []types.Attribute return out } +// oidcClaimsToTraits converts OIDC-style claims into teleport-specific trait format +func oidcClaimsToTraits(claims jose.Claims) map[string][]string { + traits := make(map[string][]string) + + for claimName := range claims { + claimValue, ok, _ := claims.StringClaim(claimName) + if ok { + traits[claimName] = []string{claimValue} + continue + } + claimValues, ok, _ := claims.StringsClaim(claimName) + if ok { + traits[claimName] = claimValues + } + } + + return traits +} + // claimsToAttributes maps jose.Claims type to attributes for testing func claimsToAttributes(claims jose.Claims) saml2.AssertionInfo { info := saml2.AssertionInfo{ From 485154d35651443b3c8b2c8706a0b980fe05f6c5 Mon Sep 17 00:00:00 2001 From: rosstimothy <39066650+rosstimothy@users.noreply.github.com> Date: Tue, 12 Nov 2024 09:18:37 -0500 Subject: [PATCH 009/111] Remove go-oidc dependency from lib/jwt (#48622) (#48670) Abstracts the claims extraction via a new IDToken interface instead of importing oidc.IDToken directly. This is being done to reduce the footprint of the outdated go-oidc library in hopes that we can move off our internal and outdated fork. --- lib/jwt/jwt.go | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/lib/jwt/jwt.go b/lib/jwt/jwt.go index 27d2abb91240d..e797b2e4f73ef 100644 --- a/lib/jwt/jwt.go +++ b/lib/jwt/jwt.go @@ -31,7 +31,6 @@ import ( "strings" "time" - "github.com/coreos/go-oidc" "github.com/go-jose/go-jose/v3" "github.com/go-jose/go-jose/v3/cryptosigner" "github.com/go-jose/go-jose/v3/jwt" @@ -573,11 +572,18 @@ func GenerateKeyPair() ([]byte, []byte, error) { return public, private, nil } +// IDToken allows introspecting claims from an OpenID Connect +// ID Token. +type IDToken interface { + // Claims unmarshals the raw JSON payload of the ID Token into a provided struct. + Claims(v any) error +} + // CheckNotBefore ensures the token was not issued in the future. // https://www.rfc-editor.org/rfc/rfc7519#section-4.1.5 // 4.1.5. "nbf" (Not Before) Claim // TODO(strideynet): upstream support for `nbf` into the go-oidc lib. -func CheckNotBefore(now time.Time, leeway time.Duration, token *oidc.IDToken) error { +func CheckNotBefore(now time.Time, leeway time.Duration, token IDToken) error { claims := struct { NotBefore *JSONTime `json:"nbf"` }{} From eb2db6cd50423bbb1f3efc07b6abd08be5efbda3 Mon Sep 17 00:00:00 2001 From: Brian Joerger Date: Tue, 12 Nov 2024 06:32:16 -0800 Subject: [PATCH 010/111] Remove unused NewCLIPromptV2. (#48239) (#48643) --- e | 2 +- lib/client/mfa/cli.go | 6 ------ 2 files changed, 1 insertion(+), 7 deletions(-) diff --git a/e b/e index 8254052bc2a4f..50158fead564c 160000 --- a/e +++ b/e @@ -1 +1 @@ -Subproject commit 8254052bc2a4f53718bdf44502caf329e024b9ec +Subproject commit 50158fead564c3684252b2ec6686256997e3dbf3 diff --git a/lib/client/mfa/cli.go b/lib/client/mfa/cli.go index 40127b314e06d..a956775961012 100644 --- a/lib/client/mfa/cli.go +++ b/lib/client/mfa/cli.go @@ -72,12 +72,6 @@ func NewCLIPrompt(cfg *CLIPromptConfig) *CLIPrompt { } } -// NewCLIPromptV2 returns a new CLI mfa prompt with the given config. -// TODO(Joerger): remove once /e is no longer dependent on this. -func NewCLIPromptV2(cfg *CLIPromptConfig) *CLIPrompt { - return NewCLIPrompt(cfg) -} - func (c *CLIPrompt) stdin() prompt.StdinReader { if c.cfg.StdinFunc == nil { return prompt.Stdin() From be7a1749740599f33d2c45dc94528d68201638b7 Mon Sep 17 00:00:00 2001 From: rosstimothy <39066650+rosstimothy@users.noreply.github.com> Date: Tue, 12 Nov 2024 11:25:59 -0500 Subject: [PATCH 011/111] Remove deprecated slack plugin credentials (#48702) (#48818) Follow up to https://github.com/gravitational/teleport/pull/48596 to remove the deprecated field now that https://github.com/gravitational/teleport.e/pull/5373 has removed the last usages. --- lib/config/configuration_test.go | 4 ---- lib/config/fileconf.go | 5 ----- lib/service/servicecfg/auth.go | 5 ----- 3 files changed, 14 deletions(-) diff --git a/lib/config/configuration_test.go b/lib/config/configuration_test.go index 8de8f9a10d6ea..cc110c629be5b 100644 --- a/lib/config/configuration_test.go +++ b/lib/config/configuration_test.go @@ -3662,10 +3662,6 @@ func TestAuthHostedPlugins(t *testing.T) { applyErr: require.NoError, assert: func(t *testing.T, p servicecfg.HostedPluginsConfig) { require.True(t, p.Enabled) - require.NotNil(t, p.OAuthProviders.Slack) - require.Equal(t, "foo", p.OAuthProviders.Slack.ID) - require.Equal(t, "bar", p.OAuthProviders.Slack.Secret) - require.NotNil(t, p.OAuthProviders.SlackCredentials) require.Equal(t, "foo", p.OAuthProviders.SlackCredentials.ClientID) require.Equal(t, "bar", p.OAuthProviders.SlackCredentials.ClientSecret) diff --git a/lib/config/fileconf.go b/lib/config/fileconf.go index 510d87e4f9f8f..5d12685720606 100644 --- a/lib/config/fileconf.go +++ b/lib/config/fileconf.go @@ -33,7 +33,6 @@ import ( "strings" "time" - "github.com/coreos/go-oidc/oauth2" "github.com/gravitational/trace" log "github.com/sirupsen/logrus" "golang.org/x/crypto/acme" @@ -1334,10 +1333,6 @@ func (p *PluginOAuthProviders) Parse() (servicecfg.PluginOAuthProviders, error) if err != nil { return out, trace.Wrap(err) } - out.Slack = &oauth2.ClientCredentials{ - ID: slack.ClientID, - Secret: slack.ClientSecret, - } out.SlackCredentials = slack } return out, nil diff --git a/lib/service/servicecfg/auth.go b/lib/service/servicecfg/auth.go index 8c5491c16522f..8e2d5244fc409 100644 --- a/lib/service/servicecfg/auth.go +++ b/lib/service/servicecfg/auth.go @@ -19,7 +19,6 @@ package servicecfg import ( - "github.com/coreos/go-oidc/oauth2" "github.com/dustin/go-humanize" "github.com/gravitational/trace" "github.com/jonboulle/clockwork" @@ -180,10 +179,6 @@ type HostedPluginsConfig struct { // PluginOAuthProviders holds application credentials for each // 3rd party API provider type PluginOAuthProviders struct { - // TODO(tross) delete once teleport.e has been converted. - // Deprecated: use SlackCredentials instead. - Slack *oauth2.ClientCredentials - SlackCredentials *OAuthClientCredentials } From 6c7415be96ed0be976e492a23d1ef0a981b2b570 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=C5=82=20Cie=C5=9Blak?= Date: Tue, 12 Nov 2024 19:02:59 +0100 Subject: [PATCH 012/111] Update cluster dropdown styles (#48800) Co-authored-by: Michael --- .../ClusterDropdown/ClusterDropdown.tsx | 96 ++++++++++++++++--- 1 file changed, 84 insertions(+), 12 deletions(-) diff --git a/web/packages/shared/components/ClusterDropdown/ClusterDropdown.tsx b/web/packages/shared/components/ClusterDropdown/ClusterDropdown.tsx index 7387c17778894..fdccb6ae9045b 100644 --- a/web/packages/shared/components/ClusterDropdown/ClusterDropdown.tsx +++ b/web/packages/shared/components/ClusterDropdown/ClusterDropdown.tsx @@ -17,8 +17,9 @@ */ import React, { useState, useEffect } from 'react'; +import styled from 'styled-components'; import { useHistory } from 'react-router'; -import { ButtonSecondary, Flex, Menu, MenuItem, Text } from 'design'; +import { Box, ButtonSecondary, Flex, Menu, MenuItem, Text } from 'design'; import { ChevronDown } from 'design/Icon'; import cfg from 'teleport/config'; import { Cluster } from 'teleport/services/clusters'; @@ -66,6 +67,8 @@ export function ClusterDropdown({ const [options, setOptions] = React.useState( createOptions(initialClusters) ); + const showInput = options.length > 5 ? true : false; + const [clusterFilter, setClusterFilter] = useState(''); const history = useHistory(); const [anchorEl, setAnchorEl] = useState(null); @@ -133,6 +136,17 @@ export function ClusterDropdown({ return null; } + const onClusterFilterChange = (e: React.ChangeEvent) => { + setClusterFilter(e.target.value); + }; + + let filteredOptions = options; + if (clusterFilter) { + filteredOptions = options.filter(cluster => + cluster.label.toLowerCase().includes(clusterFilter.toLowerCase()) + ); + } + return ( @@ -150,7 +164,11 @@ export function ClusterDropdown({ `margin-top: 36px;`} + popoverCss={() => ` + margin-top: ${showInput ? '40px' : '4px'}; + max-height: 265px; + overflow: hidden; + `} transformOrigin={{ vertical: 'top', horizontal: 'left', @@ -163,20 +181,74 @@ export function ClusterDropdown({ open={Boolean(anchorEl)} onClose={handleClose} > - {options.map(cluster => ( - onChangeOption(cluster.value)} + {showInput ? ( + p.theme.space[2]}px; + `} > - - {cluster.label} - - - ))} + + + ) : ( + // without this empty box, the entire positioning is way out of whack + // TODO (avatus): find out why during menu/popover rework + + )} + + {filteredOptions.map(cluster => ( + onChangeOption(cluster.value)} + > + + {cluster.label} + + + ))} + ); } type Option = { value: string; label: string }; + +const ClusterFilter = styled.input( + ({ theme }) => ` + background-color: ${theme.colors.spotBackground[0]}; + padding-left: ${theme.space[3]}px; + width: 100%; + border-radius: 29px; + box-sizing: border-box; + color: ${theme.colors.text.main}; + height: 32px; + font-size: ${theme.fontSizes[1]}px; + outline: none; + border: none; + &:focus { + border: none; + } + + ::placeholder { + color: ${theme.colors.text.muted}; + opacity: 1; + } +` +); From dff5bcbe1405e9847e90bfec6d4edb37586f9c30 Mon Sep 17 00:00:00 2001 From: Steven Martin Date: Tue, 12 Nov 2024 16:38:57 -0500 Subject: [PATCH 013/111] [v15] docs: update azure postgres mysql (#48779) * docs: update azure postgres mysql * docs: azure postgres mysql verbiage update Co-authored-by: Paul Gottschling * docs: remove admonition wrapper on instrs * update links for generated content --------- Co-authored-by: Paul Gottschling --- .../azure-postgres-mysql.mdx | 257 +++++++++--------- .../zz_generated.teleport-kube-agent.mdx | 2 +- .../chart/teleport-kube-agent/values.yaml | 2 +- 3 files changed, 136 insertions(+), 125 deletions(-) diff --git a/docs/pages/enroll-resources/database-access/enroll-azure-databases/azure-postgres-mysql.mdx b/docs/pages/enroll-resources/database-access/enroll-azure-databases/azure-postgres-mysql.mdx index 464041d58c8d1..b639ab2a0673a 100644 --- a/docs/pages/enroll-resources/database-access/enroll-azure-databases/azure-postgres-mysql.mdx +++ b/docs/pages/enroll-resources/database-access/enroll-azure-databases/azure-postgres-mysql.mdx @@ -35,135 +35,15 @@ database. Service. - (!docs/pages/includes/tctl.mdx!) -## Step 1/5. Install the Teleport Database Service -(!docs/pages/includes/tctl-token.mdx serviceName="Database" tokenType="db" tokenFile="/tmp/token"!) - -Install Teleport on the host where you will run the Teleport Database Service: - -(!docs/pages/includes/install-linux.mdx!) - -Create the Database Service configuration. - - - - -- Specify the region for your database(s) in `--azure-postgres-discovery`. - -- Replace the `--proxy` value with your Teleport proxy address or Teleport cloud - URI (e.g. `mytenant.teleport.sh:443`): - - ```code - $ sudo teleport db configure create \ - -o file \ - --proxy=teleport.example.com:443 \ - --token=/tmp/token \ - --azure-postgres-discovery=eastus - ``` - - - - -- Specify the region for your database(s) in `--azure-mysql-discovery`. - -- Replace the `--proxy` value with your Teleport proxy address or Teleport cloud - URI (e.g. `mytenant.teleport.sh:443`): - - ```code - $ sudo teleport db configure create \ - -o file \ - --proxy=teleport.example.com:443 \ - --token=/tmp/token \ - --azure-mysql-discovery=eastus - ``` - - - - - -Run the following command on your Database Service host: - - ```code - $ sudo teleport db configure create \ - -o file \ - --proxy=teleport.example.com:443 \ - --token=/tmp/token \ - --azure-mysql-discovery=eastus \ - --azure-postgres-discovery=eastus - ``` - - -This will create two `types` entities in `teleport.yaml`, one for each database -type. This is useful if you want different regions, tags, or labels for each -database type. - -Alternatively, you can edit `teleport.yaml` to include both database types in a -single entry: - -```yaml -db_service: - azure: - - types: ["mysql", "postgres"] - ... -``` - - - - - - - -This command will generate a Database Service configuration with Azure MySQL/Postgres -database auto-discovery enabled in the `eastus` region and place it at the -`/etc/teleport.yaml` location. - -### Create a Teleport role - -On your workstation logged in to your Teleport cluster with `tsh`, define a new -role to provide access to your Azure database. Create a file called `azure-database-role.yaml` with the following content: - -```yaml -version: v7 -kind: role -metadata: - name: azure-database-access -spec: - allow: - db_labels: - 'engine': - - "Microsoft.DBforMySQL/servers" - - "Microsoft.DBforMySQL/flexibleServers" - - "Microsoft.DBforPostgreSQL/servers" - - "Microsoft.DBforPostgreSQL/flexibleServers" - db_names: - - '*' - db_users: - - teleport -``` - -| Flag | Description | -|----------------------------|------------------------------------------------------------------------------------------------------------------------------------------| -| `--db-users` | List of database usernames the user will be allowed to use when connecting to the databases. A wildcard allows any user. | -| `--db-names` | List of logical databases (aka schemas) the user will be allowed to connect to within a database server. A wildcard allows any database. | -| `--db-labels` | List of labels assigned to the database the user will be able to access. A wildcard entry allows any database. | - -Save this file and apply it to your Teleport cluster: - -```code -$ tctl create -f azure-database-role.yaml -role 'azure-database-role.yaml' has been created -``` - -(\!docs/pages/includes/add-role-to-user.mdx role="azure-database-access" \!) - -## Step 2/5. Configure Azure service principal +## Step 1/5. Configure Azure service principal To authenticate with PostgreSQL or MySQL databases, Teleport Database Service needs to obtain access tokens from Azure AD. (!docs/pages/includes/database-access/azure-configure-service-principal.mdx!) -## Step 3/5. Configure IAM permissions for Teleport +## Step 2/5. Configure IAM permissions for Teleport ### Create a custom role @@ -228,7 +108,7 @@ and replace the subscription in "assignableScopes" with your own subscription id (!docs/pages/includes/database-access/azure-assign-service-principal.mdx!) -## Step 4/5. Create Azure database users +## Step 3/5. Create Azure database users To let Teleport connect to your Azure database authenticating as a service principal, you need to create Azure AD users authenticated by that principal in the database. @@ -367,6 +247,137 @@ GRANT ALL ON `%`.* TO 'teleport'@'%'; You can create multiple database users identified by the same service principal. +## Step 4/5. Install the Teleport Database Service + +(!docs/pages/includes/tctl-token.mdx serviceName="Database" tokenType="db" tokenFile="/tmp/token"!) + +Install Teleport on the host where you will run the Teleport Database Service: + +(!docs/pages/includes/install-linux.mdx!) + +Create the Database Service configuration. + + + + +- Specify the region for your database(s) in `--azure-postgres-discovery`. + +- Replace the `--proxy` value with your Teleport Proxy Service address or Teleport Enterprise (Cloud) + URI (e.g. `example.teleport.sh:443`): + + ```code + $ sudo teleport db configure create \ + -o file \ + --proxy=teleport.example.com:443 \ + --token=/tmp/token \ + --azure-postgres-discovery=eastus + ``` + + + + +- Specify the region for your database(s) in `--azure-mysql-discovery`. + +- Replace the `--proxy` value with your Teleport Proxy Service address or Teleport Enterprise (Cloud) + URI (e.g. `example.teleport.sh:443`): + + ```code + $ sudo teleport db configure create \ + -o file \ + --proxy=teleport.example.com:443 \ + --token=/tmp/token \ + --azure-mysql-discovery=eastus + ``` + + + + + +Run the following command on your Database Service host: + + ```code + $ sudo teleport db configure create \ + -o file \ + --proxy=teleport.example.com:443 \ + --token=/tmp/token \ + --azure-mysql-discovery=eastus \ + --azure-postgres-discovery=eastus + ``` + +This will create two `types` entities in `teleport.yaml`, one for each database +type. This is useful if you want different regions, tags, or labels for each +database type. + +Alternatively, you can edit `teleport.yaml` to include both database types in a +single entry: + +```yaml +db_service: + azure: + - types: ["mysql", "postgres"] + ... +``` + + + + + +This command will generate a Database Service configuration with Azure MySQL/Postgres +database auto-discovery enabled in the `eastus` region and place it at the +`/etc/teleport.yaml` location. + +### Create a Teleport role + +On your workstation logged in to your Teleport cluster with `tsh`, define a new +role to provide access to your Azure database. Create a file called `azure-database-role.yaml` with the following content: + +```yaml +version: v7 +kind: role +metadata: + name: azure-database-access +spec: + allow: + db_labels: + 'engine': + - "Microsoft.DBforMySQL/servers" + - "Microsoft.DBforMySQL/flexibleServers" + - "Microsoft.DBforPostgreSQL/servers" + - "Microsoft.DBforPostgreSQL/flexibleServers" + db_names: + - '*' + db_users: + - teleport +``` + +| Flag | Description | +|----------------------------|------------------------------------------------------------------------------------------------------------------------------------------| +| `--db-users` | List of database usernames the user will be allowed to use when connecting to the databases. A wildcard allows any user. | +| `--db-names` | List of logical databases (aka schemas) the user will be allowed to connect to within a database server. A wildcard allows any database. | +| `--db-labels` | List of labels assigned to the database the user will be able to access. A wildcard entry allows any database. | + +Save this file and apply it to your Teleport cluster: + +```code +$ tctl create -f azure-database-role.yaml +role 'azure-database-role.yaml' has been created +``` + +(\!docs/pages/includes/add-role-to-user.mdx role="azure-database-access" \!) + +### Start Teleport Database Service + +(!docs/pages/includes/start-teleport.mdx service="the Teleport Database Service"!) + + + A single Teleport process can run multiple different services, for example + multiple Database Service agents as well as the SSH Service or Application + Service. + + ## Step 5/5. Connect Log in to your Teleport cluster. Your Azure database should appear in the list of diff --git a/docs/pages/includes/helm-reference/zz_generated.teleport-kube-agent.mdx b/docs/pages/includes/helm-reference/zz_generated.teleport-kube-agent.mdx index 49ca46c9cf4e3..56ad39b702e47 100644 --- a/docs/pages/includes/helm-reference/zz_generated.teleport-kube-agent.mdx +++ b/docs/pages/includes/helm-reference/zz_generated.teleport-kube-agent.mdx @@ -263,7 +263,7 @@ annotations: `azureDatabases` configures Azure database auto-discovery. - For Azure database auto-discovery to work, your Database Service pods will need to have appropriate IAM permissions as per the [database documentation](../../enroll-resources/database-access/enroll-azure-databases/azure-postgres-mysql.mdx#step-35-configure-iam-permissions-for-teleport). + For Azure database auto-discovery to work, your Database Service pods will need to have appropriate IAM permissions as per the [database documentation](../../enroll-resources/database-access/enroll-azure-databases/azure-postgres-mysql.mdx#step-25-configure-iam-permissions-for-teleport). After configuring a service principal with appropriate IAM permissions, you must pass credentials to the pods. The easiest way is to use an Azure client secret. diff --git a/examples/chart/teleport-kube-agent/values.yaml b/examples/chart/teleport-kube-agent/values.yaml index 63388f51bdb56..5962057fc99fc 100644 --- a/examples/chart/teleport-kube-agent/values.yaml +++ b/examples/chart/teleport-kube-agent/values.yaml @@ -218,7 +218,7 @@ awsDatabases: [] # azureDatabases(list) -- configures Azure database auto-discovery. # -# For Azure database auto-discovery to work, your Database Service pods will need to have appropriate IAM permissions as per the [database documentation](../../enroll-resources/database-access/enroll-azure-databases/azure-postgres-mysql.mdx#step-35-configure-iam-permissions-for-teleport). +# For Azure database auto-discovery to work, your Database Service pods will need to have appropriate IAM permissions as per the [database documentation](../../enroll-resources/database-access/enroll-azure-databases/azure-postgres-mysql.mdx#step-25-configure-iam-permissions-for-teleport). # # After configuring a service principal with appropriate IAM permissions, you must pass credentials to the pods. # The easiest way is to use an Azure client secret. From 8966656aa8be7d218b5b85dc94ae5100a2ac994b Mon Sep 17 00:00:00 2001 From: Cam Hutchison Date: Wed, 13 Nov 2024 10:57:50 +1100 Subject: [PATCH 014/111] Release 15.4.22 (#48866) * Update e ref for 15.4.22 release * Release 15.4.22 --- CHANGELOG.md | 25 ++++++++ Makefile | 2 +- api/version.go | 2 +- .../macos/tsh/tsh.app/Contents/Info.plist | 4 +- .../macos/tshdev/tsh.app/Contents/Info.plist | 4 +- docs/cspell.json | 1 + e | 2 +- examples/chart/access/discord/Chart.yaml | 2 +- .../__snapshot__/configmap_test.yaml.snap | 4 +- .../__snapshot__/deployment_test.yaml.snap | 8 +-- examples/chart/access/email/Chart.yaml | 2 +- .../__snapshot__/configmap_test.yaml.snap | 24 +++---- .../__snapshot__/deployment_test.yaml.snap | 58 ++++++++--------- examples/chart/access/jira/Chart.yaml | 2 +- .../__snapshot__/configmap_test.yaml.snap | 4 +- .../__snapshot__/deployment_test.yaml.snap | 8 +-- examples/chart/access/mattermost/Chart.yaml | 2 +- .../__snapshot__/configmap_test.yaml.snap | 4 +- .../__snapshot__/deployment_test.yaml.snap | 28 ++++---- examples/chart/access/msteams/Chart.yaml | 2 +- .../__snapshot__/configmap_test.yaml.snap | 4 +- .../__snapshot__/deployment_test.yaml.snap | 8 +-- examples/chart/access/pagerduty/Chart.yaml | 2 +- .../__snapshot__/configmap_test.yaml.snap | 4 +- .../__snapshot__/deployment_test.yaml.snap | 8 +-- examples/chart/access/slack/Chart.yaml | 2 +- .../__snapshot__/configmap_test.yaml.snap | 4 +- .../__snapshot__/deployment_test.yaml.snap | 8 +-- examples/chart/event-handler/Chart.yaml | 2 +- .../__snapshot__/configmap_test.yaml.snap | 4 +- .../__snapshot__/deployment_test.yaml.snap | 6 +- examples/chart/tbot/Chart.yaml | 2 +- .../__snapshot__/deployment_test.yaml.snap | 8 +-- examples/chart/teleport-cluster/Chart.yaml | 2 +- .../charts/teleport-operator/Chart.yaml | 2 +- .../auth_clusterrole_test.yaml.snap | 4 +- .../__snapshot__/auth_config_test.yaml.snap | 4 +- .../auth_deployment_test.yaml.snap | 8 +-- .../__snapshot__/proxy_config_test.yaml.snap | 4 +- .../proxy_deployment_test.yaml.snap | 36 +++++------ examples/chart/teleport-kube-agent/Chart.yaml | 2 +- .../__snapshot__/deployment_test.yaml.snap | 58 ++++++++--------- .../tests/__snapshot__/job_test.yaml.snap | 12 ++-- .../__snapshot__/statefulset_test.yaml.snap | 64 +++++++++---------- .../updater_deployment_test.yaml.snap | 4 +- 45 files changed, 238 insertions(+), 212 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b67393dcb9d0c..adfad91e9ed45 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,30 @@ # Changelog +## 15.4.22 (11/12/24) + +* Added a search input to the cluster dropdown in the Web UI when there's more than five clusters to show. [#48800](https://github.com/gravitational/teleport/pull/48800) +* Fixed bug in Kubernetes session recordings where both root and leaf cluster recorded the same Kubernetes session. Recordings of leaf resources are only available in leaf clusters. [#48739](https://github.com/gravitational/teleport/pull/48739) +* Machine ID can now be forced to use the explicitly configured proxy address using the `TBOT_USE_PROXY_ADDR` environment variable. This should better support split proxy address operation. [#48677](https://github.com/gravitational/teleport/pull/48677) +* Fixed undefined error in open source version when clicking on `Add Application` tile in the Enroll Resources page in the Web UI. [#48617](https://github.com/gravitational/teleport/pull/48617) +* Updated Go to 1.22.9. [#48582](https://github.com/gravitational/teleport/pull/48582) +* The teleport-cluster Helm chart now uses the configured `serviceAccount.name` from chart values for its pre-deploy configuration check Jobs. [#48578](https://github.com/gravitational/teleport/pull/48578) +* Fixed a bug that prevented the Teleport UI from properly displaying Plugin Audit log details. [#48463](https://github.com/gravitational/teleport/pull/48463) +* Fixed showing the list of access requests in Teleport Connect when a leaf cluster is selected in the cluster selector. [#48442](https://github.com/gravitational/teleport/pull/48442) +* Fixed a rare "internal error" on older U2F authenticators when using tsh. [#48403](https://github.com/gravitational/teleport/pull/48403) +* Fixed `tsh play` not skipping idle time when `--skip-idle-time` was provided. [#48398](https://github.com/gravitational/teleport/pull/48398) +* Added a warning to `tctl edit` about dynamic edits to statically configured resources. [#48393](https://github.com/gravitational/teleport/pull/48393) +* Fixed a Teleport Kubernetes Operator bug that happened for OIDCConnector resources with non-nil `max_age`. [#48377](https://github.com/gravitational/teleport/pull/48377) +* Updated host user creation to prevent local password expiration policies from affecting Teleport managed users. [#48162](https://github.com/gravitational/teleport/pull/48162) +* During the Set Up Access of the Enroll New Resource flows, Okta users will be asked to change the role instead of entering the principals and getting an error afterwards. [#47958](https://github.com/gravitational/teleport/pull/47958) +* Fixed `teleport_connected_resource` metric overshooting after keepalive errors. [#47950](https://github.com/gravitational/teleport/pull/47950) +* Fixed an issue preventing connections with users whose configured home directories were inaccessible. [#47917](https://github.com/gravitational/teleport/pull/47917) +* Added a `resolve` command to tsh that may be used as the target for a Match exec condition in an SSH config. [#47867](https://github.com/gravitational/teleport/pull/47867) +* Postgres database session start events now include the Postgres backend PID for the session. [#47644](https://github.com/gravitational/teleport/pull/47644) +* Updated `tsh ssh` to support the `--` delimiter similar to openssh. It is now possible to execute a command via `tsh ssh user@host -- echo test` or `tsh ssh -- host uptime`. [#47494](https://github.com/gravitational/teleport/pull/47494) + +Enterprise: +* Jamf requests from Teleport set "teleport/$version" as the User-Agent. + ## 15.4.21 (10/22/24) ### Security fixes diff --git a/Makefile b/Makefile index 7f96ba78d3a70..e39a74202c25e 100644 --- a/Makefile +++ b/Makefile @@ -11,7 +11,7 @@ # Stable releases: "1.0.0" # Pre-releases: "1.0.0-alpha.1", "1.0.0-beta.2", "1.0.0-rc.3" # Master/dev branch: "1.0.0-dev" -VERSION=15.4.21 +VERSION=15.4.22 DOCKER_IMAGE ?= teleport diff --git a/api/version.go b/api/version.go index 5a491d8682c7b..3b15a9ac03a5d 100644 --- a/api/version.go +++ b/api/version.go @@ -3,6 +3,6 @@ package api import "github.com/coreos/go-semver/semver" -const Version = "15.4.21" +const Version = "15.4.22" var SemVersion = semver.New(Version) diff --git a/build.assets/macos/tsh/tsh.app/Contents/Info.plist b/build.assets/macos/tsh/tsh.app/Contents/Info.plist index f770156308c21..7ccf3354f4873 100644 --- a/build.assets/macos/tsh/tsh.app/Contents/Info.plist +++ b/build.assets/macos/tsh/tsh.app/Contents/Info.plist @@ -19,13 +19,13 @@ CFBundlePackageType APPL CFBundleShortVersionString - 15.4.21 + 15.4.22 CFBundleSupportedPlatforms MacOSX CFBundleVersion - 15.4.21 + 15.4.22 DTCompiler com.apple.compilers.llvm.clang.1_0 DTPlatformBuild diff --git a/build.assets/macos/tshdev/tsh.app/Contents/Info.plist b/build.assets/macos/tshdev/tsh.app/Contents/Info.plist index a20bb79aefab9..844bd12b7b84f 100644 --- a/build.assets/macos/tshdev/tsh.app/Contents/Info.plist +++ b/build.assets/macos/tshdev/tsh.app/Contents/Info.plist @@ -17,13 +17,13 @@ CFBundlePackageType APPL CFBundleShortVersionString - 15.4.21 + 15.4.22 CFBundleSupportedPlatforms MacOSX CFBundleVersion - 15.4.21 + 15.4.22 DTCompiler com.apple.compilers.llvm.clang.1_0 DTPlatformBuild diff --git a/docs/cspell.json b/docs/cspell.json index 16c02f3f03521..2a71da58b196c 100644 --- a/docs/cspell.json +++ b/docs/cspell.json @@ -566,6 +566,7 @@ "jumphost", "jwks", "jwkset", + "keepalive", "keepalives", "keyfile", "keymap", diff --git a/e b/e index 50158fead564c..e9144130436db 160000 --- a/e +++ b/e @@ -1 +1 @@ -Subproject commit 50158fead564c3684252b2ec6686256997e3dbf3 +Subproject commit e9144130436dbb95deac958410a151b707a25c23 diff --git a/examples/chart/access/discord/Chart.yaml b/examples/chart/access/discord/Chart.yaml index 6e93fe382ffb2..1ae60c9747dea 100644 --- a/examples/chart/access/discord/Chart.yaml +++ b/examples/chart/access/discord/Chart.yaml @@ -1,4 +1,4 @@ -.version: &version "15.4.21" +.version: &version "15.4.22" apiVersion: v2 name: teleport-plugin-discord diff --git a/examples/chart/access/discord/tests/__snapshot__/configmap_test.yaml.snap b/examples/chart/access/discord/tests/__snapshot__/configmap_test.yaml.snap index 7a4a748815500..7c762b9f4fce1 100644 --- a/examples/chart/access/discord/tests/__snapshot__/configmap_test.yaml.snap +++ b/examples/chart/access/discord/tests/__snapshot__/configmap_test.yaml.snap @@ -24,6 +24,6 @@ should match the snapshot: app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-discord - app.kubernetes.io/version: 15.4.21 - helm.sh/chart: teleport-plugin-discord-15.4.21 + app.kubernetes.io/version: 15.4.22 + helm.sh/chart: teleport-plugin-discord-15.4.22 name: RELEASE-NAME-teleport-plugin-discord diff --git a/examples/chart/access/discord/tests/__snapshot__/deployment_test.yaml.snap b/examples/chart/access/discord/tests/__snapshot__/deployment_test.yaml.snap index c9762cdbe2193..bf714f0695534 100644 --- a/examples/chart/access/discord/tests/__snapshot__/deployment_test.yaml.snap +++ b/examples/chart/access/discord/tests/__snapshot__/deployment_test.yaml.snap @@ -7,8 +7,8 @@ should match the snapshot: app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-discord - app.kubernetes.io/version: 15.4.21 - helm.sh/chart: teleport-plugin-discord-15.4.21 + app.kubernetes.io/version: 15.4.22 + helm.sh/chart: teleport-plugin-discord-15.4.22 name: RELEASE-NAME-teleport-plugin-discord spec: replicas: 1 @@ -22,8 +22,8 @@ should match the snapshot: app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-discord - app.kubernetes.io/version: 15.4.21 - helm.sh/chart: teleport-plugin-discord-15.4.21 + app.kubernetes.io/version: 15.4.22 + helm.sh/chart: teleport-plugin-discord-15.4.22 spec: containers: - command: diff --git a/examples/chart/access/email/Chart.yaml b/examples/chart/access/email/Chart.yaml index df83d78f058b3..aeaef830d7e9b 100644 --- a/examples/chart/access/email/Chart.yaml +++ b/examples/chart/access/email/Chart.yaml @@ -1,4 +1,4 @@ -.version: &version "15.4.21" +.version: &version "15.4.22" apiVersion: v2 name: teleport-plugin-email diff --git a/examples/chart/access/email/tests/__snapshot__/configmap_test.yaml.snap b/examples/chart/access/email/tests/__snapshot__/configmap_test.yaml.snap index 111691aa9b73c..77919ca4c16b2 100644 --- a/examples/chart/access/email/tests/__snapshot__/configmap_test.yaml.snap +++ b/examples/chart/access/email/tests/__snapshot__/configmap_test.yaml.snap @@ -26,8 +26,8 @@ should match the snapshot (mailgun on): app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-email - app.kubernetes.io/version: 15.4.21 - helm.sh/chart: teleport-plugin-email-15.4.21 + app.kubernetes.io/version: 15.4.22 + helm.sh/chart: teleport-plugin-email-15.4.22 name: RELEASE-NAME-teleport-plugin-email should match the snapshot (smtp on): 1: | @@ -59,8 +59,8 @@ should match the snapshot (smtp on): app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-email - app.kubernetes.io/version: 15.4.21 - helm.sh/chart: teleport-plugin-email-15.4.21 + app.kubernetes.io/version: 15.4.22 + helm.sh/chart: teleport-plugin-email-15.4.22 name: RELEASE-NAME-teleport-plugin-email should match the snapshot (smtp on, no starttls): 1: | @@ -92,8 +92,8 @@ should match the snapshot (smtp on, no starttls): app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-email - app.kubernetes.io/version: 15.4.21 - helm.sh/chart: teleport-plugin-email-15.4.21 + app.kubernetes.io/version: 15.4.22 + helm.sh/chart: teleport-plugin-email-15.4.22 name: RELEASE-NAME-teleport-plugin-email should match the snapshot (smtp on, password file): 1: | @@ -125,8 +125,8 @@ should match the snapshot (smtp on, password file): app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-email - app.kubernetes.io/version: 15.4.21 - helm.sh/chart: teleport-plugin-email-15.4.21 + app.kubernetes.io/version: 15.4.22 + helm.sh/chart: teleport-plugin-email-15.4.22 name: RELEASE-NAME-teleport-plugin-email should match the snapshot (smtp on, roleToRecipients set): 1: | @@ -161,8 +161,8 @@ should match the snapshot (smtp on, roleToRecipients set): app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-email - app.kubernetes.io/version: 15.4.21 - helm.sh/chart: teleport-plugin-email-15.4.21 + app.kubernetes.io/version: 15.4.22 + helm.sh/chart: teleport-plugin-email-15.4.22 name: RELEASE-NAME-teleport-plugin-email should match the snapshot (smtp on, starttls disabled): 1: | @@ -194,6 +194,6 @@ should match the snapshot (smtp on, starttls disabled): app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-email - app.kubernetes.io/version: 15.4.21 - helm.sh/chart: teleport-plugin-email-15.4.21 + app.kubernetes.io/version: 15.4.22 + helm.sh/chart: teleport-plugin-email-15.4.22 name: RELEASE-NAME-teleport-plugin-email diff --git a/examples/chart/access/email/tests/__snapshot__/deployment_test.yaml.snap b/examples/chart/access/email/tests/__snapshot__/deployment_test.yaml.snap index 6b474c5fd50b1..c93a7b5dd82b6 100644 --- a/examples/chart/access/email/tests/__snapshot__/deployment_test.yaml.snap +++ b/examples/chart/access/email/tests/__snapshot__/deployment_test.yaml.snap @@ -7,8 +7,8 @@ should be possible to override volume name (smtp on): app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-email - app.kubernetes.io/version: 15.4.21 - helm.sh/chart: teleport-plugin-email-15.4.21 + app.kubernetes.io/version: 15.4.22 + helm.sh/chart: teleport-plugin-email-15.4.22 name: RELEASE-NAME-teleport-plugin-email spec: replicas: 1 @@ -22,8 +22,8 @@ should be possible to override volume name (smtp on): app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-email - app.kubernetes.io/version: 15.4.21 - helm.sh/chart: teleport-plugin-email-15.4.21 + app.kubernetes.io/version: 15.4.22 + helm.sh/chart: teleport-plugin-email-15.4.22 spec: containers: - command: @@ -34,7 +34,7 @@ should be possible to override volume name (smtp on): env: - name: TELEPORT_PLUGIN_FAIL_FAST value: "true" - image: public.ecr.aws/gravitational/teleport-plugin-email:15.4.21 + image: public.ecr.aws/gravitational/teleport-plugin-email:15.4.22 imagePullPolicy: IfNotPresent name: teleport-plugin-email ports: @@ -75,8 +75,8 @@ should match the snapshot: app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-email - app.kubernetes.io/version: 15.4.21 - helm.sh/chart: teleport-plugin-email-15.4.21 + app.kubernetes.io/version: 15.4.22 + helm.sh/chart: teleport-plugin-email-15.4.22 name: RELEASE-NAME-teleport-plugin-email spec: replicas: 1 @@ -90,8 +90,8 @@ should match the snapshot: app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-email - app.kubernetes.io/version: 15.4.21 - helm.sh/chart: teleport-plugin-email-15.4.21 + app.kubernetes.io/version: 15.4.22 + helm.sh/chart: teleport-plugin-email-15.4.22 spec: containers: - command: @@ -136,8 +136,8 @@ should match the snapshot (mailgun on): app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-email - app.kubernetes.io/version: 15.4.21 - helm.sh/chart: teleport-plugin-email-15.4.21 + app.kubernetes.io/version: 15.4.22 + helm.sh/chart: teleport-plugin-email-15.4.22 name: RELEASE-NAME-teleport-plugin-email spec: replicas: 1 @@ -151,8 +151,8 @@ should match the snapshot (mailgun on): app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-email - app.kubernetes.io/version: 15.4.21 - helm.sh/chart: teleport-plugin-email-15.4.21 + app.kubernetes.io/version: 15.4.22 + helm.sh/chart: teleport-plugin-email-15.4.22 spec: containers: - command: @@ -163,7 +163,7 @@ should match the snapshot (mailgun on): env: - name: TELEPORT_PLUGIN_FAIL_FAST value: "true" - image: public.ecr.aws/gravitational/teleport-plugin-email:15.4.21 + image: public.ecr.aws/gravitational/teleport-plugin-email:15.4.22 imagePullPolicy: IfNotPresent name: teleport-plugin-email ports: @@ -204,8 +204,8 @@ should match the snapshot (smtp on): app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-email - app.kubernetes.io/version: 15.4.21 - helm.sh/chart: teleport-plugin-email-15.4.21 + app.kubernetes.io/version: 15.4.22 + helm.sh/chart: teleport-plugin-email-15.4.22 name: RELEASE-NAME-teleport-plugin-email spec: replicas: 1 @@ -219,8 +219,8 @@ should match the snapshot (smtp on): app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-email - app.kubernetes.io/version: 15.4.21 - helm.sh/chart: teleport-plugin-email-15.4.21 + app.kubernetes.io/version: 15.4.22 + helm.sh/chart: teleport-plugin-email-15.4.22 spec: containers: - command: @@ -231,7 +231,7 @@ should match the snapshot (smtp on): env: - name: TELEPORT_PLUGIN_FAIL_FAST value: "true" - image: public.ecr.aws/gravitational/teleport-plugin-email:15.4.21 + image: public.ecr.aws/gravitational/teleport-plugin-email:15.4.22 imagePullPolicy: IfNotPresent name: teleport-plugin-email ports: @@ -272,8 +272,8 @@ should mount external secret (mailgun on): app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-email - app.kubernetes.io/version: 15.4.21 - helm.sh/chart: teleport-plugin-email-15.4.21 + app.kubernetes.io/version: 15.4.22 + helm.sh/chart: teleport-plugin-email-15.4.22 name: RELEASE-NAME-teleport-plugin-email spec: replicas: 1 @@ -287,8 +287,8 @@ should mount external secret (mailgun on): app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-email - app.kubernetes.io/version: 15.4.21 - helm.sh/chart: teleport-plugin-email-15.4.21 + app.kubernetes.io/version: 15.4.22 + helm.sh/chart: teleport-plugin-email-15.4.22 spec: containers: - command: @@ -299,7 +299,7 @@ should mount external secret (mailgun on): env: - name: TELEPORT_PLUGIN_FAIL_FAST value: "true" - image: public.ecr.aws/gravitational/teleport-plugin-email:15.4.21 + image: public.ecr.aws/gravitational/teleport-plugin-email:15.4.22 imagePullPolicy: IfNotPresent name: teleport-plugin-email ports: @@ -340,8 +340,8 @@ should mount external secret (smtp on): app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-email - app.kubernetes.io/version: 15.4.21 - helm.sh/chart: teleport-plugin-email-15.4.21 + app.kubernetes.io/version: 15.4.22 + helm.sh/chart: teleport-plugin-email-15.4.22 name: RELEASE-NAME-teleport-plugin-email spec: replicas: 1 @@ -355,8 +355,8 @@ should mount external secret (smtp on): app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-email - app.kubernetes.io/version: 15.4.21 - helm.sh/chart: teleport-plugin-email-15.4.21 + app.kubernetes.io/version: 15.4.22 + helm.sh/chart: teleport-plugin-email-15.4.22 spec: containers: - command: @@ -367,7 +367,7 @@ should mount external secret (smtp on): env: - name: TELEPORT_PLUGIN_FAIL_FAST value: "true" - image: public.ecr.aws/gravitational/teleport-plugin-email:15.4.21 + image: public.ecr.aws/gravitational/teleport-plugin-email:15.4.22 imagePullPolicy: IfNotPresent name: teleport-plugin-email ports: diff --git a/examples/chart/access/jira/Chart.yaml b/examples/chart/access/jira/Chart.yaml index 2c24c3128e025..445b00f549675 100644 --- a/examples/chart/access/jira/Chart.yaml +++ b/examples/chart/access/jira/Chart.yaml @@ -1,4 +1,4 @@ -.version: &version "15.4.21" +.version: &version "15.4.22" apiVersion: v2 name: teleport-plugin-jira diff --git a/examples/chart/access/jira/tests/__snapshot__/configmap_test.yaml.snap b/examples/chart/access/jira/tests/__snapshot__/configmap_test.yaml.snap index a5659554c1a60..9ff7d0f4c5734 100644 --- a/examples/chart/access/jira/tests/__snapshot__/configmap_test.yaml.snap +++ b/examples/chart/access/jira/tests/__snapshot__/configmap_test.yaml.snap @@ -32,6 +32,6 @@ should match the snapshot (smtp on): app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-jira - app.kubernetes.io/version: 15.4.21 - helm.sh/chart: teleport-plugin-jira-15.4.21 + app.kubernetes.io/version: 15.4.22 + helm.sh/chart: teleport-plugin-jira-15.4.22 name: RELEASE-NAME-teleport-plugin-jira diff --git a/examples/chart/access/jira/tests/__snapshot__/deployment_test.yaml.snap b/examples/chart/access/jira/tests/__snapshot__/deployment_test.yaml.snap index da70b4a54ea19..bb3ba35aba489 100644 --- a/examples/chart/access/jira/tests/__snapshot__/deployment_test.yaml.snap +++ b/examples/chart/access/jira/tests/__snapshot__/deployment_test.yaml.snap @@ -7,8 +7,8 @@ should match the snapshot: app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-jira - app.kubernetes.io/version: 15.4.21 - helm.sh/chart: teleport-plugin-jira-15.4.21 + app.kubernetes.io/version: 15.4.22 + helm.sh/chart: teleport-plugin-jira-15.4.22 name: RELEASE-NAME-teleport-plugin-jira spec: replicas: 1 @@ -22,8 +22,8 @@ should match the snapshot: app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-jira - app.kubernetes.io/version: 15.4.21 - helm.sh/chart: teleport-plugin-jira-15.4.21 + app.kubernetes.io/version: 15.4.22 + helm.sh/chart: teleport-plugin-jira-15.4.22 spec: containers: - command: diff --git a/examples/chart/access/mattermost/Chart.yaml b/examples/chart/access/mattermost/Chart.yaml index e60f6f5918493..c45e60cf9441b 100644 --- a/examples/chart/access/mattermost/Chart.yaml +++ b/examples/chart/access/mattermost/Chart.yaml @@ -1,4 +1,4 @@ -.version: &version "15.4.21" +.version: &version "15.4.22" apiVersion: v2 name: teleport-plugin-mattermost diff --git a/examples/chart/access/mattermost/tests/__snapshot__/configmap_test.yaml.snap b/examples/chart/access/mattermost/tests/__snapshot__/configmap_test.yaml.snap index ec5d928face2d..44ce898fcef36 100644 --- a/examples/chart/access/mattermost/tests/__snapshot__/configmap_test.yaml.snap +++ b/examples/chart/access/mattermost/tests/__snapshot__/configmap_test.yaml.snap @@ -22,6 +22,6 @@ should match the snapshot: app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-mattermost - app.kubernetes.io/version: 15.4.21 - helm.sh/chart: teleport-plugin-mattermost-15.4.21 + app.kubernetes.io/version: 15.4.22 + helm.sh/chart: teleport-plugin-mattermost-15.4.22 name: RELEASE-NAME-teleport-plugin-mattermost diff --git a/examples/chart/access/mattermost/tests/__snapshot__/deployment_test.yaml.snap b/examples/chart/access/mattermost/tests/__snapshot__/deployment_test.yaml.snap index 03b790fa650c5..86041dc3262e4 100644 --- a/examples/chart/access/mattermost/tests/__snapshot__/deployment_test.yaml.snap +++ b/examples/chart/access/mattermost/tests/__snapshot__/deployment_test.yaml.snap @@ -7,8 +7,8 @@ should match the snapshot: app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-mattermost - app.kubernetes.io/version: 15.4.21 - helm.sh/chart: teleport-plugin-mattermost-15.4.21 + app.kubernetes.io/version: 15.4.22 + helm.sh/chart: teleport-plugin-mattermost-15.4.22 name: RELEASE-NAME-teleport-plugin-mattermost spec: replicas: 1 @@ -22,8 +22,8 @@ should match the snapshot: app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-mattermost - app.kubernetes.io/version: 15.4.21 - helm.sh/chart: teleport-plugin-mattermost-15.4.21 + app.kubernetes.io/version: 15.4.22 + helm.sh/chart: teleport-plugin-mattermost-15.4.22 spec: containers: - command: @@ -75,8 +75,8 @@ should mount external secret: app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-mattermost - app.kubernetes.io/version: 15.4.21 - helm.sh/chart: teleport-plugin-mattermost-15.4.21 + app.kubernetes.io/version: 15.4.22 + helm.sh/chart: teleport-plugin-mattermost-15.4.22 name: RELEASE-NAME-teleport-plugin-mattermost spec: replicas: 1 @@ -90,8 +90,8 @@ should mount external secret: app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-mattermost - app.kubernetes.io/version: 15.4.21 - helm.sh/chart: teleport-plugin-mattermost-15.4.21 + app.kubernetes.io/version: 15.4.22 + helm.sh/chart: teleport-plugin-mattermost-15.4.22 spec: containers: - command: @@ -102,7 +102,7 @@ should mount external secret: env: - name: TELEPORT_PLUGIN_FAIL_FAST value: "true" - image: public.ecr.aws/gravitational/teleport-plugin-mattermost:15.4.21 + image: public.ecr.aws/gravitational/teleport-plugin-mattermost:15.4.22 imagePullPolicy: IfNotPresent name: teleport-plugin-mattermost ports: @@ -143,8 +143,8 @@ should override volume name: app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-mattermost - app.kubernetes.io/version: 15.4.21 - helm.sh/chart: teleport-plugin-mattermost-15.4.21 + app.kubernetes.io/version: 15.4.22 + helm.sh/chart: teleport-plugin-mattermost-15.4.22 name: RELEASE-NAME-teleport-plugin-mattermost spec: replicas: 1 @@ -158,8 +158,8 @@ should override volume name: app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-mattermost - app.kubernetes.io/version: 15.4.21 - helm.sh/chart: teleport-plugin-mattermost-15.4.21 + app.kubernetes.io/version: 15.4.22 + helm.sh/chart: teleport-plugin-mattermost-15.4.22 spec: containers: - command: @@ -170,7 +170,7 @@ should override volume name: env: - name: TELEPORT_PLUGIN_FAIL_FAST value: "true" - image: public.ecr.aws/gravitational/teleport-plugin-mattermost:15.4.21 + image: public.ecr.aws/gravitational/teleport-plugin-mattermost:15.4.22 imagePullPolicy: IfNotPresent name: teleport-plugin-mattermost ports: diff --git a/examples/chart/access/msteams/Chart.yaml b/examples/chart/access/msteams/Chart.yaml index 755dff434b449..0786ffc445d8f 100644 --- a/examples/chart/access/msteams/Chart.yaml +++ b/examples/chart/access/msteams/Chart.yaml @@ -1,4 +1,4 @@ -.version: &version "15.4.21" +.version: &version "15.4.22" apiVersion: v2 name: teleport-plugin-msteams diff --git a/examples/chart/access/msteams/tests/__snapshot__/configmap_test.yaml.snap b/examples/chart/access/msteams/tests/__snapshot__/configmap_test.yaml.snap index f121390dc415d..78c7237f71437 100644 --- a/examples/chart/access/msteams/tests/__snapshot__/configmap_test.yaml.snap +++ b/examples/chart/access/msteams/tests/__snapshot__/configmap_test.yaml.snap @@ -29,6 +29,6 @@ should match the snapshot: app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-msteams - app.kubernetes.io/version: 15.4.21 - helm.sh/chart: teleport-plugin-msteams-15.4.21 + app.kubernetes.io/version: 15.4.22 + helm.sh/chart: teleport-plugin-msteams-15.4.22 name: RELEASE-NAME-teleport-plugin-msteams diff --git a/examples/chart/access/msteams/tests/__snapshot__/deployment_test.yaml.snap b/examples/chart/access/msteams/tests/__snapshot__/deployment_test.yaml.snap index eda539fe1babb..15bc22f6e03be 100644 --- a/examples/chart/access/msteams/tests/__snapshot__/deployment_test.yaml.snap +++ b/examples/chart/access/msteams/tests/__snapshot__/deployment_test.yaml.snap @@ -7,8 +7,8 @@ should match the snapshot: app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-msteams - app.kubernetes.io/version: 15.4.21 - helm.sh/chart: teleport-plugin-msteams-15.4.21 + app.kubernetes.io/version: 15.4.22 + helm.sh/chart: teleport-plugin-msteams-15.4.22 name: RELEASE-NAME-teleport-plugin-msteams spec: replicas: 1 @@ -22,8 +22,8 @@ should match the snapshot: app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-msteams - app.kubernetes.io/version: 15.4.21 - helm.sh/chart: teleport-plugin-msteams-15.4.21 + app.kubernetes.io/version: 15.4.22 + helm.sh/chart: teleport-plugin-msteams-15.4.22 spec: containers: - command: diff --git a/examples/chart/access/pagerduty/Chart.yaml b/examples/chart/access/pagerduty/Chart.yaml index f07eb836a93b8..2f57994ad3f8d 100644 --- a/examples/chart/access/pagerduty/Chart.yaml +++ b/examples/chart/access/pagerduty/Chart.yaml @@ -1,4 +1,4 @@ -.version: &version "15.4.21" +.version: &version "15.4.22" apiVersion: v2 name: teleport-plugin-pagerduty diff --git a/examples/chart/access/pagerduty/tests/__snapshot__/configmap_test.yaml.snap b/examples/chart/access/pagerduty/tests/__snapshot__/configmap_test.yaml.snap index 10f7e14ed8e6e..688217eb53714 100644 --- a/examples/chart/access/pagerduty/tests/__snapshot__/configmap_test.yaml.snap +++ b/examples/chart/access/pagerduty/tests/__snapshot__/configmap_test.yaml.snap @@ -21,6 +21,6 @@ should match the snapshot (smtp on): app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-pagerduty - app.kubernetes.io/version: 15.4.21 - helm.sh/chart: teleport-plugin-pagerduty-15.4.21 + app.kubernetes.io/version: 15.4.22 + helm.sh/chart: teleport-plugin-pagerduty-15.4.22 name: RELEASE-NAME-teleport-plugin-pagerduty diff --git a/examples/chart/access/pagerduty/tests/__snapshot__/deployment_test.yaml.snap b/examples/chart/access/pagerduty/tests/__snapshot__/deployment_test.yaml.snap index 37f7bae77766b..d056ffed5ab8f 100644 --- a/examples/chart/access/pagerduty/tests/__snapshot__/deployment_test.yaml.snap +++ b/examples/chart/access/pagerduty/tests/__snapshot__/deployment_test.yaml.snap @@ -7,8 +7,8 @@ should match the snapshot: app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-pagerduty - app.kubernetes.io/version: 15.4.21 - helm.sh/chart: teleport-plugin-pagerduty-15.4.21 + app.kubernetes.io/version: 15.4.22 + helm.sh/chart: teleport-plugin-pagerduty-15.4.22 name: RELEASE-NAME-teleport-plugin-pagerduty spec: replicas: 1 @@ -22,8 +22,8 @@ should match the snapshot: app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-pagerduty - app.kubernetes.io/version: 15.4.21 - helm.sh/chart: teleport-plugin-pagerduty-15.4.21 + app.kubernetes.io/version: 15.4.22 + helm.sh/chart: teleport-plugin-pagerduty-15.4.22 spec: containers: - command: diff --git a/examples/chart/access/slack/Chart.yaml b/examples/chart/access/slack/Chart.yaml index a2935e1b3ff8b..033d2bc4d8b54 100644 --- a/examples/chart/access/slack/Chart.yaml +++ b/examples/chart/access/slack/Chart.yaml @@ -1,4 +1,4 @@ -.version: &version "15.4.21" +.version: &version "15.4.22" apiVersion: v2 name: teleport-plugin-slack diff --git a/examples/chart/access/slack/tests/__snapshot__/configmap_test.yaml.snap b/examples/chart/access/slack/tests/__snapshot__/configmap_test.yaml.snap index 3aa64603dbfe4..ddb5e8e07920a 100644 --- a/examples/chart/access/slack/tests/__snapshot__/configmap_test.yaml.snap +++ b/examples/chart/access/slack/tests/__snapshot__/configmap_test.yaml.snap @@ -24,6 +24,6 @@ should match the snapshot: app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-slack - app.kubernetes.io/version: 15.4.21 - helm.sh/chart: teleport-plugin-slack-15.4.21 + app.kubernetes.io/version: 15.4.22 + helm.sh/chart: teleport-plugin-slack-15.4.22 name: RELEASE-NAME-teleport-plugin-slack diff --git a/examples/chart/access/slack/tests/__snapshot__/deployment_test.yaml.snap b/examples/chart/access/slack/tests/__snapshot__/deployment_test.yaml.snap index 7fbe49142fcfb..0c1b5bf336c1e 100644 --- a/examples/chart/access/slack/tests/__snapshot__/deployment_test.yaml.snap +++ b/examples/chart/access/slack/tests/__snapshot__/deployment_test.yaml.snap @@ -7,8 +7,8 @@ should match the snapshot: app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-slack - app.kubernetes.io/version: 15.4.21 - helm.sh/chart: teleport-plugin-slack-15.4.21 + app.kubernetes.io/version: 15.4.22 + helm.sh/chart: teleport-plugin-slack-15.4.22 name: RELEASE-NAME-teleport-plugin-slack spec: replicas: 1 @@ -22,8 +22,8 @@ should match the snapshot: app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-slack - app.kubernetes.io/version: 15.4.21 - helm.sh/chart: teleport-plugin-slack-15.4.21 + app.kubernetes.io/version: 15.4.22 + helm.sh/chart: teleport-plugin-slack-15.4.22 spec: containers: - command: diff --git a/examples/chart/event-handler/Chart.yaml b/examples/chart/event-handler/Chart.yaml index 2845033714e0b..50aa6186917fe 100644 --- a/examples/chart/event-handler/Chart.yaml +++ b/examples/chart/event-handler/Chart.yaml @@ -1,4 +1,4 @@ -.version: &version "15.4.21" +.version: &version "15.4.22" apiVersion: v2 name: teleport-plugin-event-handler diff --git a/examples/chart/event-handler/tests/__snapshot__/configmap_test.yaml.snap b/examples/chart/event-handler/tests/__snapshot__/configmap_test.yaml.snap index 2ccc9ca2c3200..14f9a4edaec9a 100644 --- a/examples/chart/event-handler/tests/__snapshot__/configmap_test.yaml.snap +++ b/examples/chart/event-handler/tests/__snapshot__/configmap_test.yaml.snap @@ -26,6 +26,6 @@ should match the snapshot: app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-event-handler - app.kubernetes.io/version: 15.4.21 - helm.sh/chart: teleport-plugin-event-handler-15.4.21 + app.kubernetes.io/version: 15.4.22 + helm.sh/chart: teleport-plugin-event-handler-15.4.22 name: RELEASE-NAME-teleport-plugin-event-handler diff --git a/examples/chart/event-handler/tests/__snapshot__/deployment_test.yaml.snap b/examples/chart/event-handler/tests/__snapshot__/deployment_test.yaml.snap index 8104d09f6ba1a..96d18275e1982 100644 --- a/examples/chart/event-handler/tests/__snapshot__/deployment_test.yaml.snap +++ b/examples/chart/event-handler/tests/__snapshot__/deployment_test.yaml.snap @@ -7,8 +7,8 @@ should match the snapshot: app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-event-handler - app.kubernetes.io/version: 15.4.21 - helm.sh/chart: teleport-plugin-event-handler-15.4.21 + app.kubernetes.io/version: 15.4.22 + helm.sh/chart: teleport-plugin-event-handler-15.4.22 name: RELEASE-NAME-teleport-plugin-event-handler spec: replicas: 1 @@ -82,7 +82,7 @@ should mount tls.existingCASecretName and set environment when set in values: value: "true" - name: SSL_CERT_FILE value: /etc/teleport-tls-ca/ca.pem - image: public.ecr.aws/gravitational/teleport-plugin-event-handler:15.4.21 + image: public.ecr.aws/gravitational/teleport-plugin-event-handler:15.4.22 imagePullPolicy: IfNotPresent name: teleport-plugin-event-handler ports: diff --git a/examples/chart/tbot/Chart.yaml b/examples/chart/tbot/Chart.yaml index 43bf570aa1e79..4fb3ce59e3be6 100644 --- a/examples/chart/tbot/Chart.yaml +++ b/examples/chart/tbot/Chart.yaml @@ -1,4 +1,4 @@ -.version: &version "15.4.21" +.version: &version "15.4.22" name: tbot apiVersion: v2 diff --git a/examples/chart/tbot/tests/__snapshot__/deployment_test.yaml.snap b/examples/chart/tbot/tests/__snapshot__/deployment_test.yaml.snap index 74e87156d929d..06cc288ce8c5d 100644 --- a/examples/chart/tbot/tests/__snapshot__/deployment_test.yaml.snap +++ b/examples/chart/tbot/tests/__snapshot__/deployment_test.yaml.snap @@ -29,7 +29,7 @@ should match the snapshot (full): app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: tbot - helm.sh/chart: tbot-15.4.21 + helm.sh/chart: tbot-15.4.22 test-key: test-label-pod spec: affinity: @@ -68,7 +68,7 @@ should match the snapshot (full): value: "1" - name: TEST_ENV value: test-value - image: public.ecr.aws/gravitational/tbot-distroless:15.4.21 + image: public.ecr.aws/gravitational/tbot-distroless:15.4.22 imagePullPolicy: Always livenessProbe: failureThreshold: 6 @@ -154,7 +154,7 @@ should match the snapshot (simple): app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: tbot - helm.sh/chart: tbot-15.4.21 + helm.sh/chart: tbot-15.4.22 spec: containers: - args: @@ -176,7 +176,7 @@ should match the snapshot (simple): fieldPath: spec.nodeName - name: KUBERNETES_TOKEN_PATH value: /var/run/secrets/tokens/join-sa-token - image: public.ecr.aws/gravitational/tbot-distroless:15.4.21 + image: public.ecr.aws/gravitational/tbot-distroless:15.4.22 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 diff --git a/examples/chart/teleport-cluster/Chart.yaml b/examples/chart/teleport-cluster/Chart.yaml index bfedc7055df56..7cc3e6c160a98 100644 --- a/examples/chart/teleport-cluster/Chart.yaml +++ b/examples/chart/teleport-cluster/Chart.yaml @@ -1,4 +1,4 @@ -.version: &version "15.4.21" +.version: &version "15.4.22" name: teleport-cluster apiVersion: v2 diff --git a/examples/chart/teleport-cluster/charts/teleport-operator/Chart.yaml b/examples/chart/teleport-cluster/charts/teleport-operator/Chart.yaml index 727efff1c4ad5..d2345bd10688f 100644 --- a/examples/chart/teleport-cluster/charts/teleport-operator/Chart.yaml +++ b/examples/chart/teleport-cluster/charts/teleport-operator/Chart.yaml @@ -1,4 +1,4 @@ -.version: &version "15.4.21" +.version: &version "15.4.22" name: teleport-operator apiVersion: v2 diff --git a/examples/chart/teleport-cluster/tests/__snapshot__/auth_clusterrole_test.yaml.snap b/examples/chart/teleport-cluster/tests/__snapshot__/auth_clusterrole_test.yaml.snap index 7335035c04081..9aec9fba079f1 100644 --- a/examples/chart/teleport-cluster/tests/__snapshot__/auth_clusterrole_test.yaml.snap +++ b/examples/chart/teleport-cluster/tests/__snapshot__/auth_clusterrole_test.yaml.snap @@ -8,8 +8,8 @@ adds operator permissions to ClusterRole: app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-cluster - app.kubernetes.io/version: 15.4.21 - helm.sh/chart: teleport-cluster-15.4.21 + app.kubernetes.io/version: 15.4.22 + helm.sh/chart: teleport-cluster-15.4.22 teleport.dev/majorVersion: "15" name: RELEASE-NAME rules: diff --git a/examples/chart/teleport-cluster/tests/__snapshot__/auth_config_test.yaml.snap b/examples/chart/teleport-cluster/tests/__snapshot__/auth_config_test.yaml.snap index cefaac11d5f78..5bba6df05106b 100644 --- a/examples/chart/teleport-cluster/tests/__snapshot__/auth_config_test.yaml.snap +++ b/examples/chart/teleport-cluster/tests/__snapshot__/auth_config_test.yaml.snap @@ -1848,8 +1848,8 @@ sets clusterDomain on Configmap: app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-cluster - app.kubernetes.io/version: 15.4.21 - helm.sh/chart: teleport-cluster-15.4.21 + app.kubernetes.io/version: 15.4.22 + helm.sh/chart: teleport-cluster-15.4.22 teleport.dev/majorVersion: "15" name: RELEASE-NAME-auth namespace: NAMESPACE diff --git a/examples/chart/teleport-cluster/tests/__snapshot__/auth_deployment_test.yaml.snap b/examples/chart/teleport-cluster/tests/__snapshot__/auth_deployment_test.yaml.snap index 94f920ce59a8c..8623604cdf3cb 100644 --- a/examples/chart/teleport-cluster/tests/__snapshot__/auth_deployment_test.yaml.snap +++ b/examples/chart/teleport-cluster/tests/__snapshot__/auth_deployment_test.yaml.snap @@ -8,7 +8,7 @@ - args: - --diag-addr=0.0.0.0:3000 - --apply-on-startup=/etc/teleport/apply-on-startup.yaml - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 imagePullPolicy: IfNotPresent lifecycle: preStop: @@ -141,7 +141,7 @@ should set nodeSelector when set in values: - args: - --diag-addr=0.0.0.0:3000 - --apply-on-startup=/etc/teleport/apply-on-startup.yaml - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 imagePullPolicy: IfNotPresent lifecycle: preStop: @@ -238,7 +238,7 @@ should set resources when set in values: - args: - --diag-addr=0.0.0.0:3000 - --apply-on-startup=/etc/teleport/apply-on-startup.yaml - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 imagePullPolicy: IfNotPresent lifecycle: preStop: @@ -324,7 +324,7 @@ should set securityContext when set in values: - args: - --diag-addr=0.0.0.0:3000 - --apply-on-startup=/etc/teleport/apply-on-startup.yaml - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 imagePullPolicy: IfNotPresent lifecycle: preStop: diff --git a/examples/chart/teleport-cluster/tests/__snapshot__/proxy_config_test.yaml.snap b/examples/chart/teleport-cluster/tests/__snapshot__/proxy_config_test.yaml.snap index d41193e547707..a2c4c5f6bf9a2 100644 --- a/examples/chart/teleport-cluster/tests/__snapshot__/proxy_config_test.yaml.snap +++ b/examples/chart/teleport-cluster/tests/__snapshot__/proxy_config_test.yaml.snap @@ -567,8 +567,8 @@ sets clusterDomain on Configmap: app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-cluster - app.kubernetes.io/version: 15.4.21 - helm.sh/chart: teleport-cluster-15.4.21 + app.kubernetes.io/version: 15.4.22 + helm.sh/chart: teleport-cluster-15.4.22 teleport.dev/majorVersion: "15" name: RELEASE-NAME-proxy namespace: NAMESPACE diff --git a/examples/chart/teleport-cluster/tests/__snapshot__/proxy_deployment_test.yaml.snap b/examples/chart/teleport-cluster/tests/__snapshot__/proxy_deployment_test.yaml.snap index c820462526b3d..40a446d292d9f 100644 --- a/examples/chart/teleport-cluster/tests/__snapshot__/proxy_deployment_test.yaml.snap +++ b/examples/chart/teleport-cluster/tests/__snapshot__/proxy_deployment_test.yaml.snap @@ -11,8 +11,8 @@ sets clusterDomain on Deployment Pods: app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-cluster - app.kubernetes.io/version: 15.4.21 - helm.sh/chart: teleport-cluster-15.4.21 + app.kubernetes.io/version: 15.4.22 + helm.sh/chart: teleport-cluster-15.4.22 teleport.dev/majorVersion: "15" name: RELEASE-NAME-proxy namespace: NAMESPACE @@ -26,7 +26,7 @@ sets clusterDomain on Deployment Pods: template: metadata: annotations: - checksum/config: 22ef5ea23ef0f3a1ae6c30584cc73c4c5bf163c147c0f627e5f1044dffceeb39 + checksum/config: a09773e9538ade08dafc8de61fc5d0cc721d89b5dcfefd11c9df1f5934d04546 kubernetes.io/pod: test-annotation kubernetes.io/pod-different: 4 labels: @@ -34,8 +34,8 @@ sets clusterDomain on Deployment Pods: app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-cluster - app.kubernetes.io/version: 15.4.21 - helm.sh/chart: teleport-cluster-15.4.21 + app.kubernetes.io/version: 15.4.22 + helm.sh/chart: teleport-cluster-15.4.22 teleport.dev/majorVersion: "15" spec: affinity: @@ -44,7 +44,7 @@ sets clusterDomain on Deployment Pods: containers: - args: - --diag-addr=0.0.0.0:3000 - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 imagePullPolicy: IfNotPresent lifecycle: preStop: @@ -105,7 +105,7 @@ sets clusterDomain on Deployment Pods: - wait - no-resolve - RELEASE-NAME-auth-v14.NAMESPACE.svc.test.com - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 name: wait-auth-update serviceAccountName: RELEASE-NAME-proxy terminationGracePeriodSeconds: 60 @@ -137,7 +137,7 @@ should provision initContainer correctly when set in values: - wait - no-resolve - RELEASE-NAME-auth-v14.NAMESPACE.svc.cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 name: wait-auth-update resources: limits: @@ -201,7 +201,7 @@ should set nodeSelector when set in values: containers: - args: - --diag-addr=0.0.0.0:3000 - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 imagePullPolicy: IfNotPresent lifecycle: preStop: @@ -262,7 +262,7 @@ should set nodeSelector when set in values: - wait - no-resolve - RELEASE-NAME-auth-v14.NAMESPACE.svc.cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 name: wait-auth-update nodeSelector: environment: security @@ -313,7 +313,7 @@ should set resources for wait-auth-update initContainer when set in values: containers: - args: - --diag-addr=0.0.0.0:3000 - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 imagePullPolicy: IfNotPresent lifecycle: preStop: @@ -381,7 +381,7 @@ should set resources for wait-auth-update initContainer when set in values: - wait - no-resolve - RELEASE-NAME-auth-v14.NAMESPACE.svc.cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 name: wait-auth-update resources: limits: @@ -421,7 +421,7 @@ should set resources when set in values: containers: - args: - --diag-addr=0.0.0.0:3000 - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 imagePullPolicy: IfNotPresent lifecycle: preStop: @@ -489,7 +489,7 @@ should set resources when set in values: - wait - no-resolve - RELEASE-NAME-auth-v14.NAMESPACE.svc.cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 name: wait-auth-update resources: limits: @@ -529,7 +529,7 @@ should set securityContext for initContainers when set in values: containers: - args: - --diag-addr=0.0.0.0:3000 - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 imagePullPolicy: IfNotPresent lifecycle: preStop: @@ -597,7 +597,7 @@ should set securityContext for initContainers when set in values: - wait - no-resolve - RELEASE-NAME-auth-v14.NAMESPACE.svc.cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 name: wait-auth-update securityContext: allowPrivilegeEscalation: false @@ -637,7 +637,7 @@ should set securityContext when set in values: containers: - args: - --diag-addr=0.0.0.0:3000 - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 imagePullPolicy: IfNotPresent lifecycle: preStop: @@ -705,7 +705,7 @@ should set securityContext when set in values: - wait - no-resolve - RELEASE-NAME-auth-v14.NAMESPACE.svc.cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 name: wait-auth-update securityContext: allowPrivilegeEscalation: false diff --git a/examples/chart/teleport-kube-agent/Chart.yaml b/examples/chart/teleport-kube-agent/Chart.yaml index 0fc964ded0c31..45b5cd6359297 100644 --- a/examples/chart/teleport-kube-agent/Chart.yaml +++ b/examples/chart/teleport-kube-agent/Chart.yaml @@ -1,4 +1,4 @@ -.version: &version "15.4.21" +.version: &version "15.4.22" name: teleport-kube-agent apiVersion: v2 diff --git a/examples/chart/teleport-kube-agent/tests/__snapshot__/deployment_test.yaml.snap b/examples/chart/teleport-kube-agent/tests/__snapshot__/deployment_test.yaml.snap index a8bd8201af559..34b3edbdbb24f 100644 --- a/examples/chart/teleport-kube-agent/tests/__snapshot__/deployment_test.yaml.snap +++ b/examples/chart/teleport-kube-agent/tests/__snapshot__/deployment_test.yaml.snap @@ -32,7 +32,7 @@ sets Deployment annotations when specified if action is Upgrade: value: "true" - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -107,7 +107,7 @@ sets Deployment labels when specified if action is Upgrade: value: "true" - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -169,7 +169,7 @@ sets Pod annotations when specified if action is Upgrade: value: "true" - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -231,7 +231,7 @@ sets Pod labels when specified if action is Upgrade: value: "true" - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -310,7 +310,7 @@ should add emptyDir for data when existingDataVolume is not set if action is Upg value: "true" - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -373,7 +373,7 @@ should add insecureSkipProxyTLSVerify to args when set in values if action is Up value: "true" - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -435,7 +435,7 @@ should correctly configure existingDataVolume when set if action is Upgrade: value: "true" - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -495,7 +495,7 @@ should expose diag port if action is Upgrade: value: "true" - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -569,7 +569,7 @@ should have multiple replicas when replicaCount is set (using .replicaCount, dep value: "true" - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -643,7 +643,7 @@ should have multiple replicas when replicaCount is set (using highAvailability.r value: "true" - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -705,7 +705,7 @@ should have one replica when replicaCount is not set if action is Upgrade: value: "true" - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -767,7 +767,7 @@ should mount extraVolumes and extraVolumeMounts if action is Upgrade: value: "true" - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -836,7 +836,7 @@ should mount tls.existingCASecretName and set environment when set in values if value: cluster.local - name: SSL_CERT_FILE value: /etc/teleport-tls-ca/ca.pem - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -908,7 +908,7 @@ should mount tls.existingCASecretName and set extra environment when set in valu value: http://username:password@my.proxy.host:3128 - name: SSL_CERT_FILE value: /etc/teleport-tls-ca/ca.pem - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -976,7 +976,7 @@ should provision initContainer correctly when set in values if action is Upgrade value: "true" - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -1074,7 +1074,7 @@ should set SecurityContext if action is Upgrade: value: "true" - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -1156,7 +1156,7 @@ should set affinity when set in values if action is Upgrade: value: "true" - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -1218,7 +1218,7 @@ should set default serviceAccountName when not set in values if action is Upgrad value: "true" - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -1293,7 +1293,7 @@ should set environment when extraEnv set in values if action is Upgrade: value: cluster.local - name: HTTPS_PROXY value: http://username:password@my.proxy.host:3128 - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -1417,7 +1417,7 @@ should set imagePullPolicy when set in values if action is Upgrade: value: "true" - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 imagePullPolicy: Always livenessProbe: failureThreshold: 6 @@ -1479,7 +1479,7 @@ should set nodeSelector if set in values if action is Upgrade: value: "true" - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -1543,7 +1543,7 @@ should set not set priorityClassName when not set in values if action is Upgrade value: "true" - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -1617,7 +1617,7 @@ should set preferred affinity when more than one replica is used if action is Up value: "true" - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -1679,7 +1679,7 @@ should set priorityClassName when set in values if action is Upgrade: value: "true" - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -1742,7 +1742,7 @@ should set probeTimeoutSeconds when set in values if action is Upgrade: value: "true" - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -1814,7 +1814,7 @@ should set required affinity when highAvailability.requireAntiAffinity is set if value: "true" - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -1876,7 +1876,7 @@ should set resources when set in values if action is Upgrade: value: "true" - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -1945,7 +1945,7 @@ should set serviceAccountName when set in values if action is Upgrade: value: "true" - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -2007,7 +2007,7 @@ should set tolerations when set in values if action is Upgrade: value: "true" - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 diff --git a/examples/chart/teleport-kube-agent/tests/__snapshot__/job_test.yaml.snap b/examples/chart/teleport-kube-agent/tests/__snapshot__/job_test.yaml.snap index a6b16ffdf7cc5..494e746228aae 100644 --- a/examples/chart/teleport-kube-agent/tests/__snapshot__/job_test.yaml.snap +++ b/examples/chart/teleport-kube-agent/tests/__snapshot__/job_test.yaml.snap @@ -25,7 +25,7 @@ should create ServiceAccount for post-delete hook by default: fieldPath: metadata.namespace - name: RELEASE_NAME value: RELEASE-NAME - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 imagePullPolicy: IfNotPresent name: post-delete-job securityContext: @@ -106,7 +106,7 @@ should not create ServiceAccount for post-delete hook if serviceAccount.create i fieldPath: metadata.namespace - name: RELEASE_NAME value: RELEASE-NAME - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 imagePullPolicy: IfNotPresent name: post-delete-job securityContext: @@ -134,7 +134,7 @@ should not create ServiceAccount, Role or RoleBinding for post-delete hook if se fieldPath: metadata.namespace - name: RELEASE_NAME value: RELEASE-NAME - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 imagePullPolicy: IfNotPresent name: post-delete-job securityContext: @@ -162,7 +162,7 @@ should set nodeSelector in post-delete hook: fieldPath: metadata.namespace - name: RELEASE_NAME value: RELEASE-NAME - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 imagePullPolicy: IfNotPresent name: post-delete-job securityContext: @@ -192,7 +192,7 @@ should set resources in the Job's pod spec if resources is set in values: fieldPath: metadata.namespace - name: RELEASE_NAME value: RELEASE-NAME - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 imagePullPolicy: IfNotPresent name: post-delete-job resources: @@ -227,7 +227,7 @@ should set securityContext in post-delete hook: fieldPath: metadata.namespace - name: RELEASE_NAME value: RELEASE-NAME - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 imagePullPolicy: IfNotPresent name: post-delete-job securityContext: diff --git a/examples/chart/teleport-kube-agent/tests/__snapshot__/statefulset_test.yaml.snap b/examples/chart/teleport-kube-agent/tests/__snapshot__/statefulset_test.yaml.snap index 69101eaec1663..c4080bbc19243 100644 --- a/examples/chart/teleport-kube-agent/tests/__snapshot__/statefulset_test.yaml.snap +++ b/examples/chart/teleport-kube-agent/tests/__snapshot__/statefulset_test.yaml.snap @@ -18,7 +18,7 @@ sets Pod annotations when specified: value: RELEASE-NAME - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -88,7 +88,7 @@ sets Pod labels when specified: value: RELEASE-NAME - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -182,7 +182,7 @@ sets StatefulSet labels when specified: value: RELEASE-NAME - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -280,7 +280,7 @@ should add insecureSkipProxyTLSVerify to args when set in values: value: RELEASE-NAME - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -350,7 +350,7 @@ should add volumeClaimTemplate for data volume when using StatefulSet and action value: RELEASE-NAME - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -440,7 +440,7 @@ should add volumeClaimTemplate for data volume when using StatefulSet and is Fre value: RELEASE-NAME - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -520,7 +520,7 @@ should add volumeMount for data volume when using StatefulSet: value: RELEASE-NAME - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -590,7 +590,7 @@ should expose diag port: value: RELEASE-NAME - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -660,7 +660,7 @@ should generate Statefulset when storage is disabled and mode is a Upgrade: value: RELEASE-NAME - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -744,7 +744,7 @@ should have multiple replicas when replicaCount is set (using .replicaCount, dep value: RELEASE-NAME - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -826,7 +826,7 @@ should have multiple replicas when replicaCount is set (using highAvailability.r value: RELEASE-NAME - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -896,7 +896,7 @@ should have one replica when replicaCount is not set: value: RELEASE-NAME - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -966,7 +966,7 @@ should install Statefulset when storage is disabled and mode is a Fresh Install: value: RELEASE-NAME - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -1038,7 +1038,7 @@ should mount extraVolumes and extraVolumeMounts: value: RELEASE-NAME - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -1115,7 +1115,7 @@ should mount tls.existingCASecretName and set environment when set in values: value: cluster.local - name: SSL_CERT_FILE value: /etc/teleport-tls-ca/ca.pem - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -1197,7 +1197,7 @@ should mount tls.existingCASecretName and set extra environment when set in valu value: /etc/teleport-tls-ca/ca.pem - name: HTTPS_PROXY value: http://username:password@my.proxy.host:3128 - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -1275,7 +1275,7 @@ should not add emptyDir for data when using StatefulSet: value: RELEASE-NAME - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -1345,7 +1345,7 @@ should provision initContainer correctly when set in values: value: RELEASE-NAME - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -1451,7 +1451,7 @@ should set SecurityContext: value: RELEASE-NAME - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -1541,7 +1541,7 @@ should set affinity when set in values: value: RELEASE-NAME - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -1611,7 +1611,7 @@ should set default serviceAccountName when not set in values: value: RELEASE-NAME - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -1694,7 +1694,7 @@ should set environment when extraEnv set in values: value: cluster.local - name: HTTPS_PROXY value: http://username:password@my.proxy.host:3128 - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -1834,7 +1834,7 @@ should set imagePullPolicy when set in values: value: RELEASE-NAME - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 imagePullPolicy: Always livenessProbe: failureThreshold: 6 @@ -1904,7 +1904,7 @@ should set nodeSelector if set in values: value: RELEASE-NAME - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -1988,7 +1988,7 @@ should set preferred affinity when more than one replica is used: value: RELEASE-NAME - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -2058,7 +2058,7 @@ should set probeTimeoutSeconds when set in values: value: RELEASE-NAME - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -2138,7 +2138,7 @@ should set required affinity when highAvailability.requireAntiAffinity is set: value: RELEASE-NAME - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -2208,7 +2208,7 @@ should set resources when set in values: value: RELEASE-NAME - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -2285,7 +2285,7 @@ should set serviceAccountName when set in values: value: RELEASE-NAME - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -2355,7 +2355,7 @@ should set storage.requests when set in values and action is an Upgrade: value: RELEASE-NAME - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -2425,7 +2425,7 @@ should set storage.storageClassName when set in values and action is an Upgrade: value: RELEASE-NAME - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -2495,7 +2495,7 @@ should set tolerations when set in values: value: RELEASE-NAME - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 diff --git a/examples/chart/teleport-kube-agent/tests/__snapshot__/updater_deployment_test.yaml.snap b/examples/chart/teleport-kube-agent/tests/__snapshot__/updater_deployment_test.yaml.snap index 44f58fc9dbe17..281b2e7ef24bd 100644 --- a/examples/chart/teleport-kube-agent/tests/__snapshot__/updater_deployment_test.yaml.snap +++ b/examples/chart/teleport-kube-agent/tests/__snapshot__/updater_deployment_test.yaml.snap @@ -27,7 +27,7 @@ sets the affinity: - --base-image=public.ecr.aws/gravitational/teleport-distroless - --version-server=https://my-custom-version-server/v1 - --version-channel=custom/preview - image: public.ecr.aws/gravitational/teleport-kube-agent-updater:15.4.21 + image: public.ecr.aws/gravitational/teleport-kube-agent-updater:15.4.22 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -71,7 +71,7 @@ sets the tolerations: - --base-image=public.ecr.aws/gravitational/teleport-distroless - --version-server=https://my-custom-version-server/v1 - --version-channel=custom/preview - image: public.ecr.aws/gravitational/teleport-kube-agent-updater:15.4.21 + image: public.ecr.aws/gravitational/teleport-kube-agent-updater:15.4.22 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 From 59c93a65395535b87b071376bc0992ec5496181d Mon Sep 17 00:00:00 2001 From: rosstimothy <39066650+rosstimothy@users.noreply.github.com> Date: Tue, 12 Nov 2024 22:55:03 -0500 Subject: [PATCH 015/111] Update metrics docs to include teleport_roles_total (#47806) Add the new metric introduced in https://github.com/gravitational/teleport/pull/47731 to the reference page. Also performed some minor formatting on the table, and alphabetized some out of order metrics. --- docs/pages/includes/metrics.mdx | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/docs/pages/includes/metrics.mdx b/docs/pages/includes/metrics.mdx index d1a64ba4bf241..e875f84e75968 100644 --- a/docs/pages/includes/metrics.mdx +++ b/docs/pages/includes/metrics.mdx @@ -15,8 +15,8 @@ | `backend_batch_write_seconds` | histogram | cache | Latency for backend batch write operations. | | `backend_read_requests_total` | counter | cache | Number of read requests to the backend. | | `backend_read_seconds` | histogram | cache | Latency for read operations. | -| `backend_requests` | counter | cache | Number of requests to the backend (reads, writes, and keepalives). | -| `backend_write_requests_total` | counter | cache | Number of write requests to the backend. | +| `backend_requests` | counter | cache | Number of requests to the backend (reads, writes, and keepalives). | +| `backend_write_requests_total` | counter | cache | Number of write requests to the backend. | | `backend_write_seconds` | histogram | cache | Latency for backend write operations. | | `cluster_name_not_found_total` | counter | Teleport Auth | Number of times a cluster was not found. | | `dynamo_requests_total` | counter | DynamoDB | Total number of requests to the DynamoDB API. | @@ -31,7 +31,7 @@ | `etcd_backend_write_requests` | counter | etcd | Number of write requests to the database. | | `etcd_backend_write_seconds` | histogram | etcd | Latency for etcd write operations. | | `teleport_etcd_events` | counter | etcd | Total number of etcd events processed. | -| `teleport_etcd_event_backpressure` | counter | etcd | Total number of times event processing encountered backpressure. | +| `teleport_etcd_event_backpressure` | counter | etcd | Total number of times event processing encountered backpressure. | | `firestore_events_backend_batch_read_requests` | counter | GCP Cloud Firestore | Number of batch read requests to Cloud Firestore events. | | `firestore_events_backend_batch_read_seconds` | histogram | GCP Cloud Firestore | Latency for Cloud Firestore events batch read operations. | | `firestore_events_backend_batch_write_requests` | counter | GCP Cloud Firestore | Number of batch write requests to Cloud Firestore events. | @@ -59,17 +59,18 @@ | `teleport_audit_parquetlog_last_processed_timestamp` | gauge | Teleport Audit Log | Number of last processing time in Parquet-format audit log. | | `teleport_audit_parquetlog_age_oldest_processed_message` | gauge | Teleport Audit Log | Number of age of oldest event in Parquet-format audit log. | | `teleport_audit_parquetlog_errors_from_collect_count` | counter | Teleport Audit Log | Number of collect failures in Parquet-format audit log. | +| `teleport_connected_resources` | gauge | Teleport Auth | Number and type of resources connected via keepalives. x | | `teleport_postgres_events_backend_write_requests` | counter | Postgres (Events) | Number of write requests to postgres events, labeled with the request `status` (success or failure). | | `teleport_postgres_events_backend_batch_read_requests` | counter | Postgres (Events) | Number of batch read requests to postgres events, labeled with the request `status` (success or failure). | | `teleport_postgres_events_backend_batch_delete_requests` | counter | Postgres (Events) | Number of batch delete requests to postgres events, labeled with the request `status` (success or failure). | | `teleport_postgres_events_backend_write_seconds` | histogram | Postgres (Events) | Latency for postgres events write operations, in seconds. | | `teleport_postgres_events_backend_batch_read_seconds` | histogram | Postgres (Events) | Latency for postgres events batch read operations, in seconds. | | `teleport_postgres_events_backend_batch_delete_seconds` | histogram | Postgres (Events) | Latency for postgres events batch delete operations, in seconds. | -| `teleport_connected_resources` | gauge | Teleport Auth | Number and type of resources connected via keepalives. | | `teleport_registered_servers` | gauge | Teleport Auth | The number of Teleport services that are connected to an Auth Service instance grouped by version. | | `teleport_registered_servers_by_install_methods` | gauge | Teleport Auth | The number of Teleport services that are connected to an Auth Service instance grouped by install methods. | -| `user_login_total` | counter | Teleport Auth | Number of user logins. | +| `teleport_roles_total` | gauge | Teleport Auth | The number of roles that exist in the cluster. | | `teleport_migrations` | gauge | Teleport Auth | Tracks for each migration if it is active (1) or not (0). | +| `user_login_total` | counter | Teleport Auth | Number of user logins. | | `watcher_event_sizes` | histogram | cache | Overall size of events emitted. | | `watcher_events` | histogram | cache | Per resource size of events emitted. | @@ -110,13 +111,13 @@ | `remote_clusters` | gauge | Teleport Proxy | Number of inbound connections from leaf clusters. | | `teleport_connect_to_node_attempts_total` | counter | Teleport Proxy | Number of SSH connection attempts to a SSH Service. Use with `failed_connect_to_node_attempts_total` to get the failure rate. | | `teleport_reverse_tunnels_connected` | gauge | Teleport Proxy | Number of reverse SSH tunnels connected to the Teleport Proxy Service by Teleport instances. | -| `trusted_clusters` | gauge | Teleport Proxy | Number of outbound connections to leaf clusters. | | `teleport_proxy_db_connection_setup_time_seconds` | histogram | Teleport Proxy | Time to establish connection to DB service from Proxy service. | | `teleport_proxy_db_connection_dial_attempts_total` | counter | Teleport Proxy | Number of dial attempts from Proxy to DB service made. | | `teleport_proxy_db_connection_dial_failures_total` | counter | Teleport Proxy | Number of failed dial attempts from Proxy to DB service made. | | `teleport_proxy_db_attempted_servers_total` | histogram | Teleport Proxy | Number of servers processed during connection attempt to the DB service from Proxy service. | | `teleport_proxy_db_connection_tls_config_time_seconds` | histogram | Teleport Proxy | Time to fetch TLS configuration for the connection to DB service from Proxy service. | | `teleport_proxy_db_active_connections_total` | gauge | Teleport Proxy | Number of currently active connections to DB service from Proxy service. | +| `trusted_clusters` | gauge | Teleport Proxy | Number of outbound connections to leaf clusters. | ## Database Service From 399d7d6651162cf007cc974b8d4ea0add70769ef Mon Sep 17 00:00:00 2001 From: rosstimothy <39066650+rosstimothy@users.noreply.github.com> Date: Tue, 12 Nov 2024 23:12:40 -0500 Subject: [PATCH 016/111] Enrich audit events with server information (#48475) (#48835) Subsystem events did not include ServerMetadata, which results in any events generated for agentless hosts to contain limited information. For example, any sftp subsystem requests made in response to tsh scp for agentless nodes provided information about the proxy forwarding the requests, but no information about the target host. Additionally, the way ServerMetadata information was being populated by using the ServerContext overrode only a subset of the information that was available. This lead to SessionData events emitted when an sftp operation was completed not populating any relevant information about agentless nodes either. To avoid this going forward, the GetServerMetadata receiver has been removed from ServerContext and instead the TargetMetadata must be used from the appropriate SSH server, which already populates the relevant information without omitting any. --- .../teleport/legacy/types/events/events.proto | 7 + api/types/events/events.pb.go | 1479 +++++++++-------- lib/events/events_test.go | 6 +- lib/srv/ctx.go | 11 +- lib/srv/exec.go | 6 +- lib/srv/exec_test.go | 11 +- lib/srv/forward/sshserver.go | 8 +- lib/srv/forward/subsystem.go | 22 +- lib/srv/mock.go | 7 +- lib/srv/regular/sftp.go | 4 +- lib/srv/regular/sshserver.go | 2 +- 11 files changed, 809 insertions(+), 754 deletions(-) diff --git a/api/proto/teleport/legacy/types/events/events.proto b/api/proto/teleport/legacy/types/events/events.proto index 7e11d0eec885b..d9732d3872a36 100644 --- a/api/proto/teleport/legacy/types/events/events.proto +++ b/api/proto/teleport/legacy/types/events/events.proto @@ -1913,6 +1913,13 @@ message Subsystem { // Error contains error in case of unsucessfull attempt string Error = 5 [(gogoproto.jsontag) = "exitError"]; + + // ServerMetadata is a common server metadata + ServerMetadata Server = 6 [ + (gogoproto.nullable) = false, + (gogoproto.embed) = true, + (gogoproto.jsontag) = "" + ]; } // ClientDisconnect is emitted when client is disconnected diff --git a/api/types/events/events.pb.go b/api/types/events/events.pb.go index 8374abcbfad25..327fab866eac5 100644 --- a/api/types/events/events.pb.go +++ b/api/types/events/events.pb.go @@ -3343,7 +3343,9 @@ type Subsystem struct { // Name is a subsystem name Name string `protobuf:"bytes,4,opt,name=Name,proto3" json:"name"` // Error contains error in case of unsucessfull attempt - Error string `protobuf:"bytes,5,opt,name=Error,proto3" json:"exitError"` + Error string `protobuf:"bytes,5,opt,name=Error,proto3" json:"exitError"` + // ServerMetadata is a common server metadata + ServerMetadata `protobuf:"bytes,6,opt,name=Server,proto3,embedded=Server" json:""` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -14385,7 +14387,7 @@ func init() { } var fileDescriptor_007ba1c3d6266d56 = []byte{ - // 15859 bytes of a gzipped FileDescriptorProto + // 15867 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0xbd, 0x6b, 0x74, 0x1c, 0x47, 0x76, 0x18, 0x8c, 0x79, 0x60, 0x00, 0x14, 0x1e, 0x04, 0x8a, 0x14, 0xd9, 0xa4, 0x48, 0x8e, 0xd4, 0x92, 0xb8, 0xa4, 0x56, 0x22, 0x25, 0x8a, 0x92, 0x56, 0xaf, 0x95, 0x06, 0x18, 0x80, 0x18, 0x11, @@ -14693,691 +14695,691 @@ var fileDescriptor_007ba1c3d6266d56 = []byte{ 0x42, 0x62, 0xba, 0x09, 0x67, 0xbe, 0x10, 0x03, 0xe0, 0x77, 0x0f, 0x9b, 0x70, 0xf0, 0x85, 0x10, 0x8d, 0x00, 0xe6, 0x15, 0x51, 0x45, 0x48, 0xb8, 0x5f, 0x42, 0x11, 0x41, 0x48, 0x93, 0x03, 0x0f, 0x0f, 0x97, 0x70, 0xbd, 0xa4, 0x09, 0x3c, 0xf0, 0x33, 0x91, 0x0b, 0x70, 0x2c, 0x71, 0x4b, 0xbd, - 0xff, 0x0e, 0x1d, 0xa8, 0x86, 0x36, 0x73, 0xa0, 0x52, 0x3f, 0x95, 0x45, 0x03, 0xb5, 0xce, 0xa2, - 0xbb, 0xe6, 0x7a, 0xa4, 0x75, 0xc0, 0xd5, 0xd8, 0xdf, 0x5e, 0xe5, 0x13, 0xb7, 0x57, 0x0f, 0xf9, - 0x42, 0x11, 0xce, 0x1d, 0x03, 0x93, 0xce, 0x17, 0xc7, 0x2f, 0x67, 0xd1, 0x28, 0xbb, 0x38, 0x2b, - 0x9b, 0x6e, 0x63, 0x0f, 0x9c, 0xf9, 0xf7, 0x5f, 0x2a, 0xbb, 0xbb, 0x6c, 0xde, 0xc2, 0x13, 0x09, - 0xf5, 0xe3, 0x59, 0x34, 0x58, 0xea, 0x78, 0x2b, 0x25, 0x0f, 0x74, 0xeb, 0x50, 0xee, 0x4f, 0x7e, - 0x3b, 0x83, 0x8e, 0xd1, 0x86, 0x2c, 0xd8, 0x77, 0x88, 0xb5, 0x07, 0x07, 0x8f, 0xe2, 0x01, 0x62, - 0x76, 0x87, 0x07, 0x88, 0xbe, 0x2c, 0x73, 0xdb, 0x93, 0x25, 0x1c, 0x97, 0x6b, 0x76, 0x93, 0x1c, - 0xec, 0xcf, 0xd8, 0xc3, 0xe3, 0x72, 0x5f, 0x20, 0x7b, 0x70, 0x3d, 0xf3, 0xee, 0x12, 0xc8, 0x1e, - 0x9c, 0x2d, 0xbd, 0x3b, 0x04, 0xf2, 0x95, 0x0c, 0x1a, 0x18, 0xb7, 0xbd, 0x03, 0x3e, 0xf0, 0xf9, - 0x57, 0x1c, 0x6c, 0x35, 0xf7, 0xbf, 0xe2, 0x60, 0xeb, 0xa6, 0xfa, 0x43, 0x59, 0x74, 0x82, 0x07, - 0xe9, 0xe6, 0xe7, 0x0f, 0x47, 0xd3, 0x31, 0x1f, 0x6c, 0x71, 0xd1, 0x1c, 0xcd, 0x43, 0x5c, 0x34, - 0x3f, 0x9d, 0x43, 0x27, 0x20, 0x94, 0x29, 0xdd, 0x96, 0xbd, 0x0b, 0x6c, 0x11, 0xdc, 0x90, 0x2f, - 0x41, 0x67, 0x13, 0x2e, 0x41, 0xff, 0x72, 0xbd, 0xf8, 0xcc, 0xb2, 0xe9, 0xad, 0x74, 0x16, 0x2f, - 0x37, 0xec, 0xd6, 0x95, 0x65, 0x47, 0xbf, 0x6b, 0xb2, 0xeb, 0x3f, 0xbd, 0x79, 0x25, 0xc8, 0x77, - 0xa1, 0xb7, 0x4d, 0x9e, 0x09, 0xa3, 0x06, 0x7b, 0x1d, 0xca, 0xd5, 0xbf, 0x3e, 0x75, 0x11, 0x7a, - 0xd5, 0x36, 0x2d, 0xee, 0x53, 0xc8, 0x0c, 0xdd, 0x1a, 0xdd, 0x1f, 0xbe, 0x61, 0x9b, 0x56, 0x3d, - 0xea, 0x58, 0xb8, 0xdd, 0xfa, 0x42, 0xd6, 0x9a, 0x50, 0x8d, 0xfa, 0x2f, 0x32, 0xe8, 0xb4, 0xac, - 0xc5, 0xef, 0x06, 0xdb, 0xf1, 0x87, 0xb3, 0xe8, 0xbe, 0xeb, 0x20, 0x9c, 0xc0, 0x91, 0xe3, 0x68, - 0xde, 0xe2, 0x83, 0x33, 0x41, 0x36, 0x47, 0x16, 0x65, 0xba, 0x6c, 0x8e, 0x26, 0x75, 0x2e, 0x9b, - 0x7f, 0x9e, 0x41, 0xc7, 0xe7, 0x2b, 0xe5, 0x89, 0x77, 0xc9, 0x88, 0x8a, 0x7f, 0xcf, 0x01, 0x37, - 0x38, 0x63, 0xdf, 0x73, 0xc0, 0x4d, 0x4f, 0xfa, 0x3d, 0xb5, 0xd2, 0xec, 0xcc, 0xbb, 0x49, 0xdf, - 0xa4, 0xef, 0x79, 0x17, 0xe8, 0x9b, 0xf4, 0x3d, 0x07, 0x5c, 0xdf, 0xfe, 0x71, 0x01, 0x0d, 0xde, - 0xe8, 0x2c, 0x12, 0xee, 0x12, 0x72, 0xa8, 0xcf, 0x5b, 0xaf, 0xa2, 0x41, 0x2e, 0x06, 0xb8, 0xab, - 0x10, 0x42, 0xd6, 0xf1, 0x10, 0x24, 0x2c, 0x2a, 0x90, 0x48, 0x84, 0xcf, 0xa2, 0xfc, 0x2d, 0xe2, - 0x2c, 0x8a, 0xaf, 0x39, 0xef, 0x12, 0x67, 0x51, 0x03, 0x28, 0x9e, 0x09, 0x1d, 0xd5, 0x4b, 0xd5, - 0x0a, 0xa4, 0x2f, 0xe1, 0xd7, 0x24, 0x90, 0x8f, 0x25, 0xf0, 0x36, 0xd3, 0xdb, 0x26, 0x4b, 0x7c, - 0x22, 0xbe, 0x24, 0x8f, 0x96, 0xc4, 0x73, 0x68, 0x4c, 0x74, 0x37, 0x62, 0xb9, 0x3b, 0xfa, 0x13, - 0xd8, 0x25, 0x65, 0xed, 0x88, 0x17, 0xc5, 0x2f, 0xa3, 0x21, 0x1f, 0x08, 0x8e, 0x53, 0x03, 0x61, - 0xc0, 0xf8, 0x80, 0x55, 0x24, 0x31, 0x90, 0x54, 0x40, 0x64, 0x00, 0x87, 0xff, 0x28, 0x81, 0x41, - 0xc4, 0x11, 0x4d, 0x2a, 0x80, 0x9f, 0x06, 0x06, 0xf0, 0xb8, 0x02, 0x5c, 0x44, 0x06, 0xe1, 0xa9, - 0x23, 0x38, 0xc2, 0x3b, 0x1c, 0xce, 0x1e, 0xb4, 0x4a, 0x64, 0x78, 0x1e, 0xa1, 0xf0, 0x2a, 0x9f, - 0x87, 0x0d, 0xd8, 0xb6, 0x93, 0x81, 0xc0, 0x42, 0xbc, 0x84, 0x1b, 0xde, 0xc9, 0x25, 0x9c, 0xfa, - 0xfb, 0x59, 0x34, 0x58, 0x6a, 0xb7, 0x83, 0xa1, 0xf0, 0x38, 0x2a, 0x94, 0xda, 0xed, 0x9b, 0x5a, - 0x45, 0x0c, 0x20, 0xae, 0xb7, 0xdb, 0xf5, 0x8e, 0x63, 0x8a, 0x9e, 0x98, 0x8c, 0x08, 0x4f, 0xa0, - 0xe1, 0x52, 0xbb, 0x5d, 0xed, 0x2c, 0x36, 0xcd, 0x86, 0x90, 0x8f, 0x88, 0xa5, 0x4e, 0x6b, 0xb7, - 0xeb, 0x6d, 0xc0, 0x44, 0x93, 0x52, 0xc9, 0x65, 0xf0, 0x47, 0x21, 0xd8, 0x0e, 0x4f, 0x87, 0xc3, - 0x12, 0x6e, 0xa8, 0x41, 0xe8, 0xf0, 0xb0, 0x6d, 0x97, 0x03, 0x22, 0x16, 0x62, 0xfd, 0xac, 0x1f, - 0xa8, 0x9e, 0x56, 0x14, 0x4b, 0x7b, 0x13, 0xb2, 0xc4, 0x4f, 0xa0, 0xbe, 0x52, 0xbb, 0x2d, 0xdc, - 0xf2, 0x80, 0x2b, 0x0f, 0x2d, 0x15, 0xe9, 0x63, 0x9f, 0xec, 0xcc, 0x8b, 0x68, 0x44, 0xae, 0x6c, - 0x5b, 0x21, 0xda, 0xbf, 0x99, 0x81, 0x0f, 0x3a, 0xe0, 0x9e, 0xc4, 0x4f, 0xa1, 0x5c, 0xa9, 0xdd, - 0xe6, 0xf3, 0xd1, 0xf1, 0x84, 0xfe, 0x88, 0x3e, 0x3c, 0x2e, 0xb5, 0xdb, 0xfe, 0xa7, 0x1f, 0xf0, - 0x27, 0x09, 0x3b, 0xfa, 0xf4, 0xaf, 0xb0, 0x4f, 0x3f, 0xd8, 0xcf, 0x05, 0xd4, 0x2f, 0xe6, 0xd0, - 0xb1, 0x52, 0xbb, 0x7d, 0x14, 0xda, 0x7d, 0xaf, 0x9e, 0x37, 0x3f, 0x89, 0x90, 0x30, 0x3d, 0xf6, - 0x05, 0x0f, 0xa6, 0x06, 0x85, 0xa9, 0x51, 0xc9, 0x68, 0x02, 0x91, 0xaf, 0x7e, 0xfd, 0xdb, 0x52, - 0xbf, 0x8f, 0xe7, 0x60, 0x2a, 0x3e, 0xe8, 0xa1, 0x9a, 0xde, 0x29, 0xdd, 0xc6, 0xfb, 0xa0, 0xb0, - 0xad, 0x3e, 0xf8, 0x2d, 0x69, 0xf0, 0x40, 0xa8, 0xf0, 0xa3, 0x5e, 0xe8, 0xdd, 0x95, 0x59, 0x3c, - 0x22, 0x0a, 0x93, 0xc7, 0x8f, 0xf1, 0xd3, 0x17, 0xf1, 0x68, 0x46, 0x0d, 0x8a, 0xaa, 0x9b, 0x86, - 0x16, 0xa1, 0xf5, 0xfb, 0xb0, 0x6f, 0x5b, 0x7d, 0xb8, 0x9e, 0x85, 0x17, 0xcb, 0x41, 0x34, 0xa4, - 0xdd, 0xef, 0x2e, 0xae, 0x20, 0xc4, 0xee, 0xfb, 0x03, 0x67, 0xe2, 0x61, 0x16, 0xf8, 0x84, 0x65, - 0x35, 0xe2, 0x81, 0x4f, 0x42, 0x92, 0xc0, 0x2f, 0x29, 0x97, 0xe8, 0x97, 0x74, 0x09, 0xf5, 0x6b, - 0xfa, 0xea, 0x6b, 0x1d, 0xe2, 0xac, 0x71, 0x73, 0x86, 0x05, 0x1b, 0xd4, 0x57, 0xeb, 0x1f, 0xa3, - 0x40, 0x2d, 0x40, 0x63, 0x35, 0x78, 0xf2, 0x2e, 0xf8, 0x61, 0xb0, 0x93, 0xe9, 0xe0, 0xa1, 0xfb, - 0x4e, 0x14, 0x1d, 0x3f, 0x8f, 0x72, 0xa5, 0xdb, 0x35, 0x2e, 0xd9, 0xa0, 0x6b, 0x4b, 0xb7, 0x6b, - 0x5c, 0x5e, 0xa9, 0x65, 0x6f, 0xd7, 0xd4, 0x8f, 0x67, 0x11, 0x8e, 0x53, 0xe2, 0x67, 0xd0, 0x00, - 0x40, 0x97, 0xa9, 0xce, 0x88, 0xe9, 0x30, 0x57, 0xdd, 0xba, 0x03, 0x50, 0xc9, 0xb8, 0xf3, 0x49, - 0xf1, 0x73, 0x90, 0xf9, 0x97, 0x27, 0x64, 0x93, 0xd2, 0x61, 0xae, 0xba, 0x7e, 0xae, 0xdc, 0x48, - 0xe2, 0x5f, 0x4e, 0x0c, 0x76, 0xe1, 0xed, 0xda, 0xb4, 0xed, 0x7a, 0x5c, 0xd4, 0xcc, 0x2e, 0x5c, - 0x75, 0x21, 0x0f, 0xab, 0x64, 0x17, 0x32, 0x32, 0xc8, 0x25, 0x75, 0xbb, 0xc6, 0x1e, 0x87, 0x18, - 0x9a, 0xdd, 0xf4, 0x0d, 0x4a, 0x96, 0x4b, 0x6a, 0xd5, 0xad, 0xb3, 0x87, 0x25, 0x06, 0xa4, 0x1c, - 0x96, 0x72, 0x49, 0x49, 0xa5, 0xd4, 0x4f, 0xf7, 0xa3, 0xd1, 0xb2, 0xee, 0xe9, 0x8b, 0xba, 0x4b, - 0x84, 0xdd, 0xf4, 0x31, 0x1f, 0xe6, 0x7f, 0x8e, 0x20, 0x07, 0x63, 0x31, 0xe1, 0x6b, 0xa2, 0x05, - 0xf0, 0x0b, 0x21, 0xdf, 0x20, 0xd3, 0xa7, 0x98, 0x3a, 0x6c, 0xb1, 0xde, 0xe6, 0x60, 0x2d, 0x46, - 0x88, 0x1f, 0x43, 0x83, 0x3e, 0x8c, 0x6e, 0x00, 0x72, 0xa1, 0xce, 0x18, 0x8b, 0xd4, 0xfe, 0xd7, - 0x44, 0x34, 0x7e, 0x0e, 0x0d, 0xf9, 0x3f, 0x05, 0xd3, 0x9a, 0xe5, 0x41, 0x5b, 0x8c, 0xed, 0x9e, - 0x44, 0x52, 0xb1, 0x28, 0xcc, 0x6f, 0xbd, 0x52, 0xd1, 0x48, 0xaa, 0x31, 0x89, 0x14, 0x7f, 0x0c, - 0x8d, 0xf8, 0xbf, 0xf9, 0x86, 0x81, 0x65, 0x65, 0x7b, 0x2c, 0xc8, 0x68, 0x1c, 0x11, 0xeb, 0x65, - 0x99, 0x9c, 0x6d, 0x1d, 0xee, 0xf7, 0xb3, 0x67, 0x19, 0x8b, 0xf1, 0x9d, 0x43, 0xa4, 0x02, 0x5c, - 0x41, 0x63, 0x3e, 0x24, 0xd4, 0xd0, 0xbe, 0x70, 0xc7, 0x68, 0x2c, 0xd6, 0x13, 0x95, 0x34, 0x5e, - 0x0a, 0x37, 0xd1, 0x59, 0x09, 0x68, 0xb8, 0x2b, 0xe6, 0x92, 0xc7, 0xb7, 0x7b, 0x3c, 0xf2, 0x2f, - 0x4f, 0x97, 0x18, 0x70, 0x65, 0x34, 0x7e, 0xde, 0x53, 0x39, 0x27, 0x53, 0x57, 0x6e, 0xb8, 0x86, - 0x4e, 0xf8, 0xf8, 0xeb, 0x13, 0xd5, 0xaa, 0x63, 0xbf, 0x41, 0x1a, 0x5e, 0xa5, 0xcc, 0xb7, 0xcb, - 0x10, 0x11, 0xce, 0x58, 0xac, 0x2f, 0x37, 0xda, 0x54, 0x29, 0x28, 0x4e, 0x66, 0x9e, 0x58, 0x18, - 0xdf, 0x42, 0xf7, 0x09, 0xf0, 0x8a, 0xe5, 0x7a, 0xba, 0xd5, 0x20, 0x95, 0x32, 0xdf, 0x43, 0xc3, - 0x7e, 0x9e, 0x73, 0x35, 0x39, 0x52, 0x66, 0x9b, 0x5c, 0x1c, 0xbf, 0x88, 0x86, 0x7d, 0x04, 0xbb, - 0xbb, 0x1b, 0x84, 0xbb, 0x3b, 0x18, 0x92, 0xc6, 0x62, 0x3d, 0xfa, 0x86, 0x51, 0x26, 0x16, 0x35, - 0x0a, 0x12, 0xca, 0x0f, 0x49, 0x1a, 0xe5, 0xad, 0xb5, 0x13, 0x95, 0x11, 0x92, 0xcc, 0xbf, 0x1c, - 0x6a, 0xd4, 0xbc, 0x63, 0x2e, 0x9b, 0x6c, 0x27, 0xed, 0x3f, 0x5b, 0x5c, 0xac, 0xdb, 0x00, 0x4c, - 0xd2, 0x0f, 0x46, 0x7e, 0xa6, 0x84, 0x8e, 0x27, 0xe8, 0xd8, 0xb6, 0x76, 0x8c, 0x9f, 0xca, 0x86, - 0x8d, 0x38, 0xe0, 0xdb, 0xc6, 0x71, 0xd4, 0xef, 0x7f, 0x09, 0x37, 0x1e, 0x94, 0xb4, 0xa1, 0x19, - 0xe5, 0xe1, 0xe3, 0x25, 0x71, 0x1c, 0xf0, 0xad, 0xe4, 0x5e, 0x88, 0xe3, 0xad, 0x4c, 0x28, 0x8e, - 0x03, 0xbe, 0xbd, 0xfc, 0x9e, 0x7c, 0x38, 0x27, 0x1d, 0xed, 0x31, 0xf7, 0xca, 0x4c, 0x0e, 0xbd, - 0x4f, 0x0b, 0xdb, 0x78, 0x3e, 0x28, 0xaa, 0x66, 0xdf, 0xce, 0x54, 0x13, 0xbf, 0x88, 0x06, 0xab, - 0xb6, 0xeb, 0x2d, 0x3b, 0xc4, 0xad, 0x06, 0x91, 0xeb, 0xe1, 0xe9, 0x69, 0x9b, 0x83, 0xeb, 0x6d, - 0x69, 0xf6, 0x17, 0xc9, 0xd5, 0x3f, 0xcc, 0xc5, 0xb4, 0x81, 0x19, 0xae, 0x07, 0x52, 0x1b, 0xf6, - 0x60, 0xa8, 0xe3, 0xab, 0xe1, 0x2a, 0xc8, 0x2c, 0xfc, 0x5e, 0x21, 0x2c, 0xdf, 0x22, 0x37, 0xf0, - 0x65, 0x12, 0xfc, 0x21, 0x74, 0x4a, 0x02, 0x54, 0x75, 0x47, 0x6f, 0x11, 0x2f, 0xcc, 0x12, 0x08, - 0x81, 0x96, 0xfc, 0xd2, 0xf5, 0x76, 0x80, 0x16, 0x33, 0x0f, 0xa6, 0x70, 0x10, 0x54, 0xab, 0x6f, - 0x1b, 0x8e, 0xcd, 0x7f, 0x94, 0x47, 0x4a, 0x60, 0x5e, 0x06, 0x4f, 0x78, 0xf6, 0x71, 0x2a, 0x7f, - 0x47, 0x74, 0xae, 0x89, 0xc6, 0x42, 0x61, 0xd4, 0x3a, 0xad, 0x96, 0x0e, 0x1d, 0x4c, 0xcd, 0xd7, - 0x62, 0x94, 0x59, 0x48, 0xc8, 0x2c, 0xd6, 0x33, 0xdc, 0x62, 0xc5, 0xe1, 0x13, 0xa9, 0xba, 0xcb, - 0x58, 0x68, 0x71, 0xae, 0xf8, 0x33, 0x19, 0x74, 0xa2, 0xb4, 0xb4, 0x44, 0x1a, 0x1e, 0x31, 0xe6, - 0x17, 0xa9, 0xe9, 0x36, 0x61, 0x77, 0x2c, 0xcf, 0xb7, 0x96, 0x9f, 0x4f, 0xaf, 0x8e, 0x75, 0xd2, - 0xe5, 0xa4, 0xc2, 0xac, 0x25, 0x41, 0xc8, 0x01, 0x9d, 0x93, 0xd4, 0x6d, 0xa0, 0xa9, 0x37, 0x80, - 0x48, 0x4b, 0xac, 0xf7, 0xcc, 0x75, 0x74, 0x3a, 0x95, 0xe5, 0x66, 0xa6, 0x52, 0xaf, 0x68, 0x2a, - 0xfd, 0xab, 0x4c, 0xa8, 0xee, 0x11, 0x21, 0xe1, 0xcb, 0x08, 0x85, 0x20, 0xbe, 0x79, 0x1a, 0xd9, - 0x58, 0x2f, 0xa2, 0x50, 0x68, 0x9a, 0x40, 0x81, 0xe7, 0x51, 0x81, 0x8b, 0x85, 0xe5, 0x7d, 0x7d, - 0xef, 0x26, 0xbd, 0x70, 0x59, 0x94, 0x03, 0x6c, 0x8c, 0xf8, 0x37, 0x73, 0x36, 0x67, 0x9e, 0x43, - 0x83, 0x3b, 0xfd, 0xae, 0xcf, 0xe4, 0x10, 0x16, 0x77, 0x3a, 0xfb, 0x68, 0x06, 0xbe, 0x23, 0x06, - 0xcb, 0xce, 0xf2, 0xb6, 0x5c, 0x44, 0xfd, 0xf4, 0x13, 0x20, 0x13, 0x82, 0x10, 0xf9, 0xb4, 0xc3, - 0x61, 0x5a, 0x80, 0x0d, 0xc3, 0x0e, 0xf5, 0x25, 0x87, 0x1d, 0x52, 0xbf, 0x3f, 0x87, 0x4e, 0x8a, - 0x1d, 0x52, 0x26, 0x10, 0x4c, 0xfd, 0xa8, 0x53, 0xde, 0xc6, 0x4e, 0x51, 0x51, 0x81, 0x19, 0xb8, - 0x3c, 0xaa, 0x3d, 0x3b, 0x7c, 0x00, 0x88, 0xc6, 0x31, 0xea, 0xbf, 0xcf, 0xa2, 0xe1, 0xc0, 0x88, - 0xd0, 0x1d, 0xf7, 0x10, 0x77, 0xc7, 0xfb, 0xd0, 0x30, 0x04, 0x8e, 0x69, 0x11, 0x8b, 0x05, 0x57, - 0xe9, 0x15, 0xd2, 0x50, 0xf8, 0x08, 0x9e, 0x71, 0x48, 0x22, 0xa4, 0xda, 0xcf, 0xec, 0x0b, 0x21, - 0x9c, 0x0f, 0x33, 0x2e, 0x18, 0x5c, 0xfd, 0x89, 0x1c, 0x1a, 0xf2, 0xa5, 0x3c, 0x6e, 0x1e, 0xd4, - 0xdb, 0x84, 0xfd, 0x15, 0xf2, 0x15, 0x84, 0xaa, 0xb6, 0xe3, 0xe9, 0xcd, 0xb9, 0x50, 0xf3, 0xe1, - 0x18, 0xae, 0x0d, 0x50, 0x56, 0x46, 0x20, 0x81, 0xf5, 0x2b, 0x34, 0xde, 0xd8, 0xc4, 0xc4, 0xd6, - 0xaf, 0x00, 0xaa, 0x09, 0x14, 0xea, 0x6f, 0x64, 0xd1, 0x31, 0xbf, 0x93, 0x26, 0xef, 0x91, 0x46, - 0xe7, 0x30, 0xcf, 0x4d, 0xb2, 0xb4, 0x7b, 0x37, 0x95, 0xb6, 0xfa, 0x5f, 0x85, 0x89, 0x64, 0xa2, - 0x69, 0x1f, 0x4d, 0x24, 0x7f, 0x1d, 0x3a, 0xae, 0x7e, 0x7b, 0x0e, 0x9d, 0xf0, 0xa5, 0x3e, 0xd5, - 0xb1, 0x60, 0x03, 0x3b, 0xa1, 0x37, 0x9b, 0x87, 0x79, 0xcf, 0x37, 0xe8, 0x0b, 0x62, 0x9e, 0x47, - 0x62, 0xe3, 0xd9, 0xdf, 0x96, 0x38, 0xb8, 0x6e, 0x9b, 0x86, 0x26, 0x12, 0xe1, 0x97, 0xd1, 0x90, - 0xff, 0xb3, 0xe4, 0x2c, 0xfb, 0x1b, 0x3d, 0x38, 0x8e, 0x0e, 0x0a, 0xe9, 0x8e, 0xf4, 0xe0, 0x5c, - 0x2a, 0xa0, 0xfe, 0xc7, 0x02, 0x3a, 0x73, 0xdb, 0xb4, 0x0c, 0x7b, 0xd5, 0xf5, 0x93, 0x07, 0x1e, - 0xf8, 0xe3, 0x98, 0xfd, 0x4e, 0x1a, 0xf8, 0x1a, 0xba, 0x2f, 0x2a, 0x52, 0x27, 0x08, 0xe9, 0xcc, - 0x7b, 0x67, 0x95, 0x11, 0xd4, 0xfd, 0x34, 0x82, 0xfc, 0x4e, 0x47, 0x4b, 0x2e, 0x19, 0xcd, 0x43, - 0xd8, 0xb7, 0x95, 0x3c, 0x84, 0x8f, 0xa2, 0x42, 0xd9, 0x6e, 0xe9, 0xa6, 0x1f, 0x7a, 0x04, 0x46, - 0x71, 0x50, 0x2f, 0x60, 0x34, 0x4e, 0x41, 0xf9, 0xf3, 0x8a, 0xa1, 0xcb, 0x06, 0x42, 0xfe, 0x7e, - 0x01, 0x6a, 0xa5, 0x69, 0x22, 0x11, 0xb6, 0xd1, 0x30, 0xaf, 0x8e, 0xdf, 0xc0, 0x20, 0xd8, 0x3c, - 0x3d, 0xed, 0xcb, 0x28, 0x5d, 0xad, 0x2e, 0x4b, 0xe5, 0xd8, 0x36, 0x8a, 0xa5, 0x47, 0xe4, 0x1f, - 0xc3, 0xee, 0x62, 0x34, 0x99, 0xbf, 0x20, 0x04, 0x98, 0x64, 0x06, 0xe3, 0x42, 0x80, 0x59, 0x46, - 0x24, 0xc2, 0x93, 0x68, 0x0c, 0x02, 0xef, 0x06, 0x5b, 0x29, 0xaa, 0x12, 0x43, 0x60, 0x54, 0xc2, - 0xc1, 0x3e, 0x8b, 0xd5, 0x4b, 0x3f, 0xae, 0xde, 0xe0, 0x68, 0x2d, 0x5e, 0xe2, 0xcc, 0x2b, 0x08, - 0xc7, 0xdb, 0xbc, 0xad, 0xa3, 0xfd, 0x4f, 0x67, 0xc3, 0x7d, 0xdd, 0x41, 0x77, 0xce, 0xd8, 0x8b, - 0xc3, 0xec, 0x5f, 0xc8, 0xa0, 0xb1, 0x58, 0x20, 0x67, 0xfc, 0x14, 0x42, 0x0c, 0x22, 0x04, 0xcc, - 0x83, 0x08, 0x14, 0x61, 0x70, 0x67, 0xbe, 0x94, 0x84, 0x64, 0xf8, 0x0a, 0xea, 0x67, 0xbf, 0x78, - 0x90, 0x9b, 0x78, 0x91, 0x4e, 0xc7, 0x34, 0xb4, 0x80, 0x28, 0xac, 0x05, 0xee, 0x88, 0x72, 0x89, - 0x45, 0xbc, 0xb5, 0x76, 0x50, 0x0b, 0x25, 0xa3, 0x1d, 0x38, 0x14, 0x34, 0xb8, 0x64, 0xec, 0x57, - 0xd7, 0x15, 0x78, 0x4c, 0xec, 0xdc, 0x66, 0x31, 0xb1, 0x23, 0x73, 0x13, 0x0f, 0x82, 0xbd, 0x77, - 0x0f, 0x4b, 0x3e, 0x9b, 0x45, 0xc7, 0x82, 0x5a, 0xf7, 0xf1, 0x3a, 0xe2, 0x1d, 0x24, 0x92, 0xcf, - 0x64, 0x90, 0x32, 0x6e, 0x36, 0x9b, 0xa6, 0xb5, 0x5c, 0xb1, 0x96, 0x6c, 0xa7, 0x05, 0x93, 0xc7, - 0xfe, 0x1d, 0x77, 0xaa, 0xdf, 0x95, 0x41, 0x63, 0xbc, 0x41, 0x13, 0xba, 0x63, 0xec, 0xdf, 0x59, - 0x52, 0xb4, 0x25, 0xfb, 0xa7, 0x2f, 0xea, 0x97, 0xb2, 0x08, 0xcd, 0xd8, 0x8d, 0x3b, 0x07, 0xfc, - 0x65, 0xe1, 0x0b, 0xa8, 0xc0, 0x22, 0x0d, 0x71, 0x8d, 0x1d, 0xbb, 0xcc, 0x1e, 0x8c, 0xd2, 0x4f, - 0x63, 0x88, 0xf1, 0x51, 0x7e, 0x42, 0x5b, 0x60, 0x91, 0x8a, 0x94, 0x8c, 0xc6, 0x8b, 0xd0, 0x4a, - 0x29, 0x1d, 0xb7, 0x6a, 0x82, 0x4a, 0x29, 0x4c, 0xae, 0x74, 0x63, 0xbd, 0x98, 0x6f, 0xda, 0x8d, - 0x3b, 0x1a, 0xd0, 0xab, 0x7f, 0x95, 0x61, 0xb2, 0x3b, 0xe0, 0xaf, 0xeb, 0xfc, 0xcf, 0xcf, 0x6f, - 0xf3, 0xf3, 0xbf, 0x3b, 0x83, 0x4e, 0x68, 0xa4, 0x61, 0xdf, 0x25, 0xce, 0xda, 0x84, 0x6d, 0x90, - 0xeb, 0xc4, 0x22, 0xce, 0x7e, 0x8d, 0xa8, 0x7f, 0x00, 0x49, 0x04, 0xc2, 0xc6, 0xdc, 0x74, 0x89, - 0x71, 0x70, 0x12, 0x3c, 0xa8, 0xbf, 0xd2, 0x87, 0x94, 0x44, 0x0b, 0xf1, 0xc0, 0x5a, 0x45, 0xa9, - 0x66, 0x7f, 0x7e, 0xaf, 0xcc, 0xfe, 0xde, 0xed, 0x99, 0xfd, 0x85, 0xed, 0x9a, 0xfd, 0x7d, 0x5b, - 0x31, 0xfb, 0x5b, 0x51, 0xb3, 0xbf, 0x1f, 0xcc, 0xfe, 0xa7, 0xba, 0x9a, 0xfd, 0x93, 0x96, 0xb1, - 0x43, 0xa3, 0xff, 0xc0, 0x26, 0x1f, 0xdd, 0xc9, 0x6e, 0xe5, 0x22, 0x9d, 0x14, 0x1b, 0xb6, 0x63, - 0x10, 0x83, 0x6f, 0x52, 0xe0, 0x84, 0xdc, 0xe1, 0x30, 0x2d, 0xc0, 0xc6, 0x32, 0xb9, 0x0e, 0x6f, - 0x25, 0x93, 0xeb, 0x1e, 0x6c, 0x63, 0x3e, 0x95, 0x45, 0x63, 0x13, 0xc4, 0xf1, 0x58, 0x28, 0xc3, - 0xbd, 0x70, 0x52, 0x2a, 0xa1, 0x63, 0x02, 0x43, 0xb0, 0xc8, 0xb3, 0xa1, 0xe3, 0x55, 0x83, 0x38, - 0x5e, 0xd4, 0x6f, 0x2b, 0x4a, 0x4f, 0xab, 0xf7, 0xb3, 0x29, 0xf1, 0xb1, 0x1b, 0x54, 0xef, 0xc3, - 0x99, 0x20, 0x4d, 0xfe, 0x4b, 0x0b, 0xe8, 0x85, 0x04, 0x49, 0xf9, 0xed, 0x27, 0x48, 0x52, 0x7f, - 0x2e, 0x83, 0x2e, 0x68, 0xc4, 0x22, 0xab, 0xfa, 0x62, 0x93, 0x08, 0xcd, 0xe2, 0x2b, 0x03, 0x9d, - 0x35, 0x4c, 0xb7, 0xa5, 0x7b, 0x8d, 0x95, 0x5d, 0xc9, 0x68, 0x0a, 0x0d, 0x89, 0xf3, 0xd7, 0x36, - 0xe6, 0x36, 0xa9, 0x9c, 0xfa, 0xeb, 0x39, 0xd4, 0x37, 0x6e, 0x7b, 0xaf, 0xda, 0xbb, 0xcc, 0xd8, - 0x15, 0x4e, 0xf9, 0xd9, 0x6d, 0x9c, 0x8b, 0x3c, 0x01, 0x95, 0x0b, 0x41, 0xcc, 0xc1, 0xa9, 0x6f, - 0xd1, 0x8e, 0x05, 0x7b, 0xf7, 0xc9, 0xb6, 0x99, 0xab, 0xeb, 0x19, 0x34, 0x00, 0x51, 0x30, 0x84, - 0x93, 0x4b, 0x70, 0x99, 0xf5, 0x28, 0x30, 0x5a, 0x47, 0x48, 0x8a, 0x3f, 0x24, 0xc5, 0x5e, 0x2c, - 0xec, 0x3e, 0xb7, 0x97, 0x18, 0x86, 0x71, 0xcf, 0x52, 0x68, 0xa9, 0xdf, 0xc8, 0xa3, 0x21, 0xdf, - 0x51, 0x72, 0x9f, 0x7a, 0xf0, 0x71, 0x54, 0x98, 0xb6, 0x85, 0x80, 0xec, 0xe0, 0x58, 0xb9, 0x62, - 0xbb, 0x11, 0x8f, 0x51, 0x4e, 0x84, 0x9f, 0x42, 0xfd, 0x73, 0xb6, 0x21, 0xba, 0x05, 0xc3, 0x98, - 0xb6, 0x6c, 0x23, 0xf6, 0xac, 0x32, 0x20, 0xc4, 0x17, 0x50, 0x1e, 0x3c, 0xaa, 0x85, 0xa3, 0xe7, - 0x88, 0x17, 0x35, 0xe0, 0x05, 0xdd, 0x28, 0x6c, 0x57, 0x37, 0xfa, 0x76, 0xaa, 0x1b, 0xfd, 0x7b, - 0xab, 0x1b, 0xaf, 0xa3, 0x21, 0xa8, 0xc9, 0xcf, 0xe7, 0xb4, 0xf9, 0xf2, 0x76, 0x9a, 0xaf, 0x40, - 0xc3, 0xac, 0xdd, 0x3c, 0xab, 0x13, 0x2c, 0x3c, 0x12, 0xab, 0x88, 0xda, 0xa1, 0x5d, 0xa8, 0xdd, - 0x1f, 0x66, 0x50, 0xdf, 0x4d, 0xeb, 0x8e, 0x65, 0xaf, 0xee, 0x4e, 0xe3, 0x9e, 0x42, 0x83, 0x9c, - 0x8d, 0x30, 0xc7, 0xc3, 0x4b, 0xd9, 0x0e, 0x03, 0xd7, 0x81, 0x93, 0x26, 0x52, 0xe1, 0x17, 0x83, - 0x42, 0xf0, 0x68, 0x22, 0x17, 0xa6, 0x34, 0xf0, 0x0b, 0x35, 0xe4, 0x28, 0xec, 0x22, 0x39, 0x3e, - 0x8b, 0xf2, 0x65, 0xda, 0x54, 0x21, 0xa6, 0x27, 0x6d, 0x8a, 0x06, 0x50, 0xf5, 0x9f, 0x65, 0xd1, - 0x48, 0xe4, 0xf8, 0xe9, 0x51, 0x34, 0xc0, 0x8f, 0x7f, 0x4c, 0x3f, 0x2c, 0x3c, 0x3c, 0xaa, 0x08, - 0x80, 0x5a, 0x3f, 0xfb, 0xb3, 0x62, 0xe0, 0xf7, 0xa3, 0x3e, 0xdb, 0x85, 0xa5, 0x09, 0xbe, 0x65, - 0x24, 0x1c, 0x42, 0xf3, 0x35, 0xda, 0x76, 0x36, 0x38, 0x38, 0x89, 0xa8, 0x91, 0xb6, 0x0b, 0x9f, - 0x76, 0x0d, 0x0d, 0xe8, 0xae, 0x4b, 0xbc, 0xba, 0xa7, 0x2f, 0x8b, 0x91, 0xe2, 0x03, 0xa0, 0x38, - 0x3a, 0x00, 0xb8, 0xa0, 0x2f, 0xe3, 0x57, 0xd0, 0x70, 0xc3, 0x21, 0xb0, 0x78, 0xe9, 0x4d, 0xda, - 0x4a, 0xc1, 0xb8, 0x94, 0x10, 0xe2, 0x89, 0x7f, 0x88, 0xa8, 0x18, 0xf8, 0x16, 0x1a, 0xe6, 0x9f, - 0xc3, 0x3c, 0x9a, 0x61, 0xa0, 0x8d, 0x84, 0x8b, 0x09, 0x13, 0x09, 0xf3, 0x69, 0xe6, 0x8e, 0xed, - 0x22, 0xb9, 0xc8, 0xd7, 0x10, 0x48, 0xd5, 0xaf, 0x66, 0xa8, 0xc1, 0x43, 0x01, 0x90, 0x61, 0x95, - 0xea, 0x4a, 0x6b, 0x9b, 0xba, 0xd2, 0x0a, 0x73, 0xa1, 0x15, 0xdc, 0x2e, 0xb3, 0x93, 0xc6, 0xb1, - 0xf8, 0x32, 0x2a, 0x18, 0xe2, 0xd9, 0xcf, 0x49, 0xf9, 0x23, 0xfc, 0x7a, 0x34, 0x4e, 0x85, 0x2f, - 0xa2, 0x3c, 0x35, 0x68, 0xa3, 0x1b, 0x3f, 0x71, 0x8d, 0xd4, 0x80, 0x42, 0xfd, 0xd6, 0x2c, 0x1a, - 0x12, 0xbe, 0xe6, 0xea, 0xae, 0x3e, 0xe7, 0xf9, 0xad, 0x35, 0xd3, 0x77, 0x73, 0x80, 0x1d, 0x81, - 0xdf, 0xe4, 0x6b, 0x81, 0x28, 0xb6, 0x74, 0x05, 0xc1, 0x05, 0xf3, 0x0c, 0xff, 0xd0, 0xc2, 0xd6, - 0x37, 0x41, 0x94, 0xfe, 0xd5, 0x7c, 0x7f, 0x76, 0x34, 0xf7, 0x6a, 0xbe, 0x3f, 0x3f, 0xda, 0x0b, - 0x51, 0x75, 0x20, 0x90, 0x2d, 0xdb, 0x61, 0x5a, 0x4b, 0xe6, 0xf2, 0x01, 0xf7, 0x49, 0xdf, 0xdb, - 0x88, 0x43, 0x11, 0xd9, 0x1c, 0x70, 0x07, 0xf5, 0xb7, 0x55, 0x36, 0x47, 0xb9, 0xd3, 0xb8, 0x6c, - 0xfe, 0x28, 0x83, 0x94, 0x44, 0xd9, 0x94, 0xf6, 0xe9, 0xe6, 0x7b, 0xef, 0x32, 0xa8, 0x7d, 0x3d, - 0x8b, 0xc6, 0x2a, 0x96, 0x47, 0x96, 0xd9, 0xbe, 0xe7, 0x80, 0x4f, 0x15, 0x37, 0xd0, 0xa0, 0xf0, - 0x31, 0xbc, 0xcf, 0xef, 0x0f, 0x76, 0x95, 0x21, 0x2a, 0x85, 0x93, 0x58, 0x7a, 0x0f, 0x93, 0x2e, - 0x47, 0x84, 0x7c, 0xc0, 0xe7, 0x9c, 0x83, 0x21, 0xe4, 0x03, 0x3e, 0x79, 0xbd, 0x43, 0x85, 0xfc, - 0x9f, 0x33, 0xe8, 0x78, 0x42, 0xe5, 0xf8, 0x02, 0xea, 0xab, 0x75, 0x16, 0x21, 0x9c, 0x4f, 0x26, - 0xf4, 0x11, 0x75, 0x3b, 0x8b, 0x10, 0xc9, 0x47, 0xf3, 0x91, 0x78, 0x01, 0x1e, 0xed, 0xce, 0x57, - 0xca, 0x13, 0x5c, 0xaa, 0xaa, 0xf0, 0xfc, 0x98, 0x82, 0x93, 0xbe, 0x2c, 0x78, 0xd8, 0x6b, 0x9b, - 0x46, 0x23, 0xf2, 0xb0, 0x97, 0x96, 0xc1, 0x1f, 0x46, 0x03, 0xa5, 0x37, 0x3b, 0x0e, 0x01, 0xbe, - 0x4c, 0xe2, 0x0f, 0x07, 0x7c, 0x7d, 0x44, 0x12, 0x67, 0xf6, 0x46, 0x99, 0x52, 0x44, 0x79, 0x87, - 0x0c, 0xd5, 0x4f, 0x67, 0xd0, 0x99, 0xf4, 0xd6, 0xe1, 0x27, 0x50, 0x1f, 0xdd, 0xd9, 0x96, 0xb4, - 0x39, 0xfe, 0xe9, 0x2c, 0xdb, 0xa0, 0xdd, 0x24, 0x75, 0xdd, 0x11, 0x0d, 0x6f, 0x9f, 0x0c, 0xbf, - 0x84, 0x06, 0x2b, 0xae, 0xdb, 0x21, 0x4e, 0xed, 0xa9, 0x9b, 0x5a, 0x85, 0xef, 0xa9, 0xc0, 0x66, - 0x37, 0x01, 0x5c, 0x77, 0x9f, 0x8a, 0x04, 0xec, 0x11, 0xe9, 0xd5, 0x4f, 0x64, 0xd0, 0xd9, 0x6e, - 0x5f, 0x45, 0x37, 0xf0, 0x0b, 0xc4, 0xd2, 0x2d, 0xba, 0xe3, 0xcf, 0x84, 0x5b, 0x14, 0x0f, 0x60, - 0xf2, 0x26, 0x23, 0x20, 0xa4, 0x85, 0xd8, 0xe9, 0x58, 0x70, 0x1d, 0xcf, 0x4e, 0xf2, 0x00, 0x16, - 0x29, 0xe4, 0x13, 0xaa, 0xbf, 0x9b, 0x45, 0x43, 0xd5, 0x66, 0x67, 0xd9, 0x14, 0x16, 0x8e, 0x1d, - 0xdb, 0xdb, 0xbe, 0xf5, 0x9b, 0xdd, 0x9e, 0xf5, 0x4b, 0x87, 0x9b, 0xb3, 0xc3, 0xe1, 0xe6, 0x97, - 0xc3, 0x2f, 0xa2, 0x42, 0x1b, 0xbe, 0x23, 0x7a, 0x9e, 0xc8, 0xbe, 0x2e, 0xed, 0x3c, 0x91, 0x95, - 0xa1, 0xe3, 0xab, 0xb1, 0x8b, 0xf1, 0x15, 0x96, 0x15, 0x04, 0x1a, 0x2e, 0x12, 0x47, 0x02, 0xdd, - 0x13, 0x81, 0x86, 0x0b, 0xc2, 0x91, 0x40, 0x77, 0x21, 0xd0, 0x5f, 0xc9, 0xa2, 0x11, 0xb9, 0x4a, - 0xfc, 0x04, 0x1a, 0x64, 0xd5, 0xb0, 0x73, 0x95, 0x8c, 0xe0, 0x46, 0x1a, 0x82, 0x35, 0xc4, 0x7e, - 0xf0, 0x03, 0xa2, 0x63, 0x2b, 0xba, 0x5b, 0x0f, 0x4f, 0x38, 0xd8, 0x2d, 0x64, 0x3f, 0xf3, 0xe7, - 0x89, 0xa0, 0xb4, 0x91, 0x15, 0xdd, 0x9d, 0x08, 0x7f, 0xe3, 0x49, 0x84, 0x21, 0x4d, 0xbb, 0xcc, - 0x80, 0xe5, 0xdd, 0xe7, 0xa9, 0x5e, 0xa3, 0x58, 0x6d, 0x8c, 0xc1, 0x44, 0x36, 0x1f, 0x09, 0x9a, - 0x0d, 0xca, 0xd0, 0xbb, 0x85, 0x3c, 0xb4, 0x02, 0x7d, 0xf2, 0x31, 0x21, 0x23, 0x28, 0xeb, 0x9e, - 0xce, 0x36, 0xe5, 0x7e, 0x07, 0xa8, 0x7f, 0x66, 0xa2, 0xde, 0x79, 0x8b, 0xcc, 0x2f, 0xe1, 0x27, - 0xd1, 0x00, 0x55, 0x98, 0x19, 0x9b, 0xf6, 0x65, 0x86, 0x7b, 0x01, 0x08, 0x9a, 0x04, 0x88, 0xe9, - 0x1e, 0x2d, 0xa4, 0xc2, 0xd7, 0xc4, 0x4c, 0xec, 0x5c, 0xfb, 0xb0, 0x58, 0x86, 0x61, 0xa6, 0x7b, - 0x34, 0x31, 0x63, 0xfb, 0x35, 0x31, 0x03, 0x36, 0xd7, 0x3b, 0xa9, 0x14, 0xc3, 0xf8, 0xa5, 0xf8, - 0xf8, 0x98, 0x49, 0x4a, 0x13, 0x1d, 0xdd, 0x3d, 0xc5, 0x29, 0xa6, 0x7b, 0xb4, 0xe4, 0xf4, 0xd2, - 0x43, 0xa2, 0x0b, 0x61, 0xd4, 0x75, 0x41, 0xc4, 0x4d, 0xf7, 0x68, 0x12, 0x2d, 0x7e, 0x16, 0x0d, - 0xf2, 0xdf, 0xaf, 0xda, 0xa6, 0x15, 0x8d, 0x71, 0x22, 0xa0, 0xa6, 0x7b, 0x34, 0x91, 0x52, 0xa8, - 0xb4, 0xea, 0x98, 0x96, 0xc7, 0xdf, 0x3e, 0x46, 0x2b, 0x05, 0x9c, 0x50, 0x29, 0xfc, 0xc6, 0x2f, - 0xa1, 0xe1, 0x20, 0x78, 0xcc, 0x1b, 0xa4, 0xe1, 0xf1, 0xc3, 0xe3, 0xfb, 0x22, 0x85, 0x19, 0x72, - 0xba, 0x47, 0x93, 0xa9, 0xf1, 0x45, 0x54, 0xd0, 0x88, 0x6b, 0xbe, 0xe9, 0x5f, 0x7a, 0x8e, 0x08, - 0xe3, 0xdc, 0x7c, 0x93, 0x4a, 0x89, 0xe3, 0x69, 0xef, 0x84, 0xb7, 0xac, 0xfc, 0xa8, 0x17, 0x47, - 0x6a, 0x99, 0xb4, 0x0c, 0xda, 0x3b, 0xc2, 0x15, 0xfb, 0x2b, 0x61, 0x48, 0x1d, 0x9e, 0xfe, 0x6e, - 0x30, 0xfa, 0x76, 0x59, 0xc4, 0x4e, 0xf7, 0x68, 0x11, 0x7a, 0x41, 0xaa, 0x65, 0xd3, 0xbd, 0xc3, - 0xa3, 0x18, 0x46, 0xa5, 0x4a, 0x51, 0x82, 0x54, 0xe9, 0x4f, 0xa1, 0xea, 0x39, 0xe2, 0xad, 0xda, - 0xce, 0x1d, 0x1e, 0xb3, 0x30, 0x5a, 0x35, 0xc7, 0x0a, 0x55, 0x73, 0x88, 0x58, 0x35, 0x1d, 0x70, - 0x23, 0xc9, 0x55, 0xeb, 0x9e, 0x2e, 0x56, 0xcd, 0x4e, 0xe2, 0xfc, 0x4e, 0x9a, 0x21, 0xfa, 0x5d, - 0x96, 0x85, 0x38, 0xde, 0xa1, 0x80, 0x13, 0x3a, 0x14, 0x7e, 0xd3, 0x4a, 0x85, 0x4c, 0xb3, 0x3c, - 0xcd, 0x70, 0x50, 0xa9, 0x80, 0xa2, 0x95, 0x8a, 0x39, 0x69, 0xaf, 0x89, 0x09, 0x58, 0x95, 0x31, - 0xb9, 0x83, 0x42, 0x0c, 0xed, 0x20, 0x21, 0x51, 0x6b, 0x11, 0x92, 0x3b, 0x2a, 0x18, 0xc8, 0x07, - 0x83, 0x16, 0x4e, 0x54, 0xa7, 0x7b, 0x34, 0x48, 0xfb, 0xa8, 0xb2, 0xb4, 0xa1, 0xca, 0x71, 0xa0, - 0x18, 0xf2, 0x29, 0x28, 0x6c, 0xba, 0x47, 0x63, 0x29, 0x45, 0x9f, 0x14, 0x12, 0x74, 0x29, 0x27, - 0xe4, 0x29, 0x22, 0x40, 0xd0, 0x29, 0x22, 0x4c, 0xe3, 0x35, 0x15, 0x4f, 0x62, 0xa5, 0xdc, 0x27, - 0x2f, 0x35, 0x51, 0xfc, 0x74, 0x8f, 0x16, 0x4f, 0x7c, 0xf5, 0xac, 0x94, 0xd7, 0x49, 0x39, 0x19, - 0x09, 0x2c, 0x14, 0xa2, 0xa8, 0xb8, 0xc4, 0x0c, 0x50, 0xf3, 0x89, 0x99, 0xd8, 0x95, 0x53, 0xf2, - 0xc6, 0x25, 0x81, 0x64, 0xba, 0x47, 0x4b, 0xcc, 0xe1, 0x3e, 0x11, 0xcb, 0xae, 0xa4, 0x28, 0xb2, - 0x87, 0x47, 0x04, 0x3d, 0xdd, 0xa3, 0xc5, 0xf2, 0x31, 0x5d, 0x13, 0xd3, 0x1a, 0x29, 0xa7, 0xe5, - 0x4e, 0x0c, 0x31, 0xb4, 0x13, 0x85, 0xf4, 0x47, 0xd7, 0xc4, 0x54, 0x37, 0xca, 0x99, 0x78, 0xa9, - 0x70, 0xe6, 0x14, 0x52, 0xe2, 0x68, 0xc9, 0xd9, 0x3b, 0x94, 0xfb, 0x79, 0xfe, 0x44, 0x5e, 0x3e, - 0x89, 0x66, 0xba, 0x47, 0x4b, 0xce, 0xfc, 0xa1, 0x25, 0xa7, 0xbd, 0x50, 0xce, 0x76, 0xe3, 0x19, - 0xb4, 0x2e, 0x39, 0x65, 0x86, 0xde, 0x25, 0x09, 0x81, 0x72, 0x4e, 0x8e, 0x6a, 0x9a, 0x4a, 0x38, - 0xdd, 0xa3, 0x75, 0x49, 0x65, 0x70, 0x33, 0x25, 0x23, 0x80, 0x72, 0x5e, 0x4e, 0x9f, 0x9a, 0x48, - 0x34, 0xdd, 0xa3, 0xa5, 0xe4, 0x13, 0xb8, 0x99, 0x12, 0x30, 0x5e, 0x29, 0x76, 0x65, 0x1b, 0xc8, - 0x23, 0x25, 0xdc, 0xfc, 0x7c, 0x62, 0xac, 0x75, 0xe5, 0x01, 0x59, 0x75, 0x13, 0x48, 0xa8, 0xea, - 0x26, 0x45, 0x69, 0x9f, 0x4f, 0x0c, 0x0e, 0xae, 0x3c, 0xd8, 0x85, 0x61, 0xd0, 0xc6, 0xc4, 0xb0, - 0xe2, 0xf3, 0x89, 0xd1, 0xb9, 0x15, 0x55, 0x66, 0x98, 0x40, 0x42, 0x19, 0x26, 0xc5, 0xf5, 0x9e, - 0x4f, 0x0c, 0x27, 0xad, 0x3c, 0xd4, 0x85, 0x61, 0xd8, 0xc2, 0xa4, 0x40, 0xd4, 0xcf, 0x4a, 0xf1, - 0x9c, 0x95, 0x87, 0xe5, 0x79, 0x43, 0x40, 0xd1, 0x79, 0x43, 0x8c, 0xfc, 0x3c, 0x11, 0x8b, 0x58, - 0xa9, 0x3c, 0x22, 0x0f, 0xf3, 0x08, 0x9a, 0x0e, 0xf3, 0x68, 0x8c, 0xcb, 0x89, 0x58, 0xe4, 0x3e, - 0xe5, 0x42, 0x1a, 0x13, 0x40, 0xcb, 0x4c, 0x58, 0xac, 0xbf, 0x4a, 0x42, 0xe8, 0x38, 0xe5, 0x3d, - 0xb2, 0x77, 0x72, 0x8c, 0x60, 0xba, 0x47, 0x4b, 0x08, 0x38, 0xa7, 0x25, 0xc7, 0x49, 0x51, 0x2e, - 0xca, 0xc3, 0x36, 0x89, 0x86, 0x0e, 0xdb, 0xc4, 0x18, 0x2b, 0x33, 0x49, 0x2f, 0x11, 0x94, 0x4b, - 0xb2, 0x61, 0x16, 0xa7, 0xa0, 0x86, 0x59, 0xc2, 0x0b, 0x06, 0x2d, 0x39, 0x76, 0x87, 0xf2, 0x68, - 0xd7, 0x16, 0x02, 0x4d, 0x42, 0x0b, 0x59, 0x28, 0x8b, 0xd0, 0x76, 0xba, 0xd9, 0x6e, 0xda, 0xba, - 0xa1, 0xbc, 0x37, 0xd1, 0x76, 0x62, 0x48, 0xc1, 0x76, 0x62, 0x00, 0xba, 0xca, 0x8b, 0x9e, 0xfa, - 0xca, 0x63, 0xf2, 0x2a, 0x2f, 0xe2, 0xe8, 0x2a, 0x2f, 0x79, 0xf5, 0x4f, 0xc4, 0xbc, 0xda, 0x95, - 0xc7, 0x65, 0x05, 0x88, 0xa0, 0xa9, 0x02, 0x44, 0xfd, 0xe0, 0x3f, 0x9a, 0xee, 0x07, 0xae, 0x5c, - 0x06, 0x6e, 0x0f, 0xf8, 0xdc, 0xd2, 0xe8, 0xa6, 0x7b, 0xb4, 0x74, 0x5f, 0xf2, 0x4a, 0x82, 0x5b, - 0xb7, 0x72, 0x45, 0x56, 0xb0, 0x18, 0x01, 0x55, 0xb0, 0xb8, 0x33, 0x78, 0x25, 0xc1, 0x2f, 0x5b, - 0x79, 0x22, 0x95, 0x55, 0xf0, 0xcd, 0x09, 0xde, 0xdc, 0xd7, 0x44, 0xc7, 0x6a, 0xe5, 0x49, 0x79, - 0xb1, 0x0b, 0x31, 0x74, 0xb1, 0x13, 0x1c, 0xb0, 0xaf, 0x89, 0x2e, 0xc5, 0xca, 0xd5, 0x78, 0xa9, - 0x70, 0x89, 0x14, 0x5c, 0x8f, 0xb5, 0x64, 0x4f, 0x5c, 0xe5, 0x29, 0x59, 0xeb, 0x92, 0x68, 0xa8, - 0xd6, 0x25, 0x7a, 0xf1, 0x4e, 0xc5, 0x1d, 0x6a, 0x95, 0x6b, 0xd1, 0x4d, 0xb6, 0x8c, 0xa7, 0x96, - 0x4f, 0xcc, 0x09, 0xf7, 0x95, 0x68, 0x10, 0x2f, 0xe5, 0xe9, 0xc8, 0xb5, 0xaf, 0x84, 0xa5, 0xf6, - 0x6d, 0x24, 0xe8, 0xd7, 0x2b, 0xd1, 0xb8, 0x57, 0xca, 0x33, 0xc9, 0x1c, 0x02, 0x5d, 0x89, 0xc6, - 0xc9, 0x7a, 0x25, 0x1a, 0x2a, 0x4a, 0x79, 0x36, 0x99, 0x43, 0x20, 0xdd, 0x68, 0x68, 0xa9, 0x27, - 0x85, 0xe0, 0xd5, 0xca, 0xfb, 0x64, 0xd3, 0x31, 0x40, 0x50, 0xd3, 0x31, 0x0c, 0x71, 0xfd, 0xa4, - 0x10, 0xf4, 0x59, 0x79, 0x2e, 0x56, 0x24, 0x68, 0xac, 0x10, 0x1a, 0xfa, 0x49, 0x21, 0x58, 0xb2, - 0xf2, 0x7c, 0xac, 0x48, 0xd0, 0x3a, 0x21, 0xa4, 0xb2, 0xd1, 0xed, 0xc5, 0xa2, 0xf2, 0x82, 0x7c, - 0x18, 0x9c, 0x4e, 0x39, 0xdd, 0xa3, 0x75, 0x7b, 0xf9, 0xf8, 0xd1, 0x74, 0xf7, 0x64, 0xe5, 0x45, - 0x79, 0x08, 0xa7, 0xd1, 0xd1, 0x21, 0x9c, 0xea, 0xe2, 0xfc, 0x52, 0x24, 0x7a, 0x81, 0xf2, 0x92, - 0x3c, 0xc5, 0x49, 0x48, 0x3a, 0xc5, 0x45, 0x63, 0x1d, 0x48, 0xcf, 0xf2, 0x95, 0xf7, 0xcb, 0x53, - 0x9c, 0x88, 0xa3, 0x53, 0x9c, 0xf4, 0x84, 0x7f, 0x22, 0xf6, 0x5a, 0x5c, 0x79, 0x59, 0x9e, 0xe2, - 0x22, 0x68, 0x3a, 0xc5, 0x45, 0xdf, 0x97, 0xbf, 0x14, 0x79, 0x34, 0xad, 0xbc, 0x92, 0xdc, 0x7e, - 0x40, 0x8a, 0xed, 0x67, 0x4f, 0xac, 0xb5, 0xe4, 0xd7, 0xbf, 0x4a, 0x49, 0x1e, 0xbf, 0x49, 0x34, - 0x74, 0xfc, 0x26, 0xbe, 0x1c, 0x8e, 0x6e, 0x1c, 0xb8, 0x56, 0x8d, 0x77, 0xd9, 0x38, 0x84, 0xa6, - 0x48, 0x02, 0x58, 0xda, 0x23, 0xb3, 0x8d, 0xd0, 0x44, 0xca, 0x1e, 0xd9, 0xdf, 0x06, 0x45, 0xe8, - 0xe9, 0xec, 0x1a, 0xf3, 0x96, 0x55, 0xca, 0xf2, 0xec, 0x1a, 0x23, 0xa0, 0xb3, 0x6b, 0xdc, 0xc7, - 0x76, 0x0a, 0x8d, 0x72, 0x2d, 0x62, 0x4e, 0xc0, 0xa6, 0xb5, 0xac, 0x4c, 0x46, 0x1e, 0xdf, 0x45, - 0xf0, 0x74, 0x76, 0x8a, 0xc2, 0x60, 0xbd, 0x66, 0xb0, 0x89, 0xa6, 0xd9, 0x5e, 0xb4, 0x75, 0xc7, - 0xa8, 0x11, 0xcb, 0x50, 0xa6, 0x22, 0xeb, 0x75, 0x02, 0x0d, 0xac, 0xd7, 0x09, 0x70, 0x08, 0x3d, - 0x15, 0x81, 0x6b, 0xa4, 0x41, 0xcc, 0xbb, 0x44, 0xb9, 0x0e, 0x6c, 0x8b, 0x69, 0x6c, 0x39, 0xd9, - 0x74, 0x8f, 0x96, 0xc6, 0x81, 0xda, 0xea, 0xb3, 0x6b, 0xb5, 0xd7, 0x66, 0x82, 0x07, 0xe7, 0x55, - 0x87, 0xb4, 0x75, 0x87, 0x28, 0xd3, 0xb2, 0xad, 0x9e, 0x48, 0x44, 0x6d, 0xf5, 0x44, 0x44, 0x9c, - 0xad, 0x3f, 0x16, 0x2a, 0xdd, 0xd8, 0x86, 0x23, 0x22, 0xb9, 0x34, 0x9d, 0x9d, 0x64, 0x04, 0x15, - 0xd0, 0x8c, 0x6d, 0x2d, 0xc3, 0x49, 0xc5, 0xab, 0xf2, 0xec, 0x94, 0x4e, 0x49, 0x67, 0xa7, 0x74, - 0x2c, 0x55, 0x75, 0x19, 0xcb, 0xc6, 0xe0, 0x0d, 0x59, 0xd5, 0x13, 0x48, 0xa8, 0xaa, 0x27, 0x80, - 0xe3, 0x0c, 0x35, 0xe2, 0x12, 0x4f, 0x99, 0xe9, 0xc6, 0x10, 0x48, 0xe2, 0x0c, 0x01, 0x1c, 0x67, - 0x38, 0x45, 0xbc, 0xc6, 0x8a, 0x32, 0xdb, 0x8d, 0x21, 0x90, 0xc4, 0x19, 0x02, 0x98, 0x6e, 0x36, - 0x65, 0xf0, 0x78, 0xa7, 0x79, 0xc7, 0xef, 0xb3, 0x39, 0x79, 0xb3, 0x99, 0x4a, 0x48, 0x37, 0x9b, - 0xa9, 0x48, 0xfc, 0x89, 0x2d, 0x7b, 0x73, 0x2b, 0xf3, 0x50, 0xe1, 0xe5, 0xd0, 0x2e, 0xd8, 0x4a, - 0xa9, 0xe9, 0x1e, 0x6d, 0xab, 0xde, 0xe2, 0xef, 0x0d, 0x9c, 0x2e, 0x95, 0x2a, 0x54, 0x75, 0x2c, - 0x38, 0xab, 0x60, 0xe0, 0xe9, 0x1e, 0x2d, 0x70, 0xcb, 0x7c, 0x16, 0x0d, 0xc2, 0x47, 0x55, 0x2c, - 0xd3, 0x2b, 0x8f, 0x2b, 0xaf, 0xc9, 0x5b, 0x26, 0x01, 0x45, 0xb7, 0x4c, 0xc2, 0x4f, 0x3a, 0x89, - 0xc3, 0x4f, 0x36, 0xc5, 0x94, 0xc7, 0x15, 0x4d, 0x9e, 0xc4, 0x25, 0x24, 0x9d, 0xc4, 0x25, 0x40, - 0x50, 0x6f, 0xd9, 0xb1, 0xdb, 0xe5, 0x71, 0xa5, 0x96, 0x50, 0x2f, 0x43, 0x05, 0xf5, 0xb2, 0x9f, - 0x41, 0xbd, 0xb5, 0x95, 0x8e, 0x57, 0xa6, 0xdf, 0xb8, 0x90, 0x50, 0xaf, 0x8f, 0x0c, 0xea, 0xf5, - 0x01, 0x74, 0x2a, 0x04, 0x40, 0xd5, 0xb1, 0xe9, 0xa4, 0x7d, 0xc3, 0x6c, 0x36, 0x95, 0x9b, 0xf2, - 0x54, 0x18, 0xc5, 0xd3, 0xa9, 0x30, 0x0a, 0xa3, 0xa6, 0x27, 0x6b, 0x15, 0x59, 0xec, 0x2c, 0x2b, - 0xb7, 0x64, 0xd3, 0x33, 0xc4, 0x50, 0xd3, 0x33, 0xfc, 0x05, 0xbb, 0x0b, 0xfa, 0x4b, 0x23, 0x4b, - 0x0e, 0x71, 0x57, 0x94, 0xdb, 0x91, 0xdd, 0x85, 0x80, 0x83, 0xdd, 0x85, 0xf0, 0x1b, 0x2f, 0xa3, - 0xfb, 0xa5, 0x85, 0xc6, 0xbf, 0xb4, 0xa9, 0x11, 0xdd, 0x69, 0xac, 0x28, 0x1f, 0x00, 0x56, 0x0f, - 0x25, 0x2e, 0x55, 0x32, 0xe9, 0x74, 0x8f, 0xd6, 0x8d, 0x13, 0x6c, 0xcb, 0x5f, 0x9b, 0x61, 0x11, - 0x26, 0xb5, 0xea, 0x84, 0xbf, 0x09, 0x7d, 0x3d, 0xb2, 0x2d, 0x8f, 0x93, 0xc0, 0xb6, 0x3c, 0x0e, - 0xc6, 0x6d, 0x74, 0x3e, 0xb2, 0x55, 0x9b, 0xd5, 0x9b, 0x74, 0x5f, 0x42, 0x8c, 0xaa, 0xde, 0xb8, - 0x43, 0x3c, 0xe5, 0x83, 0xc0, 0xfb, 0x42, 0xca, 0x86, 0x2f, 0x42, 0x3d, 0xdd, 0xa3, 0x6d, 0xc2, - 0x0f, 0xab, 0x28, 0x5f, 0x9b, 0x5a, 0xa8, 0x2a, 0x1f, 0x92, 0xcf, 0x37, 0x29, 0x6c, 0xba, 0x47, - 0x03, 0x1c, 0xb5, 0xd2, 0x6e, 0xb6, 0x97, 0x1d, 0xdd, 0x20, 0xcc, 0xd0, 0x02, 0xdb, 0x8d, 0x1b, - 0xa0, 0x1f, 0x96, 0xad, 0xb4, 0x34, 0x3a, 0x6a, 0xa5, 0xa5, 0xe1, 0xa8, 0xa2, 0x4a, 0xc9, 0x14, - 0x94, 0x8f, 0xc8, 0x8a, 0x2a, 0x21, 0xa9, 0xa2, 0xca, 0xa9, 0x17, 0x3e, 0x80, 0x4e, 0x06, 0xfb, - 0x79, 0xbe, 0xfe, 0xb2, 0x4e, 0x53, 0x3e, 0x0a, 0x7c, 0xce, 0xc7, 0x2e, 0x03, 0x24, 0xaa, 0xe9, - 0x1e, 0x2d, 0xa5, 0x3c, 0x5d, 0x71, 0x63, 0x79, 0x82, 0xb8, 0x79, 0xf1, 0x2d, 0xf2, 0x8a, 0x9b, - 0x42, 0x46, 0x57, 0xdc, 0x14, 0x54, 0x22, 0x73, 0x2e, 0x54, 0x7d, 0x13, 0xe6, 0x81, 0x4c, 0xd3, - 0x38, 0x24, 0x32, 0xe7, 0x96, 0xda, 0xe2, 0x26, 0xcc, 0x03, 0x6b, 0x2d, 0x8d, 0x03, 0xbe, 0x88, - 0x0a, 0xb5, 0xda, 0xac, 0xd6, 0xb1, 0x94, 0x46, 0xc4, 0x5b, 0x16, 0xa0, 0xd3, 0x3d, 0x1a, 0xc7, - 0x53, 0x33, 0x68, 0xb2, 0xa9, 0xbb, 0x9e, 0xd9, 0x70, 0x61, 0xc4, 0xf8, 0x23, 0xc4, 0x90, 0xcd, - 0xa0, 0x24, 0x1a, 0x6a, 0x06, 0x25, 0xc1, 0xa9, 0xbd, 0x38, 0xa1, 0xbb, 0xae, 0x6e, 0x19, 0x8e, - 0x3e, 0x0e, 0xcb, 0x04, 0x89, 0xbc, 0x29, 0x92, 0xb0, 0xd4, 0x5e, 0x94, 0x21, 0x70, 0xf8, 0xee, - 0x43, 0x7c, 0x33, 0x67, 0x29, 0x72, 0xf8, 0x1e, 0xc1, 0xc3, 0xe1, 0x7b, 0x04, 0x06, 0x76, 0xa7, - 0x0f, 0xd3, 0xc8, 0xb2, 0x49, 0x45, 0xa4, 0x2c, 0x47, 0xec, 0xce, 0x28, 0x01, 0xd8, 0x9d, 0x51, - 0xa0, 0xd4, 0x24, 0x7f, 0xb9, 0x5d, 0x49, 0x69, 0x52, 0xb8, 0xca, 0xc6, 0xca, 0xd0, 0xf5, 0x3b, - 0x1c, 0x1c, 0xe5, 0x35, 0x4b, 0x6f, 0xd9, 0xe5, 0x71, 0x5f, 0xea, 0xa6, 0xbc, 0x7e, 0xa7, 0x12, - 0xd2, 0xf5, 0x3b, 0x15, 0x49, 0x67, 0x57, 0x7f, 0xa3, 0xb5, 0xa2, 0x3b, 0xc4, 0x28, 0x9b, 0x0e, - 0x9c, 0x2c, 0xae, 0xb1, 0xad, 0xe1, 0x1b, 0xf2, 0xec, 0xda, 0x85, 0x94, 0xce, 0xae, 0x5d, 0xd0, - 0xd4, 0xc8, 0x4b, 0x46, 0x6b, 0x44, 0x37, 0x94, 0x3b, 0xb2, 0x91, 0x97, 0x4e, 0x49, 0x8d, 0xbc, - 0x74, 0x6c, 0xfa, 0xe7, 0xdc, 0x76, 0x4c, 0x8f, 0x28, 0xcd, 0xad, 0x7c, 0x0e, 0x90, 0xa6, 0x7f, - 0x0e, 0xa0, 0xe9, 0x86, 0x30, 0xda, 0x21, 0x2d, 0x79, 0x43, 0x18, 0xef, 0x86, 0x68, 0x09, 0x6a, - 0xb1, 0xf0, 0xa7, 0x65, 0x8a, 0x25, 0x5b, 0x2c, 0x1c, 0x4c, 0x2d, 0x96, 0xf0, 0xf1, 0x99, 0xf4, - 0x94, 0x49, 0xb1, 0xe5, 0x35, 0x54, 0xc4, 0xd1, 0x35, 0x54, 0x7a, 0xf6, 0xf4, 0xac, 0xf4, 0xce, - 0x40, 0x69, 0xcb, 0x56, 0x87, 0x80, 0xa2, 0x56, 0x87, 0xf8, 0x22, 0x61, 0x02, 0x1d, 0x83, 0x5b, - 0x70, 0xad, 0x13, 0xdc, 0xe3, 0x7c, 0x4c, 0xfe, 0xcc, 0x08, 0x9a, 0x7e, 0x66, 0x04, 0x24, 0x31, - 0xe1, 0xd3, 0x96, 0x93, 0xc2, 0x24, 0x3c, 0x1f, 0x8c, 0x80, 0xf0, 0x0c, 0xc2, 0xb5, 0xd2, 0xec, - 0x4c, 0xc5, 0xa8, 0x8a, 0x57, 0x64, 0xae, 0x7c, 0x02, 0x1b, 0xa7, 0x98, 0xee, 0xd1, 0x12, 0xca, - 0xe1, 0x37, 0xd0, 0x59, 0x0e, 0xe5, 0xef, 0x86, 0x21, 0x89, 0xb7, 0x11, 0x2c, 0x08, 0x9e, 0xec, - 0xc7, 0xd6, 0x8d, 0x76, 0xba, 0x47, 0xeb, 0xca, 0x2b, 0xbd, 0x2e, 0xbe, 0x3e, 0x74, 0xb6, 0x52, - 0x57, 0xb0, 0x48, 0x74, 0xe5, 0x95, 0x5e, 0x17, 0x97, 0xfb, 0xdd, 0xad, 0xd4, 0x15, 0x74, 0x42, - 0x57, 0x5e, 0xd8, 0x45, 0xc5, 0x6e, 0xf8, 0x52, 0xb3, 0xa9, 0xac, 0x42, 0x75, 0xef, 0xd9, 0x4a, - 0x75, 0x25, 0x30, 0x38, 0x37, 0xe3, 0x48, 0x67, 0xe9, 0xf9, 0x36, 0xb1, 0x6a, 0xd2, 0x02, 0x74, - 0x4f, 0x9e, 0xa5, 0x63, 0x04, 0x74, 0x96, 0x8e, 0x01, 0xe9, 0x80, 0x12, 0x9f, 0xab, 0x28, 0x6b, - 0xf2, 0x80, 0x12, 0x71, 0x74, 0x40, 0x49, 0x4f, 0x5b, 0xe6, 0xd1, 0xf1, 0xf9, 0x3b, 0x9e, 0xee, - 0x5b, 0x90, 0x2e, 0xef, 0xca, 0x37, 0x23, 0x97, 0x4c, 0x71, 0x12, 0xb8, 0x64, 0x8a, 0x83, 0xe9, - 0x18, 0xa1, 0xe0, 0xda, 0x9a, 0xd5, 0x98, 0xd2, 0xcd, 0x66, 0xc7, 0x21, 0xca, 0xff, 0x21, 0x8f, - 0x91, 0x08, 0x9a, 0x8e, 0x91, 0x08, 0x88, 0x2e, 0xd0, 0x14, 0x54, 0x72, 0x5d, 0x73, 0xd9, 0xe2, - 0xfb, 0xca, 0x4e, 0xd3, 0x53, 0xfe, 0x4f, 0x79, 0x81, 0x4e, 0xa2, 0xa1, 0x0b, 0x74, 0x12, 0x1c, - 0x4e, 0x9d, 0x12, 0x12, 0xdc, 0x2b, 0xff, 0x57, 0xe4, 0xd4, 0x29, 0x81, 0x06, 0x4e, 0x9d, 0x92, - 0x92, 0xe3, 0x4f, 0xa1, 0x51, 0x66, 0x93, 0xcd, 0x98, 0xc1, 0x5d, 0xf5, 0xff, 0x2d, 0xaf, 0x8f, - 0x51, 0x3c, 0x5d, 0x1f, 0xa3, 0x30, 0x99, 0x0f, 0xef, 0x82, 0xff, 0x27, 0x8d, 0x4f, 0x20, 0xff, - 0x58, 0x19, 0x7c, 0x5d, 0xe4, 0xc3, 0x47, 0xca, 0xb7, 0x66, 0xd2, 0x18, 0x05, 0xc3, 0x23, 0x56, - 0x48, 0x66, 0xa4, 0x91, 0xbb, 0x26, 0x59, 0x55, 0x3e, 0x9e, 0xca, 0x88, 0x11, 0xc8, 0x8c, 0x18, - 0x0c, 0xbf, 0x8e, 0x4e, 0x86, 0xb0, 0x59, 0xd2, 0x5a, 0x0c, 0x66, 0xa6, 0x6f, 0xcb, 0xc8, 0x66, - 0x70, 0x32, 0x19, 0x35, 0x83, 0x93, 0x31, 0x49, 0xac, 0xb9, 0xe8, 0xfe, 0xdf, 0x4d, 0x58, 0x07, - 0x12, 0x4c, 0x61, 0x90, 0xc4, 0x9a, 0x4b, 0xf3, 0xdb, 0x37, 0x61, 0x1d, 0xc8, 0x34, 0x85, 0x01, - 0xfe, 0x64, 0x06, 0x5d, 0x48, 0x46, 0x95, 0x9a, 0xcd, 0x29, 0xdb, 0x09, 0x71, 0xca, 0x77, 0x64, - 0xe4, 0x83, 0x86, 0xad, 0x15, 0x9b, 0xee, 0xd1, 0xb6, 0x58, 0x01, 0x7e, 0x3f, 0x1a, 0x2e, 0x75, - 0x0c, 0xd3, 0x83, 0x8b, 0x37, 0x6a, 0x38, 0x7f, 0x67, 0x26, 0xb2, 0xc5, 0x11, 0xb1, 0xb0, 0xc5, - 0x11, 0x01, 0xf8, 0x55, 0x34, 0x56, 0x23, 0x8d, 0x8e, 0x63, 0x7a, 0x6b, 0x1a, 0x69, 0xdb, 0x8e, - 0x47, 0x79, 0x7c, 0x57, 0x46, 0x9e, 0xc4, 0x62, 0x14, 0x74, 0x12, 0x8b, 0x01, 0xf1, 0xad, 0x94, - 0x14, 0xf7, 0xca, 0x27, 0x32, 0x5d, 0xaf, 0xe5, 0x83, 0xbe, 0x4c, 0xc9, 0x90, 0x5f, 0x4d, 0x4c, - 0x19, 0xae, 0x7c, 0x32, 0xd3, 0xe5, 0x1a, 0x5d, 0x98, 0xe1, 0x12, 0xb2, 0x8d, 0x57, 0x13, 0x93, - 0x42, 0x2b, 0xdf, 0x9d, 0xe9, 0x72, 0xed, 0x1d, 0x72, 0x4c, 0xca, 0x27, 0xfd, 0x34, 0xf3, 0x14, - 0xe1, 0x8c, 0xbe, 0x27, 0x13, 0x77, 0x15, 0x09, 0xca, 0x0b, 0x84, 0xb4, 0xd8, 0x4d, 0x37, 0x50, - 0xfa, 0x4f, 0x65, 0xe2, 0xbe, 0x79, 0x61, 0xb1, 0xf0, 0x17, 0x26, 0xe8, 0xcc, 0xe4, 0x3d, 0x8f, - 0x38, 0x96, 0xde, 0x84, 0xee, 0xac, 0x79, 0xb6, 0xa3, 0x2f, 0x93, 0x49, 0x4b, 0x5f, 0x6c, 0x12, - 0xe5, 0xd3, 0x19, 0xd9, 0x82, 0x4d, 0x27, 0xa5, 0x16, 0x6c, 0x3a, 0x16, 0xaf, 0xa0, 0xfb, 0x93, - 0xb0, 0x65, 0xd3, 0x85, 0x7a, 0x3e, 0x93, 0x91, 0x4d, 0xd8, 0x2e, 0xb4, 0xd4, 0x84, 0xed, 0x82, - 0xc6, 0x57, 0xd1, 0xc0, 0xb8, 0xed, 0x4f, 0xbf, 0xdf, 0x1b, 0x71, 0x86, 0x0c, 0x30, 0xd3, 0x3d, - 0x5a, 0x48, 0xc6, 0xcb, 0xf0, 0x41, 0xfd, 0xd9, 0x78, 0x99, 0xf0, 0xf2, 0x29, 0xf8, 0xc1, 0xcb, - 0x70, 0x71, 0xff, 0x7f, 0xf1, 0x32, 0xe1, 0x1d, 0x57, 0xf0, 0x83, 0xce, 0x24, 0xac, 0xc6, 0xd9, - 0xa9, 0x12, 0xb5, 0xdb, 0x26, 0x56, 0xf4, 0x66, 0x93, 0x58, 0xcb, 0x44, 0xf9, 0x5c, 0x64, 0x26, - 0x49, 0x26, 0xa3, 0x33, 0x49, 0x32, 0x06, 0x7f, 0x18, 0x9d, 0xba, 0xa5, 0x37, 0x4d, 0x23, 0xc4, - 0xf9, 0x79, 0x86, 0x95, 0xef, 0xcb, 0xc8, 0xbb, 0xe9, 0x14, 0x3a, 0xba, 0x9b, 0x4e, 0x41, 0xe1, - 0x59, 0x84, 0x61, 0x19, 0x0d, 0x66, 0x0b, 0xba, 0x3e, 0x2b, 0xff, 0x7f, 0x46, 0xb6, 0x53, 0xe3, - 0x24, 0xd4, 0x4e, 0x8d, 0x43, 0x71, 0x3d, 0x3d, 0x19, 0x84, 0xf2, 0xfd, 0x19, 0xf9, 0xb4, 0x26, - 0x8d, 0x70, 0xba, 0x47, 0x4b, 0xcf, 0x28, 0x71, 0x1d, 0x8d, 0xd6, 0xaa, 0x95, 0xa9, 0xa9, 0xc9, - 0xda, 0xad, 0x4a, 0x19, 0x1e, 0x3a, 0x18, 0xca, 0x0f, 0x44, 0x56, 0xac, 0x28, 0x01, 0x5d, 0xb1, - 0xa2, 0x30, 0x5c, 0x43, 0x27, 0xa8, 0x20, 0xaa, 0x0e, 0x59, 0x22, 0x0e, 0xb1, 0x1a, 0xfe, 0xb0, - 0xfc, 0xa1, 0x8c, 0x6c, 0x28, 0x24, 0x11, 0x51, 0x43, 0x21, 0x09, 0x8e, 0xef, 0xa0, 0xb3, 0xd1, - 0xc3, 0x1c, 0xf1, 0xe5, 0xa8, 0xf2, 0xc3, 0x99, 0x88, 0x3d, 0xdb, 0x85, 0x18, 0xec, 0xd9, 0x2e, - 0x78, 0x6c, 0xa1, 0x73, 0xfc, 0x64, 0x84, 0xfb, 0x4c, 0x46, 0x6b, 0xfb, 0x11, 0x56, 0xdb, 0x23, - 0xa1, 0x4f, 0x5f, 0x17, 0xea, 0xe9, 0x1e, 0xad, 0x3b, 0x3b, 0xaa, 0x2a, 0xf1, 0xac, 0x05, 0xca, - 0x8f, 0x66, 0x92, 0x9d, 0x4a, 0x24, 0x4f, 0xe3, 0xa4, 0x74, 0x07, 0xaf, 0xa7, 0xc5, 0xdc, 0x57, - 0x7e, 0x2c, 0x32, 0x64, 0x92, 0xc9, 0xe8, 0x90, 0x49, 0x09, 0xda, 0xff, 0x2a, 0x1a, 0x63, 0x7a, - 0x59, 0xd5, 0x61, 0x24, 0x59, 0xcb, 0xc4, 0x50, 0xfe, 0x46, 0x64, 0xc1, 0x8a, 0x51, 0x80, 0x77, - 0x4e, 0x14, 0x48, 0x67, 0xdf, 0x5a, 0x5b, 0xb7, 0x2c, 0x38, 0x29, 0x55, 0xfe, 0x66, 0x64, 0xf6, - 0x0d, 0x51, 0xe0, 0x7b, 0x1b, 0xfc, 0x82, 0xdc, 0x69, 0x49, 0x0f, 0xab, 0x95, 0xcf, 0x47, 0xd6, - 0xb9, 0x44, 0x2a, 0xba, 0xce, 0x25, 0xbf, 0xcb, 0xbe, 0x95, 0xf2, 0x28, 0x59, 0xf9, 0xf1, 0xee, - 0x7c, 0xc3, 0xf5, 0x33, 0xf9, 0x4d, 0xf3, 0xad, 0x94, 0x07, 0xbd, 0xca, 0x4f, 0x74, 0xe7, 0x1b, - 0xba, 0xcb, 0x25, 0xbf, 0x07, 0xae, 0xa7, 0x3f, 0x86, 0x55, 0x7e, 0x32, 0x3a, 0x21, 0xa4, 0x10, - 0xc2, 0x84, 0x90, 0xf6, 0xa2, 0x76, 0x11, 0x9d, 0x66, 0x9d, 0x76, 0xdd, 0xd1, 0xdb, 0x2b, 0x35, - 0xe2, 0x79, 0xa6, 0xb5, 0xec, 0xef, 0x6f, 0xfe, 0x76, 0x26, 0x72, 0xe8, 0x94, 0x46, 0x09, 0x87, - 0x4e, 0x69, 0x48, 0xaa, 0x4f, 0xb1, 0x67, 0xaf, 0xca, 0x4f, 0x45, 0xf4, 0x29, 0x46, 0x41, 0xf5, - 0x29, 0xfe, 0x5a, 0xf6, 0xd5, 0x84, 0xd7, 0x9d, 0xca, 0xdf, 0x49, 0xe7, 0x15, 0xb4, 0x2f, 0xe1, - 0x51, 0xe8, 0xab, 0x09, 0x8f, 0x18, 0x95, 0xbf, 0x9b, 0xce, 0x2b, 0xf4, 0xec, 0x89, 0xbf, 0x7d, - 0x7c, 0x1d, 0x9d, 0x64, 0x73, 0xe4, 0x14, 0x31, 0x88, 0xf4, 0xa1, 0x3f, 0x1d, 0x19, 0x8e, 0xc9, - 0x64, 0x70, 0x90, 0x9d, 0x88, 0x49, 0x62, 0xcd, 0xdb, 0xfa, 0x33, 0x9b, 0xb0, 0x0e, 0xcd, 0xec, - 0x64, 0x0c, 0x7e, 0x41, 0x7e, 0x52, 0xa6, 0xfc, 0x6c, 0x26, 0xe2, 0x24, 0x21, 0x20, 0xc1, 0x49, - 0x42, 0x7c, 0x7f, 0xf6, 0x82, 0xfc, 0x7c, 0x4a, 0xf9, 0x7b, 0x89, 0x85, 0x83, 0x0e, 0x90, 0xdf, - 0x5a, 0xbd, 0x20, 0x3f, 0x15, 0x52, 0x7e, 0x2e, 0xb1, 0x70, 0xf0, 0x01, 0xf2, 0xbb, 0x22, 0xba, - 0xf1, 0xe8, 0x78, 0x36, 0x63, 0x25, 0x4d, 0x0f, 0x3f, 0x1f, 0xdd, 0x78, 0x24, 0x92, 0xc1, 0xc6, - 0x23, 0x11, 0x93, 0xc4, 0x9a, 0x7f, 0xde, 0x2f, 0x6c, 0xc2, 0x5a, 0xd8, 0x2e, 0x25, 0x62, 0x92, - 0x58, 0xf3, 0x8f, 0xff, 0xc2, 0x26, 0xac, 0x85, 0xed, 0x52, 0x22, 0x86, 0x1a, 0x39, 0x21, 0xe6, - 0x16, 0x71, 0xdc, 0x50, 0xfd, 0x7e, 0x31, 0x62, 0xe4, 0xa4, 0xd0, 0x51, 0x23, 0x27, 0x05, 0x95, - 0xc8, 0x9d, 0x0b, 0xe5, 0x97, 0x36, 0xe3, 0x1e, 0xde, 0x76, 0xa4, 0xa0, 0x12, 0xb9, 0x73, 0xb9, - 0xfc, 0xf2, 0x66, 0xdc, 0xc3, 0xeb, 0x8e, 0x14, 0x14, 0x35, 0x78, 0x26, 0x1c, 0x7b, 0xd5, 0x7a, - 0x95, 0xac, 0x92, 0x26, 0x17, 0xc9, 0x17, 0x23, 0x06, 0x4f, 0x94, 0x00, 0x0e, 0xe7, 0x23, 0x30, - 0x99, 0x11, 0xff, 0xfa, 0x5f, 0x4d, 0x65, 0x14, 0x9e, 0x3e, 0x44, 0x61, 0x32, 0x23, 0xfe, 0xa1, - 0xbf, 0x96, 0xca, 0x28, 0x3c, 0x7d, 0x88, 0xc2, 0xc6, 0xfb, 0x50, 0x2f, 0x1c, 0x4f, 0xa9, 0x9f, - 0xcf, 0xa0, 0xa1, 0x9a, 0xe7, 0x10, 0xbd, 0xc5, 0x83, 0x50, 0x9d, 0x41, 0xfd, 0xcc, 0xcf, 0xd3, - 0x7f, 0x94, 0xaa, 0x05, 0xbf, 0xf1, 0x05, 0x34, 0x32, 0xa3, 0xbb, 0x1e, 0x94, 0xac, 0x58, 0x06, - 0xb9, 0x07, 0x6f, 0x9c, 0x72, 0x5a, 0x04, 0x8a, 0x67, 0x18, 0x1d, 0x2b, 0x07, 0xd1, 0xff, 0x72, - 0x9b, 0xc6, 0x5e, 0xea, 0x7f, 0x6b, 0xbd, 0xd8, 0x03, 0xa1, 0x96, 0x22, 0x65, 0xd5, 0xaf, 0x66, - 0x50, 0xcc, 0x03, 0x75, 0xe7, 0x8f, 0xc5, 0xe7, 0xd1, 0xb1, 0x48, 0xc4, 0x49, 0xfe, 0x50, 0x6b, - 0x8b, 0x01, 0x29, 0xa3, 0xa5, 0xf1, 0x7b, 0x82, 0x07, 0x42, 0x37, 0xb5, 0x19, 0x1e, 0x57, 0xab, - 0x6f, 0x63, 0xbd, 0x98, 0xeb, 0x38, 0x4d, 0x4d, 0x40, 0xf1, 0xb8, 0x2f, 0x7f, 0x7f, 0x34, 0x0c, - 0xa7, 0x87, 0x2f, 0xf0, 0x97, 0xeb, 0x99, 0x30, 0x1a, 0x57, 0x24, 0x2f, 0x2f, 0x7b, 0xa9, 0xfe, - 0x7e, 0x34, 0x54, 0x69, 0xb5, 0x89, 0xe3, 0xda, 0x96, 0xee, 0xd9, 0x0e, 0x7f, 0xf8, 0x0b, 0x91, - 0x9a, 0x4c, 0x01, 0x2e, 0x46, 0x0f, 0x12, 0xe9, 0xf1, 0x25, 0x3f, 0x0d, 0x53, 0x0e, 0x02, 0x19, - 0xc2, 0xeb, 0xbd, 0x68, 0xae, 0x57, 0x46, 0x41, 0x49, 0x6f, 0xba, 0x3a, 0x3c, 0x25, 0x0b, 0x48, - 0x3b, 0x14, 0x20, 0x92, 0x02, 0x05, 0x7e, 0x0c, 0x15, 0xe0, 0xe8, 0xdd, 0x85, 0xf4, 0x6a, 0x3c, - 0x46, 0x58, 0x13, 0x20, 0x62, 0x44, 0x26, 0x46, 0x83, 0x6f, 0xa0, 0xd1, 0xf0, 0x5e, 0xf1, 0xba, - 0x63, 0x77, 0xda, 0x7e, 0x42, 0x05, 0xc8, 0x91, 0x7b, 0x27, 0xc0, 0xd5, 0x97, 0x01, 0x29, 0xb0, - 0x88, 0x15, 0xc4, 0xd3, 0xe8, 0x58, 0x08, 0xa3, 0x22, 0xf2, 0x13, 0xb9, 0x40, 0x8e, 0x68, 0x81, - 0x17, 0x15, 0xa7, 0xc8, 0x2a, 0x5a, 0x0c, 0x57, 0x50, 0x9f, 0x1f, 0x20, 0xac, 0x7f, 0x53, 0x25, - 0x3d, 0xce, 0x03, 0x84, 0xf5, 0x89, 0xa1, 0xc1, 0xfc, 0xf2, 0x78, 0x0a, 0x8d, 0x68, 0x76, 0xc7, - 0x23, 0x0b, 0x36, 0xb7, 0xe6, 0x79, 0xa4, 0x7f, 0x68, 0x93, 0x43, 0x31, 0x75, 0xcf, 0xf6, 0x53, - 0x0c, 0x8b, 0xa9, 0x6e, 0xe5, 0x52, 0x78, 0x0e, 0x8d, 0xc5, 0x6e, 0x60, 0xc5, 0xc4, 0xbf, 0xc2, - 0xe7, 0xc5, 0x99, 0xc5, 0x8b, 0xe2, 0xef, 0xcc, 0xa0, 0xc2, 0x82, 0xa3, 0x9b, 0x9e, 0xcb, 0x5f, - 0xa1, 0xdd, 0x77, 0x79, 0xd5, 0xd1, 0xdb, 0x54, 0x3f, 0x2e, 0x43, 0xa4, 0xca, 0x5b, 0x7a, 0xb3, - 0x43, 0xdc, 0xf1, 0xdb, 0xf4, 0xeb, 0xfe, 0xf5, 0x7a, 0xf1, 0x85, 0x65, 0x38, 0xe7, 0xb9, 0xdc, - 0xb0, 0x5b, 0x57, 0x96, 0x1d, 0xfd, 0xae, 0xe9, 0xc1, 0xba, 0xaf, 0x37, 0xaf, 0x78, 0xa4, 0x09, - 0xc7, 0x49, 0x57, 0xf4, 0xb6, 0x79, 0x05, 0x22, 0x22, 0x5f, 0x09, 0x38, 0xb1, 0x1a, 0xa8, 0x0a, - 0x78, 0xf0, 0x97, 0xa8, 0x02, 0x0c, 0x87, 0xe7, 0x10, 0xe2, 0x9f, 0x5a, 0x6a, 0xb7, 0xf9, 0x93, - 0x36, 0xe1, 0x10, 0xc6, 0xc7, 0x30, 0xc5, 0x0e, 0x04, 0xa6, 0xb7, 0xdb, 0x62, 0x6a, 0xf1, 0x90, - 0x8e, 0x6a, 0xc1, 0x02, 0x6f, 0x91, 0x2f, 0xa6, 0xe1, 0x50, 0xe2, 0x7e, 0x63, 0x13, 0x84, 0x14, - 0x2d, 0x86, 0x17, 0xd1, 0x31, 0xce, 0x37, 0x08, 0xbd, 0x3f, 0x22, 0xcf, 0x0a, 0x11, 0x34, 0x53, - 0xda, 0xa0, 0x8d, 0x06, 0x07, 0x8b, 0x75, 0x44, 0x4a, 0xe0, 0xf1, 0x30, 0xeb, 0xe4, 0x9c, 0xde, - 0x22, 0xae, 0x72, 0x0c, 0x34, 0xf6, 0xec, 0xc6, 0x7a, 0x51, 0xf1, 0xcb, 0x43, 0xac, 0xbc, 0xc4, - 0x0c, 0xcc, 0x50, 0x44, 0xe4, 0xc1, 0xb4, 0x7e, 0x34, 0x81, 0x47, 0x54, 0xe7, 0xe5, 0x22, 0x78, - 0x02, 0x0d, 0x07, 0x1e, 0xf5, 0x37, 0x6f, 0x56, 0xca, 0xf0, 0x66, 0x6e, 0x60, 0xfc, 0xdc, 0xc6, - 0x7a, 0xf1, 0x74, 0x24, 0xaa, 0xbf, 0xc8, 0x44, 0x2a, 0x23, 0x84, 0x21, 0x60, 0x8f, 0xe8, 0x22, - 0x61, 0x08, 0xda, 0x09, 0x61, 0x08, 0xaa, 0xf8, 0x25, 0x34, 0x58, 0xba, 0x5d, 0xe3, 0xe1, 0x15, - 0x5c, 0xe5, 0x78, 0x98, 0x4e, 0x05, 0x92, 0x70, 0xf3, 0x50, 0x0c, 0x62, 0xd3, 0x45, 0x7a, 0x3c, - 0x89, 0x46, 0x24, 0xa7, 0x1c, 0x57, 0x39, 0x01, 0x1c, 0xa0, 0xe5, 0x3a, 0x60, 0xea, 0x0e, 0x47, - 0x49, 0x69, 0xe1, 0xa5, 0x42, 0x54, 0x6b, 0xca, 0xa6, 0x0b, 0xa9, 0x29, 0x34, 0x02, 0x91, 0x1c, - 0xe0, 0x05, 0x5e, 0x3f, 0xd3, 0x1a, 0x83, 0xa3, 0xea, 0x0e, 0xc3, 0x49, 0x79, 0xe0, 0xe5, 0x62, - 0xf8, 0x0d, 0x84, 0x21, 0x99, 0x05, 0x31, 0xfc, 0x3b, 0x9a, 0x4a, 0xd9, 0x55, 0x4e, 0x42, 0xc4, - 0x5e, 0x1c, 0x7d, 0x39, 0x5e, 0x29, 0x8f, 0x5f, 0xe0, 0xd3, 0xc7, 0x79, 0x9d, 0x95, 0xaa, 0xfb, - 0xaf, 0xc6, 0xeb, 0xa6, 0x21, 0xb6, 0x38, 0x81, 0x2b, 0x5e, 0x45, 0xa7, 0xaa, 0x0e, 0xb9, 0x6b, - 0xda, 0x1d, 0xd7, 0x5f, 0x3e, 0xfc, 0x79, 0xeb, 0xd4, 0xa6, 0xf3, 0xd6, 0x83, 0xbc, 0xe2, 0xfb, - 0xda, 0x0e, 0xb9, 0x5b, 0xf7, 0xe3, 0xb4, 0x4a, 0x01, 0x0e, 0xd3, 0xb8, 0x53, 0x71, 0x41, 0x14, - 0x0b, 0x0e, 0x37, 0x89, 0xab, 0x28, 0xe1, 0x54, 0xcb, 0x82, 0x72, 0x98, 0x01, 0x4e, 0x14, 0x57, - 0xa4, 0x18, 0xd6, 0x10, 0xbe, 0x3e, 0xe1, 0xdf, 0xd7, 0x95, 0x1a, 0x2c, 0xab, 0xa3, 0x72, 0x1a, - 0x98, 0xa9, 0x54, 0x2c, 0xcb, 0x8d, 0x20, 0x66, 0x73, 0x5d, 0xe7, 0x78, 0x51, 0x2c, 0xf1, 0xd2, - 0x78, 0x06, 0x8d, 0x56, 0x1d, 0x38, 0x7a, 0xb8, 0x41, 0xd6, 0xaa, 0x76, 0xd3, 0x6c, 0xac, 0xc1, - 0x43, 0x40, 0x3e, 0x55, 0xb6, 0x19, 0xae, 0x7e, 0x87, 0xac, 0xd5, 0xdb, 0x80, 0x15, 0x97, 0x95, - 0x68, 0x49, 0x31, 0x86, 0xea, 0xfd, 0x5b, 0x8b, 0xa1, 0x4a, 0xd0, 0x28, 0xbf, 0xed, 0xbb, 0xe7, - 0x11, 0x8b, 0x2e, 0xf5, 0x2e, 0x7f, 0xf4, 0xa7, 0x44, 0x6e, 0x07, 0x03, 0x3c, 0xcf, 0x09, 0xcf, - 0x46, 0x19, 0x09, 0xc0, 0x62, 0xc3, 0xa2, 0x45, 0xd4, 0xcf, 0xe4, 0xc4, 0xa9, 0x13, 0x9f, 0x45, - 0x79, 0x21, 0x85, 0x07, 0x84, 0x5e, 0x84, 0x70, 0xc7, 0x79, 0x1e, 0xd7, 0x75, 0x80, 0x9b, 0x1d, - 0x41, 0x8c, 0x10, 0xc8, 0x6f, 0xe6, 0xc7, 0x55, 0x36, 0x0d, 0x2d, 0x24, 0x80, 0xdc, 0x52, 0x9d, - 0xc5, 0xa6, 0xd9, 0x80, 0x20, 0xd8, 0x39, 0x21, 0x28, 0x00, 0x40, 0x59, 0x0c, 0x6c, 0x81, 0x04, - 0x5f, 0x45, 0x83, 0xfe, 0x69, 0x55, 0x18, 0x7a, 0x14, 0x62, 0x23, 0xfb, 0xd9, 0xf3, 0x59, 0xe8, - 0x65, 0x81, 0x08, 0x3f, 0x8f, 0x50, 0x38, 0x92, 0xb9, 0x91, 0x04, 0xb3, 0xbc, 0x38, 0xf0, 0xc5, - 0x59, 0x3e, 0xa4, 0xa6, 0x73, 0x9e, 0xa8, 0x49, 0x7e, 0x36, 0x3d, 0x98, 0xf3, 0x24, 0xf5, 0x13, - 0xfb, 0x56, 0x2e, 0x82, 0xe7, 0xd1, 0x58, 0x4c, 0x79, 0x78, 0xa0, 0x52, 0xc8, 0xdb, 0x9b, 0xa0, - 0x79, 0xe2, 0x9a, 0x1a, 0x2b, 0xab, 0x7e, 0x5b, 0x36, 0xb6, 0x62, 0x50, 0xc1, 0x70, 0x2a, 0xa1, - 0x73, 0x40, 0x30, 0x3e, 0x6b, 0x26, 0x18, 0x81, 0x08, 0x5f, 0x44, 0xfd, 0x55, 0x3a, 0x5e, 0x1b, - 0x76, 0x93, 0x77, 0x15, 0x44, 0xe4, 0x69, 0x73, 0x98, 0x16, 0x60, 0xf1, 0x55, 0x21, 0xbf, 0xa3, - 0x10, 0xe0, 0xd7, 0xcf, 0xef, 0x28, 0x4e, 0xb8, 0x41, 0xa6, 0xc7, 0xab, 0x91, 0x54, 0x32, 0xbc, - 0x4c, 0xc2, 0x6a, 0x15, 0x26, 0xca, 0x0a, 0x6c, 0xc5, 0xde, 0xcd, 0x6c, 0x45, 0xf5, 0x37, 0x33, - 0x71, 0xed, 0xc7, 0xd7, 0xe2, 0x51, 0x3e, 0x61, 0x69, 0x08, 0x80, 0x62, 0xad, 0x41, 0xbc, 0x4f, - 0x29, 0x5e, 0x67, 0x76, 0xc7, 0xf1, 0x3a, 0x73, 0xdb, 0x8c, 0xd7, 0xa9, 0xfe, 0x8f, 0x7c, 0x57, - 0x9f, 0xd1, 0x7d, 0x89, 0x4b, 0xf5, 0x1c, 0xdd, 0xef, 0xd0, 0xda, 0x4b, 0x6e, 0xcc, 0x6a, 0x67, - 0x2e, 0x71, 0x75, 0x9d, 0x8d, 0x1a, 0x57, 0x93, 0x29, 0xf1, 0xcb, 0x68, 0xc8, 0xff, 0x00, 0x88, - 0x03, 0x2b, 0xc4, 0x2f, 0x0d, 0xd6, 0x9a, 0x48, 0xc4, 0x54, 0xa9, 0x00, 0x7e, 0x1a, 0x0d, 0x80, - 0xa5, 0xd1, 0xd6, 0x1b, 0x7e, 0x90, 0x60, 0x16, 0x55, 0xd8, 0x07, 0x8a, 0xb1, 0x97, 0x02, 0x4a, - 0xfc, 0x11, 0x54, 0xe0, 0xf1, 0xea, 0x59, 0xea, 0xe3, 0x2b, 0x5b, 0x70, 0xb2, 0xbd, 0x2c, 0xc6, - 0xaa, 0x67, 0x7b, 0x07, 0x00, 0x48, 0x7b, 0x07, 0x16, 0xa6, 0x7e, 0x01, 0x1d, 0xaf, 0x3a, 0xc4, - 0x00, 0x77, 0xee, 0xc9, 0x7b, 0x6d, 0x87, 0x67, 0x12, 0x60, 0x03, 0x18, 0x96, 0x8e, 0xb6, 0x8f, - 0xa6, 0x8b, 0x1a, 0xc7, 0x0b, 0x8c, 0x92, 0x8a, 0x53, 0x7b, 0x82, 0xb5, 0xe4, 0x06, 0x59, 0x5b, - 0xb5, 0x1d, 0x83, 0x05, 0xdb, 0xe7, 0xf6, 0x04, 0x17, 0xf4, 0x1d, 0x8e, 0x12, 0xed, 0x09, 0xb9, - 0xd0, 0x99, 0xe7, 0xd0, 0xe0, 0x4e, 0xe3, 0xbd, 0xff, 0x52, 0x36, 0xe5, 0xf5, 0xc5, 0xe1, 0xcd, - 0xd3, 0x17, 0xe4, 0x4c, 0xed, 0x4d, 0xc9, 0x99, 0xfa, 0x8d, 0x6c, 0xca, 0xd3, 0x92, 0x43, 0x9d, - 0xdb, 0x30, 0x10, 0x86, 0x9c, 0xdb, 0x30, 0x4c, 0x2b, 0x69, 0x1a, 0x9a, 0x48, 0x14, 0xc9, 0x82, - 0x5a, 0xd8, 0x34, 0x0b, 0xea, 0x4f, 0xe7, 0xba, 0x3d, 0xbd, 0x39, 0x92, 0xfd, 0x76, 0x64, 0x7f, - 0x15, 0x0d, 0x06, 0x92, 0xad, 0x94, 0xc1, 0x9e, 0x19, 0x0e, 0xb2, 0x4b, 0x30, 0x30, 0x94, 0x11, - 0x88, 0xf0, 0x25, 0xd6, 0xd6, 0x9a, 0xf9, 0x26, 0x8b, 0xb0, 0x3e, 0xcc, 0x63, 0x67, 0xeb, 0x9e, - 0x5e, 0x77, 0xcd, 0x37, 0x89, 0x16, 0xa0, 0xd5, 0x7f, 0x94, 0x4d, 0x7c, 0xbf, 0x74, 0xd4, 0x47, - 0xdb, 0xe8, 0xa3, 0x04, 0x21, 0xb2, 0x97, 0x57, 0x47, 0x42, 0xdc, 0x86, 0x10, 0xff, 0x3c, 0x9b, - 0xf8, 0x4e, 0xed, 0x48, 0x88, 0xdb, 0x99, 0x2d, 0x1e, 0x43, 0x03, 0x9a, 0xbd, 0xea, 0x4e, 0xc0, - 0x9e, 0x85, 0xcd, 0x15, 0x30, 0x51, 0x3b, 0xf6, 0xaa, 0x5b, 0x87, 0xdd, 0x88, 0x16, 0x12, 0xa8, - 0xdf, 0xcc, 0x76, 0x79, 0xc9, 0x77, 0x24, 0xf8, 0xb7, 0x73, 0x89, 0xfc, 0xd5, 0xac, 0xf4, 0x52, - 0xf0, 0x50, 0x27, 0x09, 0xaf, 0x35, 0x56, 0x48, 0x4b, 0x8f, 0x26, 0x09, 0x77, 0x01, 0xca, 0x73, - 0x8c, 0x86, 0x24, 0xea, 0x97, 0xb2, 0x91, 0xa7, 0x92, 0x47, 0xb2, 0xdb, 0xb2, 0xec, 0x02, 0xad, - 0xe3, 0xaf, 0x3f, 0x8f, 0x24, 0xb7, 0x55, 0xc9, 0x7d, 0x22, 0x1b, 0x79, 0x28, 0x7b, 0x78, 0xf3, - 0x05, 0x7f, 0x29, 0x1b, 0x7f, 0xf4, 0x7b, 0x78, 0x35, 0xe9, 0x31, 0x34, 0xc0, 0xe5, 0x10, 0x2c, - 0x15, 0x6c, 0xde, 0x67, 0x40, 0x38, 0x40, 0x0d, 0x08, 0xd4, 0xef, 0xc8, 0x22, 0xf9, 0x01, 0xf3, - 0x21, 0xd5, 0xa1, 0x5f, 0xcd, 0xca, 0x4f, 0xb7, 0x0f, 0xaf, 0xfe, 0x5c, 0x46, 0xa8, 0xd6, 0x59, - 0x6c, 0xf0, 0xc8, 0x9f, 0xbd, 0xc2, 0x09, 0x7c, 0x00, 0xd5, 0x04, 0x0a, 0xf5, 0x7f, 0x66, 0x13, - 0xdf, 0x93, 0x1f, 0x5e, 0x01, 0x3e, 0x05, 0xa7, 0xe2, 0x0d, 0x2b, 0x9c, 0xc8, 0xe1, 0x10, 0x92, - 0x8e, 0xbf, 0x58, 0x6a, 0x33, 0x9f, 0x10, 0xbf, 0x2f, 0xc1, 0x5c, 0x83, 0xc0, 0xf1, 0xa1, 0xb9, - 0x26, 0xde, 0x30, 0x08, 0x86, 0xdb, 0xef, 0x64, 0x37, 0x7b, 0x7e, 0x7f, 0x98, 0x57, 0xd5, 0xbe, - 0xaa, 0xbe, 0x06, 0x61, 0xe2, 0x68, 0x4f, 0x0c, 0xb1, 0xc4, 0x5b, 0x6d, 0x06, 0x12, 0x6f, 0xc4, - 0x38, 0x95, 0xfa, 0xa7, 0xbd, 0xc9, 0x6f, 0xbf, 0x0f, 0xaf, 0x08, 0xcf, 0xa2, 0x7c, 0x55, 0xf7, - 0x56, 0xb8, 0x26, 0xc3, 0x6d, 0x5d, 0x5b, 0xf7, 0x56, 0x34, 0x80, 0xe2, 0x4b, 0xa8, 0x5f, 0xd3, - 0x57, 0xd9, 0x99, 0x67, 0x21, 0x4c, 0x8a, 0xe6, 0xe8, 0xab, 0x75, 0x76, 0xee, 0x19, 0xa0, 0xb1, - 0x1a, 0x24, 0xe5, 0x63, 0x27, 0xdf, 0x90, 0xd1, 0x8a, 0x25, 0xe5, 0x0b, 0x52, 0xf1, 0x9d, 0x45, - 0xf9, 0x71, 0xdb, 0x58, 0x03, 0x67, 0x96, 0x21, 0x56, 0xd9, 0xa2, 0x6d, 0xac, 0x69, 0x00, 0xc5, - 0x9f, 0xcc, 0xa0, 0xbe, 0x69, 0xa2, 0x1b, 0x74, 0x84, 0x0c, 0x74, 0xf3, 0x05, 0xf9, 0xc0, 0xde, - 0xf8, 0x82, 0x8c, 0xad, 0xb0, 0xca, 0x44, 0x45, 0xe1, 0xf5, 0xe3, 0xeb, 0xa8, 0x7f, 0x42, 0xf7, - 0xc8, 0xb2, 0xed, 0xac, 0x81, 0x77, 0xcb, 0x48, 0xe8, 0xe9, 0x2c, 0xe9, 0x8f, 0x4f, 0xc4, 0x6e, - 0xc6, 0x1a, 0xfc, 0x97, 0x16, 0x14, 0xa6, 0x62, 0xe1, 0xc9, 0xba, 0x07, 0x43, 0xb1, 0xb0, 0xac, - 0xdc, 0x41, 0x4e, 0xee, 0xe0, 0x58, 0x79, 0x28, 0xf9, 0x58, 0x19, 0xac, 0x47, 0xf0, 0x80, 0x83, - 0x54, 0x78, 0xc3, 0xb0, 0xe8, 0x33, 0xeb, 0x11, 0xa0, 0x90, 0x09, 0x4f, 0x13, 0x48, 0xd4, 0xaf, - 0xf5, 0xa2, 0xc4, 0x97, 0xa2, 0x47, 0x4a, 0x7e, 0xa4, 0xe4, 0xa1, 0x92, 0x97, 0x63, 0x4a, 0x7e, - 0x26, 0xfe, 0xf6, 0xf8, 0x1d, 0xaa, 0xe1, 0x3f, 0x98, 0x8f, 0x45, 0x2e, 0x38, 0xdc, 0xbb, 0xcb, - 0x50, 0x7a, 0xbd, 0x9b, 0x4a, 0x2f, 0x18, 0x10, 0x85, 0x4d, 0x07, 0x44, 0xdf, 0x56, 0x07, 0x44, - 0x7f, 0xea, 0x80, 0x08, 0x15, 0x64, 0x20, 0x55, 0x41, 0x2a, 0x7c, 0xd0, 0xa0, 0xee, 0x09, 0x14, - 0xce, 0x6e, 0xac, 0x17, 0x47, 0xe8, 0x68, 0x4a, 0xcc, 0x9c, 0x00, 0x2c, 0xd4, 0xaf, 0xe6, 0xbb, - 0x84, 0x1b, 0xd9, 0x17, 0x1d, 0x79, 0x0a, 0xe5, 0x4a, 0xed, 0x36, 0xd7, 0x8f, 0xe3, 0x42, 0xa4, - 0x93, 0x94, 0x52, 0x94, 0x1a, 0x3f, 0x8f, 0x72, 0xa5, 0xdb, 0xb5, 0x68, 0xd2, 0x84, 0xd2, 0xed, - 0x1a, 0xff, 0x92, 0xd4, 0xb2, 0xb7, 0x6b, 0xf8, 0xc5, 0x30, 0x7a, 0xe1, 0x4a, 0xc7, 0xba, 0xc3, - 0x37, 0x8a, 0xdc, 0x09, 0xd6, 0xf7, 0xb4, 0x69, 0x50, 0x14, 0xdd, 0x2e, 0x46, 0x68, 0x23, 0xda, - 0x54, 0xd8, 0xba, 0x36, 0xf5, 0x6d, 0xaa, 0x4d, 0xfd, 0x5b, 0xd5, 0xa6, 0x81, 0x2d, 0x68, 0x13, - 0xda, 0x54, 0x9b, 0x06, 0x77, 0xaf, 0x4d, 0x6d, 0x74, 0x26, 0x1e, 0x22, 0x2a, 0xd0, 0x08, 0x0d, - 0xe1, 0x38, 0x96, 0x3b, 0x96, 0xc0, 0xd5, 0x7f, 0x87, 0x61, 0xeb, 0x2c, 0xa9, 0x7e, 0x34, 0x25, - 0xbd, 0x96, 0x50, 0x5a, 0xfd, 0xa5, 0x6c, 0x7a, 0x64, 0xab, 0x83, 0x39, 0xc5, 0x7d, 0x4b, 0xa2, - 0x94, 0xf2, 0xf2, 0x4b, 0xe3, 0x74, 0x29, 0x47, 0xd8, 0x26, 0xc9, 0xec, 0x2b, 0x99, 0xb4, 0x70, - 0x5b, 0xbb, 0x92, 0xd8, 0x23, 0x71, 0x67, 0x35, 0xf0, 0x9e, 0x77, 0x65, 0x2f, 0xb5, 0x68, 0x8e, - 0xf6, 0xdc, 0x0e, 0x73, 0xb4, 0xff, 0x66, 0x06, 0x1d, 0xbf, 0xd1, 0x59, 0x24, 0xdc, 0x39, 0x2d, - 0x68, 0xc6, 0x1b, 0x08, 0x51, 0x30, 0x77, 0x62, 0xc9, 0x80, 0x13, 0xcb, 0x7b, 0xc5, 0x50, 0x59, - 0x91, 0x02, 0x97, 0x43, 0x6a, 0xe6, 0xc0, 0x72, 0xce, 0x77, 0xb1, 0xbc, 0xd3, 0x59, 0x24, 0xf5, - 0x98, 0x27, 0x8b, 0xc0, 0xfd, 0xcc, 0x4b, 0xcc, 0x79, 0x7d, 0xa7, 0x4e, 0x23, 0xbf, 0x90, 0x4d, - 0x8d, 0x4e, 0x76, 0x60, 0xd3, 0xe8, 0x7d, 0x28, 0xb1, 0x57, 0xa2, 0xe9, 0xf4, 0x12, 0x48, 0x22, - 0x1c, 0x93, 0xb8, 0x24, 0x0b, 0xec, 0x80, 0x27, 0x77, 0x7c, 0x5b, 0x05, 0xf6, 0xfb, 0x99, 0xd4, - 0x28, 0x72, 0x07, 0x55, 0x60, 0xea, 0x7f, 0xc8, 0xf9, 0xc1, 0xeb, 0x76, 0xf5, 0x09, 0x8f, 0xa1, - 0x01, 0x9e, 0xa1, 0x47, 0xf6, 0xad, 0xe5, 0x47, 0x79, 0x70, 0x34, 0x1c, 0x10, 0xd0, 0x65, 0xde, - 0x0f, 0xae, 0x15, 0x64, 0xf5, 0x87, 0x65, 0xde, 0xe4, 0x50, 0x4a, 0x2f, 0x90, 0xd0, 0x85, 0x7c, - 0xf2, 0x9e, 0xe9, 0x81, 0x55, 0x40, 0xfb, 0x32, 0xc7, 0x16, 0x72, 0x72, 0xcf, 0xf4, 0x98, 0x4d, - 0x10, 0xa0, 0xe9, 0x22, 0x5d, 0x0b, 0x53, 0x57, 0xf3, 0x45, 0xda, 0xe5, 0x19, 0xbc, 0xf9, 0x63, - 0xae, 0xc7, 0xd0, 0x00, 0x77, 0x58, 0xe5, 0x6e, 0x26, 0xbc, 0xb5, 0xdc, 0xc5, 0x15, 0x5a, 0x1b, - 0x10, 0x50, 0x8e, 0x1a, 0x59, 0x0e, 0x1d, 0xeb, 0x80, 0xa3, 0x03, 0x10, 0x8d, 0x63, 0xf0, 0x55, - 0x34, 0x52, 0xf3, 0x74, 0xcb, 0xd0, 0x1d, 0x63, 0xbe, 0xe3, 0xb5, 0x3b, 0x9e, 0x68, 0x94, 0xba, - 0x9e, 0x61, 0x77, 0x3c, 0x2d, 0x42, 0x81, 0x9f, 0x40, 0xc3, 0x3e, 0x64, 0xd2, 0x71, 0x6c, 0x47, - 0xb4, 0x3c, 0x5c, 0xcf, 0x20, 0x8e, 0xa3, 0xc9, 0x04, 0xf8, 0x7d, 0x68, 0xb8, 0x62, 0xdd, 0xb5, - 0x1b, 0xec, 0xc5, 0xad, 0x36, 0xc3, 0xed, 0x10, 0x78, 0x20, 0x65, 0x06, 0x88, 0x7a, 0xc7, 0x69, - 0x6a, 0x32, 0xa1, 0xba, 0x91, 0x8d, 0xc7, 0xf8, 0x3b, 0xbc, 0x9b, 0x96, 0x4b, 0xb2, 0x33, 0x1d, - 0x78, 0x90, 0x82, 0x41, 0x28, 0xfa, 0xf2, 0x32, 0xbb, 0xf0, 0x2a, 0xea, 0xbf, 0x41, 0xd6, 0x98, - 0xdf, 0x67, 0x21, 0x74, 0x15, 0xbe, 0xc3, 0x61, 0xe2, 0x89, 0xab, 0x4f, 0xa7, 0x7e, 0x39, 0x1b, - 0x8f, 0x5e, 0x78, 0x78, 0x85, 0xfd, 0x04, 0xea, 0x03, 0x51, 0x56, 0xfc, 0x23, 0x7f, 0x10, 0x20, - 0x88, 0x5b, 0xf6, 0x40, 0xf6, 0xc9, 0xd4, 0x1f, 0x2f, 0x44, 0x43, 0x5a, 0x1e, 0x5e, 0xe9, 0xbd, - 0x80, 0x06, 0x27, 0x6c, 0xcb, 0x35, 0x5d, 0x8f, 0x58, 0x0d, 0x5f, 0x61, 0x4f, 0x53, 0x83, 0xaa, - 0x11, 0x82, 0xc5, 0x97, 0x41, 0x02, 0xf5, 0x4e, 0x94, 0x17, 0x3f, 0x83, 0x06, 0x40, 0xe4, 0xe0, - 0x27, 0xcd, 0x26, 0x3c, 0xb8, 0x2d, 0x58, 0xa4, 0xc0, 0xa8, 0x93, 0x74, 0x48, 0x8a, 0x6f, 0xa2, - 0xfe, 0x89, 0x15, 0xb3, 0x69, 0x38, 0xc4, 0x02, 0x7f, 0x61, 0x21, 0xc6, 0x81, 0xdc, 0x97, 0x97, - 0xe1, 0x5f, 0xa0, 0x65, 0xcd, 0x69, 0xf0, 0x62, 0xd2, 0xdb, 0x28, 0x0e, 0x3b, 0xf3, 0xfd, 0x59, - 0x84, 0xc2, 0x02, 0xf8, 0x01, 0x94, 0x0d, 0xb2, 0xc2, 0x82, 0x9b, 0x8a, 0xa4, 0x41, 0x59, 0x58, - 0x2a, 0xf8, 0xd8, 0xce, 0x6e, 0x3a, 0xb6, 0x6f, 0xa2, 0x02, 0x3b, 0xf1, 0x02, 0x4f, 0x72, 0x21, - 0xca, 0x5e, 0x6a, 0x83, 0x2f, 0x03, 0x3d, 0xdb, 0xcc, 0x82, 0xe5, 0x29, 0x79, 0x65, 0x33, 0x66, - 0x67, 0x1a, 0xa8, 0x17, 0xfe, 0xc2, 0x17, 0x50, 0x7e, 0xc1, 0xcf, 0x28, 0x39, 0xcc, 0x66, 0xe9, - 0x88, 0xfc, 0x00, 0x4f, 0xbb, 0x69, 0xc2, 0xb6, 0x3c, 0x5a, 0x35, 0xb4, 0x7a, 0x88, 0xcb, 0x85, - 0xc3, 0x24, 0xb9, 0x70, 0x98, 0xfa, 0x4f, 0xb3, 0x09, 0xc1, 0x56, 0x0f, 0xef, 0x30, 0x79, 0x0e, - 0x21, 0x78, 0x68, 0x4d, 0xe5, 0xe9, 0x3f, 0xd1, 0x80, 0x51, 0x02, 0x8c, 0x40, 0x6d, 0xa5, 0x6d, - 0x47, 0x48, 0xac, 0xfe, 0x76, 0x26, 0x16, 0xa1, 0x73, 0x57, 0x72, 0x14, 0xad, 0xb2, 0xec, 0x0e, - 0xcd, 0x58, 0xbf, 0x2f, 0x72, 0xdb, 0xeb, 0x0b, 0xf9, 0x5b, 0xf6, 0xc0, 0x32, 0xdd, 0xcf, 0x6f, - 0xf9, 0x5a, 0x36, 0x29, 0x5e, 0xe9, 0xc1, 0x54, 0xf1, 0x6b, 0x81, 0x51, 0x9a, 0x8f, 0x44, 0x88, - 0x06, 0x68, 0x34, 0xeb, 0x2d, 0x37, 0x53, 0x3f, 0x8a, 0x8e, 0x45, 0xa2, 0x78, 0xf2, 0x04, 0xa4, - 0x17, 0xba, 0x87, 0x03, 0x4d, 0x7f, 0xa2, 0x2f, 0x91, 0xa9, 0xff, 0x2b, 0xd3, 0x3d, 0x86, 0xeb, - 0xbe, 0xab, 0x4e, 0x82, 0x00, 0x72, 0x7f, 0x3d, 0x02, 0xd8, 0x83, 0x6d, 0xf0, 0xc1, 0x16, 0xc0, - 0x3b, 0x64, 0xf2, 0x78, 0xbb, 0x05, 0xf0, 0xe3, 0x99, 0x4d, 0x43, 0xf0, 0xee, 0xb7, 0x0c, 0xd4, - 0x7f, 0x9b, 0x49, 0x0c, 0x95, 0xbb, 0xab, 0x76, 0xbd, 0x88, 0x0a, 0xcc, 0xad, 0x86, 0xb7, 0x4a, - 0x48, 0x2e, 0x44, 0xa1, 0x69, 0xe9, 0xb8, 0x19, 0x16, 0xcf, 0xa0, 0x3e, 0xd6, 0x06, 0x83, 0xf7, - 0xc6, 0xc3, 0x5d, 0xe2, 0xf5, 0x1a, 0x69, 0x93, 0x23, 0x47, 0xab, 0xbf, 0x95, 0x89, 0x45, 0xee, - 0xdd, 0xc7, 0x6f, 0x0b, 0xa7, 0xea, 0xdc, 0xd6, 0xa7, 0x6a, 0xf5, 0x4f, 0xb2, 0xc9, 0x81, 0x83, - 0xf7, 0xf1, 0x43, 0xf6, 0xe2, 0x38, 0x6d, 0x67, 0xeb, 0xd6, 0x02, 0x1a, 0x91, 0x65, 0xc1, 0x97, - 0xad, 0xf3, 0xc9, 0xe1, 0x93, 0x53, 0x5a, 0x11, 0xe1, 0xa1, 0xbe, 0x95, 0x89, 0xc7, 0x3c, 0xde, - 0xf7, 0xf9, 0x69, 0x67, 0xda, 0x22, 0x7f, 0xca, 0x3b, 0x64, 0xad, 0xd9, 0x8b, 0x4f, 0x79, 0x87, - 0xac, 0x1a, 0x3b, 0xfb, 0x94, 0x9f, 0xcd, 0xa6, 0x85, 0x8c, 0xde, 0xf7, 0x0f, 0xfa, 0xa0, 0x28, - 0x64, 0xd6, 0x32, 0xfe, 0x69, 0x0f, 0xa4, 0xc5, 0x68, 0x4e, 0xe1, 0x19, 0xe3, 0xb3, 0xb3, 0x31, - 0x9e, 0x28, 0xac, 0x77, 0x88, 0x22, 0x1f, 0x0c, 0x61, 0xbd, 0x43, 0x86, 0xca, 0x3b, 0x4f, 0x58, - 0xbf, 0x9e, 0xdd, 0x6a, 0x9c, 0xf2, 0x23, 0xe1, 0xc5, 0x84, 0xf7, 0xd9, 0x6c, 0x3c, 0x7e, 0xfe, - 0xbe, 0x8b, 0x69, 0x0a, 0x15, 0x78, 0x24, 0xff, 0x54, 0xe1, 0x30, 0x7c, 0x9a, 0x45, 0xc3, 0xbf, - 0xe3, 0x1a, 0xe2, 0x17, 0x39, 0x5b, 0x13, 0x09, 0xa3, 0x55, 0xbf, 0x99, 0x89, 0x04, 0x9b, 0xdf, - 0x97, 0x23, 0x84, 0x1d, 0x2d, 0x49, 0xf8, 0x25, 0xff, 0x30, 0x33, 0x1f, 0x89, 0x14, 0x1c, 0x7c, - 0x4f, 0x99, 0x78, 0xba, 0xd9, 0x8c, 0x96, 0xe7, 0x31, 0x01, 0xbe, 0x9c, 0x45, 0x63, 0x31, 0x52, - 0x7c, 0x41, 0x8a, 0x92, 0x03, 0xc7, 0x92, 0x11, 0xe7, 0x71, 0x16, 0x2f, 0x67, 0x1b, 0x27, 0xa9, - 0x17, 0x50, 0xbe, 0xac, 0xaf, 0xb1, 0x6f, 0xeb, 0x65, 0x2c, 0x0d, 0x7d, 0x4d, 0x3c, 0x71, 0x03, - 0x3c, 0x5e, 0x44, 0xf7, 0xb1, 0xfb, 0x10, 0xd3, 0xb6, 0x16, 0xcc, 0x16, 0xa9, 0x58, 0xb3, 0x66, - 0xb3, 0x69, 0xba, 0xfc, 0x52, 0xef, 0xb1, 0x8d, 0xf5, 0xe2, 0x45, 0xcf, 0xf6, 0xf4, 0x66, 0x9d, - 0xf8, 0x64, 0x75, 0xcf, 0x6c, 0x91, 0xba, 0x69, 0xd5, 0x5b, 0x40, 0x29, 0xb0, 0x4c, 0x66, 0x85, - 0x2b, 0x2c, 0x28, 0x74, 0xad, 0xa1, 0x5b, 0x16, 0x31, 0x2a, 0xd6, 0xf8, 0x9a, 0x47, 0xd8, 0x65, - 0x60, 0x8e, 0x1d, 0x09, 0xb2, 0xb7, 0xe1, 0x0c, 0x4d, 0x19, 0x2f, 0x52, 0x02, 0x2d, 0xa1, 0x90, - 0xfa, 0x1b, 0xf9, 0x84, 0x3c, 0x03, 0x07, 0x48, 0x7d, 0xfc, 0x9e, 0xce, 0x6f, 0xd2, 0xd3, 0x57, - 0x50, 0x1f, 0x0f, 0xf1, 0xc9, 0x2f, 0x18, 0xc0, 0x99, 0xfd, 0x2e, 0x03, 0x89, 0x37, 0x34, 0x9c, - 0x0a, 0x37, 0xd1, 0x99, 0x05, 0xda, 0x4d, 0xc9, 0x9d, 0x59, 0xd8, 0x41, 0x67, 0x76, 0xe1, 0x87, - 0x5f, 0x47, 0xa7, 0x00, 0x9b, 0xd0, 0xad, 0x7d, 0x50, 0x15, 0x44, 0x8e, 0x62, 0x55, 0x25, 0x77, - 0x6e, 0x5a, 0x79, 0xfc, 0x41, 0x34, 0x14, 0x0c, 0x10, 0x93, 0xb8, 0xfc, 0xe6, 0xa2, 0xcb, 0x38, - 0x63, 0x61, 0xd9, 0x28, 0x18, 0x5c, 0xc8, 0xe4, 0xd0, 0x5e, 0x12, 0x2f, 0xf5, 0xdf, 0x64, 0xba, - 0xe5, 0x3b, 0xd8, 0xf7, 0x59, 0xf9, 0x25, 0xd4, 0x67, 0xb0, 0x8f, 0xe2, 0x3a, 0xd5, 0x3d, 0x23, - 0x02, 0x23, 0xd5, 0xfc, 0x32, 0xea, 0x1f, 0x67, 0xba, 0xa6, 0x59, 0x38, 0xe8, 0x9f, 0xf7, 0xd9, - 0x5c, 0xca, 0xe7, 0xf1, 0x49, 0xf4, 0x12, 0x1a, 0x35, 0xc3, 0x88, 0xd5, 0xf5, 0x30, 0xfc, 0x94, - 0x76, 0x4c, 0x80, 0xc3, 0xe8, 0xba, 0x86, 0x4e, 0xfa, 0x8e, 0x8f, 0x8e, 0xef, 0x21, 0xe6, 0xd6, - 0x3b, 0x8e, 0xc9, 0xc6, 0xa5, 0x76, 0xc2, 0x8d, 0xb8, 0x8f, 0xb9, 0x37, 0x1d, 0x93, 0x56, 0xa0, - 0x7b, 0x2b, 0xc4, 0xd2, 0xeb, 0xab, 0xb6, 0x73, 0x07, 0x62, 0x7f, 0xb2, 0xc1, 0xa9, 0x1d, 0x63, - 0xf0, 0xdb, 0x3e, 0x18, 0x3f, 0x84, 0x86, 0x97, 0x9b, 0x1d, 0x12, 0x44, 0x5b, 0x64, 0x77, 0x7d, - 0xda, 0x10, 0x05, 0x06, 0x37, 0x24, 0xe7, 0x10, 0x02, 0x22, 0x0f, 0x92, 0x60, 0xc0, 0xc5, 0x9e, - 0x36, 0x40, 0x21, 0x0b, 0xbc, 0xbb, 0xce, 0x30, 0xad, 0x66, 0x42, 0xaa, 0x37, 0x6d, 0x6b, 0xb9, - 0xee, 0x11, 0xa7, 0x05, 0x0d, 0x05, 0x67, 0x06, 0xed, 0x24, 0x50, 0xc0, 0xd5, 0x89, 0x3b, 0x63, - 0x5b, 0xcb, 0x0b, 0xc4, 0x69, 0xd1, 0xa6, 0x3e, 0x86, 0x30, 0x6f, 0xaa, 0x03, 0x87, 0x1e, 0xec, - 0xe3, 0xc0, 0x9b, 0x41, 0xe3, 0x1f, 0xc1, 0x4e, 0x43, 0xe0, 0xc3, 0x8a, 0x68, 0x90, 0x85, 0x9c, - 0x63, 0x42, 0x03, 0x17, 0x06, 0x0d, 0x31, 0x10, 0xc8, 0xeb, 0x24, 0xe2, 0xde, 0x15, 0xcc, 0xab, - 0x5b, 0xe3, 0xbf, 0xd4, 0x4f, 0xe5, 0x92, 0x32, 0x43, 0xec, 0x4a, 0xd1, 0xc2, 0x69, 0x35, 0xbb, - 0xad, 0x69, 0xf5, 0x98, 0xd5, 0x69, 0xd5, 0xf5, 0x76, 0xbb, 0xbe, 0x64, 0x36, 0xe1, 0x59, 0x15, - 0x2c, 0x7c, 0xda, 0xb0, 0xd5, 0x69, 0x95, 0xda, 0xed, 0x29, 0x06, 0xc4, 0x8f, 0xa2, 0x31, 0x4a, - 0x07, 0x9d, 0x14, 0x50, 0xe6, 0x81, 0x92, 0x32, 0x80, 0x98, 0xad, 0x3e, 0xed, 0x69, 0xd4, 0xcf, - 0x79, 0xb2, 0xb5, 0xaa, 0x57, 0xeb, 0x63, 0xcc, 0x5c, 0xda, 0x73, 0x01, 0x1b, 0x36, 0xb9, 0xf6, - 0x6a, 0x03, 0x7e, 0x79, 0x88, 0x4c, 0x6c, 0x75, 0x5a, 0x2c, 0x22, 0x56, 0x1f, 0x20, 0x83, 0xdf, - 0xf8, 0x02, 0x1a, 0xa1, 0x5c, 0x02, 0x81, 0xb1, 0x60, 0xae, 0xbd, 0x5a, 0x04, 0x8a, 0xaf, 0xa2, - 0x13, 0x12, 0x84, 0xd9, 0xa0, 0xec, 0x99, 0x40, 0xaf, 0x96, 0x88, 0x53, 0xdf, 0xca, 0xc5, 0x13, - 0x5f, 0xec, 0xcb, 0xda, 0x38, 0x8d, 0x10, 0xcf, 0x6b, 0x13, 0x5e, 0xd0, 0x04, 0x5e, 0xcb, 0x21, - 0x26, 0x85, 0x87, 0x50, 0x16, 0x5f, 0x42, 0xfd, 0xec, 0x8b, 0x2a, 0x65, 0xbe, 0x66, 0x82, 0x9b, - 0x91, 0xdb, 0x36, 0x97, 0x96, 0xc0, 0x27, 0x29, 0x40, 0xe3, 0x0b, 0xa8, 0xaf, 0x3c, 0x57, 0xab, - 0x95, 0xe6, 0xfc, 0xdb, 0x46, 0x78, 0xa3, 0x60, 0x58, 0x6e, 0xdd, 0xd5, 0x2d, 0x57, 0xf3, 0x91, - 0xf8, 0x21, 0x54, 0xa8, 0x54, 0x81, 0x8c, 0xbd, 0xbc, 0x1b, 0xdc, 0x58, 0x2f, 0xf6, 0x99, 0x6d, - 0x46, 0xc5, 0x51, 0x50, 0xef, 0xad, 0x4a, 0x59, 0xb8, 0x72, 0x67, 0xf5, 0xde, 0x35, 0x0d, 0xb8, - 0xba, 0xd4, 0x02, 0x34, 0x7e, 0x1a, 0x0d, 0xd5, 0x88, 0x63, 0xea, 0xcd, 0xb9, 0x0e, 0x6c, 0x37, - 0x98, 0x9b, 0xd1, 0xd8, 0xc6, 0x7a, 0x71, 0xd8, 0x05, 0x78, 0xdd, 0x02, 0x84, 0x26, 0x91, 0xe1, - 0xb3, 0x28, 0x3f, 0x6d, 0x5a, 0xbe, 0x1b, 0x3c, 0xf8, 0x49, 0xaf, 0x98, 0x96, 0xa7, 0x01, 0x54, - 0xfd, 0x2f, 0xd9, 0xe4, 0xd4, 0x23, 0xfb, 0x30, 0xb6, 0x76, 0x78, 0x5b, 0x18, 0x51, 0x82, 0xfc, - 0x2e, 0x94, 0x60, 0x09, 0x1d, 0x2b, 0x19, 0x2d, 0xd3, 0x2a, 0xc1, 0x4f, 0x77, 0x76, 0xaa, 0x04, - 0x03, 0x52, 0x78, 0x86, 0x15, 0x41, 0xf3, 0xef, 0x61, 0xe1, 0x56, 0x29, 0xaa, 0xae, 0x33, 0x5c, - 0xbd, 0xb5, 0xa4, 0xd7, 0x1b, 0x2c, 0x6b, 0x87, 0x16, 0x65, 0xaa, 0x7e, 0x5f, 0x76, 0x93, 0x6c, - 0x29, 0x87, 0x51, 0xfa, 0xea, 0xe7, 0xb2, 0xdd, 0x13, 0xd6, 0x1c, 0x4a, 0xa1, 0xfc, 0x79, 0x36, - 0x21, 0x7d, 0xcc, 0xae, 0x24, 0x71, 0x09, 0xf5, 0x33, 0x36, 0x81, 0xbb, 0x26, 0xcc, 0x38, 0x4c, - 0x59, 0x61, 0xa6, 0xf3, 0xd1, 0x78, 0x0e, 0x9d, 0x28, 0x2d, 0x2d, 0x91, 0x86, 0x17, 0x06, 0xde, - 0x9d, 0x0b, 0x83, 0x6d, 0xb2, 0x68, 0xa5, 0x1c, 0x1f, 0x06, 0xee, 0x85, 0xa0, 0x12, 0x89, 0xe5, - 0xf0, 0x02, 0x3a, 0x19, 0x85, 0xd7, 0x98, 0xa9, 0x97, 0x17, 0x02, 0x98, 0xc6, 0x38, 0xb2, 0xff, - 0xb4, 0x94, 0xb2, 0x49, 0xad, 0x84, 0xe9, 0xb4, 0xb7, 0x5b, 0x2b, 0x61, 0x6e, 0x4d, 0x2c, 0xa7, - 0x7e, 0x39, 0x27, 0x66, 0xd9, 0x39, 0xbc, 0x8e, 0x35, 0xd7, 0x24, 0x77, 0xda, 0xad, 0x0e, 0x99, - 0xa7, 0x79, 0xa4, 0x08, 0xa3, 0xe3, 0xf8, 0x9e, 0x67, 0xc1, 0x4b, 0x75, 0x00, 0x8a, 0x3e, 0x64, - 0x01, 0x25, 0xae, 0xa0, 0x7c, 0xc9, 0x59, 0x66, 0x66, 0xcc, 0x66, 0x8f, 0x67, 0x74, 0x67, 0xd9, - 0x4d, 0x7e, 0x3c, 0x43, 0x59, 0xa8, 0xdf, 0x9b, 0xed, 0x92, 0x85, 0xe7, 0x50, 0x4e, 0x22, 0x3f, - 0x92, 0x4d, 0xcb, 0xa7, 0x73, 0x50, 0x5d, 0x84, 0xde, 0x66, 0xe1, 0x1c, 0x6c, 0xff, 0xa9, 0x3d, - 0x16, 0x4e, 0x4a, 0x6e, 0x9f, 0x23, 0xe1, 0x7c, 0x2a, 0x9b, 0x96, 0xde, 0xe8, 0xd0, 0xce, 0x32, - 0x29, 0x19, 0x95, 0x8e, 0x74, 0xe5, 0x47, 0xb3, 0xa9, 0x49, 0xa5, 0x8e, 0xa4, 0xa3, 0x7e, 0x3a, - 0x9b, 0x9a, 0x14, 0xeb, 0x50, 0x0e, 0xa5, 0x44, 0x6d, 0x39, 0x1a, 0x4b, 0x5c, 0x3a, 0xdf, 0x93, - 0x8b, 0xa7, 0x21, 0x3b, 0x94, 0xe7, 0x15, 0xe3, 0xa8, 0xdf, 0xdf, 0xd0, 0x70, 0x1b, 0x7d, 0xcb, - 0xdd, 0xe9, 0x97, 0xc3, 0x2f, 0xa3, 0x63, 0xa1, 0x2c, 0xc5, 0x70, 0x24, 0x70, 0x11, 0xd4, 0xa0, - 0xa8, 0xfa, 0x1b, 0x14, 0xc7, 0xdf, 0xcd, 0x47, 0xa9, 0xd5, 0x6f, 0xe6, 0xe2, 0xb9, 0xdc, 0x8e, - 0x7a, 0x63, 0x87, 0xbd, 0x71, 0x13, 0x9d, 0x9c, 0xe8, 0x38, 0x0e, 0xb1, 0xbc, 0xe4, 0x4e, 0x81, - 0x93, 0xa6, 0x06, 0xa3, 0xa8, 0xc7, 0x3b, 0x27, 0xa5, 0x30, 0x65, 0xcb, 0x5d, 0x2e, 0xa3, 0x6c, - 0xfb, 0x42, 0xb6, 0x1d, 0x46, 0x91, 0xc4, 0x36, 0xb9, 0xb0, 0xfa, 0x3b, 0xd9, 0x78, 0xf6, 0xbd, - 0xa3, 0xae, 0xdf, 0x59, 0xd7, 0x3f, 0x3a, 0xcb, 0xb2, 0x99, 0xdc, 0x30, 0x2d, 0x03, 0x9f, 0x46, - 0xf7, 0xdd, 0xac, 0x4d, 0x6a, 0xf5, 0x1b, 0x95, 0xb9, 0x72, 0xfd, 0xe6, 0x5c, 0xad, 0x3a, 0x39, - 0x51, 0x99, 0xaa, 0x4c, 0x96, 0x47, 0x7b, 0xf0, 0x71, 0x74, 0x2c, 0x44, 0x4d, 0xdf, 0x9c, 0x2d, - 0xcd, 0x8d, 0x66, 0xf0, 0x18, 0x1a, 0x0e, 0x81, 0xe3, 0xf3, 0x0b, 0xa3, 0xd9, 0x47, 0xdf, 0x83, - 0x06, 0xe1, 0xba, 0x86, 0x1d, 0x3b, 0xe2, 0x21, 0xd4, 0x3f, 0x3f, 0x5e, 0x9b, 0xd4, 0x6e, 0x01, - 0x13, 0x84, 0x0a, 0xe5, 0xc9, 0x39, 0xca, 0x30, 0xf3, 0xe8, 0x7f, 0xcf, 0x20, 0x54, 0x9b, 0x5a, - 0xa8, 0x72, 0xc2, 0x41, 0xd4, 0x57, 0x99, 0xbb, 0x55, 0x9a, 0xa9, 0x50, 0xba, 0x7e, 0x94, 0x9f, - 0xaf, 0x4e, 0xd2, 0x1a, 0x06, 0x50, 0xef, 0xc4, 0xcc, 0x7c, 0x6d, 0x72, 0x34, 0x4b, 0x81, 0xda, - 0x64, 0xa9, 0x3c, 0x9a, 0xa3, 0xc0, 0xdb, 0x5a, 0x65, 0x61, 0x72, 0x34, 0x4f, 0xff, 0x9c, 0xa9, - 0x2d, 0x94, 0x16, 0x46, 0x7b, 0xe9, 0x9f, 0x53, 0xf0, 0x67, 0x81, 0x32, 0xab, 0x4d, 0x2e, 0xc0, - 0x8f, 0x3e, 0xda, 0x84, 0x29, 0xff, 0x57, 0x3f, 0x45, 0x51, 0xd6, 0xe5, 0x8a, 0x36, 0x3a, 0x40, - 0x7f, 0x50, 0x96, 0xf4, 0x07, 0xa2, 0x8d, 0xd3, 0x26, 0x67, 0xe7, 0x6f, 0x4d, 0x8e, 0x0e, 0x52, - 0x5e, 0xb3, 0x37, 0x28, 0x78, 0x88, 0xfe, 0xa9, 0xcd, 0xd2, 0x3f, 0x87, 0x29, 0x27, 0x6d, 0xb2, - 0x34, 0x53, 0x2d, 0x2d, 0x4c, 0x8f, 0x8e, 0xd0, 0xf6, 0x00, 0xcf, 0x63, 0xac, 0xe4, 0x5c, 0x69, - 0x76, 0x72, 0x74, 0x94, 0xd3, 0x94, 0x67, 0x2a, 0x73, 0x37, 0x46, 0xc7, 0xa0, 0x21, 0xaf, 0xcf, - 0xc2, 0x0f, 0x4c, 0x0b, 0xc0, 0x5f, 0xc7, 0x1f, 0xfd, 0x30, 0x2a, 0xcc, 0xd7, 0xe0, 0x70, 0xfd, - 0x14, 0x3a, 0x3e, 0x5f, 0xab, 0x2f, 0xbc, 0x5e, 0x9d, 0x8c, 0xc8, 0x7b, 0x0c, 0x0d, 0xfb, 0x88, - 0x99, 0xca, 0xdc, 0xcd, 0x0f, 0x30, 0x69, 0xfb, 0xa0, 0xd9, 0xd2, 0xc4, 0x7c, 0x6d, 0x34, 0x4b, - 0x7b, 0xc5, 0x07, 0xdd, 0xae, 0xcc, 0x95, 0xe7, 0x6f, 0xd7, 0x46, 0x73, 0x8f, 0xde, 0x45, 0x43, - 0x2c, 0x17, 0xcc, 0xbc, 0x63, 0x2e, 0x9b, 0x16, 0x3e, 0x87, 0x4e, 0x97, 0x27, 0x6f, 0x55, 0x26, - 0x26, 0xeb, 0xf3, 0x5a, 0xe5, 0x7a, 0x65, 0x2e, 0x52, 0xd3, 0x7d, 0x68, 0x4c, 0x46, 0x97, 0xaa, - 0x95, 0xd1, 0x0c, 0x3e, 0x89, 0xb0, 0x0c, 0x7e, 0xb5, 0x34, 0x3b, 0x35, 0x9a, 0xc5, 0x0a, 0x3a, - 0x21, 0xc3, 0x2b, 0x73, 0x0b, 0x37, 0xe7, 0x26, 0x47, 0x73, 0x8f, 0xfe, 0x64, 0x06, 0xdd, 0x97, - 0x18, 0x2f, 0x0c, 0xab, 0xe8, 0xfc, 0xe4, 0x4c, 0xa9, 0xb6, 0x50, 0x99, 0xa8, 0x4d, 0x96, 0xb4, - 0x89, 0xe9, 0xfa, 0x44, 0x69, 0x61, 0xf2, 0xfa, 0xbc, 0xf6, 0x7a, 0xfd, 0xfa, 0xe4, 0xdc, 0xa4, - 0x56, 0x9a, 0x19, 0xed, 0xc1, 0x0f, 0xa1, 0x62, 0x0a, 0x4d, 0x6d, 0x72, 0xe2, 0xa6, 0x56, 0x59, - 0x78, 0x7d, 0x34, 0x83, 0x1f, 0x44, 0xe7, 0x52, 0x89, 0xe8, 0xef, 0xd1, 0x2c, 0x3e, 0x8f, 0xce, - 0xa4, 0x91, 0xbc, 0x36, 0x33, 0x9a, 0x7b, 0xf4, 0x87, 0x32, 0x08, 0xc7, 0x03, 0x3e, 0xe1, 0x07, - 0xd0, 0x59, 0xaa, 0x17, 0xf5, 0xf4, 0x06, 0x3e, 0x88, 0xce, 0x25, 0x52, 0x08, 0xcd, 0x2b, 0xa2, - 0xfb, 0x53, 0x48, 0x78, 0xe3, 0xce, 0x22, 0x25, 0x99, 0x00, 0x9a, 0xf6, 0xc5, 0x0c, 0xba, 0x2f, - 0xf1, 0xa4, 0x1f, 0x5f, 0x44, 0x0f, 0x97, 0xca, 0xb3, 0xb4, 0x6f, 0x26, 0x16, 0x2a, 0xf3, 0x73, - 0xb5, 0xfa, 0xec, 0x54, 0xa9, 0x4e, 0xb5, 0xef, 0x66, 0x2d, 0xd2, 0x9b, 0x17, 0x90, 0xda, 0x85, - 0x72, 0x62, 0xba, 0x34, 0x77, 0x9d, 0x0e, 0x3f, 0xfc, 0x30, 0x7a, 0x20, 0x95, 0x6e, 0x72, 0xae, - 0x34, 0x3e, 0x33, 0x59, 0x1e, 0xcd, 0xe2, 0x47, 0xd0, 0x83, 0xa9, 0x54, 0xe5, 0x4a, 0x8d, 0x91, - 0xe5, 0xc6, 0xcb, 0x6f, 0xfd, 0xbb, 0xf3, 0x3d, 0x6f, 0x7d, 0xfd, 0x7c, 0xe6, 0xf7, 0xbe, 0x7e, - 0x3e, 0xf3, 0x27, 0x5f, 0x3f, 0x9f, 0xf9, 0xe0, 0xd5, 0xed, 0x04, 0xf2, 0x62, 0x53, 0xd6, 0x62, - 0x01, 0x4e, 0xdd, 0x9e, 0xfa, 0xdf, 0x01, 0x00, 0x00, 0xff, 0xff, 0x8a, 0xa1, 0x28, 0x49, 0x4b, - 0x68, 0x01, 0x00, + 0xff, 0x0e, 0x1d, 0xa8, 0x86, 0x36, 0x73, 0xa0, 0x52, 0x7f, 0x27, 0x8b, 0x06, 0x6a, 0x9d, 0x45, + 0x77, 0xcd, 0xf5, 0x48, 0xeb, 0x80, 0xab, 0xb1, 0xbf, 0xbd, 0xca, 0x27, 0x6e, 0xaf, 0x1e, 0xf2, + 0x85, 0x22, 0x9c, 0x3b, 0x06, 0x26, 0x9d, 0xef, 0x4f, 0x16, 0x2a, 0x72, 0x61, 0xfb, 0x8a, 0xac, + 0xfe, 0x72, 0x16, 0x8d, 0xb2, 0x6b, 0xb7, 0xb2, 0xe9, 0x36, 0xf6, 0xe0, 0x29, 0xc0, 0xfe, 0xcb, + 0x74, 0x77, 0x57, 0xd5, 0x5b, 0x78, 0x60, 0xa1, 0x7e, 0x3c, 0x8b, 0x06, 0x4b, 0x1d, 0x6f, 0xa5, + 0xe4, 0x81, 0x66, 0x1e, 0xca, 0xdd, 0xcd, 0x6f, 0x67, 0xd0, 0x31, 0xda, 0x90, 0x05, 0xfb, 0x0e, + 0xb1, 0xf6, 0xe0, 0xd8, 0x52, 0x3c, 0x7e, 0xcc, 0xee, 0xf0, 0xf8, 0xd1, 0x97, 0x65, 0x6e, 0x7b, + 0xb2, 0x84, 0xc3, 0x76, 0xcd, 0x6e, 0x92, 0x83, 0xfd, 0x19, 0x7b, 0x78, 0xd8, 0xee, 0x0b, 0x64, + 0x0f, 0x2e, 0x77, 0xde, 0x5d, 0x02, 0xd9, 0x83, 0x93, 0xa9, 0x77, 0x87, 0x40, 0xbe, 0x92, 0x41, + 0x03, 0xe3, 0xb6, 0x77, 0xc0, 0x07, 0x3e, 0xff, 0x8a, 0x83, 0xad, 0xe6, 0xfe, 0x57, 0x1c, 0x6c, + 0xdd, 0x54, 0x7f, 0x28, 0x8b, 0x4e, 0xf0, 0x10, 0xdf, 0xfc, 0xf4, 0xe2, 0x68, 0x3a, 0xe6, 0x83, + 0x2d, 0x2e, 0x9a, 0xa3, 0x79, 0x88, 0x8b, 0xe6, 0xa7, 0x73, 0xe8, 0x04, 0x04, 0x42, 0xa5, 0x9b, + 0xba, 0x77, 0x81, 0x2d, 0x82, 0x1b, 0xf2, 0x15, 0xea, 0x6c, 0xc2, 0x15, 0xea, 0x5f, 0xae, 0x17, + 0x9f, 0x59, 0x36, 0xbd, 0x95, 0xce, 0xe2, 0xe5, 0x86, 0xdd, 0xba, 0xb2, 0xec, 0xe8, 0x77, 0x4d, + 0x76, 0x79, 0xa8, 0x37, 0xaf, 0x04, 0xd9, 0x32, 0xf4, 0xb6, 0xc9, 0xf3, 0x68, 0xd4, 0x60, 0xa7, + 0x44, 0xb9, 0xfa, 0x97, 0xaf, 0x2e, 0x42, 0xaf, 0xda, 0xa6, 0xc5, 0x3d, 0x12, 0x99, 0xa1, 0x5b, + 0xa3, 0xbb, 0xcb, 0x37, 0x6c, 0xd3, 0xaa, 0x47, 0xdd, 0x12, 0xb7, 0x5b, 0x5f, 0xc8, 0x5a, 0x13, + 0xaa, 0x51, 0xff, 0x45, 0x06, 0x9d, 0x96, 0xb5, 0xf8, 0xdd, 0x60, 0x3b, 0xfe, 0x70, 0x16, 0xdd, + 0x77, 0x1d, 0x84, 0x13, 0xb8, 0x81, 0x1c, 0xcd, 0x5b, 0x7c, 0x70, 0x26, 0xc8, 0xe6, 0xc8, 0xa2, + 0x4c, 0x97, 0xcd, 0xd1, 0xa4, 0xce, 0x65, 0xf3, 0xcf, 0x33, 0xe8, 0xf8, 0x7c, 0xa5, 0x3c, 0xf1, + 0x2e, 0x19, 0x51, 0xf1, 0xef, 0x39, 0xe0, 0x06, 0x67, 0xec, 0x7b, 0x0e, 0xb8, 0xe9, 0x49, 0xbf, + 0xa7, 0x56, 0x9a, 0x9d, 0x79, 0x37, 0xe9, 0x9b, 0xf4, 0x3d, 0xef, 0x02, 0x7d, 0x93, 0xbe, 0xe7, + 0x80, 0xeb, 0xdb, 0x3f, 0x2e, 0xa0, 0xc1, 0x1b, 0x9d, 0x45, 0xc2, 0x1d, 0x4a, 0x0e, 0xf5, 0x79, + 0xeb, 0x55, 0x34, 0xc8, 0xc5, 0x00, 0x37, 0x1d, 0x42, 0xc0, 0x3b, 0x1e, 0xc0, 0x84, 0xc5, 0x14, + 0x12, 0x89, 0xf0, 0x59, 0x94, 0xbf, 0x45, 0x9c, 0x45, 0xf1, 0x2d, 0xe8, 0x5d, 0xe2, 0x2c, 0x6a, + 0x00, 0xc5, 0x33, 0xa1, 0x9b, 0x7b, 0xa9, 0x5a, 0x81, 0xe4, 0x27, 0xfc, 0x92, 0x05, 0xb2, 0xb9, + 0x04, 0xbe, 0x6a, 0x7a, 0xdb, 0x64, 0x69, 0x53, 0xc4, 0x77, 0xe8, 0xd1, 0x92, 0x78, 0x0e, 0x8d, + 0x89, 0xce, 0x4a, 0x2c, 0xf3, 0x47, 0x7f, 0x02, 0xbb, 0xa4, 0x9c, 0x1f, 0xf1, 0xa2, 0xf8, 0x65, + 0x34, 0xe4, 0x03, 0xc1, 0xed, 0x6a, 0x20, 0x0c, 0x37, 0x1f, 0xb0, 0x8a, 0xa4, 0x15, 0x92, 0x0a, + 0x88, 0x0c, 0xe0, 0xea, 0x00, 0x25, 0x30, 0x88, 0xb8, 0xb1, 0x49, 0x05, 0xf0, 0xd3, 0xc0, 0x00, + 0x9e, 0x66, 0x80, 0x83, 0xc9, 0x20, 0x3c, 0x94, 0x04, 0x37, 0x7a, 0x87, 0xc3, 0xd9, 0x73, 0x58, + 0x89, 0x0c, 0xcf, 0x23, 0x14, 0x3a, 0x02, 0xf0, 0xa0, 0x03, 0xdb, 0x76, 0x51, 0x10, 0x58, 0x88, + 0x57, 0x78, 0xc3, 0x3b, 0xb9, 0xc2, 0x53, 0x7f, 0x3f, 0x8b, 0x06, 0x4b, 0xed, 0x76, 0x30, 0x14, + 0x1e, 0x47, 0x85, 0x52, 0xbb, 0x7d, 0x53, 0xab, 0x88, 0xe1, 0xc7, 0xf5, 0x76, 0xbb, 0xde, 0x71, + 0x4c, 0xd1, 0x8f, 0x93, 0x11, 0xe1, 0x09, 0x34, 0x5c, 0x6a, 0xb7, 0xab, 0x9d, 0xc5, 0xa6, 0xd9, + 0x10, 0xb2, 0x19, 0xb1, 0xc4, 0x6b, 0xed, 0x76, 0xbd, 0x0d, 0x98, 0x68, 0x4a, 0x2b, 0xb9, 0x0c, + 0xfe, 0x28, 0x84, 0xea, 0xe1, 0xc9, 0x74, 0x58, 0xba, 0x0e, 0x35, 0x08, 0x3c, 0x1e, 0xb6, 0xed, + 0x72, 0x40, 0xc4, 0x02, 0xb4, 0x9f, 0xf5, 0xc3, 0xdc, 0xd3, 0x8a, 0x62, 0x49, 0x73, 0x42, 0x96, + 0xf8, 0x09, 0xd4, 0x57, 0x6a, 0xb7, 0x85, 0x3b, 0x22, 0x70, 0x04, 0xa2, 0xa5, 0x22, 0x7d, 0xec, + 0x93, 0x9d, 0x79, 0x11, 0x8d, 0xc8, 0x95, 0x6d, 0x2b, 0xc0, 0xfb, 0x37, 0x33, 0xf0, 0x41, 0x07, + 0xdc, 0x0f, 0xf9, 0x29, 0x94, 0x2b, 0xb5, 0xdb, 0x7c, 0x3e, 0x3a, 0x9e, 0xd0, 0x1f, 0xd1, 0x67, + 0xcb, 0xa5, 0x76, 0xdb, 0xff, 0xf4, 0x03, 0xfe, 0xa0, 0x61, 0x47, 0x9f, 0xfe, 0x15, 0xf6, 0xe9, + 0x07, 0xfb, 0xb1, 0x81, 0xfa, 0xc5, 0x1c, 0x3a, 0x56, 0x6a, 0xb7, 0x8f, 0x02, 0xc3, 0xef, 0xd5, + 0xe3, 0xe8, 0x27, 0x11, 0x12, 0xa6, 0xc7, 0xbe, 0xe0, 0xb9, 0xd5, 0xa0, 0x30, 0x35, 0x2a, 0x19, + 0x4d, 0x20, 0xf2, 0xd5, 0xaf, 0x7f, 0x5b, 0xea, 0xf7, 0xf1, 0x1c, 0x4c, 0xc5, 0x07, 0x3d, 0xd0, + 0xd3, 0x3b, 0xa5, 0xdb, 0x78, 0x1f, 0x14, 0xb6, 0xd5, 0x07, 0xbf, 0x25, 0x0d, 0x1e, 0x08, 0x34, + 0x7e, 0xd4, 0x0b, 0xbd, 0xbb, 0x32, 0x8b, 0x47, 0x44, 0x61, 0xf2, 0xe8, 0x33, 0x7e, 0xf2, 0x23, + 0x1e, 0x0b, 0xa9, 0x41, 0x51, 0x75, 0xd3, 0xd0, 0x22, 0xb4, 0x7e, 0x1f, 0xf6, 0x6d, 0xab, 0x0f, + 0xd7, 0xb3, 0xf0, 0xde, 0x39, 0x88, 0xa5, 0xb4, 0xfb, 0xdd, 0xc5, 0x15, 0x84, 0xd8, 0x7d, 0x7f, + 0xe0, 0x8a, 0x3c, 0xcc, 0xc2, 0xa6, 0xb0, 0x9c, 0x48, 0x3c, 0x6c, 0x4a, 0x48, 0x12, 0x78, 0x35, + 0xe5, 0x12, 0xbd, 0x9a, 0x2e, 0xa1, 0x7e, 0x4d, 0x5f, 0x7d, 0xad, 0x43, 0x9c, 0x35, 0x6e, 0xce, + 0xb0, 0x50, 0x85, 0xfa, 0x6a, 0xfd, 0x63, 0x14, 0xa8, 0x05, 0x68, 0xac, 0x06, 0x0f, 0xe6, 0x05, + 0x3f, 0x0c, 0x76, 0x32, 0x1d, 0x3c, 0x93, 0xdf, 0x89, 0xa2, 0xe3, 0xe7, 0x51, 0xae, 0x74, 0xbb, + 0xc6, 0x25, 0x1b, 0x74, 0x6d, 0xe9, 0x76, 0x8d, 0xcb, 0x2b, 0xb5, 0xec, 0xed, 0x9a, 0xfa, 0xf1, + 0x2c, 0xc2, 0x71, 0x4a, 0xfc, 0x0c, 0x1a, 0x00, 0xe8, 0x32, 0xd5, 0x19, 0x31, 0x99, 0xe6, 0xaa, + 0x5b, 0x77, 0x00, 0x2a, 0x19, 0x77, 0x3e, 0x29, 0x7e, 0x0e, 0xf2, 0x06, 0xf3, 0x74, 0x6e, 0x52, + 0x32, 0xcd, 0x55, 0xd7, 0xcf, 0xb4, 0x1b, 0x49, 0x1b, 0xcc, 0x89, 0xc1, 0x2e, 0xbc, 0x5d, 0x9b, + 0xb6, 0x5d, 0x8f, 0x8b, 0x9a, 0xd9, 0x85, 0xab, 0x2e, 0x64, 0x71, 0x95, 0xec, 0x42, 0x46, 0x06, + 0x99, 0xa8, 0x6e, 0xd7, 0xd8, 0xd3, 0x12, 0x43, 0xb3, 0x9b, 0xbe, 0x41, 0xc9, 0x32, 0x51, 0xad, + 0xba, 0x75, 0xf6, 0x2c, 0xc5, 0x80, 0x84, 0xc5, 0x52, 0x26, 0x2a, 0xa9, 0x94, 0xfa, 0xe9, 0x7e, + 0x34, 0x5a, 0xd6, 0x3d, 0x7d, 0x51, 0x77, 0x89, 0xb0, 0x9b, 0x3e, 0xe6, 0xc3, 0xfc, 0xcf, 0x11, + 0xe4, 0x60, 0x2c, 0x26, 0x7c, 0x4d, 0xb4, 0x00, 0x7e, 0x21, 0xe4, 0x1b, 0xe4, 0x09, 0x15, 0x13, + 0x8f, 0x2d, 0xd6, 0xdb, 0x1c, 0xac, 0xc5, 0x08, 0xf1, 0x63, 0x68, 0xd0, 0x87, 0xd1, 0x0d, 0x40, + 0x2e, 0xd4, 0x19, 0x63, 0x91, 0xda, 0xff, 0x9a, 0x88, 0xc6, 0xcf, 0xa1, 0x21, 0xff, 0xa7, 0x60, + 0x5a, 0xb3, 0x2c, 0x6a, 0x8b, 0xb1, 0xdd, 0x93, 0x48, 0x2a, 0x16, 0x85, 0xf9, 0xad, 0x57, 0x2a, + 0x1a, 0x49, 0x54, 0x26, 0x91, 0xe2, 0x8f, 0xa1, 0x11, 0xff, 0x37, 0xdf, 0x30, 0xb0, 0x9c, 0x6e, + 0x8f, 0x05, 0xf9, 0x90, 0x23, 0x62, 0xbd, 0x2c, 0x93, 0xb3, 0xad, 0xc3, 0xfd, 0x7e, 0xee, 0x2d, + 0x63, 0x31, 0xbe, 0x73, 0x88, 0x54, 0x80, 0x2b, 0x68, 0xcc, 0x87, 0x84, 0x1a, 0xda, 0x17, 0xee, + 0x18, 0x8d, 0xc5, 0x7a, 0xa2, 0x92, 0xc6, 0x4b, 0xe1, 0x26, 0x3a, 0x2b, 0x01, 0x0d, 0x77, 0xc5, + 0x5c, 0xf2, 0xf8, 0x76, 0x8f, 0xc7, 0x0d, 0xe6, 0xc9, 0x16, 0x03, 0xae, 0x8c, 0xc6, 0xcf, 0x9a, + 0x2a, 0x67, 0x74, 0xea, 0xca, 0x0d, 0xd7, 0xd0, 0x09, 0x1f, 0x7f, 0x7d, 0xa2, 0x5a, 0x75, 0xec, + 0x37, 0x48, 0xc3, 0xab, 0x94, 0xf9, 0x76, 0x19, 0xe2, 0xc9, 0x19, 0x8b, 0xf5, 0xe5, 0x46, 0x9b, + 0x2a, 0x05, 0xc5, 0xc9, 0xcc, 0x13, 0x0b, 0xe3, 0x5b, 0xe8, 0x3e, 0x01, 0x5e, 0xb1, 0x5c, 0x4f, + 0xb7, 0x1a, 0xa4, 0x52, 0xe6, 0x7b, 0x68, 0xd8, 0xcf, 0x73, 0xae, 0x26, 0x47, 0xca, 0x6c, 0x93, + 0x8b, 0xe3, 0x17, 0xd1, 0xb0, 0x8f, 0x60, 0x77, 0x77, 0x83, 0x70, 0x77, 0x07, 0x43, 0xd2, 0x58, + 0xac, 0x47, 0x5f, 0x40, 0xca, 0xc4, 0xa2, 0x46, 0x41, 0x3a, 0xfa, 0x21, 0x49, 0xa3, 0xbc, 0xb5, + 0x76, 0xa2, 0x32, 0x42, 0x8a, 0xfa, 0x97, 0x43, 0x8d, 0x9a, 0x77, 0xcc, 0x65, 0x93, 0xed, 0xa4, + 0xfd, 0x47, 0x8f, 0x8b, 0x75, 0x1b, 0x80, 0x49, 0xfa, 0xc1, 0xc8, 0xcf, 0x94, 0xd0, 0xf1, 0x04, + 0x1d, 0xdb, 0xd6, 0x8e, 0xf1, 0x53, 0xd9, 0xb0, 0x11, 0x07, 0x7c, 0xdb, 0x38, 0x8e, 0xfa, 0xfd, + 0x2f, 0xe1, 0xc6, 0x83, 0x92, 0x36, 0x34, 0xa3, 0x3c, 0x7c, 0xbc, 0x24, 0x8e, 0x03, 0xbe, 0x95, + 0xdc, 0x0b, 0x71, 0xbc, 0x95, 0x09, 0xc5, 0x71, 0xc0, 0xb7, 0x97, 0xdf, 0x93, 0x0f, 0xe7, 0xa4, + 0xa3, 0x3d, 0xe6, 0x5e, 0x99, 0xc9, 0xa1, 0xf7, 0x69, 0x61, 0x1b, 0x8f, 0x0f, 0x45, 0xd5, 0xec, + 0xdb, 0x99, 0x6a, 0xe2, 0x17, 0xd1, 0x60, 0xd5, 0x76, 0xbd, 0x65, 0x87, 0xb8, 0xd5, 0x20, 0xee, + 0x3d, 0x3c, 0x5c, 0x6d, 0x73, 0x70, 0xbd, 0x2d, 0xcd, 0xfe, 0x22, 0xb9, 0xfa, 0x87, 0xb9, 0x98, + 0x36, 0x30, 0xc3, 0xf5, 0x40, 0x6a, 0xc3, 0x1e, 0x0c, 0x75, 0x7c, 0x35, 0x5c, 0x05, 0x99, 0x85, + 0xdf, 0x2b, 0x04, 0xf5, 0x5b, 0xe4, 0x06, 0xbe, 0x4c, 0x82, 0x3f, 0x84, 0x4e, 0x49, 0x80, 0xaa, + 0xee, 0xe8, 0x2d, 0xe2, 0x85, 0x39, 0x06, 0x21, 0x4c, 0x93, 0x5f, 0xba, 0xde, 0x0e, 0xd0, 0x62, + 0xde, 0xc2, 0x14, 0x0e, 0x82, 0x6a, 0xf5, 0x6d, 0xc3, 0xb1, 0xf9, 0x8f, 0xf2, 0x48, 0x09, 0xcc, + 0xcb, 0xe0, 0x01, 0xd0, 0x3e, 0x4e, 0xe5, 0xef, 0x88, 0xce, 0x35, 0xd1, 0x58, 0x28, 0x8c, 0x5a, + 0xa7, 0xd5, 0xd2, 0xa1, 0x83, 0xa9, 0xf9, 0x5a, 0x8c, 0x32, 0x0b, 0x09, 0x99, 0xc5, 0x7a, 0x86, + 0x5b, 0xac, 0x38, 0x7c, 0x60, 0x55, 0x77, 0x19, 0x0b, 0x2d, 0xce, 0x15, 0x7f, 0x26, 0x83, 0x4e, + 0x94, 0x96, 0x96, 0x48, 0xc3, 0x23, 0xc6, 0xfc, 0x22, 0x35, 0xdd, 0x26, 0xec, 0x8e, 0xe5, 0xf9, + 0xd6, 0xf2, 0xf3, 0xe9, 0xd5, 0xb1, 0x4e, 0xba, 0x9c, 0x54, 0x98, 0xb5, 0x24, 0x08, 0x58, 0xa0, + 0x73, 0x92, 0xba, 0x0d, 0x34, 0xf5, 0x06, 0x10, 0x69, 0x89, 0xf5, 0x9e, 0xb9, 0x8e, 0x4e, 0xa7, + 0xb2, 0xdc, 0xcc, 0x54, 0xea, 0x15, 0x4d, 0xa5, 0x7f, 0x95, 0x09, 0xd5, 0x3d, 0x22, 0x24, 0x7c, + 0x19, 0xa1, 0x10, 0xc4, 0x37, 0x4f, 0x23, 0x1b, 0xeb, 0x45, 0x14, 0x0a, 0x4d, 0x13, 0x28, 0xf0, + 0x3c, 0x2a, 0x70, 0xb1, 0xb0, 0xac, 0xb1, 0xef, 0xdd, 0xa4, 0x17, 0x2e, 0x8b, 0x72, 0x80, 0x8d, + 0x11, 0xff, 0x66, 0xce, 0xe6, 0xcc, 0x73, 0x68, 0x70, 0xa7, 0xdf, 0xf5, 0x99, 0x1c, 0xc2, 0xe2, + 0x4e, 0x67, 0x1f, 0xcd, 0xc0, 0x77, 0xc4, 0x60, 0xd9, 0x59, 0xd6, 0x97, 0x8b, 0xa8, 0x9f, 0x7e, + 0x02, 0xe4, 0x51, 0x10, 0xe2, 0xa6, 0x76, 0x38, 0x4c, 0x0b, 0xb0, 0x61, 0xd0, 0xa2, 0xbe, 0xe4, + 0xa0, 0x45, 0xea, 0xf7, 0xe7, 0xd0, 0x49, 0xb1, 0x43, 0xca, 0x04, 0x42, 0xb1, 0x1f, 0x75, 0xca, + 0xdb, 0xd8, 0x29, 0x2a, 0x2a, 0x30, 0x03, 0x97, 0xc7, 0xc4, 0x67, 0x87, 0x0f, 0x00, 0xd1, 0x38, + 0x46, 0xfd, 0xf7, 0x59, 0x34, 0x1c, 0x18, 0x11, 0xba, 0xe3, 0x1e, 0xe2, 0xee, 0x78, 0x1f, 0x1a, + 0x86, 0xb0, 0x33, 0x2d, 0x62, 0xb1, 0xd0, 0x2c, 0xbd, 0x42, 0x12, 0x0b, 0x1f, 0xc1, 0xf3, 0x15, + 0x49, 0x84, 0x54, 0xfb, 0x99, 0x7d, 0x21, 0x04, 0x03, 0x62, 0xc6, 0x05, 0x83, 0xab, 0x3f, 0x91, + 0x43, 0x43, 0xbe, 0x94, 0xc7, 0xcd, 0x83, 0x7a, 0x9b, 0xb0, 0xbf, 0x42, 0xbe, 0x82, 0x50, 0xd5, + 0x76, 0x3c, 0xbd, 0x39, 0x17, 0x6a, 0x3e, 0x1c, 0xc3, 0xb5, 0x01, 0xca, 0xca, 0x08, 0x24, 0xb0, + 0x7e, 0x85, 0xc6, 0x1b, 0x9b, 0x98, 0xd8, 0xfa, 0x15, 0x40, 0x35, 0x81, 0x42, 0xfd, 0x8d, 0x2c, + 0x3a, 0xe6, 0x77, 0xd2, 0xe4, 0x3d, 0xd2, 0xe8, 0x1c, 0xe6, 0xb9, 0x49, 0x96, 0x76, 0xef, 0xa6, + 0xd2, 0x56, 0xff, 0xab, 0x30, 0x91, 0x4c, 0x34, 0xed, 0xa3, 0x89, 0xe4, 0xaf, 0x43, 0xc7, 0xd5, + 0x6f, 0xcf, 0xa1, 0x13, 0xbe, 0xd4, 0xa7, 0x3a, 0x16, 0x6c, 0x60, 0x27, 0xf4, 0x66, 0xf3, 0x30, + 0xef, 0xf9, 0x06, 0x7d, 0x41, 0xcc, 0xf3, 0x38, 0x6e, 0x3c, 0x77, 0xdc, 0x12, 0x07, 0xd7, 0x6d, + 0xd3, 0xd0, 0x44, 0x22, 0xfc, 0x32, 0x1a, 0xf2, 0x7f, 0x96, 0x9c, 0x65, 0x7f, 0xa3, 0x07, 0xc7, + 0xd1, 0x41, 0x21, 0xdd, 0x91, 0x9e, 0xab, 0x4b, 0x05, 0xd4, 0xff, 0x58, 0x40, 0x67, 0x6e, 0x9b, + 0x96, 0x61, 0xaf, 0xba, 0x7e, 0xea, 0xc1, 0x03, 0x7f, 0x1c, 0xb3, 0xdf, 0x29, 0x07, 0x5f, 0x43, + 0xf7, 0x45, 0x45, 0xea, 0x04, 0x01, 0xa1, 0x79, 0xef, 0xac, 0x32, 0x82, 0xba, 0x9f, 0x84, 0x90, + 0xdf, 0xe9, 0x68, 0xc9, 0x25, 0xa3, 0x59, 0x0c, 0xfb, 0xb6, 0x92, 0xc5, 0xf0, 0x51, 0x54, 0x28, + 0xdb, 0x2d, 0xdd, 0xf4, 0x03, 0x97, 0xc0, 0x28, 0x0e, 0xea, 0x05, 0x8c, 0xc6, 0x29, 0x28, 0x7f, + 0x5e, 0x31, 0x74, 0xd9, 0x40, 0xc8, 0xdf, 0x2f, 0x40, 0xad, 0x34, 0x4d, 0x24, 0xc2, 0x36, 0x1a, + 0xe6, 0xd5, 0xf1, 0x1b, 0x18, 0x04, 0x9b, 0xa7, 0xa7, 0x7d, 0x19, 0xa5, 0xab, 0xd5, 0x65, 0xa9, + 0x1c, 0xdb, 0x46, 0xb1, 0xe4, 0x8a, 0xfc, 0x63, 0xd8, 0x5d, 0x8c, 0x26, 0xf3, 0x17, 0x84, 0x00, + 0x93, 0xcc, 0x60, 0x5c, 0x08, 0x30, 0xcb, 0x88, 0x44, 0x78, 0x12, 0x8d, 0x41, 0xd8, 0xde, 0x60, + 0x2b, 0x45, 0x55, 0x62, 0x08, 0x8c, 0x4a, 0x38, 0xd8, 0x67, 0x91, 0x7e, 0xe9, 0xc7, 0xd5, 0x1b, + 0x1c, 0xad, 0xc5, 0x4b, 0x9c, 0x79, 0x05, 0xe1, 0x78, 0x9b, 0xb7, 0x75, 0xb4, 0xff, 0xe9, 0x6c, + 0xb8, 0xaf, 0x3b, 0xe8, 0xce, 0x19, 0x7b, 0x71, 0x98, 0xfd, 0x0b, 0x19, 0x34, 0x16, 0x0b, 0x03, + 0x8d, 0x9f, 0x42, 0x88, 0x41, 0x84, 0x70, 0x7b, 0x10, 0xbf, 0x22, 0x0c, 0x0d, 0xcd, 0x97, 0x92, + 0x90, 0x0c, 0x5f, 0x41, 0xfd, 0xec, 0x17, 0x0f, 0x91, 0x13, 0x2f, 0xd2, 0xe9, 0x98, 0x86, 0x16, + 0x10, 0x85, 0xb5, 0xc0, 0x1d, 0x51, 0x2e, 0xb1, 0x88, 0xb7, 0xd6, 0x0e, 0x6a, 0xa1, 0x64, 0xb4, + 0x03, 0x87, 0x82, 0x06, 0x97, 0x8c, 0xfd, 0xea, 0xba, 0x02, 0x8f, 0xa8, 0x9d, 0xdb, 0x2c, 0xa2, + 0x76, 0x64, 0x6e, 0xe2, 0x21, 0xb4, 0xf7, 0xee, 0x61, 0xc9, 0x67, 0xb3, 0xe8, 0x58, 0x50, 0xeb, + 0x3e, 0x5e, 0x47, 0xbc, 0x83, 0x44, 0xf2, 0x99, 0x0c, 0x52, 0xc6, 0xcd, 0x66, 0xd3, 0xb4, 0x96, + 0x2b, 0xd6, 0x92, 0xed, 0xb4, 0x60, 0xf2, 0xd8, 0xbf, 0xe3, 0x4e, 0xf5, 0xbb, 0x32, 0x68, 0x8c, + 0x37, 0x68, 0x42, 0x77, 0x8c, 0xfd, 0x3b, 0x4b, 0x8a, 0xb6, 0x64, 0xff, 0xf4, 0x45, 0xfd, 0x52, + 0x16, 0xa1, 0x19, 0xbb, 0x71, 0xe7, 0x80, 0xbf, 0x2c, 0x7c, 0x01, 0x15, 0x58, 0x9c, 0x22, 0xae, + 0xb1, 0x63, 0x97, 0xd9, 0x83, 0x51, 0xfa, 0x69, 0x0c, 0x31, 0x3e, 0xca, 0x4f, 0x68, 0x0b, 0x2c, + 0xce, 0x91, 0x92, 0xd1, 0x78, 0x11, 0x5a, 0x29, 0xa5, 0xe3, 0x56, 0x4d, 0x50, 0x29, 0x85, 0xc9, + 0x95, 0x6e, 0xac, 0x17, 0xf3, 0x4d, 0xbb, 0x71, 0x47, 0x03, 0x7a, 0xf5, 0xaf, 0x32, 0x4c, 0x76, + 0x07, 0xfc, 0x75, 0x9d, 0xff, 0xf9, 0xf9, 0x6d, 0x7e, 0xfe, 0x77, 0x67, 0xd0, 0x09, 0x8d, 0x34, + 0xec, 0xbb, 0xc4, 0x59, 0x9b, 0xb0, 0x0d, 0x72, 0x9d, 0x58, 0xc4, 0xd9, 0xaf, 0x11, 0xf5, 0x0f, + 0x20, 0x05, 0x41, 0xd8, 0x98, 0x9b, 0x2e, 0x31, 0x0e, 0x4e, 0x7a, 0x08, 0xf5, 0x57, 0xfa, 0x90, + 0x92, 0x68, 0x21, 0x1e, 0x58, 0xab, 0x28, 0xd5, 0xec, 0xcf, 0xef, 0x95, 0xd9, 0xdf, 0xbb, 0x3d, + 0xb3, 0xbf, 0xb0, 0x5d, 0xb3, 0xbf, 0x6f, 0x2b, 0x66, 0x7f, 0x2b, 0x6a, 0xf6, 0xf7, 0x83, 0xd9, + 0xff, 0x54, 0x57, 0xb3, 0x7f, 0xd2, 0x32, 0x76, 0x68, 0xf4, 0x1f, 0xd8, 0xd4, 0xa5, 0x3b, 0xd9, + 0xad, 0x5c, 0xa4, 0x93, 0x62, 0xc3, 0x76, 0x0c, 0x62, 0xf0, 0x4d, 0x0a, 0x9c, 0x90, 0x3b, 0x1c, + 0xa6, 0x05, 0xd8, 0x58, 0x1e, 0xd8, 0xe1, 0xad, 0xe4, 0x81, 0xdd, 0x83, 0x6d, 0xcc, 0xa7, 0xb2, + 0x68, 0x6c, 0x82, 0x38, 0x1e, 0x0b, 0x84, 0xb8, 0x17, 0x4e, 0x4a, 0x25, 0x74, 0x4c, 0x60, 0x08, + 0x16, 0x79, 0x36, 0x74, 0xbc, 0x6a, 0x10, 0xc7, 0x8b, 0xfa, 0x6d, 0x45, 0xe9, 0x69, 0xf5, 0x7e, + 0x2e, 0x26, 0x3e, 0x76, 0x83, 0xea, 0x7d, 0x38, 0x13, 0xa4, 0xc9, 0x7f, 0x69, 0x01, 0xbd, 0x90, + 0x5e, 0x29, 0xbf, 0xfd, 0xf4, 0x4a, 0xea, 0xcf, 0x65, 0xd0, 0x05, 0x8d, 0x58, 0x64, 0x55, 0x5f, + 0x6c, 0x12, 0xa1, 0x59, 0x7c, 0x65, 0xa0, 0xb3, 0x86, 0xe9, 0xb6, 0x74, 0xaf, 0xb1, 0xb2, 0x2b, + 0x19, 0x4d, 0xa1, 0x21, 0x71, 0xfe, 0xda, 0xc6, 0xdc, 0x26, 0x95, 0x53, 0x7f, 0x3d, 0x87, 0xfa, + 0xc6, 0x6d, 0xef, 0x55, 0x7b, 0x97, 0xf9, 0xbe, 0xc2, 0x29, 0x3f, 0xbb, 0x8d, 0x73, 0x91, 0x27, + 0xa0, 0x72, 0x21, 0x04, 0x3a, 0x38, 0xf5, 0x2d, 0xda, 0xb1, 0x50, 0xf1, 0x3e, 0xd9, 0x36, 0x33, + 0x7d, 0x3d, 0x83, 0x06, 0x20, 0x0a, 0x86, 0x70, 0x72, 0x09, 0x2e, 0xb3, 0x1e, 0x05, 0x46, 0xeb, + 0x08, 0x49, 0xf1, 0x87, 0xa4, 0xc8, 0x8d, 0x85, 0xdd, 0x67, 0x06, 0x13, 0x83, 0x38, 0xee, 0x59, + 0x02, 0x2e, 0xf5, 0x1b, 0x79, 0x34, 0xe4, 0x3b, 0x4a, 0xee, 0x53, 0x0f, 0x3e, 0x8e, 0x0a, 0xd3, + 0xb6, 0x10, 0xce, 0x1d, 0x1c, 0x2b, 0x57, 0x6c, 0x37, 0xe2, 0x31, 0xca, 0x89, 0xf0, 0x53, 0xa8, + 0x7f, 0xce, 0x36, 0x44, 0xb7, 0x60, 0x18, 0xd3, 0x96, 0x6d, 0xc4, 0x9e, 0x55, 0x06, 0x84, 0xf8, + 0x02, 0xca, 0x83, 0x47, 0xb5, 0x70, 0xf4, 0x1c, 0xf1, 0xa2, 0x06, 0xbc, 0xa0, 0x1b, 0x85, 0xed, + 0xea, 0x46, 0xdf, 0x4e, 0x75, 0xa3, 0x7f, 0x6f, 0x75, 0xe3, 0x75, 0x34, 0x04, 0x35, 0xf9, 0xd9, + 0xa0, 0x36, 0x5f, 0xde, 0x4e, 0xf3, 0x15, 0x68, 0x98, 0xb5, 0x9b, 0xe7, 0x84, 0x82, 0x85, 0x47, + 0x62, 0x15, 0x51, 0x3b, 0xb4, 0x0b, 0xb5, 0xfb, 0xc3, 0x0c, 0xea, 0xbb, 0x69, 0xdd, 0xb1, 0xec, + 0xd5, 0xdd, 0x69, 0xdc, 0x53, 0x68, 0x90, 0xb3, 0x11, 0xe6, 0x78, 0x78, 0x29, 0xdb, 0x61, 0xe0, + 0x3a, 0x70, 0xd2, 0x44, 0x2a, 0xfc, 0x62, 0x50, 0x08, 0x1e, 0x4d, 0xe4, 0xc2, 0x84, 0x08, 0x7e, + 0xa1, 0x86, 0x1c, 0xc3, 0x5d, 0x24, 0xc7, 0x67, 0x51, 0xbe, 0x4c, 0x9b, 0x2a, 0x44, 0x04, 0xa5, + 0x4d, 0xd1, 0x00, 0xaa, 0xfe, 0xb3, 0x2c, 0x1a, 0x89, 0x1c, 0x3f, 0x3d, 0x8a, 0x06, 0xf8, 0xf1, + 0x8f, 0xe9, 0x07, 0x95, 0x87, 0x47, 0x15, 0x01, 0x50, 0xeb, 0x67, 0x7f, 0x56, 0x0c, 0xfc, 0x7e, + 0xd4, 0x67, 0xbb, 0xb0, 0x34, 0xc1, 0xb7, 0x8c, 0x84, 0x43, 0x68, 0xbe, 0x46, 0xdb, 0xce, 0x06, + 0x07, 0x27, 0x11, 0x35, 0xd2, 0x76, 0xe1, 0xd3, 0xae, 0xa1, 0x01, 0xdd, 0x75, 0x89, 0x57, 0xf7, + 0xf4, 0x65, 0x31, 0xce, 0x7c, 0x00, 0x14, 0x47, 0x07, 0x00, 0x17, 0xf4, 0x65, 0xfc, 0x0a, 0x1a, + 0x6e, 0x38, 0x04, 0x16, 0x2f, 0xbd, 0x49, 0x5b, 0x29, 0x18, 0x97, 0x12, 0x42, 0x3c, 0xf1, 0x0f, + 0x11, 0x15, 0x03, 0xdf, 0x42, 0xc3, 0xfc, 0x73, 0x98, 0x47, 0x33, 0x0c, 0xb4, 0x91, 0x70, 0x31, + 0x61, 0x22, 0x61, 0x3e, 0xcd, 0xdc, 0xb1, 0x5d, 0x24, 0x17, 0xf9, 0x1a, 0x02, 0xa9, 0xfa, 0xd5, + 0x0c, 0x35, 0x78, 0x28, 0x00, 0xf2, 0xb3, 0x52, 0x5d, 0x69, 0x6d, 0x53, 0x57, 0x5a, 0x61, 0x26, + 0xb5, 0x82, 0xdb, 0x65, 0x76, 0xd2, 0x38, 0x16, 0x5f, 0x46, 0x05, 0x43, 0x3c, 0xfb, 0x39, 0x29, + 0x7f, 0x84, 0x5f, 0x8f, 0xc6, 0xa9, 0xf0, 0x45, 0x94, 0xa7, 0x06, 0x6d, 0x74, 0xe3, 0x27, 0xae, + 0x91, 0x1a, 0x50, 0xa8, 0xdf, 0x9a, 0x45, 0x43, 0xc2, 0xd7, 0x5c, 0xdd, 0xd5, 0xe7, 0x3c, 0xbf, + 0xb5, 0x66, 0xfa, 0x6e, 0x0e, 0xb0, 0x23, 0xf0, 0x9b, 0x7c, 0x2d, 0x10, 0xc5, 0x96, 0xae, 0x20, + 0xb8, 0x60, 0x9e, 0xe1, 0x1f, 0x5a, 0xd8, 0xfa, 0x26, 0x88, 0xd2, 0xbf, 0x9a, 0xef, 0xcf, 0x8e, + 0xe6, 0x5e, 0xcd, 0xf7, 0xe7, 0x47, 0x7b, 0x21, 0xaa, 0x0e, 0x04, 0xb2, 0x65, 0x3b, 0x4c, 0x6b, + 0xc9, 0x5c, 0x3e, 0xe0, 0x3e, 0xe9, 0x7b, 0x1b, 0x71, 0x28, 0x22, 0x9b, 0x03, 0xee, 0xa0, 0xfe, + 0xb6, 0xca, 0xe6, 0x28, 0xf3, 0x1a, 0x97, 0xcd, 0x1f, 0x65, 0x90, 0x92, 0x28, 0x9b, 0xd2, 0x3e, + 0xdd, 0x7c, 0xef, 0x5d, 0xfe, 0xb5, 0xaf, 0x67, 0xd1, 0x58, 0xc5, 0xf2, 0xc8, 0x32, 0xdb, 0xf7, + 0x1c, 0xf0, 0xa9, 0xe2, 0x06, 0x1a, 0x14, 0x3e, 0x86, 0xf7, 0xf9, 0xfd, 0xc1, 0xae, 0x32, 0x44, + 0xa5, 0x70, 0x12, 0x4b, 0xef, 0x61, 0xca, 0xe6, 0x88, 0x90, 0x0f, 0xf8, 0x9c, 0x73, 0x30, 0x84, + 0x7c, 0xc0, 0x27, 0xaf, 0x77, 0xa8, 0x90, 0xff, 0x73, 0x06, 0x1d, 0x4f, 0xa8, 0x1c, 0x5f, 0x40, + 0x7d, 0xb5, 0xce, 0x22, 0x84, 0xf3, 0xc9, 0x84, 0x3e, 0xa2, 0x6e, 0x67, 0x11, 0x22, 0xf9, 0x68, + 0x3e, 0x12, 0x2f, 0xc0, 0xa3, 0xdd, 0xf9, 0x4a, 0x79, 0x82, 0x4b, 0x55, 0x15, 0x9e, 0x1f, 0x53, + 0x70, 0xd2, 0x97, 0x05, 0x0f, 0x7b, 0x6d, 0xd3, 0x68, 0x44, 0x1e, 0xf6, 0xd2, 0x32, 0xf8, 0xc3, + 0x68, 0xa0, 0xf4, 0x66, 0xc7, 0x21, 0xc0, 0x97, 0x49, 0xfc, 0xe1, 0x80, 0xaf, 0x8f, 0x48, 0xe2, + 0xcc, 0xde, 0x28, 0x53, 0x8a, 0x28, 0xef, 0x90, 0xa1, 0xfa, 0xe9, 0x0c, 0x3a, 0x93, 0xde, 0x3a, + 0xfc, 0x04, 0xea, 0xa3, 0x3b, 0xdb, 0x92, 0x36, 0xc7, 0x3f, 0x9d, 0xe5, 0x2a, 0xb4, 0x9b, 0xa4, + 0xae, 0x3b, 0xa2, 0xe1, 0xed, 0x93, 0xe1, 0x97, 0xd0, 0x60, 0xc5, 0x75, 0x3b, 0xc4, 0xa9, 0x3d, + 0x75, 0x53, 0xab, 0xf0, 0x3d, 0x15, 0xd8, 0xec, 0x26, 0x80, 0xeb, 0xee, 0x53, 0x91, 0x80, 0x3d, + 0x22, 0xbd, 0xfa, 0x89, 0x0c, 0x3a, 0xdb, 0xed, 0xab, 0xe8, 0x06, 0x7e, 0x81, 0x58, 0xba, 0x45, + 0x77, 0xfc, 0x99, 0x70, 0x8b, 0xe2, 0x01, 0x4c, 0xde, 0x64, 0x04, 0x84, 0xb4, 0x10, 0x3b, 0x1d, + 0x0b, 0xae, 0xe3, 0xd9, 0x49, 0x1e, 0xc0, 0x22, 0x85, 0x7c, 0x42, 0xf5, 0x77, 0xb3, 0x68, 0xa8, + 0xda, 0xec, 0x2c, 0x9b, 0xc2, 0xc2, 0xb1, 0x63, 0x7b, 0xdb, 0xb7, 0x7e, 0xb3, 0xdb, 0xb3, 0x7e, + 0xe9, 0x70, 0x73, 0x76, 0x38, 0xdc, 0xfc, 0x72, 0xf8, 0x45, 0x54, 0x68, 0xc3, 0x77, 0x44, 0xcf, + 0x13, 0xd9, 0xd7, 0xa5, 0x9d, 0x27, 0xb2, 0x32, 0x74, 0x7c, 0x35, 0x76, 0x31, 0xbe, 0xc2, 0xb2, + 0x82, 0x40, 0xc3, 0x45, 0xe2, 0x48, 0xa0, 0x7b, 0x22, 0xd0, 0x70, 0x41, 0x38, 0x12, 0xe8, 0x2e, + 0x04, 0xfa, 0x2b, 0x59, 0x34, 0x22, 0x57, 0x89, 0x9f, 0x40, 0x83, 0xac, 0x1a, 0x76, 0xae, 0x92, + 0x11, 0xdc, 0x48, 0x43, 0xb0, 0x86, 0xd8, 0x0f, 0x7e, 0x40, 0x74, 0x6c, 0x45, 0x77, 0xeb, 0xe1, + 0x09, 0x07, 0xbb, 0x85, 0xec, 0x67, 0xfe, 0x3c, 0x11, 0x94, 0x36, 0xb2, 0xa2, 0xbb, 0x13, 0xe1, + 0x6f, 0x3c, 0x89, 0x30, 0x24, 0x79, 0x97, 0x19, 0xb0, 0xac, 0xfd, 0x3c, 0x51, 0x6c, 0x14, 0xab, + 0x8d, 0x31, 0x98, 0xc8, 0xe6, 0x23, 0x41, 0xb3, 0x41, 0x19, 0x7a, 0xb7, 0x90, 0xc5, 0x56, 0xa0, + 0x4f, 0x3e, 0x26, 0x64, 0x04, 0x65, 0xdd, 0xd3, 0xd9, 0xa6, 0xdc, 0xef, 0x00, 0xf5, 0xcf, 0x4c, + 0xd4, 0x3b, 0x6f, 0x91, 0xf9, 0x25, 0xfc, 0x24, 0x1a, 0xa0, 0x0a, 0x33, 0x63, 0xd3, 0xbe, 0xcc, + 0x70, 0x2f, 0x00, 0x41, 0x93, 0x00, 0x31, 0xdd, 0xa3, 0x85, 0x54, 0xf8, 0x9a, 0x98, 0xc7, 0x9d, + 0x6b, 0x1f, 0x16, 0xcb, 0x30, 0xcc, 0x74, 0x8f, 0x26, 0xe6, 0x7b, 0xbf, 0x26, 0xe6, 0xcf, 0xe6, + 0x7a, 0x27, 0x95, 0x62, 0x18, 0xbf, 0x14, 0x1f, 0x1f, 0x33, 0x49, 0x49, 0xa6, 0xa3, 0xbb, 0xa7, + 0x38, 0xc5, 0x74, 0x8f, 0x96, 0x9c, 0x9c, 0x7a, 0x48, 0x74, 0x21, 0x8c, 0xba, 0x2e, 0x88, 0xb8, + 0xe9, 0x1e, 0x4d, 0xa2, 0xc5, 0xcf, 0xa2, 0x41, 0xfe, 0xfb, 0x55, 0xdb, 0xb4, 0xa2, 0x31, 0x4e, + 0x04, 0xd4, 0x74, 0x8f, 0x26, 0x52, 0x0a, 0x95, 0x56, 0x1d, 0xd3, 0xf2, 0xf8, 0xdb, 0xc7, 0x68, + 0xa5, 0x80, 0x13, 0x2a, 0x85, 0xdf, 0xf8, 0x25, 0x34, 0x1c, 0x04, 0x8f, 0x79, 0x83, 0x34, 0x3c, + 0x7e, 0x78, 0x7c, 0x5f, 0xa4, 0x30, 0x43, 0x4e, 0xf7, 0x68, 0x32, 0x35, 0xbe, 0x88, 0x0a, 0x1a, + 0x71, 0xcd, 0x37, 0xfd, 0x4b, 0xcf, 0x11, 0x61, 0x9c, 0x9b, 0x6f, 0x52, 0x29, 0x71, 0x3c, 0xed, + 0x9d, 0xf0, 0x96, 0x95, 0x1f, 0xf5, 0xe2, 0x48, 0x2d, 0x93, 0x96, 0x41, 0x7b, 0x47, 0xb8, 0x62, + 0x7f, 0x25, 0x0c, 0xa9, 0xc3, 0x93, 0xe7, 0x0d, 0x46, 0xdf, 0x2e, 0x8b, 0xd8, 0xe9, 0x1e, 0x2d, + 0x42, 0x2f, 0x48, 0xb5, 0x6c, 0xba, 0x77, 0x78, 0x14, 0xc3, 0xa8, 0x54, 0x29, 0x4a, 0x90, 0x2a, + 0xfd, 0x29, 0x54, 0x3d, 0x47, 0xbc, 0x55, 0xdb, 0xb9, 0xc3, 0x63, 0x16, 0x46, 0xab, 0xe6, 0x58, + 0xa1, 0x6a, 0x0e, 0x11, 0xab, 0xa6, 0x03, 0x6e, 0x24, 0xb9, 0x6a, 0xdd, 0xd3, 0xc5, 0xaa, 0xd9, + 0x49, 0x9c, 0xdf, 0x49, 0x33, 0x44, 0xbf, 0xcb, 0x72, 0x18, 0xc7, 0x3b, 0x14, 0x70, 0x42, 0x87, + 0xc2, 0x6f, 0x5a, 0xa9, 0x90, 0xa7, 0x96, 0x27, 0x29, 0x0e, 0x2a, 0x15, 0x50, 0xb4, 0x52, 0x31, + 0xa3, 0xed, 0x35, 0x31, 0x7d, 0xab, 0x32, 0x26, 0x77, 0x50, 0x88, 0xa1, 0x1d, 0x24, 0xa4, 0x79, + 0x2d, 0x42, 0x6a, 0x48, 0x05, 0x03, 0xf9, 0x60, 0xd0, 0xc2, 0x89, 0xea, 0x74, 0x8f, 0x06, 0x49, + 0x23, 0x55, 0x96, 0x74, 0x54, 0x39, 0x0e, 0x14, 0x43, 0x3e, 0x05, 0x85, 0x4d, 0xf7, 0x68, 0x2c, + 0x21, 0xe9, 0x93, 0x42, 0x7a, 0x2f, 0xe5, 0x84, 0x3c, 0x45, 0x04, 0x08, 0x3a, 0x45, 0x84, 0x49, + 0xc0, 0xa6, 0xe2, 0x49, 0xac, 0x94, 0xfb, 0xe4, 0xa5, 0x26, 0x8a, 0x9f, 0xee, 0xd1, 0xe2, 0x89, + 0xaf, 0x9e, 0x95, 0xf2, 0x3a, 0x29, 0x27, 0x23, 0x81, 0x85, 0x42, 0x14, 0x15, 0x97, 0x98, 0x01, + 0x6a, 0x3e, 0x31, 0x8f, 0xbb, 0x72, 0x4a, 0xde, 0xb8, 0x24, 0x90, 0x4c, 0xf7, 0x68, 0x89, 0x19, + 0xe0, 0x27, 0x62, 0xd9, 0x95, 0x14, 0x45, 0xf6, 0xf0, 0x88, 0xa0, 0xa7, 0x7b, 0xb4, 0x58, 0x3e, + 0xa6, 0x6b, 0x62, 0x5a, 0x23, 0xe5, 0xb4, 0xdc, 0x89, 0x21, 0x86, 0x76, 0xa2, 0x90, 0xfe, 0xe8, + 0x9a, 0x98, 0xea, 0x46, 0x39, 0x13, 0x2f, 0x15, 0xce, 0x9c, 0x42, 0x4a, 0x1c, 0x2d, 0x39, 0x7b, + 0x87, 0x72, 0x3f, 0xcf, 0xbe, 0xc8, 0xcb, 0x27, 0xd1, 0x4c, 0xf7, 0x68, 0xc9, 0x99, 0x3f, 0xb4, + 0xe4, 0xb4, 0x17, 0xca, 0xd9, 0x6e, 0x3c, 0x83, 0xd6, 0x25, 0xa7, 0xcc, 0xd0, 0xbb, 0x24, 0x21, + 0x50, 0xce, 0xc9, 0x51, 0x4d, 0x53, 0x09, 0xa7, 0x7b, 0xb4, 0x2e, 0xa9, 0x0c, 0x6e, 0xa6, 0x64, + 0x04, 0x50, 0xce, 0xcb, 0xc9, 0x57, 0x13, 0x89, 0xa6, 0x7b, 0xb4, 0x94, 0x7c, 0x02, 0x37, 0x53, + 0x02, 0xc6, 0x2b, 0xc5, 0xae, 0x6c, 0x03, 0x79, 0xa4, 0x84, 0x9b, 0x9f, 0x4f, 0x8c, 0xb5, 0xae, + 0x3c, 0x20, 0xab, 0x6e, 0x02, 0x09, 0x55, 0xdd, 0xa4, 0x28, 0xed, 0xf3, 0x89, 0xc1, 0xc1, 0x95, + 0x07, 0xbb, 0x30, 0x0c, 0xda, 0x98, 0x18, 0x56, 0x7c, 0x3e, 0x31, 0x3a, 0xb7, 0xa2, 0xca, 0x0c, + 0x13, 0x48, 0x28, 0xc3, 0xa4, 0xb8, 0xde, 0xf3, 0x89, 0xe1, 0xa4, 0x95, 0x87, 0xba, 0x30, 0x0c, + 0x5b, 0x98, 0x14, 0x88, 0xfa, 0x59, 0x29, 0x9e, 0xb3, 0xf2, 0xb0, 0x3c, 0x6f, 0x08, 0x28, 0x3a, + 0x6f, 0x88, 0x91, 0x9f, 0x27, 0x62, 0x11, 0x2b, 0x95, 0x47, 0xe4, 0x61, 0x1e, 0x41, 0xd3, 0x61, + 0x1e, 0x8d, 0x71, 0x39, 0x11, 0x8b, 0xdc, 0xa7, 0x5c, 0x48, 0x63, 0x02, 0x68, 0x99, 0x09, 0x8b, + 0xf5, 0x57, 0x49, 0x08, 0x1d, 0xa7, 0xbc, 0x47, 0xf6, 0x4e, 0x8e, 0x11, 0x4c, 0xf7, 0x68, 0x09, + 0x01, 0xe7, 0xb4, 0xe4, 0x38, 0x29, 0xca, 0x45, 0x79, 0xd8, 0x26, 0xd1, 0xd0, 0x61, 0x9b, 0x18, + 0x63, 0x65, 0x26, 0xe9, 0x25, 0x82, 0x72, 0x49, 0x36, 0xcc, 0xe2, 0x14, 0xd4, 0x30, 0x4b, 0x78, + 0xc1, 0xa0, 0x25, 0xc7, 0xee, 0x50, 0x1e, 0xed, 0xda, 0x42, 0xa0, 0x49, 0x68, 0x21, 0x0b, 0x65, + 0x11, 0xda, 0x4e, 0x37, 0xdb, 0x4d, 0x5b, 0x37, 0x94, 0xf7, 0x26, 0xda, 0x4e, 0x0c, 0x29, 0xd8, + 0x4e, 0x0c, 0x40, 0x57, 0x79, 0xd1, 0x53, 0x5f, 0x79, 0x4c, 0x5e, 0xe5, 0x45, 0x1c, 0x5d, 0xe5, + 0x25, 0xaf, 0xfe, 0x89, 0x98, 0x57, 0xbb, 0xf2, 0xb8, 0xac, 0x00, 0x11, 0x34, 0x55, 0x80, 0xa8, + 0x1f, 0xfc, 0x47, 0xd3, 0xfd, 0xc0, 0x95, 0xcb, 0xc0, 0xed, 0x01, 0x9f, 0x5b, 0x1a, 0xdd, 0x74, + 0x8f, 0x96, 0xee, 0x4b, 0x5e, 0x49, 0x70, 0xeb, 0x56, 0xae, 0xc8, 0x0a, 0x16, 0x23, 0xa0, 0x0a, + 0x16, 0x77, 0x06, 0xaf, 0x24, 0xf8, 0x65, 0x2b, 0x4f, 0xa4, 0xb2, 0x0a, 0xbe, 0x39, 0xc1, 0x9b, + 0xfb, 0x9a, 0xe8, 0x58, 0xad, 0x3c, 0x29, 0x2f, 0x76, 0x21, 0x86, 0x2e, 0x76, 0x82, 0x03, 0xf6, + 0x35, 0xd1, 0xa5, 0x58, 0xb9, 0x1a, 0x2f, 0x15, 0x2e, 0x91, 0x82, 0xeb, 0xb1, 0x96, 0xec, 0x89, + 0xab, 0x3c, 0x25, 0x6b, 0x5d, 0x12, 0x0d, 0xd5, 0xba, 0x44, 0x2f, 0xde, 0xa9, 0xb8, 0x43, 0xad, + 0x72, 0x2d, 0xba, 0xc9, 0x96, 0xf1, 0xd4, 0xf2, 0x89, 0x39, 0xe1, 0xbe, 0x12, 0x0d, 0xe2, 0xa5, + 0x3c, 0x1d, 0xb9, 0xf6, 0x95, 0xb0, 0xd4, 0xbe, 0x8d, 0x04, 0xfd, 0x7a, 0x25, 0x1a, 0xf7, 0x4a, + 0x79, 0x26, 0x99, 0x43, 0xa0, 0x2b, 0xd1, 0x38, 0x59, 0xaf, 0x44, 0x43, 0x45, 0x29, 0xcf, 0x26, + 0x73, 0x08, 0xa4, 0x1b, 0x0d, 0x2d, 0xf5, 0xa4, 0x10, 0xbc, 0x5a, 0x79, 0x9f, 0x6c, 0x3a, 0x06, + 0x08, 0x6a, 0x3a, 0x86, 0x21, 0xae, 0x9f, 0x14, 0x82, 0x3e, 0x2b, 0xcf, 0xc5, 0x8a, 0x04, 0x8d, + 0x15, 0x42, 0x43, 0x3f, 0x29, 0x04, 0x4b, 0x56, 0x9e, 0x8f, 0x15, 0x09, 0x5a, 0x27, 0x84, 0x54, + 0x36, 0xba, 0xbd, 0x58, 0x54, 0x5e, 0x90, 0x0f, 0x83, 0xd3, 0x29, 0xa7, 0x7b, 0xb4, 0x6e, 0x2f, + 0x1f, 0x3f, 0x9a, 0xee, 0x9e, 0xac, 0xbc, 0x28, 0x0f, 0xe1, 0x34, 0x3a, 0x3a, 0x84, 0x53, 0x5d, + 0x9c, 0x5f, 0x8a, 0x44, 0x2f, 0x50, 0x5e, 0x92, 0xa7, 0x38, 0x09, 0x49, 0xa7, 0xb8, 0x68, 0xac, + 0x03, 0xe9, 0x59, 0xbe, 0xf2, 0x7e, 0x79, 0x8a, 0x13, 0x71, 0x74, 0x8a, 0x93, 0x9e, 0xf0, 0x4f, + 0xc4, 0x5e, 0x8b, 0x2b, 0x2f, 0xcb, 0x53, 0x5c, 0x04, 0x4d, 0xa7, 0xb8, 0xe8, 0xfb, 0xf2, 0x97, + 0x22, 0x8f, 0xa6, 0x95, 0x57, 0x92, 0xdb, 0x0f, 0x48, 0xb1, 0xfd, 0xec, 0x89, 0xb5, 0x96, 0xfc, + 0xfa, 0x57, 0x29, 0xc9, 0xe3, 0x37, 0x89, 0x86, 0x8e, 0xdf, 0xc4, 0x97, 0xc3, 0xd1, 0x8d, 0x03, + 0xd7, 0xaa, 0xf1, 0x2e, 0x1b, 0x87, 0xd0, 0x14, 0x49, 0x00, 0x4b, 0x7b, 0x64, 0xb6, 0x11, 0x9a, + 0x48, 0xd9, 0x23, 0xfb, 0xdb, 0xa0, 0x08, 0x3d, 0x9d, 0x5d, 0x63, 0xde, 0xb2, 0x4a, 0x59, 0x9e, + 0x5d, 0x63, 0x04, 0x74, 0x76, 0x8d, 0xfb, 0xd8, 0x4e, 0xa1, 0x51, 0xae, 0x45, 0xcc, 0x09, 0xd8, + 0xb4, 0x96, 0x95, 0xc9, 0xc8, 0xe3, 0xbb, 0x08, 0x9e, 0xce, 0x4e, 0x51, 0x18, 0xac, 0xd7, 0x0c, + 0x36, 0xd1, 0x34, 0xdb, 0x8b, 0xb6, 0xee, 0x18, 0x35, 0x62, 0x19, 0xca, 0x54, 0x64, 0xbd, 0x4e, + 0xa0, 0x81, 0xf5, 0x3a, 0x01, 0x0e, 0xa1, 0xa7, 0x22, 0x70, 0x8d, 0x34, 0x88, 0x79, 0x97, 0x28, + 0xd7, 0x81, 0x6d, 0x31, 0x8d, 0x2d, 0x27, 0x9b, 0xee, 0xd1, 0xd2, 0x38, 0x50, 0x5b, 0x7d, 0x76, + 0xad, 0xf6, 0xda, 0x4c, 0xf0, 0xe0, 0xbc, 0xea, 0x90, 0xb6, 0xee, 0x10, 0x65, 0x5a, 0xb6, 0xd5, + 0x13, 0x89, 0xa8, 0xad, 0x9e, 0x88, 0x88, 0xb3, 0xf5, 0xc7, 0x42, 0xa5, 0x1b, 0xdb, 0x70, 0x44, + 0x24, 0x97, 0xa6, 0xb3, 0x93, 0x8c, 0xa0, 0x02, 0x9a, 0xb1, 0xad, 0x65, 0x38, 0xa9, 0x78, 0x55, + 0x9e, 0x9d, 0xd2, 0x29, 0xe9, 0xec, 0x94, 0x8e, 0xa5, 0xaa, 0x2e, 0x63, 0xd9, 0x18, 0xbc, 0x21, + 0xab, 0x7a, 0x02, 0x09, 0x55, 0xf5, 0x04, 0x70, 0x9c, 0xa1, 0x46, 0x5c, 0xe2, 0x29, 0x33, 0xdd, + 0x18, 0x02, 0x49, 0x9c, 0x21, 0x80, 0xe3, 0x0c, 0xa7, 0x88, 0xd7, 0x58, 0x51, 0x66, 0xbb, 0x31, + 0x04, 0x92, 0x38, 0x43, 0x00, 0xd3, 0xcd, 0xa6, 0x0c, 0x1e, 0xef, 0x34, 0xef, 0xf8, 0x7d, 0x36, + 0x27, 0x6f, 0x36, 0x53, 0x09, 0xe9, 0x66, 0x33, 0x15, 0x89, 0x3f, 0xb1, 0x65, 0x6f, 0x6e, 0x65, + 0x1e, 0x2a, 0xbc, 0x1c, 0xda, 0x05, 0x5b, 0x29, 0x35, 0xdd, 0xa3, 0x6d, 0xd5, 0x5b, 0xfc, 0xbd, + 0x81, 0xd3, 0xa5, 0x52, 0x85, 0xaa, 0x8e, 0x05, 0x67, 0x15, 0x0c, 0x3c, 0xdd, 0xa3, 0x05, 0x6e, + 0x99, 0xcf, 0xa2, 0x41, 0xf8, 0xa8, 0x8a, 0x65, 0x7a, 0xe5, 0x71, 0xe5, 0x35, 0x79, 0xcb, 0x24, + 0xa0, 0xe8, 0x96, 0x49, 0xf8, 0x49, 0x27, 0x71, 0xf8, 0xc9, 0xa6, 0x98, 0xf2, 0xb8, 0xa2, 0xc9, + 0x93, 0xb8, 0x84, 0xa4, 0x93, 0xb8, 0x04, 0x08, 0xea, 0x2d, 0x3b, 0x76, 0xbb, 0x3c, 0xae, 0xd4, + 0x12, 0xea, 0x65, 0xa8, 0xa0, 0x5e, 0xf6, 0x33, 0xa8, 0xb7, 0xb6, 0xd2, 0xf1, 0xca, 0xf4, 0x1b, + 0x17, 0x12, 0xea, 0xf5, 0x91, 0x41, 0xbd, 0x3e, 0x80, 0x4e, 0x85, 0x00, 0xa8, 0x3a, 0x36, 0x9d, + 0xb4, 0x6f, 0x98, 0xcd, 0xa6, 0x72, 0x53, 0x9e, 0x0a, 0xa3, 0x78, 0x3a, 0x15, 0x46, 0x61, 0xd4, + 0xf4, 0x64, 0xad, 0x22, 0x8b, 0x9d, 0x65, 0xe5, 0x96, 0x6c, 0x7a, 0x86, 0x18, 0x6a, 0x7a, 0x86, + 0xbf, 0x60, 0x77, 0x41, 0x7f, 0x69, 0x64, 0xc9, 0x21, 0xee, 0x8a, 0x72, 0x3b, 0xb2, 0xbb, 0x10, + 0x70, 0xb0, 0xbb, 0x10, 0x7e, 0xe3, 0x65, 0x74, 0xbf, 0xb4, 0xd0, 0xf8, 0x97, 0x36, 0x35, 0xa2, + 0x3b, 0x8d, 0x15, 0xe5, 0x03, 0xc0, 0xea, 0xa1, 0xc4, 0xa5, 0x4a, 0x26, 0x9d, 0xee, 0xd1, 0xba, + 0x71, 0x82, 0x6d, 0xf9, 0x6b, 0x33, 0x2c, 0xc2, 0xa4, 0x56, 0x9d, 0xf0, 0x37, 0xa1, 0xaf, 0x47, + 0xb6, 0xe5, 0x71, 0x12, 0xd8, 0x96, 0xc7, 0xc1, 0xb8, 0x8d, 0xce, 0x47, 0xb6, 0x6a, 0xb3, 0x7a, + 0x93, 0xee, 0x4b, 0x88, 0x51, 0xd5, 0x1b, 0x77, 0x88, 0xa7, 0x7c, 0x10, 0x78, 0x5f, 0x48, 0xd9, + 0xf0, 0x45, 0xa8, 0xa7, 0x7b, 0xb4, 0x4d, 0xf8, 0x61, 0x15, 0xe5, 0x6b, 0x53, 0x0b, 0x55, 0xe5, + 0x43, 0xf2, 0xf9, 0x26, 0x85, 0x4d, 0xf7, 0x68, 0x80, 0xa3, 0x56, 0xda, 0xcd, 0xf6, 0xb2, 0xa3, + 0x1b, 0x84, 0x19, 0x5a, 0x60, 0xbb, 0x71, 0x03, 0xf4, 0xc3, 0xb2, 0x95, 0x96, 0x46, 0x47, 0xad, + 0xb4, 0x34, 0x1c, 0x55, 0x54, 0x29, 0x99, 0x82, 0xf2, 0x11, 0x59, 0x51, 0x25, 0x24, 0x55, 0x54, + 0x39, 0xf5, 0xc2, 0x07, 0xd0, 0xc9, 0x60, 0x3f, 0xcf, 0xd7, 0x5f, 0xd6, 0x69, 0xca, 0x47, 0x81, + 0xcf, 0xf9, 0xd8, 0x65, 0x80, 0x44, 0x35, 0xdd, 0xa3, 0xa5, 0x94, 0xa7, 0x2b, 0x6e, 0x2c, 0x4f, + 0x10, 0x37, 0x2f, 0xbe, 0x45, 0x5e, 0x71, 0x53, 0xc8, 0xe8, 0x8a, 0x9b, 0x82, 0x4a, 0x64, 0xce, + 0x85, 0xaa, 0x6f, 0xc2, 0x3c, 0x90, 0x69, 0x1a, 0x87, 0x44, 0xe6, 0xdc, 0x52, 0x5b, 0xdc, 0x84, + 0x79, 0x60, 0xad, 0xa5, 0x71, 0xc0, 0x17, 0x51, 0xa1, 0x56, 0x9b, 0xd5, 0x3a, 0x96, 0xd2, 0x88, + 0x78, 0xcb, 0x02, 0x74, 0xba, 0x47, 0xe3, 0x78, 0x6a, 0x06, 0x4d, 0x36, 0x75, 0xd7, 0x33, 0x1b, + 0x2e, 0x8c, 0x18, 0x7f, 0x84, 0x18, 0xb2, 0x19, 0x94, 0x44, 0x43, 0xcd, 0xa0, 0x24, 0x38, 0xb5, + 0x17, 0x27, 0x74, 0xd7, 0xd5, 0x2d, 0xc3, 0xd1, 0xc7, 0x61, 0x99, 0x20, 0x91, 0x37, 0x45, 0x12, + 0x96, 0xda, 0x8b, 0x32, 0x04, 0x0e, 0xdf, 0x7d, 0x88, 0x6f, 0xe6, 0x2c, 0x45, 0x0e, 0xdf, 0x23, + 0x78, 0x38, 0x7c, 0x8f, 0xc0, 0xc0, 0xee, 0xf4, 0x61, 0x1a, 0x59, 0x36, 0xa9, 0x88, 0x94, 0xe5, + 0x88, 0xdd, 0x19, 0x25, 0x00, 0xbb, 0x33, 0x0a, 0x94, 0x9a, 0xe4, 0x2f, 0xb7, 0x2b, 0x29, 0x4d, + 0x0a, 0x57, 0xd9, 0x58, 0x19, 0xba, 0x7e, 0x87, 0x83, 0xa3, 0xbc, 0x66, 0xe9, 0x2d, 0xbb, 0x3c, + 0xee, 0x4b, 0xdd, 0x94, 0xd7, 0xef, 0x54, 0x42, 0xba, 0x7e, 0xa7, 0x22, 0xe9, 0xec, 0xea, 0x6f, + 0xb4, 0x56, 0x74, 0x87, 0x18, 0x65, 0xd3, 0x81, 0x93, 0xc5, 0x35, 0xb6, 0x35, 0x7c, 0x43, 0x9e, + 0x5d, 0xbb, 0x90, 0xd2, 0xd9, 0xb5, 0x0b, 0x9a, 0x1a, 0x79, 0xc9, 0x68, 0x8d, 0xe8, 0x86, 0x72, + 0x47, 0x36, 0xf2, 0xd2, 0x29, 0xa9, 0x91, 0x97, 0x8e, 0x4d, 0xff, 0x9c, 0xdb, 0x8e, 0xe9, 0x11, + 0xa5, 0xb9, 0x95, 0xcf, 0x01, 0xd2, 0xf4, 0xcf, 0x01, 0x34, 0xdd, 0x10, 0x46, 0x3b, 0xa4, 0x25, + 0x6f, 0x08, 0xe3, 0xdd, 0x10, 0x2d, 0x41, 0x2d, 0x16, 0xfe, 0xb4, 0x4c, 0xb1, 0x64, 0x8b, 0x85, + 0x83, 0xa9, 0xc5, 0x12, 0x3e, 0x3e, 0x93, 0x9e, 0x32, 0x29, 0xb6, 0xbc, 0x86, 0x8a, 0x38, 0xba, + 0x86, 0x4a, 0xcf, 0x9e, 0x9e, 0x95, 0xde, 0x19, 0x28, 0x6d, 0xd9, 0xea, 0x10, 0x50, 0xd4, 0xea, + 0x10, 0x5f, 0x24, 0x4c, 0xa0, 0x63, 0x70, 0x0b, 0xae, 0x75, 0x82, 0x7b, 0x9c, 0x8f, 0xc9, 0x9f, + 0x19, 0x41, 0xd3, 0xcf, 0x8c, 0x80, 0x24, 0x26, 0x7c, 0xda, 0x72, 0x52, 0x98, 0x84, 0xe7, 0x83, + 0x11, 0x10, 0x9e, 0x41, 0xb8, 0x56, 0x9a, 0x9d, 0xa9, 0x18, 0x55, 0xf1, 0x8a, 0xcc, 0x95, 0x4f, + 0x60, 0xe3, 0x14, 0xd3, 0x3d, 0x5a, 0x42, 0x39, 0xfc, 0x06, 0x3a, 0xcb, 0xa1, 0xfc, 0xdd, 0x30, + 0x24, 0xf1, 0x36, 0x82, 0x05, 0xc1, 0x93, 0xfd, 0xd8, 0xba, 0xd1, 0x4e, 0xf7, 0x68, 0x5d, 0x79, + 0xa5, 0xd7, 0xc5, 0xd7, 0x87, 0xce, 0x56, 0xea, 0x0a, 0x16, 0x89, 0xae, 0xbc, 0xd2, 0xeb, 0xe2, + 0x72, 0xbf, 0xbb, 0x95, 0xba, 0x82, 0x4e, 0xe8, 0xca, 0x0b, 0xbb, 0xa8, 0xd8, 0x0d, 0x5f, 0x6a, + 0x36, 0x95, 0x55, 0xa8, 0xee, 0x3d, 0x5b, 0xa9, 0xae, 0x04, 0x06, 0xe7, 0x66, 0x1c, 0xe9, 0x2c, + 0x3d, 0xdf, 0x26, 0x56, 0x4d, 0x5a, 0x80, 0xee, 0xc9, 0xb3, 0x74, 0x8c, 0x80, 0xce, 0xd2, 0x31, + 0x20, 0x1d, 0x50, 0xe2, 0x73, 0x15, 0x65, 0x4d, 0x1e, 0x50, 0x22, 0x8e, 0x0e, 0x28, 0xe9, 0x69, + 0xcb, 0x3c, 0x3a, 0x3e, 0x7f, 0xc7, 0xd3, 0x7d, 0x0b, 0xd2, 0xe5, 0x5d, 0xf9, 0x66, 0xe4, 0x92, + 0x29, 0x4e, 0x02, 0x97, 0x4c, 0x71, 0x30, 0x1d, 0x23, 0x14, 0x5c, 0x5b, 0xb3, 0x1a, 0x53, 0xba, + 0xd9, 0xec, 0x38, 0x44, 0xf9, 0x3f, 0xe4, 0x31, 0x12, 0x41, 0xd3, 0x31, 0x12, 0x01, 0xd1, 0x05, + 0x9a, 0x82, 0x4a, 0xae, 0x6b, 0x2e, 0x5b, 0x7c, 0x5f, 0xd9, 0x69, 0x7a, 0xca, 0xff, 0x29, 0x2f, + 0xd0, 0x49, 0x34, 0x74, 0x81, 0x4e, 0x82, 0xc3, 0xa9, 0x53, 0x42, 0x82, 0x7b, 0xe5, 0xff, 0x8a, + 0x9c, 0x3a, 0x25, 0xd0, 0xc0, 0xa9, 0x53, 0x52, 0x72, 0xfc, 0x29, 0x34, 0xca, 0x6c, 0xb2, 0x19, + 0x33, 0xb8, 0xab, 0xfe, 0xbf, 0xe5, 0xf5, 0x31, 0x8a, 0xa7, 0xeb, 0x63, 0x14, 0x26, 0xf3, 0xe1, + 0x5d, 0xf0, 0xff, 0xa4, 0xf1, 0x09, 0xe4, 0x1f, 0x2b, 0x83, 0xaf, 0x8b, 0x7c, 0xf8, 0x48, 0xf9, + 0xd6, 0x4c, 0x1a, 0xa3, 0x60, 0x78, 0xc4, 0x0a, 0xc9, 0x8c, 0x34, 0x72, 0xd7, 0x24, 0xab, 0xca, + 0xc7, 0x53, 0x19, 0x31, 0x02, 0x99, 0x11, 0x83, 0xe1, 0xd7, 0xd1, 0xc9, 0x10, 0x36, 0x4b, 0x5a, + 0x8b, 0xc1, 0xcc, 0xf4, 0x6d, 0x19, 0xd9, 0x0c, 0x4e, 0x26, 0xa3, 0x66, 0x70, 0x32, 0x26, 0x89, + 0x35, 0x17, 0xdd, 0xff, 0xbb, 0x09, 0xeb, 0x40, 0x82, 0x29, 0x0c, 0x92, 0x58, 0x73, 0x69, 0x7e, + 0xfb, 0x26, 0xac, 0x03, 0x99, 0xa6, 0x30, 0xc0, 0x9f, 0xcc, 0xa0, 0x0b, 0xc9, 0xa8, 0x52, 0xb3, + 0x39, 0x65, 0x3b, 0x21, 0x4e, 0xf9, 0x8e, 0x8c, 0x7c, 0xd0, 0xb0, 0xb5, 0x62, 0xd3, 0x3d, 0xda, + 0x16, 0x2b, 0xc0, 0xef, 0x47, 0xc3, 0xa5, 0x8e, 0x61, 0x7a, 0x70, 0xf1, 0x46, 0x0d, 0xe7, 0xef, + 0xcc, 0x44, 0xb6, 0x38, 0x22, 0x16, 0xb6, 0x38, 0x22, 0x00, 0xbf, 0x8a, 0xc6, 0x6a, 0xa4, 0xd1, + 0x71, 0x4c, 0x6f, 0x4d, 0x23, 0x6d, 0xdb, 0xf1, 0x28, 0x8f, 0xef, 0xca, 0xc8, 0x93, 0x58, 0x8c, + 0x82, 0x4e, 0x62, 0x31, 0x20, 0xbe, 0x95, 0x92, 0xe2, 0x5e, 0xf9, 0x44, 0xa6, 0xeb, 0xb5, 0x7c, + 0xd0, 0x97, 0x29, 0x19, 0xf2, 0xab, 0x89, 0x29, 0xc3, 0x95, 0x4f, 0x66, 0xba, 0x5c, 0xa3, 0x0b, + 0x33, 0x5c, 0x42, 0xb6, 0xf1, 0x6a, 0x62, 0x52, 0x68, 0xe5, 0xbb, 0x33, 0x5d, 0xae, 0xbd, 0x43, + 0x8e, 0x49, 0xf9, 0xa4, 0x9f, 0x66, 0x9e, 0x22, 0x9c, 0xd1, 0xf7, 0x64, 0xe2, 0xae, 0x22, 0x41, + 0x79, 0x81, 0x90, 0x16, 0xbb, 0xe9, 0x06, 0x4a, 0xff, 0xa9, 0x4c, 0xdc, 0x37, 0x2f, 0x2c, 0x16, + 0xfe, 0xc2, 0x04, 0x9d, 0x99, 0xbc, 0xe7, 0x11, 0xc7, 0xd2, 0x9b, 0xd0, 0x9d, 0x35, 0xcf, 0x76, + 0xf4, 0x65, 0x32, 0x69, 0xe9, 0x8b, 0x4d, 0xa2, 0x7c, 0x3a, 0x23, 0x5b, 0xb0, 0xe9, 0xa4, 0xd4, + 0x82, 0x4d, 0xc7, 0xe2, 0x15, 0x74, 0x7f, 0x12, 0xb6, 0x6c, 0xba, 0x50, 0xcf, 0x67, 0x32, 0xb2, + 0x09, 0xdb, 0x85, 0x96, 0x9a, 0xb0, 0x5d, 0xd0, 0xf8, 0x2a, 0x1a, 0x18, 0xb7, 0xfd, 0xe9, 0xf7, + 0x7b, 0x23, 0xce, 0x90, 0x01, 0x66, 0xba, 0x47, 0x0b, 0xc9, 0x78, 0x19, 0x3e, 0xa8, 0x3f, 0x1b, + 0x2f, 0x13, 0x5e, 0x3e, 0x05, 0x3f, 0x78, 0x19, 0x2e, 0xee, 0xff, 0x2f, 0x5e, 0x26, 0xbc, 0xe3, + 0x0a, 0x7e, 0xd0, 0x99, 0x84, 0xd5, 0x38, 0x3b, 0x55, 0xa2, 0x76, 0xdb, 0xc4, 0x8a, 0xde, 0x6c, + 0x12, 0x6b, 0x99, 0x28, 0x9f, 0x8b, 0xcc, 0x24, 0xc9, 0x64, 0x74, 0x26, 0x49, 0xc6, 0xe0, 0x0f, + 0xa3, 0x53, 0xb7, 0xf4, 0xa6, 0x69, 0x84, 0x38, 0x3f, 0xcf, 0xb0, 0xf2, 0x7d, 0x19, 0x79, 0x37, + 0x9d, 0x42, 0x47, 0x77, 0xd3, 0x29, 0x28, 0x3c, 0x8b, 0x30, 0x2c, 0xa3, 0xc1, 0x6c, 0x41, 0xd7, + 0x67, 0xe5, 0xff, 0xcf, 0xc8, 0x76, 0x6a, 0x9c, 0x84, 0xda, 0xa9, 0x71, 0x28, 0xae, 0xa7, 0x27, + 0x83, 0x50, 0xbe, 0x3f, 0x23, 0x9f, 0xd6, 0xa4, 0x11, 0x4e, 0xf7, 0x68, 0xe9, 0x19, 0x25, 0xae, + 0xa3, 0xd1, 0x5a, 0xb5, 0x32, 0x35, 0x35, 0x59, 0xbb, 0x55, 0x29, 0xc3, 0x43, 0x07, 0x43, 0xf9, + 0x81, 0xc8, 0x8a, 0x15, 0x25, 0xa0, 0x2b, 0x56, 0x14, 0x86, 0x6b, 0xe8, 0x04, 0x15, 0x44, 0xd5, + 0x21, 0x4b, 0xc4, 0x21, 0x56, 0xc3, 0x1f, 0x96, 0x3f, 0x94, 0x91, 0x0d, 0x85, 0x24, 0x22, 0x6a, + 0x28, 0x24, 0xc1, 0xf1, 0x1d, 0x74, 0x36, 0x7a, 0x98, 0x23, 0xbe, 0x1c, 0x55, 0x7e, 0x38, 0x13, + 0xb1, 0x67, 0xbb, 0x10, 0x83, 0x3d, 0xdb, 0x05, 0x8f, 0x2d, 0x74, 0x8e, 0x9f, 0x8c, 0x70, 0x9f, + 0xc9, 0x68, 0x6d, 0x3f, 0xc2, 0x6a, 0x7b, 0x24, 0xf4, 0xe9, 0xeb, 0x42, 0x3d, 0xdd, 0xa3, 0x75, + 0x67, 0x47, 0x55, 0x25, 0x9e, 0xb5, 0x40, 0xf9, 0xd1, 0x4c, 0xb2, 0x53, 0x89, 0xe4, 0x69, 0x9c, + 0x94, 0xee, 0xe0, 0xf5, 0xb4, 0x98, 0xfb, 0xca, 0x8f, 0x45, 0x86, 0x4c, 0x32, 0x19, 0x1d, 0x32, + 0x29, 0x41, 0xfb, 0x5f, 0x45, 0x63, 0x4c, 0x2f, 0xab, 0x3a, 0x8c, 0x24, 0x6b, 0x99, 0x18, 0xca, + 0xdf, 0x88, 0x2c, 0x58, 0x31, 0x0a, 0xf0, 0xce, 0x89, 0x02, 0xe9, 0xec, 0x5b, 0x6b, 0xeb, 0x96, + 0x05, 0x27, 0xa5, 0xca, 0xdf, 0x8c, 0xcc, 0xbe, 0x21, 0x0a, 0x7c, 0x6f, 0x83, 0x5f, 0x90, 0x3b, + 0x2d, 0xe9, 0x61, 0xb5, 0xf2, 0xf9, 0xc8, 0x3a, 0x97, 0x48, 0x45, 0xd7, 0xb9, 0xe4, 0x77, 0xd9, + 0xb7, 0x52, 0x1e, 0x25, 0x2b, 0x3f, 0xde, 0x9d, 0x6f, 0xb8, 0x7e, 0x26, 0xbf, 0x69, 0xbe, 0x95, + 0xf2, 0xa0, 0x57, 0xf9, 0x89, 0xee, 0x7c, 0x43, 0x77, 0xb9, 0xe4, 0xf7, 0xc0, 0xf5, 0xf4, 0xc7, + 0xb0, 0xca, 0x4f, 0x46, 0x27, 0x84, 0x14, 0x42, 0x98, 0x10, 0xd2, 0x5e, 0xd4, 0x2e, 0xa2, 0xd3, + 0xac, 0xd3, 0xae, 0x3b, 0x7a, 0x7b, 0xa5, 0x46, 0x3c, 0xcf, 0xb4, 0x96, 0xfd, 0xfd, 0xcd, 0xdf, + 0xce, 0x44, 0x0e, 0x9d, 0xd2, 0x28, 0xe1, 0xd0, 0x29, 0x0d, 0x49, 0xf5, 0x29, 0xf6, 0xec, 0x55, + 0xf9, 0xa9, 0x88, 0x3e, 0xc5, 0x28, 0xa8, 0x3e, 0xc5, 0x5f, 0xcb, 0xbe, 0x9a, 0xf0, 0xba, 0x53, + 0xf9, 0x3b, 0xe9, 0xbc, 0x82, 0xf6, 0x25, 0x3c, 0x0a, 0x7d, 0x35, 0xe1, 0x11, 0xa3, 0xf2, 0x77, + 0xd3, 0x79, 0x85, 0x9e, 0x3d, 0xf1, 0xb7, 0x8f, 0xaf, 0xa3, 0x93, 0x6c, 0x8e, 0x9c, 0x22, 0x06, + 0x91, 0x3e, 0xf4, 0xa7, 0x23, 0xc3, 0x31, 0x99, 0x0c, 0x0e, 0xb2, 0x13, 0x31, 0x49, 0xac, 0x79, + 0x5b, 0x7f, 0x66, 0x13, 0xd6, 0xa1, 0x99, 0x9d, 0x8c, 0xc1, 0x2f, 0xc8, 0x4f, 0xca, 0x94, 0x9f, + 0xcd, 0x44, 0x9c, 0x24, 0x04, 0x24, 0x38, 0x49, 0x88, 0xef, 0xcf, 0x5e, 0x90, 0x9f, 0x4f, 0x29, + 0x7f, 0x2f, 0xb1, 0x70, 0xd0, 0x01, 0xf2, 0x5b, 0xab, 0x17, 0xe4, 0xa7, 0x42, 0xca, 0xcf, 0x25, + 0x16, 0x0e, 0x3e, 0x40, 0x7e, 0x57, 0x44, 0x37, 0x1e, 0x1d, 0xcf, 0x66, 0xac, 0xa4, 0xe9, 0xe1, + 0xe7, 0xa3, 0x1b, 0x8f, 0x44, 0x32, 0xd8, 0x78, 0x24, 0x62, 0x92, 0x58, 0xf3, 0xcf, 0xfb, 0x85, + 0x4d, 0x58, 0x0b, 0xdb, 0xa5, 0x44, 0x4c, 0x12, 0x6b, 0xfe, 0xf1, 0x5f, 0xd8, 0x84, 0xb5, 0xb0, + 0x5d, 0x4a, 0xc4, 0x50, 0x23, 0x27, 0xc4, 0xdc, 0x22, 0x8e, 0x1b, 0xaa, 0xdf, 0x2f, 0x46, 0x8c, + 0x9c, 0x14, 0x3a, 0x6a, 0xe4, 0xa4, 0xa0, 0x12, 0xb9, 0x73, 0xa1, 0xfc, 0xd2, 0x66, 0xdc, 0xc3, + 0xdb, 0x8e, 0x14, 0x54, 0x22, 0x77, 0x2e, 0x97, 0x5f, 0xde, 0x8c, 0x7b, 0x78, 0xdd, 0x91, 0x82, + 0xa2, 0x06, 0xcf, 0x84, 0x63, 0xaf, 0x5a, 0xaf, 0x92, 0x55, 0xd2, 0xe4, 0x22, 0xf9, 0x62, 0xc4, + 0xe0, 0x89, 0x12, 0xc0, 0xe1, 0x7c, 0x04, 0x26, 0x33, 0xe2, 0x5f, 0xff, 0xab, 0xa9, 0x8c, 0xc2, + 0xd3, 0x87, 0x28, 0x4c, 0x66, 0xc4, 0x3f, 0xf4, 0xd7, 0x52, 0x19, 0x85, 0xa7, 0x0f, 0x51, 0xd8, + 0x78, 0x1f, 0xea, 0x85, 0xe3, 0x29, 0xf5, 0xf3, 0x19, 0x34, 0x54, 0xf3, 0x1c, 0xa2, 0xb7, 0x78, + 0x10, 0xaa, 0x33, 0xa8, 0x9f, 0xf9, 0x79, 0xfa, 0x8f, 0x52, 0xb5, 0xe0, 0x37, 0xbe, 0x80, 0x46, + 0x66, 0x74, 0xd7, 0x83, 0x92, 0x15, 0xcb, 0x20, 0xf7, 0xe0, 0x8d, 0x53, 0x4e, 0x8b, 0x40, 0xf1, + 0x0c, 0xa3, 0x63, 0xe5, 0x20, 0xfa, 0x5f, 0x6e, 0xd3, 0xd8, 0x4b, 0xfd, 0x6f, 0xad, 0x17, 0x7b, + 0x20, 0xd4, 0x52, 0xa4, 0xac, 0xfa, 0xd5, 0x0c, 0x8a, 0x79, 0xa0, 0xee, 0xfc, 0xb1, 0xf8, 0x3c, + 0x3a, 0x16, 0x89, 0x38, 0xc9, 0x1f, 0x6a, 0x6d, 0x31, 0x20, 0x65, 0xb4, 0x34, 0x7e, 0x4f, 0xf0, + 0x40, 0xe8, 0xa6, 0x36, 0xc3, 0xe3, 0x6a, 0xf5, 0x6d, 0xac, 0x17, 0x73, 0x1d, 0xa7, 0xa9, 0x09, + 0x28, 0x1e, 0xf7, 0xe5, 0xef, 0x8f, 0x86, 0xe1, 0xf4, 0xf0, 0x05, 0xfe, 0x72, 0x3d, 0x13, 0x46, + 0xe3, 0x8a, 0xe4, 0xe5, 0x65, 0x2f, 0xd5, 0xdf, 0x8f, 0x86, 0x2a, 0xad, 0x36, 0x71, 0x5c, 0xdb, + 0xd2, 0x3d, 0xdb, 0xe1, 0x0f, 0x7f, 0x21, 0x52, 0x93, 0x29, 0xc0, 0xc5, 0xe8, 0x41, 0x22, 0x3d, + 0xbe, 0xe4, 0xa7, 0x61, 0xca, 0x41, 0x20, 0x43, 0x78, 0xbd, 0x17, 0xcd, 0xf5, 0xca, 0x28, 0x28, + 0xe9, 0x4d, 0x57, 0x87, 0xa7, 0x64, 0x01, 0x69, 0x87, 0x02, 0x44, 0x52, 0xa0, 0xc0, 0x8f, 0xa1, + 0x02, 0x1c, 0xbd, 0xbb, 0x90, 0x5e, 0x8d, 0xc7, 0x08, 0x6b, 0x02, 0x44, 0x8c, 0xc8, 0xc4, 0x68, + 0xf0, 0x0d, 0x34, 0x1a, 0xde, 0x2b, 0x5e, 0x77, 0xec, 0x4e, 0xdb, 0x4f, 0xa8, 0x00, 0x39, 0x72, + 0xef, 0x04, 0xb8, 0xfa, 0x32, 0x20, 0x05, 0x16, 0xb1, 0x82, 0x78, 0x1a, 0x1d, 0x0b, 0x61, 0x54, + 0x44, 0x7e, 0x22, 0x17, 0xc8, 0x11, 0x2d, 0xf0, 0xa2, 0xe2, 0x14, 0x59, 0x45, 0x8b, 0xe1, 0x0a, + 0xea, 0xf3, 0x03, 0x84, 0xf5, 0x6f, 0xaa, 0xa4, 0xc7, 0x79, 0x80, 0xb0, 0x3e, 0x31, 0x34, 0x98, + 0x5f, 0x1e, 0x4f, 0xa1, 0x11, 0xcd, 0xee, 0x78, 0x64, 0xc1, 0xe6, 0xd6, 0x3c, 0x8f, 0xf4, 0x0f, + 0x6d, 0x72, 0x28, 0xa6, 0xee, 0xd9, 0x7e, 0x8a, 0x61, 0x31, 0xd5, 0xad, 0x5c, 0x0a, 0xcf, 0xa1, + 0xb1, 0xd8, 0x0d, 0xac, 0x98, 0xf8, 0x57, 0xf8, 0xbc, 0x38, 0xb3, 0x78, 0x51, 0xfc, 0x9d, 0x19, + 0x54, 0x58, 0x70, 0x74, 0xd3, 0x73, 0xf9, 0x2b, 0xb4, 0xfb, 0x2e, 0xaf, 0x3a, 0x7a, 0x9b, 0xea, + 0xc7, 0x65, 0x88, 0x54, 0x79, 0x4b, 0x6f, 0x76, 0x88, 0x3b, 0x7e, 0x9b, 0x7e, 0xdd, 0xbf, 0x5e, + 0x2f, 0xbe, 0xb0, 0x0c, 0xe7, 0x3c, 0x97, 0x1b, 0x76, 0xeb, 0xca, 0xb2, 0xa3, 0xdf, 0x35, 0x3d, + 0x58, 0xf7, 0xf5, 0xe6, 0x15, 0x8f, 0x34, 0xe1, 0x38, 0xe9, 0x8a, 0xde, 0x36, 0xaf, 0x40, 0x44, + 0xe4, 0x2b, 0x01, 0x27, 0x56, 0x03, 0x55, 0x01, 0x0f, 0xfe, 0x12, 0x55, 0x80, 0xe1, 0xf0, 0x1c, + 0x42, 0xfc, 0x53, 0x4b, 0xed, 0x36, 0x7f, 0xd2, 0x26, 0x1c, 0xc2, 0xf8, 0x18, 0xa6, 0xd8, 0x81, + 0xc0, 0xf4, 0x76, 0x5b, 0x4c, 0x2d, 0x1e, 0xd2, 0x51, 0x2d, 0x58, 0xe0, 0x2d, 0xf2, 0xc5, 0x34, + 0x1c, 0x4a, 0xdc, 0x6f, 0x6c, 0x82, 0x90, 0xa2, 0xc5, 0xf0, 0x22, 0x3a, 0xc6, 0xf9, 0x06, 0xa1, + 0xf7, 0x47, 0xe4, 0x59, 0x21, 0x82, 0x66, 0x4a, 0x1b, 0xb4, 0xd1, 0xe0, 0x60, 0xb1, 0x8e, 0x48, + 0x09, 0x3c, 0x1e, 0x66, 0x9d, 0x9c, 0xd3, 0x5b, 0xc4, 0x55, 0x8e, 0x81, 0xc6, 0x9e, 0xdd, 0x58, + 0x2f, 0x2a, 0x7e, 0x79, 0x88, 0x95, 0x97, 0x98, 0x81, 0x19, 0x8a, 0x88, 0x3c, 0x98, 0xd6, 0x8f, + 0x26, 0xf0, 0x88, 0xea, 0xbc, 0x5c, 0x04, 0x4f, 0xa0, 0xe1, 0xc0, 0xa3, 0xfe, 0xe6, 0xcd, 0x4a, + 0x19, 0xde, 0xcc, 0x0d, 0x8c, 0x9f, 0xdb, 0x58, 0x2f, 0x9e, 0x8e, 0x44, 0xf5, 0x17, 0x99, 0x48, + 0x65, 0x84, 0x30, 0x04, 0xec, 0x11, 0x5d, 0x24, 0x0c, 0x41, 0x3b, 0x21, 0x0c, 0x41, 0x15, 0xbf, + 0x84, 0x06, 0x4b, 0xb7, 0x6b, 0x3c, 0xbc, 0x82, 0xab, 0x1c, 0x0f, 0xd3, 0xa9, 0x40, 0x12, 0x6e, + 0x1e, 0x8a, 0x41, 0x6c, 0xba, 0x48, 0x8f, 0x27, 0xd1, 0x88, 0xe4, 0x94, 0xe3, 0x2a, 0x27, 0x80, + 0x03, 0xb4, 0x5c, 0x07, 0x4c, 0xdd, 0xe1, 0x28, 0x29, 0x2d, 0xbc, 0x54, 0x88, 0x6a, 0x4d, 0xd9, + 0x74, 0x21, 0x35, 0x85, 0x46, 0x20, 0x92, 0x03, 0xbc, 0xc0, 0xeb, 0x67, 0x5a, 0x63, 0x70, 0x54, + 0xdd, 0x61, 0x38, 0x29, 0x0f, 0xbc, 0x5c, 0x0c, 0xbf, 0x81, 0x30, 0x24, 0xb3, 0x20, 0x86, 0x7f, + 0x47, 0x53, 0x29, 0xbb, 0xca, 0x49, 0x88, 0xd8, 0x8b, 0xa3, 0x2f, 0xc7, 0x2b, 0xe5, 0xf1, 0x0b, + 0x7c, 0xfa, 0x38, 0xaf, 0xb3, 0x52, 0x75, 0xff, 0xd5, 0x78, 0xdd, 0x34, 0xc4, 0x16, 0x27, 0x70, + 0xc5, 0xab, 0xe8, 0x54, 0xd5, 0x21, 0x77, 0x4d, 0xbb, 0xe3, 0xfa, 0xcb, 0x87, 0x3f, 0x6f, 0x9d, + 0xda, 0x74, 0xde, 0x7a, 0x90, 0x57, 0x7c, 0x5f, 0xdb, 0x21, 0x77, 0xeb, 0x7e, 0x9c, 0x56, 0x29, + 0xc0, 0x61, 0x1a, 0x77, 0x2a, 0x2e, 0x88, 0x62, 0xc1, 0xe1, 0x26, 0x71, 0x15, 0x25, 0x9c, 0x6a, + 0x59, 0x50, 0x0e, 0x33, 0xc0, 0x89, 0xe2, 0x8a, 0x14, 0xc3, 0x1a, 0xc2, 0xd7, 0x27, 0xfc, 0xfb, + 0xba, 0x52, 0x83, 0x65, 0x75, 0x54, 0x4e, 0x03, 0x33, 0x95, 0x8a, 0x65, 0xb9, 0x11, 0xc4, 0x6c, + 0xae, 0xeb, 0x1c, 0x2f, 0x8a, 0x25, 0x5e, 0x1a, 0xcf, 0xa0, 0xd1, 0xaa, 0x03, 0x47, 0x0f, 0x37, + 0xc8, 0x5a, 0xd5, 0x6e, 0x9a, 0x8d, 0x35, 0x78, 0x08, 0xc8, 0xa7, 0xca, 0x36, 0xc3, 0xd5, 0xef, + 0x90, 0xb5, 0x7a, 0x1b, 0xb0, 0xe2, 0xb2, 0x12, 0x2d, 0x29, 0xc6, 0x50, 0xbd, 0x7f, 0x6b, 0x31, + 0x54, 0x09, 0x1a, 0xe5, 0xb7, 0x7d, 0xf7, 0x3c, 0x62, 0xd1, 0xa5, 0xde, 0xe5, 0x8f, 0xfe, 0x94, + 0xc8, 0xed, 0x60, 0x80, 0xe7, 0x39, 0xe1, 0xd9, 0x28, 0x23, 0x01, 0x58, 0x6c, 0x58, 0xb4, 0x88, + 0xfa, 0x99, 0x9c, 0x38, 0x75, 0xe2, 0xb3, 0x28, 0x2f, 0xa4, 0xf0, 0x80, 0xd0, 0x8b, 0x10, 0xee, + 0x38, 0xcf, 0xe3, 0xba, 0x0e, 0x70, 0xb3, 0x23, 0x88, 0x11, 0x02, 0xf9, 0xcd, 0xfc, 0xb8, 0xca, + 0xa6, 0xa1, 0x85, 0x04, 0x90, 0x5b, 0xaa, 0xb3, 0xd8, 0x34, 0x1b, 0x10, 0x04, 0x3b, 0x27, 0x04, + 0x05, 0x00, 0x28, 0x8b, 0x81, 0x2d, 0x90, 0xe0, 0xab, 0x68, 0xd0, 0x3f, 0xad, 0x0a, 0x43, 0x8f, + 0x42, 0x6c, 0x64, 0x3f, 0x7b, 0x3e, 0x0b, 0xbd, 0x2c, 0x10, 0xe1, 0xe7, 0x11, 0x0a, 0x47, 0x32, + 0x37, 0x92, 0x60, 0x96, 0x17, 0x07, 0xbe, 0x38, 0xcb, 0x87, 0xd4, 0x74, 0xce, 0x13, 0x35, 0xc9, + 0xcf, 0xa6, 0x07, 0x73, 0x9e, 0xa4, 0x7e, 0x62, 0xdf, 0xca, 0x45, 0xf0, 0x3c, 0x1a, 0x8b, 0x29, + 0x0f, 0x0f, 0x54, 0x0a, 0x79, 0x7b, 0x13, 0x34, 0x4f, 0x5c, 0x53, 0x63, 0x65, 0xd5, 0x6f, 0xcb, + 0xc6, 0x56, 0x0c, 0x2a, 0x18, 0x4e, 0x25, 0x74, 0x0e, 0x08, 0xc6, 0x67, 0xcd, 0x04, 0x23, 0x10, + 0xe1, 0x8b, 0xa8, 0xbf, 0x4a, 0xc7, 0x6b, 0xc3, 0x6e, 0xf2, 0xae, 0x82, 0x88, 0x3c, 0x6d, 0x0e, + 0xd3, 0x02, 0x2c, 0xbe, 0x2a, 0xe4, 0x77, 0x14, 0x02, 0xfc, 0xfa, 0xf9, 0x1d, 0xc5, 0x09, 0x37, + 0xc8, 0xf4, 0x78, 0x35, 0x92, 0x4a, 0x86, 0x97, 0x49, 0x58, 0xad, 0xc2, 0x44, 0x59, 0x81, 0xad, + 0xd8, 0xbb, 0x99, 0xad, 0xa8, 0xfe, 0x66, 0x26, 0xae, 0xfd, 0xf8, 0x5a, 0x3c, 0xca, 0x27, 0x4b, + 0xf2, 0xef, 0x03, 0xc5, 0x5a, 0x83, 0x78, 0x9f, 0x52, 0xbc, 0xce, 0xec, 0x8e, 0xe3, 0x75, 0xe6, + 0xb6, 0x19, 0xaf, 0x53, 0xfd, 0x1f, 0xf9, 0xae, 0x3e, 0xa3, 0xfb, 0x12, 0x97, 0xea, 0x39, 0xba, + 0xdf, 0xa1, 0xb5, 0x97, 0xdc, 0x98, 0xd5, 0xce, 0x5c, 0xe2, 0xea, 0x3a, 0x1b, 0x35, 0xae, 0x26, + 0x53, 0xe2, 0x97, 0xd1, 0x90, 0xff, 0x01, 0x10, 0x07, 0x56, 0x88, 0x5f, 0x1a, 0xac, 0x35, 0x91, + 0x88, 0xa9, 0x52, 0x01, 0xfc, 0x34, 0x1a, 0x00, 0x4b, 0xa3, 0xad, 0x37, 0xfc, 0x20, 0xc1, 0x2c, + 0xaa, 0xb0, 0x0f, 0x14, 0x63, 0x2f, 0x05, 0x94, 0xf8, 0x23, 0xa8, 0xc0, 0xe3, 0xd5, 0xb3, 0xd4, + 0xc7, 0x57, 0xb6, 0xe0, 0x64, 0x7b, 0x59, 0x8c, 0x55, 0xcf, 0xf6, 0x0e, 0x00, 0x90, 0xf6, 0x0e, + 0x2c, 0x4c, 0xfd, 0x02, 0x3a, 0x5e, 0x75, 0x88, 0x01, 0xee, 0xdc, 0x93, 0xf7, 0xda, 0x0e, 0xcf, + 0x24, 0xc0, 0x06, 0x30, 0x2c, 0x1d, 0x6d, 0x1f, 0x4d, 0x17, 0x35, 0x8e, 0x17, 0x18, 0x25, 0x15, + 0xa7, 0xf6, 0x04, 0x6b, 0xc9, 0x0d, 0xb2, 0xb6, 0x6a, 0x3b, 0x06, 0x0b, 0xb6, 0xcf, 0xed, 0x09, + 0x2e, 0xe8, 0x3b, 0x1c, 0x25, 0xda, 0x13, 0x72, 0xa1, 0x33, 0xcf, 0xa1, 0xc1, 0x9d, 0xc6, 0x7b, + 0xff, 0xa5, 0x6c, 0xca, 0xeb, 0x8b, 0xc3, 0x9b, 0xa7, 0x2f, 0xc8, 0x99, 0xda, 0x9b, 0x92, 0x33, + 0xf5, 0x1b, 0xd9, 0x94, 0xa7, 0x25, 0x87, 0x3a, 0xb7, 0x61, 0x20, 0x0c, 0x39, 0xb7, 0x61, 0x98, + 0x56, 0xd2, 0x34, 0x34, 0x91, 0x28, 0x92, 0x05, 0xb5, 0xb0, 0x69, 0x16, 0xd4, 0x9f, 0xce, 0x75, + 0x7b, 0x7a, 0x73, 0x24, 0xfb, 0xed, 0xc8, 0xfe, 0x2a, 0x1a, 0x0c, 0x24, 0x5b, 0x29, 0x83, 0x3d, + 0x33, 0x1c, 0x64, 0x97, 0x60, 0x60, 0x28, 0x23, 0x10, 0xe1, 0x4b, 0xac, 0xad, 0x35, 0xf3, 0x4d, + 0x16, 0x61, 0x7d, 0x98, 0xc7, 0xce, 0xd6, 0x3d, 0xbd, 0xee, 0x9a, 0x6f, 0x12, 0x2d, 0x40, 0xab, + 0xff, 0x28, 0x9b, 0xf8, 0x7e, 0xe9, 0xa8, 0x8f, 0xb6, 0xd1, 0x47, 0x09, 0x42, 0x64, 0x2f, 0xaf, + 0x8e, 0x84, 0xb8, 0x0d, 0x21, 0xfe, 0x79, 0x36, 0xf1, 0x9d, 0xda, 0x91, 0x10, 0xb7, 0x33, 0x5b, + 0x3c, 0x86, 0x06, 0x34, 0x7b, 0xd5, 0x9d, 0x80, 0x3d, 0x0b, 0x9b, 0x2b, 0x60, 0xa2, 0x76, 0xec, + 0x55, 0xb7, 0x0e, 0xbb, 0x11, 0x2d, 0x24, 0x50, 0xbf, 0x99, 0xed, 0xf2, 0x92, 0xef, 0x48, 0xf0, + 0x6f, 0xe7, 0x12, 0xf9, 0xab, 0x59, 0xe9, 0xa5, 0xe0, 0xa1, 0x4e, 0x12, 0x5e, 0x6b, 0xac, 0x90, + 0x96, 0x1e, 0x4d, 0x12, 0xee, 0x02, 0x94, 0xe7, 0x18, 0x0d, 0x49, 0xd4, 0x2f, 0x65, 0x23, 0x4f, + 0x25, 0x8f, 0x64, 0xb7, 0x65, 0xd9, 0x05, 0x5a, 0xc7, 0x5f, 0x7f, 0x1e, 0x49, 0x6e, 0xab, 0x92, + 0xfb, 0x44, 0x36, 0xf2, 0x50, 0xf6, 0xf0, 0xe6, 0x0b, 0xfe, 0x52, 0x36, 0xfe, 0xe8, 0xf7, 0xf0, + 0x6a, 0xd2, 0x63, 0x68, 0x80, 0xcb, 0x21, 0x58, 0x2a, 0xd8, 0xbc, 0xcf, 0x80, 0x70, 0x80, 0x1a, + 0x10, 0xa8, 0xdf, 0x91, 0x45, 0xf2, 0x03, 0xe6, 0x43, 0xaa, 0x43, 0xbf, 0x9a, 0x95, 0x9f, 0x6e, + 0x1f, 0x5e, 0xfd, 0xb9, 0x8c, 0x50, 0xad, 0xb3, 0xd8, 0xe0, 0x91, 0x3f, 0x7b, 0x85, 0x13, 0xf8, + 0x00, 0xaa, 0x09, 0x14, 0xea, 0xff, 0xcc, 0x26, 0xbe, 0x27, 0x3f, 0xbc, 0x02, 0x7c, 0x0a, 0x4e, + 0xc5, 0x1b, 0x56, 0x38, 0x91, 0xc3, 0x21, 0x24, 0x1d, 0x7f, 0xb1, 0xd4, 0x66, 0x3e, 0x21, 0x7e, + 0x5f, 0x82, 0xb9, 0x06, 0x81, 0xe3, 0x43, 0x73, 0x4d, 0xbc, 0x61, 0x10, 0x0c, 0xb7, 0xdf, 0xc9, + 0x6e, 0xf6, 0xfc, 0xfe, 0x30, 0xaf, 0xaa, 0x7d, 0x55, 0x7d, 0x0d, 0xc2, 0xc4, 0xd1, 0x9e, 0x18, + 0x62, 0x89, 0xb7, 0xda, 0x0c, 0x24, 0xde, 0x88, 0x71, 0x2a, 0xf5, 0x4f, 0x7b, 0x93, 0xdf, 0x7e, + 0x1f, 0x5e, 0x11, 0x9e, 0x45, 0xf9, 0xaa, 0xee, 0xad, 0x70, 0x4d, 0x86, 0xdb, 0xba, 0xb6, 0xee, + 0xad, 0x68, 0x00, 0xc5, 0x97, 0x50, 0xbf, 0xa6, 0xaf, 0xb2, 0x33, 0xcf, 0x42, 0x98, 0x14, 0xcd, + 0xd1, 0x57, 0xeb, 0xec, 0xdc, 0x33, 0x40, 0x63, 0x35, 0x48, 0xca, 0xc7, 0x4e, 0xbe, 0x21, 0xa3, + 0x15, 0x4b, 0xca, 0x17, 0xa4, 0xe2, 0x3b, 0x8b, 0xf2, 0xe3, 0xb6, 0xb1, 0x06, 0xce, 0x2c, 0x43, + 0xac, 0xb2, 0x45, 0xdb, 0x58, 0xd3, 0x00, 0x8a, 0x3f, 0x99, 0x41, 0x7d, 0xd3, 0x44, 0x37, 0xe8, + 0x08, 0x19, 0xe8, 0xe6, 0x0b, 0xf2, 0x81, 0xbd, 0xf1, 0x05, 0x19, 0x5b, 0x61, 0x95, 0x89, 0x8a, + 0xc2, 0xeb, 0xc7, 0xd7, 0x51, 0xff, 0x84, 0xee, 0x91, 0x65, 0xdb, 0x59, 0x03, 0xef, 0x96, 0x91, + 0xd0, 0xd3, 0x59, 0xd2, 0x1f, 0x9f, 0x88, 0xdd, 0x8c, 0x35, 0xf8, 0x2f, 0x2d, 0x28, 0x4c, 0xc5, + 0xc2, 0x93, 0x75, 0x0f, 0x86, 0x62, 0x61, 0x59, 0xb9, 0x83, 0x9c, 0xdc, 0xc1, 0xb1, 0xf2, 0x50, + 0xf2, 0xb1, 0x32, 0x58, 0x8f, 0xe0, 0x01, 0x07, 0xa9, 0xf0, 0x86, 0x61, 0xd1, 0x67, 0xd6, 0x23, + 0x40, 0x21, 0x13, 0x9e, 0x26, 0x90, 0xa8, 0x5f, 0xeb, 0x45, 0x89, 0x2f, 0x45, 0x8f, 0x94, 0xfc, + 0x48, 0xc9, 0x43, 0x25, 0x2f, 0xc7, 0x94, 0xfc, 0x4c, 0xfc, 0xed, 0xf1, 0x3b, 0x54, 0xc3, 0x7f, + 0x30, 0x1f, 0x8b, 0x5c, 0x70, 0xb8, 0x77, 0x97, 0xa1, 0xf4, 0x7a, 0x37, 0x95, 0x5e, 0x30, 0x20, + 0x0a, 0x9b, 0x0e, 0x88, 0xbe, 0xad, 0x0e, 0x88, 0xfe, 0xd4, 0x01, 0x11, 0x2a, 0xc8, 0x40, 0xaa, + 0x82, 0x54, 0xf8, 0xa0, 0x41, 0xdd, 0x13, 0x28, 0x9c, 0xdd, 0x58, 0x2f, 0x8e, 0xd0, 0xd1, 0x94, + 0x98, 0x39, 0x01, 0x58, 0xa8, 0x5f, 0xcd, 0x77, 0x09, 0x37, 0xb2, 0x2f, 0x3a, 0xf2, 0x14, 0xca, + 0x95, 0xda, 0x6d, 0xae, 0x1f, 0xc7, 0x85, 0x48, 0x27, 0x29, 0xa5, 0x28, 0x35, 0x7e, 0x1e, 0xe5, + 0x4a, 0xb7, 0x6b, 0xd1, 0xa4, 0x09, 0xa5, 0xdb, 0x35, 0xfe, 0x25, 0xa9, 0x65, 0x6f, 0xd7, 0xf0, + 0x8b, 0x61, 0xf4, 0xc2, 0x95, 0x8e, 0x75, 0x87, 0x6f, 0x14, 0xb9, 0x13, 0xac, 0xef, 0x69, 0xd3, + 0xa0, 0x28, 0xba, 0x5d, 0x8c, 0xd0, 0x46, 0xb4, 0xa9, 0xb0, 0x75, 0x6d, 0xea, 0xdb, 0x54, 0x9b, + 0xfa, 0xb7, 0xaa, 0x4d, 0x03, 0x5b, 0xd0, 0x26, 0xb4, 0xa9, 0x36, 0x0d, 0xee, 0x5e, 0x9b, 0xda, + 0xe8, 0x4c, 0x3c, 0x44, 0x54, 0xa0, 0x11, 0x1a, 0xc2, 0x71, 0x2c, 0x77, 0x2c, 0x81, 0xab, 0xff, + 0x0e, 0xc3, 0xd6, 0x59, 0x52, 0xfd, 0x68, 0x4a, 0x7a, 0x2d, 0xa1, 0xb4, 0xfa, 0x4b, 0xd9, 0xf4, + 0xc8, 0x56, 0x07, 0x73, 0x8a, 0xfb, 0x96, 0x44, 0x29, 0xe5, 0xe5, 0x97, 0xc6, 0xe9, 0x52, 0x8e, + 0xb0, 0x4d, 0x92, 0xd9, 0x57, 0x32, 0x69, 0xe1, 0xb6, 0x76, 0x25, 0xb1, 0x47, 0xe2, 0xce, 0x6a, + 0xe0, 0x3d, 0xef, 0xca, 0x5e, 0x6a, 0xd1, 0x1c, 0xed, 0xb9, 0x1d, 0xe6, 0x68, 0xff, 0xcd, 0x0c, + 0x3a, 0x7e, 0xa3, 0xb3, 0x48, 0xb8, 0x73, 0x5a, 0xd0, 0x8c, 0x37, 0x10, 0xa2, 0x60, 0xee, 0xc4, + 0x92, 0x01, 0x27, 0x96, 0xf7, 0x8a, 0xa1, 0xb2, 0x22, 0x05, 0x2e, 0x87, 0xd4, 0xcc, 0x81, 0xe5, + 0x9c, 0xef, 0x62, 0x79, 0xa7, 0xb3, 0x48, 0xea, 0x31, 0x4f, 0x16, 0x81, 0xfb, 0x99, 0x97, 0x98, + 0xf3, 0xfa, 0x4e, 0x9d, 0x46, 0x7e, 0x21, 0x9b, 0x1a, 0x9d, 0xec, 0xc0, 0xa6, 0xd1, 0xfb, 0x50, + 0x62, 0xaf, 0x44, 0xd3, 0xe9, 0x25, 0x90, 0x44, 0x38, 0x26, 0x71, 0x49, 0x16, 0xd8, 0x01, 0x4f, + 0xee, 0xf8, 0xb6, 0x0a, 0xec, 0xf7, 0x33, 0xa9, 0x51, 0xe4, 0x0e, 0xaa, 0xc0, 0xd4, 0xff, 0x90, + 0xf3, 0x83, 0xd7, 0xed, 0xea, 0x13, 0x1e, 0x43, 0x03, 0x3c, 0x43, 0x8f, 0xec, 0x5b, 0xcb, 0x8f, + 0xf2, 0xe0, 0x68, 0x38, 0x20, 0xa0, 0xcb, 0xbc, 0x1f, 0x5c, 0x2b, 0xc8, 0xea, 0x0f, 0xcb, 0xbc, + 0xc9, 0xa1, 0x94, 0x5e, 0x20, 0xa1, 0x0b, 0xf9, 0xe4, 0x3d, 0xd3, 0x03, 0xab, 0x80, 0xf6, 0x65, + 0x8e, 0x2d, 0xe4, 0xe4, 0x9e, 0xe9, 0x31, 0x9b, 0x20, 0x40, 0xd3, 0x45, 0xba, 0x16, 0xa6, 0xae, + 0xe6, 0x8b, 0xb4, 0xcb, 0x33, 0x78, 0xf3, 0xc7, 0x5c, 0x8f, 0xa1, 0x01, 0xee, 0xb0, 0xca, 0xdd, + 0x4c, 0x78, 0x6b, 0xb9, 0x8b, 0x2b, 0xb4, 0x36, 0x20, 0xa0, 0x1c, 0x35, 0xb2, 0x1c, 0x3a, 0xd6, + 0x01, 0x47, 0x07, 0x20, 0x1a, 0xc7, 0xe0, 0xab, 0x68, 0xa4, 0xe6, 0xe9, 0x96, 0xa1, 0x3b, 0xc6, + 0x7c, 0xc7, 0x6b, 0x77, 0x3c, 0xd1, 0x28, 0x75, 0x3d, 0xc3, 0xee, 0x78, 0x5a, 0x84, 0x02, 0x3f, + 0x81, 0x86, 0x7d, 0xc8, 0xa4, 0xe3, 0xd8, 0x8e, 0x68, 0x79, 0xb8, 0x9e, 0x41, 0x1c, 0x47, 0x93, + 0x09, 0xf0, 0xfb, 0xd0, 0x70, 0xc5, 0xba, 0x6b, 0x37, 0xd8, 0x8b, 0x5b, 0x6d, 0x86, 0xdb, 0x21, + 0xf0, 0x40, 0xca, 0x0c, 0x10, 0xf5, 0x8e, 0xd3, 0xd4, 0x64, 0x42, 0x75, 0x23, 0x1b, 0x8f, 0xf1, + 0x77, 0x78, 0x37, 0x2d, 0x97, 0x64, 0x67, 0x3a, 0xf0, 0x20, 0x05, 0x83, 0x50, 0xf4, 0xe5, 0x65, + 0x76, 0xe1, 0x55, 0xd4, 0x7f, 0x83, 0xac, 0x31, 0xbf, 0xcf, 0x42, 0xe8, 0x2a, 0x7c, 0x87, 0xc3, + 0xc4, 0x13, 0x57, 0x9f, 0x4e, 0xfd, 0x72, 0x36, 0x1e, 0xbd, 0xf0, 0xf0, 0x0a, 0xfb, 0x09, 0xd4, + 0x07, 0xa2, 0xac, 0xf8, 0x47, 0xfe, 0x20, 0x40, 0x10, 0xb7, 0xec, 0x81, 0xec, 0x93, 0xa9, 0x3f, + 0x5e, 0x88, 0x86, 0xb4, 0x3c, 0xbc, 0xd2, 0x7b, 0x01, 0x0d, 0x4e, 0xd8, 0x96, 0x6b, 0xba, 0x1e, + 0xb1, 0x1a, 0xbe, 0xc2, 0x9e, 0xa6, 0x06, 0x55, 0x23, 0x04, 0x8b, 0x2f, 0x83, 0x04, 0xea, 0x9d, + 0x28, 0x2f, 0x7e, 0x06, 0x0d, 0x80, 0xc8, 0xc1, 0x4f, 0x9a, 0x4d, 0x78, 0x70, 0x5b, 0xb0, 0x48, + 0x81, 0x51, 0x27, 0xe9, 0x90, 0x14, 0xdf, 0x44, 0xfd, 0x13, 0x2b, 0x66, 0xd3, 0x70, 0x88, 0x05, + 0xfe, 0xc2, 0x42, 0x8c, 0x03, 0xb9, 0x2f, 0x2f, 0xc3, 0xbf, 0x40, 0xcb, 0x9a, 0xd3, 0xe0, 0xc5, + 0xa4, 0xb7, 0x51, 0x1c, 0x76, 0xe6, 0xfb, 0xb3, 0x08, 0x85, 0x05, 0xf0, 0x03, 0x28, 0x1b, 0x64, + 0x85, 0x05, 0x37, 0x15, 0x49, 0x83, 0xb2, 0xb0, 0x54, 0xf0, 0xb1, 0x9d, 0xdd, 0x74, 0x6c, 0xdf, + 0x44, 0x05, 0x76, 0xe2, 0x05, 0x9e, 0xe4, 0x42, 0x94, 0xbd, 0xd4, 0x06, 0x5f, 0x06, 0x7a, 0xb6, + 0x99, 0x05, 0xcb, 0x53, 0xf2, 0xca, 0x66, 0xcc, 0xce, 0x34, 0x50, 0x2f, 0xfc, 0x85, 0x2f, 0xa0, + 0xfc, 0x82, 0x9f, 0x51, 0x72, 0x98, 0xcd, 0xd2, 0x11, 0xf9, 0x01, 0x9e, 0x76, 0xd3, 0x84, 0x6d, + 0x79, 0xb4, 0x6a, 0x68, 0xf5, 0x10, 0x97, 0x0b, 0x87, 0x49, 0x72, 0xe1, 0x30, 0xf5, 0x9f, 0x66, + 0x13, 0x82, 0xad, 0x1e, 0xde, 0x61, 0xf2, 0x1c, 0x42, 0xf0, 0xd0, 0x9a, 0xca, 0xd3, 0x7f, 0xa2, + 0x01, 0xa3, 0x04, 0x18, 0x81, 0xda, 0x4a, 0xdb, 0x8e, 0x90, 0x58, 0xfd, 0xed, 0x4c, 0x2c, 0x42, + 0xe7, 0xae, 0xe4, 0x28, 0x5a, 0x65, 0xd9, 0x1d, 0x9a, 0xb1, 0x7e, 0x5f, 0xe4, 0xb6, 0xd7, 0x17, + 0xf2, 0xb7, 0xec, 0x81, 0x65, 0xba, 0x9f, 0xdf, 0xf2, 0xb5, 0x6c, 0x52, 0xbc, 0xd2, 0x83, 0xa9, + 0xe2, 0xd7, 0x02, 0xa3, 0x34, 0x1f, 0x89, 0x10, 0x0d, 0xd0, 0x68, 0xd6, 0x5b, 0x6e, 0xa6, 0x7e, + 0x14, 0x1d, 0x8b, 0x44, 0xf1, 0xe4, 0x09, 0x48, 0x2f, 0x74, 0x0f, 0x07, 0x9a, 0xfe, 0x44, 0x5f, + 0x22, 0x53, 0xff, 0x57, 0xa6, 0x7b, 0x0c, 0xd7, 0x7d, 0x57, 0x9d, 0x04, 0x01, 0xe4, 0xfe, 0x7a, + 0x04, 0xb0, 0x07, 0xdb, 0xe0, 0x83, 0x2d, 0x80, 0x77, 0xc8, 0xe4, 0xf1, 0x76, 0x0b, 0xe0, 0xc7, + 0x33, 0x9b, 0x86, 0xe0, 0xdd, 0x6f, 0x19, 0xa8, 0xff, 0x36, 0x93, 0x18, 0x2a, 0x77, 0x57, 0xed, + 0x7a, 0x11, 0x15, 0x98, 0x5b, 0x0d, 0x6f, 0x95, 0x90, 0x5c, 0x88, 0x42, 0xd3, 0xd2, 0x71, 0x33, + 0x2c, 0x9e, 0x41, 0x7d, 0xac, 0x0d, 0x06, 0xef, 0x8d, 0x87, 0xbb, 0xc4, 0xeb, 0x35, 0xd2, 0x26, + 0x47, 0x8e, 0x56, 0x7f, 0x2b, 0x13, 0x8b, 0xdc, 0xbb, 0x8f, 0xdf, 0x16, 0x4e, 0xd5, 0xb9, 0xad, + 0x4f, 0xd5, 0xea, 0x9f, 0x64, 0x93, 0x03, 0x07, 0xef, 0xe3, 0x87, 0xec, 0xc5, 0x71, 0xda, 0xce, + 0xd6, 0xad, 0x05, 0x34, 0x22, 0xcb, 0x82, 0x2f, 0x5b, 0xe7, 0x93, 0xc3, 0x27, 0xa7, 0xb4, 0x22, + 0xc2, 0x43, 0x7d, 0x2b, 0x13, 0x8f, 0x79, 0xbc, 0xef, 0xf3, 0xd3, 0xce, 0xb4, 0x45, 0xfe, 0x94, + 0x77, 0xc8, 0x5a, 0xb3, 0x17, 0x9f, 0xf2, 0x0e, 0x59, 0x35, 0x76, 0xf6, 0x29, 0x3f, 0x9b, 0x4d, + 0x0b, 0x19, 0xbd, 0xef, 0x1f, 0xf4, 0x41, 0x51, 0xc8, 0xac, 0x65, 0xfc, 0xd3, 0x1e, 0x48, 0x8b, + 0xd1, 0x9c, 0xc2, 0x33, 0xc6, 0x67, 0x67, 0x63, 0x3c, 0x51, 0x58, 0xef, 0x10, 0x45, 0x3e, 0x18, + 0xc2, 0x7a, 0x87, 0x0c, 0x95, 0x77, 0x9e, 0xb0, 0x7e, 0x3d, 0xbb, 0xd5, 0x38, 0xe5, 0x47, 0xc2, + 0x8b, 0x09, 0xef, 0xb3, 0xd9, 0x78, 0xfc, 0xfc, 0x7d, 0x17, 0xd3, 0x14, 0x2a, 0xf0, 0x48, 0xfe, + 0xa9, 0xc2, 0x61, 0xf8, 0x34, 0x8b, 0x86, 0x7f, 0xc7, 0x35, 0xc4, 0x2f, 0x72, 0xb6, 0x26, 0x12, + 0x46, 0xab, 0x7e, 0x33, 0x13, 0x09, 0x36, 0xbf, 0x2f, 0x47, 0x08, 0x3b, 0x5a, 0x92, 0xf0, 0x4b, + 0xfe, 0x61, 0x66, 0x3e, 0x12, 0x29, 0x38, 0xf8, 0x9e, 0x32, 0xf1, 0x74, 0xb3, 0x19, 0x2d, 0xcf, + 0x63, 0x02, 0x7c, 0x39, 0x8b, 0xc6, 0x62, 0xa4, 0xf8, 0x82, 0x14, 0x25, 0x07, 0x8e, 0x25, 0x23, + 0xce, 0xe3, 0x2c, 0x5e, 0xce, 0x36, 0x4e, 0x52, 0x2f, 0xa0, 0x7c, 0x59, 0x5f, 0x63, 0xdf, 0xd6, + 0xcb, 0x58, 0x1a, 0xfa, 0x9a, 0x78, 0xe2, 0x06, 0x78, 0xbc, 0x88, 0xee, 0x63, 0xf7, 0x21, 0xa6, + 0x6d, 0x2d, 0x98, 0x2d, 0x52, 0xb1, 0x66, 0xcd, 0x66, 0xd3, 0x74, 0xf9, 0xa5, 0xde, 0x63, 0x1b, + 0xeb, 0xc5, 0x8b, 0x9e, 0xed, 0xe9, 0xcd, 0x3a, 0xf1, 0xc9, 0xea, 0x9e, 0xd9, 0x22, 0x75, 0xd3, + 0xaa, 0xb7, 0x80, 0x52, 0x60, 0x99, 0xcc, 0x0a, 0x57, 0x58, 0x50, 0xe8, 0x5a, 0x43, 0xb7, 0x2c, + 0x62, 0x54, 0xac, 0xf1, 0x35, 0x8f, 0xb0, 0xcb, 0xc0, 0x1c, 0x3b, 0x12, 0x64, 0x6f, 0xc3, 0x19, + 0x9a, 0x32, 0x5e, 0xa4, 0x04, 0x5a, 0x42, 0x21, 0xf5, 0x37, 0xf2, 0x09, 0x79, 0x06, 0x0e, 0x90, + 0xfa, 0xf8, 0x3d, 0x9d, 0xdf, 0xa4, 0xa7, 0xaf, 0xa0, 0x3e, 0x1e, 0xe2, 0x93, 0x5f, 0x30, 0x80, + 0x33, 0xfb, 0x5d, 0x06, 0x12, 0x6f, 0x68, 0x38, 0x15, 0x6e, 0xa2, 0x33, 0x0b, 0xb4, 0x9b, 0x92, + 0x3b, 0xb3, 0xb0, 0x83, 0xce, 0xec, 0xc2, 0x0f, 0xbf, 0x8e, 0x4e, 0x01, 0x36, 0xa1, 0x5b, 0xfb, + 0xa0, 0x2a, 0x88, 0x1c, 0xc5, 0xaa, 0x4a, 0xee, 0xdc, 0xb4, 0xf2, 0xf8, 0x83, 0x68, 0x28, 0x18, + 0x20, 0x26, 0x71, 0xf9, 0xcd, 0x45, 0x97, 0x71, 0xc6, 0xc2, 0xb2, 0x51, 0x30, 0xb8, 0x90, 0xc9, + 0xa1, 0xbd, 0x24, 0x5e, 0xea, 0xbf, 0xc9, 0x74, 0xcb, 0x77, 0xb0, 0xef, 0xb3, 0xf2, 0x4b, 0xa8, + 0xcf, 0x60, 0x1f, 0xc5, 0x75, 0xaa, 0x7b, 0x46, 0x04, 0x46, 0xaa, 0xf9, 0x65, 0xd4, 0x3f, 0xce, + 0x74, 0x4d, 0xb3, 0x70, 0xd0, 0x3f, 0xef, 0xb3, 0xb9, 0x94, 0xcf, 0xe3, 0x93, 0xe8, 0x25, 0x34, + 0x6a, 0x86, 0x11, 0xab, 0xeb, 0x61, 0xf8, 0x29, 0xed, 0x98, 0x00, 0x87, 0xd1, 0x75, 0x0d, 0x9d, + 0xf4, 0x1d, 0x1f, 0x1d, 0xdf, 0x43, 0xcc, 0xad, 0x77, 0x1c, 0x93, 0x8d, 0x4b, 0xed, 0x84, 0x1b, + 0x71, 0x1f, 0x73, 0x6f, 0x3a, 0x26, 0xad, 0x40, 0xf7, 0x56, 0x88, 0xa5, 0xd7, 0x57, 0x6d, 0xe7, + 0x0e, 0xc4, 0xfe, 0x64, 0x83, 0x53, 0x3b, 0xc6, 0xe0, 0xb7, 0x7d, 0x30, 0x7e, 0x08, 0x0d, 0x2f, + 0x37, 0x3b, 0x24, 0x88, 0xb6, 0xc8, 0xee, 0xfa, 0xb4, 0x21, 0x0a, 0x0c, 0x6e, 0x48, 0xce, 0x21, + 0x04, 0x44, 0x1e, 0x24, 0xc1, 0x80, 0x8b, 0x3d, 0x6d, 0x80, 0x42, 0x16, 0x78, 0x77, 0x9d, 0x61, + 0x5a, 0xcd, 0x84, 0x54, 0x6f, 0xda, 0xd6, 0x72, 0xdd, 0x23, 0x4e, 0x0b, 0x1a, 0x0a, 0xce, 0x0c, + 0xda, 0x49, 0xa0, 0x80, 0xab, 0x13, 0x77, 0xc6, 0xb6, 0x96, 0x17, 0x88, 0xd3, 0xa2, 0x4d, 0x7d, + 0x0c, 0x61, 0xde, 0x54, 0x07, 0x0e, 0x3d, 0xd8, 0xc7, 0x81, 0x37, 0x83, 0xc6, 0x3f, 0x82, 0x9d, + 0x86, 0xc0, 0x87, 0x15, 0xd1, 0x20, 0x0b, 0x39, 0xc7, 0x84, 0x06, 0x2e, 0x0c, 0x1a, 0x62, 0x20, + 0x90, 0xd7, 0x49, 0xc4, 0xbd, 0x2b, 0x98, 0x57, 0xb7, 0xc6, 0x7f, 0xa9, 0x9f, 0xca, 0x25, 0x65, + 0x86, 0xd8, 0x95, 0xa2, 0x85, 0xd3, 0x6a, 0x76, 0x5b, 0xd3, 0xea, 0x31, 0xab, 0xd3, 0xaa, 0xeb, + 0xed, 0x76, 0x7d, 0xc9, 0x6c, 0xc2, 0xb3, 0x2a, 0x58, 0xf8, 0xb4, 0x61, 0xab, 0xd3, 0x2a, 0xb5, + 0xdb, 0x53, 0x0c, 0x88, 0x1f, 0x45, 0x63, 0x94, 0x0e, 0x3a, 0x29, 0xa0, 0xcc, 0x03, 0x25, 0x65, + 0x00, 0x31, 0x5b, 0x7d, 0xda, 0xd3, 0xa8, 0x9f, 0xf3, 0x64, 0x6b, 0x55, 0xaf, 0xd6, 0xc7, 0x98, + 0xb9, 0xb4, 0xe7, 0x02, 0x36, 0x6c, 0x72, 0xed, 0xd5, 0x06, 0xfc, 0xf2, 0x10, 0x99, 0xd8, 0xea, + 0xb4, 0x58, 0x44, 0xac, 0x3e, 0x40, 0x06, 0xbf, 0xf1, 0x05, 0x34, 0x42, 0xb9, 0x04, 0x02, 0x63, + 0xc1, 0x5c, 0x7b, 0xb5, 0x08, 0x14, 0x5f, 0x45, 0x27, 0x24, 0x08, 0xb3, 0x41, 0xd9, 0x33, 0x81, + 0x5e, 0x2d, 0x11, 0xa7, 0xbe, 0x95, 0x8b, 0x27, 0xbe, 0xd8, 0x97, 0xb5, 0x71, 0x1a, 0x21, 0x9e, + 0xd7, 0x26, 0xbc, 0xa0, 0x09, 0xbc, 0x96, 0x43, 0x4c, 0x0a, 0x0f, 0xa1, 0x2c, 0xbe, 0x84, 0xfa, + 0xd9, 0x17, 0x55, 0xca, 0x7c, 0xcd, 0x04, 0x37, 0x23, 0xb7, 0x6d, 0x2e, 0x2d, 0x81, 0x4f, 0x52, + 0x80, 0xc6, 0x17, 0x50, 0x5f, 0x79, 0xae, 0x56, 0x2b, 0xcd, 0xf9, 0xb7, 0x8d, 0xf0, 0x46, 0xc1, + 0xb0, 0xdc, 0xba, 0xab, 0x5b, 0xae, 0xe6, 0x23, 0xf1, 0x43, 0xa8, 0x50, 0xa9, 0x02, 0x19, 0x7b, + 0x79, 0x37, 0xb8, 0xb1, 0x5e, 0xec, 0x33, 0xdb, 0x8c, 0x8a, 0xa3, 0xa0, 0xde, 0x5b, 0x95, 0xb2, + 0x70, 0xe5, 0xce, 0xea, 0xbd, 0x6b, 0x1a, 0x70, 0x75, 0xa9, 0x05, 0x68, 0xfc, 0x34, 0x1a, 0xaa, + 0x11, 0xc7, 0xd4, 0x9b, 0x73, 0x1d, 0xd8, 0x6e, 0x30, 0x37, 0xa3, 0xb1, 0x8d, 0xf5, 0xe2, 0xb0, + 0x0b, 0xf0, 0xba, 0x05, 0x08, 0x4d, 0x22, 0xc3, 0x67, 0x51, 0x7e, 0xda, 0xb4, 0x7c, 0x37, 0x78, + 0xf0, 0x93, 0x5e, 0x31, 0x2d, 0x4f, 0x03, 0xa8, 0xfa, 0x5f, 0xb2, 0xc9, 0xa9, 0x47, 0xf6, 0x61, + 0x6c, 0xed, 0xf0, 0xb6, 0x30, 0xa2, 0x04, 0xf9, 0x5d, 0x28, 0xc1, 0x12, 0x3a, 0x56, 0x32, 0x5a, + 0xa6, 0x55, 0x82, 0x9f, 0xee, 0xec, 0x54, 0x09, 0x06, 0xa4, 0xf0, 0x0c, 0x2b, 0x82, 0xe6, 0xdf, + 0xc3, 0xc2, 0xad, 0x52, 0x54, 0x5d, 0x67, 0xb8, 0x7a, 0x6b, 0x49, 0xaf, 0x37, 0x58, 0xd6, 0x0e, + 0x2d, 0xca, 0x54, 0xfd, 0xbe, 0xec, 0x26, 0xd9, 0x52, 0x0e, 0xa3, 0xf4, 0xd5, 0xcf, 0x65, 0xbb, + 0x27, 0xac, 0x39, 0x94, 0x42, 0xf9, 0xf3, 0x6c, 0x42, 0xfa, 0x98, 0x5d, 0x49, 0xe2, 0x12, 0xea, + 0x67, 0x6c, 0x02, 0x77, 0x4d, 0x98, 0x71, 0x98, 0xb2, 0xc2, 0x4c, 0xe7, 0xa3, 0xf1, 0x1c, 0x3a, + 0x51, 0x5a, 0x5a, 0x22, 0x0d, 0x2f, 0x0c, 0xbc, 0x3b, 0x17, 0x06, 0xdb, 0x64, 0xd1, 0x4a, 0x39, + 0x3e, 0x0c, 0xdc, 0x0b, 0x41, 0x25, 0x12, 0xcb, 0xe1, 0x05, 0x74, 0x32, 0x0a, 0xaf, 0x31, 0x53, + 0x2f, 0x2f, 0x04, 0x30, 0x8d, 0x71, 0x64, 0xff, 0x69, 0x29, 0x65, 0x93, 0x5a, 0x09, 0xd3, 0x69, + 0x6f, 0xb7, 0x56, 0xc2, 0xdc, 0x9a, 0x58, 0x4e, 0xfd, 0x72, 0x4e, 0xcc, 0xb2, 0x73, 0x78, 0x1d, + 0x6b, 0xae, 0x49, 0xee, 0xb4, 0x5b, 0x1d, 0x32, 0x4f, 0xf3, 0x48, 0x11, 0x46, 0xc7, 0xf1, 0x3d, + 0xcf, 0x82, 0x97, 0xea, 0x00, 0x14, 0x7d, 0xc8, 0x02, 0x4a, 0x5c, 0x41, 0xf9, 0x92, 0xb3, 0xcc, + 0xcc, 0x98, 0xcd, 0x1e, 0xcf, 0xe8, 0xce, 0xb2, 0x9b, 0xfc, 0x78, 0x86, 0xb2, 0x50, 0xbf, 0x37, + 0xdb, 0x25, 0x0b, 0xcf, 0xa1, 0x9c, 0x44, 0x7e, 0x24, 0x9b, 0x96, 0x4f, 0xe7, 0xa0, 0xba, 0x08, + 0xbd, 0xcd, 0xc2, 0x39, 0xd8, 0xfe, 0x53, 0x7b, 0x2c, 0x9c, 0x94, 0xdc, 0x3e, 0x47, 0xc2, 0xf9, + 0x54, 0x36, 0x2d, 0xbd, 0xd1, 0xa1, 0x9d, 0x65, 0x52, 0x32, 0x2a, 0x1d, 0xe9, 0xca, 0x8f, 0x66, + 0x53, 0x93, 0x4a, 0x1d, 0x49, 0x47, 0xfd, 0x74, 0x36, 0x35, 0x29, 0xd6, 0xa1, 0x1c, 0x4a, 0x89, + 0xda, 0x72, 0x34, 0x96, 0xb8, 0x74, 0xbe, 0x27, 0x17, 0x4f, 0x43, 0x76, 0x28, 0xcf, 0x2b, 0xc6, + 0x51, 0xbf, 0xbf, 0xa1, 0xe1, 0x36, 0xfa, 0x96, 0xbb, 0xd3, 0x2f, 0x87, 0x5f, 0x46, 0xc7, 0x42, + 0x59, 0x8a, 0xe1, 0x48, 0xe0, 0x22, 0xa8, 0x41, 0x51, 0xf5, 0x37, 0x28, 0x8e, 0xbf, 0x9b, 0x8f, + 0x52, 0xab, 0xdf, 0xcc, 0xc5, 0x73, 0xb9, 0x1d, 0xf5, 0xc6, 0x0e, 0x7b, 0xe3, 0x26, 0x3a, 0x39, + 0xd1, 0x71, 0x1c, 0x62, 0x79, 0xc9, 0x9d, 0x02, 0x27, 0x4d, 0x0d, 0x46, 0x51, 0x8f, 0x77, 0x4e, + 0x4a, 0x61, 0xca, 0x96, 0xbb, 0x5c, 0x46, 0xd9, 0xf6, 0x85, 0x6c, 0x3b, 0x8c, 0x22, 0x89, 0x6d, + 0x72, 0x61, 0xf5, 0x77, 0xb2, 0xf1, 0xec, 0x7b, 0x47, 0x5d, 0xbf, 0xb3, 0xae, 0x7f, 0x74, 0x96, + 0x65, 0x33, 0xb9, 0x61, 0x5a, 0x06, 0x3e, 0x8d, 0xee, 0xbb, 0x59, 0x9b, 0xd4, 0xea, 0x37, 0x2a, + 0x73, 0xe5, 0xfa, 0xcd, 0xb9, 0x5a, 0x75, 0x72, 0xa2, 0x32, 0x55, 0x99, 0x2c, 0x8f, 0xf6, 0xe0, + 0xe3, 0xe8, 0x58, 0x88, 0x9a, 0xbe, 0x39, 0x5b, 0x9a, 0x1b, 0xcd, 0xe0, 0x31, 0x34, 0x1c, 0x02, + 0xc7, 0xe7, 0x17, 0x46, 0xb3, 0x8f, 0xbe, 0x07, 0x0d, 0xc2, 0x75, 0x0d, 0x3b, 0x76, 0xc4, 0x43, + 0xa8, 0x7f, 0x7e, 0xbc, 0x36, 0xa9, 0xdd, 0x02, 0x26, 0x08, 0x15, 0xca, 0x93, 0x73, 0x94, 0x61, + 0xe6, 0xd1, 0xff, 0x9e, 0x41, 0xa8, 0x36, 0xb5, 0x50, 0xe5, 0x84, 0x83, 0xa8, 0xaf, 0x32, 0x77, + 0xab, 0x34, 0x53, 0xa1, 0x74, 0xfd, 0x28, 0x3f, 0x5f, 0x9d, 0xa4, 0x35, 0x0c, 0xa0, 0xde, 0x89, + 0x99, 0xf9, 0xda, 0xe4, 0x68, 0x96, 0x02, 0xb5, 0xc9, 0x52, 0x79, 0x34, 0x47, 0x81, 0xb7, 0xb5, + 0xca, 0xc2, 0xe4, 0x68, 0x9e, 0xfe, 0x39, 0x53, 0x5b, 0x28, 0x2d, 0x8c, 0xf6, 0xd2, 0x3f, 0xa7, + 0xe0, 0xcf, 0x02, 0x65, 0x56, 0x9b, 0x5c, 0x80, 0x1f, 0x7d, 0xb4, 0x09, 0x53, 0xfe, 0xaf, 0x7e, + 0x8a, 0xa2, 0xac, 0xcb, 0x15, 0x6d, 0x74, 0x80, 0xfe, 0xa0, 0x2c, 0xe9, 0x0f, 0x44, 0x1b, 0xa7, + 0x4d, 0xce, 0xce, 0xdf, 0x9a, 0x1c, 0x1d, 0xa4, 0xbc, 0x66, 0x6f, 0x50, 0xf0, 0x10, 0xfd, 0x53, + 0x9b, 0xa5, 0x7f, 0x0e, 0x53, 0x4e, 0xda, 0x64, 0x69, 0xa6, 0x5a, 0x5a, 0x98, 0x1e, 0x1d, 0xa1, + 0xed, 0x01, 0x9e, 0xc7, 0x58, 0xc9, 0xb9, 0xd2, 0xec, 0xe4, 0xe8, 0x28, 0xa7, 0x29, 0xcf, 0x54, + 0xe6, 0x6e, 0x8c, 0x8e, 0x41, 0x43, 0x5e, 0x9f, 0x85, 0x1f, 0x98, 0x16, 0x80, 0xbf, 0x8e, 0x3f, + 0xfa, 0x61, 0x54, 0x98, 0xaf, 0xc1, 0xe1, 0xfa, 0x29, 0x74, 0x7c, 0xbe, 0x56, 0x5f, 0x78, 0xbd, + 0x3a, 0x19, 0x91, 0xf7, 0x18, 0x1a, 0xf6, 0x11, 0x33, 0x95, 0xb9, 0x9b, 0x1f, 0x60, 0xd2, 0xf6, + 0x41, 0xb3, 0xa5, 0x89, 0xf9, 0xda, 0x68, 0x96, 0xf6, 0x8a, 0x0f, 0xba, 0x5d, 0x99, 0x2b, 0xcf, + 0xdf, 0xae, 0x8d, 0xe6, 0x1e, 0xbd, 0x8b, 0x86, 0x58, 0x2e, 0x98, 0x79, 0xc7, 0x5c, 0x36, 0x2d, + 0x7c, 0x0e, 0x9d, 0x2e, 0x4f, 0xde, 0xaa, 0x4c, 0x4c, 0xd6, 0xe7, 0xb5, 0xca, 0xf5, 0xca, 0x5c, + 0xa4, 0xa6, 0xfb, 0xd0, 0x98, 0x8c, 0x2e, 0x55, 0x2b, 0xa3, 0x19, 0x7c, 0x12, 0x61, 0x19, 0xfc, + 0x6a, 0x69, 0x76, 0x6a, 0x34, 0x8b, 0x15, 0x74, 0x42, 0x86, 0x57, 0xe6, 0x16, 0x6e, 0xce, 0x4d, + 0x8e, 0xe6, 0x1e, 0xfd, 0xc9, 0x0c, 0xba, 0x2f, 0x31, 0x5e, 0x18, 0x56, 0xd1, 0xf9, 0xc9, 0x99, + 0x52, 0x6d, 0xa1, 0x32, 0x51, 0x9b, 0x2c, 0x69, 0x13, 0xd3, 0xf5, 0x89, 0xd2, 0xc2, 0xe4, 0xf5, + 0x79, 0xed, 0xf5, 0xfa, 0xf5, 0xc9, 0xb9, 0x49, 0xad, 0x34, 0x33, 0xda, 0x83, 0x1f, 0x42, 0xc5, + 0x14, 0x9a, 0xda, 0xe4, 0xc4, 0x4d, 0xad, 0xb2, 0xf0, 0xfa, 0x68, 0x06, 0x3f, 0x88, 0xce, 0xa5, + 0x12, 0xd1, 0xdf, 0xa3, 0x59, 0x7c, 0x1e, 0x9d, 0x49, 0x23, 0x79, 0x6d, 0x66, 0x34, 0xf7, 0xe8, + 0x0f, 0x65, 0x10, 0x8e, 0x07, 0x7c, 0xc2, 0x0f, 0xa0, 0xb3, 0x54, 0x2f, 0xea, 0xe9, 0x0d, 0x7c, + 0x10, 0x9d, 0x4b, 0xa4, 0x10, 0x9a, 0x57, 0x44, 0xf7, 0xa7, 0x90, 0xf0, 0xc6, 0x9d, 0x45, 0x4a, + 0x32, 0x01, 0x34, 0xed, 0x8b, 0x19, 0x74, 0x5f, 0xe2, 0x49, 0x3f, 0xbe, 0x88, 0x1e, 0x2e, 0x95, + 0x67, 0x69, 0xdf, 0x4c, 0x2c, 0x54, 0xe6, 0xe7, 0x6a, 0xf5, 0xd9, 0xa9, 0x52, 0x9d, 0x6a, 0xdf, + 0xcd, 0x5a, 0xa4, 0x37, 0x2f, 0x20, 0xb5, 0x0b, 0xe5, 0xc4, 0x74, 0x69, 0xee, 0x3a, 0x1d, 0x7e, + 0xf8, 0x61, 0xf4, 0x40, 0x2a, 0xdd, 0xe4, 0x5c, 0x69, 0x7c, 0x66, 0xb2, 0x3c, 0x9a, 0xc5, 0x8f, + 0xa0, 0x07, 0x53, 0xa9, 0xca, 0x95, 0x1a, 0x23, 0xcb, 0x8d, 0x97, 0xdf, 0xfa, 0x77, 0xe7, 0x7b, + 0xde, 0xfa, 0xfa, 0xf9, 0xcc, 0xef, 0x7d, 0xfd, 0x7c, 0xe6, 0x4f, 0xbe, 0x7e, 0x3e, 0xf3, 0xc1, + 0xab, 0xdb, 0x09, 0xe4, 0xc5, 0xa6, 0xac, 0xc5, 0x02, 0x9c, 0xba, 0x3d, 0xf5, 0xbf, 0x03, 0x00, + 0x00, 0xff, 0xff, 0xf7, 0x7d, 0x76, 0x2e, 0x89, 0x68, 0x01, 0x00, } func (m *Metadata) Marshal() (dAtA []byte, err error) { @@ -19798,6 +19800,16 @@ func (m *Subsystem) MarshalToSizedBuffer(dAtA []byte) (int, error) { i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } + { + size, err := m.ServerMetadata.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintEvents(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x32 if len(m.Error) > 0 { i -= len(m.Error) copy(dAtA[i:], m.Error) @@ -24117,21 +24129,21 @@ func (m *WindowsDesktopSessionEnd) MarshalToSizedBuffer(dAtA []byte) (int, error i-- dAtA[i] = 0x5a } - n377, err377 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.EndTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.EndTime):]) - if err377 != nil { - return 0, err377 - } - i -= n377 - i = encodeVarintEvents(dAtA, i, uint64(n377)) - i-- - dAtA[i] = 0x52 - n378, err378 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.StartTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.StartTime):]) + n378, err378 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.EndTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.EndTime):]) if err378 != nil { return 0, err378 } i -= n378 i = encodeVarintEvents(dAtA, i, uint64(n378)) i-- + dAtA[i] = 0x52 + n379, err379 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.StartTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.StartTime):]) + if err379 != nil { + return 0, err379 + } + i -= n379 + i = encodeVarintEvents(dAtA, i, uint64(n379)) + i-- dAtA[i] = 0x4a if len(m.DesktopLabels) > 0 { for k := range m.DesktopLabels { @@ -24450,12 +24462,12 @@ func (m *InstanceJoin) MarshalToSizedBuffer(dAtA []byte) (int, error) { } i-- dAtA[i] = 0x52 - n392, err392 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.TokenExpires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.TokenExpires):]) - if err392 != nil { - return 0, err392 + n393, err393 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.TokenExpires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.TokenExpires):]) + if err393 != nil { + return 0, err393 } - i -= n392 - i = encodeVarintEvents(dAtA, i, uint64(n392)) + i -= n393 + i = encodeVarintEvents(dAtA, i, uint64(n393)) i-- dAtA[i] = 0x4a if m.Attributes != nil { @@ -29836,12 +29848,12 @@ func (m *StreamStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } - n631, err631 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.LastUploadTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.LastUploadTime):]) - if err631 != nil { - return 0, err631 + n632, err632 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.LastUploadTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.LastUploadTime):]) + if err632 != nil { + return 0, err632 } - i -= n631 - i = encodeVarintEvents(dAtA, i, uint64(n631)) + i -= n632 + i = encodeVarintEvents(dAtA, i, uint64(n632)) i-- dAtA[i] = 0x1a if m.LastEventIndex != 0 { @@ -29991,12 +30003,12 @@ func (m *Identity) MarshalToSizedBuffer(dAtA []byte) (int, error) { dAtA[i] = 0xc2 } } - n635, err635 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.PreviousIdentityExpires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.PreviousIdentityExpires):]) - if err635 != nil { - return 0, err635 + n636, err636 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.PreviousIdentityExpires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.PreviousIdentityExpires):]) + if err636 != nil { + return 0, err636 } - i -= n635 - i = encodeVarintEvents(dAtA, i, uint64(n635)) + i -= n636 + i = encodeVarintEvents(dAtA, i, uint64(n636)) i-- dAtA[i] = 0x1 i-- @@ -30144,12 +30156,12 @@ func (m *Identity) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x4a } - n639, err639 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Expires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Expires):]) - if err639 != nil { - return 0, err639 + n640, err640 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Expires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Expires):]) + if err640 != nil { + return 0, err640 } - i -= n639 - i = encodeVarintEvents(dAtA, i, uint64(n639)) + i -= n640 + i = encodeVarintEvents(dAtA, i, uint64(n640)) i-- dAtA[i] = 0x42 if len(m.KubernetesUsers) > 0 { @@ -37793,6 +37805,8 @@ func (m *Subsystem) Size() (n int) { if l > 0 { n += 1 + l + sovEvents(uint64(l)) } + l = m.ServerMetadata.Size() + n += 1 + l + sovEvents(uint64(l)) if m.XXX_unrecognized != nil { n += len(m.XXX_unrecognized) } @@ -57961,6 +57975,39 @@ func (m *Subsystem) Unmarshal(dAtA []byte) error { } m.Error = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ServerMetadata", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthEvents + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ServerMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipEvents(dAtA[iNdEx:]) diff --git a/lib/events/events_test.go b/lib/events/events_test.go index 0d0086f0cae96..3638c006dade2 100644 --- a/lib/events/events_test.go +++ b/lib/events/events_test.go @@ -617,7 +617,7 @@ func TestJSON(t *testing.T) { }, { name: "rejected subsystem", - json: `{"ei":0,"cluster_name":"test","addr.local":"127.0.0.1:57518","addr.remote":"127.0.0.1:3022","code":"T3001E","event":"subsystem","exitError":"some error","login":"alice","name":"proxy","time":"2020-04-15T20:28:18Z","uid":"3129a5ae-ee1e-4b39-8d7c-a0a3f218e7dc","user":"alice@example.com"}`, + json: `{"ei":0,"cluster_name":"test","addr.local":"127.0.0.1:57518","addr.remote":"127.0.0.1:3022","code":"T3001E","event":"subsystem","exitError":"some error","forwarded_by":"abc","login":"alice","name":"proxy","server_id":"123","time":"2020-04-15T20:28:18Z","uid":"3129a5ae-ee1e-4b39-8d7c-a0a3f218e7dc","user":"alice@example.com"}`, event: apievents.Subsystem{ Metadata: apievents.Metadata{ ID: "3129a5ae-ee1e-4b39-8d7c-a0a3f218e7dc", @@ -634,6 +634,10 @@ func TestJSON(t *testing.T) { LocalAddr: "127.0.0.1:57518", RemoteAddr: "127.0.0.1:3022", }, + ServerMetadata: apievents.ServerMetadata{ + ServerID: "123", + ForwardedBy: "abc", + }, Name: "proxy", Error: "some error", }, diff --git a/lib/srv/ctx.go b/lib/srv/ctx.go index e5dd446619033..d55e8507e8c1c 100644 --- a/lib/srv/ctx.go +++ b/lib/srv/ctx.go @@ -1003,7 +1003,7 @@ func (c *ServerContext) reportStats(conn utils.Stater) { Type: events.SessionDataEvent, Code: events.SessionDataCode, }, - ServerMetadata: c.GetServerMetadata(), + ServerMetadata: c.srv.TargetMetadata(), SessionMetadata: c.GetSessionMetadata(), UserMetadata: c.Identity.GetUserMetadata(), ConnectionMetadata: apievents.ConnectionMetadata{ @@ -1387,15 +1387,6 @@ func (c *ServerContext) GetExecRequest() (Exec, error) { return c.execRequest, nil } -func (c *ServerContext) GetServerMetadata() apievents.ServerMetadata { - return apievents.ServerMetadata{ - ServerVersion: teleport.Version, - ServerID: c.srv.HostUUID(), - ServerHostname: c.srv.GetInfo().GetHostname(), - ServerNamespace: c.srv.GetNamespace(), - } -} - func (c *ServerContext) GetSessionMetadata() apievents.SessionMetadata { return apievents.SessionMetadata{ SessionID: string(c.SessionID()), diff --git a/lib/srv/exec.go b/lib/srv/exec.go index 61ef8baade8ae..0d88ae3149bfd 100644 --- a/lib/srv/exec.go +++ b/lib/srv/exec.go @@ -262,7 +262,7 @@ func (e *localExec) transformSecureCopy() error { Time: time.Now(), }, UserMetadata: e.Ctx.Identity.GetUserMetadata(), - ServerMetadata: e.Ctx.GetServerMetadata(), + ServerMetadata: e.Ctx.GetServer().TargetMetadata(), Error: err.Error(), }) return trace.Wrap(err) @@ -367,7 +367,7 @@ func (e *remoteExec) Start(ctx context.Context, ch ssh.Channel) (*ExecResult, er Time: time.Now(), }, UserMetadata: e.ctx.Identity.GetUserMetadata(), - ServerMetadata: e.ctx.GetServerMetadata(), + ServerMetadata: e.ctx.GetServer().TargetMetadata(), Error: err.Error(), }) return nil, trace.Wrap(err) @@ -433,7 +433,7 @@ func (e *remoteExec) PID() int { // instead of ctx.srv. func emitExecAuditEvent(ctx *ServerContext, cmd string, execErr error) { // Create common fields for event. - serverMeta := ctx.GetServerMetadata() + serverMeta := ctx.GetServer().TargetMetadata() sessionMeta := ctx.GetSessionMetadata() userMeta := ctx.Identity.GetUserMetadata() diff --git a/lib/srv/exec_test.go b/lib/srv/exec_test.go index c8e52aa4381fd..adbc07ec9970e 100644 --- a/lib/srv/exec_test.go +++ b/lib/srv/exec_test.go @@ -63,12 +63,12 @@ func TestEmitExecAuditEvent(t *testing.T) { rec, ok := scx.session.recorder.(*mockRecorder) require.True(t, ok) + scx.GetServer().TargetMetadata() + expectedUsr, err := user.Current() require.NoError(t, err) - expectedHostname, err := os.Hostname() - if err != nil { - expectedHostname = "localhost" - } + expectedHostname := "testHost" + expectedMeta := apievents.UserMetadata{ User: "teleportUser", Login: expectedUsr.Username, @@ -115,7 +115,8 @@ func TestEmitExecAuditEvent(t *testing.T) { require.Equal(t, tt.outCommand, execEvent.Command) require.Equal(t, tt.outCode, execEvent.ExitCode) require.Equal(t, expectedMeta, execEvent.UserMetadata) - require.Equal(t, "testHostUUID", execEvent.ServerID) + require.Equal(t, "123", execEvent.ServerID) + require.Equal(t, "abc", execEvent.ForwardedBy) require.Equal(t, expectedHostname, execEvent.ServerHostname) require.Equal(t, "testNamespace", execEvent.ServerNamespace) require.Equal(t, "xxx", execEvent.SessionID) diff --git a/lib/srv/forward/sshserver.go b/lib/srv/forward/sshserver.go index b310dd3557af5..90423046ccb88 100644 --- a/lib/srv/forward/sshserver.go +++ b/lib/srv/forward/sshserver.go @@ -1446,7 +1446,7 @@ func (s *Server) handleSubsystem(ctx context.Context, ch ssh.Channel, req *ssh.R } // if SFTP was requested, check that - if subsystem.subsytemName == teleport.SFTPSubsystem { + if subsystem.subsystemName == teleport.SFTPSubsystem { err := serverContext.CheckSFTPAllowed(s.sessionRegistry) if err != nil { s.EmitAuditEvent(context.WithoutCancel(ctx), &apievents.SFTP{ @@ -1456,7 +1456,7 @@ func (s *Server) handleSubsystem(ctx context.Context, ch ssh.Channel, req *ssh.R Time: time.Now(), }, UserMetadata: serverContext.Identity.GetUserMetadata(), - ServerMetadata: serverContext.GetServerMetadata(), + ServerMetadata: serverContext.GetServer().TargetMetadata(), Error: err.Error(), }) return trace.Wrap(err) @@ -1467,7 +1467,7 @@ func (s *Server) handleSubsystem(ctx context.Context, ch ssh.Channel, req *ssh.R err = subsystem.Start(ctx, ch) if err != nil { serverContext.SendSubsystemResult(srv.SubsystemResult{ - Name: subsystem.subsytemName, + Name: subsystem.subsystemName, Err: trace.Wrap(err), }) return trace.Wrap(err) @@ -1477,7 +1477,7 @@ func (s *Server) handleSubsystem(ctx context.Context, ch ssh.Channel, req *ssh.R go func() { err := subsystem.Wait() serverContext.SendSubsystemResult(srv.SubsystemResult{ - Name: subsystem.subsytemName, + Name: subsystem.subsystemName, Err: trace.Wrap(err), }) }() diff --git a/lib/srv/forward/subsystem.go b/lib/srv/forward/subsystem.go index 0002353f869db..043fa3d81eda2 100644 --- a/lib/srv/forward/subsystem.go +++ b/lib/srv/forward/subsystem.go @@ -37,23 +37,23 @@ type remoteSubsystem struct { log *log.Entry serverContext *srv.ServerContext - subsytemName string + subsystemName string ctx context.Context errorCh chan error } // parseRemoteSubsystem returns *remoteSubsystem which can be used to run a subsystem on a remote node. -func parseRemoteSubsystem(ctx context.Context, subsytemName string, serverContext *srv.ServerContext) *remoteSubsystem { +func parseRemoteSubsystem(ctx context.Context, subsystemName string, serverContext *srv.ServerContext) *remoteSubsystem { return &remoteSubsystem{ log: log.WithFields(log.Fields{ teleport.ComponentKey: teleport.ComponentRemoteSubsystem, teleport.ComponentFields: map[string]string{ - "name": subsytemName, + "name": subsystemName, }, }), serverContext: serverContext, - subsytemName: subsytemName, + subsystemName: subsystemName, ctx: ctx, errorCh: make(chan error, 3), } @@ -78,10 +78,10 @@ func (r *remoteSubsystem) Start(ctx context.Context, channel ssh.Channel) error // request the subsystem from the remote node. if successful, the user can // interact with the remote subsystem with stdin, stdout, and stderr. - err = session.RequestSubsystem(ctx, r.subsytemName) + err = session.RequestSubsystem(ctx, r.subsystemName) if err != nil { // emit an event to the audit log with the reason remote execution failed - r.emitAuditEvent(err) + r.emitAuditEvent(ctx, err) return trace.Wrap(err) } @@ -126,13 +126,12 @@ func (r *remoteSubsystem) Wait() error { } // emit an event to the audit log with the result of execution - r.emitAuditEvent(lastErr) + r.emitAuditEvent(r.ctx, lastErr) return lastErr } -func (r *remoteSubsystem) emitAuditEvent(err error) { - srv := r.serverContext.GetServer() +func (r *remoteSubsystem) emitAuditEvent(ctx context.Context, err error) { subsystemEvent := &apievents.Subsystem{ Metadata: apievents.Metadata{ Type: events.SubsystemEvent, @@ -142,7 +141,8 @@ func (r *remoteSubsystem) emitAuditEvent(err error) { LocalAddr: r.serverContext.RemoteClient.LocalAddr().String(), RemoteAddr: r.serverContext.RemoteClient.RemoteAddr().String(), }, - Name: r.subsytemName, + Name: r.subsystemName, + ServerMetadata: r.serverContext.GetServer().TargetMetadata(), } if err != nil { @@ -152,7 +152,7 @@ func (r *remoteSubsystem) emitAuditEvent(err error) { subsystemEvent.Code = events.SubsystemCode } - if err := srv.EmitAuditEvent(srv.Context(), subsystemEvent); err != nil { + if err := r.serverContext.GetServer().EmitAuditEvent(ctx, subsystemEvent); err != nil { r.log.WithError(err).Warn("Failed to emit subsystem audit event.") } } diff --git a/lib/srv/mock.go b/lib/srv/mock.go index 6617241680c74..dc7fa43e71ed6 100644 --- a/lib/srv/mock.go +++ b/lib/srv/mock.go @@ -246,7 +246,12 @@ func (m *mockServer) GetInfo() types.Server { } func (m *mockServer) TargetMetadata() apievents.ServerMetadata { - return apievents.ServerMetadata{} + return apievents.ServerMetadata{ + ServerID: "123", + ForwardedBy: "abc", + ServerHostname: "testHost", + ServerNamespace: "testNamespace", + } } // UseTunnel used to determine if this node has connected to this cluster diff --git a/lib/srv/regular/sftp.go b/lib/srv/regular/sftp.go index 5c07a7eab26b6..2772da15e5014 100644 --- a/lib/srv/regular/sftp.go +++ b/lib/srv/regular/sftp.go @@ -78,7 +78,7 @@ func (s *sftpSubsys) Start(ctx context.Context, Time: time.Now(), }, UserMetadata: serverCtx.Identity.GetUserMetadata(), - ServerMetadata: serverCtx.GetServerMetadata(), + ServerMetadata: serverCtx.GetServer().TargetMetadata(), Error: srv.ErrNodeFileCopyingNotPermitted.Error(), }) return srv.ErrNodeFileCopyingNotPermitted @@ -169,7 +169,7 @@ func (s *sftpSubsys) Start(ctx context.Context, defer auditPipeOut.Close() // Create common fields for events - serverMeta := serverCtx.GetServerMetadata() + serverMeta := serverCtx.GetServer().TargetMetadata() sessionMeta := serverCtx.GetSessionMetadata() userMeta := serverCtx.Identity.GetUserMetadata() connectionMeta := apievents.ConnectionMetadata{ diff --git a/lib/srv/regular/sshserver.go b/lib/srv/regular/sshserver.go index 7662765c2079e..6500637dadf6d 100644 --- a/lib/srv/regular/sshserver.go +++ b/lib/srv/regular/sshserver.go @@ -2475,7 +2475,7 @@ func (s *Server) parseSubsystemRequest(req *ssh.Request, ctx *srv.ServerContext) Time: time.Now(), }, UserMetadata: ctx.Identity.GetUserMetadata(), - ServerMetadata: ctx.GetServerMetadata(), + ServerMetadata: ctx.GetServer().TargetMetadata(), Error: err.Error(), }) return nil, trace.Wrap(err) From d4deb89b79bc7b821ddb43b5baf129cdec1d9cad Mon Sep 17 00:00:00 2001 From: Bartosz Leper Date: Wed, 13 Nov 2024 08:17:28 +0100 Subject: [PATCH 017/111] Allow TtyPlayer.stop to be called while still connecting (#48449) --- web/packages/teleport/src/lib/term/ttyPlayer.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/web/packages/teleport/src/lib/term/ttyPlayer.js b/web/packages/teleport/src/lib/term/ttyPlayer.js index b231e83c1c7ce..87153d6ade295 100644 --- a/web/packages/teleport/src/lib/term/ttyPlayer.js +++ b/web/packages/teleport/src/lib/term/ttyPlayer.js @@ -243,6 +243,10 @@ export default class TtyPlayer extends Tty { this.cancelTimeUpdate(); this._setPlayerStatus(StatusEnum.PAUSED); + if (this.webSocket.readyState !== WebSocket.OPEN) { + return; + } + const buffer = new ArrayBuffer(4); const dv = new DataView(buffer); dv.setUint8(0, messageTypePlayPause); From 8d13e4d5cdc17bc776991dce5c93e11f408944d2 Mon Sep 17 00:00:00 2001 From: Marco Dinis Date: Wed, 13 Nov 2024 10:48:58 +0000 Subject: [PATCH 018/111] Discover RDS Flow: fix mfa required check (#48878) Aurora based RDS instances (mysql or postgres) were not being correctly parsed and would cause the isMFARequired check to fail because it was lacking the protocol. This PR fixes it. --- web/packages/teleport/src/Discover/SelectResource/databases.tsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/web/packages/teleport/src/Discover/SelectResource/databases.tsx b/web/packages/teleport/src/Discover/SelectResource/databases.tsx index 1d648e91380b6..d4cf3a18332b4 100644 --- a/web/packages/teleport/src/Discover/SelectResource/databases.tsx +++ b/web/packages/teleport/src/Discover/SelectResource/databases.tsx @@ -445,8 +445,10 @@ export const DATABASES: ResourceSpec[] = [ export function getDatabaseProtocol(engine: DatabaseEngine): DbProtocol { switch (engine) { case DatabaseEngine.Postgres: + case DatabaseEngine.AuroraPostgres: return 'postgres'; case DatabaseEngine.MySql: + case DatabaseEngine.AuroraMysql: return 'mysql'; } From e3e9c389d037e1d7f47090be8cc3ad5c649d9d51 Mon Sep 17 00:00:00 2001 From: "teleport-post-release-automation[bot]" <128860004+teleport-post-release-automation[bot]@users.noreply.github.com> Date: Wed, 13 Nov 2024 13:07:15 +0000 Subject: [PATCH 019/111] [auto] docs: Update version to v15.4.22 (#48871) Co-authored-by: GitHub --- docs/config.json | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/docs/config.json b/docs/config.json index 24be737920706..57d50dc4aab4e 100644 --- a/docs/config.json +++ b/docs/config.json @@ -179,18 +179,18 @@ "teleport": { "git": "api/14.0.0-gd1e081e", "major_version": "15", - "version": "15.4.21", + "version": "15.4.22", "url": "teleport.example.com", "golang": "1.21", "plugin": { - "version": "15.4.21" + "version": "15.4.22" }, "helm_repo_url": "https://charts.releases.teleport.dev", - "latest_oss_docker_image": "public.ecr.aws/gravitational/teleport-distroless:15.4.21", - "latest_oss_debug_docker_image": "public.ecr.aws/gravitational/teleport-distroless-debug:15.4.21", - "latest_ent_docker_image": "public.ecr.aws/gravitational/teleport-ent-distroless:15.4.21", - "latest_ent_debug_docker_image": "public.ecr.aws/gravitational/teleport-ent-distroless-debug:15.4.21", - "teleport_install_script_url": "https://cdn.teleport.dev/install-v15.4.21.sh" + "latest_oss_docker_image": "public.ecr.aws/gravitational/teleport-distroless:15.4.22", + "latest_oss_debug_docker_image": "public.ecr.aws/gravitational/teleport-distroless-debug:15.4.22", + "latest_ent_docker_image": "public.ecr.aws/gravitational/teleport-ent-distroless:15.4.22", + "latest_ent_debug_docker_image": "public.ecr.aws/gravitational/teleport-ent-distroless-debug:15.4.22", + "teleport_install_script_url": "https://cdn.teleport.dev/install-v15.4.22.sh" }, "terraform": { "version": "1.0.0" From 6fbc19704fab71f07ca67d8b85251605b7e07e55 Mon Sep 17 00:00:00 2001 From: Michael Date: Wed, 13 Nov 2024 10:49:15 -0600 Subject: [PATCH 020/111] Fix not found error for web ssh session recordings (#48857) This adds an error message to the web UI if a session recording isn't found ![Screenshot 2024-11-12 at 1 39 48PM](https://github.com/user-attachments/assets/ef6eb916-c764-42bd-94fd-bf3828435b84) Fixes: https://github.com/gravitational/teleport/issues/48395 --- web/packages/teleport/src/Player/DesktopPlayer.tsx | 2 +- web/packages/teleport/src/Player/SshPlayer.tsx | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/web/packages/teleport/src/Player/DesktopPlayer.tsx b/web/packages/teleport/src/Player/DesktopPlayer.tsx index 1e2c1b3a1e2d9..a0bace9583951 100644 --- a/web/packages/teleport/src/Player/DesktopPlayer.tsx +++ b/web/packages/teleport/src/Player/DesktopPlayer.tsx @@ -69,7 +69,7 @@ export const DesktopPlayer = ({ clusterId, }); - const isError = playerStatus === StatusEnum.ERROR; + const isError = playerStatus === StatusEnum.ERROR || statusText !== ''; const isLoading = playerStatus === StatusEnum.LOADING; const isPlaying = playerStatus === StatusEnum.PLAYING; const isComplete = isError || playerStatus === StatusEnum.COMPLETE; diff --git a/web/packages/teleport/src/Player/SshPlayer.tsx b/web/packages/teleport/src/Player/SshPlayer.tsx index 878bc1c230caa..ce70754ec6f68 100644 --- a/web/packages/teleport/src/Player/SshPlayer.tsx +++ b/web/packages/teleport/src/Player/SshPlayer.tsx @@ -34,7 +34,11 @@ export default function Player({ sid, clusterId, durationMs }) { clusterId, sid ); - const isError = playerStatus === StatusEnum.ERROR; + + // statusText is currently only set when an error happens, so for now we can assume + // if it is not empty, an error occured (even if the player is in COMPLETE state, which gets + // set on close) + const isError = playerStatus === StatusEnum.ERROR || statusText !== ''; const isLoading = playerStatus === StatusEnum.LOADING; const isPlaying = playerStatus === StatusEnum.PLAYING; const isComplete = isError || playerStatus === StatusEnum.COMPLETE; From 942382159ddd8d2ab9b941175b988d67fdbf7440 Mon Sep 17 00:00:00 2001 From: Marco Dinis Date: Wed, 13 Nov 2024 18:21:31 +0000 Subject: [PATCH 021/111] NodeJoin Script: improve clean up message when using package manager (#48875) When re-running the node join script, the script refused to continue because it detected teleport already on the system. The script had a couple of instructions that removed teleport from the system. One of the steps is the removal of the teleport binary. However, it would recommend the removal of the binaries even for systems that had package managers. This fails because, even if the binaries (teleport, tsh, tctl) are removed, the package manager will still refuse to install teleport again because it was not removed from the package manager database. This PR changes the script, so that if it detects a package manager, it will instead ask the user to remove the teleport package and not directly removing the binaries. --- lib/web/scripts/node-join/install.sh | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/lib/web/scripts/node-join/install.sh b/lib/web/scripts/node-join/install.sh index f1d82b2b3be58..3151fb5c89885 100755 --- a/lib/web/scripts/node-join/install.sh +++ b/lib/web/scripts/node-join/install.sh @@ -230,15 +230,33 @@ log_important() { log_cleanup_message() { log_only "This script does not overwrite any existing settings or Teleport installations." log_only "Please clean up by running any of the following steps as necessary:" + if is_using_systemd; then + log_only "- stop teleport's service" + log_only " - systemctl stop teleport" + fi log_only "- stop any running Teleport processes" log_only " - pkill -f teleport" log_only "- remove any data under ${TELEPORT_DATA_DIR}, along with the directory itself" log_only " - rm -rf ${TELEPORT_DATA_DIR}" log_only "- remove any configuration at ${TELEPORT_CONFIG_PATH}" log_only " - rm -f ${TELEPORT_CONFIG_PATH}" - log_only "- remove any Teleport binaries (${TELEPORT_BINARY_LIST}) installed under ${TELEPORT_BINARY_DIR}" - for BINARY in ${TELEPORT_BINARY_LIST}; do EXAMPLE_DELETE_COMMAND+="${TELEPORT_BINARY_DIR}/${BINARY} "; done - log_only " - rm -f ${EXAMPLE_DELETE_COMMAND}" + if check_exists apt; then + log_only "- remove teleport package" + log_only " - apt remove teleport" + elif check_exists yum; then + log_only "- remove teleport package" + log_only " - yum remove teleport" + elif check_exists dnf; then + log_only "- remove teleport package" + log_only " - dnf remove teleport" + elif check_exists zypper; then + log_only "- remove teleport package" + log_only " - zypper remove teleport" + else + log_only "- remove any Teleport binaries (${TELEPORT_BINARY_LIST}) installed under ${TELEPORT_BINARY_DIR}" + for BINARY in ${TELEPORT_BINARY_LIST}; do EXAMPLE_DELETE_COMMAND+="${TELEPORT_BINARY_DIR}/${BINARY} "; done + log_only " - rm -f ${EXAMPLE_DELETE_COMMAND}" + fi if is_macos_host; then log_only "- unload and remove Teleport launchd config ${LAUNCHD_CONFIG_PATH}/${LAUNCHD_PLIST_FILE}" log_only " - launchctl unload ${LAUNCHD_CONFIG_PATH}/${LAUNCHD_PLIST_FILE}" From c273b9497c3465bd8aa72b26ed44fdd5fe12e659 Mon Sep 17 00:00:00 2001 From: Steven Martin Date: Wed, 13 Nov 2024 13:25:37 -0500 Subject: [PATCH 022/111] Update Examples README.md (#48889) --- examples/README.md | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/examples/README.md b/examples/README.md index 0fed255d5c9cf..9563f5e06bf6d 100644 --- a/examples/README.md +++ b/examples/README.md @@ -1,9 +1,5 @@ # Examples -## Configuration Examples - -* [local-cluster](https://github.com/gravitational/teleport/tree/master/examples/local-cluster) : Sample configuration of a 3-node Teleport cluster using just a single machine - ## Daemon Configuration * [systemd](https://github.com/gravitational/teleport/tree/master/examples/systemd) : Service file for systemd @@ -13,7 +9,6 @@ * [AWS: CloudFormation](https://github.com/gravitational/teleport/tree/master/examples/aws/cloudformation#aws-cloudformation-based-provisioning-example) : CloudFormation templates as an example of how to setup HA Teleport in AWS using our AMIs. * [AWS: Terraform](https://github.com/gravitational/teleport/tree/master/examples/aws/terraform#terraform-based-provisioning-example-amazon-single-ami) : Terraform specifies example provisioning script for Teleport auth, proxy and nodes in HA mode. -* [AWS: EKS. External Link](https://aws.amazon.com/blogs/opensource/authenticating-eks-github-credentials-teleport/) ## Kubernetes - Helm Charts @@ -33,4 +28,4 @@ ### Trusted Cluster * [Trusted Cluster Resource](https://github.com/gravitational/teleport/blob/master/examples/resources/trusted_cluster.yaml) -* [Trusted Cluster Resource - With RBAC (Enterprise Only)](https://github.com/gravitational/teleport/blob/master/examples/resources/trusted_cluster_enterprise.yaml) \ No newline at end of file +* [Trusted Cluster Resource - With RBAC (Enterprise Only)](https://github.com/gravitational/teleport/blob/master/examples/resources/trusted_cluster_enterprise.yaml) From c79001979a5cd9da7bb42e707af68c8b4fca3e79 Mon Sep 17 00:00:00 2001 From: Hugo Shaka Date: Wed, 13 Nov 2024 15:54:50 -0500 Subject: [PATCH 023/111] docs: update onelogin guide images (#48697) --- docs/img/sso/onelogin/onelogin-saml-1a.png | Bin 144306 -> 121534 bytes docs/img/sso/onelogin/teleport.png | Bin 84790 -> 5358 bytes docs/img/sso/onelogin/teleportlogo@2x.png | Bin 28259 -> 12367 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/img/sso/onelogin/onelogin-saml-1a.png b/docs/img/sso/onelogin/onelogin-saml-1a.png index 61fe83b36f4b01806d8adcc711effc137f69b962..9de9aa229b52266ba271cd567d29ebf97201dd3e 100644 GIT binary patch literal 121534 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

X>&uVw{jXI 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 bwbmEH12-QUetBK<|0j-ne@ppW;MIQu6P{4} literal 144306 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 diff --git a/docs/img/sso/onelogin/teleport.png b/docs/img/sso/onelogin/teleport.png index a8e29af374473263317e44e30f4f41102791236c..244c59b0d8260e7e10d2f6ea1ee453347dcc6c5f 100644 GIT binary patch literal 5358 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

h=2^Ygm3VL5dcY| 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 diff --git a/docs/img/sso/onelogin/teleportlogo@2x.png b/docs/img/sso/onelogin/teleportlogo@2x.png index 7d83ede01ca40809bea008b061bba954cd092e00..c019d21091095be30f922eb415bfce713c3676ff 100644 GIT binary patch literal 12367 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 Date: Wed, 13 Nov 2024 19:44:50 -0700 Subject: [PATCH 024/111] docs: update FAQ (#48938) Re-order some of the questions to move related topics closer together, and add a new FAQ that explains how roles are embedded in certificates. --- docs/pages/core-concepts.mdx | 28 ++++++------- docs/pages/faq.mdx | 80 +++++++++++++++++++++--------------- 2 files changed, 62 insertions(+), 46 deletions(-) diff --git a/docs/pages/core-concepts.mdx b/docs/pages/core-concepts.mdx index c7afd7338db53..011377dbe4285 100644 --- a/docs/pages/core-concepts.mdx +++ b/docs/pages/core-concepts.mdx @@ -39,7 +39,7 @@ Read our guides to how [authorization](reference/architecture/authorization.mdx) ### Teleport Proxy Service The **Teleport Proxy Service** allows for secure access to resources in your -infrastructure from the public internet without the need for a VPN. +infrastructure from the public internet without the need for a VPN. It establishes reverse tunnels to the **Teleport Auth Service** and **Teleport Services**, which can run in private networks. This means that, in the Proxy @@ -47,7 +47,7 @@ Service's minimal configuration, you can expose only port `443` to the internet and run the rest of your infrastructure in private networks. You can also configure clients to bypass Proxy Service instances and connect to -resources with Teleport-issued certificates directly. +resources with Teleport-issued certificates directly. Read our guide to [how the Teleport Proxy Service works](reference/architecture/proxy.mdx). @@ -73,7 +73,7 @@ Service](./enroll-resources/application-access/introduction.mdx). ### Teleport Database Service Proxies TCP traffic in the native protocols of popular databases, including -PostgreSQL and MySQL. +PostgreSQL and MySQL. Read more about the [Teleport Database Service](./enroll-resources/database-access/database-access.mdx). @@ -92,7 +92,7 @@ Proxies HTTP traffic to the Kubernetes API server. Read more about the [Teleport Kubernetes Service](./enroll-resources/kubernetes-access/introduction.mdx) -### Teleport SSH Service +### Teleport SSH Service An SSH server implementation that allows users to execute commands on remote machines while taking advantage of Teleport's built-in access controls, @@ -104,7 +104,7 @@ Read more about the [Teleport SSH Service](./enroll-resources/server-access/intr Allows machines and services—called bot users—to communicate securely with resources in your infrastructure by automatically provisioning and renewing -credentials. +credentials. Bot users can connect to resources in your infrastructure without relying on static credentials (e.g., certificates and private keys) that become more @@ -131,7 +131,7 @@ on GitHub. You can find a detailed comparison of the features available in each Teleport edition in [Frequently Asked -Questions](./faq.mdx#how-is-open-source-different-from-enterprise). +Questions](./faq.mdx#how-is-teleports-community-edition-different-from-enterprise). ### Teleport Enterprise Cloud @@ -193,7 +193,7 @@ Ultimately, a Teleport user is the subject of a certificate issued by the **Teleport Auth Service**. The Auth Service verifies that a client or service attempting to connect has a valid Teleport-issued certificate. It then uses the subject of the certificate—including its username and Teleport roles—to -authorize the user. +authorize the user. Read more about [local users](reference/access-controls/authentication.mdx) and how [SSO authentication works in Teleport](admin-guides/access-controls/sso/sso.mdx). @@ -201,21 +201,21 @@ authentication works in Teleport](admin-guides/access-controls/sso/sso.mdx). ### Authentication connector An authentication connector is a **configuration resource** that allows users to -authenticate to Teleport via a Single Sign-On (SSO) solution. +authenticate to Teleport via a Single Sign-On (SSO) solution. See our guide to [Authentication Options](reference/access-controls/authentication.mdx). ### Trusted clusters -Teleport allows you to configure a **trusted cluster relationship** between a -**root cluster** and one or more **leaf clusters** that trust the root cluster -certificate authority. The trust relationship between the root and leaf clusters -enables users authenticated in the root cluster to access resources +Teleport allows you to configure a **trusted cluster relationship** between a +**root cluster** and one or more **leaf clusters** that trust the root cluster +certificate authority. The trust relationship between the root and leaf clusters +enables users authenticated in the root cluster to access resources in leaf cluster. The root and leaf cluster operate independently with their own users, roles, and resources, but the trust relationship allows users with certain roles in the root cluster to be mapped to roles and permissions defined in the leaf cluster. For more information about how to configure a trust relationship between clusters, -see [Configure Trusted Clusters](admin-guides/management/admin/trustedclusters.mdx). -For an overview of the architecture used in a trusted cluster relationship, see +see [Configure Trusted Clusters](admin-guides/management/admin/trustedclusters.mdx). +For an overview of the architecture used in a trusted cluster relationship, see [Trusted Cluster Architecture](reference/architecture/trustedclusters.mdx). diff --git a/docs/pages/faq.mdx b/docs/pages/faq.mdx index 20135fb639467..2c9bd58aa7d8a 100644 --- a/docs/pages/faq.mdx +++ b/docs/pages/faq.mdx @@ -11,32 +11,24 @@ Fortune 500 companies. It has been through several security audits from nationally recognized technology security companies, so we are comfortable with the stability of Teleport from a security perspective. -## Can Teleport be deployed in agentless mode? - -Yes. All Teleport services support agentless mode, where the service proxies -traffic to an upstream infrastructure resource not available on `localhost`. +## Can I connect to nodes behind a firewall? -With Teleport in agentless mode, you can easily control access to SSH servers, -Kubernetes clusters, desktops, databases, and internal applications without -running any additional software on your servers. Agentless mode supports session -recordings and audit logs for deep understanding into user behavior. +Yes, Teleport supports reverse SSH tunnels out of the box. To configure +behind-firewall clusters, see [Configure Trusted Clusters](admin-guides/management/admin/trustedclusters.mdx). -For capabilities such as kernel-level logging and user provisioning, we -recommend Teleport as a drop in replacement for OpenSSH. Since Teleport replaces -the OpenSSH agent while preserving OpenSSH's functionality, you get more -functionality without a net addition of an agent on your system. +## How is Teleport's Community Edition different from Enterprise? -## Can I use OpenSSH with a Teleport cluster? +Teleport provides two editions: -Yes, this question comes up often and is related to the previous one. Take a -look at [Using OpenSSH Guide](enroll-resources/server-access/openssh/openssh-agentless.mdx). +- Teleport Enterprise +- Teleport Community Edition -## Can I connect to nodes behind a firewall? +Here is a detailed breakdown of the differences between Teleport's editions. -Yes, Teleport supports reverse SSH tunnels out of the box. To configure -behind-firewall clusters, see [Configure Trusted Clusters](admin-guides/management/admin/trustedclusters.mdx). +(!docs/pages/includes/edition-comparison.mdx!) ## Should we use Teleport Enterprise or Teleport Community Edition for connecting resources to our Teleport cluster? + (!docs/pages/includes/ent-vs-community-faq.mdx!) ## Can individual agents create reverse tunnels to the Proxy Service without creating a new cluster? @@ -54,6 +46,26 @@ Yes, Teleport supports tunnel multiplexing on a single port. Set the setting in the `proxy_service` configuration. Teleport will automatically use multiplexing with that configuration. +## Can Teleport be deployed in agentless mode? + +Yes. All Teleport services support agentless mode, where the service proxies +traffic to an upstream infrastructure resource not available on `localhost`. + +With Teleport in agentless mode, you can easily control access to SSH servers, +Kubernetes clusters, desktops, databases, and internal applications without +running any additional software on your servers. Agentless mode supports session +recordings and audit logs for deep understanding into user behavior. + +For capabilities such as kernel-level logging and user provisioning, we +recommend Teleport as a drop in replacement for OpenSSH. Since Teleport replaces +the OpenSSH agent while preserving OpenSSH's functionality, you get more +functionality without a net addition of an agent on your system. + +## Can I use OpenSSH with a Teleport cluster? + +Yes, this question comes up often and is related to the previous one. Take a +look at [Using OpenSSH Guide](enroll-resources/server-access/openssh/openssh-agentless.mdx). + ## Can I copy files from one Teleport node to another? Yes, Teleport supports [Headless WebAuthn authentication](admin-guides/access-controls/guides/headless.mdx), @@ -65,7 +77,7 @@ are not logged in to Teleport or may not have access to a browser. If your host machine is joined to an Active Directory domain, you might find user lookups take a lot longer than you expect. The number of Active Directory accounts that must be scanned to perform a user lookup can cause tsh to hang waiting to get information about the current user. -To fix this issue, you can use environment variables to set default account information for your +To fix this issue, you can use environment variables to set default account information for your Teleport user. If you are experiencing long lookup times on Windows, do the following: - Either set the `TELEPORT_USER` environment variable or set the `--user` flag to the name of your Teleport user. @@ -75,18 +87,6 @@ Teleport user. If you are experiencing long lookup times on Windows, do the foll You can set these environment variables globally in Windows so that you don't have to set them every time you run `tsh`. -## How is Open Source different from Enterprise? - -Teleport provides three editions: - -- Teleport Enterprise -- Teleport Enterprise Cloud -- Teleport Community Edition - -Here is a detailed breakdown of the differences between Teleport's editions. - -(!docs/pages/includes/edition-comparison.mdx!) - ## Which version of Teleport is supported? Teleport releases a new major version approximately every 4 months, and provides @@ -121,6 +121,19 @@ Please refer to our [Networking](./reference/networking.mdx) guide. Teleport offers this feature for the Enterprise (Cloud) and Enterprise (Self-Hosted) versions of Teleport. +## Why do changes to a user's role set only take effect on the log next login? + +A Teleport user's assigned roles are embedded in the client certificate they +receive upon logging on. This certificate remains valid and can be used until +its expiry, even if the user's role set has changed. + +To get a new certificate with the new role set, the user will need to log out +and log back in. + +Revocation of Teleport access should be done with Teleport's +[session and identity locks](./admin-guides/access-controls/guides/locking.mdx), +not by removing roles. + ## Does Teleport support provisioning users via SCIM? Teleport supports [SCIM](https://scim.cloud/) provisioning for Okta via the @@ -144,7 +157,10 @@ Service and Auth Service, as well as agents running other Teleport Services. Teleport requires a minimum of TLS version 1.2. -This means that when applications and clients establish or accept TLS connections with Teleport processes, they must use TLS 1.2 or a higher protocol version. Teleport enforces this requirement in all operations that involve TLS connections. +This means that when applications and clients establish or accept TLS +connections with Teleport processes, they must use TLS 1.2 or a higher protocol +version. Teleport enforces this requirement in all operations that involve TLS +connections. ## Can I suppress warnings about available upgrades? From 8de51c6fd7ee8e0dccf19b6f6098a68722062f9d Mon Sep 17 00:00:00 2001 From: Tiago Silva Date: Thu, 14 Nov 2024 15:50:32 +0000 Subject: [PATCH 025/111] feat(helm-teleport-cluster): allow to override enterprise license name (#48980) Signed-off-by: Guntis Karulis Signed-off-by: Tiago Silva Co-authored-by: Guntis Karulis --- .../helm-reference/teleport-cluster.mdx | 16 +++++++++++++ .../.lint/auth-enterprise-license.yaml | 4 ++++ .../templates/auth/deployment.yaml | 2 +- .../templates/auth/predeploy_job.yaml | 2 +- .../tests/auth_deployment_test.yaml | 24 +++++++++++++++++++ .../chart/teleport-cluster/values.schema.json | 5 ++++ examples/chart/teleport-cluster/values.yaml | 3 ++- 7 files changed, 53 insertions(+), 3 deletions(-) create mode 100644 examples/chart/teleport-cluster/.lint/auth-enterprise-license.yaml diff --git a/docs/pages/reference/helm-reference/teleport-cluster.mdx b/docs/pages/reference/helm-reference/teleport-cluster.mdx index 8708ba1a9e36e..5c1caa908a96c 100644 --- a/docs/pages/reference/helm-reference/teleport-cluster.mdx +++ b/docs/pages/reference/helm-reference/teleport-cluster.mdx @@ -606,6 +606,22 @@ $ kubectl --namespace teleport create secret generic license --from-file=/path/t enterprise: true ``` +### `licenseSecretName` + +| Type | Default value | +|----------|----------------| +| `string` | `license` | + +`licenseSecretName` controls Kubernetes secret name for the Enterprise license. + +By using this value you will update the Kubernetes volume specification to mount Secret based volume to the container using custom name. + +`values.yaml` example: + + ```yaml + licenseSecretName: enterprise-license + ``` + ## `installCRDs` | Type | Default value | diff --git a/examples/chart/teleport-cluster/.lint/auth-enterprise-license.yaml b/examples/chart/teleport-cluster/.lint/auth-enterprise-license.yaml new file mode 100644 index 0000000000000..a86c5261469fc --- /dev/null +++ b/examples/chart/teleport-cluster/.lint/auth-enterprise-license.yaml @@ -0,0 +1,4 @@ +clusterName: helm-lint +enterprise: true +licenseSecretName: enterprise-license + diff --git a/examples/chart/teleport-cluster/templates/auth/deployment.yaml b/examples/chart/teleport-cluster/templates/auth/deployment.yaml index 7dc0901694fdc..aee44b69befe3 100644 --- a/examples/chart/teleport-cluster/templates/auth/deployment.yaml +++ b/examples/chart/teleport-cluster/templates/auth/deployment.yaml @@ -266,7 +266,7 @@ spec: {{- if $auth.enterprise }} - name: license secret: - secretName: "license" + secretName: {{ $auth.licenseSecretName | quote }} {{- end }} {{- if and ($auth.gcp.credentialSecretName) (eq $auth.chartMode "gcp") }} - name: gcp-credentials diff --git a/examples/chart/teleport-cluster/templates/auth/predeploy_job.yaml b/examples/chart/teleport-cluster/templates/auth/predeploy_job.yaml index 860c790645fa4..e75c0f20a55e8 100644 --- a/examples/chart/teleport-cluster/templates/auth/predeploy_job.yaml +++ b/examples/chart/teleport-cluster/templates/auth/predeploy_job.yaml @@ -84,7 +84,7 @@ spec: {{- if .Values.enterprise }} - name: license secret: - secretName: "license" + secretName: {{ .Values.licenseSecretName | quote }} {{- end }} {{- if and (.Values.gcp.credentialSecretName) (eq .Values.chartMode "gcp") }} - name: gcp-credentials diff --git a/examples/chart/teleport-cluster/tests/auth_deployment_test.yaml b/examples/chart/teleport-cluster/tests/auth_deployment_test.yaml index 6f158540d23a7..49946a9500085 100644 --- a/examples/chart/teleport-cluster/tests/auth_deployment_test.yaml +++ b/examples/chart/teleport-cluster/tests/auth_deployment_test.yaml @@ -215,6 +215,30 @@ tests: secret: secretName: license + - it: should use enterprise image and mount license with custom secret name when enterprise is set in values + template: auth/deployment.yaml + set: + clusterName: helm-lint.example.com + enterprise: true + licenseSecretName: enterprise-license + teleportVersionOverride: 12.2.1 + asserts: + - equal: + path: spec.template.spec.containers[0].image + value: public.ecr.aws/gravitational/teleport-ent-distroless:12.2.1 + - contains: + path: spec.template.spec.containers[0].volumeMounts + content: + mountPath: /var/lib/license + name: "license" + readOnly: true + - contains: + path: spec.template.spec.volumes + content: + name: license + secret: + secretName: enterprise-license + - it: should use OSS image and not mount license when enterprise is not set in values template: auth/deployment.yaml set: diff --git a/examples/chart/teleport-cluster/values.schema.json b/examples/chart/teleport-cluster/values.schema.json index 2c4a6da0c5e73..6e3796ca8c9e5 100644 --- a/examples/chart/teleport-cluster/values.schema.json +++ b/examples/chart/teleport-cluster/values.schema.json @@ -286,6 +286,11 @@ "type": "boolean", "default": false }, + "licenseSecretName": { + "$id": "#/properties/licenseSecretName", + "type": "string", + "default": "license" + }, "installCRDs": { "$id": "#/properties/installCRDs", "type": "boolean" diff --git a/examples/chart/teleport-cluster/values.yaml b/examples/chart/teleport-cluster/values.yaml index 526f1ed85518b..bd34b5c57cae4 100644 --- a/examples/chart/teleport-cluster/values.yaml +++ b/examples/chart/teleport-cluster/values.yaml @@ -245,7 +245,8 @@ acmeURI: "" # You will need to download your Enterprise license from the Teleport dashboard and create a secret to use this: # kubectl -n ${TELEPORT_NAMESPACE?} create secret generic license --from-file=/path/to/downloaded/license.pem enterprise: false - +# Override default Enterprise license name +licenseSecretName: "license" # CRDs are installed by default when the operator is enabled. This manual override allows to disable CRD installation # when deploying multiple releases in the same cluster. # installCRDs: From b6cd1dd20a83c23109af1962c3491b07d2eeb754 Mon Sep 17 00:00:00 2001 From: Tiago Silva Date: Thu, 14 Nov 2024 17:04:32 +0000 Subject: [PATCH 026/111] [kube] allow requests with clusters with seperate mode (#48967) Partial backport of #46779 Signed-off-by: Tiago Silva --- lib/client/api.go | 3 --- 1 file changed, 3 deletions(-) diff --git a/lib/client/api.go b/lib/client/api.go index 4337bcd241632..81a482072617c 100644 --- a/lib/client/api.go +++ b/lib/client/api.go @@ -5313,9 +5313,6 @@ func parseMFAMode(in string) (wancli.AuthenticatorAttachment, error) { // NewKubernetesServiceClient connects to the proxy and returns an authenticated gRPC // client to the Kubernetes service. func (tc *TeleportClient) NewKubernetesServiceClient(ctx context.Context, clusterName string) (kubeproto.KubeServiceClient, error) { - if !tc.TLSRoutingEnabled { - return nil, trace.BadParameter("kube service is not supported if TLS routing is not enabled") - } // get tlsConfig to dial to proxy. tlsConfig, err := tc.LoadTLSConfig() if err != nil { From f90bacd1a33b5adf681dd16f08c8a2c117a28b37 Mon Sep 17 00:00:00 2001 From: rosstimothy <39066650+rosstimothy@users.noreply.github.com> Date: Thu, 14 Nov 2024 13:33:00 -0500 Subject: [PATCH 027/111] Improve backoff on host uuid file creation contention (#48903) (#48974) Aims to reduce flakiness in tests by using a linear backoff during contention instead of sleeping for a constant amount of time. The goal is to eliminate failures in CI while not causing any additional backoff than needed in real life scenarios. --- lib/utils/hostid/hostid_unix.go | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/lib/utils/hostid/hostid_unix.go b/lib/utils/hostid/hostid_unix.go index b5334e641c232..df91eec76b83d 100644 --- a/lib/utils/hostid/hostid_unix.go +++ b/lib/utils/hostid/hostid_unix.go @@ -27,6 +27,7 @@ import ( "github.com/google/uuid" "github.com/gravitational/trace" + "github.com/gravitational/teleport/api/utils/retryutils" "github.com/gravitational/teleport/lib/utils" ) @@ -49,6 +50,16 @@ func ReadOrCreateFile(dataDir string) (string, error) { hostUUIDFileLock := GetPath(dataDir) + ".lock" const iterationLimit = 3 + backoff, err := retryutils.NewRetryV2(retryutils.RetryV2Config{ + First: 100 * time.Millisecond, + Driver: retryutils.NewLinearDriver(100 * time.Millisecond), + Max: time.Second, + Jitter: retryutils.NewFullJitter(), + }) + if err != nil { + return "", trace.Wrap(err) + } + for i := 0; i < iterationLimit; i++ { if read, err := ReadFile(dataDir); err == nil { return read, nil @@ -57,7 +68,7 @@ func ReadOrCreateFile(dataDir string) (string, error) { } // Checking error instead of the usual uuid.New() in case uuid generation - // fails due to not enough randomness. It's been known to happen happen when + // fails due to not enough randomness. It's been known to happen when // Teleport starts very early in the node initialization cycle and /dev/urandom // isn't ready yet. rawID, err := uuid.NewRandom() @@ -91,12 +102,14 @@ func ReadOrCreateFile(dataDir string) (string, error) { id, err := writeFile(rawID.String()) if err != nil { if errors.Is(err, utils.ErrUnsuccessfulLockTry) { - time.Sleep(100 * time.Millisecond) + backoff.Inc() + <-backoff.After() continue } return "", trace.Wrap(err) } + backoff.Reset() return id, nil } From 462dc9b336bec85c0505acd933d3b1096e0bd6c6 Mon Sep 17 00:00:00 2001 From: Erik Tate Date: Thu, 14 Nov 2024 15:33:52 -0500 Subject: [PATCH 028/111] adding missing GID value when fetching Hostuser (#48456) --- integration/hostuser_test.go | 22 ++++++++++++++++++++++ lib/srv/usermgmt.go | 1 + 2 files changed, 23 insertions(+) diff --git a/integration/hostuser_test.go b/integration/hostuser_test.go index fca40cc9f8481..66e5dee2114c9 100644 --- a/integration/hostuser_test.go +++ b/integration/hostuser_test.go @@ -499,6 +499,28 @@ func TestRootHostUsers(t *testing.T) { require.NoError(t, err) require.False(t, hasExpirations) }) + + t.Run("Test migrate unmanaged user", func(t *testing.T) { + t.Cleanup(func() { cleanupUsersAndGroups([]string{testuser}, []string{types.TeleportKeepGroup}) }) + + users := srv.NewHostUsers(context.Background(), presence, "host_uuid") + _, err := host.UserAdd(testuser, nil, "", "", "") + require.NoError(t, err) + + closer, err := users.UpsertUser(testuser, services.HostUsersInfo{Mode: types.CreateHostUserMode_HOST_USER_MODE_KEEP, Groups: []string{types.TeleportKeepGroup}}) + require.NoError(t, err) + require.Nil(t, closer) + + u, err := user.Lookup(testuser) + require.NoError(t, err) + + gids, err := u.GroupIds() + require.NoError(t, err) + + keepGroup, err := user.LookupGroup(types.TeleportKeepGroup) + require.NoError(t, err) + require.Contains(t, gids, keepGroup.Gid) + }) } type hostUsersBackendWithExp struct { diff --git a/lib/srv/usermgmt.go b/lib/srv/usermgmt.go index f5b3bd187c690..6da3b87eca912 100644 --- a/lib/srv/usermgmt.go +++ b/lib/srv/usermgmt.go @@ -672,6 +672,7 @@ func (u *HostUserManagement) getHostUser(username string) (*HostUser, error) { return &HostUser{ Name: username, UID: usr.Uid, + GID: usr.Gid, Home: usr.HomeDir, Groups: groups, }, trace.NewAggregate(groupErrs...) From 879426a708c9357df96cef4aebbee53a566171b3 Mon Sep 17 00:00:00 2001 From: Gavin Frazar Date: Thu, 14 Nov 2024 12:41:49 -0800 Subject: [PATCH 029/111] add info to auto upgrade version fetch error (#48853) --- lib/automaticupgrades/version/basichttp.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/automaticupgrades/version/basichttp.go b/lib/automaticupgrades/version/basichttp.go index 849ddc86108df..29bea8e325861 100644 --- a/lib/automaticupgrades/version/basichttp.go +++ b/lib/automaticupgrades/version/basichttp.go @@ -47,7 +47,7 @@ func (b *basicHTTPVersionClient) Get(ctx context.Context) (string, error) { versionURL := b.baseURL.JoinPath(constants.VersionPath) body, err := b.client.GetContent(ctx, *versionURL) if err != nil { - return "", trace.Wrap(err) + return "", trace.Wrap(err, "failed to get version from %s", versionURL) } response := string(body) if response == constants.NoVersion { From 652661149812d71f39a8f4795265ddfdb501f24d Mon Sep 17 00:00:00 2001 From: Zac Bergquist Date: Thu, 14 Nov 2024 15:04:48 -0700 Subject: [PATCH 030/111] Improve troubleshooting for LDAP authentication errors (#48947) This introduces two small changes: 1. Use an aggregate error to make sure the original error is included along with our attempt at providing a better error message. This change should help distinguish between bad authn/invalid cert and valid authentication but insufficient user permissions. 2. Make the CRL Distribution Point in Windows certs optional. This metadata is required in the certs we issue for users to RDP, but it doesn't need to be present in the certs we use to authenticate our service account. The problem with including it when it is not needed is it causes windows to perform a revocation check and log a failure, which can lead to wasted time when troubleshooting. --- lib/auth/desktop.go | 9 ++++++-- lib/auth/windows/ldap.go | 6 ++--- lib/auth/windows/windows.go | 38 ++++++++++++++++++++----------- lib/srv/desktop/windows_server.go | 5 +++- tool/tctl/common/auth_command.go | 3 +++ 5 files changed, 42 insertions(+), 19 deletions(-) diff --git a/lib/auth/desktop.go b/lib/auth/desktop.go index f730c3e7c3610..664a055eb7846 100644 --- a/lib/auth/desktop.go +++ b/lib/auth/desktop.go @@ -71,8 +71,13 @@ func (a *Server) GenerateWindowsDesktopCert(ctx context.Context, req *proto.Wind NotAfter: a.clock.Now().UTC().Add(req.TTL.Get()), ExtraExtensions: csr.Extensions, KeyUsage: x509.KeyUsageDigitalSignature, - // CRL is required for Windows smartcard certs. - CRLDistributionPoints: []string{req.CRLEndpoint}, + } + + // CRL Distribution Points (CDP) are required for Windows smartcard certs + // for users wanting to RDP. They are not required for the service account + // cert that Teleport itself uses to authenticate for LDAP. + if req.CRLEndpoint != "" { + certReq.CRLDistributionPoints = []string{req.CRLEndpoint} } limitExceeded, err := a.desktopsLimitExceeded(ctx) diff --git a/lib/auth/windows/ldap.go b/lib/auth/windows/ldap.go index 4970500c34628..195dd14f67606 100644 --- a/lib/auth/windows/ldap.go +++ b/lib/auth/windows/ldap.go @@ -184,9 +184,9 @@ func convertLDAPError(err error) error { return trace.ConnectionProblem(err, "network error") case ldap.LDAPResultOperationsError: if strings.Contains(err.Error(), "successful bind must be completed") { - return trace.AccessDenied( - "the LDAP server did not accept Teleport's client certificate, " + - "has the Teleport CA been imported correctly?") + return trace.NewAggregate(trace.AccessDenied( + "the LDAP server did not accept Teleport's client certificate, "+ + "has the Teleport CA been imported correctly?"), err) } case ldap.LDAPResultEntryAlreadyExists: return trace.AlreadyExists("LDAP object already exists: %v", err) diff --git a/lib/auth/windows/windows.go b/lib/auth/windows/windows.go index 5b198833410b5..dcf20188469bd 100644 --- a/lib/auth/windows/windows.go +++ b/lib/auth/windows/windows.go @@ -128,19 +128,26 @@ func getCertRequest(req *GenerateCredentialsRequest) (*certRequest, error) { return nil, trace.Wrap(err) } csrPEM := pem.EncodeToMemory(&pem.Block{Type: "CERTIFICATE REQUEST", Bytes: csrBytes}) - // Note: this CRL DN may or may not be the same DN published in updateCRL. - // - // There can be multiple AD domains connected to Teleport. Each - // windows_desktop_service is connected to a single AD domain and publishes - // CRLs in it. Each service can also handle RDP connections for a different - // domain, with the assumption that some other windows_desktop_service - // published a CRL there. - crlDN := crlDN(req.ClusterName, req.LDAPConfig, req.CAType) - return &certRequest{ - csrPEM: csrPEM, - crlEndpoint: fmt.Sprintf("ldap:///%s?certificateRevocationList?base?objectClass=cRLDistributionPoint", crlDN), - keyDER: keyDER, - }, nil + cr := &certRequest{ + csrPEM: csrPEM, + keyDER: keyDER, + } + + if !req.OmitCDP { + // Note: this CRL DN may or may not be the same DN published in updateCRL. + // + // There can be multiple AD domains connected to Teleport. Each + // windows_desktop_service is connected to a single AD domain and publishes + // CRLs in it. Each service can also handle RDP connections for a different + // domain, with the assumption that some other windows_desktop_service + // published a CRL there. + crlDN := crlDN(req.ClusterName, req.LDAPConfig, req.CAType) + + // TODO(zmb3) consider making Teleport itself the CDP (via HTTP) instead of LDAP + cr.crlEndpoint = fmt.Sprintf("ldap:///%s?certificateRevocationList?base?objectClass=cRLDistributionPoint", crlDN) + } + + return cr, nil } // AuthInterface is a subset of auth.ClientI @@ -181,6 +188,11 @@ type GenerateCredentialsRequest struct { CreateUser bool // Groups are groups that user should be member of Groups []string + + // OmitCDP can be used to prevent Teleport from issuing certs with a + // CRL Distribution Point (CDP). CDPs are required in user certificates + // for RDP, but they can be omitted for certs that are used for LDAP binds. + OmitCDP bool } // GenerateWindowsDesktopCredentials generates a private key / certificate pair for the given diff --git a/lib/srv/desktop/windows_server.go b/lib/srv/desktop/windows_server.go index d80c0dd2470b6..44e2ebd148d9a 100644 --- a/lib/srv/desktop/windows_server.go +++ b/lib/srv/desktop/windows_server.go @@ -443,6 +443,7 @@ func (s *WindowsService) tlsConfigForLDAP() (*tls.Config, error) { domain: s.cfg.Domain, ttl: windowsDesktopServiceCertTTL, activeDirectorySID: s.cfg.SID, + omitCDP: true, }) if err != nil { return nil, trace.Wrap(err) @@ -1226,7 +1227,8 @@ type generateCredentialsRequest struct { // createUser specifies if Windows user should be created if missing createUser bool // groups are groups that user should be member of - groups []string + groups []string + omitCDP bool } // generateCredentials generates a private key / certificate pair for the given @@ -1254,6 +1256,7 @@ func (s *WindowsService) generateCredentials(ctx context.Context, request genera AuthClient: s.cfg.AuthClient, CreateUser: request.createUser, Groups: request.groups, + OmitCDP: request.omitCDP, }) } diff --git a/tool/tctl/common/auth_command.go b/tool/tctl/common/auth_command.go index e02632d118f02..cb7d47bcb27a3 100644 --- a/tool/tctl/common/auth_command.go +++ b/tool/tctl/common/auth_command.go @@ -79,6 +79,7 @@ type AuthCommand struct { windowsDomain string windowsPKIDomain string windowsSID string + omitCDP bool signOverwrite bool password string caType string @@ -150,6 +151,7 @@ func (a *AuthCommand) Initialize(app *kingpin.Application, config *servicecfg.Co a.authSign.Flag("windows-domain", `Active Directory domain for which this cert is valid. Only used when --format is set to "windows"`).StringVar(&a.windowsDomain) a.authSign.Flag("windows-pki-domain", `Active Directory domain where CRLs will be located. Only used when --format is set to "windows"`).StringVar(&a.windowsPKIDomain) a.authSign.Flag("windows-sid", `Optional Security Identifier to embed in the certificate. Only used when --format is set to "windows"`).StringVar(&a.windowsSID) + a.authSign.Flag("omit-cdp", `Omit CRL Distribution Points from the cert. Only used when --format is set to "windows"`).BoolVar(&a.omitCDP) a.authRotate = auth.Command("rotate", "Rotate certificate authorities in the cluster.") a.authRotate.Flag("grace-period", "Grace period keeps previous certificate authorities signatures valid, if set to 0 will force users to re-login and nodes to re-register."). @@ -363,6 +365,7 @@ func (a *AuthCommand) generateWindowsCert(ctx context.Context, clusterAPI certif TTL: a.genTTL, ClusterName: cn.GetClusterName(), LDAPConfig: windows.LDAPConfig{Domain: domain}, + OmitCDP: a.omitCDP, AuthClient: clusterAPI, }) if err != nil { From b5629ef03df75e3f01b87619364a457818a5cc85 Mon Sep 17 00:00:00 2001 From: Paul Gottschling Date: Thu, 14 Nov 2024 17:43:42 -0500 Subject: [PATCH 031/111] Fix inaccurate docs URLs (#49015) Backports #49001 Closes #48788 Fix docs URLs in `gravitational/teleport` pages that correspond to neither: - A redirect source on the default version of the docs site - A page on the current version of the docs site In `web/packages/teleport/src/Discover/SelectResource/databases.tsx`, use literal strings instead of templated strings for docs URLs so we can check these URLs for inaccuracies. --- README.md | 2 +- lib/tbot/config/migrate_test.go | 2 +- .../src/Discover/SelectResource/databases.tsx | 142 ++++++------------ 3 files changed, 52 insertions(+), 94 deletions(-) diff --git a/README.md b/README.md index dac836a7f650f..0c5f9179477e4 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ Here is why you might use Teleport: Teleport works with SSH, Kubernetes, databases, RDP, and web services. -* Architecture: https://goteleport.com/docs/architecture/ +* Architecture: https://goteleport.com/docs/reference/architecture/architecture * Getting Started: https://goteleport.com/docs/getting-started/

diff --git a/lib/tbot/config/migrate_test.go b/lib/tbot/config/migrate_test.go index 31c3421867a1a..b46cb72ffdb04 100644 --- a/lib/tbot/config/migrate_test.go +++ b/lib/tbot/config/migrate_test.go @@ -304,7 +304,7 @@ destinations: }, // Backwards compat with guides { - name: "backwards compat with https://goteleport.com/docs/machine-id/guides/jenkins/", + name: "backwards compat with https://goteleport.com/docs/enroll-resources/machine-id/deployment/jenkins/", input: ` auth_server: "auth.example.com:3025" onboarding: diff --git a/web/packages/teleport/src/Discover/SelectResource/databases.tsx b/web/packages/teleport/src/Discover/SelectResource/databases.tsx index d4cf3a18332b4..cf563b09e1028 100644 --- a/web/packages/teleport/src/Discover/SelectResource/databases.tsx +++ b/web/packages/teleport/src/Discover/SelectResource/databases.tsx @@ -26,25 +26,12 @@ import { ResourceKind } from '../Shared/ResourceKind'; import { ResourceSpec, DatabaseLocation, DatabaseEngine } from './types'; -enum DatabaseGuideSection { - Aws = 'enroll-aws-databases', - Azure = 'enroll-azure-databases', - Gcp = 'enroll-google-cloud-databases', - Managed = 'enroll-managed-databases', - SelfHosted = 'enroll-self-hosted-databases', - Guides = 'guides', -} - const baseDatabaseKeywords = 'db database databases'; const awsKeywords = baseDatabaseKeywords + 'aws amazon web services'; const gcpKeywords = baseDatabaseKeywords + 'gcp google cloud provider'; const selfhostedKeywords = baseDatabaseKeywords + 'self hosted self-hosted'; const azureKeywords = baseDatabaseKeywords + 'microsoft azure'; -function getDbAccessDocLink(subsection: DatabaseGuideSection, guide: string) { - return `https://goteleport.com/docs/enroll-resources/database-access/${subsection}/${guide}`; -} - // DATABASES_UNGUIDED_DOC are documentations that is not specific // to one type of database. export const DATABASES_UNGUIDED_DOC: ResourceSpec[] = [ @@ -54,10 +41,8 @@ export const DATABASES_UNGUIDED_DOC: ResourceSpec[] = [ keywords: awsKeywords + 'rds proxy postgresql', kind: ResourceKind.Database, icon: 'aws', - unguidedLink: getDbAccessDocLink( - DatabaseGuideSection.Aws, - 'rds-proxy-postgres' - ), + unguidedLink: + 'https://goteleport.com/docs/enroll-resources/database-access/enroll-aws-databases/rds-proxy-postgres', // TODO(lisa): add a new usage event event: DiscoverEventResource.DatabaseDocRdsProxy, }, @@ -67,10 +52,8 @@ export const DATABASES_UNGUIDED_DOC: ResourceSpec[] = [ keywords: awsKeywords + 'rds proxy sql server sqlserver', kind: ResourceKind.Database, icon: 'aws', - unguidedLink: getDbAccessDocLink( - DatabaseGuideSection.Aws, - 'rds-proxy-sqlserver' - ), + unguidedLink: + 'https://goteleport.com/docs/enroll-resources/database-access/enroll-aws-databases/rds-proxy-sqlserver', // TODO(lisa): add a new usage event event: DiscoverEventResource.DatabaseDocRdsProxy, }, @@ -80,10 +63,8 @@ export const DATABASES_UNGUIDED_DOC: ResourceSpec[] = [ keywords: awsKeywords + 'rds proxy mariadb mysql', kind: ResourceKind.Database, icon: 'aws', - unguidedLink: getDbAccessDocLink( - DatabaseGuideSection.Aws, - 'rds-proxy-mysql' - ), + unguidedLink: + 'https://goteleport.com/docs/enroll-resources/database-access/enroll-aws-databases/rds-proxy-mysql', // TODO(lisa): add a new usage event event: DiscoverEventResource.DatabaseDocRdsProxy, }, @@ -93,7 +74,8 @@ export const DATABASES_UNGUIDED_DOC: ResourceSpec[] = [ keywords: baseDatabaseKeywords + 'high availability ha', kind: ResourceKind.Database, icon: 'database', - unguidedLink: getDbAccessDocLink(DatabaseGuideSection.Guides, 'ha'), + unguidedLink: + 'https://goteleport.com/docs/enroll-resources/database-access/guides/ha', event: DiscoverEventResource.DatabaseDocHighAvailability, }, { @@ -102,10 +84,8 @@ export const DATABASES_UNGUIDED_DOC: ResourceSpec[] = [ keywords: baseDatabaseKeywords + 'dynamic registration', kind: ResourceKind.Database, icon: 'database', - unguidedLink: getDbAccessDocLink( - DatabaseGuideSection.Guides, - 'dynamic-registration' - ), + unguidedLink: + 'https://goteleport.com/docs/enroll-resources/database-access/guides/dynamic-registration', event: DiscoverEventResource.DatabaseDocDynamicRegistration, }, ]; @@ -117,7 +97,8 @@ export const DATABASES_UNGUIDED: ResourceSpec[] = [ keywords: awsKeywords + 'dynamodb', kind: ResourceKind.Database, icon: 'dynamo', - unguidedLink: getDbAccessDocLink(DatabaseGuideSection.Aws, 'aws-dynamodb'), + unguidedLink: + 'https://goteleport.com/docs/enroll-resources/database-access/enroll-aws-databases/aws-dynamodb', event: DiscoverEventResource.DatabaseDynamoDb, }, { @@ -126,7 +107,8 @@ export const DATABASES_UNGUIDED: ResourceSpec[] = [ keywords: awsKeywords + 'elasticache memorydb redis', kind: ResourceKind.Database, icon: 'aws', - unguidedLink: getDbAccessDocLink(DatabaseGuideSection.Aws, 'redis-aws'), + unguidedLink: + 'https://goteleport.com/docs/enroll-resources/database-access/enroll-aws-databases/redis-aws', event: DiscoverEventResource.DatabaseRedisElasticache, }, { @@ -138,10 +120,8 @@ export const DATABASES_UNGUIDED: ResourceSpec[] = [ keywords: awsKeywords + 'keyspaces apache cassandra', kind: ResourceKind.Database, icon: 'aws', - unguidedLink: getDbAccessDocLink( - DatabaseGuideSection.Aws, - 'aws-cassandra-keyspaces' - ), + unguidedLink: + 'https://goteleport.com/docs/enroll-resources/database-access/enroll-aws-databases/aws-cassandra-keyspaces', event: DiscoverEventResource.DatabaseCassandraKeyspaces, }, { @@ -150,10 +130,8 @@ export const DATABASES_UNGUIDED: ResourceSpec[] = [ keywords: awsKeywords + 'redshift postgresql', kind: ResourceKind.Database, icon: 'redshift', - unguidedLink: getDbAccessDocLink( - DatabaseGuideSection.Aws, - 'postgres-redshift' - ), + unguidedLink: + 'https://goteleport.com/docs/enroll-resources/database-access/enroll-aws-databases/postgres-redshift', event: DiscoverEventResource.DatabasePostgresRedshift, }, { @@ -162,10 +140,8 @@ export const DATABASES_UNGUIDED: ResourceSpec[] = [ keywords: awsKeywords + 'redshift serverless postgresql', kind: ResourceKind.Database, icon: 'redshift', - unguidedLink: getDbAccessDocLink( - DatabaseGuideSection.Aws, - 'redshift-serverless' - ), + unguidedLink: + 'https://goteleport.com/docs/enroll-resources/database-access/enroll-aws-databases/redshift-serverless', event: DiscoverEventResource.DatabasePostgresRedshiftServerless, }, { @@ -174,7 +150,8 @@ export const DATABASES_UNGUIDED: ResourceSpec[] = [ keywords: azureKeywords + 'cache redis', kind: ResourceKind.Database, icon: 'azure', - unguidedLink: getDbAccessDocLink(DatabaseGuideSection.Azure, 'azure-redis'), + unguidedLink: + 'https://goteleport.com/docs/enroll-resources/database-access/enroll-azure-databases/azure-redis', event: DiscoverEventResource.DatabaseRedisAzureCache, }, { @@ -186,10 +163,8 @@ export const DATABASES_UNGUIDED: ResourceSpec[] = [ keywords: azureKeywords + 'postgresql', kind: ResourceKind.Database, icon: 'azure', - unguidedLink: getDbAccessDocLink( - DatabaseGuideSection.Azure, - 'azure-postgres-mysql' - ), + unguidedLink: + 'https://goteleport.com/docs/enroll-resources/database-access/enroll-azure-databases/azure-postgres-mysql', event: DiscoverEventResource.DatabasePostgresAzure, }, { @@ -198,10 +173,8 @@ export const DATABASES_UNGUIDED: ResourceSpec[] = [ keywords: azureKeywords + 'mysql', kind: ResourceKind.Database, icon: 'azure', - unguidedLink: getDbAccessDocLink( - DatabaseGuideSection.Azure, - 'azure-postgres-mysql' - ), + unguidedLink: + 'https://goteleport.com/docs/enroll-resources/database-access/enroll-azure-databases/azure-postgres-mysql', event: DiscoverEventResource.DatabaseMysqlAzure, }, { @@ -214,10 +187,8 @@ export const DATABASES_UNGUIDED: ResourceSpec[] = [ azureKeywords + 'active directory ad sql server sqlserver preview', kind: ResourceKind.Database, icon: 'azure', - unguidedLink: getDbAccessDocLink( - DatabaseGuideSection.Azure, - 'azure-sql-server-ad' - ), + unguidedLink: + 'https://goteleport.com/docs/enroll-resources/database-access/enroll-azure-databases/azure-sql-server-ad', event: DiscoverEventResource.DatabaseSqlServerAzure, platform: Platform.Windows, }, @@ -232,7 +203,8 @@ export const DATABASES_UNGUIDED: ResourceSpec[] = [ 'rds microsoft active directory ad sql server sqlserver preview', kind: ResourceKind.Database, icon: 'aws', - unguidedLink: getDbAccessDocLink(DatabaseGuideSection.Aws, 'sql-server-ad'), + unguidedLink: + 'https://goteleport.com/docs/enroll-resources/database-access/enroll-aws-databases/sql-server-ad', event: DiscoverEventResource.DatabaseSqlServerMicrosoft, platform: Platform.Windows, }, @@ -242,10 +214,8 @@ export const DATABASES_UNGUIDED: ResourceSpec[] = [ keywords: gcpKeywords + 'mysql', kind: ResourceKind.Database, icon: 'googlecloud', - unguidedLink: getDbAccessDocLink( - DatabaseGuideSection.Gcp, - 'mysql-cloudsql' - ), + unguidedLink: + 'https://goteleport.com/docs/enroll-resources/database-access/enroll-google-cloud-databases/mysql-cloudsql', event: DiscoverEventResource.DatabaseMysqlGcp, }, { @@ -254,10 +224,8 @@ export const DATABASES_UNGUIDED: ResourceSpec[] = [ keywords: gcpKeywords + 'postgresql', kind: ResourceKind.Database, icon: 'googlecloud', - unguidedLink: getDbAccessDocLink( - DatabaseGuideSection.Gcp, - 'postgres-cloudsql' - ), + unguidedLink: + 'https://goteleport.com/docs/enroll-resources/database-access/enroll-google-cloud-databases/postgres-cloudsql', event: DiscoverEventResource.DatabasePostgresGcp, }, { @@ -269,10 +237,8 @@ export const DATABASES_UNGUIDED: ResourceSpec[] = [ keywords: baseDatabaseKeywords + 'mongodb atlas', kind: ResourceKind.Database, icon: 'mongo', - unguidedLink: getDbAccessDocLink( - DatabaseGuideSection.Managed, - 'mongodb-atlas' - ), + unguidedLink: + 'https://goteleport.com/docs/enroll-resources/database-access/enroll-managed-databases/mongodb-atlas', event: DiscoverEventResource.DatabaseMongodbAtlas, }, { @@ -284,10 +250,8 @@ export const DATABASES_UNGUIDED: ResourceSpec[] = [ keywords: selfhostedKeywords + 'cassandra scylladb', kind: ResourceKind.Database, icon: 'selfhosted', - unguidedLink: getDbAccessDocLink( - DatabaseGuideSection.SelfHosted, - 'cassandra-self-hosted' - ), + unguidedLink: + 'https://goteleport.com/docs/enroll-resources/database-access/enroll-self-hosted-databases/cassandra-self-hosted', event: DiscoverEventResource.DatabaseCassandraSelfHosted, }, { @@ -299,10 +263,8 @@ export const DATABASES_UNGUIDED: ResourceSpec[] = [ keywords: selfhostedKeywords + 'cockroachdb', kind: ResourceKind.Database, icon: 'cockroach', - unguidedLink: getDbAccessDocLink( - DatabaseGuideSection.SelfHosted, - 'cockroachdb-self-hosted' - ), + unguidedLink: + 'https://goteleport.com/docs/enroll-resources/database-access/enroll-self-hosted-databases/cockroachdb-self-hosted', event: DiscoverEventResource.DatabaseCockroachDbSelfHosted, }, { @@ -314,10 +276,8 @@ export const DATABASES_UNGUIDED: ResourceSpec[] = [ keywords: selfhostedKeywords + 'elasticsearch', kind: ResourceKind.Database, icon: 'selfhosted', - unguidedLink: getDbAccessDocLink( - DatabaseGuideSection.SelfHosted, - 'elastic' - ), + unguidedLink: + 'https://goteleport.com/docs/enroll-resources/database-access/enroll-self-hosted-databases/elastic', event: DiscoverEventResource.DatabaseElasticSearchSelfHosted, }, { @@ -329,10 +289,8 @@ export const DATABASES_UNGUIDED: ResourceSpec[] = [ keywords: selfhostedKeywords + 'mongodb', kind: ResourceKind.Database, icon: 'mongo', - unguidedLink: getDbAccessDocLink( - DatabaseGuideSection.SelfHosted, - 'mongodb-self-hosted' - ), + unguidedLink: + 'https://goteleport.com/docs/enroll-resources/database-access/enroll-self-hosted-databases/mongodb-self-hosted', event: DiscoverEventResource.DatabaseMongodbSelfHosted, }, { @@ -344,7 +302,8 @@ export const DATABASES_UNGUIDED: ResourceSpec[] = [ keywords: selfhostedKeywords + 'redis', kind: ResourceKind.Database, icon: 'selfhosted', - unguidedLink: getDbAccessDocLink(DatabaseGuideSection.SelfHosted, 'redis'), + unguidedLink: + 'https://goteleport.com/docs/enroll-resources/database-access/enroll-self-hosted-databases/redis', event: DiscoverEventResource.DatabaseRedisSelfHosted, }, { @@ -356,10 +315,8 @@ export const DATABASES_UNGUIDED: ResourceSpec[] = [ keywords: selfhostedKeywords + 'redis cluster', kind: ResourceKind.Database, icon: 'selfhosted', - unguidedLink: getDbAccessDocLink( - DatabaseGuideSection.SelfHosted, - 'redis-cluster' - ), + unguidedLink: + 'https://goteleport.com/docs/enroll-resources/database-access/enroll-self-hosted-databases/redis-cluster', event: DiscoverEventResource.DatabaseRedisClusterSelfHosted, }, { @@ -371,7 +328,8 @@ export const DATABASES_UNGUIDED: ResourceSpec[] = [ keywords: baseDatabaseKeywords + 'snowflake preview', kind: ResourceKind.Database, icon: 'snowflake', - unguidedLink: getDbAccessDocLink(DatabaseGuideSection.Managed, 'snowflake'), + unguidedLink: + 'https://goteleport.com/docs/enroll-resources/database-access/enroll-managed-databases/snowflake', event: DiscoverEventResource.DatabaseSnowflake, }, ]; From 7b69841d1dc72dce768051fc48535b416dfe034f Mon Sep 17 00:00:00 2001 From: Andrew Burke <31974658+atburke@users.noreply.github.com> Date: Thu, 14 Nov 2024 15:47:47 -0800 Subject: [PATCH 032/111] Fix remote port forwarding reporting wrong hostname (#49021) This change fixes a bug in remote port forwarding where Teleport reports the hostname from the created remote listener, rather than the hostname requested in the tcpip-forward request. --- lib/srv/regular/sshserver.go | 14 +++++- lib/srv/regular/sshserver_test.go | 76 ++++++++++++++++++++----------- lib/sshutils/tcpip.go | 3 ++ 3 files changed, 64 insertions(+), 29 deletions(-) diff --git a/lib/srv/regular/sshserver.go b/lib/srv/regular/sshserver.go index 6500637dadf6d..44e9f05789206 100644 --- a/lib/srv/regular/sshserver.go +++ b/lib/srv/regular/sshserver.go @@ -2378,8 +2378,18 @@ func (s *Server) handleTCPIPForwardRequest(ctx context.Context, ccx *sshutils.Co return trace.Wrap(err) } - // Set the src addr again since it may have been updated with a new port. - scx.SrcAddr = listener.Addr().String() + // If the client didn't request a specific port, the chosen port needs to + // be reported back. + srcHost, _, err := sshutils.SplitHostPort(scx.SrcAddr) + if err != nil { + return trace.Wrap(err) + } + _, listenPort, err := sshutils.SplitHostPort(listener.Addr().String()) + if err != nil { + return trace.Wrap(err) + } + scx.SrcAddr = sshutils.JoinHostPort(srcHost, listenPort) + event := scx.GetPortForwardEvent() if err := s.EmitAuditEvent(ctx, &event); err != nil { s.Logger.WithError(err).Warn("Failed to emit audit event.") diff --git a/lib/srv/regular/sshserver_test.go b/lib/srv/regular/sshserver_test.go index 54ac1b06d08bd..800ef30531b04 100644 --- a/lib/srv/regular/sshserver_test.go +++ b/lib/srv/regular/sshserver_test.go @@ -19,7 +19,6 @@ package regular import ( - "bytes" "context" "encoding/json" "fmt" @@ -711,40 +710,63 @@ func TestDirectTCPIP(t *testing.T) { // "tcpip-forward" request and do remote port forwarding. func TestTCPIPForward(t *testing.T) { t.Parallel() - f := newFixtureWithoutDiskBasedLogging(t) - - // Request a listener from the server. - listener, err := f.ssh.clt.Listen("tcp", "127.0.0.1:0") + hostname, err := os.Hostname() require.NoError(t, err) + tests := []struct { + name string + listenAddr string + }{ + { + name: "localhost", + listenAddr: "localhost:0", + }, + { + name: "ip address", + listenAddr: "127.0.0.1:0", + }, + { + name: "hostname", + listenAddr: hostname + ":0", + }, + } + for _, tc := range tests { + t.Run(tc.name, func(t *testing.T) { + f := newFixtureWithoutDiskBasedLogging(t) - // Start up a test server that uses the port forwarded listener. - ts := httptest.NewUnstartedServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - fmt.Fprintln(w, "hello, world") - })) - t.Cleanup(ts.Close) - ts.Listener = listener - ts.Start() + // Request a listener from the server. + listener, err := f.ssh.clt.Listen("tcp", tc.listenAddr) + require.NoError(t, err) - // Dial the test server over the SSH connection. - ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) - t.Cleanup(cancel) - req, err := http.NewRequestWithContext(ctx, http.MethodGet, ts.URL, &bytes.Buffer{}) - require.NoError(t, err) - client := &http.Client{} - resp, err := client.Do(req) - require.NoError(t, err) - t.Cleanup(func() { - require.NoError(t, resp.Body.Close()) - }) + // Start up a test server that uses the port forwarded listener. + ts := httptest.NewUnstartedServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + fmt.Fprintln(w, "hello, world") + })) + t.Cleanup(ts.Close) + ts.Listener = listener + ts.Start() + + // Dial the test server over the SSH connection. + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) + t.Cleanup(cancel) + req, err := http.NewRequestWithContext(ctx, http.MethodGet, ts.URL, nil) + require.NoError(t, err) + resp, err := ts.Client().Do(req) + require.NoError(t, err) + t.Cleanup(func() { + require.NoError(t, resp.Body.Close()) + }) - // Make sure the response is what was expected. - body, err := io.ReadAll(resp.Body) - require.NoError(t, err) - require.Equal(t, []byte("hello, world\n"), body) + // Make sure the response is what was expected. + body, err := io.ReadAll(resp.Body) + require.NoError(t, err) + require.Equal(t, []byte("hello, world\n"), body) + }) + } t.Run("SessionJoinPrincipal cannot use tcpip-forward", func(t *testing.T) { // Ensure that ssh client using SessionJoinPrincipal as Login, cannot // connect using "tcpip-forward". + f := newFixtureWithoutDiskBasedLogging(t) ctx := context.Background() cliUsingSessionJoin := f.newSSHClient(ctx, t, &user.User{Username: teleport.SSHSessionJoinPrincipal}) _, err := cliUsingSessionJoin.Listen("tcp", "127.0.0.1:0") diff --git a/lib/sshutils/tcpip.go b/lib/sshutils/tcpip.go index 4b92efb0177ce..55ac4ea981cf3 100644 --- a/lib/sshutils/tcpip.go +++ b/lib/sshutils/tcpip.go @@ -101,6 +101,7 @@ func StartRemoteListener(ctx context.Context, sshConn channelOpener, srcAddr str dstHost, dstPort, err := SplitHostPort(conn.RemoteAddr().String()) if err != nil { + conn.Close() logger.WithError(err).Warn("failed to parse addr") return } @@ -112,6 +113,7 @@ func StartRemoteListener(ctx context.Context, sshConn channelOpener, srcAddr str OrigPort: dstPort, } if err := req.CheckAndSetDefaults(); err != nil { + conn.Close() logger.WithError(err).Warn("failed to create forwarded tcpip request") return } @@ -119,6 +121,7 @@ func StartRemoteListener(ctx context.Context, sshConn channelOpener, srcAddr str ch, rch, err := sshConn.OpenChannel(teleport.ChanForwardedTCPIP, reqBytes) if err != nil { + conn.Close() logger.WithError(err).Warn("failed to open channel") continue } From 813835a9a004ae9dd638a2515bd3e691a48f3880 Mon Sep 17 00:00:00 2001 From: Steven Martin Date: Thu, 14 Nov 2024 18:49:12 -0500 Subject: [PATCH 033/111] [v15] docs: update troubleshooting for enterprise info (#48934) * docs: update troubleshooting for enterprise info * docs: update troubleshooting Co-authored-by: Paul Gottschling * docs: update troubleshooting.mdx Co-authored-by: Paul Gottschling --------- Co-authored-by: Paul Gottschling --- docs/pages/admin-guides/management/admin/troubleshooting.mdx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/pages/admin-guides/management/admin/troubleshooting.mdx b/docs/pages/admin-guides/management/admin/troubleshooting.mdx index afe00fccc1d02..2a22c219cc523 100644 --- a/docs/pages/admin-guides/management/admin/troubleshooting.mdx +++ b/docs/pages/admin-guides/management/admin/troubleshooting.mdx @@ -149,7 +149,8 @@ through the [Teleport support portal](https://support.goteleport.com). If you need help, please ask on our [community forum](https://github.com/gravitational/teleport/discussions). You can also open an [issue on GitHub](https://github.com/gravitational/teleport/issues). -For more information about custom features, or to try the [self-hosted Enterprise edition](../../deploy-a-cluster/deploy-a-cluster.mdx) of Teleport, reach out to us at [sales](https://goteleport.com/signup/enterprise/). +For more information about Enterprise features reach out to [the Teleport sales team](https://goteleport.com/signup/enterprise/). +You can also sign up for a [free trial](https://goteleport.com/signup) of Teleport Enterprise. From dcdf499c702d5d9f7c86644ac059f425f676dcde Mon Sep 17 00:00:00 2001 From: Lisa Kim Date: Thu, 14 Nov 2024 18:16:43 -0800 Subject: [PATCH 034/111] [v15] Web: fix pointer events disabling hover badges on integration tiles (#48687) * Web: fix pointer events disabling hover badges on integration tiles * Add hover badge test * Increase z-index of styled react-select * Update snaps --- .../RequestCheckout.story.test.tsx.snap | 2 ++ .../__snapshots__/FormPassword.test.tsx.snap | 2 ++ web/packages/shared/components/Select/Select.tsx | 1 + .../Audit/__snapshots__/Audit.story.test.tsx.snap | 1 + .../Integrations/Enroll/IntegrationTiles.test.tsx | 13 +++++++++++-- .../teleport/src/Integrations/Enroll/common.tsx | 10 ++++------ .../__snapshots__/Recordings.story.test.tsx.snap | 1 + .../__snapshots__/FormLogin.story.test.tsx.snap | 4 ++++ .../ReAuthenticate.story.test.tsx.snap | 2 ++ 9 files changed, 28 insertions(+), 8 deletions(-) diff --git a/web/packages/shared/components/AccessRequests/NewRequest/RequestCheckout/__snapshots__/RequestCheckout.story.test.tsx.snap b/web/packages/shared/components/AccessRequests/NewRequest/RequestCheckout/__snapshots__/RequestCheckout.story.test.tsx.snap index ff54a86f6e2db..1b79d6a3a0a5a 100644 --- a/web/packages/shared/components/AccessRequests/NewRequest/RequestCheckout/__snapshots__/RequestCheckout.story.test.tsx.snap +++ b/web/packages/shared/components/AccessRequests/NewRequest/RequestCheckout/__snapshots__/RequestCheckout.story.test.tsx.snap @@ -513,6 +513,7 @@ exports[`failed state 1`] = ` } .c36 .react-select__menu { + z-index: 10; margin-top: 0px; background-color: #344179; box-shadow: 0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12); @@ -1965,6 +1966,7 @@ exports[`loaded state 1`] = ` } .c43 .react-select__menu { + z-index: 10; margin-top: 0px; background-color: #344179; box-shadow: 0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12); diff --git a/web/packages/shared/components/FormPassword/__snapshots__/FormPassword.test.tsx.snap b/web/packages/shared/components/FormPassword/__snapshots__/FormPassword.test.tsx.snap index d831820409fee..07e6e127e9275 100644 --- a/web/packages/shared/components/FormPassword/__snapshots__/FormPassword.test.tsx.snap +++ b/web/packages/shared/components/FormPassword/__snapshots__/FormPassword.test.tsx.snap @@ -259,6 +259,7 @@ exports[`auth2faType "on" should render form with hardware key as first option i } .c7 .react-select__menu { + z-index: 10; margin-top: 0px; background-color: #344179; box-shadow: 0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12); @@ -702,6 +703,7 @@ exports[`auth2faType "optional" should render form with hardware key as first op } .c7 .react-select__menu { + z-index: 10; margin-top: 0px; background-color: #344179; box-shadow: 0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12); diff --git a/web/packages/shared/components/Select/Select.tsx b/web/packages/shared/components/Select/Select.tsx index 4435434809cd7..a42e238855f72 100644 --- a/web/packages/shared/components/Select/Select.tsx +++ b/web/packages/shared/components/Select/Select.tsx @@ -231,6 +231,7 @@ export const StyledSelect = styled.div` } .react-select__menu { + z-index: 10; margin-top: 0px; // If the component is on an elevated platform (such as a dialog), use a lighter background. background-color: ${props => diff --git a/web/packages/teleport/src/Audit/__snapshots__/Audit.story.test.tsx.snap b/web/packages/teleport/src/Audit/__snapshots__/Audit.story.test.tsx.snap index ceab16c807499..453a28a471aec 100644 --- a/web/packages/teleport/src/Audit/__snapshots__/Audit.story.test.tsx.snap +++ b/web/packages/teleport/src/Audit/__snapshots__/Audit.story.test.tsx.snap @@ -13599,6 +13599,7 @@ exports[`loaded audit log screen 1`] = ` } .c9 .react-select__menu { + z-index: 10; margin-top: 0px; background-color: #344179; box-shadow: 0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12); diff --git a/web/packages/teleport/src/Integrations/Enroll/IntegrationTiles.test.tsx b/web/packages/teleport/src/Integrations/Enroll/IntegrationTiles.test.tsx index 55dec704ced74..309550a23aaa9 100644 --- a/web/packages/teleport/src/Integrations/Enroll/IntegrationTiles.test.tsx +++ b/web/packages/teleport/src/Integrations/Enroll/IntegrationTiles.test.tsx @@ -18,7 +18,7 @@ import React from 'react'; import { MemoryRouter } from 'react-router'; -import { render, screen } from 'design/utils/testing'; +import { render, screen, userEvent } from 'design/utils/testing'; import cfg from 'teleport/config'; @@ -51,8 +51,10 @@ test('render disabled', async () => { ); - expect(screen.getByText(/lacking permission/i)).toBeInTheDocument(); expect(screen.queryByRole('link')).not.toBeInTheDocument(); + expect( + screen.queryByText(/request additional permissions/i) + ).not.toBeInTheDocument(); const tile = screen.getByTestId('tile-aws-oidc'); expect(tile).not.toHaveAttribute('href'); @@ -61,6 +63,13 @@ test('render disabled', async () => { // so "toBeDisabled" interprets it as false. // eslint-disable-next-line jest-dom/prefer-enabled-disabled expect(tile).toHaveAttribute('disabled'); + + // Disabled states have badges on them. Test it renders on hover. + const badge = screen.getByText(/lacking permission/i); + await userEvent.hover(badge); + expect( + screen.getByText(/request additional permissions/i) + ).toBeInTheDocument(); }); test('dont render External Audit Storage for enterprise unless it is cloud', async () => { diff --git a/web/packages/teleport/src/Integrations/Enroll/common.tsx b/web/packages/teleport/src/Integrations/Enroll/common.tsx index f505638ca434e..4815ca38c91c0 100644 --- a/web/packages/teleport/src/Integrations/Enroll/common.tsx +++ b/web/packages/teleport/src/Integrations/Enroll/common.tsx @@ -31,12 +31,11 @@ export const IntegrationTile = styled(Flex)` width: 170px; background-color: ${({ theme }) => theme.colors.buttons.secondary.default}; text-align: center; - cursor: pointer; - + cursor: ${({ disabled, $exists }) => + disabled || $exists ? 'default' : 'pointer'}; ${props => { - const pointerEvents = props.disabled || props.$exists ? 'none' : 'auto'; if (props.$exists) { - return { pointerEvents }; + return; } return ` @@ -44,9 +43,8 @@ export const IntegrationTile = styled(Flex)` &:hover { background-color: ${props.theme.colors.buttons.secondary.hover}; } - pointer-events: ${pointerEvents}; `; - }} + }}; `; export const NoCodeIntegrationDescription = () => ( diff --git a/web/packages/teleport/src/Recordings/__snapshots__/Recordings.story.test.tsx.snap b/web/packages/teleport/src/Recordings/__snapshots__/Recordings.story.test.tsx.snap index 247844e7c9e79..c651a790c5253 100644 --- a/web/packages/teleport/src/Recordings/__snapshots__/Recordings.story.test.tsx.snap +++ b/web/packages/teleport/src/Recordings/__snapshots__/Recordings.story.test.tsx.snap @@ -217,6 +217,7 @@ exports[`rendering of Session Recordings 1`] = ` } .c9 .react-select__menu { + z-index: 10; margin-top: 0px; background-color: #344179; box-shadow: 0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12); diff --git a/web/packages/teleport/src/components/FormLogin/__snapshots__/FormLogin.story.test.tsx.snap b/web/packages/teleport/src/components/FormLogin/__snapshots__/FormLogin.story.test.tsx.snap index 8c966078ee866..f12d18f445b40 100644 --- a/web/packages/teleport/src/components/FormLogin/__snapshots__/FormLogin.story.test.tsx.snap +++ b/web/packages/teleport/src/components/FormLogin/__snapshots__/FormLogin.story.test.tsx.snap @@ -632,6 +632,7 @@ exports[`auth2faType: optional rendering 1`] = ` } .c16 .react-select__menu { + z-index: 10; margin-top: 0px; background-color: #344179; box-shadow: 0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12); @@ -1178,6 +1179,7 @@ exports[`auth2faType: otp rendering 1`] = ` } .c16 .react-select__menu { + z-index: 10; margin-top: 0px; background-color: #344179; box-shadow: 0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12); @@ -1737,6 +1739,7 @@ exports[`auth2faType: webauthn rendering 1`] = ` } .c16 .react-select__menu { + z-index: 10; margin-top: 0px; background-color: #344179; box-shadow: 0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12); @@ -2357,6 +2360,7 @@ exports[`cloud auth2faType: on rendering 1`] = ` } .c21 .react-select__menu { + z-index: 10; margin-top: 0px; background-color: #344179; box-shadow: 0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12); diff --git a/web/packages/teleport/src/components/ReAuthenticate/__snapshots__/ReAuthenticate.story.test.tsx.snap b/web/packages/teleport/src/components/ReAuthenticate/__snapshots__/ReAuthenticate.story.test.tsx.snap index 61138dd76f2db..29a137da1569a 100644 --- a/web/packages/teleport/src/components/ReAuthenticate/__snapshots__/ReAuthenticate.story.test.tsx.snap +++ b/web/packages/teleport/src/components/ReAuthenticate/__snapshots__/ReAuthenticate.story.test.tsx.snap @@ -355,6 +355,7 @@ exports[`render failed state for re-authentication dialog 1`] = ` } .c15 .react-select__menu { + z-index: 10; margin-top: 0px; background-color: #4A5688; box-shadow: 0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12); @@ -867,6 +868,7 @@ exports[`render re-authentication dialog 1`] = ` } .c14 .react-select__menu { + z-index: 10; margin-top: 0px; background-color: #4A5688; box-shadow: 0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12); From 25fc98e298e1b171a6a7c92a60f8008a3a9752f5 Mon Sep 17 00:00:00 2001 From: Nic Klaassen Date: Thu, 14 Nov 2024 19:30:56 -0800 Subject: [PATCH 035/111] [v15] docs: clarify upgrade path for YubiHSM2 users (#49024) Backport #48723 to branch/v15 This is a partial backport since the signature algorithms reference page does not exist pre-17. The changes to the YubiHSM guide should be useful on any version. --- docs/cspell.json | 2 +- .../admin-guides/deploy-a-cluster/hsm.mdx | 32 ++++++++++++------- 2 files changed, 21 insertions(+), 13 deletions(-) diff --git a/docs/cspell.json b/docs/cspell.json index 2a71da58b196c..ef0760dd761a6 100644 --- a/docs/cspell.json +++ b/docs/cspell.json @@ -359,7 +359,7 @@ "certificatekey", "certificatesigningrequest", "certutil", - "cfhunter", + "cfpassword", "cfsdf", "cgroups", "cgroupv", diff --git a/docs/pages/admin-guides/deploy-a-cluster/hsm.mdx b/docs/pages/admin-guides/deploy-a-cluster/hsm.mdx index 786a64e8cd944..1ac2db144433d 100644 --- a/docs/pages/admin-guides/deploy-a-cluster/hsm.mdx +++ b/docs/pages/admin-guides/deploy-a-cluster/hsm.mdx @@ -189,33 +189,41 @@ to use. DEBU[0000] takeoff TLS=false listen="localhost:12345" pid=73502 ``` -1. Use `yubihsm-shell` to create a new authentication key to be used by - Teleport with the necessary capabilities. +1. Use `yubihsm-shell` to create a new + [authentication key](https://docs.yubico.com/hardware/yubihsm-2/hsm-2-user-guide/hsm2-core-concepts.html#authentication-key) + to be used by Teleport with the necessary + [capabilities](https://docs.yubico.com/hardware/yubihsm-2/hsm-2-user-guide/hsm2-core-concepts.html#capability). YubiHSM2 comes with a factory default authentication key at slot 1 with password - `password`. You should replace and delete it as recommended by Yubico. + `password`. We recommend replacing this or changing the password as soon as + possible. When creating the authentication key to be used by Teleport, the password - must have at least 8 characters. The example `hunter22` is used here. + must have at least 8 characters. ```text $ yubihsm-shell Using default connector URL: http://localhost:12345 yubihsm> connect Session keepalive set up to run every 15 seconds - yubihsm> session open 1 password + yubihsm> session open 1 + Enter password: Created session 0 - # Create an Authenticate Key for Teleport - yubihsm> put authkey 0 0 "Teleport Auth Key" 1 generate-asymmetric-key:sign-pkcs:sign-pss:sign-ecdsa:delete-asymmetric-key sign-pkcs:sign-pss:decrypt-pkcs:decrypt-oaep:sign-ecdsa hunter22 + # Create an Authentication Key for Teleport + yubihsm> put authkey 0 0 "Teleport Auth Key" 1 generate-asymmetric-key:sign-pkcs:sign-pss:sign-ecdsa:delete-asymmetric-key sign-pkcs:sign-pss:decrypt-pkcs:decrypt-oaep:sign-ecdsa + Enter password: Stored Authentication key 0x85cf # Make sure you can open a session with the new authentication key and password - yubihsm> session open 0x85cf hunter22 + yubihsm> session open 0x85cf + Enter password: Created session 1 - # Delete the factory default authentication key - yubihsm> delete 0 1 authentication-key + # Change the password for the factory default authentication key. + # Remember to securely store this password somewhere. + yubihsm> change authkey 0 1 authentication-key + Enter password: ``` Take note of the slot number of the new authentication key. @@ -294,8 +302,8 @@ auth_service: # slot_number should always be set to 0 for YubiHSM2 slot_number: 0 # pin should be the (hex) slot number of your authentication key, - # concatenated with the password - pin: "85cfhunter22" + # concatenated with your chosen password + pin: "85cfpassword" # pin_path can optionally be used to read the pin from a file # pin_path: /path/to/pin_file ``` From a0c6f1b8569919331d82dd61a6adba3a2b8096d8 Mon Sep 17 00:00:00 2001 From: Gabriel Corado Date: Fri, 15 Nov 2024 06:57:29 -0300 Subject: [PATCH 036/111] fix(auth): return db client CA when generating sql server certificates (#48925) --- lib/auth/db.go | 15 ++++++++++++--- lib/auth/db_test.go | 25 +++++++++++++++++++++---- 2 files changed, 33 insertions(+), 7 deletions(-) diff --git a/lib/auth/db.go b/lib/auth/db.go index 1716f5a2d91c5..4e16cd4d252c5 100644 --- a/lib/auth/db.go +++ b/lib/auth/db.go @@ -112,8 +112,17 @@ func (a *Server) generateDatabaseClientCert(ctx context.Context, req *proto.Data } // db clients should trust the Database Server CA when establishing // connection to a database, so return that CA's certs in the response. - dbServerCA, err := a.GetCertAuthority(ctx, types.CertAuthID{ - Type: types.DatabaseCA, + // + // The only exception is the SQL Server with PKINIT integration, where the + // `kinit` command line needs our client CA to trust the user certificates + // we pass. + returnedCAType := types.DatabaseCA + if req.CertificateExtensions == proto.DatabaseCertRequest_WINDOWS_SMARTCARD { + returnedCAType = types.DatabaseClientCA + } + + returnedCA, err := a.GetCertAuthority(ctx, types.CertAuthID{ + Type: returnedCAType, DomainName: clusterName.GetClusterName(), }, false) if err != nil { @@ -121,7 +130,7 @@ func (a *Server) generateDatabaseClientCert(ctx context.Context, req *proto.Data } return &proto.DatabaseCertResponse{ Cert: cert, - CACerts: services.GetTLSCerts(dbServerCA), + CACerts: services.GetTLSCerts(returnedCA), }, nil } diff --git a/lib/auth/db_test.go b/lib/auth/db_test.go index 4127b9a2ed570..1d9fbc7de4114 100644 --- a/lib/auth/db_test.go +++ b/lib/auth/db_test.go @@ -153,6 +153,7 @@ func TestDBCertSigning(t *testing.T) { tests := []struct { name string requester proto.DatabaseCertRequest_Requester + extensions proto.DatabaseCertRequest_Extensions wantCertSigner []byte wantCACerts [][]byte wantKeyUsage []x509.ExtKeyUsage @@ -170,16 +171,32 @@ func TestDBCertSigning(t *testing.T) { wantCACerts: [][]byte{activeDBClientCACert, newDBClientCACert}, wantKeyUsage: []x509.ExtKeyUsage{x509.ExtKeyUsageServerAuth}, }, + { + name: "DB service request for SQL Server databases is signed by active db client and trusts db client CAs", + extensions: proto.DatabaseCertRequest_WINDOWS_SMARTCARD, + wantCertSigner: activeDBClientCACert, + wantCACerts: [][]byte{activeDBClientCACert, newDBClientCACert}, + wantKeyUsage: []x509.ExtKeyUsage{x509.ExtKeyUsageClientAuth}, + }, + { + name: "tctl request for SQL Server databases is signed by new db CA and trusts db client CAs", + requester: proto.DatabaseCertRequest_TCTL, + extensions: proto.DatabaseCertRequest_WINDOWS_SMARTCARD, + wantCertSigner: newDBCACert, + wantCACerts: [][]byte{activeDBClientCACert, newDBClientCACert}, + wantKeyUsage: []x509.ExtKeyUsage{x509.ExtKeyUsageServerAuth}, + }, } for _, tt := range tests { tt := tt t.Run(tt.name, func(t *testing.T) { t.Parallel() certResp, err := authServer.AuthServer.GenerateDatabaseCert(ctx, &proto.DatabaseCertRequest{ - CSR: csr, - ServerName: "localhost", - TTL: proto.Duration(time.Hour), - RequesterName: tt.requester, + CSR: csr, + ServerName: "localhost", + TTL: proto.Duration(time.Hour), + RequesterName: tt.requester, + CertificateExtensions: tt.extensions, }) require.NoError(t, err) require.Equal(t, tt.wantCACerts, certResp.CACerts) From ead745aee71a7a86ddfe2d96f8f1b35d25fa6178 Mon Sep 17 00:00:00 2001 From: Forrest <30576607+fspmarshall@users.noreply.github.com> Date: Fri, 15 Nov 2024 04:46:43 -0800 Subject: [PATCH 037/111] reduce fluentd connection churn during high event-handler load (#48909) (#49035) --- integrations/event-handler/cli.go | 10 ++++++ integrations/event-handler/cli_test.go | 33 +++++++++-------- .../event-handler/fake_fluentd_test.go | 7 ++-- integrations/event-handler/fluentd_client.go | 35 ++++++++++++++----- integrations/event-handler/go.mod | 12 +++---- integrations/event-handler/go.sum | 24 ++++++------- 6 files changed, 77 insertions(+), 44 deletions(-) diff --git a/integrations/event-handler/cli.go b/integrations/event-handler/cli.go index 446158abbad91..dfad7eca35603 100644 --- a/integrations/event-handler/cli.go +++ b/integrations/event-handler/cli.go @@ -45,6 +45,10 @@ type FluentdConfig struct { // FluentdCA is a path to fluentd CA FluentdCA string `help:"fluentd TLS CA file" type:"existingfile" env:"FDWRD_FLUENTD_CA"` + + // FluentdMaxConnections caps the number of connections to fluentd. Defaults to a dynamic value + // calculated relative to app-level concurrency. + FluentdMaxConnections int `help:"Maximum number of connections to fluentd" env:"FDWRD_MAX_CONNECTIONS"` } // TeleportConfig is Teleport instance configuration @@ -237,6 +241,11 @@ func (c *StartCmdConfig) Validate() error { c.SkipSessionTypes = lib.SliceToAnonymousMap(c.SkipSessionTypesRaw) c.SkipEventTypes = lib.SliceToAnonymousMap(c.SkipEventTypesRaw) + if c.FluentdMaxConnections < 1 { + // 2x concurrency is effectively uncapped. + c.FluentdMaxConnections = c.Concurrency * 2 + } + return nil } @@ -256,6 +265,7 @@ func (c *StartCmdConfig) Dump(ctx context.Context) { log.WithField("ca", c.FluentdCA).Info("Using Fluentd ca") log.WithField("cert", c.FluentdCert).Info("Using Fluentd cert") log.WithField("key", c.FluentdKey).Info("Using Fluentd key") + log.WithField("max_connections", c.FluentdMaxConnections).Info("Using Fluentd max connections") log.WithField("window-size", c.WindowSize).Info("Using window size") if c.TeleportIdentityFile != "" { diff --git a/integrations/event-handler/cli_test.go b/integrations/event-handler/cli_test.go index 7668688880a80..b11b1af294bc1 100644 --- a/integrations/event-handler/cli_test.go +++ b/integrations/event-handler/cli_test.go @@ -45,11 +45,12 @@ func TestStartCmdConfig(t *testing.T) { Debug: false, Start: StartCmdConfig{ FluentdConfig: FluentdConfig{ - FluentdURL: "https://localhost:8888/test.log", - FluentdSessionURL: "https://localhost:8888/session", - FluentdCert: path.Join(wd, "testdata", "fake-file"), - FluentdKey: path.Join(wd, "testdata", "fake-file"), - FluentdCA: path.Join(wd, "testdata", "fake-file"), + FluentdURL: "https://localhost:8888/test.log", + FluentdSessionURL: "https://localhost:8888/session", + FluentdCert: path.Join(wd, "testdata", "fake-file"), + FluentdKey: path.Join(wd, "testdata", "fake-file"), + FluentdCA: path.Join(wd, "testdata", "fake-file"), + FluentdMaxConnections: 10, }, TeleportConfig: TeleportConfig{ TeleportAddr: "localhost:3025", @@ -83,11 +84,12 @@ func TestStartCmdConfig(t *testing.T) { Debug: true, Start: StartCmdConfig{ FluentdConfig: FluentdConfig{ - FluentdURL: "https://localhost:8888/test.log", - FluentdSessionURL: "https://localhost:8888/session", - FluentdCert: path.Join(wd, "testdata", "fake-file"), - FluentdKey: path.Join(wd, "testdata", "fake-file"), - FluentdCA: path.Join(wd, "testdata", "fake-file"), + FluentdURL: "https://localhost:8888/test.log", + FluentdSessionURL: "https://localhost:8888/session", + FluentdCert: path.Join(wd, "testdata", "fake-file"), + FluentdKey: path.Join(wd, "testdata", "fake-file"), + FluentdCA: path.Join(wd, "testdata", "fake-file"), + FluentdMaxConnections: 10, }, TeleportConfig: TeleportConfig{ TeleportAddr: "localhost:3025", @@ -121,11 +123,12 @@ func TestStartCmdConfig(t *testing.T) { Debug: true, Start: StartCmdConfig{ FluentdConfig: FluentdConfig{ - FluentdURL: "https://localhost:8888/test.log", - FluentdSessionURL: "https://localhost:8888/session", - FluentdCert: path.Join(wd, "testdata", "fake-file"), - FluentdKey: path.Join(wd, "testdata", "fake-file"), - FluentdCA: path.Join(wd, "testdata", "fake-file"), + FluentdURL: "https://localhost:8888/test.log", + FluentdSessionURL: "https://localhost:8888/session", + FluentdCert: path.Join(wd, "testdata", "fake-file"), + FluentdKey: path.Join(wd, "testdata", "fake-file"), + FluentdCA: path.Join(wd, "testdata", "fake-file"), + FluentdMaxConnections: 10, }, TeleportConfig: TeleportConfig{ TeleportAddr: "localhost:3025", diff --git a/integrations/event-handler/fake_fluentd_test.go b/integrations/event-handler/fake_fluentd_test.go index 070265398ee4d..019a063262582 100644 --- a/integrations/event-handler/fake_fluentd_test.go +++ b/integrations/event-handler/fake_fluentd_test.go @@ -123,9 +123,10 @@ func (f *FakeFluentd) createServer() error { // GetClientConfig returns FlientdConfig to connect to this fake fluentd server instance func (f *FakeFluentd) GetClientConfig() FluentdConfig { return FluentdConfig{ - FluentdCA: f.caCertPath, - FluentdCert: f.clientCertPath, - FluentdKey: f.clientKeyPath, + FluentdCA: f.caCertPath, + FluentdCert: f.clientCertPath, + FluentdKey: f.clientKeyPath, + FluentdMaxConnections: 3, } } diff --git a/integrations/event-handler/fluentd_client.go b/integrations/event-handler/fluentd_client.go index 92015bef4d312..32d18c31755af 100644 --- a/integrations/event-handler/fluentd_client.go +++ b/integrations/event-handler/fluentd_client.go @@ -27,6 +27,7 @@ import ( "github.com/gravitational/trace" log "github.com/sirupsen/logrus" + "golang.org/x/net/http2" tlib "github.com/gravitational/teleport/integrations/lib" ) @@ -40,6 +41,7 @@ const ( type FluentdClient struct { // client HTTP client to send requests client *http.Client + sem chan struct{} } // NewFluentdClient creates new FluentdClient @@ -55,22 +57,34 @@ func NewFluentdClient(c *FluentdConfig) (*FluentdClient, error) { return nil, trace.BadParameter("both fluentd_cert and fluentd_key should be specified") } + if c.FluentdMaxConnections <= 0 { + return nil, trace.BadParameter("fluentd_max_connections should be greater than 0") + } + ca, err := getCertPool(c) if err != nil { return nil, trace.Wrap(err) } - client := &http.Client{ - Transport: &http.Transport{ - TLSClientConfig: &tls.Config{ - RootCAs: ca, - Certificates: certs, - }, + transport := &http.Transport{ + TLSClientConfig: &tls.Config{ + RootCAs: ca, + Certificates: certs, }, - Timeout: httpTimeout, + MaxIdleConnsPerHost: c.FluentdMaxConnections, + IdleConnTimeout: httpTimeout, + } + + if err := http2.ConfigureTransport(transport); err != nil { + return nil, trace.Wrap(err) } - return &FluentdClient{client: client}, nil + client := &http.Client{ + Transport: transport, + Timeout: httpTimeout, + } + + return &FluentdClient{client: client, sem: make(chan struct{}, c.FluentdMaxConnections)}, nil } // getCertPool reads CA certificate and returns CA cert pool if passed @@ -91,6 +105,11 @@ func getCertPool(c *FluentdConfig) (*x509.CertPool, error) { // Send sends event to fluentd func (f *FluentdClient) Send(ctx context.Context, url string, b []byte) error { + f.sem <- struct{}{} + defer func() { + <-f.sem + }() + log.WithField("payload", string(b)).Debug("Sending event to Fluentd") req, err := http.NewRequestWithContext(ctx, "POST", url, bytes.NewReader(b)) diff --git a/integrations/event-handler/go.mod b/integrations/event-handler/go.mod index c18e7d6d34798..0a1f127c409b3 100644 --- a/integrations/event-handler/go.mod +++ b/integrations/event-handler/go.mod @@ -18,6 +18,7 @@ require ( github.com/sethvargo/go-limiter v0.7.2 github.com/sirupsen/logrus v1.9.3 github.com/stretchr/testify v1.9.0 + golang.org/x/net v0.30.0 golang.org/x/time v0.5.0 google.golang.org/protobuf v1.34.2 ) @@ -282,15 +283,14 @@ require ( go.opentelemetry.io/otel/trace v1.24.0 // indirect go.opentelemetry.io/proto/otlp v1.0.0 // indirect go.starlark.net v0.0.0-20230525235612-a134d8f9ddca // indirect - golang.org/x/crypto v0.24.0 // indirect + golang.org/x/crypto v0.28.0 // indirect golang.org/x/exp v0.0.0-20231108232855-2478ac86f678 // indirect golang.org/x/mod v0.17.0 // indirect - golang.org/x/net v0.26.0 // indirect golang.org/x/oauth2 v0.19.0 // indirect - golang.org/x/sync v0.7.0 // indirect - golang.org/x/sys v0.21.0 // indirect - golang.org/x/term v0.21.0 // indirect - golang.org/x/text v0.16.0 // indirect + golang.org/x/sync v0.8.0 // indirect + golang.org/x/sys v0.26.0 // indirect + golang.org/x/term v0.25.0 // indirect + golang.org/x/text v0.19.0 // indirect google.golang.org/api v0.177.0 // indirect google.golang.org/genproto v0.0.0-20240401170217-c3f982113cda // indirect google.golang.org/genproto/googleapis/api v0.0.0-20240429193739-8cf5692501f6 // indirect diff --git a/integrations/event-handler/go.sum b/integrations/event-handler/go.sum index 88ce097eb7833..7e61ea6cfc746 100644 --- a/integrations/event-handler/go.sum +++ b/integrations/event-handler/go.sum @@ -997,8 +997,8 @@ golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU golang.org/x/crypto v0.11.0/go.mod h1:xgJhtzW8F9jGdVFWZESrid1U1bjeNy4zgy5cRr/CIio= golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= -golang.org/x/crypto v0.24.0 h1:mnl8DM0o513X8fdIkmyFE/5hTYxbwYOjDS/+rK6qpRI= -golang.org/x/crypto v0.24.0/go.mod h1:Z1PMYSOR5nyMcyAVAIQSKCDwalqy85Aqn1x3Ws4L5DM= +golang.org/x/crypto v0.28.0 h1:GBDwsMXVQi34v5CCYUm2jkJvu4cbtru2U4TN2PSyQnw= +golang.org/x/crypto v0.28.0/go.mod h1:rmgy+3RHxRZMyY0jjAJShp2zgEdOqj2AO7U0pYmeQ7U= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20231108232855-2478ac86f678 h1:mchzmB1XO2pMaKFRqk/+MV3mgGG96aqaPXaMifQU47w= golang.org/x/exp v0.0.0-20231108232855-2478ac86f678/go.mod h1:zk2irFbV9DP96SEBUUAy67IdHUaZuSnrz1n472HUCLE= @@ -1041,8 +1041,8 @@ golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= golang.org/x/net v0.12.0/go.mod h1:zEVYFnQC7m/vmpQFELhcD1EWkZlX69l4oqgmer6hfKA= -golang.org/x/net v0.26.0 h1:soB7SVo0PWrY4vPW/+ay0jKDNScG2X9wFeYlXIvJsOQ= -golang.org/x/net v0.26.0/go.mod h1:5YKkiSynbBIh3p6iOc/vibscux0x38BZDkn8sCUPxHE= +golang.org/x/net v0.30.0 h1:AcW1SDZMkb8IpzCdQUaIq2sP4sZ4zw+55h6ynffypl4= +golang.org/x/net v0.30.0/go.mod h1:2wGyMJ5iFasEhkwi13ChkO/t1ECNC4X4eBKkVFyYFlU= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.6.0/go.mod h1:ycmewcwgD4Rpr3eZJLSB4Kyyljb3qDh40vJ8STE5HKw= @@ -1056,8 +1056,8 @@ golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= -golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ= +golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1098,8 +1098,8 @@ golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.21.0 h1:rF+pYz3DAGSQAxAu1CbC7catZg4ebC4UIeIhKxBZvws= -golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.26.0 h1:KHjCJyddX0LoSTb3J+vWpupP9p0oznkqVk/IfjymZbo= +golang.org/x/sys v0.26.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= @@ -1111,8 +1111,8 @@ golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= golang.org/x/term v0.10.0/go.mod h1:lpqdcUyK/oCiQxvxVrppt5ggO2KCZ5QblwqPnfZ6d5o= golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0= golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= -golang.org/x/term v0.21.0 h1:WVXCp+/EBEHOj53Rvu+7KiT/iElMrO8ACK16SMZ3jaA= -golang.org/x/term v0.21.0/go.mod h1:ooXLefLobQVslOqselCNF4SxFAaoS6KujMbsGzSDmX0= +golang.org/x/term v0.25.0 h1:WtHI/ltw4NvSUig5KARz9h521QvRC8RmF/cuYqifU24= +golang.org/x/term v0.25.0/go.mod h1:RPyXicDX+6vLxogjjRxjgD2TKtmAO6NZBsBRfrOLu7M= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= @@ -1125,8 +1125,8 @@ golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.11.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4= -golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI= +golang.org/x/text v0.19.0 h1:kTxAhCbGbxhK0IwgSKiMO5awPoDQ0RpfiVYBfK860YM= +golang.org/x/text v0.19.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= From 1cff179d081eb42d8a4e3d31715f96e80e402416 Mon Sep 17 00:00:00 2001 From: Lisa Kim Date: Fri, 15 Nov 2024 09:27:26 -0800 Subject: [PATCH 038/111] [v15] update e (#49040) --- e | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/e b/e index e9144130436db..3420913eb7e67 160000 --- a/e +++ b/e @@ -1 +1 @@ -Subproject commit e9144130436dbb95deac958410a151b707a25c23 +Subproject commit 3420913eb7e67f8020cea6dc163e92a134af577b From 14d59b16a16fe3f94b2a1e5fafba889c63674c87 Mon Sep 17 00:00:00 2001 From: Hugo Shaka Date: Fri, 15 Nov 2024 12:44:19 -0500 Subject: [PATCH 039/111] [v15] Fix `teleport-cluster` chart service account logic causing ArgoCD deployments to fail (#49070) * teleport-cluster: Use separate SA in hooks when possible * test that SAs are not created when hooks are disabled * fix chart typos --- .../teleport-cluster/templates/_helpers.tpl | 38 ++++++++++++++++++ .../templates/auth/predeploy_job.yaml | 2 +- .../auth/predeploy_serviceaccount.yaml | 8 ++-- .../templates/proxy/predeploy_job.yaml | 2 +- .../proxy/predeploy_serviceaccount.yaml | 8 ++-- .../tests/predeploy_test.yaml | 39 ++++++++++++++++--- 6 files changed, 81 insertions(+), 16 deletions(-) diff --git a/examples/chart/teleport-cluster/templates/_helpers.tpl b/examples/chart/teleport-cluster/templates/_helpers.tpl index 92b8fc0578fbb..7e2f4de3e2c04 100644 --- a/examples/chart/teleport-cluster/templates/_helpers.tpl +++ b/examples/chart/teleport-cluster/templates/_helpers.tpl @@ -6,10 +6,48 @@ if serviceAccount is not defined or serviceAccount.name is empty, use .Release.N {{- coalesce .Values.serviceAccount.name .Release.Name -}} {{- end -}} +{{/* +Create the name of the service account to use in the auth config check hook. + +If the chart is creating service accounts, we know we can create new arbitrary service accounts. +We cannot reuse the same name as the deployment SA because the non-hook service account might +not exist yet. We tried being smart with hooks but ArgoCD doesn't differentiate between install +and upgrade, causing various issues on update and eventually forcing us to use a separate SA. + +If the chart is not creating service accounts, for backward compatibility we don't want +to force new service account names to existing chart users. We know the SA should already exist, +so we can use the same SA for deployments and hooks. +*/}} +{{- define "teleport-cluster.auth.hookServiceAccountName" -}} +{{- include "teleport-cluster.auth.serviceAccountName" . -}} +{{- if .Values.serviceAccount.create -}} +-hook +{{- end -}} +{{- end -}} + {{- define "teleport-cluster.proxy.serviceAccountName" -}} {{- coalesce .Values.serviceAccount.name .Release.Name -}}-proxy {{- end -}} +{{/* +Create the name of the service account to use in the proxy config check hook. + +If the chart is creating service accounts, we know we can create new arbitrary service accounts. +We cannot reuse the same name as the deployment SA because the non-hook service account might +not exist yet. We tried being smart with hooks but ArgoCD doesn't differentiate between install +and upgrade, causing various issues on update and eventually forcing us to use a separate SA. + +If the chart is not creating service accounts, for backward compatibility we don't want +to force new service account names to existing chart users. We know the SA should already exist, +so we can use the same SA for deployments and hooks. +*/}} +{{- define "teleport-cluster.proxy.hookServiceAccountName" -}} +{{- include "teleport-cluster.proxy.serviceAccountName" . -}} +{{- if .Values.serviceAccount.create -}} +-hook +{{- end -}} +{{- end -}} + {{- define "teleport-cluster.version" -}} {{- coalesce .Values.teleportVersionOverride .Chart.Version }} {{- end -}} diff --git a/examples/chart/teleport-cluster/templates/auth/predeploy_job.yaml b/examples/chart/teleport-cluster/templates/auth/predeploy_job.yaml index e75c0f20a55e8..d5a38e93ead74 100644 --- a/examples/chart/teleport-cluster/templates/auth/predeploy_job.yaml +++ b/examples/chart/teleport-cluster/templates/auth/predeploy_job.yaml @@ -104,5 +104,5 @@ spec: {{- if .Values.extraVolumes }} {{- toYaml .Values.extraVolumes | nindent 6 }} {{- end }} - serviceAccountName: {{ include "teleport-cluster.auth.serviceAccountName" . }} + serviceAccountName: {{ include "teleport-cluster.auth.hookServiceAccountName" . }} {{- end }} diff --git a/examples/chart/teleport-cluster/templates/auth/predeploy_serviceaccount.yaml b/examples/chart/teleport-cluster/templates/auth/predeploy_serviceaccount.yaml index 8510f30145fb0..893078f9a902d 100644 --- a/examples/chart/teleport-cluster/templates/auth/predeploy_serviceaccount.yaml +++ b/examples/chart/teleport-cluster/templates/auth/predeploy_serviceaccount.yaml @@ -2,12 +2,13 @@ # upon first install of the chart. it will be deleted by Helm after the pre-deploy hooks run, then the # regular serviceAccount is created with the same name and exists for the lifetime of the release. {{- $auth := mustMergeOverwrite (mustDeepCopy .Values) .Values.auth -}} +{{- if $auth.validateConfigOnDeploy }} {{- $projectedServiceAccountToken := semverCompare ">=1.20.0-0" .Capabilities.KubeVersion.Version }} {{- if $auth.serviceAccount.create }} apiVersion: v1 kind: ServiceAccount metadata: - name: {{ template "teleport-cluster.auth.serviceAccountName" . }} + name: {{ template "teleport-cluster.auth.hookServiceAccountName" . }} namespace: {{ .Release.Namespace }} labels: {{- include "teleport-cluster.auth.labels" . | nindent 4 }} @@ -15,9 +16,7 @@ metadata: {{- toYaml $auth.extraLabels.serviceAccount | nindent 4 }} {{- end }} annotations: - # this ServiceAccount resource MUST only be hooked on pre-install, as it would conflict - # with the existing ServiceAccount if hooked on pre-upgrade. - "helm.sh/hook": pre-install + "helm.sh/hook": pre-install,pre-upgrade "helm.sh/hook-weight": "3" "helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded {{- if or $auth.annotations.serviceAccount $auth.azure.clientID }} @@ -32,3 +31,4 @@ metadata: automountServiceAccountToken: false {{- end }} {{- end }} +{{- end }} diff --git a/examples/chart/teleport-cluster/templates/proxy/predeploy_job.yaml b/examples/chart/teleport-cluster/templates/proxy/predeploy_job.yaml index 627aa4c626fcc..0f4ddb4f7fff4 100644 --- a/examples/chart/teleport-cluster/templates/proxy/predeploy_job.yaml +++ b/examples/chart/teleport-cluster/templates/proxy/predeploy_job.yaml @@ -100,5 +100,5 @@ spec: {{- if $proxy.extraVolumes }} {{- toYaml $proxy.extraVolumes | nindent 6 }} {{- end }} - serviceAccountName: {{ include "teleport-cluster.proxy.serviceAccountName" . }} + serviceAccountName: {{ include "teleport-cluster.proxy.hookServiceAccountName" . }} {{- end }} diff --git a/examples/chart/teleport-cluster/templates/proxy/predeploy_serviceaccount.yaml b/examples/chart/teleport-cluster/templates/proxy/predeploy_serviceaccount.yaml index 89a056ceed58e..6c5b9a4a1476c 100644 --- a/examples/chart/teleport-cluster/templates/proxy/predeploy_serviceaccount.yaml +++ b/examples/chart/teleport-cluster/templates/proxy/predeploy_serviceaccount.yaml @@ -3,11 +3,12 @@ # regular serviceAccount is created with the same name and exists for the lifetime of the release. {{- $proxy := mustMergeOverwrite (mustDeepCopy .Values) .Values.proxy -}} {{- $projectedServiceAccountToken := semverCompare ">=1.20.0-0" .Capabilities.KubeVersion.Version }} +{{- if $proxy.validateConfigOnDeploy }} {{- if $proxy.serviceAccount.create }} apiVersion: v1 kind: ServiceAccount metadata: - name: {{ include "teleport-cluster.proxy.serviceAccountName" . }} + name: {{ include "teleport-cluster.proxy.hookServiceAccountName" . }} namespace: {{ .Release.Namespace }} labels: {{- include "teleport-cluster.proxy.labels" . | nindent 4 }} @@ -15,9 +16,7 @@ metadata: {{- toYaml $proxy.extraLabels.serviceAccount | nindent 4 }} {{- end }} annotations: - # this ServiceAccount resource MUST only be hooked on pre-install, as it would conflict - # with the existing ServiceAccount if hooked on pre-upgrade. - "helm.sh/hook": pre-install + "helm.sh/hook": pre-install,pre-upgrade "helm.sh/hook-weight": "3" "helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded {{- if $proxy.annotations.serviceAccount }} @@ -27,3 +26,4 @@ metadata: automountServiceAccountToken: false {{- end }} {{- end }} +{{- end }} diff --git a/examples/chart/teleport-cluster/tests/predeploy_test.yaml b/examples/chart/teleport-cluster/tests/predeploy_test.yaml index c9de357957901..3ab3ad799e99c 100644 --- a/examples/chart/teleport-cluster/tests/predeploy_test.yaml +++ b/examples/chart/teleport-cluster/tests/predeploy_test.yaml @@ -2,8 +2,10 @@ suite: Pre-Deploy Config Test Hooks templates: - auth/predeploy_job.yaml - auth/predeploy_config.yaml + - auth/predeploy_serviceaccount.yaml - proxy/predeploy_job.yaml - proxy/predeploy_config.yaml + - proxy/predeploy_serviceaccount.yaml tests: - it: Deploys the auth-test config template: auth/predeploy_config.yaml @@ -53,6 +55,7 @@ tests: asserts: - hasDocuments: count: 0 + - it: should set resources on auth predeploy job when set in values template: auth/predeploy_job.yaml values: @@ -189,41 +192,65 @@ tests: path: metadata.labels.baz value: overridden - - it: should use default serviceAccount name for auth predeploy job SA when not set in values + - it: should use default serviceAccount name suffixed with -hook for auth predeploy job SA when not set in values and we're creating SAs + template: auth/predeploy_job.yaml + set: + clusterName: helm-lint + asserts: + - equal: + path: spec.template.spec.serviceAccountName + value: RELEASE-NAME-hook + + - it: should use serviceAccount.name suffixed with -hook for auth predeploy job SA when set in values and we're creating SAs template: auth/predeploy_job.yaml set: clusterName: helm-lint + serviceAccount: + name: helm-test-sa asserts: - equal: path: spec.template.spec.serviceAccountName - value: RELEASE-NAME + value: helm-test-sa-hook - - it: should use serviceAccount.name for auth predeploy job SA when set in values + - it: should use serviceAccount.name for auth predeploy job SA when set in values and we're not creating SAs template: auth/predeploy_job.yaml set: clusterName: helm-lint serviceAccount: name: helm-test-sa + create: false asserts: - equal: path: spec.template.spec.serviceAccountName value: helm-test-sa - - it: should use default serviceAccount name for proxy predeploy job SA when not set in values + - it: should use default serviceAccount name suffixed with -hook for proxy predeploy job SA when not set in values and we're creating SAs template: proxy/predeploy_job.yaml set: clusterName: helm-lint asserts: - equal: path: spec.template.spec.serviceAccountName - value: RELEASE-NAME-proxy + value: RELEASE-NAME-proxy-hook + + - it: should use serviceAccount.name suffixed with -hook for proxy predeploy job SA when set in values and we're creating SAs + template: proxy/predeploy_job.yaml + set: + clusterName: helm-lint + serviceAccount: + name: helm-test-sa + asserts: + - equal: + path: spec.template.spec.serviceAccountName + value: helm-test-sa-proxy-hook - - it: should use serviceAccount.name for proxy predeploy job SA when set in values + - it: should use serviceAccount.name for proxy predeploy job SA when set in values and we're not creating SAs template: proxy/predeploy_job.yaml set: clusterName: helm-lint serviceAccount: name: helm-test-sa + create: false asserts: - equal: path: spec.template.spec.serviceAccountName From 5e9a9f0018748abd7b31fd3979644c87a51c5cbd Mon Sep 17 00:00:00 2001 From: rosstimothy <39066650+rosstimothy@users.noreply.github.com> Date: Fri, 15 Nov 2024 13:49:35 -0500 Subject: [PATCH 040/111] Attempt to deflake TestDynamicClientReuse (#49080) The test was only waiting for a subset of services to be ready, proceeding with the test, and then closing the process. This caused a few problems that contributed to the flakiness. First, not calling `process.Wait` resulted in some services still being active and writing to the data directory while the testing framework was cleaning up the temp directory. Second, adding the Wait alone, would cause deadlocks because the test did not wait for all services to be initialized and ready before shutting down. In addition to making both of th changes above, the test was also modified to reduce the number of services being launched to slightly speed up the test. Closes #46958. --- lib/service/service_test.go | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/lib/service/service_test.go b/lib/service/service_test.go index d3905e246a50e..1c7570d30920c 100644 --- a/lib/service/service_test.go +++ b/lib/service/service_test.go @@ -63,6 +63,7 @@ import ( "github.com/gravitational/teleport/lib/integrations/externalauditstorage" "github.com/gravitational/teleport/lib/limiter" "github.com/gravitational/teleport/lib/modules" + "github.com/gravitational/teleport/lib/multiplexer" "github.com/gravitational/teleport/lib/reversetunnelclient" "github.com/gravitational/teleport/lib/service/servicecfg" "github.com/gravitational/teleport/lib/services" @@ -189,24 +190,39 @@ func TestDynamicClientReuse(t *testing.T) { cfg := servicecfg.MakeDefaultConfig() cfg.Clock = fakeClock - var err error cfg.DataDir = t.TempDir() - cfg.DiagnosticAddr = utils.NetAddr{AddrNetwork: "tcp", Addr: "127.0.0.1:0"} cfg.SetAuthServerAddress(utils.NetAddr{AddrNetwork: "tcp", Addr: "127.0.0.1:0"}) cfg.Auth.Enabled = true cfg.Auth.ListenAddr = utils.NetAddr{AddrNetwork: "tcp", Addr: "127.0.0.1:0"} cfg.Auth.SessionRecordingConfig.SetMode(types.RecordOff) + cfg.Auth.NoAudit = true cfg.Proxy.Enabled = true + cfg.Proxy.DisableDatabaseProxy = true cfg.Proxy.DisableWebInterface = true + cfg.Proxy.DisableReverseTunnel = true + cfg.Proxy.IdP.SAMLIdP.Enabled = false + cfg.Proxy.PROXYProtocolMode = multiplexer.PROXYProtocolOff cfg.Proxy.WebAddr = utils.NetAddr{AddrNetwork: "tcp", Addr: "localhost:0"} cfg.SSH.Enabled = false + cfg.DebugService.Enabled = false cfg.CircuitBreakerConfig = breaker.NoopBreakerConfig() process, err := NewTeleport(cfg) require.NoError(t, err) require.NoError(t, process.Start()) - t.Cleanup(func() { require.NoError(t, process.Close()) }) + + ctx, cancel := context.WithTimeout(process.ExitContext(), 30*time.Second) + defer cancel() + for _, eventName := range []string{AuthTLSReady, ProxySSHReady, ProxyWebServerReady, InstanceReady} { + _, err := process.WaitForEvent(ctx, eventName) + require.NoError(t, err) + } + + t.Cleanup(func() { + require.NoError(t, process.Close()) + require.NoError(t, process.Wait()) + }) // wait for instance connector iconn, err := process.WaitForConnector(InstanceIdentityEvent, process.logger) @@ -234,17 +250,19 @@ func TestDynamicClientReuse(t *testing.T) { // initial static set of system roles that got applied to the instance cert. require.NotSame(t, iconn.Client, nconn.Client) - nconn.Close() + require.NoError(t, nconn.Close()) // node connector closure should not affect proxy client _, err = pconn.Client.Ping(context.Background()) require.NoError(t, err) - pconn.Close() + require.NoError(t, pconn.Close()) // proxy connector closure should not affect instance client _, err = iconn.Client.Ping(context.Background()) require.NoError(t, err) + + require.NoError(t, iconn.Close()) } func TestMonitor(t *testing.T) { From 951c7b75c3d99733fc32c09e6e8257b68807cd11 Mon Sep 17 00:00:00 2001 From: Forrest <30576607+fspmarshall@users.noreply.github.com> Date: Mon, 18 Nov 2024 11:14:46 -0800 Subject: [PATCH 041/111] reduce locking test flake (#49137) --- lib/backend/test/suite.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/backend/test/suite.go b/lib/backend/test/suite.go index 798a69bfce1c2..79c8f8e561307 100644 --- a/lib/backend/test/suite.go +++ b/lib/backend/test/suite.go @@ -789,7 +789,7 @@ func testWatchersClose(t *testing.T, newBackend Constructor) { func testLocking(t *testing.T, newBackend Constructor) { tok1 := "token1" tok2 := "token2" - ttl := 5 * time.Second + ttl := 30 * time.Second uut, clock, err := newBackend() require.NoError(t, err) From 5bad9312d9748127e3f2a5c2aff4889893dc602f Mon Sep 17 00:00:00 2001 From: Paul Gottschling Date: Mon, 18 Nov 2024 14:56:20 -0500 Subject: [PATCH 042/111] Fix `tctl users add` reference examples (#48543) Closes #10574 - Present the examples with a correct use of the `logins` flag - Since the current examples overlap, just use one The remaining issues identified by #10574 are already resolved or out of date. --- docs/pages/reference/cli/tctl.mdx | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/docs/pages/reference/cli/tctl.mdx b/docs/pages/reference/cli/tctl.mdx index 4b58fcc3e3fa1..084522e975672 100644 --- a/docs/pages/reference/cli/tctl.mdx +++ b/docs/pages/reference/cli/tctl.mdx @@ -1624,11 +1624,9 @@ These flags are available for all commands `--debug, --config`. Run ### Examples ```code -# Adds teleport user "joe" with mappings to -# OS users and {{ internal.logins }} to "joe" and "ubuntu" -$ tctl users add joe --roles=access,requester joe,ubuntu -# Adds Teleport user "joe" with mappings to the editor role -$ tctl users add joe --roles=editor,reviewer +# Adds Teleport user "joe" with the "access" and "requester" roles and +# permissions to assume the "joe" and "ubuntu" logins +$ tctl users add joe --roles=access,requester --logins=joe,ubuntu ``` ## tctl users ls From a05ad6801b95a5dc7505e772add3e29e1e9a7257 Mon Sep 17 00:00:00 2001 From: Steven Martin Date: Tue, 19 Nov 2024 09:00:23 -0500 Subject: [PATCH 043/111] [v15] docs: update db gui client (#49155) * docs: update db gui client * docs: remove Teleport version ref in db gui client Co-authored-by: Paul Gottschling * docs: include peer as join session mode in access role ref --------- Co-authored-by: Paul Gottschling --- docs/pages/connect-your-client/gui-clients.mdx | 15 +++++++++++++-- docs/pages/includes/role-spec.mdx | 4 ++-- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/docs/pages/connect-your-client/gui-clients.mdx b/docs/pages/connect-your-client/gui-clients.mdx index ad46dc02ddc86..500058c814509 100644 --- a/docs/pages/connect-your-client/gui-clients.mdx +++ b/docs/pages/connect-your-client/gui-clients.mdx @@ -10,9 +10,20 @@ work with Teleport. ### Prerequisites -(!docs/pages/includes/edition-prereqs-tabs.mdx!) +- A running Teleport cluster. If you want to get started with Teleport, [sign + up](https://goteleport.com/signup) for a free trial or [set up a demo + environment](../admin-guides/deploy-a-cluster/linux-demo.mdx). + +- The `tsh` client tool. Visit [Installation](../installation.mdx) for instructions on downloading + `tsh`. See the [Using Teleport Connect](./teleport-connect.mdx) guide for a graphical desktop client + that includes `tsh`. + +- To check that you can connect to your Teleport cluster, sign in with `tsh login`. For example: + + ```code + $ tsh login --proxy= --user= + ``` -- (!docs/pages/includes/tctl.mdx!) - The Teleport Database Service configured to access a database. See one of our [guides](../enroll-resources/database-access/guides/guides.mdx) for how to set up the Teleport Database Service for your database. diff --git a/docs/pages/includes/role-spec.mdx b/docs/pages/includes/role-spec.mdx index e899a5536ed7a..4ae36723bb5e3 100644 --- a/docs/pages/includes/role-spec.mdx +++ b/docs/pages/includes/role-spec.mdx @@ -373,7 +373,7 @@ spec: # generates a role name from the value capture roles: ['$1-admin'] - # Teleport can attach annotations to pending Access Requests. these + # Teleport can attach annotations to pending Access Requests. These # annotations may be literals, or be variable interpolation expressions, # effectively creating a means for propagating selected claims from an # external identity provider to the plugin system. @@ -411,7 +411,7 @@ spec: # The different session kinds this policy applies to. kinds: ['k8s', 'ssh'] # The list of session participant modes the role may join the session as. - modes: ['moderator', 'observer'] + modes: ['moderator', 'observer', 'peer'] # spiffe is a list of SPIFFE IDs that the role holder is allowed to request # SVIDs for. As long as the request matches one of the blocks within the From a575d663ed176750461ca2e5f3462386e2345550 Mon Sep 17 00:00:00 2001 From: Andrew Burke <31974658+atburke@users.noreply.github.com> Date: Tue, 19 Nov 2024 09:02:19 -0800 Subject: [PATCH 044/111] Azure join method - Use attested data subscription id (#49158) This change updates the Azure join method to look up VMs based on the subscription ID provided in the VM's attested data, rather than the subscription ID derived from its access token. --- lib/auth/bot_test.go | 25 ++-- lib/auth/join_azure.go | 57 ++++---- lib/auth/join_azure_test.go | 274 +++++++++++++++++++++++------------- 3 files changed, 221 insertions(+), 135 deletions(-) diff --git a/lib/auth/bot_test.go b/lib/auth/bot_test.go index 4c54114a96522..6a8bd417bba8e 100644 --- a/lib/auth/bot_test.go +++ b/lib/auth/bot_test.go @@ -388,7 +388,7 @@ func TestRegisterBot_RemoteAddr(t *testing.T) { t.Run("Azure method", func(t *testing.T) { subID := uuid.NewString() resourceGroup := "rg" - rsID := resourceID(subID, resourceGroup, "test-vm") + rsID := vmResourceID(subID, resourceGroup, "test-vm") vmID := "vmID" accessToken, err := makeToken(rsID, a.clock.Now()) @@ -408,13 +408,20 @@ func TestRegisterBot_RemoteAddr(t *testing.T) { require.NoError(t, err) require.NoError(t, a.UpsertToken(ctx, azureToken)) - vmClient := &mockAzureVMClient{vm: &azure.VirtualMachine{ - ID: rsID, - Name: "test-vm", - Subscription: subID, - ResourceGroup: resourceGroup, - VMID: vmID, - }} + vmClient := &mockAzureVMClient{ + vms: map[string]*azure.VirtualMachine{ + rsID: { + ID: rsID, + Name: "test-vm", + Subscription: subID, + ResourceGroup: resourceGroup, + VMID: vmID, + }, + }, + } + getVMClient := makeVMClientGetter(map[string]*mockAzureVMClient{ + subID: vmClient, + }) tlsConfig, err := fixtures.LocalTLSConfig() require.NoError(t, err) @@ -456,7 +463,7 @@ func TestRegisterBot_RemoteAddr(t *testing.T) { AccessToken: accessToken, } return req, nil - }, withCerts([]*x509.Certificate{tlsConfig.Certificate}), withVerifyFunc(mockVerifyToken(nil)), withVMClient(vmClient)) + }, withCerts([]*x509.Certificate{tlsConfig.Certificate}), withVerifyFunc(mockVerifyToken(nil)), withVMClientGetter(getVMClient)) require.NoError(t, err) checkCertLoginIP(t, certs.TLS, remoteAddr) }) diff --git a/lib/auth/join_azure.go b/lib/auth/join_azure.go index e044d4e810a69..4ce6311a6970f 100644 --- a/lib/auth/join_azure.go +++ b/lib/auth/join_azure.go @@ -83,11 +83,13 @@ type accessTokenClaims struct { type azureVerifyTokenFunc func(ctx context.Context, rawIDToken string) (*accessTokenClaims, error) +type vmClientGetter func(subscriptionID string, token *azure.StaticCredential) (azure.VirtualMachinesClient, error) + type azureRegisterConfig struct { clock clockwork.Clock certificateAuthorities []*x509.Certificate verify azureVerifyTokenFunc - vmClient azure.VirtualMachinesClient + getVMClient vmClientGetter } func azureVerifyFuncFromOIDCVerifier(cfg *oidc.Config) azureVerifyTokenFunc { @@ -140,6 +142,12 @@ func (cfg *azureRegisterConfig) CheckAndSetDefaults(ctx context.Context) error { } cfg.certificateAuthorities = certs } + if cfg.getVMClient == nil { + cfg.getVMClient = func(subscriptionID string, token *azure.StaticCredential) (azure.VirtualMachinesClient, error) { + client, err := azure.NewVirtualMachinesClient(subscriptionID, token, nil) + return client, trace.Wrap(err) + } + } return nil } @@ -148,42 +156,42 @@ type azureRegisterOption func(cfg *azureRegisterConfig) // parseAndVeryAttestedData verifies that an attested data document was signed // by Azure. If verification is successful, it returns the ID of the VM that // produced the document. -func parseAndVerifyAttestedData(ctx context.Context, adBytes []byte, challenge string, certs []*x509.Certificate) (string, error) { +func parseAndVerifyAttestedData(ctx context.Context, adBytes []byte, challenge string, certs []*x509.Certificate) (subscriptionID, vmID string, err error) { var signedAD signedAttestedData if err := utils.FastUnmarshal(adBytes, &signedAD); err != nil { - return "", trace.Wrap(err) + return "", "", trace.Wrap(err) } if signedAD.Encoding != "pkcs7" { - return "", trace.AccessDenied("unsupported signature type: %v", signedAD.Encoding) + return "", "", trace.AccessDenied("unsupported signature type: %v", signedAD.Encoding) } sigPEM := "-----BEGIN PKCS7-----\n" + signedAD.Signature + "\n-----END PKCS7-----" sigBER, _ := pem.Decode([]byte(sigPEM)) if sigBER == nil { - return "", trace.AccessDenied("unable to decode attested data document") + return "", "", trace.AccessDenied("unable to decode attested data document") } p7, err := pkcs7.Parse(sigBER.Bytes) if err != nil { - return "", trace.Wrap(err) + return "", "", trace.Wrap(err) } var ad attestedData if err := utils.FastUnmarshal(p7.Content, &ad); err != nil { - return "", trace.Wrap(err) + return "", "", trace.Wrap(err) } if ad.Nonce != challenge { - return "", trace.AccessDenied("challenge is missing or does not match") + return "", "", trace.AccessDenied("challenge is missing or does not match") } if len(p7.Certificates) == 0 { - return "", trace.AccessDenied("no certificates for signature") + return "", "", trace.AccessDenied("no certificates for signature") } fixAzureSigningAlgorithm(p7) // Azure only sends the leaf cert, so we have to fetch the intermediate. intermediate, err := getAzureIssuerCert(ctx, p7.Certificates[0]) if err != nil { - return "", trace.Wrap(err) + return "", "", trace.Wrap(err) } if intermediate != nil { p7.Certificates = append(p7.Certificates, intermediate) @@ -195,15 +203,15 @@ func parseAndVerifyAttestedData(ctx context.Context, adBytes []byte, challenge s } if err := p7.VerifyWithChain(pool); err != nil { - return "", trace.Wrap(err) + return "", "", trace.Wrap(err) } - return ad.ID, nil + return ad.SubscriptionID, ad.ID, nil } // verifyVMIdentity verifies that the provided access token came from the // correct Azure VM. -func verifyVMIdentity(ctx context.Context, cfg *azureRegisterConfig, accessToken, vmID string, requestStart time.Time) (*azure.VirtualMachine, error) { +func verifyVMIdentity(ctx context.Context, cfg *azureRegisterConfig, accessToken, subscriptionID, vmID string, requestStart time.Time) (*azure.VirtualMachine, error) { tokenClaims, err := cfg.verify(ctx, accessToken) if err != nil { return nil, trace.Wrap(err) @@ -231,24 +239,15 @@ func verifyVMIdentity(ctx context.Context, cfg *azureRegisterConfig, accessToken return nil, trace.Wrap(err) } - rsID, err := arm.ParseResourceID(tokenClaims.ResourceID) + tokenCredential := azure.NewStaticCredential(azcore.AccessToken{ + Token: accessToken, + ExpiresOn: tokenClaims.Expiry.Time(), + }) + vmClient, err := cfg.getVMClient(subscriptionID, tokenCredential) if err != nil { return nil, trace.Wrap(err) } - vmClient := cfg.vmClient - if vmClient == nil { - tokenCredential := azure.NewStaticCredential(azcore.AccessToken{ - Token: accessToken, - ExpiresOn: tokenClaims.Expiry.Time(), - }) - var err error - vmClient, err = azure.NewVirtualMachinesClient(rsID.SubscriptionID, tokenCredential, nil) - if err != nil { - return nil, trace.Wrap(err) - } - } - resourceID, err := arm.ParseResourceID(tokenClaims.ResourceID) if err != nil { return nil, trace.Wrap(err) @@ -324,12 +323,12 @@ func (a *Server) checkAzureRequest(ctx context.Context, challenge string, req *p return trace.AccessDenied("this token does not support the Azure join method") } - vmID, err := parseAndVerifyAttestedData(ctx, req.AttestedData, challenge, cfg.certificateAuthorities) + subID, vmID, err := parseAndVerifyAttestedData(ctx, req.AttestedData, challenge, cfg.certificateAuthorities) if err != nil { return trace.Wrap(err) } - vm, err := verifyVMIdentity(ctx, cfg, req.AccessToken, vmID, requestStart) + vm, err := verifyVMIdentity(ctx, cfg, req.AccessToken, subID, vmID, requestStart) if err != nil { return trace.Wrap(err) } diff --git a/lib/auth/join_azure_test.go b/lib/auth/join_azure_test.go index 5fe5d487fcf3a..faa9bb6f0cb95 100644 --- a/lib/auth/join_azure_test.go +++ b/lib/auth/join_azure_test.go @@ -54,23 +54,41 @@ func withVerifyFunc(verify azureVerifyTokenFunc) azureRegisterOption { } } -func withVMClient(vmClient azure.VirtualMachinesClient) azureRegisterOption { +func withVMClientGetter(getVMClient vmClientGetter) azureRegisterOption { return func(cfg *azureRegisterConfig) { - cfg.vmClient = vmClient + cfg.getVMClient = getVMClient } } type mockAzureVMClient struct { azure.VirtualMachinesClient - vm *azure.VirtualMachine + vms map[string]*azure.VirtualMachine } -func (m *mockAzureVMClient) Get(_ context.Context, _ string) (*azure.VirtualMachine, error) { - return m.vm, nil +func (m *mockAzureVMClient) Get(_ context.Context, resourceID string) (*azure.VirtualMachine, error) { + vm, ok := m.vms[resourceID] + if !ok { + return nil, trace.NotFound("no vm with resource id %q", resourceID) + } + return vm, nil +} + +func (m *mockAzureVMClient) GetByVMID(_ context.Context, resourceGroup, vmID string) (*azure.VirtualMachine, error) { + for _, vm := range m.vms { + if vm.VMID == vmID && (resourceGroup == types.Wildcard || vm.ResourceGroup == resourceGroup) { + return vm, nil + } + } + return nil, trace.NotFound("no vm in groups %q with id %q", resourceGroup, vmID) } -func (m *mockAzureVMClient) GetByVMID(_ context.Context, _, _ string) (*azure.VirtualMachine, error) { - return m.vm, nil +func makeVMClientGetter(clients map[string]*mockAzureVMClient) vmClientGetter { + return func(subscriptionID string, _ *azure.StaticCredential) (azure.VirtualMachinesClient, error) { + if client, ok := clients[subscriptionID]; ok { + return client, nil + } + return nil, trace.NotFound("no client for subscription %q", subscriptionID) + } } type azureChallengeResponseConfig struct { @@ -85,10 +103,14 @@ func withChallengeAzure(challenge string) azureChallengeResponseOption { } } -func resourceID(subscription, resourceGroup, name string) string { +func vmResourceID(subscription, resourceGroup, name string) string { + return resourceID("virtualMachines", subscription, resourceGroup, name) +} + +func resourceID(resourceType, subscription, resourceGroup, name string) string { return fmt.Sprintf( - "/subscriptions/%v/resourcegroups/%v/providers/Microsoft.Compute/virtualMachines/%v", - subscription, resourceGroup, name, + "/subscriptions/%v/resourcegroups/%v/providers/Microsoft.Compute/%v/%v", + subscription, resourceGroup, resourceType, name, ) } @@ -161,43 +183,47 @@ func TestAuth_RegisterUsingAzureMethod(t *testing.T) { tlsPublicKey, err := PrivateKeyToPublicKeyTLS(sshPrivateKey) require.NoError(t, err) - isAccessDenied := func(t require.TestingT, err error, _ ...interface{}) { + isAccessDenied := func(t require.TestingT, err error, _ ...any) { require.True(t, trace.IsAccessDenied(err), "expected Access Denied error, actual error: %v", err) } - isBadParameter := func(t require.TestingT, err error, _ ...interface{}) { + isBadParameter := func(t require.TestingT, err error, _ ...any) { require.True(t, trace.IsBadParameter(err), "expected Bad Parameter error, actual error: %v", err) } + isNotFound := func(t require.TestingT, err error, _ ...any) { + require.True(t, trace.IsNotFound(err), "expected Not Found error, actual error: %v", err) + } - subID := uuid.NewString() + defaultSubscription := uuid.NewString() + defaultResourceGroup := "my-resource-group" + defaultName := "test-vm" + defaultVMID := "my-vm-id" + defaultResourceID := vmResourceID(defaultSubscription, defaultResourceGroup, defaultName) tests := []struct { name string - subscription string - resourceGroup string - vmID string - tokenName string + tokenResourceID string + tokenSubscription string + tokenVMID string requestTokenName string tokenSpec types.ProvisionTokenSpecV2 challengeResponseOptions []azureChallengeResponseOption challengeResponseErr error certs []*x509.Certificate verify azureVerifyTokenFunc - vmResult *azure.VirtualMachine assertError require.ErrorAssertionFunc }{ { - name: "basic passing case", - tokenName: "test-token", - requestTokenName: "test-token", - subscription: subID, - resourceGroup: "RG", + name: "basic passing case", + requestTokenName: "test-token", + tokenSubscription: defaultSubscription, + tokenVMID: defaultVMID, tokenSpec: types.ProvisionTokenSpecV2{ Roles: []types.SystemRole{types.RoleNode}, Azure: &types.ProvisionTokenSpecV2Azure{ Allow: []*types.ProvisionTokenSpecV2Azure_Rule{ { - Subscription: subID, - ResourceGroups: []string{"rg"}, + Subscription: defaultSubscription, + ResourceGroups: []string{defaultResourceGroup}, }, }, }, @@ -208,18 +234,17 @@ func TestAuth_RegisterUsingAzureMethod(t *testing.T) { assertError: require.NoError, }, { - name: "resource group is case insensitive", - tokenName: "test-token", - requestTokenName: "test-token", - subscription: subID, - resourceGroup: "my-RESOURCE-GROUP", + name: "resource group is case insensitive", + requestTokenName: "test-token", + tokenSubscription: defaultSubscription, + tokenVMID: defaultVMID, tokenSpec: types.ProvisionTokenSpecV2{ Roles: []types.SystemRole{types.RoleNode}, Azure: &types.ProvisionTokenSpecV2Azure{ Allow: []*types.ProvisionTokenSpecV2Azure_Rule{ { - Subscription: subID, - ResourceGroups: []string{"MY-resource-group"}, + Subscription: defaultSubscription, + ResourceGroups: []string{"MY-resource-GROUP"}, }, }, }, @@ -230,17 +255,16 @@ func TestAuth_RegisterUsingAzureMethod(t *testing.T) { assertError: require.NoError, }, { - name: "wrong token", - tokenName: "test-token", - requestTokenName: "wrong-token", - subscription: subID, - resourceGroup: "RG", + name: "wrong token", + requestTokenName: "wrong-token", + tokenSubscription: defaultSubscription, + tokenVMID: defaultVMID, tokenSpec: types.ProvisionTokenSpecV2{ Roles: []types.SystemRole{types.RoleNode}, Azure: &types.ProvisionTokenSpecV2Azure{ Allow: []*types.ProvisionTokenSpecV2Azure_Rule{ { - Subscription: subID, + Subscription: defaultSubscription, }, }, }, @@ -251,17 +275,16 @@ func TestAuth_RegisterUsingAzureMethod(t *testing.T) { assertError: isAccessDenied, }, { - name: "challenge response error", - tokenName: "test-token", - requestTokenName: "test-token", - subscription: subID, - resourceGroup: "RG", + name: "challenge response error", + requestTokenName: "test-token", + tokenSubscription: defaultSubscription, + tokenVMID: defaultVMID, tokenSpec: types.ProvisionTokenSpecV2{ Roles: []types.SystemRole{types.RoleNode}, Azure: &types.ProvisionTokenSpecV2Azure{ Allow: []*types.ProvisionTokenSpecV2Azure_Rule{ { - Subscription: subID, + Subscription: defaultSubscription, }, }, }, @@ -273,17 +296,16 @@ func TestAuth_RegisterUsingAzureMethod(t *testing.T) { assertError: isBadParameter, }, { - name: "wrong subscription", - tokenName: "test-token", - requestTokenName: "test-token", - subscription: "some-junk", - resourceGroup: "RG", + name: "wrong subscription", + requestTokenName: "test-token", + tokenSubscription: defaultSubscription, + tokenVMID: defaultVMID, tokenSpec: types.ProvisionTokenSpecV2{ Roles: []types.SystemRole{types.RoleNode}, Azure: &types.ProvisionTokenSpecV2Azure{ Allow: []*types.ProvisionTokenSpecV2Azure_Rule{ { - Subscription: subID, + Subscription: "alternate-subscription-id", }, }, }, @@ -294,18 +316,17 @@ func TestAuth_RegisterUsingAzureMethod(t *testing.T) { assertError: isAccessDenied, }, { - name: "wrong resource group", - tokenName: "test-token", - requestTokenName: "test-token", - subscription: subID, - resourceGroup: "WRONG-RG", + name: "wrong resource group", + requestTokenName: "test-token", + tokenSubscription: defaultSubscription, + tokenVMID: defaultVMID, tokenSpec: types.ProvisionTokenSpecV2{ Roles: []types.SystemRole{types.RoleNode}, Azure: &types.ProvisionTokenSpecV2Azure{ Allow: []*types.ProvisionTokenSpecV2Azure_Rule{ { - Subscription: subID, - ResourceGroups: []string{"rg"}, + Subscription: defaultSubscription, + ResourceGroups: []string{"alternate-resource-group"}, }, }, }, @@ -316,17 +337,16 @@ func TestAuth_RegisterUsingAzureMethod(t *testing.T) { assertError: isAccessDenied, }, { - name: "wrong challenge", - tokenName: "test-token", - requestTokenName: "test-token", - subscription: subID, - resourceGroup: "RG", + name: "wrong challenge", + requestTokenName: "test-token", + tokenSubscription: defaultSubscription, + tokenVMID: defaultVMID, tokenSpec: types.ProvisionTokenSpecV2{ Roles: []types.SystemRole{types.RoleNode}, Azure: &types.ProvisionTokenSpecV2Azure{ Allow: []*types.ProvisionTokenSpecV2Azure_Rule{ { - Subscription: subID, + Subscription: defaultSubscription, }, }, }, @@ -340,17 +360,16 @@ func TestAuth_RegisterUsingAzureMethod(t *testing.T) { assertError: isAccessDenied, }, { - name: "invalid signature", - tokenName: "test-token", - requestTokenName: "test-token", - subscription: subID, - resourceGroup: "RG", + name: "invalid signature", + requestTokenName: "test-token", + tokenSubscription: defaultSubscription, + tokenVMID: defaultVMID, tokenSpec: types.ProvisionTokenSpecV2{ Roles: []types.SystemRole{types.RoleNode}, Azure: &types.ProvisionTokenSpecV2Azure{ Allow: []*types.ProvisionTokenSpecV2Azure_Rule{ { - Subscription: subID, + Subscription: defaultSubscription, }, }, }, @@ -361,38 +380,94 @@ func TestAuth_RegisterUsingAzureMethod(t *testing.T) { assertError: require.Error, }, { - name: "attested data and access token from different VMs", - tokenName: "test-token", - requestTokenName: "test-token", - subscription: subID, - resourceGroup: "RG", - vmID: "vm-id", + name: "attested data and access token from different VMs", + requestTokenName: "test-token", + tokenSubscription: defaultSubscription, + tokenVMID: "some-other-vm-id", tokenSpec: types.ProvisionTokenSpecV2{ Roles: []types.SystemRole{types.RoleNode}, Azure: &types.ProvisionTokenSpecV2Azure{ Allow: []*types.ProvisionTokenSpecV2Azure_Rule{ { - Subscription: subID, + Subscription: defaultSubscription, }, }, }, JoinMethod: types.JoinMethodAzure, }, - vmResult: &azure.VirtualMachine{ - Subscription: subID, - ResourceGroup: "RG", - VMID: "different-id", - }, verify: mockVerifyToken(nil), certs: []*x509.Certificate{tlsConfig.Certificate}, assertError: isAccessDenied, }, + { + name: "vm not found", + requestTokenName: "test-token", + tokenSubscription: defaultSubscription, + tokenVMID: defaultVMID, + tokenResourceID: vmResourceID(defaultSubscription, "nonexistent-group", defaultName), + tokenSpec: types.ProvisionTokenSpecV2{ + Roles: []types.SystemRole{types.RoleNode}, + Azure: &types.ProvisionTokenSpecV2Azure{ + Allow: []*types.ProvisionTokenSpecV2Azure_Rule{ + { + Subscription: defaultSubscription, + }, + }, + }, + JoinMethod: types.JoinMethodAzure, + }, + verify: mockVerifyToken(nil), + certs: []*x509.Certificate{tlsConfig.Certificate}, + assertError: isNotFound, + }, + { + name: "lookup vm by id", + requestTokenName: "test-token", + tokenSubscription: defaultSubscription, + tokenVMID: defaultVMID, + tokenResourceID: resourceID("some.other.provider", defaultSubscription, defaultResourceGroup, defaultName), + tokenSpec: types.ProvisionTokenSpecV2{ + Roles: []types.SystemRole{types.RoleNode}, + Azure: &types.ProvisionTokenSpecV2Azure{ + Allow: []*types.ProvisionTokenSpecV2Azure_Rule{ + { + Subscription: defaultSubscription, + }, + }, + }, + JoinMethod: types.JoinMethodAzure, + }, + verify: mockVerifyToken(nil), + certs: []*x509.Certificate{tlsConfig.Certificate}, + assertError: require.NoError, + }, + { + name: "vm is in a different subscription than the token it provides", + requestTokenName: "test-token", + tokenSubscription: defaultSubscription, + tokenVMID: defaultVMID, + tokenResourceID: resourceID("some.other.provider", "some-other-subscription", defaultResourceGroup, defaultName), + tokenSpec: types.ProvisionTokenSpecV2{ + Roles: []types.SystemRole{types.RoleNode}, + Azure: &types.ProvisionTokenSpecV2Azure{ + Allow: []*types.ProvisionTokenSpecV2Azure_Rule{ + { + Subscription: defaultSubscription, + }, + }, + }, + JoinMethod: types.JoinMethodAzure, + }, + verify: mockVerifyToken(nil), + certs: []*x509.Certificate{tlsConfig.Certificate}, + assertError: require.NoError, + }, } for _, tc := range tests { t.Run(tc.name, func(t *testing.T) { token, err := types.NewProvisionTokenFromSpec( - tc.tokenName, + "test-token", time.Now().Add(time.Minute), tc.tokenSpec) require.NoError(t, err) @@ -401,23 +476,28 @@ func TestAuth_RegisterUsingAzureMethod(t *testing.T) { require.NoError(t, a.DeleteToken(ctx, token.GetName())) }) - rsID := resourceID(tc.subscription, tc.resourceGroup, "test-vm") + rsID := tc.tokenResourceID + if rsID == "" { + rsID = vmResourceID(defaultSubscription, defaultResourceGroup, defaultName) + } accessToken, err := makeToken(rsID, a.clock.Now()) require.NoError(t, err) - vmResult := tc.vmResult - if vmResult == nil { - vmResult = &azure.VirtualMachine{ - ID: rsID, - Name: "test-vm", - Subscription: tc.subscription, - ResourceGroup: tc.resourceGroup, - VMID: tc.vmID, - } + vmClient := &mockAzureVMClient{ + vms: map[string]*azure.VirtualMachine{ + defaultResourceID: { + ID: defaultResourceID, + Name: defaultName, + Subscription: defaultSubscription, + ResourceGroup: defaultResourceGroup, + VMID: defaultVMID, + }, + }, } - - vmClient := &mockAzureVMClient{vm: vmResult} + getVMClient := makeVMClientGetter(map[string]*mockAzureVMClient{ + defaultSubscription: vmClient, + }) _, err = a.RegisterUsingAzureMethod(context.Background(), func(challenge string) (*proto.RegisterUsingAzureMethodRequest, error) { cfg := &azureChallengeResponseConfig{Challenge: challenge} @@ -427,8 +507,8 @@ func TestAuth_RegisterUsingAzureMethod(t *testing.T) { ad := attestedData{ Nonce: cfg.Challenge, - SubscriptionID: subID, - ID: tc.vmID, + SubscriptionID: tc.tokenSubscription, + ID: tc.tokenVMID, } adBytes, err := json.Marshal(&ad) require.NoError(t, err) @@ -456,7 +536,7 @@ func TestAuth_RegisterUsingAzureMethod(t *testing.T) { AccessToken: accessToken, } return req, tc.challengeResponseErr - }, withCerts(tc.certs), withVerifyFunc(tc.verify), withVMClient(vmClient)) + }, withCerts(tc.certs), withVerifyFunc(tc.verify), withVMClientGetter(getVMClient)) tc.assertError(t, err) }) } From f3de6e4c54a6a6dd667c3de0dae2c036eb25fca5 Mon Sep 17 00:00:00 2001 From: rosstimothy <39066650+rosstimothy@users.noreply.github.com> Date: Tue, 19 Nov 2024 12:26:41 -0500 Subject: [PATCH 045/111] Update local storage services to prefer ConditionalUpdate (#49184) Migrates existing uses of backend.CompareAndSwap to use backend.ConditionalUpdate instead. As long as the revision is being correctly and accurately provided, the conditional update is a better version of atomic resource update than CAS. --- lib/services/local/connection_diagnostic.go | 3 +-- lib/services/local/dynamic_access.go | 10 ++++------ lib/services/local/plugin_data.go | 2 +- lib/services/local/plugins.go | 2 +- lib/services/local/presence.go | 12 +++++------ lib/services/local/sessiontracker.go | 22 ++++++++++----------- lib/services/local/unstable.go | 3 ++- 7 files changed, 26 insertions(+), 28 deletions(-) diff --git a/lib/services/local/connection_diagnostic.go b/lib/services/local/connection_diagnostic.go index 56d8b07f9e697..1cfd67e70e77e 100644 --- a/lib/services/local/connection_diagnostic.go +++ b/lib/services/local/connection_diagnostic.go @@ -87,7 +87,6 @@ func (s *ConnectionDiagnosticService) UpdateConnectionDiagnostic(ctx context.Con } // AppendDiagnosticTrace adds a Trace into the ConnectionDiagnostics. -// It does a CompareAndSwap to ensure atomicity. func (s *ConnectionDiagnosticService) AppendDiagnosticTrace(ctx context.Context, name string, t *types.ConnectionDiagnosticTrace) (types.ConnectionDiagnostic, error) { existing, err := s.Get(ctx, backend.NewKey(connectionDiagnosticPrefix, name)) if err != nil { @@ -118,7 +117,7 @@ func (s *ConnectionDiagnosticService) AppendDiagnosticTrace(ctx context.Context, Revision: existing.Revision, } - _, err = s.CompareAndSwap(ctx, *existing, newItem) + _, err = s.ConditionalUpdate(ctx, newItem) if err != nil { return nil, trace.Wrap(err) } diff --git a/lib/services/local/dynamic_access.go b/lib/services/local/dynamic_access.go index f77cd316c44e2..7737810166d35 100644 --- a/lib/services/local/dynamic_access.go +++ b/lib/services/local/dynamic_access.go @@ -135,7 +135,7 @@ func (s *DynamicAccessService) SetAccessRequestState(ctx context.Context, params if err != nil { return nil, trace.Wrap(err) } - if _, err := s.CompareAndSwap(ctx, *item, newItem); err != nil { + if _, err := s.ConditionalUpdate(ctx, newItem); err != nil { if trace.IsCompareFailed(err) { select { case <-retry.After(): @@ -195,7 +195,7 @@ func (s *DynamicAccessService) ApplyAccessReview(ctx context.Context, params typ if err != nil { return nil, trace.Wrap(err) } - if _, err := s.CompareAndSwap(ctx, *item, newItem); err != nil { + if _, err := s.ConditionalUpdate(ctx, newItem); err != nil { if trace.IsCompareFailed(err) { select { case <-retry.After(): @@ -411,10 +411,8 @@ func (s *DynamicAccessService) CreateAccessRequestAllowedPromotions(ctx context. if err != nil { return trace.Wrap(err) } - // Currently, this logic is used only internally (no API exposed), and - // there is only one place that calls it. If this ever changes, we will - // need to do a CompareAndSwap here. - if _, err := s.Put(ctx, item); err != nil { + + if _, err := s.Create(ctx, item); err != nil { return trace.Wrap(err) } return nil diff --git a/lib/services/local/plugin_data.go b/lib/services/local/plugin_data.go index 21dad758c956e..fe28c1fe08f9b 100644 --- a/lib/services/local/plugin_data.go +++ b/lib/services/local/plugin_data.go @@ -198,7 +198,7 @@ func (p *PluginDataService) updatePluginData(ctx context.Context, params types.P return trace.Wrap(err) } } else { - if _, err := p.CompareAndSwap(ctx, *item, newItem); err != nil { + if _, err := p.ConditionalUpdate(ctx, newItem); err != nil { if trace.IsCompareFailed(err) { select { case <-retry.After(): diff --git a/lib/services/local/plugins.go b/lib/services/local/plugins.go index 6c860949cd0e1..e6e9067dac174 100644 --- a/lib/services/local/plugins.go +++ b/lib/services/local/plugins.go @@ -247,7 +247,7 @@ func (s *PluginsService) updateAndSwap(ctx context.Context, name string, modify return trace.Wrap(err) } - _, err = s.backend.CompareAndSwap(ctx, *item, backend.Item{ + _, err = s.backend.ConditionalUpdate(ctx, backend.Item{ Key: backend.NewKey(pluginsPrefix, plugin.GetName()), Value: value, Expires: plugin.Expiry(), diff --git a/lib/services/local/presence.go b/lib/services/local/presence.go index b9f879a282549..d12acb8932dd2 100644 --- a/lib/services/local/presence.go +++ b/lib/services/local/presence.go @@ -603,7 +603,7 @@ func (s *PresenceService) acquireSemaphore(ctx context.Context, key backend.Key, if err != nil { return nil, trace.Wrap(err) } - sem, err := services.UnmarshalSemaphore(item.Value) + sem, err := services.UnmarshalSemaphore(item.Value, services.WithRevision(item.Revision)) if err != nil { return nil, trace.Wrap(err) } @@ -628,7 +628,7 @@ func (s *PresenceService) acquireSemaphore(ctx context.Context, key backend.Key, Revision: rev, } - if _, err := s.CompareAndSwap(ctx, *item, newItem); err != nil { + if _, err := s.ConditionalUpdate(ctx, newItem); err != nil { return nil, trace.Wrap(err) } return lease, nil @@ -654,7 +654,7 @@ func (s *PresenceService) KeepAliveSemaphoreLease(ctx context.Context, lease typ return trace.Wrap(err) } - sem, err := services.UnmarshalSemaphore(item.Value) + sem, err := services.UnmarshalSemaphore(item.Value, services.WithRevision(item.Revision)) if err != nil { return trace.Wrap(err) } @@ -678,7 +678,7 @@ func (s *PresenceService) KeepAliveSemaphoreLease(ctx context.Context, lease typ Revision: rev, } - _, err = s.CompareAndSwap(ctx, *item, newItem) + _, err = s.ConditionalUpdate(ctx, newItem) if err != nil { if trace.IsCompareFailed(err) { return trace.CompareFailed("semaphore %v/%v has been concurrently updated, try again", sem.GetSubKind(), sem.GetName()) @@ -718,7 +718,7 @@ func (s *PresenceService) CancelSemaphoreLease(ctx context.Context, lease types. return trace.Wrap(err) } - sem, err := services.UnmarshalSemaphore(item.Value) + sem, err := services.UnmarshalSemaphore(item.Value, services.WithRevision(item.Revision)) if err != nil { return trace.Wrap(err) } @@ -740,7 +740,7 @@ func (s *PresenceService) CancelSemaphoreLease(ctx context.Context, lease types. Revision: rev, } - _, err = s.CompareAndSwap(ctx, *item, newItem) + _, err = s.ConditionalUpdate(ctx, newItem) switch { case err == nil: return nil diff --git a/lib/services/local/sessiontracker.go b/lib/services/local/sessiontracker.go index b8906b02d04ad..ad6fc5e9d06f1 100644 --- a/lib/services/local/sessiontracker.go +++ b/lib/services/local/sessiontracker.go @@ -32,11 +32,11 @@ import ( ) const ( - sessionPrefix = "session_tracker" - retryDelay = time.Second - terminatedTTL = 3 * time.Minute - casRetryLimit = 7 - casErrorMessage = "CompareAndSwap reached retry limit" + sessionPrefix = "session_tracker" + retryDelay = time.Second + terminatedTTL = 3 * time.Minute + updateRetryLimit = 7 + updateRetryLimitMessage = "Update retry limit reached" ) type sessionTracker struct { @@ -63,7 +63,7 @@ func (s *sessionTracker) loadSession(ctx context.Context, sessionID string) (typ // UpdatePresence updates the presence status of a user in a session. func (s *sessionTracker) UpdatePresence(ctx context.Context, sessionID, user string) error { - for i := 0; i < casRetryLimit; i++ { + for i := 0; i < updateRetryLimit; i++ { sessionItem, err := s.bk.Get(ctx, backend.NewKey(sessionPrefix, sessionID)) if err != nil { return trace.Wrap(err) @@ -89,7 +89,7 @@ func (s *sessionTracker) UpdatePresence(ctx context.Context, sessionID, user str Expires: session.Expiry(), Revision: sessionItem.Revision, } - _, err = s.bk.CompareAndSwap(ctx, *sessionItem, item) + _, err = s.bk.ConditionalUpdate(ctx, item) if trace.IsCompareFailed(err) { select { case <-ctx.Done(): @@ -102,7 +102,7 @@ func (s *sessionTracker) UpdatePresence(ctx context.Context, sessionID, user str return trace.Wrap(err) } - return trace.CompareFailed(casErrorMessage) + return trace.CompareFailed(updateRetryLimitMessage) } // GetSessionTracker returns the current state of a session tracker for an active session. @@ -202,7 +202,7 @@ func (s *sessionTracker) CreateSessionTracker(ctx context.Context, tracker types // UpdateSessionTracker updates a tracker resource for an active session. func (s *sessionTracker) UpdateSessionTracker(ctx context.Context, req *proto.UpdateSessionTrackerRequest) error { - for i := 0; i < casRetryLimit; i++ { + for i := 0; i < updateRetryLimit; i++ { sessionItem, err := s.bk.Get(ctx, backend.NewKey(sessionPrefix, req.SessionID)) if err != nil { return trace.Wrap(err) @@ -268,7 +268,7 @@ func (s *sessionTracker) UpdateSessionTracker(ctx context.Context, req *proto.Up Expires: expiry, Revision: sessionItem.Revision, } - _, err = s.bk.CompareAndSwap(ctx, *sessionItem, item) + _, err = s.bk.ConditionalUpdate(ctx, item) if trace.IsCompareFailed(err) { select { case <-ctx.Done(): @@ -281,7 +281,7 @@ func (s *sessionTracker) UpdateSessionTracker(ctx context.Context, req *proto.Up return trace.Wrap(err) } - return trace.CompareFailed(casErrorMessage) + return trace.CompareFailed(updateRetryLimitMessage) } // RemoveSessionTracker removes a tracker resource for an active session. diff --git a/lib/services/local/unstable.go b/lib/services/local/unstable.go index de3731fff13d7..15643e4e73b47 100644 --- a/lib/services/local/unstable.go +++ b/lib/services/local/unstable.go @@ -76,7 +76,8 @@ func (s UnstableService) AssertSystemRole(ctx context.Context, req proto.SystemR Expires: time.Now().Add(assertionTTL).UTC(), } if item != nil { - _, err = s.CompareAndSwap(ctx, *item, newItem) + newItem.Revision = item.Revision + _, err = s.ConditionalUpdate(ctx, newItem) if trace.IsCompareFailed(err) { // nodes are expected to perform assertions sequentially return trace.CompareFailed("system role assertion set was concurrently modified (this is bug)") From efdba78609b64891332a9d1312b800d8c664966a Mon Sep 17 00:00:00 2001 From: Zac Bergquist Date: Tue, 19 Nov 2024 12:13:40 -0700 Subject: [PATCH 046/111] Look for a license in the default location if no config is provided (#49148) Prior to this change, the code that determines where to look for a license file would only run when a config file is provided. When running teleport start without a config file, the license file path would be an empty string and loading would fail. Closes #47764 --- .../pages/includes/config-reference/auth-service.yaml | 3 +-- lib/config/configuration_test.go | 11 ++++++----- lib/service/servicecfg/config.go | 1 + lib/service/servicecfg/config_test.go | 2 ++ 4 files changed, 10 insertions(+), 7 deletions(-) diff --git a/docs/pages/includes/config-reference/auth-service.yaml b/docs/pages/includes/config-reference/auth-service.yaml index c3c4ddf383061..abd0938fe67fd 100644 --- a/docs/pages/includes/config-reference/auth-service.yaml +++ b/docs/pages/includes/config-reference/auth-service.yaml @@ -356,8 +356,7 @@ auth_service: routing_strategy: unambiguous_match # License file to start auth server with. Note that this setting is ignored - # in the Teleport Community Edition and is required only for Teleport Pro, Business - # and Enterprise subscription plans. + # in the Teleport Community Edition and is required only for Teleport Enterprise. # # The path can be either absolute or relative to the configured `data_dir` # and should point to the license file obtained from Teleport Download diff --git a/lib/config/configuration_test.go b/lib/config/configuration_test.go index cc110c629be5b..f66fe33109904 100644 --- a/lib/config/configuration_test.go +++ b/lib/config/configuration_test.go @@ -1923,11 +1923,6 @@ func TestLicenseFile(t *testing.T) { cfg := servicecfg.MakeDefaultConfig() - // the license file should be empty by default, as we can only fill - // in the default (/license.pem) after we know what the - // data dir is supposed to be - require.Empty(t, cfg.Auth.LicenseFile) - for i, tc := range testCases { t.Run(fmt.Sprintf("test%d", i), func(t *testing.T) { fc := new(FileConfig) @@ -1941,6 +1936,12 @@ func TestLicenseFile(t *testing.T) { } } +func TestLicenseFileNoConfig(t *testing.T) { + cfg := servicecfg.MakeDefaultConfig() + require.NoError(t, Configure(new(CommandLineFlags), cfg, false /* legacy app flags */)) + require.Equal(t, filepath.Join(defaults.DataDir, defaults.LicenseFile), cfg.Auth.LicenseFile) +} + // TestFIPS makes sure configuration is correctly updated/enforced when in // FedRAMP/FIPS 140-2 mode. func TestFIPS(t *testing.T) { diff --git a/lib/service/servicecfg/config.go b/lib/service/servicecfg/config.go index bdc36f0416523..b756dc0359ca9 100644 --- a/lib/service/servicecfg/config.go +++ b/lib/service/servicecfg/config.go @@ -564,6 +564,7 @@ func ApplyDefaults(cfg *Config) { cfg.Auth.NetworkingConfig = types.DefaultClusterNetworkingConfig() cfg.Auth.SessionRecordingConfig = types.DefaultSessionRecordingConfig() cfg.Auth.Preference = types.DefaultAuthPreference() + cfg.Auth.LicenseFile = filepath.Join(cfg.DataDir, defaults.LicenseFile) defaults.ConfigureLimiter(&cfg.Auth.Limiter) cfg.Proxy.WebAddr = *defaults.ProxyWebListenAddr() diff --git a/lib/service/servicecfg/config_test.go b/lib/service/servicecfg/config_test.go index d23362be2d60b..4fd2d6ba49474 100644 --- a/lib/service/servicecfg/config_test.go +++ b/lib/service/servicecfg/config_test.go @@ -22,6 +22,7 @@ import ( "fmt" "io" "log/slog" + "path/filepath" "regexp" "strings" "testing" @@ -90,6 +91,7 @@ func TestDefaultConfig(t *testing.T) { require.Equal(t, defaults.LimiterMaxConcurrentUsers, auth.Limiter.MaxNumberOfUsers) require.Equal(t, lite.GetName(), config.Auth.StorageConfig.Type) require.Empty(t, auth.StorageConfig.Params[defaults.BackendPath]) + require.Equal(t, filepath.Join(defaults.DataDir, defaults.LicenseFile), config.Auth.LicenseFile) // SSH section ssh := config.SSH From 7a9dfbdca35e5a9cb67409b31acee81b9d6c836c Mon Sep 17 00:00:00 2001 From: Jeff Anderson Date: Tue, 19 Nov 2024 15:37:46 -0500 Subject: [PATCH 047/111] Correct postgres retention_period param syntax (#49232) When trying to use `retention_period` query param with a `postgresql://` URI, this causes a failure. `server error (FATAL: unrecognized configuration parameter "retention_period" (SQLSTATE 42704))` The correct syntax is to include it in the fragment portion of the URI instead. --- docs/pages/includes/config-reference/auth-service.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/pages/includes/config-reference/auth-service.yaml b/docs/pages/includes/config-reference/auth-service.yaml index abd0938fe67fd..4435f75f85e30 100644 --- a/docs/pages/includes/config-reference/auth-service.yaml +++ b/docs/pages/includes/config-reference/auth-service.yaml @@ -63,7 +63,7 @@ teleport: # consume the retention period via a query parameter in the audit_events_uri. See the examples below # for how to configure the retention period for other backends. # Firestore: firestore://events_table_name?eventRetentionPeriod=10d - # Postgres: postgresql://user_name@database-address/teleport_audit?retention_period=10d + # Postgres: postgresql://user_name@database-address/teleport_audit#retention_period=240h retention_period: 365d # minimum/maximum read capacity in units From ca0d551396b3496d0a551b0ea0e9366d6f089d63 Mon Sep 17 00:00:00 2001 From: Cam Hutchison Date: Wed, 20 Nov 2024 08:58:54 +1100 Subject: [PATCH 048/111] [v15] build: Fix "make create-github-release" (#49168) * build: Fix "make create-github-release" Fix the `create-github-release` make target to use "go run" to run the tool that creates the github release. This used to run a tool in this repository that was pre-built, so the "go run" was not needed before. Now the tool has moved to a separate repository, this is required. * build: Remove single-use vars for simplicity Remove the `CHANGELOG` and `RELEASE_NOTES_GEN` vars that contained the name of a Go main package to run in favor of a straightforward "go run" command. --- Makefile | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/Makefile b/Makefile index e39a74202c25e..578bab0d20fa1 100644 --- a/Makefile +++ b/Makefile @@ -1638,10 +1638,10 @@ rustup-install-target-toolchain: rustup-set-version # usage: BASE_BRANCH=branch/v13 BASE_TAG=v13.2.0 make changelog # # BASE_BRANCH and BASE_TAG will be automatically determined if not specified. -CHANGELOG = github.com/gravitational/shared-workflows/tools/changelog@latest .PHONY: changelog changelog: - @go run $(CHANGELOG) --base-branch="$(BASE_BRANCH)" --base-tag="$(BASE_TAG)" ./ + @go run github.com/gravitational/shared-workflows/tools/changelog@latest \ + --base-branch="$(BASE_BRANCH)" --base-tag="$(BASE_TAG)" ./ # create-github-release will generate release notes from the CHANGELOG.md and will # create release notes from them. @@ -1655,12 +1655,14 @@ changelog: # # For more information on release notes generation see: # https://github.com/gravitational/shared-workflows/tree/gus/release-notes/tools/release-notes#readme -RELEASE_NOTES_GEN = github.com/gravitational/shared-workflows/tools/release-notes@latest .PHONY: create-github-release create-github-release: LATEST = false create-github-release: GITHUB_RELEASE_LABELS = "" create-github-release: - @NOTES=$$($(RELEASE_NOTES_GEN) --labels=$(GITHUB_RELEASE_LABELS) $(VERSION) CHANGELOG.md) && gh release create v$(VERSION) \ + @NOTES=$$( \ + go run github.com/gravitational/shared-workflows/tools/release-notes@latest \ + --labels=$(GITHUB_RELEASE_LABELS) $(VERSION) CHANGELOG.md \ + ) && gh release create v$(VERSION) \ -t "Teleport $(VERSION)" \ --latest=$(LATEST) \ --verify-tag \ From 564d6a16c18040d1f0fac36304affbe90517ffc5 Mon Sep 17 00:00:00 2001 From: Carson Anderson Date: Wed, 20 Nov 2024 10:58:58 -0700 Subject: [PATCH 049/111] update platform to 16.4.7 (#49276) --- docs/config.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/config.json b/docs/config.json index 57d50dc4aab4e..c21fbea75eb3e 100644 --- a/docs/config.json +++ b/docs/config.json @@ -134,7 +134,7 @@ "aws_secret_access_key": "zyxw9876-this-is-an-example" }, "cloud": { - "version": "16.4.3", + "version": "16.4.7", "major_version": "16", "sla": { "monthly_percentage": "99.9%", From 12cd583ae14f619e3fe97cce384e3aa2c1f56d5f Mon Sep 17 00:00:00 2001 From: Erik Tate Date: Wed, 20 Nov 2024 13:29:01 -0500 Subject: [PATCH 050/111] changing parker pdeathsig to KILL so to prevent possibility of leaking (#49262) --- lib/srv/reexec.go | 2 +- lib/srv/reexec_linux.go | 11 +++++++++++ lib/srv/reexec_other.go | 2 ++ 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/lib/srv/reexec.go b/lib/srv/reexec.go index da1d84afa9079..4fe1d42aaa8ec 100644 --- a/lib/srv/reexec.go +++ b/lib/srv/reexec.go @@ -1282,7 +1282,7 @@ func (o *osWrapper) newParker(ctx context.Context, credential syscall.Credential } // Perform OS-specific tweaks to the command. - reexecCommandOSTweaks(cmd) + parkerCommandOSTweaks(cmd) if err := cmd.Start(); err != nil { return trace.Wrap(err) diff --git a/lib/srv/reexec_linux.go b/lib/srv/reexec_linux.go index dcba0399ba1a8..26d7742dad210 100644 --- a/lib/srv/reexec_linux.go +++ b/lib/srv/reexec_linux.go @@ -82,6 +82,17 @@ func reexecCommandOSTweaks(cmd *exec.Cmd) { } } +// if we ever need to run parkers on macOS or other platforms with no PDEATHSIG +// we should rework the parker to block on a pipe so it can exit when its parent +// is terminated +func parkerCommandOSTweaks(cmd *exec.Cmd) { + reexecCommandOSTweaks(cmd) + + // parker processes can leak if their PDEATHSIG is SIGQUIT, otherwise we + // could just use reexecCommandOSTweaks + cmd.SysProcAttr.Pdeathsig = syscall.SIGKILL +} + func userCommandOSTweaks(cmd *exec.Cmd) { if cmd.SysProcAttr == nil { cmd.SysProcAttr = new(syscall.SysProcAttr) diff --git a/lib/srv/reexec_other.go b/lib/srv/reexec_other.go index c99e8e3cdac9e..d5f48d6999fb3 100644 --- a/lib/srv/reexec_other.go +++ b/lib/srv/reexec_other.go @@ -27,6 +27,8 @@ import ( func reexecCommandOSTweaks(cmd *exec.Cmd) {} +func parkerCommandOSTweaks(cmd *exec.Cmd) {} + func userCommandOSTweaks(cmd *exec.Cmd) {} func setNeutralOOMScore() error { return nil } From a97b7e06ff50c6d221869e4285e85584a3ec4d3f Mon Sep 17 00:00:00 2001 From: Jeff Anderson Date: Wed, 20 Nov 2024 14:31:01 -0500 Subject: [PATCH 051/111] Make `tsh puttyconfig` disable GSSApi auth (#49191) GSSApi auth can cause PuTTY to go into "Not Responding" mode while waiting on a lookup. We can disable it in the generated PuTTY session to avoid this issue. --- tool/tsh/common/putty_config_windows.go | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/tool/tsh/common/putty_config_windows.go b/tool/tsh/common/putty_config_windows.go index 4df114c1259a5..7d202895d3b47 100644 --- a/tool/tsh/common/putty_config_windows.go +++ b/tool/tsh/common/putty_config_windows.go @@ -52,6 +52,8 @@ const puttyDwordProxyLogToTerm = `00000002` // only until session starts const puttyPermitRSASHA1 = `00000000` const puttyPermitRSASHA256 = `00000001` const puttyPermitRSASHA512 = `00000001` +const puttyAuthGSSAPI = `00000000` +const puttyAuthGSSAPIKEX = `00000000` // despite the strings/ints in struct, these are stored in the registry as DWORDs type puttyRegistrySessionDwords struct { @@ -60,6 +62,8 @@ type puttyRegistrySessionDwords struct { ProxyPort int // dword ProxyMethod string // dword ProxyLogToTerm string // dword + AuthGSSAPI string // dword + AuthGSSAPIKEX string // dword } type puttyRegistrySessionStrings struct { @@ -93,6 +97,8 @@ func addPuTTYSession(proxyHostname string, hostname string, port int, login stri ProxyPort: puttyDefaultProxyPort, ProxyMethod: puttyDwordProxyMethod, ProxyLogToTerm: puttyDwordProxyLogToTerm, + AuthGSSAPI: puttyAuthGSSAPI, + AuthGSSAPIKEX: puttyAuthGSSAPIKEX, } sessionStrings := puttyRegistrySessionStrings{ @@ -130,6 +136,12 @@ func addPuTTYSession(proxyHostname string, hostname string, port int, login stri if err := registry.WriteDword(pk, "ProxyLogToTerm", sessionDwords.ProxyLogToTerm); err != nil { return trace.Wrap(err) } + if err := registry.WriteDword(pk, "AuthGSSAPI", sessionDwords.AuthGSSAPI); err != nil { + return trace.Wrap(err) + } + if err := registry.WriteDword(pk, "AuthGSSAPIKEX", sessionDwords.AuthGSSAPIKEX); err != nil { + return trace.Wrap(err) + } // write strings if err := registry.WriteString(pk, "Hostname", sessionStrings.Hostname); err != nil { From 627af7e02cad9376ae7336656a56706412326b44 Mon Sep 17 00:00:00 2001 From: rosstimothy <39066650+rosstimothy@users.noreply.github.com> Date: Wed, 20 Nov 2024 14:31:28 -0500 Subject: [PATCH 052/111] Extend hostid test backoff (#49193) (#49216) Attempts to reduce any flakiness caused by contention producing a host id by allowing tests to use a longer exponential backoff and retrying more times. --- lib/utils/hostid/hostid_test.go | 13 ++++++++- lib/utils/hostid/hostid_unix.go | 51 ++++++++++++++++++++++++++------- 2 files changed, 52 insertions(+), 12 deletions(-) diff --git a/lib/utils/hostid/hostid_test.go b/lib/utils/hostid/hostid_test.go index 2ea22c4e71e7f..668bc7bb7e0b5 100644 --- a/lib/utils/hostid/hostid_test.go +++ b/lib/utils/hostid/hostid_test.go @@ -24,12 +24,14 @@ import ( "path/filepath" "strings" "testing" + "time" "github.com/google/uuid" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "golang.org/x/sync/errgroup" + "github.com/gravitational/teleport/api/utils/retryutils" "github.com/gravitational/teleport/lib/utils" "github.com/gravitational/teleport/lib/utils/hostid" ) @@ -53,7 +55,16 @@ func TestReadOrCreate(t *testing.T) { i := i wg.Go(func() error { <-barrier - id, err := hostid.ReadOrCreateFile(dir) + id, err := hostid.ReadOrCreateFile( + dir, + hostid.WithBackoff(retryutils.RetryV2Config{ + First: 50 * time.Millisecond, + Driver: retryutils.NewExponentialDriver(100 * time.Millisecond), + Max: 15 * time.Second, + Jitter: retryutils.NewFullJitter(), + }), + hostid.WithIterationLimit(10), + ) ids[i] = id return err }) diff --git a/lib/utils/hostid/hostid_unix.go b/lib/utils/hostid/hostid_unix.go index df91eec76b83d..0dfae4b6ddafb 100644 --- a/lib/utils/hostid/hostid_unix.go +++ b/lib/utils/hostid/hostid_unix.go @@ -44,23 +44,52 @@ func WriteFile(dataDir string, id string) error { return nil } +type options struct { + retryConfig retryutils.RetryV2Config + iterationLimit int +} + +// WithBackoff overrides the default backoff configuration of +// [ReadOrCreateFile]. +func WithBackoff(cfg retryutils.RetryV2Config) func(*options) { + return func(o *options) { + o.retryConfig = cfg + } +} + +// WithIterationLimit overrides the default number of time +// [ReadOrCreateFile] will attempt to produce a hostid. +func WithIterationLimit(limit int) func(*options) { + return func(o *options) { + o.iterationLimit = limit + } +} + // ReadOrCreateFile looks for a hostid file in the data dir. If present, -// returns the UUID from it, otherwise generates one -func ReadOrCreateFile(dataDir string) (string, error) { +// returns the UUID from it, otherwise generates one. +func ReadOrCreateFile(dataDir string, opts ...func(*options)) (string, error) { + o := options{ + retryConfig: retryutils.RetryV2Config{ + First: 100 * time.Millisecond, + Driver: retryutils.NewLinearDriver(100 * time.Millisecond), + Max: time.Second, + Jitter: retryutils.NewFullJitter(), + }, + iterationLimit: 3, + } + + for _, opt := range opts { + opt(&o) + } + hostUUIDFileLock := GetPath(dataDir) + ".lock" - const iterationLimit = 3 - - backoff, err := retryutils.NewRetryV2(retryutils.RetryV2Config{ - First: 100 * time.Millisecond, - Driver: retryutils.NewLinearDriver(100 * time.Millisecond), - Max: time.Second, - Jitter: retryutils.NewFullJitter(), - }) + + backoff, err := retryutils.NewRetryV2(o.retryConfig) if err != nil { return "", trace.Wrap(err) } - for i := 0; i < iterationLimit; i++ { + for i := 0; i < o.iterationLimit; i++ { if read, err := ReadFile(dataDir); err == nil { return read, nil } else if !trace.IsNotFound(err) { From 5c3af94027aa21dd73323e208702d1fb466269a4 Mon Sep 17 00:00:00 2001 From: rosstimothy <39066650+rosstimothy@users.noreply.github.com> Date: Wed, 20 Nov 2024 15:30:21 -0500 Subject: [PATCH 053/111] Make TestRemoteUser more robust against slow trust establishment (#49224) The assertions made in the test did not allow for any delay in the CAs being propagated in response to updating the trust relationship. This caused failures in cases where the remote CA did no yet exist, or did not contain the updated role mapping when the remote client attempted requests. Closes https://github.com/gravitational/teleport/issues/47628. --- lib/auth/tls_test.go | 48 +++++++++++++++++++++++++++++++++----------- 1 file changed, 36 insertions(+), 12 deletions(-) diff --git a/lib/auth/tls_test.go b/lib/auth/tls_test.go index 266bfce970ee7..66bf53d4234bd 100644 --- a/lib/auth/tls_test.go +++ b/lib/auth/tls_test.go @@ -1231,36 +1231,60 @@ func TestRemoteUser(t *testing.T) { certPool, err := testSrv.CertPool() require.NoError(t, err) - remoteClient, err := remoteServer.NewRemoteClient( - TestUser(remoteUser.GetName()), testSrv.Addr(), certPool) + remoteClient, err := remoteServer.NewRemoteClient(TestUser(remoteUser.GetName()), testSrv.Addr(), certPool) require.NoError(t, err) // User is not authorized to perform any actions - // as local cluster does not trust the remote cluster yet + // as local cluster does not trust the remote cluster yet. _, err = remoteClient.GetDomainName(ctx) - require.True(t, trace.IsConnectionProblem(err)) + require.True(t, trace.IsConnectionProblem(err), "expected a connection problem error, got %v", err) - // Establish trust, the request will still fail, there is - // no role mapping set up + // Establish trust, the request will still fail, since there is + // no role mapping set up yet. err = testSrv.AuthServer.Trust(ctx, remoteServer, nil) require.NoError(t, err) - // Create fresh client now trust is established - remoteClient, err = remoteServer.NewRemoteClient( - TestUser(remoteUser.GetName()), testSrv.Addr(), certPool) + // Create a fresh client now that trust is established. + remoteClient, err = remoteServer.NewRemoteClient(TestUser(remoteUser.GetName()), testSrv.Addr(), certPool) require.NoError(t, err) + + // Validate that the client is not permitted to perform RPCs without a role map. + // The requests are attempted several times since it may take some time + // for the trust relationship to be established and CAs to be propagated. _, err = remoteClient.GetDomainName(ctx) - require.True(t, trace.IsAccessDenied(err)) + assert.Error(t, err) + if !trace.IsAccessDenied(err) { + require.EventuallyWithT(t, func(t *assert.CollectT) { + _, err = remoteClient.GetDomainName(ctx) + assert.True(t, trace.IsAccessDenied(err), "expected an access denied error, got %v", err) + }, 15*time.Second, 100*time.Millisecond) + } - // Establish trust and map remote role to local admin role + // Establish trust and map the remote role to the local admin role. _, localRole, err := CreateUserAndRole(testSrv.Auth(), "local-user", []string{"local-role"}, nil) require.NoError(t, err) err = testSrv.AuthServer.Trust(ctx, remoteServer, types.RoleMap{{Remote: remoteRole.GetName(), Local: []string{localRole.GetName()}}}) require.NoError(t, err) + // Validate that the client is now permitted to perform RPCs now that + // the role map was created. The requests are attempted several times since it + // may take some time for the trust relationship to be updated and CAs to be propagated. _, err = remoteClient.GetDomainName(ctx) - require.NoError(t, err) + if err == nil { + return + } + + // The only acceptable error here is AccessDenied caused by the role map + // not being propagated yet. Any other errors should fail the test. + if !trace.IsAccessDenied(err) { + require.NoError(t, err) + } + + require.EventuallyWithT(t, func(t *assert.CollectT) { + _, err = remoteClient.GetDomainName(ctx) + assert.NoError(t, err) + }, 15*time.Second, 100*time.Millisecond) } // TestNopUser tests user with no permissions except From a9d86fe0bd0ba38741df7fdfb286ae23d38440b7 Mon Sep 17 00:00:00 2001 From: Grzegorz Zdunek Date: Wed, 20 Nov 2024 21:37:39 +0100 Subject: [PATCH 054/111] [v15] Update Electron to 33.1.0 and Node.js to 20.18.0 (#49252) * Update Electron to 33.0.2 and Node.js to 20.18.0 (#47891) * Update `electron` to 33.0.2 * Update `node-abi` to 3.71.0 * Update Node.js to 20.18.0 (cherry picked from commit 94bc294831a392cf766eaa2e0d43949f2619085c) * Update Electron to 33.1.0 (#48503) (cherry picked from commit c0a4d3ef6fa7892e91b58b2687578b74c1070f68) * Update lockfile * Update `node-abi` --- build.assets/versions.mk | 2 +- web/packages/teleterm/package.json | 2 +- yarn.lock | 14 +++++++------- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/build.assets/versions.mk b/build.assets/versions.mk index 78b9d1e7a4f06..5277eaaeb7289 100644 --- a/build.assets/versions.mk +++ b/build.assets/versions.mk @@ -6,7 +6,7 @@ GOLANG_VERSION ?= go1.22.9 GOLANGCI_LINT_VERSION ?= v1.61.0 -NODE_VERSION ?= 20.17.0 +NODE_VERSION ?= 20.18.0 # Run lint-rust check locally before merging code after you bump this. RUST_VERSION ?= 1.77.0 diff --git a/web/packages/teleterm/package.json b/web/packages/teleterm/package.json index 6a853e2af4142..d7d9719b74f07 100644 --- a/web/packages/teleterm/package.json +++ b/web/packages/teleterm/package.json @@ -45,7 +45,7 @@ "@types/node-forge": "^1.0.4", "@types/tar-fs": "^2.0.1", "@types/whatwg-url": "^11.0.1", - "electron": "32.1.2", + "electron": "33.1.0", "electron-vite": "^2.0.0", "google-protobuf": "^3.21.2", "immer": "^10.1.1", diff --git a/yarn.lock b/yarn.lock index 1df8c9e2e20f4..3f96d85ef84f7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7507,10 +7507,10 @@ electron-vite@^2.0.0: magic-string "^0.30.5" picocolors "^1.0.0" -electron@32.1.2: - version "32.1.2" - resolved "https://registry.yarnpkg.com/electron/-/electron-32.1.2.tgz#84d1efd95d41224e58a6a9bbd1db4ba80154fc02" - integrity sha512-CXe6doFzhmh1U7daOvUzmF6Cj8hssdYWMeEPRnRO6rB9/bbwMlWctcQ7P8NJXhLQ88/vYUJQrJvlJPh8qM0BRQ== +electron@33.1.0: + version "33.1.0" + resolved "https://registry.yarnpkg.com/electron/-/electron-33.1.0.tgz#c86042e71fa964a054b3306810a3c451aada98f7" + integrity sha512-7KiY6MtRo1fVFLPGyHS7Inh8yZfrbUTy43nNwUgMD2CBk729BgSwOC2WhmcptNJVlzHJpVxSWkiVi2hp9mH/bw== dependencies: "@electron/get" "^2.0.0" "@types/node" "^20.9.0" @@ -12035,9 +12035,9 @@ no-case@^3.0.4: tslib "^2.0.3" node-abi@^3.45.0: - version "3.65.0" - resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.65.0.tgz#ca92d559388e1e9cab1680a18c1a18757cdac9d3" - integrity sha512-ThjYBfoDNr08AWx6hGaRbfPwxKV9kVzAzOzlLKbk2CuqXE2xnCh+cbAGnwM3t8Lq4v9rUB7VfondlkBckcJrVA== + version "3.71.0" + resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.71.0.tgz#52d84bbcd8575efb71468fbaa1f9a49b2c242038" + integrity sha512-SZ40vRiy/+wRTf21hxkkEjPJZpARzUMVcJoQse2EF8qkUWbbO2z7vd5oA/H6bVH6SZQ5STGcu0KRDS7biNRfxw== dependencies: semver "^7.3.5" From 795ceedc04338676a80f07fa92dd51511cbd1953 Mon Sep 17 00:00:00 2001 From: Paul Gottschling Date: Wed, 20 Nov 2024 15:47:48 -0500 Subject: [PATCH 055/111] Edit the Vercel preview workflow (#49187) Due to https://github.com/gravitational/docs/pull/504, we can label the default docs version something other than `[0-9]+.x`. As a result, the `preview` submodule maps to the docs root instead of `/ver/preview`. This change edits the message posted by the Vercel preview workflow to accommodate this change. --- .github/workflows/vercel-preview.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/vercel-preview.yaml b/.github/workflows/vercel-preview.yaml index 74e4dbce38232..f74b3086138c0 100644 --- a/.github/workflows/vercel-preview.yaml +++ b/.github/workflows/vercel-preview.yaml @@ -61,5 +61,5 @@ jobs: issue_number: context.issue.number, owner: context.repo.owner, repo: context.repo.repo, - body: `🤖 Vercel preview here: ${previewUrl}/docs/ver/preview` + body: `🤖 Vercel preview here: ${previewUrl}/docs` }) From 9f54a568ee2bdbab00599f2beb23b2790c135074 Mon Sep 17 00:00:00 2001 From: Grzegorz Zdunek Date: Thu, 21 Nov 2024 18:24:37 +0100 Subject: [PATCH 056/111] [v15] Cache PIV connections to share across the program execution (#47953) * Cache PIV connections to share across the program execution (#47091) * Cache yubikey objects. * Cache PIV connections to share across the program execution. * Do not release the connection until `sign` returns * Do not ignore errors * Perform a "warm up" call to YubiKey * Fix tests * Use a specific interface to check if the key can be "warmed up" * Allow abandoning `signer.Sign` call when context is canceled * Make sure that the cached key is valid for the given private key policy The reason for adding this check was failing `invalid key policies` test. * Make `hardwareKeyWarmer` private * Force callers to release connection * Improve comments * Fix lint * Improve `connect` comment * Fix race condition * Simplify `release` logic * Trigger license/cla --------- Co-authored-by: joerger (cherry picked from commit bd6fdbf2c1038984e94572e66f44806866b1afb6) * Sign a hashed message in hardware key warmup call (#48206) Otherwise, signing may fail with "input must be a hashed message" error. (cherry picked from commit 47494db923e61bb12af54f65748584947c59bd9d) * Remove delayed closing of yubikey connection to prevent the connection from leaking after program execution. (#48414) (cherry picked from commit b7c0e79fedf4f6e8043a6cf948cabe2928df89a2) --------- Co-authored-by: Brian Joerger --- api/client/proxy/client.go | 25 +- api/utils/keys/yubikey.go | 561 ++++++++++++++++++++++----------- api/utils/keys/yubikey_test.go | 30 +- 3 files changed, 413 insertions(+), 203 deletions(-) diff --git a/api/client/proxy/client.go b/api/client/proxy/client.go index 817da428928c0..f1d1b05540ec4 100644 --- a/api/client/proxy/client.go +++ b/api/client/proxy/client.go @@ -82,7 +82,7 @@ type ClientConfig struct { // CheckAndSetDefaults ensures required options are present and // sets the default value of any that are omitted. -func (c *ClientConfig) CheckAndSetDefaults() error { +func (c *ClientConfig) CheckAndSetDefaults(ctx context.Context) error { if c.ProxyAddress == "" { return trace.BadParameter("missing required parameter ProxyAddress") } @@ -115,6 +115,21 @@ func (c *ClientConfig) CheckAndSetDefaults() error { // not to send the client certificate by looking at certificate request. if len(tlsCfg.Certificates) > 0 { cert := tlsCfg.Certificates[0] + + // When a hardware key is used to store the private key, the user may fail to provide + // a PIN or touch before a gRPC dial timeout occurs. + // The resulting "dial timeout" error is generic and doesn't indicate an issue with the + // hardware key itself (since YubiKey is treated like any other key). + // To avoid this, we perform a "warm-up" call to the key, ensuring it is ready + // before initiating the gRPC dial. + // This approach works because the connection is cached for a few seconds, + // allowing subsequent calls without requiring additional user action. + if priv, ok := cert.PrivateKey.(hardwareKeyWarmer); ok { + err := priv.WarmupHardwareKey(ctx) + if err != nil { + return nil, trace.Wrap(err) + } + } tlsCfg.Certificates = nil tlsCfg.GetClientCertificate = func(_ *tls.CertificateRequestInfo) (*tls.Certificate, error) { return &cert, nil @@ -183,7 +198,7 @@ const protocolProxySSHGRPC string = "teleport-proxy-ssh-grpc" // of the caller, then prefer to use NewSSHClient instead which omits // the gRPC dialing altogether. func NewClient(ctx context.Context, cfg ClientConfig) (*Client, error) { - if err := cfg.CheckAndSetDefaults(); err != nil { + if err := cfg.CheckAndSetDefaults(ctx); err != nil { return nil, trace.Wrap(err) } @@ -439,3 +454,9 @@ func (c *Client) Ping(ctx context.Context) error { _, _ = c.transport.ClusterDetails(ctx) return nil } + +// hardwareKeyWarmer performs a bogus call to the hardware key, +// to proactively prompt the user for a PIN/touch (if needed). +type hardwareKeyWarmer interface { + WarmupHardwareKey(ctx context.Context) error +} diff --git a/api/utils/keys/yubikey.go b/api/utils/keys/yubikey.go index 3b38c43f4d0f1..609a88f4c762f 100644 --- a/api/utils/keys/yubikey.go +++ b/api/utils/keys/yubikey.go @@ -51,10 +51,45 @@ const ( PIVCardTypeYubiKey = "yubikey" ) +// Cache keys to prevent reconnecting to PIV module to discover a known key. +// +// Additionally, this allows the program to cache the key's PIN (if applicable) +// after the user is prompted the first time, preventing redundant prompts when +// the key is retrieved multiple times. +// +// Note: in most cases the connection caches the PIN itself, and connections can be +// reclaimed before they are fully closed (within a few seconds). However, in uncommon +// setups, this PIN caching does not actually work as expected, so we handle it instead. +// See https://github.com/go-piv/piv-go/issues/47 +var ( + cachedKeys = map[piv.Slot]*PrivateKey{} + cachedKeysMu sync.Mutex +) + // getOrGenerateYubiKeyPrivateKey connects to a connected yubiKey and gets a private key // matching the given touch requirement. This private key will either be newly generated // or previously generated by a Teleport client and reused. func getOrGenerateYubiKeyPrivateKey(ctx context.Context, requiredKeyPolicy PrivateKeyPolicy, slot PIVSlot) (*PrivateKey, error) { + cachedKeysMu.Lock() + defer cachedKeysMu.Unlock() + + // Get the default PIV slot or the piv slot requested. + pivSlot, err := GetDefaultKeySlot(requiredKeyPolicy) + if err != nil { + return nil, trace.Wrap(err) + } + if slot != "" { + pivSlot, err = slot.parse() + if err != nil { + return nil, trace.Wrap(err) + } + } + + // If the program has already retrieved and cached this key, return it. + if key, ok := cachedKeys[pivSlot]; ok && key.GetPrivateKeyPolicy() == requiredKeyPolicy { + return key, nil + } + // Use the first yubiKey we find. y, err := FindYubiKey(0) if err != nil { @@ -78,15 +113,9 @@ func getOrGenerateYubiKeyPrivateKey(ctx context.Context, requiredKeyPolicy Priva return nil } - // If a specific slot was specified, use that. Otherwise, check for a key in the + // If a custom slot was not specified, check for a key in the // default slot for the given policy and generate a new one if needed. - var pivSlot piv.Slot - if slot != "" { - pivSlot, err = slot.parse() - if err != nil { - return nil, trace.Wrap(err) - } - } else { + if slot == "" { pivSlot, err = GetDefaultKeySlot(requiredKeyPolicy) if err != nil { return nil, trace.Wrap(err) @@ -214,6 +243,9 @@ type yubiKeyPrivateKeyData struct { } func parseYubiKeyPrivateKeyData(keyDataBytes []byte) (*PrivateKey, error) { + cachedKeysMu.Lock() + defer cachedKeysMu.Unlock() + var keyData yubiKeyPrivateKeyData if err := json.Unmarshal(keyDataBytes, &keyData); err != nil { return nil, trace.Wrap(err) @@ -224,6 +256,11 @@ func parseYubiKeyPrivateKeyData(keyDataBytes []byte) (*PrivateKey, error) { return nil, trace.Wrap(err) } + // If the program has already retrieved and cached this key, return it. + if key, ok := cachedKeys[pivSlot]; ok { + return key, nil + } + y, err := FindYubiKey(keyData.SerialNumber) if err != nil { return nil, trace.Wrap(err) @@ -242,16 +279,19 @@ func (y *YubiKeyPrivateKey) Public() crypto.PublicKey { return y.slotCert.PublicKey } +// WarmupHardwareKey performs a bogus sign() call to prompt the user for +// a PIN/touch (if needed). +func (y *YubiKeyPrivateKey) WarmupHardwareKey(ctx context.Context) error { + hash := sha256.Sum256(make([]byte, 256)) + _, err := y.sign(ctx, rand.Reader, hash[:], crypto.SHA256) + return trace.Wrap(err, "failed to access a YubiKey private key") +} + // Sign implements crypto.Signer. func (y *YubiKeyPrivateKey) Sign(rand io.Reader, digest []byte, opts crypto.SignerOpts) ([]byte, error) { ctx, cancel := context.WithCancel(context.Background()) defer cancel() - // To prevent concurrent calls to Sign from failing due to PIV only handling a - // single connection, use a lock to queue through signature requests one at a time. - y.signMux.Lock() - defer y.signMux.Unlock() - signature, err := y.sign(ctx, rand, digest, opts) if err != nil { return nil, trace.Wrap(err) @@ -260,12 +300,38 @@ func (y *YubiKeyPrivateKey) Sign(rand io.Reader, digest []byte, opts crypto.Sign return signature, nil } +// YubiKeys require touch when signing with a private key that requires touch. +// Unfortunately, there is no good way to check whether touch is cached by the +// PIV module at a given time. In order to require touch only when needed, we +// prompt for touch after a short delay when we expect the request would succeed +// if touch were not required. +// +// There are some X factors which determine how long a request may take, such as the +// YubiKey model and firmware version, so the delays below may need to be adjusted to +// suit more models. The durations mentioned below were retrieved from testing with a +// YubiKey 5 nano (5.2.7) and a YubiKey NFC (5.4.3). +const ( + // piv.ECDSAPrivateKey.Sign consistently takes ~70 milliseconds. However, 200ms + // should be imperceptible the the user and should avoid misfired prompts for + // slower cards (if there are any). + signTouchPromptDelay = time.Millisecond * 200 +) + func (y *YubiKeyPrivateKey) sign(ctx context.Context, rand io.Reader, digest []byte, opts crypto.SignerOpts) ([]byte, error) { - yk, err := y.open() + // To prevent concurrent calls to sign from failing due to PIV only handling a + // single connection, use a lock to queue through signature requests one at a time. + y.signMux.Lock() + defer y.signMux.Unlock() + + // Lock the connection for the entire duration of the sign + // process. Without this, the connection will be released, + // leading to a failure when providing PIN or touch input: + // "verify pin: transmitting request: the supplied handle was invalid". + release, err := y.connect() if err != nil { return nil, trace.Wrap(err) } - defer yk.Close() + defer release() var touchPromptDelayTimer *time.Timer if y.attestation.TouchPolicy != piv.TouchPolicyNever { @@ -315,7 +381,7 @@ func (y *YubiKeyPrivateKey) sign(ctx context.Context, rand io.Reader, digest []b manualRetryWithPIN = true } - privateKey, err := yk.PrivateKey(y.pivSlot, y.slotCert.PublicKey, auth) + privateKey, err := y.privateKey(y.pivSlot, y.Public(), auth) if err != nil { return nil, trace.Wrap(err) } @@ -329,7 +395,7 @@ func (y *YubiKeyPrivateKey) sign(ctx context.Context, rand io.Reader, digest []b // The piv-go library wraps error codes like this with a user readable message: "security status not satisfied". const pivGenericAuthErrCodeString = "6982" - signature, err := signer.Sign(rand, digest, opts) + signature, err := abandonableSign(ctx, signer, rand, digest, opts) switch { case err == nil: return signature, nil @@ -338,16 +404,48 @@ func (y *YubiKeyPrivateKey) sign(ctx context.Context, rand io.Reader, digest []b if err != nil { return nil, trace.Wrap(err) } - if err := yk.VerifyPIN(pin); err != nil { + if err := y.verifyPIN(pin); err != nil { return nil, trace.Wrap(err) } - signature, err := signer.Sign(rand, digest, opts) + signature, err := abandonableSign(ctx, signer, rand, digest, opts) return signature, trace.Wrap(err) default: return nil, trace.Wrap(err) } } +// abandonableSign is a wrapper around signer.Sign. +// It enhances the functionality of signer.Sign by allowing the caller to stop +// waiting for the result if the provided context is canceled. +// It is especially important for WarmupHardwareKey, +// where waiting for the user providing a PIN/touch could block program termination. +// Important: this function only abandons the signer.Sign result, doesn't cancel it. +func abandonableSign(ctx context.Context, signer crypto.Signer, rand io.Reader, digest []byte, opts crypto.SignerOpts) ([]byte, error) { + type signResult struct { + signature []byte + err error + } + + signResultCh := make(chan signResult) + go func() { + if err := ctx.Err(); err != nil { + return + } + signature, err := signer.Sign(rand, digest, opts) + select { + case <-ctx.Done(): + case signResultCh <- signResult{signature: signature, err: trace.Wrap(err)}: + } + }() + + select { + case <-ctx.Done(): + return nil, ctx.Err() + case result := <-signResultCh: + return result.signature, trace.Wrap(result.err) + } +} + func (y *YubiKeyPrivateKey) toPrivateKey() (*PrivateKey, error) { keyPEM, err := y.keyPEM() if err != nil { @@ -412,39 +510,37 @@ func GetPrivateKeyPolicyFromAttestation(att *piv.Attestation) PrivateKeyPolicy { // YubiKey is a specific YubiKey PIV card. type YubiKey struct { - // card is a reader name used to find and connect to this yubiKey. - // This value may change between OS's, or with other system changes. - card string + // conn is a shared YubiKey PIV connection. + // + // PIV connections claim an exclusive lock on the PIV module until closed. + // In order to improve connection sharing for this program without locking + // out other programs during extended program executions (like "tsh proxy ssh"), + // this connections is opportunistically formed and released after being + // unused for a few seconds. + *sharedPIVConnection // serialNumber is the yubiKey's 8 digit serial number. serialNumber uint32 } func newYubiKey(card string) (*YubiKey, error) { - y := &YubiKey{card: card} - - yk, err := y.open() - if err != nil { - return nil, trace.Wrap(err) + y := &YubiKey{ + sharedPIVConnection: &sharedPIVConnection{ + card: card, + }, } - defer yk.Close() - y.serialNumber, err = yk.Serial() + serialNumber, err := y.serial() if err != nil { return nil, trace.Wrap(err) } + y.serialNumber = serialNumber return y, nil } // Reset resets the YubiKey PIV module to default settings. func (y *YubiKey) Reset() error { - yk, err := y.open() - if err != nil { - return trace.Wrap(err) - } - defer yk.Close() - - err = yk.Reset() + err := y.reset() return trace.Wrap(err) } @@ -469,41 +565,23 @@ func (y *YubiKey) generatePrivateKeyAndCert(slot piv.Slot, requiredKeyPolicy Pri // slot is in used by a Teleport Client and is not fit to be used in cryptographic operations. // This cert is also useful for users to discern where the key came with tools like `ykman piv info`. func (y *YubiKey) SetMetadataCertificate(slot piv.Slot, subject pkix.Name) error { - yk, err := y.open() - if err != nil { - return trace.Wrap(err) - } - defer yk.Close() - cert, err := SelfSignedMetadataCertificate(subject) if err != nil { return trace.Wrap(err) } - err = yk.SetCertificate(piv.DefaultManagementKey, slot, cert) + err = y.setCertificate(piv.DefaultManagementKey, slot, cert) return trace.Wrap(err) } // getCertificate gets a certificate from the given PIV slot. func (y *YubiKey) getCertificate(slot piv.Slot) (*x509.Certificate, error) { - yk, err := y.open() - if err != nil { - return nil, trace.Wrap(err) - } - defer yk.Close() - - cert, err := yk.Certificate(slot) + cert, err := y.certificate(slot) return cert, trace.Wrap(err) } // generatePrivateKey generates a new private key in the given PIV slot. func (y *YubiKey) generatePrivateKey(slot piv.Slot, requiredKeyPolicy PrivateKeyPolicy) error { - yk, err := y.open() - if err != nil { - return trace.Wrap(err) - } - defer yk.Close() - touchPolicy, pinPolicy, err := getKeyPolicies(requiredKeyPolicy) if err != nil { return trace.Wrap(err) @@ -515,26 +593,20 @@ func (y *YubiKey) generatePrivateKey(slot piv.Slot, requiredKeyPolicy PrivateKey TouchPolicy: touchPolicy, } - _, err = yk.GenerateKey(piv.DefaultManagementKey, slot, opts) + _, err = y.generateKey(piv.DefaultManagementKey, slot, opts) return trace.Wrap(err) } // getPrivateKey gets an existing private key from the given PIV slot. func (y *YubiKey) getPrivateKey(slot piv.Slot) (*PrivateKey, error) { - yk, err := y.open() - if err != nil { - return nil, trace.Wrap(err) - } - defer yk.Close() - - slotCert, err := yk.Attest(slot) + slotCert, err := y.attest(slot) if errors.Is(err, piv.ErrNotFound) { return nil, trace.NotFound("private key in YubiKey PIV slot %q not found.", slot.String()) } else if err != nil { return nil, trace.Wrap(err) } - attCert, err := yk.AttestationCertificate() + attCert, err := y.attestationCertificate() if err != nil { return nil, trace.Wrap(err) } @@ -562,18 +634,13 @@ func (y *YubiKey) getPrivateKey(slot piv.Slot) (*PrivateKey, error) { return nil, trace.Wrap(err) } + cachedKeys[slot] = key return key, nil } -// SetPin sets the YubiKey PIV PIN. This doesn't require user interaction like touch, just the correct old PIN. +// SetPIN sets the YubiKey PIV PIN. This doesn't require user interaction like touch, just the correct old PIN. func (y *YubiKey) SetPIN(oldPin, newPin string) error { - yk, err := y.open() - if err != nil { - return trace.Wrap(err) - } - defer yk.Close() - - err = yk.SetPIN(oldPin, newPin) + err := y.setPIN(oldPin, newPin) return trace.Wrap(err) } @@ -586,29 +653,56 @@ func (y *YubiKey) checkOrSetPIN(ctx context.Context) error { return trace.Wrap(err) } - yk, err := y.open() - if err != nil { - return trace.Wrap(err) - } - defer yk.Close() - switch pin { case piv.DefaultPIN: fmt.Fprintf(os.Stderr, "The default PIN %q is not supported.\n", piv.DefaultPIN) fallthrough case "": - if pin, err = setPINAndPUKFromDefault(ctx, yk); err != nil { + if pin, err = y.setPINAndPUKFromDefault(ctx); err != nil { return trace.Wrap(err) } } - return trace.Wrap(yk.VerifyPIN(pin)) + return trace.Wrap(y.verifyPIN(pin)) } -// open a connection to YubiKey PIV module. The returned connection should be closed once -// it's been used. The YubiKey PIV module itself takes some additional time to handle closed +type sharedPIVConnection struct { + // card is a reader name used to find and connect to this yubiKey. + // This value may change between OS's, or with other system changes. + card string + + // conn is the shared PIV connection. + conn *piv.YubiKey + mu sync.Mutex + activeConnections int +} + +// connect establishes a connection to a YubiKey PIV module and returns a release function. +// The release function should be called to properly close the shared connection. +// The connection is not immediately terminated, allowing other callers to +// use it before it's released. +// The YubiKey PIV module itself takes some additional time to handle closed // connections, so we use a retry loop to give the PIV module time to close prior connections. -func (y *YubiKey) open() (yk *piv.YubiKey, err error) { +func (c *sharedPIVConnection) connect() (func(), error) { + c.mu.Lock() + defer c.mu.Unlock() + + release := func() { + c.mu.Lock() + defer c.mu.Unlock() + + c.activeConnections-- + if c.activeConnections == 0 { + c.conn.Close() + c.conn = nil + } + } + + if c.conn != nil { + c.activeConnections++ + return release, nil + } + linearRetry, err := retryutils.NewLinear(retryutils.LinearConfig{ // If a PIV connection has just been closed, it take ~5 ms to become // available to new connections. For this reason, we initially wait a @@ -629,7 +723,7 @@ func (y *YubiKey) open() (yk *piv.YubiKey, err error) { defer cancel() err = linearRetry.For(retryCtx, func() error { - yk, err = piv.Open(y.card) + c.conn, err = piv.Open(c.card) if err != nil && !isRetryError(err) { return retryutils.PermanentRetryError(err) } @@ -648,146 +742,128 @@ func (y *YubiKey) open() (yk *piv.YubiKey, err error) { } else if err != nil { return nil, trace.Wrap(err) } - return yk, nil -} -func isRetryError(err error) bool { - const retryError = "connecting to smart card: the smart card cannot be accessed because of other connections outstanding" - return strings.Contains(err.Error(), retryError) + c.activeConnections++ + return release, nil } -// FindYubiKey finds a yubiKey PIV card by serial number. If no serial -// number is provided, the first yubiKey found will be returned. -func FindYubiKey(serialNumber uint32) (*YubiKey, error) { - yubiKeyCards, err := findYubiKeyCards() +func (c *sharedPIVConnection) privateKey(slot piv.Slot, public crypto.PublicKey, auth piv.KeyAuth) (crypto.PrivateKey, error) { + release, err := c.connect() if err != nil { return nil, trace.Wrap(err) } + defer release() + privateKey, err := c.conn.PrivateKey(slot, public, auth) + return privateKey, trace.Wrap(err) +} - if len(yubiKeyCards) == 0 { - if serialNumber != 0 { - return nil, trace.ConnectionProblem(nil, "no YubiKey device connected with serial number %d", serialNumber) - } - return nil, trace.ConnectionProblem(nil, "no YubiKey device connected") +func (c *sharedPIVConnection) serial() (uint32, error) { + release, err := c.connect() + if err != nil { + return 0, trace.Wrap(err) } + defer release() + serial, err := c.conn.Serial() + return serial, trace.Wrap(err) +} - for _, card := range yubiKeyCards { - y, err := newYubiKey(card) - if err != nil { - return nil, trace.Wrap(err) - } - - if serialNumber == 0 || y.serialNumber == serialNumber { - return y, nil - } +func (c *sharedPIVConnection) reset() error { + release, err := c.connect() + if err != nil { + return trace.Wrap(err) } - - return nil, trace.ConnectionProblem(nil, "no YubiKey device connected with serial number %d", serialNumber) + defer release() + // Clear cached keys. + cachedKeys = make(map[piv.Slot]*PrivateKey) + return trace.Wrap(c.conn.Reset()) } -// findYubiKeyCards returns a list of connected yubiKey PIV card names. -func findYubiKeyCards() ([]string, error) { - cards, err := piv.Cards() +func (c *sharedPIVConnection) setCertificate(key [24]byte, slot piv.Slot, cert *x509.Certificate) error { + release, err := c.connect() if err != nil { - return nil, trace.Wrap(err) + return trace.Wrap(err) } + defer release() + return trace.Wrap(c.conn.SetCertificate(key, slot, cert)) +} - var yubiKeyCards []string - for _, card := range cards { - if strings.Contains(strings.ToLower(card), PIVCardTypeYubiKey) { - yubiKeyCards = append(yubiKeyCards, card) - } +func (c *sharedPIVConnection) certificate(slot piv.Slot) (*x509.Certificate, error) { + release, err := c.connect() + if err != nil { + return nil, trace.Wrap(err) } - - return yubiKeyCards, nil + defer release() + cert, err := c.conn.Certificate(slot) + return cert, trace.Wrap(err) } -func (s PIVSlot) validate() error { - _, err := s.parse() - return trace.Wrap(err) +func (c *sharedPIVConnection) generateKey(key [24]byte, slot piv.Slot, opts piv.Key) (crypto.PublicKey, error) { + release, err := c.connect() + if err != nil { + return nil, trace.Wrap(err) + } + defer release() + pubKey, err := c.conn.GenerateKey(key, slot, opts) + return pubKey, trace.Wrap(err) } -func (s PIVSlot) parse() (piv.Slot, error) { - slotKey, err := strconv.ParseUint(string(s), 16, 32) +func (c *sharedPIVConnection) attest(slot piv.Slot) (*x509.Certificate, error) { + release, err := c.connect() if err != nil { - return piv.Slot{}, trace.Wrap(err) + return nil, trace.Wrap(err) } - - return parsePIVSlot(uint32(slotKey)) + defer release() + cert, err := c.conn.Attest(slot) + return cert, trace.Wrap(err) } -func parsePIVSlotString(slotKeyString string) (piv.Slot, error) { - slotKey, err := strconv.ParseUint(slotKeyString, 16, 32) +func (c *sharedPIVConnection) attestationCertificate() (*x509.Certificate, error) { + release, err := c.connect() if err != nil { - return piv.Slot{}, trace.Wrap(err) + return nil, trace.Wrap(err) } - - return parsePIVSlot(uint32(slotKey)) + defer release() + cert, err := c.conn.AttestationCertificate() + return cert, trace.Wrap(err) } -func parsePIVSlot(slotKey uint32) (piv.Slot, error) { - switch slotKey { - case piv.SlotAuthentication.Key: - return piv.SlotAuthentication, nil - case piv.SlotSignature.Key: - return piv.SlotSignature, nil - case piv.SlotKeyManagement.Key: - return piv.SlotKeyManagement, nil - case piv.SlotCardAuthentication.Key: - return piv.SlotCardAuthentication, nil - default: - retiredSlot, ok := piv.RetiredKeyManagementSlot(slotKey) - if !ok { - return piv.Slot{}, trace.BadParameter("slot %X does not exist", slotKey) - } - return retiredSlot, nil +func (c *sharedPIVConnection) setPIN(oldPIN string, newPIN string) error { + release, err := c.connect() + if err != nil { + return trace.Wrap(err) } + defer release() + return trace.Wrap(c.conn.SetPIN(oldPIN, newPIN)) } -// certOrgName is used to identify Teleport Client self-signed certificates stored in yubiKey PIV slots. -const certOrgName = "teleport" - -func SelfSignedMetadataCertificate(subject pkix.Name) (*x509.Certificate, error) { - priv, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader) +func (c *sharedPIVConnection) setPUK(oldPUK string, newPUK string) error { + release, err := c.connect() if err != nil { - return nil, trace.Wrap(err) + return trace.Wrap(err) } + defer release() + return trace.Wrap(c.conn.SetPUK(oldPUK, newPUK)) +} - serialNumberLimit := new(big.Int).Lsh(big.NewInt(1), 128) - serialNumber, err := rand.Int(rand.Reader, serialNumberLimit) // see crypto/tls/generate_cert.go +func (c *sharedPIVConnection) unblock(puk string, newPIN string) error { + release, err := c.connect() if err != nil { - return nil, trace.Wrap(err) - } - cert := &x509.Certificate{ - SerialNumber: serialNumber, - Subject: subject, - PublicKey: priv.Public(), + return trace.Wrap(err) } + defer release() + return trace.Wrap(c.conn.Unblock(puk, newPIN)) +} - if cert.Raw, err = x509.CreateCertificate(rand.Reader, cert, cert, priv.Public(), priv); err != nil { - return nil, trace.Wrap(err) +func (c *sharedPIVConnection) verifyPIN(pin string) error { + release, err := c.connect() + if err != nil { + return trace.Wrap(err) } - return cert, nil + defer release() + return trace.Wrap(c.conn.VerifyPIN(pin)) } -// YubiKeys require touch when signing with a private key that requires touch. -// Unfortunately, there is no good way to check whether touch is cached by the -// PIV module at a given time. In order to require touch only when needed, we -// prompt for touch after a short delay when we expect the request would succeed -// if touch were not required. -// -// There are some X factors which determine how long a request may take, such as the -// YubiKey model and firmware version, so the delays below may need to be adjusted to -// suit more models. The durations mentioned below were retrieved from testing with a -// YubiKey 5 nano (5.2.7) and a YubiKey NFC (5.4.3). -const ( - // piv.ECDSAPrivateKey.Sign consistently takes ~70 milliseconds. However, 200ms - // should be imperceptible the the user and should avoid misfired prompts for - // slower cards (if there are any). - signTouchPromptDelay = time.Millisecond * 200 -) - -func setPINAndPUKFromDefault(ctx context.Context, yk *piv.YubiKey) (string, error) { +func (c *sharedPIVConnection) setPINAndPUKFromDefault(ctx context.Context) (string, error) { // YubiKey requires that PIN and PUK be 6-8 characters. isValid := func(pin string) bool { return len(pin) >= 6 && len(pin) <= 8 @@ -860,7 +936,7 @@ func setPINAndPUKFromDefault(ctx context.Context, yk *piv.YubiKey) (string, erro continue } - if err := yk.SetPUK(piv.DefaultPUK, newPUK); err != nil { + if err := c.setPUK(piv.DefaultPUK, newPUK); err != nil { return "", trace.Wrap(err) } @@ -869,9 +945,120 @@ func setPINAndPUKFromDefault(ctx context.Context, yk *piv.YubiKey) (string, erro } } - if err := yk.Unblock(puk, pin); err != nil { + if err := c.unblock(puk, pin); err != nil { return "", trace.Wrap(err) } return pin, nil } + +func isRetryError(err error) bool { + const retryError = "connecting to smart card: the smart card cannot be accessed because of other connections outstanding" + return strings.Contains(err.Error(), retryError) +} + +// FindYubiKey finds a yubiKey PIV card by serial number. If no serial +// number is provided, the first yubiKey found will be returned. +func FindYubiKey(serialNumber uint32) (*YubiKey, error) { + yubiKeyCards, err := findYubiKeyCards() + if err != nil { + return nil, trace.Wrap(err) + } + + if len(yubiKeyCards) == 0 { + if serialNumber != 0 { + return nil, trace.ConnectionProblem(nil, "no YubiKey device connected with serial number %d", serialNumber) + } + return nil, trace.ConnectionProblem(nil, "no YubiKey device connected") + } + + for _, card := range yubiKeyCards { + y, err := newYubiKey(card) + if err != nil { + return nil, trace.Wrap(err) + } + + if serialNumber == 0 || y.serialNumber == serialNumber { + return y, nil + } + } + + return nil, trace.ConnectionProblem(nil, "no YubiKey device connected with serial number %d", serialNumber) +} + +// findYubiKeyCards returns a list of connected yubiKey PIV card names. +func findYubiKeyCards() ([]string, error) { + cards, err := piv.Cards() + if err != nil { + return nil, trace.Wrap(err) + } + + var yubiKeyCards []string + for _, card := range cards { + if strings.Contains(strings.ToLower(card), PIVCardTypeYubiKey) { + yubiKeyCards = append(yubiKeyCards, card) + } + } + + return yubiKeyCards, nil +} + +func (s PIVSlot) validate() error { + _, err := s.parse() + return trace.Wrap(err) +} + +func (s PIVSlot) parse() (piv.Slot, error) { + slotKey, err := strconv.ParseUint(string(s), 16, 32) + if err != nil { + return piv.Slot{}, trace.Wrap(err) + } + + return parsePIVSlot(uint32(slotKey)) +} + +func parsePIVSlot(slotKey uint32) (piv.Slot, error) { + switch slotKey { + case piv.SlotAuthentication.Key: + return piv.SlotAuthentication, nil + case piv.SlotSignature.Key: + return piv.SlotSignature, nil + case piv.SlotKeyManagement.Key: + return piv.SlotKeyManagement, nil + case piv.SlotCardAuthentication.Key: + return piv.SlotCardAuthentication, nil + default: + retiredSlot, ok := piv.RetiredKeyManagementSlot(slotKey) + if !ok { + return piv.Slot{}, trace.BadParameter("slot %X does not exist", slotKey) + } + return retiredSlot, nil + } +} + +// certOrgName is used to identify Teleport Client self-signed certificates stored in yubiKey PIV slots. +const certOrgName = "teleport" + +func SelfSignedMetadataCertificate(subject pkix.Name) (*x509.Certificate, error) { + priv, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader) + if err != nil { + return nil, trace.Wrap(err) + } + + serialNumberLimit := new(big.Int).Lsh(big.NewInt(1), 128) + serialNumber, err := rand.Int(rand.Reader, serialNumberLimit) // see crypto/tls/generate_cert.go + if err != nil { + return nil, trace.Wrap(err) + } + cert := &x509.Certificate{ + SerialNumber: serialNumber, + Subject: subject, + PublicKey: priv.Public(), + } + + if cert.Raw, err = x509.CreateCertificate(rand.Reader, cert, cert, priv.Public(), priv); err != nil { + return nil, trace.Wrap(err) + } + return cert, nil +} + diff --git a/api/utils/keys/yubikey_test.go b/api/utils/keys/yubikey_test.go index 2dacee96bf28e..4e49315a56bad 100644 --- a/api/utils/keys/yubikey_test.go +++ b/api/utils/keys/yubikey_test.go @@ -45,7 +45,11 @@ func TestGetYubiKeyPrivateKey_Interactive(t *testing.T) { fmt.Println("This test is interactive, tap your YubiKey when prompted.") ctx := context.Background() - t.Cleanup(func() { resetYubikey(t) }) + + y, err := keys.FindYubiKey(0) + require.NoError(t, err) + + t.Cleanup(func() { resetYubikey(t, y) }) for _, policy := range []keys.PrivateKeyPolicy{ keys.PrivateKeyPolicyHardwareKey, @@ -56,8 +60,8 @@ func TestGetYubiKeyPrivateKey_Interactive(t *testing.T) { for _, customSlot := range []bool{true, false} { t.Run(fmt.Sprintf("policy:%q", policy), func(t *testing.T) { t.Run(fmt.Sprintf("custom slot:%v", customSlot), func(t *testing.T) { - resetYubikey(t) - setupPINPrompt(t) + resetYubikey(t, y) + setupPINPrompt(t, y) var slot keys.PIVSlot = "" if customSlot { @@ -100,7 +104,11 @@ func TestOverwritePrompt(t *testing.T) { } ctx := context.Background() - t.Cleanup(func() { resetYubikey(t) }) + + y, err := keys.FindYubiKey(0) + require.NoError(t, err) + + t.Cleanup(func() { resetYubikey(t, y) }) // Use a custom slot. pivSlot, err := keys.GetDefaultKeySlot(keys.PrivateKeyPolicyHardwareKeyTouch) @@ -119,11 +127,9 @@ func TestOverwritePrompt(t *testing.T) { } t.Run("invalid metadata cert", func(t *testing.T) { - resetYubikey(t) + resetYubikey(t, y) // Set a non-teleport certificate in the slot. - y, err := keys.FindYubiKey(0) - require.NoError(t, err) err = y.SetMetadataCertificate(pivSlot, pkix.Name{Organization: []string{"not-teleport"}}) require.NoError(t, err) @@ -131,7 +137,7 @@ func TestOverwritePrompt(t *testing.T) { }) t.Run("invalid key policies", func(t *testing.T) { - resetYubikey(t) + resetYubikey(t, y) // Generate a key that does not require touch in the slot that Teleport expects to require touch. _, err := keys.GetYubiKeyPrivateKey(ctx, keys.PrivateKeyPolicyHardwareKey, keys.PIVSlot(pivSlot.String())) @@ -142,17 +148,13 @@ func TestOverwritePrompt(t *testing.T) { } // resetYubikey connects to the first yubiKey and resets it to defaults. -func resetYubikey(t *testing.T) { +func resetYubikey(t *testing.T, y *keys.YubiKey) { t.Helper() - y, err := keys.FindYubiKey(0) - require.NoError(t, err) require.NoError(t, y.Reset()) } -func setupPINPrompt(t *testing.T) { +func setupPINPrompt(t *testing.T, y *keys.YubiKey) { t.Helper() - y, err := keys.FindYubiKey(0) - require.NoError(t, err) // Set pin for tests. const testPIN = "123123" From 7135bff6d73434577d71befa9f0cc869fb87e782 Mon Sep 17 00:00:00 2001 From: Grzegorz Zdunek Date: Thu, 21 Nov 2024 18:24:49 +0100 Subject: [PATCH 057/111] Do not require user interaction in `tsh status` when using hardware keys (#48971) --- tool/tsh/common/tsh.go | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/tool/tsh/common/tsh.go b/tool/tsh/common/tsh.go index cbe2a3ef6ea20..c5072cebbe21d 100644 --- a/tool/tsh/common/tsh.go +++ b/tool/tsh/common/tsh.go @@ -4747,7 +4747,18 @@ func onStatus(cf *CLIConf) error { return trace.Wrap(err) } - if err := printLoginInformation(cf, profile, profiles, cf.getAccessListsToReview(tc)); err != nil { + // `tsh status` should run without requiring user interaction. + // To achieve this, we avoid remote calls that might prompt for + // hardware key touch or require a PIN. + hardwareKeyInteractionRequired := tc.PrivateKeyPolicy.MFAVerified() + + var accessListsToReview []*accesslist.AccessList + if hardwareKeyInteractionRequired { + log.Debug("Skipping fetching access lists to review due to Hardware Key PIN/Touch requirement.") + } else { + accessListsToReview = cf.getAccessListsToReview(tc) + } + if err := printLoginInformation(cf, profile, profiles, accessListsToReview); err != nil { return trace.Wrap(err) } @@ -4760,7 +4771,7 @@ func onStatus(cf *CLIConf) error { return trace.NotFound("Active profile expired.") } - if tc.PrivateKeyPolicy.MFAVerified() { + if hardwareKeyInteractionRequired { log.Debug("Skipping cluster alerts due to Hardware Key PIN/Touch requirement.") } else { if err := common.ShowClusterAlerts(cf.Context, tc, os.Stderr, nil, From 353dda0e3f1c603bea7e37fd8f51ac88c805fbaf Mon Sep 17 00:00:00 2001 From: Steven Martin Date: Thu, 21 Nov 2024 13:32:36 -0500 Subject: [PATCH 058/111] remove reference to Pro license (#49221) --- examples/aws/terraform/ha-autoscale-cluster/Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/aws/terraform/ha-autoscale-cluster/Makefile b/examples/aws/terraform/ha-autoscale-cluster/Makefile index 04c1848ec74a8..504e4772b2389 100644 --- a/examples/aws/terraform/ha-autoscale-cluster/Makefile +++ b/examples/aws/terraform/ha-autoscale-cluster/Makefile @@ -9,8 +9,8 @@ TF_VAR_cluster_name ?= # AWS SSH key name to provision in installed instances, should be available in the region TF_VAR_key_name ?= -# Full absolute path to the license file for Teleport Enterprise or Pro. -# This license will be copied into SSM and then pulled down on the auth nodes to enable Enterprise/Pro functionality +# Full absolute path to the license file for Teleport Enterprise +# This license will be copied into SSM and then pulled down on the auth nodes to enable Enterprise functionality TF_VAR_license_path ?= # AMI name contains the version of Teleport to install, and whether to use OSS or Enterprise version From 3f2231e0ab0b855267e1621ecd1ef7da09ef4472 Mon Sep 17 00:00:00 2001 From: Steven Martin Date: Fri, 22 Nov 2024 06:06:08 -0500 Subject: [PATCH 059/111] [web] update user participants for k8s non-interactive in recorded sessions (#49345) --- .../teleport/src/services/recordings/makeRecording.ts | 7 ++++++- .../teleport/src/services/recordings/recordings.test.ts | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/web/packages/teleport/src/services/recordings/makeRecording.ts b/web/packages/teleport/src/services/recordings/makeRecording.ts index c26af2e426ced..961d9bd1456ef 100644 --- a/web/packages/teleport/src/services/recordings/makeRecording.ts +++ b/web/packages/teleport/src/services/recordings/makeRecording.ts @@ -62,6 +62,7 @@ function makeDesktopRecording({ function makeSshOrKubeRecording({ participants, + user, time, session_start, session_stop, @@ -80,9 +81,13 @@ function makeSshOrKubeRecording({ ); let hostname = server_hostname || 'N/A'; + // SSH interactive/non-interactive and k8s interactive sessions user participants are in the participants field. + let userParticipants = participants; // For Kubernetes sessions, put the full pod name as 'hostname'. if (proto === 'kube') { hostname = `${kubernetes_cluster}/${kubernetes_pod_namespace}/${kubernetes_pod_name}`; + // For non-interactive k8s sessions the participant is the Teleport user running the command + if (!interactive) userParticipants = [user]; } // Description set to play for interactive so users can search by "play". @@ -97,7 +102,7 @@ function makeSshOrKubeRecording({ durationText, sid, createdDate: time, - users: participants ? participants.join(', ') : [], + users: userParticipants ? userParticipants.join(', ') : [], hostname, description, recordingType: kubernetes_cluster ? 'k8s' : 'ssh', diff --git a/web/packages/teleport/src/services/recordings/recordings.test.ts b/web/packages/teleport/src/services/recordings/recordings.test.ts index c7f61f7657a66..bc05ac64a1f9c 100644 --- a/web/packages/teleport/src/services/recordings/recordings.test.ts +++ b/web/packages/teleport/src/services/recordings/recordings.test.ts @@ -51,7 +51,7 @@ test('fetch session recordings, response formatting', async () => { playable: false, recordingType: 'k8s', sid: '456b933c-4ec4-59f1-862c-90ca9f7648b1', - users: [], + users: 'onuweeme@wiuke.mh', }, ], startKey: '', From 6f333c9d3ce83c35f795a92914496020a0250718 Mon Sep 17 00:00:00 2001 From: Paul Gottschling Date: Fri, 22 Nov 2024 09:21:25 -0500 Subject: [PATCH 060/111] Edit the Jira guide (#49287) Partially addresses #48552 Remove the instructions to create a `teleportAccessRequestId`, which the plugin does not use. While the plugin attempts to assign this field when submitting an issue, it does not use the field, and since the new issue request is not formatted properly, the field never receives a value. --- .../ssh-approval-jira.mdx | 21 ------------------- 1 file changed, 21 deletions(-) diff --git a/docs/pages/admin-guides/access-controls/access-request-plugins/ssh-approval-jira.mdx b/docs/pages/admin-guides/access-controls/access-request-plugins/ssh-approval-jira.mdx index a4fa32fe54826..eb913d51cf278 100644 --- a/docs/pages/admin-guides/access-controls/access-request-plugins/ssh-approval-jira.mdx +++ b/docs/pages/admin-guides/access-controls/access-request-plugins/ssh-approval-jira.mdx @@ -137,27 +137,6 @@ unexpected ways. Remove all other columns and statuses. Click **Back to board** to review your changes. -### Set up a request ID field - -The Teleport Jira plugin expects tasks in the Teleport Access Requests project -to include a field called `teleportAccessRequestId`, which it uses to track -individual Access Requests. This prevents users from tampering with or forging -Access Requests. - -To set up the `teleportAccessRequestId` field, click **Project settings** on the -left navigation bar, then click **Issues** -> **Fields**. - -In the **Actions** menu, click **Edit fields**. Click the **Custom fields** tab -in the left sidebar, then **Create custom field**. Add a **Short Text** field -named `teleportAccessRequestId`. Click the checkbox next to **Default Screen** -to associate that field with this screen. Click **Update**. - -Next, add the custom field to your Teleport Access Requests project. Click -**Projects** > **Teleport Access Requests (TAR)**, then **Project settings**. -Click **Issues** -> **Types** on the left sidebar, then click **Task** > -**Fields**. Find the dropdown menu called **Select Field**, then select the -`teleportAccessRequestId` field you added earlier. - ### Retrieve your Jira API token Obtain an API token that the Teleport Access Request plugin uses to make From ac00f023307ab86050312ccd9465800a7b895ac8 Mon Sep 17 00:00:00 2001 From: Gavin Frazar Date: Fri, 22 Nov 2024 17:27:47 -0800 Subject: [PATCH 061/111] [v15] fix connection tester error for Aurora databases (#49374) * fix connection tester error for Aurora databases Make database name a required field in the connection tester. * fix cockroachdb engine name typo * update required db name helper --- .../TestConnection/TestConnection.tsx | 19 +++++++++++--- .../src/Discover/SelectResource/databases.tsx | 25 ++++++++++++++++--- .../src/Discover/SelectResource/types.ts | 2 +- 3 files changed, 39 insertions(+), 7 deletions(-) diff --git a/web/packages/teleport/src/Discover/Database/TestConnection/TestConnection.tsx b/web/packages/teleport/src/Discover/Database/TestConnection/TestConnection.tsx index 8ae020a66313e..cc2ec3ee3db38 100644 --- a/web/packages/teleport/src/Discover/Database/TestConnection/TestConnection.tsx +++ b/web/packages/teleport/src/Discover/Database/TestConnection/TestConnection.tsx @@ -41,7 +41,7 @@ import { StyledBox, useConnectionDiagnostic, } from '../../Shared'; -import { DatabaseEngine } from '../../SelectResource'; +import { DatabaseEngine, getDatabaseProtocol } from '../../SelectResource'; export function TestConnection() { const { resourceSpec, agentMeta } = useDiscover(); @@ -183,8 +183,7 @@ export function TestConnection() { isDisabled={ attempt.status === 'processing' || nameOpts.length === 0 } - // Database name is required for Postgres. - isClearable={dbEngine !== DatabaseEngine.Postgres} + isClearable={!isDbNameRequired(dbEngine)} /> Date: Mon, 25 Nov 2024 10:35:00 -0500 Subject: [PATCH 062/111] update tbot missing proxy error (#49319) --- lib/tbot/tbot.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/tbot/tbot.go b/lib/tbot/tbot.go index 7874b29c05b8d..1ce912ad65b98 100644 --- a/lib/tbot/tbot.go +++ b/lib/tbot/tbot.go @@ -531,7 +531,7 @@ func (b *Bot) preRunChecks(ctx context.Context) (_ func() error, err error) { switch addrKind { case config.AddressKindUnspecified: return nil, trace.BadParameter( - "either a proxy or auth address must be set using --proxy, --auth-server or configuration", + "either a proxy or auth address must be set using --proxy-server, --auth-server or configuration", ) case config.AddressKindAuth: // TODO(noah): DELETE IN V17.0.0 From cc07d7c0a4e58a1c9f409404418bb45bd426042e Mon Sep 17 00:00:00 2001 From: Grzegorz Zdunek Date: Mon, 25 Nov 2024 17:34:29 +0100 Subject: [PATCH 063/111] [v15] Fix missing shadow of resource cards in Connect (#49356) * Fix missing shadow of resource cards in Connect * Add a comment about Chromium issues --- web/packages/teleterm/src/ui/Document/Document.tsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/web/packages/teleterm/src/ui/Document/Document.tsx b/web/packages/teleterm/src/ui/Document/Document.tsx index 454134fbb2441..879f0c700b85c 100644 --- a/web/packages/teleterm/src/ui/Document/Document.tsx +++ b/web/packages/teleterm/src/ui/Document/Document.tsx @@ -29,12 +29,14 @@ const Document: React.FC<{ shouldFocus: visible && !autoFocusDisabled, }); + // The background-color of Document is controlled through and it + // cannot be set on Document directly because of Chromium issues with z-index. + // Read more https://github.com/gravitational/teleport/pull/49351. return ( Date: Mon, 25 Nov 2024 09:35:24 -0800 Subject: [PATCH 064/111] reduce db connection test timeout (#49384) --- integration/conntest/database_test.go | 8 ++++---- lib/client/conntest/database.go | 19 +++++++++++-------- 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/integration/conntest/database_test.go b/integration/conntest/database_test.go index 4455cdb79f26f..15cecef794cac 100644 --- a/integration/conntest/database_test.go +++ b/integration/conntest/database_test.go @@ -131,12 +131,12 @@ func TestDiagnoseConnectionForPostgresDatabases(t *testing.T) { { Type: types.ConnectionDiagnosticTrace_RBAC_DATABASE, Status: types.ConnectionDiagnosticTrace_SUCCESS, - Details: "A Database Agent is available to proxy the connection to the Database.", + Details: "A Teleport Database Service is available to proxy the connection to the Database.", }, { Type: types.ConnectionDiagnosticTrace_CONNECTIVITY, Status: types.ConnectionDiagnosticTrace_SUCCESS, - Details: "Database is accessible from the Database Agent.", + Details: "Database is accessible from the Teleport Database Service.", }, { Type: types.ConnectionDiagnosticTrace_RBAC_DATABASE_LOGIN, @@ -172,8 +172,8 @@ func TestDiagnoseConnectionForPostgresDatabases(t *testing.T) { Status: types.ConnectionDiagnosticTrace_FAILED, Details: "Database not found. " + "Ensure your role grants access by adding it to the 'db_labels' property. " + - "This can also happen when you don't have a Database Agent proxying the database - " + - "you can fix that by adding the database labels to the 'db_service.resources.labels' in 'teleport.yaml' file of the database agent.", + "This can also happen when you don't have a Teleport Database Service proxying the database - " + + "you can fix that by adding the database labels to the 'db_service.resources.labels' in 'teleport.yaml' file of the Database Service.", }, }, }, diff --git a/lib/client/conntest/database.go b/lib/client/conntest/database.go index 3aa3284718768..40d2a9785c21c 100644 --- a/lib/client/conntest/database.go +++ b/lib/client/conntest/database.go @@ -31,6 +31,7 @@ import ( 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" "github.com/gravitational/teleport/lib/client" "github.com/gravitational/teleport/lib/client/conntest/database" @@ -136,8 +137,8 @@ func (s *DatabaseConnectionTester) TestConnection(ctx context.Context, req TestC types.ConnectionDiagnosticTrace_RBAC_DATABASE, "Database not found. "+ "Ensure your role grants access by adding it to the 'db_labels' property. "+ - "This can also happen when you don't have a Database Agent proxying the database - "+ - "you can fix that by adding the database labels to the 'db_service.resources.labels' in 'teleport.yaml' file of the database agent.", + "This can also happen when you don't have a Teleport Database Service proxying the database - "+ + "you can fix that by adding the database labels to the 'db_service.resources.labels' in 'teleport.yaml' file of the Database Service.", trace.NotFound("%s not found", req.ResourceName), ) if err != nil { @@ -167,7 +168,7 @@ func (s *DatabaseConnectionTester) TestConnection(ctx context.Context, req TestC if _, err := s.appendDiagnosticTrace(ctx, connectionDiagnosticID, types.ConnectionDiagnosticTrace_RBAC_DATABASE, - "A Database Agent is available to proxy the connection to the Database.", + "A Teleport Database Service is available to proxy the connection to the Database.", nil, ); err != nil { return nil, trace.Wrap(err) @@ -184,7 +185,9 @@ func (s *DatabaseConnectionTester) TestConnection(ctx context.Context, req TestC return nil, trace.Wrap(err) } - if pingErr := databasePinger.Ping(ctx, ping); pingErr != nil { + pingCtx, cancel := context.WithTimeout(ctx, apidefaults.DefaultIOTimeout) + defer cancel() + if pingErr := databasePinger.Ping(pingCtx, ping); pingErr != nil { connDiag, err := s.handlePingError(ctx, connectionDiagnosticID, pingErr, databasePinger) return connDiag, trace.Wrap(err) } @@ -273,7 +276,7 @@ func newPing(alpnProxyAddr, databaseUser, databaseName string) (database.PingPar func (s DatabaseConnectionTester) handlePingSuccess(ctx context.Context, connectionDiagnosticID string) (types.ConnectionDiagnostic, error) { if _, err := s.appendDiagnosticTrace(ctx, connectionDiagnosticID, types.ConnectionDiagnosticTrace_CONNECTIVITY, - "Database is accessible from the Database Agent.", + "Database is accessible from the Teleport Database Service.", nil, ); err != nil { return nil, trace.Wrap(err) @@ -341,12 +344,12 @@ func (s DatabaseConnectionTester) handlePingError(ctx context.Context, connectio return connDiag, nil } - if databasePinger.IsConnectionRefusedError(pingErr) { + if databasePinger.IsConnectionRefusedError(pingErr) || strings.Contains(pingErr.Error(), "context deadline exceeded") { connDiag, err := s.appendDiagnosticTrace(ctx, connectionDiagnosticID, types.ConnectionDiagnosticTrace_CONNECTIVITY, - "There was a connection problem between the Database Agent and the Database. "+ - "Ensure the Database is running and accessible from the Database Agent.", + "There was a connection problem between the Teleport Database Service and the database. "+ + "Ensure the database is running and accessible from the Database Service over the network.", pingErr, ) if err != nil { From 341482a0061f0ee35793e183bf8bb4681b0e0018 Mon Sep 17 00:00:00 2001 From: "Guillaume J. Charmes" Date: Tue, 26 Nov 2024 05:07:09 -0500 Subject: [PATCH 065/111] Use the config client_idle_timeout instead of a hardcoded value to allow for long-running fort forard / exec sessions. (#49430) --- lib/kube/proxy/constants.go | 2 -- lib/kube/proxy/forwarder.go | 2 ++ lib/kube/proxy/portforward_spdy.go | 7 +++++-- lib/kube/proxy/portforward_websocket.go | 3 ++- lib/kube/proxy/remotecommand.go | 3 ++- lib/kube/proxy/remotecommand_websocket.go | 4 +++- 6 files changed, 14 insertions(+), 7 deletions(-) diff --git a/lib/kube/proxy/constants.go b/lib/kube/proxy/constants.go index 5eb7ff5b9f9b3..5a148276bff69 100644 --- a/lib/kube/proxy/constants.go +++ b/lib/kube/proxy/constants.go @@ -28,8 +28,6 @@ const ( // DefaultStreamCreationTimeout DefaultStreamCreationTimeout = 30 * time.Second - - IdleTimeout = 15 * time.Minute ) // These constants are for remote command execution and port forwarding and are diff --git a/lib/kube/proxy/forwarder.go b/lib/kube/proxy/forwarder.go index 735f1debd2ec1..a7a773f7632c7 100644 --- a/lib/kube/proxy/forwarder.go +++ b/lib/kube/proxy/forwarder.go @@ -1638,6 +1638,7 @@ func (f *Forwarder) exec(authCtx *authContext, w http.ResponseWriter, req *http. httpResponseWriter: w, context: ctx, pingPeriod: f.cfg.ConnPingPeriod, + idleTimeout: sess.clientIdleTimeout, onResize: func(remotecommand.TerminalSize) {}, } @@ -1782,6 +1783,7 @@ func (f *Forwarder) portForward(authCtx *authContext, w http.ResponseWriter, req onPortForward: onPortForward, targetDialer: dialer, pingPeriod: f.cfg.ConnPingPeriod, + idleTimeout: sess.clientIdleTimeout, } f.log.Debugf("Starting %v.", request) err = runPortForwarding(request) diff --git a/lib/kube/proxy/portforward_spdy.go b/lib/kube/proxy/portforward_spdy.go index f760391668a5f..20847382c0eae 100644 --- a/lib/kube/proxy/portforward_spdy.go +++ b/lib/kube/proxy/portforward_spdy.go @@ -46,6 +46,7 @@ type portForwardRequest struct { context context.Context targetDialer httpstream.Dialer pingPeriod time.Duration + idleTimeout time.Duration } func (p portForwardRequest) String() string { @@ -103,8 +104,10 @@ func runPortForwardingHTTPStreams(req portForwardRequest) error { targetConn: targetConn, } defer h.Close() - h.Debugf("Setting port forwarding streaming connection idle timeout to %v", IdleTimeout) - conn.SetIdleTimeout(IdleTimeout) + + h.Debugf("Setting port forwarding streaming connection idle timeout to %s.", req.idleTimeout) + conn.SetIdleTimeout(req.idleTimeout) + h.run() return nil } diff --git a/lib/kube/proxy/portforward_websocket.go b/lib/kube/proxy/portforward_websocket.go index ec3e54606c2df..5cba5d99a6913 100644 --- a/lib/kube/proxy/portforward_websocket.go +++ b/lib/kube/proxy/portforward_websocket.go @@ -88,7 +88,8 @@ func runPortForwardingWebSocket(req portForwardRequest) error { Channels: channels, }, }) - conn.SetIdleTimeout(IdleTimeout) + + conn.SetIdleTimeout(req.idleTimeout) // Upgrade the request and create the virtual streams. _, streams, err := conn.Open( diff --git a/lib/kube/proxy/remotecommand.go b/lib/kube/proxy/remotecommand.go index 4613fc2c37713..44431a3efd9cb 100644 --- a/lib/kube/proxy/remotecommand.go +++ b/lib/kube/proxy/remotecommand.go @@ -56,6 +56,7 @@ type remoteCommandRequest struct { onResize resizeCallback context context.Context pingPeriod time.Duration + idleTimeout time.Duration } func (req remoteCommandRequest) eventPodMeta(ctx context.Context, creds kubeCreds) apievents.KubernetesPodMetadata { @@ -153,7 +154,7 @@ func createSPDYStreams(req remoteCommandRequest) (*remoteCommandProxy, error) { return nil, trace.ConnectionProblem(trace.BadParameter("missing connection"), "missing connection") } - conn.SetIdleTimeout(IdleTimeout) + conn.SetIdleTimeout(req.idleTimeout) var handler protocolHandler switch protocol { diff --git a/lib/kube/proxy/remotecommand_websocket.go b/lib/kube/proxy/remotecommand_websocket.go index 5b08407f79cc2..abc5d3f446fdf 100644 --- a/lib/kube/proxy/remotecommand_websocket.go +++ b/lib/kube/proxy/remotecommand_websocket.go @@ -109,7 +109,9 @@ func createWebSocketStreams(req remoteCommandRequest) (*remoteCommandProxy, erro Channels: channels, }, }) - conn.SetIdleTimeout(IdleTimeout) + + conn.SetIdleTimeout(req.idleTimeout) + negotiatedProtocol, streams, err := conn.Open( responsewriter.GetOriginal(req.httpResponseWriter), req.httpRequest, From 5169f27b4b202b0d747f42a9e7ffbf536f35806d Mon Sep 17 00:00:00 2001 From: Steven Martin Date: Tue, 26 Nov 2024 08:22:41 -0500 Subject: [PATCH 066/111] [v15] update links in AWS Terraform READMEs and helm charts (#49360) * update links in AWS Terraform READMEs * update link * fix link to architecture * fix docs terraform provider link * update links from helm charts --- examples/aws/terraform/README.md | 4 ++-- examples/aws/terraform/ha-autoscale-cluster/README.md | 2 +- examples/aws/terraform/starter-cluster/README.md | 2 +- examples/chart/teleport-cluster/values.yaml | 2 +- examples/chart/teleport-kube-agent/README.md | 9 +-------- 5 files changed, 6 insertions(+), 13 deletions(-) diff --git a/examples/aws/terraform/README.md b/examples/aws/terraform/README.md index 045082edcce00..69b407b1ab161 100644 --- a/examples/aws/terraform/README.md +++ b/examples/aws/terraform/README.md @@ -11,7 +11,7 @@ If you are planning on using our Terraform example in production, please referen We recommend familiarizing yourself with the following resources prior to reviewing our Terraform examples: -- [Teleport Architecture](https://goteleport.com/docs/architecture/overview/) +- [Teleport Architecture](https://goteleport.com/docs/reference/architecture/) - [Admin Guide](https://goteleport.com/docs/management/admin/) In order to spin up AWS resources using these Terraform examples, you need the following software: @@ -39,4 +39,4 @@ Please [see the AMIS.md file](AMIS.md) for a list of public Teleport AMI IDs tha ## This is not the Teleport Terraform Provider -If you are looking for Teleport's [Terraform Provider](https://goteleport.com/docs/setup/guides/terraform-provider/) which can be used to provision users, roles, auth connectors and other resources inside an existing Teleport cluster, its source code can be found in the `teleport-plugins` repo here: https://github.com/gravitational/teleport-plugins/tree/master/terraform +If you are looking for Teleport's [Terraform Provider](https://goteleport.com/docs/reference/terraform-provider/terraform-provider/) which can be used to provision users, roles, auth connectors and other resources inside an existing Teleport cluster, its source code can be found here: https://github.com/gravitational/teleport/tree/master/integrations/terraform diff --git a/examples/aws/terraform/ha-autoscale-cluster/README.md b/examples/aws/terraform/ha-autoscale-cluster/README.md index ac724d7f6083f..155c99cdbca42 100644 --- a/examples/aws/terraform/ha-autoscale-cluster/README.md +++ b/examples/aws/terraform/ha-autoscale-cluster/README.md @@ -20,7 +20,7 @@ the ports to the other parts. We recommend familiarizing yourself with the following resources prior to reviewing our Terraform examples: -- [Teleport Architecture](https://goteleport.com/docs/architecture/overview/) +- [Teleport Architecture](https://goteleport.com/docs/reference/architecture/) - [Admin Guide](https://goteleport.com/docs/management/admin/) - [Running Teleport Enterprise in High Availability mode on AWS](https://goteleport.com/docs/deploy-a-cluster/deployments/aws-ha-autoscale-cluster-terraform/) diff --git a/examples/aws/terraform/starter-cluster/README.md b/examples/aws/terraform/starter-cluster/README.md index 4e58feaf650dc..65db375766c43 100644 --- a/examples/aws/terraform/starter-cluster/README.md +++ b/examples/aws/terraform/starter-cluster/README.md @@ -6,7 +6,7 @@ Do not use this in production! This example should be used for demo, proof-of-co ## How does this work? -Teleport AMIs are built so you only need to specify environment variables to bring a fully configured instance online. See `data.tpl` or our [documentation](https://goteleport.com/docs/deploy-a-cluster/deployments/aws-terraform/#set-up-variables) to learn more about supported environment variables. +Teleport AMIs are built so you only need to specify environment variables to bring a fully configured instance online. See `data.tpl` or our [documentation](https://goteleport.com/docs/admin-guides/deploy-a-cluster/deployments/aws-starter-cluster-terraform/#set-up-variables) to learn more about supported environment variables. A series of systemd [units](https://github.com/gravitational/teleport/tree/master/assets/aws/files/system) bootstrap the instance, via several bash [scripts](https://github.com/gravitational/teleport/tree/master/assets/aws/files/bin). diff --git a/examples/chart/teleport-cluster/values.yaml b/examples/chart/teleport-cluster/values.yaml index bd34b5c57cae4..7304056fbb0e3 100644 --- a/examples/chart/teleport-cluster/values.yaml +++ b/examples/chart/teleport-cluster/values.yaml @@ -179,7 +179,7 @@ authentication: proxyListenerMode: "separate" # Optional setting for configuring session recording. -# See `session_recording` under https://goteleport.com/docs/setup/reference/config/#teleportyaml +# See `session_recording` under https://goteleport.com/docs/reference/config/#auth-service sessionRecording: "" # By default, Teleport will multiplex Postgres and MongoDB database connections on the same port as the proxy's web listener (443) diff --git a/examples/chart/teleport-kube-agent/README.md b/examples/chart/teleport-kube-agent/README.md index a536d8efa0d60..fee196275761b 100644 --- a/examples/chart/teleport-kube-agent/README.md +++ b/examples/chart/teleport-kube-agent/README.md @@ -12,14 +12,7 @@ To use it, you will need: - a reachable proxy endpoint (`$PROXY_ENDPOINT` e.g. `teleport.example.com:3080` or `teleport.example.com:443`) - a reachable reverse tunnel port on the proxy (e.g. `teleport.example.com:3024`). The address is automatically retrieved from the Teleport proxy configuration. -- either a static or dynamic join token for the Teleport Cluster - - a [static join token](https://goteleport.com/docs/setup/admin/adding-nodes/#adding-nodes-to-the-cluster) - for this Teleport cluster (`$JOIN_TOKEN`) is used by default. - - optionally a [dynamic join token](https://goteleport.com/docs/setup/admin/adding-nodes/#short-lived-dynamic-tokens) can - be used on Kubernetes clusters that support persistent volumes. Set `storage.enabled=true` and - `storage.storageClassName=` in the helm configuration to use persistent - volumes. - +- a join token for the Teleport Cluster. For this Teleport cluster (`$JOIN_TOKEN`) is used by default. See the [Join Methods and Token Reference](https://goteleport.com/docs/reference/join-methods/) for supported join methods and creating tokens. ## Combining roles From d4627227363f5cdc26fa601bf7eb0ebd308aa93e Mon Sep 17 00:00:00 2001 From: Steven Martin Date: Tue, 26 Nov 2024 11:13:46 -0500 Subject: [PATCH 067/111] [v15] [web] update Kubernetes reference in audit log display (#49461) * [web] update Kubernetes reference in audit log display * update test ui for audit log changes --- .../__snapshots__/Audit.story.test.tsx.snap | 10 +++++----- .../teleport/src/services/audit/makeEvent.ts | 16 ++++++++-------- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/web/packages/teleport/src/Audit/__snapshots__/Audit.story.test.tsx.snap b/web/packages/teleport/src/Audit/__snapshots__/Audit.story.test.tsx.snap index 453a28a471aec..ebc8b9cb72f2b 100644 --- a/web/packages/teleport/src/Audit/__snapshots__/Audit.story.test.tsx.snap +++ b/web/packages/teleport/src/Audit/__snapshots__/Audit.story.test.tsx.snap @@ -5731,7 +5731,7 @@ exports[`list of all events 1`] = ` - User [05ff66c9-a948-42f4-af0e-a1b6ba62561e.root] deleted kubernetes cluster [kube-local] + User [05ff66c9-a948-42f4-af0e-a1b6ba62561e.root] deleted Kubernetes cluster [kube-local] - User [05ff66c9-a948-42f4-af0e-a1b6ba62561e.root] updated kubernetes cluster [kube-local] + User [05ff66c9-a948-42f4-af0e-a1b6ba62561e.root] updated Kubernetes cluster [kube-local] - User [05ff66c9-a948-42f4-af0e-a1b6ba62561e.root] created kubernetes cluster [kube-local] + User [05ff66c9-a948-42f4-af0e-a1b6ba62561e.root] created Kubernetes cluster [kube-local] - User [alex] received a [200] from a [GET /api/v1/namespaces/teletest/pods/test-pod] request to kubernetes cluster [gke_teleport-a] + User [alex] received a [200] from a [GET /api/v1/namespaces/teletest/pods/test-pod] request to Kubernetes cluster [gke_teleport-a] - User [alex] executed a command on kubernetes cluster [clusterOne] + User [alex] executed a command on Kubernetes cluster [clusterOne] - `User [${user}] received a [${response_code}] from a [${verb} ${request_path}] request to kubernetes cluster [${kubernetes_cluster}]`, + `User [${user}] received a [${response_code}] from a [${verb} ${request_path}] request to Kubernetes cluster [${kubernetes_cluster}]`, }, [eventCodes.KUBE_CREATED]: { type: 'kube.create', desc: 'Kubernetes Created', format: ({ user, name }) => - `User [${user}] created kubernetes cluster [${name}]`, + `User [${user}] created Kubernetes cluster [${name}]`, }, [eventCodes.KUBE_UPDATED]: { type: 'kube.update', desc: 'Kubernetes Updated', format: ({ user, name }) => - `User [${user}] updated kubernetes cluster [${name}]`, + `User [${user}] updated Kubernetes cluster [${name}]`, }, [eventCodes.KUBE_DELETED]: { type: 'kube.delete', desc: 'Kubernetes Deleted', format: ({ user, name }) => - `User [${user}] deleted kubernetes cluster [${name}]`, + `User [${user}] deleted Kubernetes cluster [${name}]`, }, [eventCodes.DATABASE_SESSION_STARTED]: { type: 'db.session.start', From e3064adb388d72b9f1b17e4d8d374f8de56c774c Mon Sep 17 00:00:00 2001 From: Nic Klaassen Date: Tue, 26 Nov 2024 09:12:26 -0800 Subject: [PATCH 068/111] [v15] fix: support set.add on nil sets in traits expression parser (#49432) Backport #49385 to branch/v15 This is a manual backport and a much smaller and more targeted change than the original PR, because in this branch lib/expression.Set has not been converted to use lib/utils.Set. Changelog: Fixed a potential panic in login rule and SAML IdP expression parser --- lib/expression/evaluator_test.go | 66 +++++++++++++++++++++++++++++--- lib/expression/set.go | 3 ++ 2 files changed, 63 insertions(+), 6 deletions(-) diff --git a/lib/expression/evaluator_test.go b/lib/expression/evaluator_test.go index afc003921df8d..99d98346440d4 100644 --- a/lib/expression/evaluator_test.go +++ b/lib/expression/evaluator_test.go @@ -29,15 +29,13 @@ import ( "github.com/gravitational/teleport/lib/utils/typical" ) -func TestEvaluateTraitsMap(t *testing.T) { - t.Parallel() - - baseInputTraits := map[string][]string{ +var ( + baseInputTraits = map[string][]string{ "groups": []string{"devs", "security"}, "username": []string{"alice"}, } - tests := []struct { + testCases = []struct { desc string expressions map[string][]string inputTraits map[string][]string @@ -253,7 +251,31 @@ func TestEvaluateTraitsMap(t *testing.T) { "localEmails": {"alice", "bob", "charlie", "darrell", "esther", "frank"}, }, }, + { + desc: "methods on nil set from nonexistent map key", + expressions: map[string][]string{ + "a": {`user.spec.traits["a"].add("a")`}, + "b": {`ifelse(user.spec.traits["b"].contains("b"), set("z"), set("b"))`}, + "c": {`ifelse(user.spec.traits["c"].contains_any(set("c")), set("z"), set("c"))`}, + "d": {`ifelse(user.spec.traits["d"].isempty(), set("d"), set("z"))`}, + "e": {`user.spec.traits["e"].remove("e")`}, + "f": {`user.spec.traits["f"].remove("f").add("f")`}, + }, + inputTraits: baseInputTraits, + expectedTraits: map[string][]string{ + "a": {"a"}, + "b": {"b"}, + "c": {"c"}, + "d": {"d"}, + "e": {}, + "f": {"f"}, + }, + }, } +) + +func TestEvaluateTraitsMap(t *testing.T) { + t.Parallel() type evaluationEnv struct { Traits Dict @@ -270,7 +292,7 @@ func TestEvaluateTraitsMap(t *testing.T) { attributeParser, err := NewTraitsExpressionParser[evaluationEnv](typicalEnvVar) require.NoError(t, err) - for _, tc := range tests { + for _, tc := range testCases { t.Run(tc.desc, func(t *testing.T) { result, err := EvaluateTraitsMap[evaluationEnv]( evaluationEnv{ @@ -292,3 +314,35 @@ func TestEvaluateTraitsMap(t *testing.T) { }) } } + +func FuzzTraitsExpressionParser(f *testing.F) { + type evaluationEnv struct { + Traits Dict + } + parser, err := NewTraitsExpressionParser[evaluationEnv](map[string]typical.Variable{ + "true": true, + "false": false, + "user.spec.traits": typical.DynamicMap[evaluationEnv, Set](func(env evaluationEnv) (Dict, error) { + return env.Traits, nil + }), + }) + require.NoError(f, err) + for _, tc := range testCases { + for _, expressions := range tc.expressions { + for _, expression := range expressions { + f.Add(expression) + } + } + } + f.Fuzz(func(t *testing.T, expression string) { + expr, err := parser.Parse(expression) + if err != nil { + // Many/most fuzzed expressions won't parse, as long as we didn't + // panic that's okay. + return + } + // If the expression parsed, try to evaluate it, errors are okay just + // make sure we don't panic. + _, _ = expr.Evaluate(evaluationEnv{DictFromStringSliceMap(baseInputTraits)}) + }) +} diff --git a/lib/expression/set.go b/lib/expression/set.go index f1c5b25a931f5..6018ff496f202 100644 --- a/lib/expression/set.go +++ b/lib/expression/set.go @@ -35,6 +35,9 @@ func NewSet(values ...string) Set { } func (s Set) add(values ...string) Set { + if len(s) == 0 { + return NewSet(values...) + } out := s.clone() for _, value := range values { out[value] = struct{}{} From 249504f7b57c3faf43cea38f93fb029549bac21a Mon Sep 17 00:00:00 2001 From: Hugo Shaka Date: Tue, 26 Nov 2024 13:53:05 -0500 Subject: [PATCH 069/111] Increase pgevents TTL setting query timeout (#49471) --- lib/events/pgevents/pgevents.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/events/pgevents/pgevents.go b/lib/events/pgevents/pgevents.go index e697734fac537..2c20cc841dbc6 100644 --- a/lib/events/pgevents/pgevents.go +++ b/lib/events/pgevents/pgevents.go @@ -268,8 +268,9 @@ func New(ctx context.Context, cfg Config) (*Log, error) { } func configureCockroachDBRetention(ctx context.Context, cfg *Config, pool *pgxpool.Pool) error { - // Arbitrary timeout to make sure we don't end up hanging for some reason - ctx, cancel := context.WithTimeout(ctx, 5*time.Second) + // The first run of this query on multi region setup can sometimes take more than 5 seconds. + // The subsequent runs are faster (a couple of seconds at most). + ctx, cancel := context.WithTimeout(ctx, 30*time.Second) defer cancel() var expiryQuery string From 8223c667eb9a00178526f1742f47c8fb5f0c039e Mon Sep 17 00:00:00 2001 From: Paul Gottschling Date: Tue, 26 Nov 2024 14:04:17 -0500 Subject: [PATCH 070/111] Allow absolute docs links in the changelog (#49463) This is because the changelog needs to include absolute docs links in order for our release process to run smoothly, since we need to sync release notes to the changelog. To do so, add a message control directive to the changelog. This change removes the comment that disables the remark messaging linter, since we have removed this custom linter in favor of Vale. --- docs/pages/changelog.mdx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/pages/changelog.mdx b/docs/pages/changelog.mdx index 9721820967ca7..3676469d022ac 100644 --- a/docs/pages/changelog.mdx +++ b/docs/pages/changelog.mdx @@ -2,5 +2,6 @@ title: Teleport Changelog description: The Changelog provides a comprehensive description of the changes introduced by each Teleport release. --- -{/*lint disable messaging*/} +{/*lint disable absolute-docs-links*/} + (!CHANGELOG.md!) From 8ea8eb9e362ea398fb5ea9ddb04125b055b551fe Mon Sep 17 00:00:00 2001 From: rosstimothy <39066650+rosstimothy@users.noreply.github.com> Date: Wed, 27 Nov 2024 15:39:45 -0500 Subject: [PATCH 071/111] Restore interactive PAM authentication (#49487) (#49520) https://github.com/gravitational/teleport/pull/29279 caused PAM to deadlock when performing interactive authentication. To restore the previous semblance of functional PAM, this reverts waiting for PAM to be complete if BPF is disabled. #29279 was specifically added to prevent systemd, which may be invoked via a PAM module, from moving the exec subprocess to a different cgroup. Since cgroups are not used outside of Enhanced Session Recording this is a stop-gap measure that can allow mose users of PAM to get an immediate restoration of behavior while a more long term and sane approach to performing PAM during the SSH handshake can be considered, evaluated, and tested. Closes #49028. --- lib/srv/sess.go | 30 ++++++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/lib/srv/sess.go b/lib/srv/sess.go index 4b92762d39107..0d76118e0905e 100644 --- a/lib/srv/sess.go +++ b/lib/srv/sess.go @@ -1345,12 +1345,31 @@ func (s *session) startInteractive(ctx context.Context, scx *ServerContext, p *p Events: scx.Identity.AccessChecker.EnhancedRecordingSet(), } - if err := s.term.WaitForChild(); err != nil { - s.log.WithError(err).Error("Child process never became ready") - return trace.Wrap(err) + bpfService := scx.srv.GetBPF() + + // Only wait for the child to be "ready" if BPF is enabled. This is required + // because PAM might inadvertently move the child process to another cgroup + // by invoking systemd. If this happens, then the cgroup filter used by BPF + // will be looking for events in the wrong cgroup and no events will be captured. + // However, unconditionally waiting for the child to be ready results in PAM + // deadlocking because stdin/stdout/stderr which it uses to relay details from + // PAM auth modules are not properly copied until _after_ the shell request is + // replied to. + if bpfService.Enabled() { + if err := s.term.WaitForChild(); err != nil { + s.log.WithError(err).Error("Child process never became ready") + return trace.Wrap(err) + } + } else { + // Clean up the read half of the pipe, and set it to nil so that when the + // ServerContext is closed it doesn't attempt to a second close. + if err := s.scx.readyr.Close(); err != nil { + s.log.WithError(err).Error("Failed closing child ready pipe") + } + s.scx.readyr = nil } - if cgroupID, err := scx.srv.GetBPF().OpenSession(sessionContext); err != nil { + if cgroupID, err := bpfService.OpenSession(sessionContext); err != nil { s.log.WithError(err).Error("Failed to open enhanced recording (interactive) session") return trace.Wrap(err) } else if cgroupID > 0 { @@ -1359,8 +1378,7 @@ func (s *session) startInteractive(ctx context.Context, scx *ServerContext, p *p go func() { // Close the BPF recording session once the session is closed <-s.stopC - err = scx.srv.GetBPF().CloseSession(sessionContext) - if err != nil { + if err := bpfService.CloseSession(sessionContext); err != nil { s.log.WithError(err).Error("Failed to close enhanced recording (interactive) session") } }() From ee91187340f8fe1f84a8031fc964205d281cf3dc Mon Sep 17 00:00:00 2001 From: Steven Martin Date: Thu, 28 Nov 2024 08:07:04 -0500 Subject: [PATCH 072/111] docs: include install Teleport for join services (#49524) --- .../join-services-to-your-cluster/aws-ec2.mdx | 16 ++++++++++++---- .../join-services-to-your-cluster/aws-iam.mdx | 14 ++++++++++---- .../join-services-to-your-cluster/azure.mdx | 14 ++++++++++---- .../agents/join-services-to-your-cluster/gcp.mdx | 12 +++++++++--- 4 files changed, 41 insertions(+), 15 deletions(-) diff --git a/docs/pages/enroll-resources/agents/join-services-to-your-cluster/aws-ec2.mdx b/docs/pages/enroll-resources/agents/join-services-to-your-cluster/aws-ec2.mdx index fb96c7acd66a3..cbd7bb29f86e4 100644 --- a/docs/pages/enroll-resources/agents/join-services-to-your-cluster/aws-ec2.mdx +++ b/docs/pages/enroll-resources/agents/join-services-to-your-cluster/aws-ec2.mdx @@ -45,7 +45,7 @@ Teleport processes joining the cluster. by default). Remove the data directory if this instance has previously joined a Teleport cluster. -## Step 1/4. Set up AWS IAM credentials +## Step 1/5. Set up AWS IAM credentials The Teleport Auth Service needs permission to call `ec2:DescribeInstances` in order to check that the EC2 instances attempting to join your cluster are legitimate and @@ -86,7 +86,7 @@ file or environment variables. See [Specifying Credentials](https://aws.github.io/aws-sdk-go-v2/docs/configuring-sdk/#specifying-credentials) for details. -## Step 2/4. Create the AWS joining token +## Step 2/5. Create the AWS joining token Configure your Teleport Auth Service with a special dynamic token which will allow services from your AWS account to join your Teleport cluster. @@ -102,7 +102,13 @@ account and the AWS regions in which your EC2 instances will run. Run `tctl create token.yaml` to create the token. -## Step 3/4. Configure your services +## Step 3/5 Install Teleport + +Install Teleport on your AWS EC2 Instance. + +(!docs/pages/includes/install-linux.mdx!) + +## Step 4/5. Configure your services The EC2 join method can be used for Teleport processes running the SSH, Proxy, Kubernetes, Application, Database, or Windows Desktop Services. The Teleport @@ -129,7 +135,7 @@ proxy_service: enabled: no ``` -## Step 4/4. Launch your Teleport process +## Step 5/5. Launch your Teleport process +(!docs/pages/includes/start-teleport.mdx!) + Start Teleport on the host and confirm that it is able to connect to and join your cluster. You're all set! diff --git a/docs/pages/enroll-resources/agents/join-services-to-your-cluster/aws-iam.mdx b/docs/pages/enroll-resources/agents/join-services-to-your-cluster/aws-iam.mdx index ee3026c06c796..b12bae2ee9b8a 100644 --- a/docs/pages/enroll-resources/agents/join-services-to-your-cluster/aws-iam.mdx +++ b/docs/pages/enroll-resources/agents/join-services-to-your-cluster/aws-iam.mdx @@ -48,7 +48,7 @@ balancer or reverse proxy is available in Teleport 13.0+. (!docs/pages/includes/tctl.mdx!) -## Step 1/4. Set up AWS IAM credentials +## Step 1/5. Set up AWS IAM credentials Every Teleport process using the IAM method to join your Teleport cluster needs AWS IAM credentials in order to call the `sts:GetCallerIdentity` API. No @@ -62,7 +62,7 @@ attached IAM policies at all. If your instance does not otherwise need AWS credentials, it is preferred to create and attach an empty role with no attached policies. -## Step 2/4. Create the AWS joining token +## Step 2/5. Create the AWS joining token Create the following `token.yaml` with an `allow` rule specifying your AWS account and the ARN that the Teleport process's identity must match. @@ -82,7 +82,13 @@ Run the following command to create the token: $ tctl create -f token.yaml ``` -## Step 3/4. Configure your services +## Step 3/5 Install Teleport + +Install Teleport on your AWS EC2 instance. + +(!docs/pages/includes/install-linux.mdx!) + +## Step 4/5. Configure your services The IAM join method can be used for Teleport processes running the SSH, Proxy, Kubernetes, Application, or Database Service. @@ -111,7 +117,7 @@ In the `teleport.proxy_server` field, replace the value with the host and web port of your Teleport Proxy Service or Teleport Enterprise Cloud tenant, e.g., `mytenant.teleport.sh:443`. -## Step 4/4. Launch your Teleport process +## Step 5/5. Launch your Teleport process (!docs/pages/includes/aws-credentials.mdx!) diff --git a/docs/pages/enroll-resources/agents/join-services-to-your-cluster/azure.mdx b/docs/pages/enroll-resources/agents/join-services-to-your-cluster/azure.mdx index 551395ee186bb..06f2eb2463cf3 100644 --- a/docs/pages/enroll-resources/agents/join-services-to-your-cluster/azure.mdx +++ b/docs/pages/enroll-resources/agents/join-services-to-your-cluster/azure.mdx @@ -24,7 +24,7 @@ Teleport Services to a Cluster](join-services-to-your-cluster.mdx). assigned to it with permission to read virtual machine info. - (!docs/pages/includes/tctl.mdx!) -## Step 1/4. Set up a Managed Identity +## Step 1/5. Set up a Managed Identity Every virtual machine hosting a Teleport process using the Azure method to join your Teleport cluster needs a Managed Identity assigned to it. The identity @@ -33,7 +33,7 @@ look up the virtual machine. No other permissions are required. (!docs/pages/includes/server-access/azure-join-managed-identity.mdx!) -## Step 2/4. Create the Azure joining token +## Step 2/5. Create the Azure joining token Under the hood, Teleport processes will prove that they are running in your Azure subscription by sending a signed attested data document and access token @@ -54,7 +54,13 @@ Run the following command to create the token: $ tctl create -f token.yaml ``` -## Step 3/4. Configure your Teleport process +## Step 3/5 Install Teleport + +Install Teleport on your Azure Linux VM. + +(!docs/pages/includes/install-linux.mdx!) + +## Step 4/5. Configure your Teleport process The Azure join method can be used for Teleport processes running the SSH, Proxy, Kubernetes, Application, Database, or Desktop Service. @@ -82,7 +88,7 @@ proxy_service: enabled: no ``` -## Step 4/4. Launch your Teleport process +## Step 5/5. Launch your Teleport process Start Teleport on the Azure VM. diff --git a/docs/pages/enroll-resources/agents/join-services-to-your-cluster/gcp.mdx b/docs/pages/enroll-resources/agents/join-services-to-your-cluster/gcp.mdx index e31a33013f06c..b5ad17163088f 100644 --- a/docs/pages/enroll-resources/agents/join-services-to-your-cluster/gcp.mdx +++ b/docs/pages/enroll-resources/agents/join-services-to-your-cluster/gcp.mdx @@ -21,7 +21,7 @@ on the Teleport process joining the cluster. and with the Teleport binary installed. - (!docs/pages/includes/tctl.mdx!) -## Step 1/3. Create the GCP joining token +## Step 1/4. Create the GCP joining token Configure your Teleport Auth Service with a special dynamic token which will allow services from your GCP projects to join your Teleport cluster. @@ -42,7 +42,13 @@ Run the following command to create the token: $ tctl create token.yaml ``` -## Step 2/3. Configure your services +## Step 2/4 Install Teleport + +Install Teleport on your GCP Linux VM. + +(!docs/pages/includes/install-linux.mdx!) + +## Step 3/4. Configure your services The GCP join method can be used for Teleport processes running the SSH (`Node`), Proxy, Kubernetes, Application, Database, or Windows Desktop Services. The Teleport @@ -68,7 +74,7 @@ proxy_service: enabled: no ``` -## Step 3/3. Launch your Teleport process +## Step 4/4. Launch your Teleport process (!docs/pages/includes/start-teleport.mdx!) From 6f3734a6a217e8993fadf9195377d7d0c2035f41 Mon Sep 17 00:00:00 2001 From: Hugo Shaka Date: Fri, 29 Nov 2024 03:53:31 -0500 Subject: [PATCH 073/111] Allow custom audience for kubernetes in-cluster joining (#49558) --- lib/auth/join_kubernetes.go | 13 +++++++------ lib/auth/join_kubernetes_test.go | 2 +- lib/kubernetestoken/token_validator.go | 9 ++++++++- lib/kubernetestoken/token_validator_test.go | 5 ++++- 4 files changed, 20 insertions(+), 9 deletions(-) diff --git a/lib/auth/join_kubernetes.go b/lib/auth/join_kubernetes.go index a420da060ea3e..bcf9eeea05b56 100644 --- a/lib/auth/join_kubernetes.go +++ b/lib/auth/join_kubernetes.go @@ -31,7 +31,7 @@ import ( ) type k8sTokenReviewValidator interface { - Validate(context.Context, string) (*kubernetestoken.ValidationResult, error) + Validate(ctx context.Context, token, clusterName string) (*kubernetestoken.ValidationResult, error) } type k8sJWKSValidator func(now time.Time, jwksData []byte, clusterName string, token string) (*kubernetestoken.ValidationResult, error) @@ -52,14 +52,15 @@ func (a *Server) checkKubernetesJoinRequest(ctx context.Context, req *types.Regi ) } + clusterName, err := a.GetDomainName() + if err != nil { + return nil, trace.Wrap(err) + } + // Switch to join method subtype token validation. var result *kubernetestoken.ValidationResult switch token.Spec.Kubernetes.Type { case types.KubernetesJoinTypeStaticJWKS: - clusterName, err := a.GetDomainName() - if err != nil { - return nil, trace.Wrap(err) - } result, err = a.k8sJWKSValidator( a.clock.Now(), []byte(token.Spec.Kubernetes.StaticJWKS.JWKS), @@ -70,7 +71,7 @@ func (a *Server) checkKubernetesJoinRequest(ctx context.Context, req *types.Regi return nil, trace.WrapWithMessage(err, "reviewing kubernetes token with static_jwks") } case types.KubernetesJoinTypeInCluster, types.KubernetesJoinTypeUnspecified: - result, err = a.k8sTokenReviewValidator.Validate(ctx, req.IDToken) + result, err = a.k8sTokenReviewValidator.Validate(ctx, req.IDToken, clusterName) if err != nil { return nil, trace.WrapWithMessage(err, "reviewing kubernetes token with in_cluster") } diff --git a/lib/auth/join_kubernetes_test.go b/lib/auth/join_kubernetes_test.go index 5a9badc86747b..3af845ba5467f 100644 --- a/lib/auth/join_kubernetes_test.go +++ b/lib/auth/join_kubernetes_test.go @@ -35,7 +35,7 @@ type mockK8STokenReviewValidator struct { tokens map[string]*kubernetestoken.ValidationResult } -func (m *mockK8STokenReviewValidator) Validate(_ context.Context, token string) (*kubernetestoken.ValidationResult, error) { +func (m *mockK8STokenReviewValidator) Validate(_ context.Context, token, _ string) (*kubernetestoken.ValidationResult, error) { result, ok := m.tokens[token] if !ok { return nil, errMockInvalidToken diff --git a/lib/kubernetestoken/token_validator.go b/lib/kubernetestoken/token_validator.go index 6b43d07eb2721..3d04392f2eeae 100644 --- a/lib/kubernetestoken/token_validator.go +++ b/lib/kubernetestoken/token_validator.go @@ -46,6 +46,8 @@ const ( // Kubernetes should support bound tokens on 1.20 and 1.21, // but we can have an apiserver running 1.21 and kubelets running 1.19. kubernetesBoundTokenSupportVersion = "1.22.0" + // kubernetesAudience is the Kubernetes default audience put on SA tokens if we don't specify one. + kubernetesAudience = "https://kubernetes.default.svc" ) type ValidationResult struct { @@ -110,7 +112,7 @@ func (v *TokenReviewValidator) getClient() (kubernetes.Interface, error) { } // Validate uses the Kubernetes TokenReview API to validate a token and return its UserInfo -func (v *TokenReviewValidator) Validate(ctx context.Context, token string) (*ValidationResult, error) { +func (v *TokenReviewValidator) Validate(ctx context.Context, token, clusterName string) (*ValidationResult, error) { client, err := v.getClient() if err != nil { return nil, trace.Wrap(err) @@ -119,6 +121,11 @@ func (v *TokenReviewValidator) Validate(ctx context.Context, token string) (*Val review := &v1.TokenReview{ Spec: v1.TokenReviewSpec{ Token: token, + // In-cluster used to only allow tokens with the kubernetes audience + // But people kept confusing it with JWKS and set the cluster name + // as the audience/. To avoid his common footgun we now allow tokens + // whose audience is the teleport cluster name. + Audiences: []string{kubernetesAudience, clusterName}, }, } options := metav1.CreateOptions{} diff --git a/lib/kubernetestoken/token_validator_test.go b/lib/kubernetestoken/token_validator_test.go index 10368606e4284..b00c1ed048f90 100644 --- a/lib/kubernetestoken/token_validator_test.go +++ b/lib/kubernetestoken/token_validator_test.go @@ -42,6 +42,8 @@ import ( "github.com/gravitational/teleport/api/types" ) +const testClusterName = "teleport.example.com" + var userGroups = []string{"system:serviceaccounts", "system:serviceaccounts:namespace", "system:authenticated"} var boundTokenKubernetesVersion = version.Info{ @@ -66,6 +68,7 @@ func tokenReviewMock(t *testing.T, reviewResult *v1.TokenReview) func(ctest.Acti require.True(t, ok) require.Equal(t, reviewResult.Spec.Token, reviewRequest.Spec.Token) + require.ElementsMatch(t, reviewRequest.Spec.Audiences, []string{kubernetesAudience, testClusterName}) return true, reviewResult, nil } } @@ -239,7 +242,7 @@ func TestIDTokenValidator_Validate(t *testing.T) { v := TokenReviewValidator{ client: client, } - result, err := v.Validate(context.Background(), tt.token) + result, err := v.Validate(context.Background(), tt.token, testClusterName) if tt.expectedError != nil { require.ErrorIs(t, err, tt.expectedError) return From 72b73b5cb8c33679fba5323ebc4249a8a452b8a9 Mon Sep 17 00:00:00 2001 From: Edoardo Spadolini Date: Mon, 2 Dec 2024 02:04:25 +0100 Subject: [PATCH 074/111] Honor the proxy peering listen address specified in the configuration (#49591) --- lib/service/service.go | 5 +---- lib/service/servicecfg/proxy.go | 22 ++++++++++++++-------- 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/lib/service/service.go b/lib/service/service.go index 155132bcdaf74..283e04140ac63 100644 --- a/lib/service/service.go +++ b/lib/service/service.go @@ -3996,10 +3996,7 @@ func (process *TeleportProcess) setupProxyListeners(networkingConfig types.Clust } if !cfg.Proxy.DisableReverseTunnel && tunnelStrategy == types.ProxyPeering { - addr, err := process.Config.Proxy.PeerAddr() - if err != nil { - return nil, trace.Wrap(err) - } + addr := process.Config.Proxy.PeerListenAddr() listener, err := process.importOrCreateListener(ListenerProxyPeer, addr.String()) if err != nil { diff --git a/lib/service/servicecfg/proxy.go b/lib/service/servicecfg/proxy.go index 70be8d9aa8fe2..aba7920d154d3 100644 --- a/lib/service/servicecfg/proxy.go +++ b/lib/service/servicecfg/proxy.go @@ -209,18 +209,15 @@ func (c ProxyConfig) KubeAddr() (string, error) { } // PublicPeerAddr attempts to returns the public address the proxy advertises -// for proxy peering clients if available. It falls back to PeerAddr othewise. +// for proxy peering clients if available; otherwise, it falls back to trying to +// guess an appropriate public address based on the listen address. func (c ProxyConfig) PublicPeerAddr() (*utils.NetAddr, error) { addr := &c.PeerPublicAddr - if addr.IsEmpty() || addr.IsHostUnspecified() { - return c.PeerAddr() + if !addr.IsEmpty() && !addr.IsHostUnspecified() { + return addr, nil } - return addr, nil -} -// PeerAddr returns the address the proxy advertises for proxy peering clients. -func (c ProxyConfig) PeerAddr() (*utils.NetAddr, error) { - addr := &c.PeerAddress + addr = &c.PeerAddress if addr.IsEmpty() { addr = defaults.ProxyPeeringListenAddr() } @@ -242,6 +239,15 @@ func (c ProxyConfig) PeerAddr() (*utils.NetAddr, error) { return addr, nil } +// PeerListenAddr returns the proxy peering listen address that was configured, +// or the default one otherwise. +func (c ProxyConfig) PeerListenAddr() *utils.NetAddr { + if c.PeerAddress.IsEmpty() { + return defaults.ProxyPeeringListenAddr() + } + return &c.PeerAddress +} + // KubeProxyConfig specifies the Kubernetes configuration for Teleport's proxy service type KubeProxyConfig struct { // Enabled turns kubernetes proxy role on or off for this process From 9e72e02bd1779c7850b5121953034f14e15d514c Mon Sep 17 00:00:00 2001 From: Steven Martin Date: Mon, 2 Dec 2024 05:04:19 -0500 Subject: [PATCH 075/111] docs: update identity file instructions for Event Export (#49595) --- docs/pages/includes/plugins/identity-export.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/pages/includes/plugins/identity-export.mdx b/docs/pages/includes/plugins/identity-export.mdx index 929eddd0f369e..8db457cb0e378 100644 --- a/docs/pages/includes/plugins/identity-export.mdx +++ b/docs/pages/includes/plugins/identity-export.mdx @@ -46,7 +46,7 @@ If you are running the {{ client }} on a Linux server, create a data directory to hold certificate files for the {{ client }}: ```code -$ sudo mkdir -p /var/lib/teleport/api-credentials +$ sudo mkdir -p /var/lib/teleport/plugins/api-credentials $ sudo mv identity /var/lib/teleport/plugins/api-credentials ``` From 82689855bebb9ba9c7cc0fdfc406aeb902deed0e Mon Sep 17 00:00:00 2001 From: Paul Gottschling Date: Mon, 2 Dec 2024 08:57:40 -0500 Subject: [PATCH 076/111] Add introduction to Enrolling Teleport Resources (#49279) Closes #47229 The page already lists the contents of the section using the `remark-toc` plugin, which expands the `(!toc!)` syntax to include a list of pages. --- .../enroll-resources/enroll-resources.mdx | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/docs/pages/enroll-resources/enroll-resources.mdx b/docs/pages/enroll-resources/enroll-resources.mdx index 6d0f6ab1192d4..0ff168ae4d82b 100644 --- a/docs/pages/enroll-resources/enroll-resources.mdx +++ b/docs/pages/enroll-resources/enroll-resources.mdx @@ -3,4 +3,27 @@ title: Enrolling Teleport Resources description: Provides step-by-step instructions for enrolling servers, databases, and other infrastructure resources with your Teleport cluster. --- +You can use Teleport to protect infrastructure resources like servers, +databases, and Kubernetes clusters. Once an infrastructure resource is protected +by Teleport, you can restrict access to the resource using the Teleport +[role-based access controls +system](../admin-guides/access-controls/access-controls.mdx) and use Teleport +features like session recordings and audit events to understand how your users +interact with the resource. + +To enroll a resource with Teleport, you deploy a Teleport Agent, an instance of +the `teleport` binary configured to run certain services, such as the Teleport +SSH Service and Teleport Database Service. You then configure the Agent to proxy +a resource by querying a service discovery API (Auto Discovery), using a +[dynamic Teleport +resource](../admin-guides/infrastructure-as-code/infrastructure-as-code.mdx), or +naming the resource in the Agent's configuration file. Read more about [Teleport +Agent architecture](../reference/architecture/agents.mdx). + +You can also create a Teleport bot user and set up Machine ID to enable service +accounts to access Teleport-protected resources. + +Read the following documentation for more information on enrolling +infrastructure resources with Teleport: + (!toc!) From f30af31b744cf2bc84f958f365552fe7d3aeef44 Mon Sep 17 00:00:00 2001 From: rosstimothy <39066650+rosstimothy@users.noreply.github.com> Date: Mon, 2 Dec 2024 10:30:10 -0500 Subject: [PATCH 077/111] Reduce web SSH session log spam (#49635) Prevents emitting error log messages when users exit SSH web sessions under normal circumstances. Closes https://github.com/gravitational/teleport/issues/49394 --- lib/web/terminal.go | 2 +- lib/web/terminal/terminal.go | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/web/terminal.go b/lib/web/terminal.go index 6b06a53832c3d..f1a674a927dde 100644 --- a/lib/web/terminal.go +++ b/lib/web/terminal.go @@ -875,7 +875,7 @@ func (t *TerminalHandler) streamTerminal(ctx context.Context, tc *client.Telepor t.log.WithError(err).Error("Unable to send close event to web client.") } - if err := t.stream.Close(); err != nil { + if err := t.stream.Close(); err != nil && !errors.Is(err, io.EOF) { t.log.WithError(err).Error("Unable to close client web socket.") return } diff --git a/lib/web/terminal/terminal.go b/lib/web/terminal/terminal.go index c92dae03fb2d1..b455fc9eb7287 100644 --- a/lib/web/terminal/terminal.go +++ b/lib/web/terminal/terminal.go @@ -115,8 +115,8 @@ func (t *WSStream) WriteMessage(messageType int, data []byte) error { // WriteError displays an error in the terminal window. func (t *WSStream) WriteError(msg string) { - if _, writeErr := replacer.WriteString(t, msg); writeErr != nil { - t.log.WithError(writeErr).Warnf("Unable to send error to terminal: %v", msg) + if _, err := replacer.WriteString(t, msg); err != nil && !errors.Is(err, websocket.ErrCloseSent) { + t.log.WithError(err).Warnf("Unable to send error to terminal: %v", msg) } } From 8209c96bbbc7823afff2c0780738d3bb0b148fdc Mon Sep 17 00:00:00 2001 From: Steven Martin Date: Mon, 2 Dec 2024 11:23:38 -0500 Subject: [PATCH 078/111] [v15] update access request errors to not repeat cluster names (#49643) * update access request errors to not repeat cluster names * lint fix for access request * update to use deduplication for invalid cluster names Co-authored-by: Zac Bergquist * update deduplicate call --------- Co-authored-by: Zac Bergquist --- lib/services/access_request.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/services/access_request.go b/lib/services/access_request.go index 19a9c33bd8064..fd7ee8e9cb225 100644 --- a/lib/services/access_request.go +++ b/lib/services/access_request.go @@ -110,7 +110,7 @@ func ValidateAccessRequestClusterNames(cg ClusterGetter, ar types.AccessRequest) } if len(invalidClusters) > 0 { return trace.NotFound("access request contains invalid or unknown cluster names: %v", - strings.Join(invalidClusters, ", ")) + strings.Join(apiutils.Deduplicate(invalidClusters), ", ")) } return nil } From 4154eb78d24d4204a853667e3e8ae0ccef2cdee2 Mon Sep 17 00:00:00 2001 From: Tiago Silva Date: Mon, 2 Dec 2024 17:05:07 +0000 Subject: [PATCH 079/111] [v15] [buddy] feat(charts): Give the possibility to add labels on more resources (#49649) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat(charts): Give the possibility to add labels on more resources Currently it's possible to add labels on Jobs but not on Pods created by the Job. Let's allow it. Same problem on operator subchart for deployments and pod created by the deployment. * Fix doc indentation * fix typo --------- Co-authored-by: emmanuel.lagree Co-authored-by: Emmanuel Lagrée <36861662+elagree@users.noreply.github.com> --- .../zz_generated.teleport-operator.mdx | 20 ++++ .../helm-reference/teleport-cluster.mdx | 105 +++++++++++++++++- .../teleport-operator/.lint/labels.yaml | 10 ++ .../templates/deployment.yaml | 12 +- .../tests/deployment_test.yaml | 19 ++++ .../charts/teleport-operator/values.yaml | 9 ++ .../templates/auth/predeploy_job.yaml | 6 + .../templates/proxy/predeploy_job.yaml | 6 + .../tests/predeploy_test.yaml | 41 +++++++ examples/chart/teleport-cluster/values.yaml | 3 + 10 files changed, 228 insertions(+), 3 deletions(-) create mode 100644 examples/chart/teleport-cluster/charts/teleport-operator/.lint/labels.yaml diff --git a/docs/pages/includes/helm-reference/zz_generated.teleport-operator.mdx b/docs/pages/includes/helm-reference/zz_generated.teleport-operator.mdx index a371f03c0e77c..72af53e160f34 100644 --- a/docs/pages/includes/helm-reference/zz_generated.teleport-operator.mdx +++ b/docs/pages/includes/helm-reference/zz_generated.teleport-operator.mdx @@ -149,6 +149,26 @@ put on the `Pod` resources created by the chart. `annotations.serviceAccount` contains the Kubernetes annotations put on the `Deployment` resource created by the chart. +## `annotations` + +### `labels.deployment` + +| Type | Default | +|------|---------| +| `object` | `{}` | + +`labels.deployment` contains the Kubernetes labels +put on the `Deployment` resource created by the chart. + +### `labels.pod` + +| Type | Default | +|------|---------| +| `object` | `{}` | + +`labels.pod` contains the Kubernetes labels +put on the `Pod` resources created by the chart. + ## `serviceAccount` ### `serviceAccount.create` diff --git a/docs/pages/reference/helm-reference/teleport-cluster.mdx b/docs/pages/reference/helm-reference/teleport-cluster.mdx index 5c1caa908a96c..1af346bf07cc8 100644 --- a/docs/pages/reference/helm-reference/teleport-cluster.mdx +++ b/docs/pages/reference/helm-reference/teleport-cluster.mdx @@ -645,6 +645,63 @@ the same Kubernetes cluster or installing the CRDs on your own you should not ha ## `operator` +### `operator.annotations.deployment` + +| Type | Default value | +|----------|---------------| +| `object` | `{}` | + +[Kubernetes reference](https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/) + +Kubernetes annotations which should be applied to the `Deployment` created by the chart. + +`values.yaml` example: + + ```yaml + operator: + annotations: + deployment: + kubernetes.io/annotation: value + ``` + +### `operator.annotations.pod` + +| Type | Default value | +|----------|---------------| +| `object` | `{}` | + +[Kubernetes reference](https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/) + +Kubernetes annotations which should be applied to the `Pod` created by the chart. + +`values.yaml` example: + + ```yaml + operator: + annotations: + pod: + kubernetes.io/annotation: value + ``` + +### `operator.annotations.serviceAccount` + +| Type | Default value | +|----------|---------------| +| `object` | `{}` | + +[Kubernetes reference](https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/) + +Kubernetes annotations which should be applied to the `ServiceAccount` created by the chart. + +`values.yaml` example: + + ```yaml + operator: + annotations: + serviceAccount: + kubernetes.io/annotation: value + ``` + ### `operator.enabled` | Type | Default value | @@ -661,7 +718,7 @@ If you are deploying multiple releases of the Helm chart in the same cluster you ```yaml operator: - enabled: true + enabled: true ``` ### `operator.image` @@ -682,6 +739,44 @@ This setting requires [`operator.enabled`](#operatorenabled). image: my.docker.registry/teleport-operator-image-name ``` +### `operator.labels.deployment` + +| Type | Default value | +|----------|---------------| +| `object` | `{}` | + +[Kubernetes reference](https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/) + +Kubernetes labels which should be applied to the `Deployment` created by the chart. + +`values.yaml` example: + + ```yaml + operator: + labels: + deployment: + label: value + ``` + +### `operator.labels.pod` + +| Type | Default value | +|----------|---------------| +| `object` | `{}` | + +[Kubernetes reference](https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/) + +Kubernetes labels which should be applied to the `Pod` created by the chart. + +`values.yaml` example: + + ```yaml + operator: + labels: + pod: + label: value + ``` + ### `operator.resources` | Type | Default value | @@ -1779,6 +1874,14 @@ is true. `extraLabels.job` are labels to set on the Job run by the Helm hook. +### `extraLabels.jobPod` + +| Type | Default value | +|----------|---------------| +| `object` | `{}` | + +`extraLabels.jobPod` are labels to set on the Pods created by the Job run by the Helm hook. + ### `extraLabels.persistentVolumeClaim` | Type | Default value | diff --git a/examples/chart/teleport-cluster/charts/teleport-operator/.lint/labels.yaml b/examples/chart/teleport-cluster/charts/teleport-operator/.lint/labels.yaml new file mode 100644 index 0000000000000..15d33de282dfa --- /dev/null +++ b/examples/chart/teleport-cluster/charts/teleport-operator/.lint/labels.yaml @@ -0,0 +1,10 @@ +labels: + deployment: + kubernetes.io/deployment: "test-label" + kubernetes.io/deployment-different: 3 + pod: + kubernetes.io/pod: "test-label" + kubernetes.io/pod-different: 4 +teleportAddress: "example.teleport.sh:443" +token: "my-operator-bot" +teleportClusterName: "example.teleport.sh" diff --git a/examples/chart/teleport-cluster/charts/teleport-operator/templates/deployment.yaml b/examples/chart/teleport-cluster/charts/teleport-operator/templates/deployment.yaml index cd6d67643d81e..ae0395a1c6bd8 100644 --- a/examples/chart/teleport-cluster/charts/teleport-operator/templates/deployment.yaml +++ b/examples/chart/teleport-cluster/charts/teleport-operator/templates/deployment.yaml @@ -4,7 +4,11 @@ kind: Deployment metadata: name: {{ include "teleport-cluster.operator.fullname" . }} namespace: {{ .Release.Namespace }} - labels: {{- include "teleport-cluster.operator.labels" . | nindent 4 }} + labels: + {{- include "teleport-cluster.operator.labels" . | nindent 4 }} + {{- if .Values.labels.deployment }} + {{- toYaml .Values.labels.deployment | nindent 4 }} + {{- end }} {{- if .Values.annotations.deployment }} annotations: {{- toYaml .Values.annotations.deployment | nindent 4 }} {{- end }} @@ -22,7 +26,11 @@ spec: {{- if .Values.annotations.pod }} annotations: {{- toYaml .Values.annotations.pod | nindent 8 }} {{- end }} - labels: {{- include "teleport-cluster.operator.labels" . | nindent 8 }} + labels: + {{- include "teleport-cluster.operator.labels" . | nindent 8 }} + {{- if .Values.labels.pod }} + {{- toYaml .Values.labels.pod | nindent 8 }} + {{- end }} spec: {{- if .Values.nodeSelector }} nodeSelector: {{- toYaml .Values.nodeSelector | nindent 8 }} diff --git a/examples/chart/teleport-cluster/charts/teleport-operator/tests/deployment_test.yaml b/examples/chart/teleport-cluster/charts/teleport-operator/tests/deployment_test.yaml index 56f8f5163280c..ca261d8056be4 100644 --- a/examples/chart/teleport-cluster/charts/teleport-operator/tests/deployment_test.yaml +++ b/examples/chart/teleport-cluster/charts/teleport-operator/tests/deployment_test.yaml @@ -59,6 +59,25 @@ tests: path: metadata.annotations.kubernetes\.io/deployment-different value: 3 + - it: sets labels when specified + values: + - ../.lint/labels.yaml + asserts: + # Pod labels + - equal: + path: spec.template.metadata.labels.kubernetes\.io/pod + value: test-label + - equal: + path: spec.template.metadata.labels.kubernetes\.io/pod-different + value: 4 + # Deployment labels + - equal: + path: metadata.labels.kubernetes\.io/deployment + value: test-label + - equal: + path: metadata.labels.kubernetes\.io/deployment-different + value: 3 + - it: should mount tls.existingCASecretName and set environment when set in values values: - ../.lint/existing-tls-ca.yaml diff --git a/examples/chart/teleport-cluster/charts/teleport-operator/values.yaml b/examples/chart/teleport-cluster/charts/teleport-operator/values.yaml index f576b26ce68df..e79f4bb4b5222 100644 --- a/examples/chart/teleport-cluster/charts/teleport-operator/values.yaml +++ b/examples/chart/teleport-cluster/charts/teleport-operator/values.yaml @@ -89,6 +89,15 @@ annotations: # put on the `Deployment` resource created by the chart. serviceAccount: {} +# annotations -- +labels: + # labels.deployment(object) -- contains the Kubernetes labels + # put on the `Deployment` resource created by the chart. + deployment: {} + # labels.pod(object) -- contains the Kubernetes labels + # put on the `Pod` resources created by the chart. + pod: {} + # serviceAccount -- serviceAccount: # serviceAccount.create(bool) -- controls if the chart should create the Kubernetes diff --git a/examples/chart/teleport-cluster/templates/auth/predeploy_job.yaml b/examples/chart/teleport-cluster/templates/auth/predeploy_job.yaml index d5a38e93ead74..c557c718042c3 100644 --- a/examples/chart/teleport-cluster/templates/auth/predeploy_job.yaml +++ b/examples/chart/teleport-cluster/templates/auth/predeploy_job.yaml @@ -17,6 +17,12 @@ metadata: spec: backoffLimit: 1 template: + metadata: + labels: + {{- include "teleport-cluster.auth.labels" . | nindent 8 }} + {{- if $auth.extraLabels.jobPod }} + {{- toYaml $auth.extraLabels.jobPod | nindent 8 }} + {{- end }} spec: {{- if $auth.affinity }} affinity: {{- toYaml $auth.affinity | nindent 8 }} diff --git a/examples/chart/teleport-cluster/templates/proxy/predeploy_job.yaml b/examples/chart/teleport-cluster/templates/proxy/predeploy_job.yaml index 0f4ddb4f7fff4..4484d9cadc095 100644 --- a/examples/chart/teleport-cluster/templates/proxy/predeploy_job.yaml +++ b/examples/chart/teleport-cluster/templates/proxy/predeploy_job.yaml @@ -17,6 +17,12 @@ metadata: spec: backoffLimit: 1 template: + metadata: + labels: + {{- include "teleport-cluster.proxy.labels" . | nindent 8 }} + {{- if $proxy.extraLabels.jobPod }} + {{- toYaml $proxy.extraLabels.jobPod | nindent 8 }} + {{- end }} spec: {{- if $proxy.affinity }} affinity: {{- toYaml $proxy.affinity | nindent 8 }} diff --git a/examples/chart/teleport-cluster/tests/predeploy_test.yaml b/examples/chart/teleport-cluster/tests/predeploy_test.yaml index 3ab3ad799e99c..7481cae5217df 100644 --- a/examples/chart/teleport-cluster/tests/predeploy_test.yaml +++ b/examples/chart/teleport-cluster/tests/predeploy_test.yaml @@ -133,6 +133,26 @@ tests: path: metadata.labels.baz value: overridden + - it: should set extraLabels.jobPod on auth predeploy job when set in values + template: auth/predeploy_job.yaml + set: + clusterName: helm-lint + extraLabels: + jobPod: + foo: bar + baz: override-me + auth: + extraLabels: + jobPod: + baz: overridden + asserts: + - equal: + path: spec.template.metadata.labels.foo + value: bar + - equal: + path: spec.template.metadata.labels.baz + value: overridden + - it: should set extraLabels on auth predeploy config when set in values template: auth/predeploy_config.yaml set: @@ -152,6 +172,7 @@ tests: - equal: path: metadata.labels.baz value: overridden + - it: should set extraLabels on proxy predeploy job when set in values template: proxy/predeploy_job.yaml set: @@ -172,6 +193,26 @@ tests: path: metadata.labels.baz value: overridden + - it: should set extraLabels.jobPod on proxy predeploy job when set in values + template: proxy/predeploy_job.yaml + set: + clusterName: helm-lint + extraLabels: + jobPod: + foo: bar + baz: override-me + proxy: + extraLabels: + jobPod: + baz: overridden + asserts: + - equal: + path: spec.template.metadata.labels.foo + value: bar + - equal: + path: spec.template.metadata.labels.baz + value: overridden + - it: should set extraLabels on proxy predeploy config when set in values template: proxy/predeploy_config.yaml set: diff --git a/examples/chart/teleport-cluster/values.yaml b/examples/chart/teleport-cluster/values.yaml index 7304056fbb0e3..d961a86c7369d 100644 --- a/examples/chart/teleport-cluster/values.yaml +++ b/examples/chart/teleport-cluster/values.yaml @@ -654,6 +654,9 @@ extraLabels: ingress: {} # extraLabels.job(object) -- are labels to set on the Job run by the Helm hook. job: {} + # extraLabels.jobPod(object) -- are labels to set on the Pods created by the + # Job run by the Helm hook. + jobPod: {} # extraLabels.persistentVolumeClaim(object) -- are labels to set on the PersistentVolumeClaim. persistentVolumeClaim: {} # extraLabels.pod(object) -- are labels to set on the Pods created by the From 1ffe97e8da70d8dcbac7baffb5163e3db2d8207d Mon Sep 17 00:00:00 2001 From: Paul Gottschling Date: Mon, 2 Dec 2024 14:27:20 -0500 Subject: [PATCH 080/111] Add "How it works" to the GitHub SSO guide (#49284) Closes #44945 Add the required "How it works" section to the GitHub SSO guide. Use this as a jumping off point to mention the limitation in which GitHub does not assign Teleport usernames to email addresses. --- .../access-controls/sso/github-sso.mdx | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/docs/pages/admin-guides/access-controls/sso/github-sso.mdx b/docs/pages/admin-guides/access-controls/sso/github-sso.mdx index 4159d565fdaab..9e34f0bbb94c5 100644 --- a/docs/pages/admin-guides/access-controls/sso/github-sso.mdx +++ b/docs/pages/admin-guides/access-controls/sso/github-sso.mdx @@ -8,6 +8,34 @@ This guide explains how to set up GitHub Single Sign On (SSO) so you can automatically map teams in your GitHub organization to users and roles in Teleport. +## How it works + +A Teleport administrator creates a GitHub authentication connector on the +Teleport Auth Service backend and requires Teleport users to authenticate +through GitHub by creating a cluster authentication preference. + +When a user authenticates to Teleport, they receive instructions to finish +authenticating using GitHub. The Teleport Auth Service receives an OAuth 2.0 +access token from GitHub and authenticates the token. (The GitHub authentication +connector acts as an OAuth 2.0 +[client](https://datatracker.ietf.org/doc/html/rfc6749#section-4.1).) + +The Auth Service then issues short-lived TLS and SSH certificates to the user by +reading data from the OAuth 2.0 access token. In particular, the Auth Service: +- Maps the user's GitHub teams to Teleport roles in order to assign the user + permissions. +- Assigns the user's Teleport username to their GitHub username. + + + +GitHub usernames are not formatted as email addresses. As a result, any Teleport +plugin that expects to send email to a user based on their Teleport username +will not work as expected. For example, the [PagerDuty Access Request +plugin](../access-request-plugins/ssh-approval-pagerduty.mdx) has this +limitation. + + + ## Prerequisites - A GitHub organization with at least one team. From c8f92eb375f6fd41f5e5f98cc50448d2c8ab5645 Mon Sep 17 00:00:00 2001 From: Gavin Frazar Date: Mon, 2 Dec 2024 19:19:32 -0800 Subject: [PATCH 081/111] grant db admin admin option on auto user role (#49391) --- lib/srv/db/postgres/users.go | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/lib/srv/db/postgres/users.go b/lib/srv/db/postgres/users.go index a96e60e05c6dc..b875d74abacfe 100644 --- a/lib/srv/db/postgres/users.go +++ b/lib/srv/db/postgres/users.go @@ -412,6 +412,36 @@ func (e *Engine) initAutoUsers(ctx context.Context, sessionCtx *common.Session, e.Log.Debugf("Created PostgreSQL role %q.", teleportAutoUserRole) } + // v16 Postgres changed the role grant permissions model such that you can + // no longer grant non-superuser role membership just by having the + // CREATEROLE attribute. + // On v16 Postgres, when a role is created the creator is automatically + // granted that role with "INHERIT FALSE, SET FALSE, ADMIN OPTION" options. + // Prior to v16 Postgres that grant is not automatically made, because + // the CREATEROLE attribute alone was sufficient to grant the role to + // others. + // This is the only role that is created and granted to others by the + // Teleport database admin. + // It grants the auto user role to every role it provisions. + // To avoid breaking user auto-provisioning for customers who upgrade from + // v15 postgres to v16, we should grant this role with the admin option to + // ourselves after creating it. + // Also note that the grant syntax in v15 postgres and below does not + // support WITH INHERIT FALSE or WITH SET FALSE syntax, so we only specify + // WITH ADMIN OPTION. + // See: https://www.postgresql.org/docs/16/release-16.html + adminUser := sessionCtx.Database.GetAdminUser().Name + stmt := fmt.Sprintf("grant role %q to %q WITH ADMIN OPTION", teleportAutoUserRole, adminUser) + _, err = conn.Exec(ctx, stmt) + if err != nil { + if !strings.Contains(err.Error(), "cannot be granted back") && !strings.Contains(err.Error(), "already") { + e.Log.Debugf("Failed to grant required role %q to the Teleport database admin %q, user auto-provisioning may not work until the database admin is granted the role by a superuser", + teleportAutoUserRole, + adminUser, + ) + } + } + // Install stored procedures for creating and disabling database users. for name, sql := range pickProcedures(sessionCtx) { _, err := conn.Exec(ctx, sql) From 28fb0e365072f87094fc85af7d3ff9611b6bef71 Mon Sep 17 00:00:00 2001 From: Alan Parra Date: Tue, 3 Dec 2024 05:42:31 -0300 Subject: [PATCH 082/111] Fix TestDynamicIdentityFileCreds for Go 1.23 (#49597) (#49669) --- api/client/credentials_test.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/api/client/credentials_test.go b/api/client/credentials_test.go index 896a873c19811..dbd9996ca3b8b 100644 --- a/api/client/credentials_test.go +++ b/api/client/credentials_test.go @@ -464,6 +464,7 @@ func TestDynamicIdentityFileCreds(t *testing.T) { require.NoError(t, err) wantTLSCert, err := tls.X509KeyPair(tlsCert, keyPEM) require.NoError(t, err) + wantTLSCert.Leaf = nil require.Equal(t, wantTLSCert, *gotTLSCert) expiry, ok := cred.Expiry() @@ -522,6 +523,7 @@ func TestDynamicIdentityFileCreds(t *testing.T) { require.NoError(t, err) wantTLSCert, err = tls.X509KeyPair(secondTLSCertPem, keyPEM) require.NoError(t, err) + wantTLSCert.Leaf = nil require.Equal(t, wantTLSCert, *gotTLSCert) expiry, ok = cred.Expiry() From 7438468c89eedf90cca7674eb3adba85012f7bc3 Mon Sep 17 00:00:00 2001 From: Vadym Popov Date: Tue, 3 Dec 2024 10:14:52 -0600 Subject: [PATCH 083/111] Add remove tctl command for AutoUpdateConfig and AutoUpdateVersion (#49532) (#49676) --- tool/tctl/common/resource_command.go | 12 ++++++++++++ tool/tctl/common/resource_command_test.go | 12 ++++++++++++ 2 files changed, 24 insertions(+) diff --git a/tool/tctl/common/resource_command.go b/tool/tctl/common/resource_command.go index 7bd410e86f3ea..4dc78b9f6a4fd 100644 --- a/tool/tctl/common/resource_command.go +++ b/tool/tctl/common/resource_command.go @@ -1460,6 +1460,8 @@ func (rc *ResourceCommand) Delete(ctx context.Context, client *authclient.Client types.KindInstaller, types.KindUIConfig, types.KindNetworkRestrictions, + types.KindAutoUpdateConfig, + types.KindAutoUpdateVersion, } if !slices.Contains(singletonResources, rc.ref.Kind) && (rc.ref.Kind == "" || rc.ref.Name == "") { return trace.BadParameter("provide a full resource name to delete, for example:\n$ tctl rm cluster/east\n") @@ -1843,6 +1845,16 @@ func (rc *ResourceCommand) Delete(ctx context.Context, client *authclient.Client return trace.Wrap(err) } fmt.Printf("SPIFFE federation %q has been deleted\n", rc.ref.Name) + case types.KindAutoUpdateConfig: + if err := client.DeleteAutoUpdateConfig(ctx); err != nil { + return trace.Wrap(err) + } + fmt.Printf("AutoUpdateConfig has been deleted\n") + case types.KindAutoUpdateVersion: + if err := client.DeleteAutoUpdateVersion(ctx); err != nil { + return trace.Wrap(err) + } + fmt.Printf("AutoUpdateVersion has been deleted\n") default: return trace.BadParameter("deleting resources of type %q is not supported", rc.ref.Kind) } diff --git a/tool/tctl/common/resource_command_test.go b/tool/tctl/common/resource_command_test.go index be15e22a8f9b6..347d073e68b5e 100644 --- a/tool/tctl/common/resource_command_test.go +++ b/tool/tctl/common/resource_command_test.go @@ -2226,6 +2226,12 @@ version: v1 protocmp.IgnoreFields(&headerv1.Metadata{}, "id", "revision"), protocmp.Transform(), )) + + // Delete the resource + _, err = runResourceCommand(t, clt, []string{"rm", types.KindAutoUpdateConfig}) + require.NoError(t, err) + _, err = runResourceCommand(t, clt, []string{"get", types.KindAutoUpdateConfig}) + require.ErrorContains(t, err, "autoupdate_config \"autoupdate-config\" doesn't exist") } func testCreateAutoUpdateVersion(t *testing.T, clt *authclient.Client) { @@ -2261,6 +2267,12 @@ version: v1 protocmp.IgnoreFields(&headerv1.Metadata{}, "id", "revision"), protocmp.Transform(), )) + + // Delete the resource + _, err = runResourceCommand(t, clt, []string{"rm", types.KindAutoUpdateVersion}) + require.NoError(t, err) + _, err = runResourceCommand(t, clt, []string{"get", types.KindAutoUpdateVersion}) + require.ErrorContains(t, err, "autoupdate_version \"autoupdate-version\" doesn't exist") } func TestPluginResourceWrapper(t *testing.T) { From 72e9d4cc62d00402d81b425a240b7469468472e6 Mon Sep 17 00:00:00 2001 From: Gavin Frazar Date: Tue, 3 Dec 2024 10:26:47 -0800 Subject: [PATCH 084/111] add teleport version to SubmitEventRequest (#49381) --- gen/proto/go/prehog/v1alpha/teleport.pb.go | 1801 ++++++++++--------- gen/proto/ts/prehog/v1alpha/teleport_pb.ts | 18 + lib/usagereporter/teleport/usagereporter.go | 1 + proto/prehog/v1alpha/teleport.proto | 9 + 4 files changed, 936 insertions(+), 893 deletions(-) diff --git a/gen/proto/go/prehog/v1alpha/teleport.pb.go b/gen/proto/go/prehog/v1alpha/teleport.pb.go index aa27c7b483089..10749fa250c67 100644 --- a/gen/proto/go/prehog/v1alpha/teleport.pb.go +++ b/gen/proto/go/prehog/v1alpha/teleport.pb.go @@ -7508,6 +7508,12 @@ type SubmitEventRequest struct { // // PostHog timestamp Timestamp *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + // teleport_version is the version of the Teleport auth server that submitted + // the event, without the "v" prefix. + // For example: 16.4.7 + // + // PostHog property: tp.teleport_version + TeleportVersion string `protobuf:"bytes,95,opt,name=teleport_version,json=teleportVersion,proto3" json:"teleport_version,omitempty"` // the event being submitted // // Types that are assignable to Event: @@ -7650,6 +7656,13 @@ func (x *SubmitEventRequest) GetTimestamp() *timestamppb.Timestamp { return nil } +func (x *SubmitEventRequest) GetTeleportVersion() string { + if x != nil { + return x.TeleportVersion + } + return "" +} + func (m *SubmitEventRequest) GetEvent() isSubmitEventRequest_Event { if m != nil { return m.Event @@ -10035,950 +10048,952 @@ var file_prehog_v1alpha_teleport_proto_rawDesc = []byte{ 0x16, 0x6e, 0x75, 0x6d, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x14, 0x6e, 0x75, 0x6d, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x73, 0x22, 0xcd, 0x4d, 0x0a, 0x12, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x45, 0x76, + 0x6f, 0x6e, 0x73, 0x22, 0xf8, 0x4d, 0x0a, 0x12, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x38, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x74, 0x69, - 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x3f, 0x0a, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x5f, - 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x72, - 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x73, 0x65, - 0x72, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x09, 0x75, - 0x73, 0x65, 0x72, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x12, 0x3f, 0x0a, 0x0a, 0x73, 0x73, 0x6f, 0x5f, - 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, - 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, 0x53, - 0x4f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x09, - 0x73, 0x73, 0x6f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x4e, 0x0a, 0x0f, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0e, 0x72, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x48, 0x0a, 0x0d, 0x73, 0x65, 0x73, - 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x21, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x2e, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0c, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, - 0x61, 0x72, 0x74, 0x12, 0x4c, 0x0a, 0x0f, 0x75, 0x69, 0x5f, 0x62, 0x61, 0x6e, 0x6e, 0x65, 0x72, - 0x5f, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, - 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, - 0x42, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x48, 0x00, 0x52, 0x0d, 0x75, 0x69, 0x42, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x43, 0x6c, 0x69, 0x63, - 0x6b, 0x12, 0x92, 0x01, 0x0a, 0x29, 0x75, 0x69, 0x5f, 0x6f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, - 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x67, 0x6f, 0x5f, 0x74, 0x6f, 0x5f, - 0x64, 0x61, 0x73, 0x68, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x5f, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x18, - 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x4f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, - 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x47, 0x6f, 0x54, 0x6f, 0x44, 0x61, 0x73, 0x68, - 0x62, 0x6f, 0x61, 0x72, 0x64, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, - 0x00, 0x52, 0x23, 0x75, 0x69, 0x4f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x6d, 0x70, - 0x6c, 0x65, 0x74, 0x65, 0x47, 0x6f, 0x54, 0x6f, 0x44, 0x61, 0x73, 0x68, 0x62, 0x6f, 0x61, 0x72, - 0x64, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x12, 0x82, 0x01, 0x0a, 0x23, 0x75, 0x69, 0x5f, 0x6f, 0x6e, - 0x62, 0x6f, 0x61, 0x72, 0x64, 0x5f, 0x61, 0x64, 0x64, 0x5f, 0x66, 0x69, 0x72, 0x73, 0x74, 0x5f, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x18, 0x0a, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x4f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x41, - 0x64, 0x64, 0x46, 0x69, 0x72, 0x73, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, - 0x6c, 0x69, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1e, 0x75, 0x69, 0x4f, - 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x41, 0x64, 0x64, 0x46, 0x69, 0x72, 0x73, 0x74, 0x52, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x12, 0x92, 0x01, 0x0a, 0x29, - 0x75, 0x69, 0x5f, 0x6f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x5f, 0x61, 0x64, 0x64, 0x5f, 0x66, - 0x69, 0x72, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6c, 0x61, - 0x74, 0x65, 0x72, 0x5f, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x38, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x29, 0x0a, 0x10, 0x74, 0x65, 0x6c, 0x65, 0x70, + 0x6f, 0x72, 0x74, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x5f, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0f, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x12, 0x3f, 0x0a, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x6c, 0x6f, 0x67, 0x69, 0x6e, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x4c, 0x6f, 0x67, 0x69, + 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x09, 0x75, 0x73, 0x65, 0x72, 0x4c, 0x6f, + 0x67, 0x69, 0x6e, 0x12, 0x3f, 0x0a, 0x0a, 0x73, 0x73, 0x6f, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, 0x53, 0x4f, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x09, 0x73, 0x73, 0x6f, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x12, 0x4e, 0x0a, 0x0f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, + 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x52, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x12, 0x48, 0x0a, 0x0d, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, + 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x72, + 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, 0x65, 0x73, + 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, + 0x52, 0x0c, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x4c, + 0x0a, 0x0f, 0x75, 0x69, 0x5f, 0x62, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x5f, 0x63, 0x6c, 0x69, 0x63, + 0x6b, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x42, 0x61, 0x6e, 0x6e, 0x65, + 0x72, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0d, 0x75, + 0x69, 0x42, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x12, 0x92, 0x01, 0x0a, + 0x29, 0x75, 0x69, 0x5f, 0x6f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x5f, 0x63, 0x6f, 0x6d, 0x70, + 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x67, 0x6f, 0x5f, 0x74, 0x6f, 0x5f, 0x64, 0x61, 0x73, 0x68, 0x62, + 0x6f, 0x61, 0x72, 0x64, 0x5f, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x38, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x2e, 0x55, 0x49, 0x4f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x6d, 0x70, 0x6c, + 0x65, 0x74, 0x65, 0x47, 0x6f, 0x54, 0x6f, 0x44, 0x61, 0x73, 0x68, 0x62, 0x6f, 0x61, 0x72, 0x64, + 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x23, 0x75, 0x69, + 0x4f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x47, + 0x6f, 0x54, 0x6f, 0x44, 0x61, 0x73, 0x68, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x43, 0x6c, 0x69, 0x63, + 0x6b, 0x12, 0x82, 0x01, 0x0a, 0x23, 0x75, 0x69, 0x5f, 0x6f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, + 0x5f, 0x61, 0x64, 0x64, 0x5f, 0x66, 0x69, 0x72, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x5f, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x33, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x4f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x41, 0x64, 0x64, 0x46, 0x69, 0x72, - 0x73, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x61, 0x74, 0x65, 0x72, 0x43, - 0x6c, 0x69, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x23, 0x75, 0x69, 0x4f, - 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x41, 0x64, 0x64, 0x46, 0x69, 0x72, 0x73, 0x74, 0x52, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x61, 0x74, 0x65, 0x72, 0x43, 0x6c, 0x69, 0x63, 0x6b, - 0x12, 0x7b, 0x0a, 0x20, 0x75, 0x69, 0x5f, 0x6f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x5f, 0x73, - 0x65, 0x74, 0x5f, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x73, 0x75, - 0x62, 0x6d, 0x69, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x72, 0x65, + 0x73, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1e, 0x75, 0x69, 0x4f, 0x6e, 0x62, 0x6f, 0x61, 0x72, + 0x64, 0x41, 0x64, 0x64, 0x46, 0x69, 0x72, 0x73, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x12, 0x92, 0x01, 0x0a, 0x29, 0x75, 0x69, 0x5f, 0x6f, 0x6e, + 0x62, 0x6f, 0x61, 0x72, 0x64, 0x5f, 0x61, 0x64, 0x64, 0x5f, 0x66, 0x69, 0x72, 0x73, 0x74, 0x5f, + 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6c, 0x61, 0x74, 0x65, 0x72, 0x5f, 0x63, + 0x6c, 0x69, 0x63, 0x6b, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x4f, 0x6e, + 0x62, 0x6f, 0x61, 0x72, 0x64, 0x41, 0x64, 0x64, 0x46, 0x69, 0x72, 0x73, 0x74, 0x52, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x61, 0x74, 0x65, 0x72, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x23, 0x75, 0x69, 0x4f, 0x6e, 0x62, 0x6f, 0x61, 0x72, + 0x64, 0x41, 0x64, 0x64, 0x46, 0x69, 0x72, 0x73, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x4c, 0x61, 0x74, 0x65, 0x72, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x12, 0x7b, 0x0a, 0x20, 0x75, + 0x69, 0x5f, 0x6f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x63, 0x72, + 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x18, + 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x4f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, + 0x53, 0x65, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x75, 0x62, + 0x6d, 0x69, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1c, 0x75, 0x69, 0x4f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x53, 0x65, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, - 0x61, 0x6c, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, - 0x1c, 0x75, 0x69, 0x4f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x53, 0x65, 0x74, 0x43, 0x72, 0x65, - 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x12, 0x87, 0x01, - 0x0a, 0x24, 0x75, 0x69, 0x5f, 0x6f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x5f, 0x72, 0x65, 0x67, - 0x69, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x63, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x5f, - 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, - 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, - 0x4f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x43, - 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x20, 0x75, 0x69, 0x4f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, - 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x43, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, - 0x65, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x12, 0x7b, 0x0a, 0x20, 0x75, 0x69, 0x5f, 0x72, 0x65, - 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x73, 0x5f, 0x63, 0x6f, 0x6e, - 0x74, 0x69, 0x6e, 0x75, 0x65, 0x5f, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x18, 0x0e, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x2e, 0x55, 0x49, 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x43, 0x6f, 0x64, - 0x65, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x65, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1c, 0x75, 0x69, 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65, - 0x72, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x65, 0x43, - 0x6c, 0x69, 0x63, 0x6b, 0x12, 0x6f, 0x0a, 0x1c, 0x75, 0x69, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x76, - 0x65, 0x72, 0x79, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x73, 0x5f, 0x63, 0x6f, 0x70, 0x79, 0x5f, 0x63, - 0x6c, 0x69, 0x63, 0x6b, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x72, 0x65, - 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x52, 0x65, - 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x73, 0x43, 0x6f, 0x70, 0x79, 0x43, - 0x6c, 0x69, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x18, 0x75, 0x69, 0x52, - 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x73, 0x43, 0x6f, 0x70, 0x79, - 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x12, 0x72, 0x0a, 0x1d, 0x75, 0x69, 0x5f, 0x72, 0x65, 0x63, 0x6f, - 0x76, 0x65, 0x72, 0x79, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x73, 0x5f, 0x70, 0x72, 0x69, 0x6e, 0x74, - 0x5f, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, - 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, - 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x73, 0x50, 0x72, 0x69, - 0x6e, 0x74, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x19, - 0x75, 0x69, 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x73, 0x50, - 0x72, 0x69, 0x6e, 0x74, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x12, 0x63, 0x0a, 0x19, 0x75, 0x69, 0x5f, - 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, - 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x70, + 0x61, 0x6c, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x12, 0x87, 0x01, 0x0a, 0x24, 0x75, 0x69, 0x5f, + 0x6f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x5f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, + 0x5f, 0x63, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x5f, 0x73, 0x75, 0x62, 0x6d, 0x69, + 0x74, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x4f, 0x6e, 0x62, 0x6f, 0x61, + 0x72, 0x64, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x43, 0x68, 0x61, 0x6c, 0x6c, 0x65, + 0x6e, 0x67, 0x65, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, + 0x52, 0x20, 0x75, 0x69, 0x4f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x52, 0x65, 0x67, 0x69, 0x73, + 0x74, 0x65, 0x72, 0x43, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x53, 0x75, 0x62, 0x6d, + 0x69, 0x74, 0x12, 0x7b, 0x0a, 0x20, 0x75, 0x69, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, + 0x79, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x73, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x65, + 0x5f, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, - 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x53, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x16, 0x75, 0x69, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, - 0x65, 0x72, 0x53, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x82, - 0x01, 0x0a, 0x24, 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x72, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, - 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, - 0x49, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, - 0x00, 0x52, 0x20, 0x75, 0x69, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x52, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x12, 0x6f, 0x0a, 0x1d, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x63, 0x65, 0x72, 0x74, - 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x73, 0x73, 0x75, 0x65, 0x64, 0x5f, 0x65, - 0x76, 0x65, 0x6e, 0x74, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x72, 0x65, - 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x73, 0x65, 0x72, - 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x49, 0x73, 0x73, 0x75, 0x65, - 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1a, 0x75, 0x73, 0x65, 0x72, 0x43, 0x65, - 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x49, 0x73, 0x73, 0x75, 0x65, 0x64, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x12, 0x4d, 0x0a, 0x10, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, - 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x76, 0x32, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, - 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, - 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x45, 0x76, 0x65, 0x6e, - 0x74, 0x48, 0x00, 0x52, 0x0e, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x72, - 0x74, 0x56, 0x32, 0x12, 0x76, 0x0a, 0x20, 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, - 0x65, 0x72, 0x5f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, - 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, - 0x49, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x53, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1c, 0x75, - 0x69, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x53, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x7f, 0x0a, 0x23, 0x75, - 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x62, - 0x61, 0x73, 0x65, 0x5f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x65, 0x76, 0x65, - 0x6e, 0x74, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, + 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x73, 0x43, 0x6f, 0x6e, + 0x74, 0x69, 0x6e, 0x75, 0x65, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, + 0x00, 0x52, 0x1c, 0x75, 0x69, 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x43, 0x6f, 0x64, + 0x65, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x65, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x12, + 0x6f, 0x0a, 0x1c, 0x75, 0x69, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x5f, 0x63, + 0x6f, 0x64, 0x65, 0x73, 0x5f, 0x63, 0x6f, 0x70, 0x79, 0x5f, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x18, + 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, + 0x79, 0x43, 0x6f, 0x64, 0x65, 0x73, 0x43, 0x6f, 0x70, 0x79, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x18, 0x75, 0x69, 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65, + 0x72, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x73, 0x43, 0x6f, 0x70, 0x79, 0x43, 0x6c, 0x69, 0x63, 0x6b, + 0x12, 0x72, 0x0a, 0x1d, 0x75, 0x69, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x5f, + 0x63, 0x6f, 0x64, 0x65, 0x73, 0x5f, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x5f, 0x63, 0x6c, 0x69, 0x63, + 0x6b, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x52, 0x65, 0x63, 0x6f, 0x76, + 0x65, 0x72, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x73, 0x50, 0x72, 0x69, 0x6e, 0x74, 0x43, 0x6c, 0x69, + 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x19, 0x75, 0x69, 0x52, 0x65, 0x63, + 0x6f, 0x76, 0x65, 0x72, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x73, 0x50, 0x72, 0x69, 0x6e, 0x74, 0x43, + 0x6c, 0x69, 0x63, 0x6b, 0x12, 0x63, 0x0a, 0x19, 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, + 0x76, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x76, 0x65, 0x6e, + 0x74, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x44, 0x69, 0x73, 0x63, 0x6f, + 0x76, 0x65, 0x72, 0x53, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, + 0x00, 0x52, 0x16, 0x75, 0x69, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x53, 0x74, 0x61, + 0x72, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x82, 0x01, 0x0a, 0x24, 0x75, 0x69, + 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x65, 0x76, 0x65, + 0x6e, 0x74, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x44, 0x69, 0x73, 0x63, - 0x6f, 0x76, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, 0x67, 0x69, - 0x73, 0x74, 0x65, 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1f, 0x75, 0x69, 0x44, - 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, - 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x8f, 0x01, 0x0a, - 0x29, 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x64, 0x61, 0x74, - 0x61, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x5f, - 0x6d, 0x74, 0x6c, 0x73, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x34, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x2e, 0x55, 0x49, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, - 0x62, 0x61, 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x4d, 0x54, 0x4c, - 0x53, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x24, 0x75, 0x69, 0x44, 0x69, 0x73, 0x63, - 0x6f, 0x76, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x75, 0x72, 0x65, 0x4d, 0x74, 0x6c, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0xb8, - 0x01, 0x0a, 0x38, 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x64, - 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x69, - 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x5f, 0x74, 0x6f, 0x6f, 0x6c, 0x73, 0x5f, 0x69, 0x6e, - 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x18, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x2e, 0x55, 0x49, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x44, 0x65, 0x73, - 0x6b, 0x74, 0x6f, 0x70, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, - 0x6f, 0x72, 0x79, 0x54, 0x6f, 0x6f, 0x6c, 0x73, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x31, 0x75, 0x69, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, - 0x65, 0x72, 0x44, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x44, - 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x54, 0x6f, 0x6f, 0x6c, 0x73, 0x49, 0x6e, 0x73, - 0x74, 0x61, 0x6c, 0x6c, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0xae, 0x01, 0x0a, 0x34, 0x75, 0x69, + 0x6f, 0x76, 0x65, 0x72, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x65, 0x6c, 0x65, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x20, 0x75, 0x69, + 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x6f, + 0x0a, 0x1d, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, + 0x74, 0x65, 0x5f, 0x69, 0x73, 0x73, 0x75, 0x65, 0x64, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, + 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x43, 0x65, 0x72, 0x74, 0x69, + 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x49, 0x73, 0x73, 0x75, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x48, 0x00, 0x52, 0x1a, 0x75, 0x73, 0x65, 0x72, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, + 0x63, 0x61, 0x74, 0x65, 0x49, 0x73, 0x73, 0x75, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, + 0x4d, 0x0a, 0x10, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, + 0x5f, 0x76, 0x32, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x72, 0x65, 0x68, + 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, 0x65, 0x73, 0x73, 0x69, + 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0e, + 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x56, 0x32, 0x12, 0x76, + 0x0a, 0x20, 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x64, 0x65, + 0x70, 0x6c, 0x6f, 0x79, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x65, 0x76, 0x65, + 0x6e, 0x74, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, + 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x44, 0x69, 0x73, 0x63, + 0x6f, 0x76, 0x65, 0x72, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1c, 0x75, 0x69, 0x44, 0x69, 0x73, 0x63, + 0x6f, 0x76, 0x65, 0x72, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x7f, 0x0a, 0x23, 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, + 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x72, + 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x16, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x44, + 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1f, 0x75, 0x69, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, + 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, + 0x65, 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x8f, 0x01, 0x0a, 0x29, 0x75, 0x69, 0x5f, 0x64, + 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, + 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x5f, 0x6d, 0x74, 0x6c, 0x73, 0x5f, + 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x70, 0x72, + 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x44, + 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x4d, 0x54, 0x4c, 0x53, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x48, 0x00, 0x52, 0x24, 0x75, 0x69, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x44, + 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, + 0x4d, 0x74, 0x6c, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0xb8, 0x01, 0x0a, 0x38, 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x64, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, - 0x72, 0x79, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x5f, 0x65, 0x76, 0x65, - 0x6e, 0x74, 0x18, 0x19, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, - 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x44, 0x69, 0x73, 0x63, - 0x6f, 0x76, 0x65, 0x72, 0x44, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x41, 0x63, 0x74, 0x69, 0x76, - 0x65, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x75, 0x72, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x2e, 0x75, 0x69, 0x44, 0x69, - 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x44, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x41, 0x63, 0x74, - 0x69, 0x76, 0x65, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x75, 0x72, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x95, 0x01, 0x0a, 0x2b, 0x75, - 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x61, 0x75, 0x74, 0x6f, 0x5f, - 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x73, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x36, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x2e, 0x55, 0x49, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x41, 0x75, 0x74, 0x6f, - 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x26, 0x75, 0x69, 0x44, 0x69, - 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x41, 0x75, 0x74, 0x6f, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, - 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x12, 0x9f, 0x01, 0x0a, 0x2f, 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, - 0x65, 0x72, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x75, 0x72, 0x65, 0x5f, 0x69, 0x61, 0x6d, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, - 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x70, + 0x72, 0x79, 0x5f, 0x74, 0x6f, 0x6f, 0x6c, 0x73, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, + 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x18, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, - 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x49, 0x41, 0x4d, 0x50, 0x6f, 0x6c, 0x69, - 0x63, 0x79, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x29, 0x75, 0x69, 0x44, 0x69, 0x73, - 0x63, 0x6f, 0x76, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x49, 0x61, 0x6d, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x12, 0x88, 0x01, 0x0a, 0x26, 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, - 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x70, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x73, 0x5f, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, - 0x1c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, + 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x44, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x41, + 0x63, 0x74, 0x69, 0x76, 0x65, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x54, 0x6f, + 0x6f, 0x6c, 0x73, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, + 0x00, 0x52, 0x31, 0x75, 0x69, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x44, 0x65, 0x73, + 0x6b, 0x74, 0x6f, 0x70, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, + 0x6f, 0x72, 0x79, 0x54, 0x6f, 0x6f, 0x6c, 0x73, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x12, 0xae, 0x01, 0x0a, 0x34, 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, + 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x64, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x5f, 0x61, 0x63, 0x74, + 0x69, 0x76, 0x65, 0x5f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x5f, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x19, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x44, + 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x44, 0x69, 0x72, 0x65, + 0x63, 0x74, 0x6f, 0x72, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x2e, 0x75, 0x69, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, + 0x72, 0x44, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x44, 0x69, + 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x95, 0x01, 0x0a, 0x2b, 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, + 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, + 0x76, 0x65, 0x72, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x5f, + 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x72, + 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x44, + 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x41, 0x75, 0x74, 0x6f, 0x44, 0x69, 0x73, 0x63, 0x6f, + 0x76, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x26, 0x75, 0x69, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, + 0x72, 0x41, 0x75, 0x74, 0x6f, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x65, 0x64, 0x52, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x9f, 0x01, + 0x0a, 0x2f, 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x64, 0x61, + 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, + 0x5f, 0x69, 0x61, 0x6d, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x5f, 0x65, 0x76, 0x65, 0x6e, + 0x74, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x44, 0x69, 0x73, 0x63, 0x6f, + 0x76, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x75, 0x72, 0x65, 0x49, 0x41, 0x4d, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x48, 0x00, 0x52, 0x29, 0x75, 0x69, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, + 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, + 0x65, 0x49, 0x61, 0x6d, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, + 0x88, 0x01, 0x0a, 0x26, 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, + 0x70, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x73, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x75, 0x72, 0x65, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x32, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x2e, 0x55, 0x49, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x50, 0x72, 0x69, 0x6e, + 0x63, 0x69, 0x70, 0x61, 0x6c, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x22, 0x75, 0x69, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, + 0x65, 0x72, 0x50, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x73, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x75, 0x72, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x79, 0x0a, 0x21, 0x75, 0x69, + 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x63, + 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, + 0x1d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, - 0x72, 0x50, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x75, 0x72, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x22, 0x75, 0x69, 0x44, - 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x50, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, - 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, - 0x79, 0x0a, 0x21, 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x74, - 0x65, 0x73, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x65, - 0x76, 0x65, 0x6e, 0x74, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x72, 0x65, + 0x72, 0x54, 0x65, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1d, 0x75, 0x69, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, + 0x65, 0x72, 0x54, 0x65, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x69, 0x0a, 0x1b, 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, + 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x5f, 0x65, + 0x76, 0x65, 0x6e, 0x74, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x44, 0x69, - 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x54, 0x65, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1d, 0x75, 0x69, 0x44, - 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x54, 0x65, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x69, 0x0a, 0x1b, 0x75, 0x69, - 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, - 0x74, 0x65, 0x64, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x28, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x2e, 0x55, 0x49, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x43, 0x6f, 0x6d, 0x70, 0x6c, - 0x65, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x18, 0x75, 0x69, 0x44, - 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x42, 0x0a, 0x0b, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x63, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x72, 0x65, - 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x52, 0x6f, 0x6c, 0x65, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0a, 0x72, - 0x6f, 0x6c, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x63, 0x0a, 0x18, 0x75, 0x69, 0x5f, + 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x18, 0x75, 0x69, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, + 0x65, 0x72, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x12, 0x42, 0x0a, 0x0b, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x18, + 0x1f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0a, 0x72, 0x6f, 0x6c, 0x65, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x12, 0x63, 0x0a, 0x18, 0x75, 0x69, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x5f, 0x6e, 0x65, 0x77, 0x5f, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x63, 0x6c, 0x69, 0x63, 0x6b, + 0x18, 0x20, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x4e, 0x65, 0x77, 0x52, 0x6f, 0x6c, 0x65, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x48, 0x00, 0x52, 0x14, 0x75, 0x69, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x65, 0x77, + 0x52, 0x6f, 0x6c, 0x65, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x12, 0x70, 0x0a, 0x1d, 0x75, 0x69, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x6e, 0x65, 0x77, 0x5f, 0x72, 0x6f, 0x6c, 0x65, 0x5f, - 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x18, 0x20, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x72, - 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x65, 0x77, 0x52, 0x6f, 0x6c, 0x65, 0x43, 0x6c, 0x69, 0x63, - 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x14, 0x75, 0x69, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x4e, 0x65, 0x77, 0x52, 0x6f, 0x6c, 0x65, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x12, 0x70, - 0x0a, 0x1d, 0x75, 0x69, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x6e, 0x65, 0x77, 0x5f, - 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x73, 0x61, 0x76, 0x65, 0x5f, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x18, - 0x21, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, - 0x65, 0x77, 0x52, 0x6f, 0x6c, 0x65, 0x53, 0x61, 0x76, 0x65, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x18, 0x75, 0x69, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x4e, 0x65, 0x77, 0x52, 0x6f, 0x6c, 0x65, 0x53, 0x61, 0x76, 0x65, 0x43, 0x6c, 0x69, 0x63, 0x6b, - 0x12, 0x76, 0x0a, 0x1f, 0x75, 0x69, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x6e, 0x65, - 0x77, 0x5f, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x5f, 0x63, 0x6c, - 0x69, 0x63, 0x6b, 0x18, 0x22, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x72, 0x65, 0x68, + 0x73, 0x61, 0x76, 0x65, 0x5f, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x18, 0x21, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x2d, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x2e, 0x55, 0x49, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x65, 0x77, 0x52, 0x6f, 0x6c, + 0x65, 0x53, 0x61, 0x76, 0x65, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, + 0x00, 0x52, 0x18, 0x75, 0x69, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x65, 0x77, 0x52, 0x6f, + 0x6c, 0x65, 0x53, 0x61, 0x76, 0x65, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x12, 0x76, 0x0a, 0x1f, 0x75, + 0x69, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x6e, 0x65, 0x77, 0x5f, 0x72, 0x6f, 0x6c, + 0x65, 0x5f, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x5f, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x18, 0x22, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x65, + 0x77, 0x52, 0x6f, 0x6c, 0x65, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x43, 0x6c, 0x69, 0x63, 0x6b, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1a, 0x75, 0x69, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x4e, 0x65, 0x77, 0x52, 0x6f, 0x6c, 0x65, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x43, 0x6c, + 0x69, 0x63, 0x6b, 0x12, 0x98, 0x01, 0x0a, 0x2b, 0x75, 0x69, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x5f, 0x6e, 0x65, 0x77, 0x5f, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x5f, + 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6c, + 0x69, 0x63, 0x6b, 0x18, 0x23, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x4e, 0x65, 0x77, 0x52, 0x6f, 0x6c, 0x65, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, - 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1a, 0x75, 0x69, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x65, 0x77, 0x52, 0x6f, 0x6c, 0x65, 0x43, 0x61, 0x6e, - 0x63, 0x65, 0x6c, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x12, 0x98, 0x01, 0x0a, 0x2b, 0x75, 0x69, 0x5f, - 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x6e, 0x65, 0x77, 0x5f, 0x72, 0x6f, 0x6c, 0x65, 0x5f, - 0x76, 0x69, 0x65, 0x77, 0x5f, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x5f, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x18, 0x23, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, - 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, - 0x55, 0x49, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x65, 0x77, 0x52, 0x6f, 0x6c, 0x65, 0x56, - 0x69, 0x65, 0x77, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x25, 0x75, 0x69, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x65, 0x77, 0x52, 0x6f, 0x6c, 0x65, 0x56, 0x69, 0x65, - 0x77, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6c, - 0x69, 0x63, 0x6b, 0x12, 0x45, 0x0a, 0x0c, 0x6b, 0x75, 0x62, 0x65, 0x5f, 0x72, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x18, 0x24, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, 0x72, 0x65, 0x68, - 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x4b, 0x75, 0x62, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0b, 0x6b, - 0x75, 0x62, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2f, 0x0a, 0x04, 0x73, 0x66, - 0x74, 0x70, 0x18, 0x25, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, - 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, 0x46, 0x54, 0x50, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x04, 0x73, 0x66, 0x74, 0x70, 0x12, 0x56, 0x0a, 0x14, 0x61, - 0x67, 0x65, 0x6e, 0x74, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x65, 0x76, - 0x65, 0x6e, 0x74, 0x18, 0x26, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x72, 0x65, 0x68, - 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, - 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, - 0x12, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x12, 0x57, 0x0a, 0x12, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, - 0x68, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x18, 0x27, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x26, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x48, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, - 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x11, 0x72, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x48, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x12, 0x9c, 0x01, 0x0a, - 0x2e, 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x69, 0x6e, 0x74, - 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x61, 0x77, 0x73, 0x5f, 0x6f, 0x69, 0x64, - 0x63, 0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, - 0x28, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, - 0x72, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x57, 0x53, 0x4f, - 0x49, 0x44, 0x43, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, - 0x00, 0x52, 0x28, 0x75, 0x69, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x49, 0x6e, 0x74, - 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x77, 0x73, 0x4f, 0x69, 0x64, 0x63, 0x43, - 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x83, 0x01, 0x0a, 0x25, - 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x64, 0x61, 0x74, 0x61, - 0x62, 0x61, 0x73, 0x65, 0x5f, 0x72, 0x64, 0x73, 0x5f, 0x65, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x5f, - 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x29, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, 0x72, - 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x44, - 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, - 0x44, 0x53, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, - 0x20, 0x75, 0x69, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x62, - 0x61, 0x73, 0x65, 0x52, 0x64, 0x73, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x45, 0x76, 0x65, 0x6e, - 0x74, 0x12, 0x6b, 0x0a, 0x1d, 0x75, 0x69, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x5f, 0x74, 0x6f, 0x5f, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x5f, 0x65, 0x76, 0x65, - 0x6e, 0x74, 0x18, 0x2a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, - 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x43, 0x61, 0x6c, 0x6c, - 0x54, 0x6f, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x48, 0x00, 0x52, 0x18, 0x75, 0x69, 0x43, 0x61, 0x6c, 0x6c, 0x54, 0x6f, 0x41, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x54, - 0x0a, 0x11, 0x61, 0x73, 0x73, 0x69, 0x73, 0x74, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, - 0x69, 0x6f, 0x6e, 0x18, 0x2b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x72, 0x65, 0x68, - 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x73, 0x73, 0x69, 0x73, - 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x48, 0x00, 0x52, 0x10, 0x61, 0x73, 0x73, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x79, 0x0a, 0x21, 0x75, 0x69, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x67, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x65, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x5f, 0x73, 0x74, - 0x61, 0x72, 0x74, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x2c, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x2d, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x2e, 0x55, 0x49, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, - 0x72, 0x6f, 0x6c, 0x6c, 0x53, 0x74, 0x61, 0x72, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, - 0x52, 0x1d, 0x75, 0x69, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, - 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x53, 0x74, 0x61, 0x72, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, - 0x82, 0x01, 0x0a, 0x24, 0x75, 0x69, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x5f, 0x65, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, - 0x74, 0x65, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x2d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, + 0x61, 0x74, 0x65, 0x4e, 0x65, 0x77, 0x52, 0x6f, 0x6c, 0x65, 0x56, 0x69, 0x65, 0x77, 0x44, 0x6f, + 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x69, 0x63, 0x6b, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x25, 0x75, 0x69, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x4e, 0x65, 0x77, 0x52, 0x6f, 0x6c, 0x65, 0x56, 0x69, 0x65, 0x77, 0x44, 0x6f, 0x63, 0x75, + 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x12, 0x45, + 0x0a, 0x0c, 0x6b, 0x75, 0x62, 0x65, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x24, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x4b, 0x75, 0x62, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0b, 0x6b, 0x75, 0x62, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2f, 0x0a, 0x04, 0x73, 0x66, 0x74, 0x70, 0x18, 0x25, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, 0x46, 0x54, 0x50, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, + 0x52, 0x04, 0x73, 0x66, 0x74, 0x70, 0x12, 0x56, 0x0a, 0x14, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x5f, + 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x26, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x12, 0x61, 0x67, 0x65, 0x6e, + 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x57, + 0x0a, 0x12, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x68, 0x65, 0x61, 0x72, 0x74, + 0x62, 0x65, 0x61, 0x74, 0x18, 0x27, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x70, 0x72, 0x65, + 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x52, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x48, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x48, 0x00, 0x52, 0x11, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x48, 0x65, + 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x12, 0x9c, 0x01, 0x0a, 0x2e, 0x75, 0x69, 0x5f, 0x64, + 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x5f, 0x61, 0x77, 0x73, 0x5f, 0x6f, 0x69, 0x64, 0x63, 0x5f, 0x63, 0x6f, 0x6e, + 0x6e, 0x65, 0x63, 0x74, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x28, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x38, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x2e, 0x55, 0x49, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x49, 0x6e, 0x74, 0x65, + 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x57, 0x53, 0x4f, 0x49, 0x44, 0x43, 0x43, 0x6f, + 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x28, 0x75, 0x69, + 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x41, 0x77, 0x73, 0x4f, 0x69, 0x64, 0x63, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, + 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x83, 0x01, 0x0a, 0x25, 0x75, 0x69, 0x5f, 0x64, 0x69, + 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x5f, + 0x72, 0x64, 0x73, 0x5f, 0x65, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, + 0x18, 0x29, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, + 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x44, 0x53, 0x45, 0x6e, 0x72, + 0x6f, 0x6c, 0x6c, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x20, 0x75, 0x69, 0x44, 0x69, + 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x64, + 0x73, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x6b, 0x0a, 0x1d, + 0x75, 0x69, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x5f, 0x74, 0x6f, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x5f, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x2a, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x43, 0x61, 0x6c, 0x6c, 0x54, 0x6f, 0x41, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, + 0x18, 0x75, 0x69, 0x43, 0x61, 0x6c, 0x6c, 0x54, 0x6f, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, + 0x6c, 0x69, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x54, 0x0a, 0x11, 0x61, 0x73, 0x73, + 0x69, 0x73, 0x74, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x2b, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x73, 0x73, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x70, + 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x10, 0x61, + 0x73, 0x73, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x79, 0x0a, 0x21, 0x75, 0x69, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x5f, 0x65, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x65, + 0x76, 0x65, 0x6e, 0x74, 0x18, 0x2c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x72, 0x65, + 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x49, 0x6e, + 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x53, + 0x74, 0x61, 0x72, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1d, 0x75, 0x69, 0x49, + 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, + 0x53, 0x74, 0x61, 0x72, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x82, 0x01, 0x0a, 0x24, 0x75, + 0x69, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x65, 0x6e, + 0x72, 0x6f, 0x6c, 0x6c, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x65, 0x76, + 0x65, 0x6e, 0x74, 0x18, 0x2d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, 0x72, 0x65, 0x68, + 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x49, 0x6e, 0x74, + 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x43, 0x6f, + 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x20, 0x75, + 0x69, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x72, 0x6f, + 0x6c, 0x6c, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, + 0x53, 0x0a, 0x13, 0x65, 0x64, 0x69, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x2e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, + 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x45, 0x64, + 0x69, 0x74, 0x6f, 0x72, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, + 0x00, 0x52, 0x11, 0x65, 0x64, 0x69, 0x74, 0x6f, 0x72, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x12, 0x3f, 0x0a, 0x0a, 0x62, 0x6f, 0x74, 0x5f, 0x63, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x18, 0x2f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, + 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x42, 0x6f, 0x74, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x09, 0x62, 0x6f, 0x74, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x7a, 0x0a, 0x1f, 0x75, 0x69, 0x5f, 0x6f, 0x6e, 0x62, 0x6f, + 0x61, 0x72, 0x64, 0x5f, 0x71, 0x75, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x6e, 0x61, 0x69, 0x72, + 0x65, 0x5f, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x18, 0x30, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, - 0x55, 0x49, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x72, - 0x6f, 0x6c, 0x6c, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x48, 0x00, 0x52, 0x20, 0x75, 0x69, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x12, 0x53, 0x0a, 0x13, 0x65, 0x64, 0x69, 0x74, 0x6f, 0x72, 0x5f, 0x63, - 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x2e, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x2e, 0x45, 0x64, 0x69, 0x74, 0x6f, 0x72, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x11, 0x65, 0x64, 0x69, 0x74, 0x6f, 0x72, 0x43, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x3f, 0x0a, 0x0a, 0x62, 0x6f, 0x74, - 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x18, 0x2f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, - 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x42, - 0x6f, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, - 0x09, 0x62, 0x6f, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x7a, 0x0a, 0x1f, 0x75, 0x69, - 0x5f, 0x6f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x5f, 0x71, 0x75, 0x65, 0x73, 0x74, 0x69, 0x6f, - 0x6e, 0x6e, 0x61, 0x69, 0x72, 0x65, 0x5f, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x18, 0x30, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x4f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x51, 0x75, + 0x55, 0x49, 0x4f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x51, 0x75, 0x65, 0x73, 0x74, 0x69, 0x6f, + 0x6e, 0x6e, 0x61, 0x69, 0x72, 0x65, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x48, 0x00, 0x52, 0x1c, 0x75, 0x69, 0x4f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x51, 0x75, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x6e, 0x61, 0x69, 0x72, 0x65, 0x53, 0x75, 0x62, 0x6d, 0x69, - 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1c, 0x75, 0x69, 0x4f, 0x6e, 0x62, 0x6f, - 0x61, 0x72, 0x64, 0x51, 0x75, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x6e, 0x61, 0x69, 0x72, 0x65, - 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x12, 0x39, 0x0a, 0x08, 0x62, 0x6f, 0x74, 0x5f, 0x6a, 0x6f, - 0x69, 0x6e, 0x18, 0x31, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, - 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x42, 0x6f, 0x74, 0x4a, 0x6f, 0x69, - 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x07, 0x62, 0x6f, 0x74, 0x4a, 0x6f, 0x69, - 0x6e, 0x12, 0x51, 0x0a, 0x10, 0x61, 0x73, 0x73, 0x69, 0x73, 0x74, 0x5f, 0x65, 0x78, 0x65, 0x63, - 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x32, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x72, - 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x73, 0x73, - 0x69, 0x73, 0x74, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, - 0x74, 0x48, 0x00, 0x52, 0x0f, 0x61, 0x73, 0x73, 0x69, 0x73, 0x74, 0x45, 0x78, 0x65, 0x63, 0x75, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x64, 0x0a, 0x17, 0x61, 0x73, 0x73, 0x69, 0x73, 0x74, 0x5f, 0x6e, - 0x65, 0x77, 0x5f, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0x33, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x73, 0x73, 0x69, 0x73, 0x74, 0x4e, 0x65, 0x77, - 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, - 0x74, 0x48, 0x00, 0x52, 0x15, 0x61, 0x73, 0x73, 0x69, 0x73, 0x74, 0x4e, 0x65, 0x77, 0x43, 0x6f, - 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x65, 0x0a, 0x19, 0x64, 0x65, - 0x76, 0x69, 0x63, 0x65, 0x5f, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, - 0x65, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x34, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, - 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x44, - 0x65, 0x76, 0x69, 0x63, 0x65, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, - 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x17, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, - 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, - 0x74, 0x12, 0x6e, 0x0a, 0x1c, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x72, 0x65, 0x63, - 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x65, 0x76, 0x65, 0x6e, - 0x74, 0x18, 0x35, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, - 0x52, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1a, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x65, - 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, - 0x74, 0x12, 0x5e, 0x0a, 0x15, 0x61, 0x73, 0x73, 0x69, 0x73, 0x74, 0x5f, 0x61, 0x63, 0x63, 0x65, - 0x73, 0x73, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x36, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x28, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x2e, 0x41, 0x73, 0x73, 0x69, 0x73, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x13, 0x61, 0x73, - 0x73, 0x69, 0x73, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x48, 0x0a, 0x0d, 0x61, 0x73, 0x73, 0x69, 0x73, 0x74, 0x5f, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x18, 0x37, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, - 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x73, 0x73, 0x69, 0x73, 0x74, - 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0c, 0x61, - 0x73, 0x73, 0x69, 0x73, 0x74, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x53, 0x0a, 0x13, 0x64, - 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x65, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x5f, 0x65, 0x76, 0x65, - 0x6e, 0x74, 0x18, 0x38, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, + 0x74, 0x12, 0x39, 0x0a, 0x08, 0x62, 0x6f, 0x74, 0x5f, 0x6a, 0x6f, 0x69, 0x6e, 0x18, 0x31, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x42, 0x6f, 0x74, 0x4a, 0x6f, 0x69, 0x6e, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x48, 0x00, 0x52, 0x07, 0x62, 0x6f, 0x74, 0x4a, 0x6f, 0x69, 0x6e, 0x12, 0x51, 0x0a, 0x10, + 0x61, 0x73, 0x73, 0x69, 0x73, 0x74, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, + 0x18, 0x32, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x73, 0x73, 0x69, 0x73, 0x74, 0x45, 0x78, + 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0f, + 0x61, 0x73, 0x73, 0x69, 0x73, 0x74, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x64, 0x0a, 0x17, 0x61, 0x73, 0x73, 0x69, 0x73, 0x74, 0x5f, 0x6e, 0x65, 0x77, 0x5f, 0x63, 0x6f, + 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x33, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x2a, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x2e, 0x41, 0x73, 0x73, 0x69, 0x73, 0x74, 0x4e, 0x65, 0x77, 0x43, 0x6f, 0x6e, 0x76, 0x65, + 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x15, + 0x61, 0x73, 0x73, 0x69, 0x73, 0x74, 0x4e, 0x65, 0x77, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x65, 0x0a, 0x19, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, + 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x5f, 0x65, 0x76, 0x65, + 0x6e, 0x74, 0x18, 0x34, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, - 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x11, 0x64, - 0x65, 0x76, 0x69, 0x63, 0x65, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x12, 0x53, 0x0a, 0x13, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x5f, 0x6c, 0x69, 0x6d, 0x69, - 0x74, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x39, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, - 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x4c, + 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x48, 0x00, 0x52, 0x17, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x41, 0x75, 0x74, 0x68, 0x65, + 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x6e, 0x0a, 0x1c, + 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, + 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x35, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x2e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x6d, + 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, + 0x52, 0x1a, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, + 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x5e, 0x0a, 0x15, + 0x61, 0x73, 0x73, 0x69, 0x73, 0x74, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x72, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x36, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x72, + 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x73, 0x73, + 0x69, 0x73, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x13, 0x61, 0x73, 0x73, 0x69, 0x73, 0x74, 0x41, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x48, 0x0a, 0x0d, + 0x61, 0x73, 0x73, 0x69, 0x73, 0x74, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x37, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x73, 0x73, 0x69, 0x73, 0x74, 0x41, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0c, 0x61, 0x73, 0x73, 0x69, 0x73, 0x74, + 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x53, 0x0a, 0x13, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, + 0x5f, 0x65, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x38, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x45, 0x6e, 0x72, 0x6f, 0x6c, + 0x6c, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x11, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, + 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x53, 0x0a, 0x13, 0x6c, + 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x5f, 0x65, 0x76, 0x65, + 0x6e, 0x74, 0x18, 0x39, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, + 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, + 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x11, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x48, 0x00, 0x52, 0x11, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x55, 0x0a, 0x12, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, - 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x18, 0x3a, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x10, 0x61, 0x63, 0x63, 0x65, - 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x55, 0x0a, 0x12, - 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x75, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x18, 0x3b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, + 0x12, 0x55, 0x0a, 0x12, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, + 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x18, 0x3a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, + 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x63, + 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x10, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, + 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x55, 0x0a, 0x12, 0x61, 0x63, 0x63, 0x65, 0x73, + 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x18, 0x3b, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x10, 0x61, 0x63, + 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x55, + 0x0a, 0x12, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x64, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x18, 0x3c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x72, 0x65, + 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x48, 0x00, 0x52, 0x10, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x68, 0x0a, 0x19, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, + 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x63, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x18, 0x3d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, - 0x4c, 0x69, 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, - 0x00, 0x52, 0x10, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x12, 0x55, 0x0a, 0x12, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, - 0x73, 0x74, 0x5f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x18, 0x3c, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x25, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x10, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, - 0x4c, 0x69, 0x73, 0x74, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x68, 0x0a, 0x19, 0x61, 0x63, - 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, - 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x18, 0x3d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, + 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x16, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, + 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, + 0x68, 0x0a, 0x19, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x6d, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x18, 0x3e, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, + 0x6d, 0x62, 0x65, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, + 0x00, 0x52, 0x16, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, + 0x62, 0x65, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x68, 0x0a, 0x19, 0x61, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, + 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x18, 0x3f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, + 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x63, + 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x16, 0x61, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x12, 0x69, 0x0a, 0x1a, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, + 0x73, 0x74, 0x5f, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x5f, 0x74, 0x6f, 0x5f, 0x75, 0x73, 0x65, + 0x72, 0x18, 0x40, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, + 0x69, 0x73, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x54, 0x6f, 0x55, 0x73, 0x65, 0x72, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x16, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, + 0x73, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x54, 0x6f, 0x55, 0x73, 0x65, 0x72, 0x12, 0x81, + 0x01, 0x0a, 0x22, 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x65, + 0x63, 0x32, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x73, 0x65, 0x6c, 0x65, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x41, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x72, + 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x44, + 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x45, 0x43, 0x32, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, + 0x63, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x48, 0x00, 0x52, 0x1e, 0x75, 0x69, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x45, 0x63, + 0x32, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x62, 0x0a, 0x17, 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, + 0x72, 0x5f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x5f, 0x65, 0x69, 0x63, 0x65, 0x18, 0x42, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x44, + 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x45, 0x49, 0x43, 0x45, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, + 0x52, 0x14, 0x75, 0x69, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x44, 0x65, 0x70, 0x6c, + 0x6f, 0x79, 0x45, 0x69, 0x63, 0x65, 0x12, 0x62, 0x0a, 0x17, 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, + 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x6e, 0x6f, 0x64, + 0x65, 0x18, 0x43, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x44, 0x69, 0x73, 0x63, 0x6f, + 0x76, 0x65, 0x72, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x48, 0x00, 0x52, 0x14, 0x75, 0x69, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x64, 0x0a, 0x17, 0x64, 0x65, + 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x5f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x5f, + 0x73, 0x68, 0x61, 0x72, 0x65, 0x18, 0x44, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x72, + 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x44, 0x65, 0x73, + 0x6b, 0x74, 0x6f, 0x70, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x53, 0x68, 0x61, + 0x72, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x15, 0x64, 0x65, 0x73, 0x6b, 0x74, + 0x6f, 0x70, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x53, 0x68, 0x61, 0x72, 0x65, + 0x12, 0x65, 0x0a, 0x1a, 0x64, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x5f, 0x63, 0x6c, 0x69, 0x70, + 0x62, 0x6f, 0x61, 0x72, 0x64, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x18, 0x45, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x44, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x43, 0x6c, 0x69, + 0x70, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x18, 0x64, + 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x43, 0x6c, 0x69, 0x70, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x54, + 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x12, 0x52, 0x0a, 0x11, 0x74, 0x61, 0x67, 0x5f, 0x65, + 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x46, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x2e, 0x54, 0x41, 0x47, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x51, 0x75, + 0x65, 0x72, 0x79, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0f, 0x74, 0x61, 0x67, 0x45, + 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x86, 0x01, 0x0a, 0x23, + 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x61, 0x75, 0x64, 0x69, 0x74, 0x5f, 0x73, + 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, + 0x61, 0x74, 0x65, 0x18, 0x47, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x72, 0x65, 0x68, + 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x41, 0x75, 0x64, 0x69, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x41, + 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x48, 0x00, 0x52, 0x20, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x41, 0x75, 0x64, 0x69, + 0x74, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, + 0x63, 0x61, 0x74, 0x65, 0x12, 0x6b, 0x0a, 0x1a, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, + 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x67, 0x65, 0x74, 0x5f, 0x72, 0x65, 0x73, 0x75, + 0x6c, 0x74, 0x18, 0x48, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, + 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, + 0x74, 0x79, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, + 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x17, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, + 0x74, 0x79, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, + 0x74, 0x12, 0x4c, 0x0a, 0x0f, 0x61, 0x75, 0x64, 0x69, 0x74, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, + 0x5f, 0x72, 0x75, 0x6e, 0x18, 0x49, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x72, 0x65, + 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x75, 0x64, 0x69, + 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x75, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, + 0x52, 0x0d, 0x61, 0x75, 0x64, 0x69, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x75, 0x6e, 0x12, + 0x59, 0x0a, 0x15, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x5f, 0x66, 0x65, 0x74, + 0x63, 0x68, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x4a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, + 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, + 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x46, 0x65, 0x74, 0x63, 0x68, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x13, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, + 0x46, 0x65, 0x74, 0x63, 0x68, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x68, 0x0a, 0x19, 0x61, 0x63, + 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, + 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x18, 0x4b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, - 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x43, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x16, 0x61, 0x63, - 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x43, 0x72, + 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x68, 0x0a, 0x19, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, - 0x69, 0x73, 0x74, 0x5f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x18, 0x3e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, + 0x69, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x5f, 0x64, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x18, 0x4c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, - 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x45, + 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x16, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, - 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x68, - 0x0a, 0x19, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x6d, 0x65, - 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x18, 0x3f, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, - 0x62, 0x65, 0x72, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, - 0x52, 0x16, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, - 0x65, 0x72, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x69, 0x0a, 0x1a, 0x61, 0x63, 0x63, 0x65, - 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x5f, 0x74, - 0x6f, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x18, 0x40, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, - 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x63, - 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x54, 0x6f, - 0x55, 0x73, 0x65, 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x16, 0x61, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x54, 0x6f, 0x55, - 0x73, 0x65, 0x72, 0x12, 0x81, 0x01, 0x0a, 0x22, 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, - 0x76, 0x65, 0x72, 0x5f, 0x65, 0x63, 0x32, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, - 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x41, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x33, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x2e, 0x55, 0x49, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x45, 0x43, 0x32, 0x49, - 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1e, 0x75, 0x69, 0x44, 0x69, 0x73, 0x63, 0x6f, - 0x76, 0x65, 0x72, 0x45, 0x63, 0x32, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x65, - 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x62, 0x0a, 0x17, 0x75, 0x69, 0x5f, 0x64, 0x69, - 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x5f, 0x65, 0x69, - 0x63, 0x65, 0x18, 0x42, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, - 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x44, 0x69, 0x73, 0x63, - 0x6f, 0x76, 0x65, 0x72, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x45, 0x49, 0x43, 0x45, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x14, 0x75, 0x69, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, - 0x72, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x45, 0x69, 0x63, 0x65, 0x12, 0x62, 0x0a, 0x17, 0x75, - 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x43, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, - 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, - 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x6f, - 0x64, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x14, 0x75, 0x69, 0x44, 0x69, 0x73, - 0x63, 0x6f, 0x76, 0x65, 0x72, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x12, - 0x64, 0x0a, 0x17, 0x64, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x5f, 0x64, 0x69, 0x72, 0x65, 0x63, - 0x74, 0x6f, 0x72, 0x79, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x65, 0x18, 0x44, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x2a, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x2e, 0x44, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, - 0x72, 0x79, 0x53, 0x68, 0x61, 0x72, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x15, - 0x64, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, - 0x53, 0x68, 0x61, 0x72, 0x65, 0x12, 0x65, 0x0a, 0x1a, 0x64, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, - 0x5f, 0x63, 0x6c, 0x69, 0x70, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, - 0x66, 0x65, 0x72, 0x18, 0x45, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x72, 0x65, 0x68, - 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x44, 0x65, 0x73, 0x6b, 0x74, - 0x6f, 0x70, 0x43, 0x6c, 0x69, 0x70, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x48, 0x00, 0x52, 0x18, 0x64, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x43, 0x6c, 0x69, 0x70, 0x62, - 0x6f, 0x61, 0x72, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x12, 0x52, 0x0a, 0x11, - 0x74, 0x61, 0x67, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x5f, 0x71, 0x75, 0x65, 0x72, - 0x79, 0x18, 0x46, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x54, 0x41, 0x47, 0x45, 0x78, 0x65, 0x63, - 0x75, 0x74, 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, - 0x0f, 0x74, 0x61, 0x67, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, - 0x12, 0x86, 0x01, 0x0a, 0x23, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x61, 0x75, - 0x64, 0x69, 0x74, 0x5f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x61, 0x75, 0x74, 0x68, - 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x18, 0x47, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, + 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x74, + 0x0a, 0x1d, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x72, 0x65, + 0x76, 0x69, 0x65, 0x77, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x69, 0x61, 0x6e, 0x63, 0x65, 0x18, + 0x4d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, + 0x74, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x69, 0x61, 0x6e, 0x63, + 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1a, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, + 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x69, + 0x61, 0x6e, 0x63, 0x65, 0x12, 0x62, 0x0a, 0x18, 0x6d, 0x66, 0x61, 0x5f, 0x61, 0x75, 0x74, 0x68, + 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, + 0x18, 0x4e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x4d, 0x46, 0x41, 0x41, 0x75, 0x74, 0x68, 0x65, + 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, + 0x52, 0x16, 0x6d, 0x66, 0x61, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x55, 0x0a, 0x12, 0x73, 0x70, 0x69, 0x66, + 0x66, 0x65, 0x5f, 0x73, 0x76, 0x69, 0x64, 0x5f, 0x69, 0x73, 0x73, 0x75, 0x65, 0x64, 0x18, 0x4f, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, 0x50, 0x49, 0x46, 0x46, 0x45, 0x53, 0x56, 0x49, 0x44, + 0x49, 0x73, 0x73, 0x75, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x10, 0x73, + 0x70, 0x69, 0x66, 0x66, 0x65, 0x53, 0x76, 0x69, 0x64, 0x49, 0x73, 0x73, 0x75, 0x65, 0x64, 0x12, + 0x5c, 0x0a, 0x15, 0x6f, 0x6b, 0x74, 0x61, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, + 0x69, 0x73, 0x74, 0x5f, 0x73, 0x79, 0x6e, 0x63, 0x18, 0x50, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, - 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x41, 0x75, 0x64, 0x69, 0x74, 0x53, 0x74, 0x6f, - 0x72, 0x61, 0x67, 0x65, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x20, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, - 0x6c, 0x41, 0x75, 0x64, 0x69, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x41, 0x75, 0x74, - 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x6b, 0x0a, 0x1a, 0x73, 0x65, 0x63, - 0x75, 0x72, 0x69, 0x74, 0x79, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x67, 0x65, 0x74, - 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x48, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, - 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, - 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x47, 0x65, 0x74, - 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x17, 0x73, - 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x47, 0x65, 0x74, - 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x4c, 0x0a, 0x0f, 0x61, 0x75, 0x64, 0x69, 0x74, 0x5f, - 0x71, 0x75, 0x65, 0x72, 0x79, 0x5f, 0x72, 0x75, 0x6e, 0x18, 0x49, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x22, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x2e, 0x41, 0x75, 0x64, 0x69, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x75, 0x6e, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0d, 0x61, 0x75, 0x64, 0x69, 0x74, 0x51, 0x75, 0x65, 0x72, - 0x79, 0x52, 0x75, 0x6e, 0x12, 0x59, 0x0a, 0x15, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, - 0x79, 0x5f, 0x66, 0x65, 0x74, 0x63, 0x68, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x4a, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x46, 0x65, - 0x74, 0x63, 0x68, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x13, 0x64, 0x69, 0x73, 0x63, - 0x6f, 0x76, 0x65, 0x72, 0x79, 0x46, 0x65, 0x74, 0x63, 0x68, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, - 0x68, 0x0a, 0x19, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x72, - 0x65, 0x76, 0x69, 0x65, 0x77, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x18, 0x4b, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, - 0x76, 0x69, 0x65, 0x77, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, - 0x00, 0x52, 0x16, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, - 0x69, 0x65, 0x77, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x68, 0x0a, 0x19, 0x61, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x5f, - 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x18, 0x4c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, - 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x63, - 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x16, 0x61, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x12, 0x74, 0x0a, 0x1d, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, - 0x73, 0x74, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x69, - 0x61, 0x6e, 0x63, 0x65, 0x18, 0x4d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x72, 0x65, - 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x63, 0x63, 0x65, - 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x43, 0x6f, 0x6d, 0x70, - 0x6c, 0x69, 0x61, 0x6e, 0x63, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1a, 0x61, - 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x43, - 0x6f, 0x6d, 0x70, 0x6c, 0x69, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x62, 0x0a, 0x18, 0x6d, 0x66, 0x61, - 0x5f, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, - 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x4e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x70, 0x72, - 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x4d, 0x46, 0x41, - 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x16, 0x6d, 0x66, 0x61, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, - 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x55, 0x0a, - 0x12, 0x73, 0x70, 0x69, 0x66, 0x66, 0x65, 0x5f, 0x73, 0x76, 0x69, 0x64, 0x5f, 0x69, 0x73, 0x73, - 0x75, 0x65, 0x64, 0x18, 0x4f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x72, 0x65, 0x68, - 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, 0x50, 0x49, 0x46, 0x46, - 0x45, 0x53, 0x56, 0x49, 0x44, 0x49, 0x73, 0x73, 0x75, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x48, 0x00, 0x52, 0x10, 0x73, 0x70, 0x69, 0x66, 0x66, 0x65, 0x53, 0x76, 0x69, 0x64, 0x49, 0x73, - 0x73, 0x75, 0x65, 0x64, 0x12, 0x5c, 0x0a, 0x15, 0x6f, 0x6b, 0x74, 0x61, 0x5f, 0x61, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x73, 0x79, 0x6e, 0x63, 0x18, 0x50, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x4f, 0x6b, 0x74, 0x61, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, - 0x69, 0x73, 0x74, 0x53, 0x79, 0x6e, 0x63, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x12, - 0x6f, 0x6b, 0x74, 0x61, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x79, - 0x6e, 0x63, 0x12, 0x5e, 0x0a, 0x15, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x75, - 0x73, 0x65, 0x72, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x18, 0x51, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x55, 0x73, 0x65, 0x72, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x13, 0x64, - 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x55, 0x73, 0x65, 0x72, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x12, 0x7f, 0x0a, 0x21, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x75, - 0x73, 0x65, 0x72, 0x5f, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x5f, - 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x18, 0x52, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, - 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x44, - 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x55, 0x73, 0x65, 0x72, 0x50, 0x65, 0x72, 0x6d, 0x69, - 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, - 0x74, 0x48, 0x00, 0x52, 0x1e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x55, 0x73, 0x65, - 0x72, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x64, 0x12, 0x84, 0x01, 0x0a, 0x23, 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, - 0x76, 0x65, 0x72, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, - 0x76, 0x65, 0x72, 0x79, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x53, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x34, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x2e, 0x55, 0x49, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1f, 0x75, 0x69, 0x44, 0x69, 0x73, - 0x63, 0x6f, 0x76, 0x65, 0x72, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x69, 0x73, 0x63, 0x6f, - 0x76, 0x65, 0x72, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x77, 0x0a, 0x21, 0x75, 0x69, - 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x6b, 0x75, 0x62, 0x65, 0x5f, 0x65, - 0x6b, 0x73, 0x5f, 0x65, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, - 0x54, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, - 0x72, 0x4b, 0x75, 0x62, 0x65, 0x45, 0x4b, 0x53, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1c, 0x75, 0x69, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, - 0x72, 0x4b, 0x75, 0x62, 0x65, 0x45, 0x6b, 0x73, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x12, 0x7d, 0x0a, 0x23, 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, - 0x65, 0x72, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x61, 0x70, 0x70, 0x5f, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x55, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x2e, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x2e, 0x55, 0x49, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x41, 0x70, 0x70, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x48, 0x00, 0x52, 0x1e, 0x75, 0x69, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x12, 0x65, 0x0a, 0x18, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x67, 0x72, 0x61, - 0x70, 0x68, 0x5f, 0x67, 0x69, 0x74, 0x6c, 0x61, 0x62, 0x5f, 0x73, 0x63, 0x61, 0x6e, 0x18, 0x56, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x47, 0x72, 0x61, 0x70, - 0x68, 0x47, 0x69, 0x74, 0x6c, 0x61, 0x62, 0x53, 0x63, 0x61, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x48, 0x00, 0x52, 0x15, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x47, 0x72, 0x61, 0x70, 0x68, 0x47, - 0x69, 0x74, 0x6c, 0x61, 0x62, 0x53, 0x63, 0x61, 0x6e, 0x12, 0x94, 0x01, 0x0a, 0x29, 0x61, 0x63, - 0x63, 0x65, 0x73, 0x73, 0x5f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x5f, 0x73, 0x65, 0x63, 0x72, 0x65, - 0x74, 0x73, 0x5f, 0x73, 0x63, 0x61, 0x6e, 0x5f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, - 0x65, 0x64, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x57, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, - 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, + 0x4f, 0x6b, 0x74, 0x61, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x79, + 0x6e, 0x63, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x12, 0x6f, 0x6b, 0x74, 0x61, 0x41, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x79, 0x6e, 0x63, 0x12, 0x5e, 0x0a, + 0x15, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x63, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x18, 0x51, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, + 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x44, 0x61, + 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x55, 0x73, 0x65, 0x72, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x13, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, + 0x73, 0x65, 0x55, 0x73, 0x65, 0x72, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x7f, 0x0a, + 0x21, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x70, + 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x64, 0x18, 0x52, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, + 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, + 0x73, 0x65, 0x55, 0x73, 0x65, 0x72, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, + 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1e, + 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x55, 0x73, 0x65, 0x72, 0x50, 0x65, 0x72, 0x6d, + 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x12, 0x84, + 0x01, 0x0a, 0x23, 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x63, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x5f, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x53, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x70, + 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, + 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x69, + 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1f, 0x75, 0x69, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x77, 0x0a, 0x21, 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, + 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x6b, 0x75, 0x62, 0x65, 0x5f, 0x65, 0x6b, 0x73, 0x5f, 0x65, 0x6e, + 0x72, 0x6f, 0x6c, 0x6c, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x54, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x2c, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x2e, 0x55, 0x49, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x4b, 0x75, 0x62, 0x65, + 0x45, 0x4b, 0x53, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, + 0x52, 0x1c, 0x75, 0x69, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x4b, 0x75, 0x62, 0x65, + 0x45, 0x6b, 0x73, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x7d, + 0x0a, 0x23, 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x63, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x5f, 0x61, 0x70, 0x70, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, + 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x55, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x72, + 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x44, + 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, + 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1e, 0x75, + 0x69, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, + 0x70, 0x70, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x65, 0x0a, + 0x18, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x5f, 0x67, 0x69, + 0x74, 0x6c, 0x61, 0x62, 0x5f, 0x73, 0x63, 0x61, 0x6e, 0x18, 0x56, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x2a, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x47, 0x72, 0x61, 0x70, 0x68, 0x47, 0x69, 0x74, 0x6c, + 0x61, 0x62, 0x53, 0x63, 0x61, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x15, 0x61, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x47, 0x72, 0x61, 0x70, 0x68, 0x47, 0x69, 0x74, 0x6c, 0x61, 0x62, + 0x53, 0x63, 0x61, 0x6e, 0x12, 0x94, 0x01, 0x0a, 0x29, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, + 0x67, 0x72, 0x61, 0x70, 0x68, 0x5f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x5f, 0x73, 0x63, + 0x61, 0x6e, 0x5f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x6b, 0x65, + 0x79, 0x73, 0x18, 0x57, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, + 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, + 0x47, 0x72, 0x61, 0x70, 0x68, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x53, 0x63, 0x61, 0x6e, + 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x64, 0x4b, 0x65, 0x79, 0x73, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x24, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x47, 0x72, 0x61, + 0x70, 0x68, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x53, 0x63, 0x61, 0x6e, 0x41, 0x75, 0x74, + 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x64, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x95, 0x01, 0x0a, 0x2a, + 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x5f, 0x73, 0x65, 0x63, + 0x72, 0x65, 0x74, 0x73, 0x5f, 0x73, 0x63, 0x61, 0x6e, 0x5f, 0x73, 0x73, 0x68, 0x5f, 0x70, 0x72, + 0x69, 0x76, 0x61, 0x74, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x58, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x39, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x47, 0x72, 0x61, 0x70, 0x68, 0x53, 0x65, 0x63, + 0x72, 0x65, 0x74, 0x73, 0x53, 0x63, 0x61, 0x6e, 0x53, 0x53, 0x48, 0x50, 0x72, 0x69, 0x76, 0x61, + 0x74, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x24, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x47, 0x72, 0x61, 0x70, 0x68, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, - 0x73, 0x53, 0x63, 0x61, 0x6e, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x64, 0x4b, - 0x65, 0x79, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x24, 0x61, 0x63, 0x63, 0x65, - 0x73, 0x73, 0x47, 0x72, 0x61, 0x70, 0x68, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x53, 0x63, - 0x61, 0x6e, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x64, 0x4b, 0x65, 0x79, 0x73, - 0x12, 0x95, 0x01, 0x0a, 0x2a, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x67, 0x72, 0x61, 0x70, - 0x68, 0x5f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x5f, 0x73, 0x63, 0x61, 0x6e, 0x5f, 0x73, - 0x73, 0x68, 0x5f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, - 0x58, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x47, 0x72, 0x61, - 0x70, 0x68, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x53, 0x63, 0x61, 0x6e, 0x53, 0x53, 0x48, - 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x48, 0x00, 0x52, 0x24, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x47, 0x72, 0x61, 0x70, 0x68, 0x53, - 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x53, 0x63, 0x61, 0x6e, 0x53, 0x73, 0x68, 0x50, 0x72, 0x69, - 0x76, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x5c, 0x0a, 0x15, 0x61, 0x63, 0x63, 0x65, - 0x73, 0x73, 0x5f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x5f, 0x61, 0x77, 0x73, 0x5f, 0x73, 0x63, 0x61, - 0x6e, 0x18, 0x59, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, + 0x73, 0x53, 0x63, 0x61, 0x6e, 0x53, 0x73, 0x68, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x4b, + 0x65, 0x79, 0x73, 0x12, 0x5c, 0x0a, 0x15, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x67, 0x72, + 0x61, 0x70, 0x68, 0x5f, 0x61, 0x77, 0x73, 0x5f, 0x73, 0x63, 0x61, 0x6e, 0x18, 0x59, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x47, 0x72, 0x61, 0x70, 0x68, 0x41, + 0x57, 0x53, 0x53, 0x63, 0x61, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x12, 0x61, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x47, 0x72, 0x61, 0x70, 0x68, 0x41, 0x77, 0x73, 0x53, 0x63, 0x61, + 0x6e, 0x12, 0x7b, 0x0a, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x67, 0x72, 0x61, 0x70, + 0x68, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x63, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x64, 0x18, 0x5a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x72, + 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x47, 0x72, 0x61, 0x70, 0x68, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x50, 0x61, + 0x74, 0x68, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, + 0x52, 0x1c, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x47, 0x72, 0x61, 0x70, 0x68, 0x41, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x50, 0x61, 0x74, 0x68, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x12, 0x78, + 0x0a, 0x1f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x5f, 0x63, + 0x72, 0x6f, 0x77, 0x6e, 0x5f, 0x6a, 0x65, 0x77, 0x65, 0x6c, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x18, 0x5b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x47, - 0x72, 0x61, 0x70, 0x68, 0x41, 0x57, 0x53, 0x53, 0x63, 0x61, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x48, 0x00, 0x52, 0x12, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x47, 0x72, 0x61, 0x70, 0x68, 0x41, - 0x77, 0x73, 0x53, 0x63, 0x61, 0x6e, 0x12, 0x7b, 0x0a, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, - 0x5f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x70, 0x61, - 0x74, 0x68, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x18, 0x5a, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x31, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x47, 0x72, 0x61, 0x70, 0x68, 0x41, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x50, 0x61, 0x74, 0x68, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1c, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x47, 0x72, 0x61, - 0x70, 0x68, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x50, 0x61, 0x74, 0x68, 0x43, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x64, 0x12, 0x78, 0x0a, 0x1f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x67, 0x72, - 0x61, 0x70, 0x68, 0x5f, 0x63, 0x72, 0x6f, 0x77, 0x6e, 0x5f, 0x6a, 0x65, 0x77, 0x65, 0x6c, 0x5f, - 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x18, 0x5b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, - 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x63, - 0x63, 0x65, 0x73, 0x73, 0x47, 0x72, 0x61, 0x70, 0x68, 0x43, 0x72, 0x6f, 0x77, 0x6e, 0x4a, 0x65, - 0x77, 0x65, 0x6c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, - 0x52, 0x1b, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x47, 0x72, 0x61, 0x70, 0x68, 0x43, 0x72, 0x6f, - 0x77, 0x6e, 0x4a, 0x65, 0x77, 0x65, 0x6c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x86, 0x01, - 0x0a, 0x25, 0x75, 0x69, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x67, 0x72, 0x61, 0x70, - 0x68, 0x5f, 0x63, 0x72, 0x6f, 0x77, 0x6e, 0x5f, 0x6a, 0x65, 0x77, 0x65, 0x6c, 0x5f, 0x64, 0x69, - 0x66, 0x66, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x18, 0x5c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, - 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, - 0x49, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x47, 0x72, 0x61, 0x70, 0x68, 0x43, 0x72, 0x6f, 0x77, - 0x6e, 0x4a, 0x65, 0x77, 0x65, 0x6c, 0x44, 0x69, 0x66, 0x66, 0x56, 0x69, 0x65, 0x77, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1f, 0x75, 0x69, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x47, - 0x72, 0x61, 0x70, 0x68, 0x43, 0x72, 0x6f, 0x77, 0x6e, 0x4a, 0x65, 0x77, 0x65, 0x6c, 0x44, 0x69, - 0x66, 0x66, 0x56, 0x69, 0x65, 0x77, 0x42, 0x07, 0x0a, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x4a, - 0x04, 0x08, 0x08, 0x10, 0x09, 0x52, 0x1c, 0x75, 0x69, 0x5f, 0x6f, 0x6e, 0x62, 0x6f, 0x61, 0x72, - 0x64, 0x5f, 0x67, 0x65, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x63, 0x6c, - 0x69, 0x63, 0x6b, 0x22, 0x15, 0x0a, 0x13, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x51, 0x0a, 0x13, 0x53, 0x75, - 0x62, 0x6d, 0x69, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x3a, 0x0a, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x2e, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x16, 0x0a, - 0x14, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x16, 0x0a, 0x14, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x54, 0x65, - 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x17, 0x0a, - 0x15, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x54, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2a, 0x87, 0x02, 0x0a, 0x0c, 0x52, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x1d, 0x0a, 0x19, 0x52, 0x45, 0x53, 0x4f, 0x55, - 0x52, 0x43, 0x45, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, - 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x16, 0x0a, 0x12, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, - 0x43, 0x45, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4e, 0x4f, 0x44, 0x45, 0x10, 0x01, 0x12, 0x1c, - 0x0a, 0x18, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, - 0x41, 0x50, 0x50, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x10, 0x02, 0x12, 0x1d, 0x0a, 0x19, - 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4b, 0x55, - 0x42, 0x45, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x10, 0x03, 0x12, 0x1b, 0x0a, 0x17, 0x52, - 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x44, 0x42, 0x5f, - 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x10, 0x04, 0x12, 0x21, 0x0a, 0x1d, 0x52, 0x45, 0x53, 0x4f, - 0x55, 0x52, 0x43, 0x45, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x57, 0x49, 0x4e, 0x44, 0x4f, 0x57, - 0x53, 0x5f, 0x44, 0x45, 0x53, 0x4b, 0x54, 0x4f, 0x50, 0x10, 0x05, 0x12, 0x1e, 0x0a, 0x1a, 0x52, - 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4e, 0x4f, 0x44, - 0x45, 0x5f, 0x4f, 0x50, 0x45, 0x4e, 0x53, 0x53, 0x48, 0x10, 0x06, 0x12, 0x23, 0x0a, 0x1f, 0x52, - 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4e, 0x4f, 0x44, - 0x45, 0x5f, 0x4f, 0x50, 0x45, 0x4e, 0x53, 0x53, 0x48, 0x5f, 0x45, 0x49, 0x43, 0x45, 0x10, 0x07, - 0x2a, 0x4d, 0x0a, 0x08, 0x55, 0x73, 0x65, 0x72, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x19, 0x0a, 0x15, - 0x55, 0x53, 0x45, 0x52, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, - 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x55, 0x53, 0x45, 0x52, 0x5f, - 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x48, 0x55, 0x4d, 0x41, 0x4e, 0x10, 0x01, 0x12, 0x11, 0x0a, 0x0d, - 0x55, 0x53, 0x45, 0x52, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x42, 0x4f, 0x54, 0x10, 0x02, 0x2a, - 0xc0, 0x0f, 0x0a, 0x10, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x52, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x12, 0x21, 0x0a, 0x1d, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, - 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, - 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1c, 0x0a, 0x18, 0x44, 0x49, 0x53, 0x43, 0x4f, - 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x53, 0x45, 0x52, - 0x56, 0x45, 0x52, 0x10, 0x01, 0x12, 0x20, 0x0a, 0x1c, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, - 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x4b, 0x55, 0x42, 0x45, 0x52, - 0x4e, 0x45, 0x54, 0x45, 0x53, 0x10, 0x02, 0x12, 0x33, 0x0a, 0x2f, 0x44, 0x49, 0x53, 0x43, 0x4f, + 0x72, 0x61, 0x70, 0x68, 0x43, 0x72, 0x6f, 0x77, 0x6e, 0x4a, 0x65, 0x77, 0x65, 0x6c, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1b, 0x61, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x47, 0x72, 0x61, 0x70, 0x68, 0x43, 0x72, 0x6f, 0x77, 0x6e, 0x4a, 0x65, 0x77, + 0x65, 0x6c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x86, 0x01, 0x0a, 0x25, 0x75, 0x69, 0x5f, + 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x5f, 0x63, 0x72, 0x6f, + 0x77, 0x6e, 0x5f, 0x6a, 0x65, 0x77, 0x65, 0x6c, 0x5f, 0x64, 0x69, 0x66, 0x66, 0x5f, 0x76, 0x69, + 0x65, 0x77, 0x18, 0x5c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, + 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x41, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x47, 0x72, 0x61, 0x70, 0x68, 0x43, 0x72, 0x6f, 0x77, 0x6e, 0x4a, 0x65, 0x77, 0x65, + 0x6c, 0x44, 0x69, 0x66, 0x66, 0x56, 0x69, 0x65, 0x77, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, + 0x52, 0x1f, 0x75, 0x69, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x47, 0x72, 0x61, 0x70, 0x68, 0x43, + 0x72, 0x6f, 0x77, 0x6e, 0x4a, 0x65, 0x77, 0x65, 0x6c, 0x44, 0x69, 0x66, 0x66, 0x56, 0x69, 0x65, + 0x77, 0x42, 0x07, 0x0a, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x4a, 0x04, 0x08, 0x08, 0x10, 0x09, + 0x52, 0x1c, 0x75, 0x69, 0x5f, 0x6f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x5f, 0x67, 0x65, 0x74, + 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x22, 0x15, + 0x0a, 0x13, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x51, 0x0a, 0x13, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3a, 0x0a, 0x06, + 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, + 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, 0x75, + 0x62, 0x6d, 0x69, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x52, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x16, 0x0a, 0x14, 0x53, 0x75, 0x62, 0x6d, + 0x69, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x16, 0x0a, 0x14, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x54, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, + 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x17, 0x0a, 0x15, 0x48, 0x65, 0x6c, 0x6c, + 0x6f, 0x54, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x2a, 0x87, 0x02, 0x0a, 0x0c, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4b, 0x69, + 0x6e, 0x64, 0x12, 0x1d, 0x0a, 0x19, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x4b, + 0x49, 0x4e, 0x44, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, + 0x00, 0x12, 0x16, 0x0a, 0x12, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x4b, 0x49, + 0x4e, 0x44, 0x5f, 0x4e, 0x4f, 0x44, 0x45, 0x10, 0x01, 0x12, 0x1c, 0x0a, 0x18, 0x52, 0x45, 0x53, + 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x41, 0x50, 0x50, 0x5f, 0x53, + 0x45, 0x52, 0x56, 0x45, 0x52, 0x10, 0x02, 0x12, 0x1d, 0x0a, 0x19, 0x52, 0x45, 0x53, 0x4f, 0x55, + 0x52, 0x43, 0x45, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4b, 0x55, 0x42, 0x45, 0x5f, 0x53, 0x45, + 0x52, 0x56, 0x45, 0x52, 0x10, 0x03, 0x12, 0x1b, 0x0a, 0x17, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, + 0x43, 0x45, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x44, 0x42, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x45, + 0x52, 0x10, 0x04, 0x12, 0x21, 0x0a, 0x1d, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, + 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x57, 0x49, 0x4e, 0x44, 0x4f, 0x57, 0x53, 0x5f, 0x44, 0x45, 0x53, + 0x4b, 0x54, 0x4f, 0x50, 0x10, 0x05, 0x12, 0x1e, 0x0a, 0x1a, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, + 0x43, 0x45, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4e, 0x4f, 0x44, 0x45, 0x5f, 0x4f, 0x50, 0x45, + 0x4e, 0x53, 0x53, 0x48, 0x10, 0x06, 0x12, 0x23, 0x0a, 0x1f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, + 0x43, 0x45, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4e, 0x4f, 0x44, 0x45, 0x5f, 0x4f, 0x50, 0x45, + 0x4e, 0x53, 0x53, 0x48, 0x5f, 0x45, 0x49, 0x43, 0x45, 0x10, 0x07, 0x2a, 0x4d, 0x0a, 0x08, 0x55, + 0x73, 0x65, 0x72, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x19, 0x0a, 0x15, 0x55, 0x53, 0x45, 0x52, 0x5f, + 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, + 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x55, 0x53, 0x45, 0x52, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, + 0x48, 0x55, 0x4d, 0x41, 0x4e, 0x10, 0x01, 0x12, 0x11, 0x0a, 0x0d, 0x55, 0x53, 0x45, 0x52, 0x5f, + 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x42, 0x4f, 0x54, 0x10, 0x02, 0x2a, 0xc0, 0x0f, 0x0a, 0x10, 0x44, + 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, + 0x21, 0x0a, 0x1d, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, + 0x55, 0x52, 0x43, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, + 0x10, 0x00, 0x12, 0x1c, 0x0a, 0x18, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, + 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x10, 0x01, + 0x12, 0x20, 0x0a, 0x1c, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, + 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x4b, 0x55, 0x42, 0x45, 0x52, 0x4e, 0x45, 0x54, 0x45, 0x53, + 0x10, 0x02, 0x12, 0x33, 0x0a, 0x2f, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, + 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, + 0x5f, 0x50, 0x4f, 0x53, 0x54, 0x47, 0x52, 0x45, 0x53, 0x5f, 0x53, 0x45, 0x4c, 0x46, 0x5f, 0x48, + 0x4f, 0x53, 0x54, 0x45, 0x44, 0x10, 0x03, 0x12, 0x30, 0x0a, 0x2c, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, - 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x50, 0x4f, 0x53, 0x54, 0x47, 0x52, 0x45, 0x53, 0x5f, 0x53, - 0x45, 0x4c, 0x46, 0x5f, 0x48, 0x4f, 0x53, 0x54, 0x45, 0x44, 0x10, 0x03, 0x12, 0x30, 0x0a, 0x2c, + 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x4d, 0x59, 0x53, 0x51, 0x4c, 0x5f, 0x53, 0x45, 0x4c, 0x46, + 0x5f, 0x48, 0x4f, 0x53, 0x54, 0x45, 0x44, 0x10, 0x04, 0x12, 0x32, 0x0a, 0x2e, 0x44, 0x49, 0x53, + 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, + 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x4d, 0x4f, 0x4e, 0x47, 0x4f, 0x44, 0x42, 0x5f, + 0x53, 0x45, 0x4c, 0x46, 0x5f, 0x48, 0x4f, 0x53, 0x54, 0x45, 0x44, 0x10, 0x05, 0x12, 0x2b, 0x0a, + 0x27, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, + 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x50, 0x4f, 0x53, 0x54, + 0x47, 0x52, 0x45, 0x53, 0x5f, 0x52, 0x44, 0x53, 0x10, 0x06, 0x12, 0x28, 0x0a, 0x24, 0x44, 0x49, + 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, + 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x4d, 0x59, 0x53, 0x51, 0x4c, 0x5f, 0x52, + 0x44, 0x53, 0x10, 0x07, 0x12, 0x26, 0x0a, 0x22, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, + 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x41, 0x50, 0x50, 0x4c, 0x49, 0x43, + 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x48, 0x54, 0x54, 0x50, 0x10, 0x08, 0x12, 0x25, 0x0a, 0x21, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, - 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x4d, 0x59, 0x53, 0x51, 0x4c, - 0x5f, 0x53, 0x45, 0x4c, 0x46, 0x5f, 0x48, 0x4f, 0x53, 0x54, 0x45, 0x44, 0x10, 0x04, 0x12, 0x32, - 0x0a, 0x2e, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, - 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x4d, 0x4f, 0x4e, - 0x47, 0x4f, 0x44, 0x42, 0x5f, 0x53, 0x45, 0x4c, 0x46, 0x5f, 0x48, 0x4f, 0x53, 0x54, 0x45, 0x44, - 0x10, 0x05, 0x12, 0x2b, 0x0a, 0x27, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, + 0x45, 0x5f, 0x41, 0x50, 0x50, 0x4c, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x54, 0x43, + 0x50, 0x10, 0x09, 0x12, 0x25, 0x0a, 0x21, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, + 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x57, 0x49, 0x4e, 0x44, 0x4f, 0x57, 0x53, + 0x5f, 0x44, 0x45, 0x53, 0x4b, 0x54, 0x4f, 0x50, 0x10, 0x0a, 0x12, 0x2c, 0x0a, 0x28, 0x44, 0x49, + 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, + 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x53, 0x51, 0x4c, 0x53, 0x45, 0x52, 0x56, + 0x45, 0x52, 0x5f, 0x52, 0x44, 0x53, 0x10, 0x0b, 0x12, 0x30, 0x0a, 0x2c, 0x44, 0x49, 0x53, 0x43, + 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, + 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x50, 0x4f, 0x53, 0x54, 0x47, 0x52, 0x45, 0x53, 0x5f, + 0x52, 0x45, 0x44, 0x53, 0x48, 0x49, 0x46, 0x54, 0x10, 0x0c, 0x12, 0x34, 0x0a, 0x30, 0x44, 0x49, + 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, + 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x53, 0x51, 0x4c, 0x53, 0x45, 0x52, 0x56, + 0x45, 0x52, 0x5f, 0x53, 0x45, 0x4c, 0x46, 0x5f, 0x48, 0x4f, 0x53, 0x54, 0x45, 0x44, 0x10, 0x0d, + 0x12, 0x30, 0x0a, 0x2c, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, + 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x52, + 0x45, 0x44, 0x49, 0x53, 0x5f, 0x53, 0x45, 0x4c, 0x46, 0x5f, 0x48, 0x4f, 0x53, 0x54, 0x45, 0x44, + 0x10, 0x0e, 0x12, 0x2b, 0x0a, 0x27, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, - 0x5f, 0x50, 0x4f, 0x53, 0x54, 0x47, 0x52, 0x45, 0x53, 0x5f, 0x52, 0x44, 0x53, 0x10, 0x06, 0x12, + 0x5f, 0x50, 0x4f, 0x53, 0x54, 0x47, 0x52, 0x45, 0x53, 0x5f, 0x47, 0x43, 0x50, 0x10, 0x0f, 0x12, 0x28, 0x0a, 0x24, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x4d, 0x59, - 0x53, 0x51, 0x4c, 0x5f, 0x52, 0x44, 0x53, 0x10, 0x07, 0x12, 0x26, 0x0a, 0x22, 0x44, 0x49, 0x53, - 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x41, - 0x50, 0x50, 0x4c, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x48, 0x54, 0x54, 0x50, 0x10, - 0x08, 0x12, 0x25, 0x0a, 0x21, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, - 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x41, 0x50, 0x50, 0x4c, 0x49, 0x43, 0x41, 0x54, 0x49, - 0x4f, 0x4e, 0x5f, 0x54, 0x43, 0x50, 0x10, 0x09, 0x12, 0x25, 0x0a, 0x21, 0x44, 0x49, 0x53, 0x43, - 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x57, 0x49, - 0x4e, 0x44, 0x4f, 0x57, 0x53, 0x5f, 0x44, 0x45, 0x53, 0x4b, 0x54, 0x4f, 0x50, 0x10, 0x0a, 0x12, - 0x2c, 0x0a, 0x28, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, - 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x53, 0x51, - 0x4c, 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x44, 0x53, 0x10, 0x0b, 0x12, 0x30, 0x0a, - 0x2c, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, - 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x50, 0x4f, 0x53, 0x54, - 0x47, 0x52, 0x45, 0x53, 0x5f, 0x52, 0x45, 0x44, 0x53, 0x48, 0x49, 0x46, 0x54, 0x10, 0x0c, 0x12, - 0x34, 0x0a, 0x30, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, - 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x53, 0x51, - 0x4c, 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x5f, 0x53, 0x45, 0x4c, 0x46, 0x5f, 0x48, 0x4f, 0x53, - 0x54, 0x45, 0x44, 0x10, 0x0d, 0x12, 0x30, 0x0a, 0x2c, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, - 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, - 0x41, 0x53, 0x45, 0x5f, 0x52, 0x45, 0x44, 0x49, 0x53, 0x5f, 0x53, 0x45, 0x4c, 0x46, 0x5f, 0x48, - 0x4f, 0x53, 0x54, 0x45, 0x44, 0x10, 0x0e, 0x12, 0x2b, 0x0a, 0x27, 0x44, 0x49, 0x53, 0x43, 0x4f, + 0x53, 0x51, 0x4c, 0x5f, 0x47, 0x43, 0x50, 0x10, 0x10, 0x12, 0x2c, 0x0a, 0x28, 0x44, 0x49, 0x53, + 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, + 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x53, 0x51, 0x4c, 0x53, 0x45, 0x52, 0x56, 0x45, + 0x52, 0x5f, 0x47, 0x43, 0x50, 0x10, 0x11, 0x12, 0x3b, 0x0a, 0x37, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, - 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x50, 0x4f, 0x53, 0x54, 0x47, 0x52, 0x45, 0x53, 0x5f, 0x47, - 0x43, 0x50, 0x10, 0x0f, 0x12, 0x28, 0x0a, 0x24, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, + 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x50, 0x4f, 0x53, 0x54, 0x47, 0x52, 0x45, 0x53, 0x5f, 0x52, + 0x45, 0x44, 0x53, 0x48, 0x49, 0x46, 0x54, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x4c, 0x45, + 0x53, 0x53, 0x10, 0x12, 0x12, 0x2d, 0x0a, 0x29, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, - 0x53, 0x45, 0x5f, 0x4d, 0x59, 0x53, 0x51, 0x4c, 0x5f, 0x47, 0x43, 0x50, 0x10, 0x10, 0x12, 0x2c, - 0x0a, 0x28, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, - 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x53, 0x51, 0x4c, - 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x5f, 0x47, 0x43, 0x50, 0x10, 0x11, 0x12, 0x3b, 0x0a, 0x37, + 0x53, 0x45, 0x5f, 0x50, 0x4f, 0x53, 0x54, 0x47, 0x52, 0x45, 0x53, 0x5f, 0x41, 0x5a, 0x55, 0x52, + 0x45, 0x10, 0x13, 0x12, 0x27, 0x0a, 0x23, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, + 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, + 0x45, 0x5f, 0x44, 0x59, 0x4e, 0x41, 0x4d, 0x4f, 0x44, 0x42, 0x10, 0x14, 0x12, 0x32, 0x0a, 0x2e, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, - 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x50, 0x4f, 0x53, 0x54, 0x47, - 0x52, 0x45, 0x53, 0x5f, 0x52, 0x45, 0x44, 0x53, 0x48, 0x49, 0x46, 0x54, 0x5f, 0x53, 0x45, 0x52, - 0x56, 0x45, 0x52, 0x4c, 0x45, 0x53, 0x53, 0x10, 0x12, 0x12, 0x2d, 0x0a, 0x29, 0x44, 0x49, 0x53, - 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, - 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x50, 0x4f, 0x53, 0x54, 0x47, 0x52, 0x45, 0x53, - 0x5f, 0x41, 0x5a, 0x55, 0x52, 0x45, 0x10, 0x13, 0x12, 0x27, 0x0a, 0x23, 0x44, 0x49, 0x53, 0x43, - 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, - 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x44, 0x59, 0x4e, 0x41, 0x4d, 0x4f, 0x44, 0x42, 0x10, - 0x14, 0x12, 0x32, 0x0a, 0x2e, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, + 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x43, 0x41, 0x53, 0x53, 0x41, + 0x4e, 0x44, 0x52, 0x41, 0x5f, 0x4b, 0x45, 0x59, 0x53, 0x50, 0x41, 0x43, 0x45, 0x53, 0x10, 0x15, + 0x12, 0x34, 0x0a, 0x30, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, + 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x43, + 0x41, 0x53, 0x53, 0x41, 0x4e, 0x44, 0x52, 0x41, 0x5f, 0x53, 0x45, 0x4c, 0x46, 0x5f, 0x48, 0x4f, + 0x53, 0x54, 0x45, 0x44, 0x10, 0x16, 0x12, 0x38, 0x0a, 0x34, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, + 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, + 0x42, 0x41, 0x53, 0x45, 0x5f, 0x45, 0x4c, 0x41, 0x53, 0x54, 0x49, 0x43, 0x53, 0x45, 0x41, 0x52, + 0x43, 0x48, 0x5f, 0x53, 0x45, 0x4c, 0x46, 0x5f, 0x48, 0x4f, 0x53, 0x54, 0x45, 0x44, 0x10, 0x17, + 0x12, 0x30, 0x0a, 0x2c, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, + 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x52, + 0x45, 0x44, 0x49, 0x53, 0x5f, 0x45, 0x4c, 0x41, 0x53, 0x54, 0x49, 0x43, 0x41, 0x43, 0x48, 0x45, + 0x10, 0x18, 0x12, 0x2d, 0x0a, 0x29, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, + 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, + 0x5f, 0x52, 0x45, 0x44, 0x49, 0x53, 0x5f, 0x4d, 0x45, 0x4d, 0x4f, 0x52, 0x59, 0x44, 0x42, 0x10, + 0x19, 0x12, 0x30, 0x0a, 0x2c, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, - 0x43, 0x41, 0x53, 0x53, 0x41, 0x4e, 0x44, 0x52, 0x41, 0x5f, 0x4b, 0x45, 0x59, 0x53, 0x50, 0x41, - 0x43, 0x45, 0x53, 0x10, 0x15, 0x12, 0x34, 0x0a, 0x30, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, + 0x52, 0x45, 0x44, 0x49, 0x53, 0x5f, 0x41, 0x5a, 0x55, 0x52, 0x45, 0x5f, 0x43, 0x41, 0x43, 0x48, + 0x45, 0x10, 0x1a, 0x12, 0x38, 0x0a, 0x34, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, + 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, + 0x45, 0x5f, 0x52, 0x45, 0x44, 0x49, 0x53, 0x5f, 0x43, 0x4c, 0x55, 0x53, 0x54, 0x45, 0x52, 0x5f, + 0x53, 0x45, 0x4c, 0x46, 0x5f, 0x48, 0x4f, 0x53, 0x54, 0x45, 0x44, 0x10, 0x1b, 0x12, 0x2a, 0x0a, + 0x26, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, + 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x4d, 0x59, 0x53, 0x51, + 0x4c, 0x5f, 0x41, 0x5a, 0x55, 0x52, 0x45, 0x10, 0x1c, 0x12, 0x2e, 0x0a, 0x2a, 0x44, 0x49, 0x53, + 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, + 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x53, 0x51, 0x4c, 0x53, 0x45, 0x52, 0x56, 0x45, + 0x52, 0x5f, 0x41, 0x5a, 0x55, 0x52, 0x45, 0x10, 0x1d, 0x12, 0x32, 0x0a, 0x2e, 0x44, 0x49, 0x53, + 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, + 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x53, 0x51, 0x4c, 0x53, 0x45, 0x52, 0x56, 0x45, + 0x52, 0x5f, 0x4d, 0x49, 0x43, 0x52, 0x4f, 0x53, 0x4f, 0x46, 0x54, 0x10, 0x1e, 0x12, 0x36, 0x0a, + 0x32, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, + 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x43, 0x4f, 0x43, 0x4b, + 0x52, 0x4f, 0x41, 0x43, 0x48, 0x44, 0x42, 0x5f, 0x53, 0x45, 0x4c, 0x46, 0x5f, 0x48, 0x4f, 0x53, + 0x54, 0x45, 0x44, 0x10, 0x1f, 0x12, 0x2c, 0x0a, 0x28, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, - 0x41, 0x53, 0x45, 0x5f, 0x43, 0x41, 0x53, 0x53, 0x41, 0x4e, 0x44, 0x52, 0x41, 0x5f, 0x53, 0x45, - 0x4c, 0x46, 0x5f, 0x48, 0x4f, 0x53, 0x54, 0x45, 0x44, 0x10, 0x16, 0x12, 0x38, 0x0a, 0x34, 0x44, + 0x41, 0x53, 0x45, 0x5f, 0x4d, 0x4f, 0x4e, 0x47, 0x4f, 0x44, 0x42, 0x5f, 0x41, 0x54, 0x4c, 0x41, + 0x53, 0x10, 0x20, 0x12, 0x28, 0x0a, 0x24, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, + 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, + 0x45, 0x5f, 0x53, 0x4e, 0x4f, 0x57, 0x46, 0x4c, 0x41, 0x4b, 0x45, 0x10, 0x21, 0x12, 0x2c, 0x0a, + 0x28, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, + 0x43, 0x45, 0x5f, 0x44, 0x4f, 0x43, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, + 0x52, 0x44, 0x53, 0x5f, 0x50, 0x52, 0x4f, 0x58, 0x59, 0x10, 0x22, 0x12, 0x34, 0x0a, 0x30, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, - 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x45, 0x4c, 0x41, 0x53, 0x54, 0x49, - 0x43, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x5f, 0x53, 0x45, 0x4c, 0x46, 0x5f, 0x48, 0x4f, 0x53, - 0x54, 0x45, 0x44, 0x10, 0x17, 0x12, 0x30, 0x0a, 0x2c, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, - 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, - 0x41, 0x53, 0x45, 0x5f, 0x52, 0x45, 0x44, 0x49, 0x53, 0x5f, 0x45, 0x4c, 0x41, 0x53, 0x54, 0x49, - 0x43, 0x41, 0x43, 0x48, 0x45, 0x10, 0x18, 0x12, 0x2d, 0x0a, 0x29, 0x44, 0x49, 0x53, 0x43, 0x4f, - 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, - 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x52, 0x45, 0x44, 0x49, 0x53, 0x5f, 0x4d, 0x45, 0x4d, 0x4f, - 0x52, 0x59, 0x44, 0x42, 0x10, 0x19, 0x12, 0x30, 0x0a, 0x2c, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, - 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, - 0x42, 0x41, 0x53, 0x45, 0x5f, 0x52, 0x45, 0x44, 0x49, 0x53, 0x5f, 0x41, 0x5a, 0x55, 0x52, 0x45, - 0x5f, 0x43, 0x41, 0x43, 0x48, 0x45, 0x10, 0x1a, 0x12, 0x38, 0x0a, 0x34, 0x44, 0x49, 0x53, 0x43, - 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, - 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x52, 0x45, 0x44, 0x49, 0x53, 0x5f, 0x43, 0x4c, 0x55, - 0x53, 0x54, 0x45, 0x52, 0x5f, 0x53, 0x45, 0x4c, 0x46, 0x5f, 0x48, 0x4f, 0x53, 0x54, 0x45, 0x44, - 0x10, 0x1b, 0x12, 0x2a, 0x0a, 0x26, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, - 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, - 0x5f, 0x4d, 0x59, 0x53, 0x51, 0x4c, 0x5f, 0x41, 0x5a, 0x55, 0x52, 0x45, 0x10, 0x1c, 0x12, 0x2e, - 0x0a, 0x2a, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, - 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x53, 0x51, 0x4c, - 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x5f, 0x41, 0x5a, 0x55, 0x52, 0x45, 0x10, 0x1d, 0x12, 0x32, - 0x0a, 0x2e, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, - 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x53, 0x51, 0x4c, - 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x5f, 0x4d, 0x49, 0x43, 0x52, 0x4f, 0x53, 0x4f, 0x46, 0x54, - 0x10, 0x1e, 0x12, 0x36, 0x0a, 0x32, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, - 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, - 0x5f, 0x43, 0x4f, 0x43, 0x4b, 0x52, 0x4f, 0x41, 0x43, 0x48, 0x44, 0x42, 0x5f, 0x53, 0x45, 0x4c, - 0x46, 0x5f, 0x48, 0x4f, 0x53, 0x54, 0x45, 0x44, 0x10, 0x1f, 0x12, 0x2c, 0x0a, 0x28, 0x44, 0x49, + 0x5f, 0x44, 0x4f, 0x43, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x48, 0x49, + 0x47, 0x48, 0x5f, 0x41, 0x56, 0x41, 0x49, 0x4c, 0x41, 0x42, 0x49, 0x4c, 0x49, 0x54, 0x59, 0x10, + 0x23, 0x12, 0x37, 0x0a, 0x33, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, + 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x4f, 0x43, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, + 0x41, 0x53, 0x45, 0x5f, 0x44, 0x59, 0x4e, 0x41, 0x4d, 0x49, 0x43, 0x5f, 0x52, 0x45, 0x47, 0x49, + 0x53, 0x54, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x24, 0x12, 0x26, 0x0a, 0x22, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, - 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x4d, 0x4f, 0x4e, 0x47, 0x4f, 0x44, 0x42, - 0x5f, 0x41, 0x54, 0x4c, 0x41, 0x53, 0x10, 0x20, 0x12, 0x28, 0x0a, 0x24, 0x44, 0x49, 0x53, 0x43, - 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, - 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x53, 0x4e, 0x4f, 0x57, 0x46, 0x4c, 0x41, 0x4b, 0x45, - 0x10, 0x21, 0x12, 0x2c, 0x0a, 0x28, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, - 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x4f, 0x43, 0x5f, 0x44, 0x41, 0x54, 0x41, - 0x42, 0x41, 0x53, 0x45, 0x5f, 0x52, 0x44, 0x53, 0x5f, 0x50, 0x52, 0x4f, 0x58, 0x59, 0x10, 0x22, - 0x12, 0x34, 0x0a, 0x30, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, - 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x4f, 0x43, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, - 0x53, 0x45, 0x5f, 0x48, 0x49, 0x47, 0x48, 0x5f, 0x41, 0x56, 0x41, 0x49, 0x4c, 0x41, 0x42, 0x49, - 0x4c, 0x49, 0x54, 0x59, 0x10, 0x23, 0x12, 0x37, 0x0a, 0x33, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, + 0x53, 0x41, 0x4d, 0x4c, 0x5f, 0x41, 0x50, 0x50, 0x4c, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, + 0x10, 0x25, 0x12, 0x22, 0x0a, 0x1e, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, + 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x45, 0x43, 0x32, 0x5f, 0x49, 0x4e, 0x53, 0x54, + 0x41, 0x4e, 0x43, 0x45, 0x10, 0x26, 0x12, 0x30, 0x0a, 0x2c, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x4f, 0x43, 0x5f, - 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x44, 0x59, 0x4e, 0x41, 0x4d, 0x49, 0x43, - 0x5f, 0x52, 0x45, 0x47, 0x49, 0x53, 0x54, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x24, 0x12, - 0x26, 0x0a, 0x22, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, - 0x55, 0x52, 0x43, 0x45, 0x5f, 0x53, 0x41, 0x4d, 0x4c, 0x5f, 0x41, 0x50, 0x50, 0x4c, 0x49, 0x43, - 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x25, 0x12, 0x22, 0x0a, 0x1e, 0x44, 0x49, 0x53, 0x43, 0x4f, - 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x45, 0x43, 0x32, - 0x5f, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x10, 0x26, 0x12, 0x30, 0x0a, 0x2c, 0x44, - 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, - 0x5f, 0x44, 0x4f, 0x43, 0x5f, 0x57, 0x49, 0x4e, 0x44, 0x4f, 0x57, 0x53, 0x5f, 0x44, 0x45, 0x53, - 0x4b, 0x54, 0x4f, 0x50, 0x5f, 0x4e, 0x4f, 0x4e, 0x5f, 0x41, 0x44, 0x10, 0x27, 0x12, 0x24, 0x0a, - 0x20, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, - 0x43, 0x45, 0x5f, 0x4b, 0x55, 0x42, 0x45, 0x52, 0x4e, 0x45, 0x54, 0x45, 0x53, 0x5f, 0x45, 0x4b, - 0x53, 0x10, 0x28, 0x12, 0x2d, 0x0a, 0x29, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, - 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x41, 0x50, 0x50, 0x4c, 0x49, 0x43, 0x41, - 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x41, 0x57, 0x53, 0x5f, 0x43, 0x4f, 0x4e, 0x53, 0x4f, 0x4c, 0x45, - 0x10, 0x29, 0x2a, 0xa3, 0x01, 0x0a, 0x0e, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1f, 0x0a, 0x1b, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, - 0x52, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, - 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1b, 0x0a, 0x17, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, - 0x45, 0x52, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x53, 0x55, 0x43, 0x43, 0x45, 0x53, - 0x53, 0x10, 0x01, 0x12, 0x1b, 0x0a, 0x17, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, - 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x53, 0x4b, 0x49, 0x50, 0x50, 0x45, 0x44, 0x10, 0x02, - 0x12, 0x19, 0x0a, 0x15, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x53, 0x54, 0x41, - 0x54, 0x55, 0x53, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x03, 0x12, 0x1b, 0x0a, 0x17, 0x44, - 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x41, - 0x42, 0x4f, 0x52, 0x54, 0x45, 0x44, 0x10, 0x04, 0x2a, 0xc1, 0x02, 0x0a, 0x03, 0x43, 0x54, 0x41, - 0x12, 0x13, 0x0a, 0x0f, 0x43, 0x54, 0x41, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, - 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x16, 0x0a, 0x12, 0x43, 0x54, 0x41, 0x5f, 0x41, 0x55, 0x54, - 0x48, 0x5f, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x4f, 0x52, 0x10, 0x01, 0x12, 0x17, 0x0a, - 0x13, 0x43, 0x54, 0x41, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, 0x5f, 0x53, 0x45, 0x53, 0x53, - 0x49, 0x4f, 0x4e, 0x53, 0x10, 0x02, 0x12, 0x17, 0x0a, 0x13, 0x43, 0x54, 0x41, 0x5f, 0x41, 0x43, - 0x43, 0x45, 0x53, 0x53, 0x5f, 0x52, 0x45, 0x51, 0x55, 0x45, 0x53, 0x54, 0x53, 0x10, 0x03, 0x12, - 0x17, 0x0a, 0x13, 0x43, 0x54, 0x41, 0x5f, 0x50, 0x52, 0x45, 0x4d, 0x49, 0x55, 0x4d, 0x5f, 0x53, - 0x55, 0x50, 0x50, 0x4f, 0x52, 0x54, 0x10, 0x04, 0x12, 0x17, 0x0a, 0x13, 0x43, 0x54, 0x41, 0x5f, - 0x54, 0x52, 0x55, 0x53, 0x54, 0x45, 0x44, 0x5f, 0x44, 0x45, 0x56, 0x49, 0x43, 0x45, 0x53, 0x10, - 0x05, 0x12, 0x16, 0x0a, 0x12, 0x43, 0x54, 0x41, 0x5f, 0x55, 0x50, 0x47, 0x52, 0x41, 0x44, 0x45, - 0x5f, 0x42, 0x41, 0x4e, 0x4e, 0x45, 0x52, 0x10, 0x06, 0x12, 0x17, 0x0a, 0x13, 0x43, 0x54, 0x41, - 0x5f, 0x42, 0x49, 0x4c, 0x4c, 0x49, 0x4e, 0x47, 0x5f, 0x53, 0x55, 0x4d, 0x4d, 0x41, 0x52, 0x59, - 0x10, 0x07, 0x12, 0x13, 0x0a, 0x0f, 0x43, 0x54, 0x41, 0x5f, 0x41, 0x43, 0x43, 0x45, 0x53, 0x53, - 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0x08, 0x12, 0x19, 0x0a, 0x15, 0x43, 0x54, 0x41, 0x5f, 0x41, - 0x43, 0x43, 0x45, 0x53, 0x53, 0x5f, 0x4d, 0x4f, 0x4e, 0x49, 0x54, 0x4f, 0x52, 0x49, 0x4e, 0x47, - 0x10, 0x09, 0x12, 0x1e, 0x0a, 0x1a, 0x43, 0x54, 0x41, 0x5f, 0x45, 0x58, 0x54, 0x45, 0x52, 0x4e, - 0x41, 0x4c, 0x5f, 0x41, 0x55, 0x44, 0x49, 0x54, 0x5f, 0x53, 0x54, 0x4f, 0x52, 0x41, 0x47, 0x45, - 0x10, 0x0a, 0x12, 0x16, 0x0a, 0x12, 0x43, 0x54, 0x41, 0x5f, 0x4f, 0x4b, 0x54, 0x41, 0x5f, 0x55, - 0x53, 0x45, 0x52, 0x5f, 0x53, 0x59, 0x4e, 0x43, 0x10, 0x0b, 0x12, 0x10, 0x0a, 0x0c, 0x43, 0x54, - 0x41, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x41, 0x5f, 0x49, 0x44, 0x10, 0x0c, 0x2a, 0xe3, 0x08, 0x0a, - 0x15, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x72, 0x6f, - 0x6c, 0x6c, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x27, 0x0a, 0x23, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, - 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, - 0x44, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, - 0x21, 0x0a, 0x1d, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, - 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x53, 0x4c, 0x41, 0x43, 0x4b, - 0x10, 0x01, 0x12, 0x24, 0x0a, 0x20, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, - 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x41, 0x57, - 0x53, 0x5f, 0x4f, 0x49, 0x44, 0x43, 0x10, 0x02, 0x12, 0x25, 0x0a, 0x21, 0x49, 0x4e, 0x54, 0x45, + 0x57, 0x49, 0x4e, 0x44, 0x4f, 0x57, 0x53, 0x5f, 0x44, 0x45, 0x53, 0x4b, 0x54, 0x4f, 0x50, 0x5f, + 0x4e, 0x4f, 0x4e, 0x5f, 0x41, 0x44, 0x10, 0x27, 0x12, 0x24, 0x0a, 0x20, 0x44, 0x49, 0x53, 0x43, + 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x4b, 0x55, + 0x42, 0x45, 0x52, 0x4e, 0x45, 0x54, 0x45, 0x53, 0x5f, 0x45, 0x4b, 0x53, 0x10, 0x28, 0x12, 0x2d, + 0x0a, 0x29, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, + 0x52, 0x43, 0x45, 0x5f, 0x41, 0x50, 0x50, 0x4c, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, + 0x41, 0x57, 0x53, 0x5f, 0x43, 0x4f, 0x4e, 0x53, 0x4f, 0x4c, 0x45, 0x10, 0x29, 0x2a, 0xa3, 0x01, + 0x0a, 0x0e, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x12, 0x1f, 0x0a, 0x1b, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x53, 0x54, 0x41, + 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, + 0x00, 0x12, 0x1b, 0x0a, 0x17, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x53, 0x54, + 0x41, 0x54, 0x55, 0x53, 0x5f, 0x53, 0x55, 0x43, 0x43, 0x45, 0x53, 0x53, 0x10, 0x01, 0x12, 0x1b, + 0x0a, 0x17, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, + 0x53, 0x5f, 0x53, 0x4b, 0x49, 0x50, 0x50, 0x45, 0x44, 0x10, 0x02, 0x12, 0x19, 0x0a, 0x15, 0x44, + 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x45, + 0x52, 0x52, 0x4f, 0x52, 0x10, 0x03, 0x12, 0x1b, 0x0a, 0x17, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, + 0x45, 0x52, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x41, 0x42, 0x4f, 0x52, 0x54, 0x45, + 0x44, 0x10, 0x04, 0x2a, 0xc1, 0x02, 0x0a, 0x03, 0x43, 0x54, 0x41, 0x12, 0x13, 0x0a, 0x0f, 0x43, + 0x54, 0x41, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, + 0x12, 0x16, 0x0a, 0x12, 0x43, 0x54, 0x41, 0x5f, 0x41, 0x55, 0x54, 0x48, 0x5f, 0x43, 0x4f, 0x4e, + 0x4e, 0x45, 0x43, 0x54, 0x4f, 0x52, 0x10, 0x01, 0x12, 0x17, 0x0a, 0x13, 0x43, 0x54, 0x41, 0x5f, + 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, 0x5f, 0x53, 0x45, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x53, 0x10, + 0x02, 0x12, 0x17, 0x0a, 0x13, 0x43, 0x54, 0x41, 0x5f, 0x41, 0x43, 0x43, 0x45, 0x53, 0x53, 0x5f, + 0x52, 0x45, 0x51, 0x55, 0x45, 0x53, 0x54, 0x53, 0x10, 0x03, 0x12, 0x17, 0x0a, 0x13, 0x43, 0x54, + 0x41, 0x5f, 0x50, 0x52, 0x45, 0x4d, 0x49, 0x55, 0x4d, 0x5f, 0x53, 0x55, 0x50, 0x50, 0x4f, 0x52, + 0x54, 0x10, 0x04, 0x12, 0x17, 0x0a, 0x13, 0x43, 0x54, 0x41, 0x5f, 0x54, 0x52, 0x55, 0x53, 0x54, + 0x45, 0x44, 0x5f, 0x44, 0x45, 0x56, 0x49, 0x43, 0x45, 0x53, 0x10, 0x05, 0x12, 0x16, 0x0a, 0x12, + 0x43, 0x54, 0x41, 0x5f, 0x55, 0x50, 0x47, 0x52, 0x41, 0x44, 0x45, 0x5f, 0x42, 0x41, 0x4e, 0x4e, + 0x45, 0x52, 0x10, 0x06, 0x12, 0x17, 0x0a, 0x13, 0x43, 0x54, 0x41, 0x5f, 0x42, 0x49, 0x4c, 0x4c, + 0x49, 0x4e, 0x47, 0x5f, 0x53, 0x55, 0x4d, 0x4d, 0x41, 0x52, 0x59, 0x10, 0x07, 0x12, 0x13, 0x0a, + 0x0f, 0x43, 0x54, 0x41, 0x5f, 0x41, 0x43, 0x43, 0x45, 0x53, 0x53, 0x5f, 0x4c, 0x49, 0x53, 0x54, + 0x10, 0x08, 0x12, 0x19, 0x0a, 0x15, 0x43, 0x54, 0x41, 0x5f, 0x41, 0x43, 0x43, 0x45, 0x53, 0x53, + 0x5f, 0x4d, 0x4f, 0x4e, 0x49, 0x54, 0x4f, 0x52, 0x49, 0x4e, 0x47, 0x10, 0x09, 0x12, 0x1e, 0x0a, + 0x1a, 0x43, 0x54, 0x41, 0x5f, 0x45, 0x58, 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x5f, 0x41, 0x55, + 0x44, 0x49, 0x54, 0x5f, 0x53, 0x54, 0x4f, 0x52, 0x41, 0x47, 0x45, 0x10, 0x0a, 0x12, 0x16, 0x0a, + 0x12, 0x43, 0x54, 0x41, 0x5f, 0x4f, 0x4b, 0x54, 0x41, 0x5f, 0x55, 0x53, 0x45, 0x52, 0x5f, 0x53, + 0x59, 0x4e, 0x43, 0x10, 0x0b, 0x12, 0x10, 0x0a, 0x0c, 0x43, 0x54, 0x41, 0x5f, 0x45, 0x4e, 0x54, + 0x52, 0x41, 0x5f, 0x49, 0x44, 0x10, 0x0c, 0x2a, 0xe3, 0x08, 0x0a, 0x15, 0x49, 0x6e, 0x74, 0x65, + 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x4b, 0x69, 0x6e, + 0x64, 0x12, 0x27, 0x0a, 0x23, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, + 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x55, 0x4e, 0x53, + 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x21, 0x0a, 0x1d, 0x49, 0x4e, + 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, + 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x53, 0x4c, 0x41, 0x43, 0x4b, 0x10, 0x01, 0x12, 0x24, 0x0a, + 0x20, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x52, + 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x41, 0x57, 0x53, 0x5f, 0x4f, 0x49, 0x44, + 0x43, 0x10, 0x02, 0x12, 0x25, 0x0a, 0x21, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, + 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x50, + 0x41, 0x47, 0x45, 0x52, 0x44, 0x55, 0x54, 0x59, 0x10, 0x03, 0x12, 0x21, 0x0a, 0x1d, 0x49, 0x4e, + 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, + 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x45, 0x4d, 0x41, 0x49, 0x4c, 0x10, 0x04, 0x12, 0x20, 0x0a, + 0x1c, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x52, + 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4a, 0x49, 0x52, 0x41, 0x10, 0x05, 0x12, + 0x23, 0x0a, 0x1f, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, + 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x44, 0x49, 0x53, 0x43, 0x4f, + 0x52, 0x44, 0x10, 0x06, 0x12, 0x26, 0x0a, 0x22, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, + 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, + 0x4d, 0x41, 0x54, 0x54, 0x45, 0x52, 0x4d, 0x4f, 0x53, 0x54, 0x10, 0x07, 0x12, 0x24, 0x0a, 0x20, + 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, + 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4d, 0x53, 0x5f, 0x54, 0x45, 0x41, 0x4d, 0x53, + 0x10, 0x08, 0x12, 0x24, 0x0a, 0x20, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, + 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4f, 0x50, + 0x53, 0x47, 0x45, 0x4e, 0x49, 0x45, 0x10, 0x09, 0x12, 0x20, 0x0a, 0x1c, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, - 0x49, 0x4e, 0x44, 0x5f, 0x50, 0x41, 0x47, 0x45, 0x52, 0x44, 0x55, 0x54, 0x59, 0x10, 0x03, 0x12, - 0x21, 0x0a, 0x1d, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, - 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x45, 0x4d, 0x41, 0x49, 0x4c, - 0x10, 0x04, 0x12, 0x20, 0x0a, 0x1c, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, - 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4a, 0x49, - 0x52, 0x41, 0x10, 0x05, 0x12, 0x23, 0x0a, 0x1f, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, + 0x49, 0x4e, 0x44, 0x5f, 0x4f, 0x4b, 0x54, 0x41, 0x10, 0x0a, 0x12, 0x20, 0x0a, 0x1c, 0x49, 0x4e, + 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, + 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4a, 0x41, 0x4d, 0x46, 0x10, 0x0b, 0x12, 0x26, 0x0a, 0x22, + 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, + 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4d, 0x41, 0x43, 0x48, 0x49, 0x4e, 0x45, 0x5f, + 0x49, 0x44, 0x10, 0x0c, 0x12, 0x35, 0x0a, 0x31, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, - 0x44, 0x49, 0x53, 0x43, 0x4f, 0x52, 0x44, 0x10, 0x06, 0x12, 0x26, 0x0a, 0x22, 0x49, 0x4e, 0x54, - 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, - 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4d, 0x41, 0x54, 0x54, 0x45, 0x52, 0x4d, 0x4f, 0x53, 0x54, 0x10, - 0x07, 0x12, 0x24, 0x0a, 0x20, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, - 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4d, 0x53, 0x5f, - 0x54, 0x45, 0x41, 0x4d, 0x53, 0x10, 0x08, 0x12, 0x24, 0x0a, 0x20, 0x49, 0x4e, 0x54, 0x45, 0x47, - 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, - 0x4e, 0x44, 0x5f, 0x4f, 0x50, 0x53, 0x47, 0x45, 0x4e, 0x49, 0x45, 0x10, 0x09, 0x12, 0x20, 0x0a, - 0x1c, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x52, - 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4f, 0x4b, 0x54, 0x41, 0x10, 0x0a, 0x12, - 0x20, 0x0a, 0x1c, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, - 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4a, 0x41, 0x4d, 0x46, 0x10, - 0x0b, 0x12, 0x26, 0x0a, 0x22, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, - 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4d, 0x41, 0x43, - 0x48, 0x49, 0x4e, 0x45, 0x5f, 0x49, 0x44, 0x10, 0x0c, 0x12, 0x35, 0x0a, 0x31, 0x49, 0x4e, 0x54, - 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, - 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4d, 0x41, 0x43, 0x48, 0x49, 0x4e, 0x45, 0x5f, 0x49, 0x44, 0x5f, - 0x47, 0x49, 0x54, 0x48, 0x55, 0x42, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x53, 0x10, 0x0d, - 0x12, 0x2f, 0x0a, 0x2b, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, - 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4d, 0x41, 0x43, 0x48, - 0x49, 0x4e, 0x45, 0x5f, 0x49, 0x44, 0x5f, 0x43, 0x49, 0x52, 0x43, 0x4c, 0x45, 0x43, 0x49, 0x10, - 0x0e, 0x12, 0x2d, 0x0a, 0x29, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, - 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4d, 0x41, 0x43, - 0x48, 0x49, 0x4e, 0x45, 0x5f, 0x49, 0x44, 0x5f, 0x47, 0x49, 0x54, 0x4c, 0x41, 0x42, 0x10, 0x0f, - 0x12, 0x2e, 0x0a, 0x2a, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, - 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4d, 0x41, 0x43, 0x48, - 0x49, 0x4e, 0x45, 0x5f, 0x49, 0x44, 0x5f, 0x4a, 0x45, 0x4e, 0x4b, 0x49, 0x4e, 0x53, 0x10, 0x10, - 0x12, 0x2e, 0x0a, 0x2a, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, - 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4d, 0x41, 0x43, 0x48, - 0x49, 0x4e, 0x45, 0x5f, 0x49, 0x44, 0x5f, 0x41, 0x4e, 0x53, 0x49, 0x42, 0x4c, 0x45, 0x10, 0x11, - 0x12, 0x2a, 0x0a, 0x26, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, - 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4d, 0x41, 0x43, 0x48, - 0x49, 0x4e, 0x45, 0x5f, 0x49, 0x44, 0x5f, 0x41, 0x57, 0x53, 0x10, 0x12, 0x12, 0x2a, 0x0a, 0x26, + 0x4d, 0x41, 0x43, 0x48, 0x49, 0x4e, 0x45, 0x5f, 0x49, 0x44, 0x5f, 0x47, 0x49, 0x54, 0x48, 0x55, + 0x42, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x53, 0x10, 0x0d, 0x12, 0x2f, 0x0a, 0x2b, 0x49, + 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, + 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4d, 0x41, 0x43, 0x48, 0x49, 0x4e, 0x45, 0x5f, 0x49, + 0x44, 0x5f, 0x43, 0x49, 0x52, 0x43, 0x4c, 0x45, 0x43, 0x49, 0x10, 0x0e, 0x12, 0x2d, 0x0a, 0x29, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4d, 0x41, 0x43, 0x48, 0x49, 0x4e, 0x45, 0x5f, - 0x49, 0x44, 0x5f, 0x47, 0x43, 0x50, 0x10, 0x13, 0x12, 0x2c, 0x0a, 0x28, 0x49, 0x4e, 0x54, 0x45, - 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, - 0x49, 0x4e, 0x44, 0x5f, 0x4d, 0x41, 0x43, 0x48, 0x49, 0x4e, 0x45, 0x5f, 0x49, 0x44, 0x5f, 0x41, - 0x5a, 0x55, 0x52, 0x45, 0x10, 0x14, 0x12, 0x30, 0x0a, 0x2c, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, - 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, - 0x44, 0x5f, 0x4d, 0x41, 0x43, 0x48, 0x49, 0x4e, 0x45, 0x5f, 0x49, 0x44, 0x5f, 0x53, 0x50, 0x41, - 0x43, 0x45, 0x4c, 0x49, 0x46, 0x54, 0x10, 0x15, 0x12, 0x31, 0x0a, 0x2d, 0x49, 0x4e, 0x54, 0x45, - 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, - 0x49, 0x4e, 0x44, 0x5f, 0x4d, 0x41, 0x43, 0x48, 0x49, 0x4e, 0x45, 0x5f, 0x49, 0x44, 0x5f, 0x4b, - 0x55, 0x42, 0x45, 0x52, 0x4e, 0x45, 0x54, 0x45, 0x53, 0x10, 0x16, 0x12, 0x24, 0x0a, 0x20, 0x49, + 0x49, 0x44, 0x5f, 0x47, 0x49, 0x54, 0x4c, 0x41, 0x42, 0x10, 0x0f, 0x12, 0x2e, 0x0a, 0x2a, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, - 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x41, 0x5f, 0x49, 0x44, 0x10, - 0x17, 0x12, 0x37, 0x0a, 0x33, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, - 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x44, 0x41, 0x54, - 0x41, 0x44, 0x4f, 0x47, 0x5f, 0x49, 0x4e, 0x43, 0x49, 0x44, 0x45, 0x4e, 0x54, 0x5f, 0x4d, 0x41, - 0x4e, 0x41, 0x47, 0x45, 0x4d, 0x45, 0x4e, 0x54, 0x10, 0x18, 0x12, 0x26, 0x0a, 0x22, 0x49, 0x4e, - 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, - 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x4e, 0x4f, 0x57, - 0x10, 0x19, 0x2a, 0x88, 0x01, 0x0a, 0x12, 0x45, 0x64, 0x69, 0x74, 0x6f, 0x72, 0x43, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x24, 0x0a, 0x20, 0x45, 0x44, 0x49, - 0x54, 0x4f, 0x52, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, - 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, - 0x25, 0x0a, 0x21, 0x45, 0x44, 0x49, 0x54, 0x4f, 0x52, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, - 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x52, 0x4f, 0x4c, 0x45, 0x5f, 0x47, 0x52, 0x41, - 0x4e, 0x54, 0x45, 0x44, 0x10, 0x01, 0x12, 0x25, 0x0a, 0x21, 0x45, 0x44, 0x49, 0x54, 0x4f, 0x52, - 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x52, - 0x4f, 0x4c, 0x45, 0x5f, 0x52, 0x45, 0x4d, 0x4f, 0x56, 0x45, 0x44, 0x10, 0x02, 0x2a, 0x3f, 0x0a, - 0x07, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x17, 0x0a, 0x13, 0x46, 0x45, 0x41, 0x54, - 0x55, 0x52, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, - 0x00, 0x12, 0x1b, 0x0a, 0x17, 0x46, 0x45, 0x41, 0x54, 0x55, 0x52, 0x45, 0x5f, 0x54, 0x52, 0x55, - 0x53, 0x54, 0x45, 0x44, 0x5f, 0x44, 0x45, 0x56, 0x49, 0x43, 0x45, 0x53, 0x10, 0x01, 0x2a, 0xa0, - 0x01, 0x0a, 0x1b, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x6d, 0x6d, - 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2d, - 0x0a, 0x29, 0x46, 0x45, 0x41, 0x54, 0x55, 0x52, 0x45, 0x5f, 0x52, 0x45, 0x43, 0x4f, 0x4d, 0x4d, - 0x45, 0x4e, 0x44, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, - 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x2a, 0x0a, - 0x26, 0x46, 0x45, 0x41, 0x54, 0x55, 0x52, 0x45, 0x5f, 0x52, 0x45, 0x43, 0x4f, 0x4d, 0x4d, 0x45, - 0x4e, 0x44, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x4e, - 0x4f, 0x54, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x01, 0x12, 0x26, 0x0a, 0x22, 0x46, 0x45, 0x41, + 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4d, 0x41, 0x43, 0x48, 0x49, 0x4e, 0x45, 0x5f, 0x49, + 0x44, 0x5f, 0x4a, 0x45, 0x4e, 0x4b, 0x49, 0x4e, 0x53, 0x10, 0x10, 0x12, 0x2e, 0x0a, 0x2a, 0x49, + 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, + 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4d, 0x41, 0x43, 0x48, 0x49, 0x4e, 0x45, 0x5f, 0x49, + 0x44, 0x5f, 0x41, 0x4e, 0x53, 0x49, 0x42, 0x4c, 0x45, 0x10, 0x11, 0x12, 0x2a, 0x0a, 0x26, 0x49, + 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, + 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4d, 0x41, 0x43, 0x48, 0x49, 0x4e, 0x45, 0x5f, 0x49, + 0x44, 0x5f, 0x41, 0x57, 0x53, 0x10, 0x12, 0x12, 0x2a, 0x0a, 0x26, 0x49, 0x4e, 0x54, 0x45, 0x47, + 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, + 0x4e, 0x44, 0x5f, 0x4d, 0x41, 0x43, 0x48, 0x49, 0x4e, 0x45, 0x5f, 0x49, 0x44, 0x5f, 0x47, 0x43, + 0x50, 0x10, 0x13, 0x12, 0x2c, 0x0a, 0x28, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, + 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4d, + 0x41, 0x43, 0x48, 0x49, 0x4e, 0x45, 0x5f, 0x49, 0x44, 0x5f, 0x41, 0x5a, 0x55, 0x52, 0x45, 0x10, + 0x14, 0x12, 0x30, 0x0a, 0x2c, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, + 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4d, 0x41, 0x43, + 0x48, 0x49, 0x4e, 0x45, 0x5f, 0x49, 0x44, 0x5f, 0x53, 0x50, 0x41, 0x43, 0x45, 0x4c, 0x49, 0x46, + 0x54, 0x10, 0x15, 0x12, 0x31, 0x0a, 0x2d, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, + 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4d, + 0x41, 0x43, 0x48, 0x49, 0x4e, 0x45, 0x5f, 0x49, 0x44, 0x5f, 0x4b, 0x55, 0x42, 0x45, 0x52, 0x4e, + 0x45, 0x54, 0x45, 0x53, 0x10, 0x16, 0x12, 0x24, 0x0a, 0x20, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, + 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, + 0x44, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x41, 0x5f, 0x49, 0x44, 0x10, 0x17, 0x12, 0x37, 0x0a, 0x33, + 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, + 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x44, 0x4f, 0x47, 0x5f, + 0x49, 0x4e, 0x43, 0x49, 0x44, 0x45, 0x4e, 0x54, 0x5f, 0x4d, 0x41, 0x4e, 0x41, 0x47, 0x45, 0x4d, + 0x45, 0x4e, 0x54, 0x10, 0x18, 0x12, 0x26, 0x0a, 0x22, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, + 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, + 0x5f, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x4e, 0x4f, 0x57, 0x10, 0x19, 0x2a, 0x88, 0x01, + 0x0a, 0x12, 0x45, 0x64, 0x69, 0x74, 0x6f, 0x72, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x12, 0x24, 0x0a, 0x20, 0x45, 0x44, 0x49, 0x54, 0x4f, 0x52, 0x5f, 0x43, + 0x48, 0x41, 0x4e, 0x47, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, + 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x25, 0x0a, 0x21, 0x45, 0x44, + 0x49, 0x54, 0x4f, 0x52, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, + 0x55, 0x53, 0x5f, 0x52, 0x4f, 0x4c, 0x45, 0x5f, 0x47, 0x52, 0x41, 0x4e, 0x54, 0x45, 0x44, 0x10, + 0x01, 0x12, 0x25, 0x0a, 0x21, 0x45, 0x44, 0x49, 0x54, 0x4f, 0x52, 0x5f, 0x43, 0x48, 0x41, 0x4e, + 0x47, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x52, 0x4f, 0x4c, 0x45, 0x5f, 0x52, + 0x45, 0x4d, 0x4f, 0x56, 0x45, 0x44, 0x10, 0x02, 0x2a, 0x3f, 0x0a, 0x07, 0x46, 0x65, 0x61, 0x74, + 0x75, 0x72, 0x65, 0x12, 0x17, 0x0a, 0x13, 0x46, 0x45, 0x41, 0x54, 0x55, 0x52, 0x45, 0x5f, 0x55, + 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1b, 0x0a, 0x17, + 0x46, 0x45, 0x41, 0x54, 0x55, 0x52, 0x45, 0x5f, 0x54, 0x52, 0x55, 0x53, 0x54, 0x45, 0x44, 0x5f, + 0x44, 0x45, 0x56, 0x49, 0x43, 0x45, 0x53, 0x10, 0x01, 0x2a, 0xa0, 0x01, 0x0a, 0x1b, 0x46, 0x65, + 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2d, 0x0a, 0x29, 0x46, 0x45, 0x41, 0x54, 0x55, 0x52, 0x45, 0x5f, 0x52, 0x45, 0x43, 0x4f, 0x4d, 0x4d, 0x45, 0x4e, 0x44, 0x41, 0x54, - 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x44, 0x4f, 0x4e, 0x45, 0x10, - 0x02, 0x2a, 0x82, 0x01, 0x0a, 0x0c, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x4c, 0x69, 0x6d, - 0x69, 0x74, 0x12, 0x1d, 0x0a, 0x19, 0x4c, 0x49, 0x43, 0x45, 0x4e, 0x53, 0x45, 0x5f, 0x4c, 0x49, - 0x4d, 0x49, 0x54, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, - 0x00, 0x12, 0x28, 0x0a, 0x24, 0x4c, 0x49, 0x43, 0x45, 0x4e, 0x53, 0x45, 0x5f, 0x4c, 0x49, 0x4d, - 0x49, 0x54, 0x5f, 0x44, 0x45, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x54, 0x52, 0x55, 0x53, 0x54, 0x5f, - 0x54, 0x45, 0x41, 0x4d, 0x5f, 0x4a, 0x41, 0x4d, 0x46, 0x10, 0x01, 0x12, 0x29, 0x0a, 0x25, 0x4c, - 0x49, 0x43, 0x45, 0x4e, 0x53, 0x45, 0x5f, 0x4c, 0x49, 0x4d, 0x49, 0x54, 0x5f, 0x44, 0x45, 0x56, - 0x49, 0x43, 0x45, 0x5f, 0x54, 0x52, 0x55, 0x53, 0x54, 0x5f, 0x54, 0x45, 0x41, 0x4d, 0x5f, 0x55, - 0x53, 0x41, 0x47, 0x45, 0x10, 0x02, 0x32, 0xb4, 0x02, 0x0a, 0x18, 0x54, 0x65, 0x6c, 0x65, 0x70, - 0x6f, 0x72, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x12, 0x5b, 0x0a, 0x0b, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x12, 0x22, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x2e, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x88, 0x02, 0x01, - 0x12, 0x5b, 0x0a, 0x0c, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, - 0x12, 0x23, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, + 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x2a, 0x0a, 0x26, 0x46, 0x45, 0x41, 0x54, + 0x55, 0x52, 0x45, 0x5f, 0x52, 0x45, 0x43, 0x4f, 0x4d, 0x4d, 0x45, 0x4e, 0x44, 0x41, 0x54, 0x49, + 0x4f, 0x4e, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x4e, 0x4f, 0x54, 0x49, 0x46, 0x49, + 0x45, 0x44, 0x10, 0x01, 0x12, 0x26, 0x0a, 0x22, 0x46, 0x45, 0x41, 0x54, 0x55, 0x52, 0x45, 0x5f, + 0x52, 0x45, 0x43, 0x4f, 0x4d, 0x4d, 0x45, 0x4e, 0x44, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x53, + 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x44, 0x4f, 0x4e, 0x45, 0x10, 0x02, 0x2a, 0x82, 0x01, 0x0a, + 0x0c, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x1d, 0x0a, + 0x19, 0x4c, 0x49, 0x43, 0x45, 0x4e, 0x53, 0x45, 0x5f, 0x4c, 0x49, 0x4d, 0x49, 0x54, 0x5f, 0x55, + 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x28, 0x0a, 0x24, + 0x4c, 0x49, 0x43, 0x45, 0x4e, 0x53, 0x45, 0x5f, 0x4c, 0x49, 0x4d, 0x49, 0x54, 0x5f, 0x44, 0x45, + 0x56, 0x49, 0x43, 0x45, 0x5f, 0x54, 0x52, 0x55, 0x53, 0x54, 0x5f, 0x54, 0x45, 0x41, 0x4d, 0x5f, + 0x4a, 0x41, 0x4d, 0x46, 0x10, 0x01, 0x12, 0x29, 0x0a, 0x25, 0x4c, 0x49, 0x43, 0x45, 0x4e, 0x53, + 0x45, 0x5f, 0x4c, 0x49, 0x4d, 0x49, 0x54, 0x5f, 0x44, 0x45, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x54, + 0x52, 0x55, 0x53, 0x54, 0x5f, 0x54, 0x45, 0x41, 0x4d, 0x5f, 0x55, 0x53, 0x41, 0x47, 0x45, 0x10, + 0x02, 0x32, 0xb4, 0x02, 0x0a, 0x18, 0x54, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, + 0x70, 0x6f, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x5b, + 0x0a, 0x0b, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x22, 0x2e, + 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, + 0x75, 0x62, 0x6d, 0x69, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x23, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x2e, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x88, 0x02, 0x01, 0x12, 0x5b, 0x0a, 0x0c, 0x53, + 0x75, 0x62, 0x6d, 0x69, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x23, 0x2e, 0x70, 0x72, + 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, 0x75, 0x62, + 0x6d, 0x69, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x24, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5e, 0x0a, - 0x0d, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x54, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x24, - 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, - 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x54, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x54, 0x65, 0x6c, 0x65, 0x70, - 0x6f, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0xc9, 0x01, - 0x0a, 0x12, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x42, 0x0d, 0x54, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x50, 0x72, - 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x4b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, - 0x6d, 0x2f, 0x67, 0x72, 0x61, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x2f, - 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2f, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x3b, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0xa2, 0x02, 0x03, 0x50, 0x58, 0x58, 0xaa, 0x02, 0x0e, 0x50, 0x72, 0x65, 0x68, 0x6f, - 0x67, 0x2e, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0xca, 0x02, 0x0e, 0x50, 0x72, 0x65, 0x68, - 0x6f, 0x67, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0xe2, 0x02, 0x1a, 0x50, 0x72, 0x65, - 0x68, 0x6f, 0x67, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x5c, 0x47, 0x50, 0x42, 0x4d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x0f, 0x50, 0x72, 0x65, 0x68, 0x6f, 0x67, - 0x3a, 0x3a, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x33, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5e, 0x0a, 0x0d, 0x48, 0x65, 0x6c, 0x6c, + 0x6f, 0x54, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x24, 0x2e, 0x70, 0x72, 0x65, 0x68, + 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x48, 0x65, 0x6c, 0x6c, 0x6f, + 0x54, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x25, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x2e, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x54, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0xc9, 0x01, 0x0a, 0x12, 0x63, 0x6f, 0x6d, + 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x42, + 0x0d, 0x54, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, + 0x5a, 0x4b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x61, + 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x2f, 0x74, 0x65, 0x6c, 0x65, 0x70, + 0x6f, 0x72, 0x74, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, + 0x2f, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x3b, + 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0xa2, 0x02, 0x03, + 0x50, 0x58, 0x58, 0xaa, 0x02, 0x0e, 0x50, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x56, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0xca, 0x02, 0x0e, 0x50, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x5c, 0x56, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0xe2, 0x02, 0x1a, 0x50, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x5c, 0x56, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0xea, 0x02, 0x0f, 0x50, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x3a, 0x3a, 0x56, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/gen/proto/ts/prehog/v1alpha/teleport_pb.ts b/gen/proto/ts/prehog/v1alpha/teleport_pb.ts index c74dcf36f85b0..40aca1e1e4638 100644 --- a/gen/proto/ts/prehog/v1alpha/teleport_pb.ts +++ b/gen/proto/ts/prehog/v1alpha/teleport_pb.ts @@ -2536,6 +2536,16 @@ export interface SubmitEventRequest { * @generated from protobuf field: google.protobuf.Timestamp timestamp = 2; */ timestamp?: Timestamp; + /** + * teleport_version is the version of the Teleport auth server that submitted + * the event, without the "v" prefix. + * For example: 16.4.7 + * + * PostHog property: tp.teleport_version + * + * @generated from protobuf field: string teleport_version = 95; + */ + teleportVersion: string; /** * @generated from protobuf oneof: event */ @@ -9610,6 +9620,7 @@ class SubmitEventRequest$Type extends MessageType { super("prehog.v1alpha.SubmitEventRequest", [ { no: 1, name: "cluster_name", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, { no: 2, name: "timestamp", kind: "message", T: () => Timestamp }, + { no: 95, name: "teleport_version", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, { no: 3, name: "user_login", kind: "message", oneof: "event", T: () => UserLoginEvent }, { no: 4, name: "sso_create", kind: "message", oneof: "event", T: () => SSOCreateEvent }, { no: 5, name: "resource_create", kind: "message", oneof: "event", T: () => ResourceCreateEvent }, @@ -9704,6 +9715,7 @@ class SubmitEventRequest$Type extends MessageType { create(value?: PartialMessage): SubmitEventRequest { const message = globalThis.Object.create((this.messagePrototype!)); message.clusterName = ""; + message.teleportVersion = ""; message.event = { oneofKind: undefined }; if (value !== undefined) reflectionMergePartial(this, message, value); @@ -9720,6 +9732,9 @@ class SubmitEventRequest$Type extends MessageType { case /* google.protobuf.Timestamp timestamp */ 2: message.timestamp = Timestamp.internalBinaryRead(reader, reader.uint32(), options, message.timestamp); break; + case /* string teleport_version */ 95: + message.teleportVersion = reader.string(); + break; case /* prehog.v1alpha.UserLoginEvent user_login */ 3: message.event = { oneofKind: "userLogin", @@ -10272,6 +10287,9 @@ class SubmitEventRequest$Type extends MessageType { /* google.protobuf.Timestamp timestamp = 2; */ if (message.timestamp) Timestamp.internalBinaryWrite(message.timestamp, writer.tag(2, WireType.LengthDelimited).fork(), options).join(); + /* string teleport_version = 95; */ + if (message.teleportVersion !== "") + writer.tag(95, WireType.LengthDelimited).string(message.teleportVersion); /* prehog.v1alpha.UserLoginEvent user_login = 3; */ if (message.event.oneofKind === "userLogin") UserLoginEvent.internalBinaryWrite(message.event.userLogin, writer.tag(3, WireType.LengthDelimited).fork(), options).join(); diff --git a/lib/usagereporter/teleport/usagereporter.go b/lib/usagereporter/teleport/usagereporter.go index d074faa3f5a45..5a1b9dba5822d 100644 --- a/lib/usagereporter/teleport/usagereporter.go +++ b/lib/usagereporter/teleport/usagereporter.go @@ -112,6 +112,7 @@ func (t *StreamingUsageReporter) AnonymizeAndSubmit(events ...Anonymizable) { req := e.Anonymize(t.anonymizer) req.Timestamp = timestamppb.New(t.clock.Now()) req.ClusterName = t.anonymizer.AnonymizeString(t.clusterName.GetClusterName()) + req.TeleportVersion = teleport.Version t.usageReporter.AddEventsToQueue(&req) } } diff --git a/proto/prehog/v1alpha/teleport.proto b/proto/prehog/v1alpha/teleport.proto index f3d3ee78cbfb2..854615b729e15 100644 --- a/proto/prehog/v1alpha/teleport.proto +++ b/proto/prehog/v1alpha/teleport.proto @@ -1408,6 +1408,13 @@ message SubmitEventRequest { // PostHog timestamp google.protobuf.Timestamp timestamp = 2; + // teleport_version is the version of the Teleport auth server that submitted + // the event, without the "v" prefix. + // For example: 16.4.7 + // + // PostHog property: tp.teleport_version + string teleport_version = 95; + // the event being submitted oneof event { UserLoginEvent user_login = 3; @@ -1549,6 +1556,8 @@ message SubmitEventRequest { AccessGraphCrownJewelCreateEvent access_graph_crown_jewel_create = 91; UIAccessGraphCrownJewelDiffViewEvent ui_access_graph_crown_jewel_diff_view = 92; + + // note that 95 is used for "teleport_version" above. } reserved 8; // UIOnboardGetStartedClickEvent From 26fe3aeae24222148770e2500376e8c09443efe2 Mon Sep 17 00:00:00 2001 From: Gavin Frazar Date: Tue, 3 Dec 2024 11:12:43 -0800 Subject: [PATCH 085/111] [v15] wait after spanner test client is disconnected (#49723) * wait after spanner test client is disconnected * watch client connection state in test --- lib/srv/db/access_test.go | 7 +++--- lib/srv/db/spanner/test.go | 46 ++++++++++++++++++++++++++++++-------- lib/srv/db/spanner_test.go | 14 ++++++++++-- 3 files changed, 52 insertions(+), 15 deletions(-) diff --git a/lib/srv/db/access_test.go b/lib/srv/db/access_test.go index c48b4caa3f35a..14b37f32bfbca 100644 --- a/lib/srv/db/access_test.go +++ b/lib/srv/db/access_test.go @@ -32,7 +32,6 @@ import ( "testing" "time" - gspanner "cloud.google.com/go/spanner" "github.com/ClickHouse/ch-go" cqlclient "github.com/datastax/go-cassandra-native-protocol/client" elastic "github.com/elastic/go-elasticsearch/v8" @@ -2129,7 +2128,7 @@ func (c *testContext) dynamodbClient(ctx context.Context, teleportUser, dbServic return db, proxy, nil } -func (c *testContext) spannerClient(ctx context.Context, teleportUser, dbService, dbUser, dbName string) (*gspanner.Client, *alpnproxy.LocalProxy, error) { +func (c *testContext) spannerClient(ctx context.Context, teleportUser, dbService, dbUser, dbName string) (*spanner.SpannerTestClient, *alpnproxy.LocalProxy, error) { route := tlsca.RouteToDatabase{ ServiceName: dbService, Protocol: defaults.ProtocolSpanner, @@ -2142,7 +2141,7 @@ func (c *testContext) spannerClient(ctx context.Context, teleportUser, dbService return nil, nil, trace.Wrap(err) } - db, err := spanner.MakeTestClient(ctx, common.TestClientConfig{ + clt, err := spanner.MakeTestClient(ctx, common.TestClientConfig{ AuthClient: c.authClient, AuthServer: c.authServer, Address: proxy.GetAddr(), @@ -2154,7 +2153,7 @@ func (c *testContext) spannerClient(ctx context.Context, teleportUser, dbService return nil, nil, trace.Wrap(err) } - return db, proxy, nil + return clt, proxy, nil } type roleOptFn func(types.Role) diff --git a/lib/srv/db/spanner/test.go b/lib/srv/db/spanner/test.go index 4a7b5378766cd..44b74085c05bf 100644 --- a/lib/srv/db/spanner/test.go +++ b/lib/srv/db/spanner/test.go @@ -33,6 +33,7 @@ import ( "github.com/sirupsen/logrus" "google.golang.org/api/option" "google.golang.org/grpc" + "google.golang.org/grpc/connectivity" "google.golang.org/grpc/credentials" "google.golang.org/grpc/credentials/insecure" "google.golang.org/grpc/metadata" @@ -47,11 +48,35 @@ import ( "github.com/gravitational/teleport/lib/tlsca" ) -func MakeTestClient(ctx context.Context, config common.TestClientConfig) (*spanner.Client, error) { +// SpannerTestClient wraps a [spanner.Client] and provides direct access to the +// underlying [grpc.ClientConn] of the client. +type SpannerTestClient struct { + ClientConn *grpc.ClientConn + *spanner.Client +} + +// WaitForConnectionState waits until the spanner client's underlying gRPC +// connection transitions into the given state or the context expires. +func (c *SpannerTestClient) WaitForConnectionState(ctx context.Context, wantState connectivity.State) error { + for { + s := c.ClientConn.GetState() + if s == wantState { + return nil + } + if s == connectivity.Shutdown { + return trace.Errorf("spanner test client connection has shutdown") + } + if !c.ClientConn.WaitForStateChange(ctx, s) { + return ctx.Err() + } + } +} + +func MakeTestClient(ctx context.Context, config common.TestClientConfig) (*SpannerTestClient, error) { return makeTestClient(ctx, config, false) } -func makeTestClient(ctx context.Context, config common.TestClientConfig, useTLS bool) (*spanner.Client, error) { +func makeTestClient(ctx context.Context, config common.TestClientConfig, useTLS bool) (*SpannerTestClient, error) { databaseID, err := getDatabaseID(ctx, config.RouteToDatabase, config.AuthServer) if err != nil { return nil, trace.Wrap(err) @@ -68,13 +93,13 @@ func makeTestClient(ctx context.Context, config common.TestClientConfig, useTLS transportOpt = grpc.WithTransportCredentials(insecure.NewCredentials()) } + cc, err := grpc.NewClient(config.Address, transportOpt) + if err != nil { + return nil, trace.Wrap(err) + } + opts := []option.ClientOption{ - // dial with custom transport security - option.WithGRPCDialOption(transportOpt), - // create 1 connection - option.WithGRPCConnectionPool(1), - // connect to the Teleport endpoint - option.WithEndpoint(config.Address), + option.WithGRPCConn(cc), // client should not bring any GCP credentials option.WithoutAuthentication(), } @@ -86,7 +111,10 @@ func makeTestClient(ctx context.Context, config common.TestClientConfig, useTLS if err != nil { return nil, trace.Wrap(err) } - return clt, nil + return &SpannerTestClient{ + ClientConn: cc, + Client: clt, + }, nil } func getDatabaseID(ctx context.Context, route tlsca.RouteToDatabase, getter services.DatabaseServersGetter) (string, error) { diff --git a/lib/srv/db/spanner_test.go b/lib/srv/db/spanner_test.go index ca78f856b89e6..4af7fbdb46cb8 100644 --- a/lib/srv/db/spanner_test.go +++ b/lib/srv/db/spanner_test.go @@ -28,6 +28,7 @@ import ( gspanner "cloud.google.com/go/spanner" "github.com/stretchr/testify/require" + "google.golang.org/grpc/connectivity" "github.com/gravitational/teleport/api/types" "github.com/gravitational/teleport/api/types/events" @@ -234,7 +235,15 @@ func TestAuditSpanner(t *testing.T) { _ = localProxy.Close() }) - require.NoError(t, err) + require.NoError(t, clt.WaitForConnectionState(ctx, connectivity.Ready)) + reconnectingCh := make(chan bool) + go func() { + // we should observe the connection leave the "ready" state after + // it gets an access denied error. + ctx, cancel := context.WithTimeout(ctx, time.Second*10) + defer cancel() + reconnectingCh <- clt.ClientConn.WaitForStateChange(ctx, connectivity.Ready) + }() row, err := pingSpanner(ctx, clt, 42) require.Error(t, err) @@ -246,6 +255,7 @@ func TestAuditSpanner(t *testing.T) { require.True(t, ok) require.Equal(t, "googlesql", dbStart1.DatabaseName) + require.True(t, <-reconnectingCh, "timed out waiting for the spanner client to reconnect") row, err = pingSpanner(ctx, clt, 42) require.Error(t, err) require.ErrorContains(t, err, "access to db denied") @@ -308,7 +318,7 @@ func TestAuditSpanner(t *testing.T) { }) } -func pingSpanner(ctx context.Context, clt *gspanner.Client, want int64) (*gspanner.Row, error) { +func pingSpanner(ctx context.Context, clt *spanner.SpannerTestClient, want int64) (*gspanner.Row, error) { query := gspanner.NewStatement(fmt.Sprintf("SELECT %d", want)) rowIter := clt.Single().Query(ctx, query) defer rowIter.Stop() From e66ba6e9c0bd44e125f1195f5ea0687304d00993 Mon Sep 17 00:00:00 2001 From: Steven Martin Date: Tue, 3 Dec 2024 14:31:18 -0500 Subject: [PATCH 086/111] docs: include Oracle Exadata in faq entry (#49720) --- docs/pages/enroll-resources/database-access/faq.mdx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/pages/enroll-resources/database-access/faq.mdx b/docs/pages/enroll-resources/database-access/faq.mdx index eaf628f7fbf4e..eb27e867711c5 100644 --- a/docs/pages/enroll-resources/database-access/faq.mdx +++ b/docs/pages/enroll-resources/database-access/faq.mdx @@ -21,13 +21,14 @@ The Teleport Database Service currently supports the following protocols: - Redis - Snowflake -For PostgreSQL and MySQL, the following Cloud-hosted versions are supported in addition to self-hosted deployments: +For PostgreSQL, Oracle and MySQL, the following Cloud-hosted versions are supported in addition to self-hosted deployments: - Amazon RDS - Amazon Aurora (except for Amazon Aurora Serverless, which doesn't support IAM authentication) - Amazon Redshift - Google Cloud SQL - Azure Database +- Oracle Exadata See the available [guides](guides/guides.mdx) for all supported configurations. From a3f0e1052718e8a77fb5be5a546497e0f59e1c5a Mon Sep 17 00:00:00 2001 From: Steven Martin Date: Tue, 3 Dec 2024 14:58:44 -0500 Subject: [PATCH 087/111] docs: include Oracle Exadata in faq entry (#49720) From cd21ab349e4a9c131991118f85366eaf7b0ca3b8 Mon Sep 17 00:00:00 2001 From: Steven Martin Date: Tue, 3 Dec 2024 15:52:06 -0500 Subject: [PATCH 088/111] docs: motd and self-hosted db ca updates (#49709) --- .../self-hosted-introduction.mdx | 4 +- .../access-controls/authentication.mdx | 46 +++++++++++++++++++ 2 files changed, 48 insertions(+), 2 deletions(-) diff --git a/docs/pages/includes/database-access/self-hosted-introduction.mdx b/docs/pages/includes/database-access/self-hosted-introduction.mdx index da9db52cd28e3..5fcd5bd3e7f08 100644 --- a/docs/pages/includes/database-access/self-hosted-introduction.mdx +++ b/docs/pages/includes/database-access/self-hosted-introduction.mdx @@ -5,14 +5,14 @@ system](../../enroll-resources/database-access/rbac.mdx). The Teleport Database Service proxies traffic from database clients to self-hosted databases in your infrastructure. Teleport maintains a certificate -authority for database clients. You configure your database to trust the +authority (CA) for database clients. You configure your database to trust the Teleport database client CA, and the Teleport Database Service presents certificates signed by this CA when proxying user traffic. With this setup, there is no need to store long-lived credentials for self-hosted databases. Meanwhile, the Teleport Database Service verifies self-hosted databases by checking their TLS certificates against either the Teleport database CA or a -custom CA chosen by the user. +custom CA used with the database. In this guide, you will: diff --git a/docs/pages/reference/access-controls/authentication.mdx b/docs/pages/reference/access-controls/authentication.mdx index 3f99338ba2ea5..cd6f5f010e4c7 100644 --- a/docs/pages/reference/access-controls/authentication.mdx +++ b/docs/pages/reference/access-controls/authentication.mdx @@ -275,3 +275,49 @@ See [GitHub OAuth 2.0](../../admin-guides/access-controls/sso/github-sso.mdx) fo + +## Require displaying a message of the day + +Teleport can display a custom message of the day (MOTD) for users prior to authenticating +in the Teleport Web UI and CLI. + +### Self-Hosted + +Add the following to your Teleport configuration file, which is stored in +`/etc/teleport.yaml` by default. + +```yaml +auth_service: + message_of_the_day: | + Welcome to the Example Teleport Cluster + All activity is monitored and should follow organization policies +``` + +Restart the Teleport Auth Service instances to apply this change. + +### Teleport Enterprise Cloud/Dynamic + +Edit your `cluster_auth_preference` resource: + +```code +$ tctl edit cap +``` + +Ensure that the resource includes the `message_of_the_day` field: + +```yaml +kind: cluster_auth_preference +metadata: + name: cluster-auth-preference +spec: + message_of_the_day: | + Welcome to the Example Teleport Cluster + All activity is monitored and should follow organization policies + type: local + second_factor: "on" + webauthn: + rp_id: example.teleport.sh +version: v2 +``` + +Save and close the file in your editor to apply changes. From 17bd778bd2b1f0d99f90f15bfc729e693be6b5c6 Mon Sep 17 00:00:00 2001 From: Marco Dinis Date: Wed, 4 Dec 2024 09:13:58 +0000 Subject: [PATCH 089/111] Hostname validation: document invalid hostnames (#49653) --- docs/pages/admin-guides/management/guides/ec2-tags.mdx | 2 +- docs/pages/admin-guides/management/guides/gcp-tags.mdx | 2 +- lib/utils/utils_test.go | 10 ++++++++++ 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/docs/pages/admin-guides/management/guides/ec2-tags.mdx b/docs/pages/admin-guides/management/guides/ec2-tags.mdx index 6c4c64cb381df..31d857d523724 100644 --- a/docs/pages/admin-guides/management/guides/ec2-tags.mdx +++ b/docs/pages/admin-guides/management/guides/ec2-tags.mdx @@ -10,7 +10,7 @@ this way will have the `aws/` prefix. When the Teleport process starts, it fetch the instance metadata service and adds them as labels. The process will update the tags every hour, so newly created or deleted tags will be reflected in the labels. -If the tag `TeleportHostname` (case-sensitive) is present, its value will override the node's hostname. +If the tag `TeleportHostname` is present, its value (must be lower case) will override the node's hostname. ```bash $ tsh ls diff --git a/docs/pages/admin-guides/management/guides/gcp-tags.mdx b/docs/pages/admin-guides/management/guides/gcp-tags.mdx index 163756435f433..36aedd0e0218c 100644 --- a/docs/pages/admin-guides/management/guides/gcp-tags.mdx +++ b/docs/pages/admin-guides/management/guides/gcp-tags.mdx @@ -17,7 +17,7 @@ When the Teleport process starts, it fetches all tags and labels from the GCP API and adds them as labels. The process will update the tags every hour, so newly created or deleted tags will be reflected in the labels. -If the GCP label `TeleportHostname` (case-sensitive) is present, its value will override the node's hostname. This +If the GCP label `TeleportHostname` is present, its value (must be lower case) will override the node's hostname. This does not apply to GCP tags. ```bash diff --git a/lib/utils/utils_test.go b/lib/utils/utils_test.go index e1625915bb204..075d99b3f9e98 100644 --- a/lib/utils/utils_test.go +++ b/lib/utils/utils_test.go @@ -234,6 +234,16 @@ func TestIsValidHostname(t *testing.T) { hostname: "some-host-1.example.com", assert: require.True, }, + { + name: "only lower case works", + hostname: "only-lower-case-works", + assert: require.True, + }, + { + name: "mixed upper case fails", + hostname: "mixed-UPPER-CASE-fails", + assert: require.False, + }, { name: "one component", hostname: "example", From 4b7980396a53d340df8b1fc491fce6254b4f9b53 Mon Sep 17 00:00:00 2001 From: Alan Parra Date: Wed, 4 Dec 2024 11:50:39 -0300 Subject: [PATCH 090/111] chore: Bump Go to 1.22.10 (#49760) --- build.assets/versions.mk | 2 +- go.mod | 2 +- integrations/event-handler/go.mod | 2 +- integrations/terraform/go.mod | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/build.assets/versions.mk b/build.assets/versions.mk index 5277eaaeb7289..72240f4c4c1d9 100644 --- a/build.assets/versions.mk +++ b/build.assets/versions.mk @@ -3,7 +3,7 @@ # Keep versions in sync with devbox.json, when applicable. # Sync with devbox.json. -GOLANG_VERSION ?= go1.22.9 +GOLANG_VERSION ?= go1.22.10 GOLANGCI_LINT_VERSION ?= v1.61.0 NODE_VERSION ?= 20.18.0 diff --git a/go.mod b/go.mod index 1ce7842f297c1..3808bf2962f50 100644 --- a/go.mod +++ b/go.mod @@ -2,7 +2,7 @@ module github.com/gravitational/teleport go 1.21 -toolchain go1.22.9 +toolchain go1.22.10 require ( cloud.google.com/go/cloudsqlconn v1.9.0 diff --git a/integrations/event-handler/go.mod b/integrations/event-handler/go.mod index 0a1f127c409b3..eb39a836c00e8 100644 --- a/integrations/event-handler/go.mod +++ b/integrations/event-handler/go.mod @@ -2,7 +2,7 @@ module github.com/gravitational/teleport/integrations/event-handler go 1.21 -toolchain go1.22.9 +toolchain go1.22.10 require ( github.com/alecthomas/kong v0.9.0 diff --git a/integrations/terraform/go.mod b/integrations/terraform/go.mod index 4e45558f25c33..57305672963bf 100644 --- a/integrations/terraform/go.mod +++ b/integrations/terraform/go.mod @@ -2,7 +2,7 @@ module github.com/gravitational/teleport/integrations/terraform go 1.21 -toolchain go1.22.9 +toolchain go1.22.10 require ( github.com/gogo/protobuf v1.3.2 From 9f5714fce7e0042c4ea665971eba7eafe2b928e2 Mon Sep 17 00:00:00 2001 From: Alan Parra Date: Wed, 4 Dec 2024 12:31:01 -0300 Subject: [PATCH 091/111] [v15] Migrate to github.com/parquet-go/parquet-go v0.23.0 (#49766) * Migrate to github.com/parquet-go/parquet-go v0.23.0 * Update generated protos --- api/client/proto/event.pb.go | 8 +- api/gen/proto/go/assist/v1/assist.pb.go | 40 ++-- .../accessgraph/v1/authorized_key.pb.go | 8 +- .../teleport/accessgraph/v1/private_key.pb.go | 8 +- .../accessgraph/v1/secrets_service.pb.go | 18 +- .../teleport/accesslist/v1/accesslist.pb.go | 34 +-- .../accesslist/v1/accesslist_service.pb.go | 76 +++---- .../v1/access_monitoring_rules.pb.go | 28 +-- .../v1/access_monitoring_rules_service.pb.go | 4 +- .../go/teleport/auditlog/v1/auditlog.pb.go | 20 +- .../teleport/autoupdate/v1/autoupdate.pb.go | 12 +- .../autoupdate/v1/autoupdate_service.pb.go | 24 +- .../clusterconfig/v1/access_graph.pb.go | 8 +- .../v1/access_graph_settings.pb.go | 8 +- .../v1/clusterconfig_service.pb.go | 44 ++-- .../teleport/crownjewel/v1/crownjewel.pb.go | 14 +- .../crownjewel/v1/crownjewel_service.pb.go | 18 +- .../go/teleport/dbobject/v1/dbobject.pb.go | 8 +- .../dbobject/v1/dbobject_service.pb.go | 18 +- .../v1/dbobjectimportrule.pb.go | 14 +- .../v1/dbobjectimportrule_service.pb.go | 18 +- .../go/teleport/devicetrust/v1/assert.pb.go | 16 +- .../v1/authenticate_challenge.pb.go | 12 +- .../go/teleport/devicetrust/v1/device.pb.go | 8 +- .../v1/device_collected_data.pb.go | 6 +- .../devicetrust/v1/device_enroll_token.pb.go | 6 +- .../devicetrust/v1/device_profile.pb.go | 6 +- .../devicetrust/v1/device_source.pb.go | 6 +- .../devicetrust/v1/devicetrust_service.pb.go | 92 ++++---- .../go/teleport/devicetrust/v1/os_type.pb.go | 4 +- .../go/teleport/devicetrust/v1/tpm.pb.go | 12 +- .../go/teleport/devicetrust/v1/usage.pb.go | 6 +- .../devicetrust/v1/user_certificates.pb.go | 6 +- .../discoveryconfig/v1/discoveryconfig.pb.go | 12 +- .../v1/discoveryconfig_service.pb.go | 22 +- .../go/teleport/embedding/v1/embedding.pb.go | 6 +- .../v1/externalauditstorage.pb.go | 8 +- .../v1/externalauditstorage_service.pb.go | 44 ++-- .../go/teleport/header/v1/metadata.pb.go | 6 +- .../teleport/header/v1/resourceheader.pb.go | 6 +- .../integration/v1/awsoidc_service.pb.go | 56 ++--- .../integration/v1/integration_service.pb.go | 22 +- .../go/teleport/kube/v1/kube_service.pb.go | 8 +- .../v1/kubewaitingcontainer.pb.go | 8 +- .../v1/kubewaitingcontainer_service.pb.go | 14 +- .../proto/go/teleport/label/v1/label.pb.go | 6 +- .../go/teleport/loginrule/v1/loginrule.pb.go | 6 +- .../loginrule/v1/loginrule_service.pb.go | 20 +- .../proto/go/teleport/machineid/v1/bot.pb.go | 12 +- .../teleport/machineid/v1/bot_service.pb.go | 18 +- .../go/teleport/machineid/v1/federation.pb.go | 16 +- .../machineid/v1/federation_service.pb.go | 14 +- .../v1/workload_identity_service.pb.go | 12 +- .../notifications/v1/notifications.pb.go | 30 +-- .../v1/notifications_service.pb.go | 32 +-- .../go/teleport/okta/v1/okta_service.pb.go | 34 +-- .../teleport/plugins/v1/plugin_service.pb.go | 36 +-- .../resourceusage/v1/access_requests.pb.go | 6 +- .../resourceusage/v1/account_usage_type.pb.go | 4 +- .../resourceusage/v1/device_trust.pb.go | 6 +- .../v1/resourceusage_service.pb.go | 8 +- .../go/teleport/samlidp/v1/samlidp.pb.go | 14 +- .../go/teleport/scim/v1/scim_service.pb.go | 24 +- .../teleport/secreports/v1/secreports.pb.go | 16 +- .../secreports/v1/secreports_service.pb.go | 60 ++--- .../proto/go/teleport/trait/v1/trait.pb.go | 6 +- .../transport/v1/transport_service.pb.go | 26 +-- .../go/teleport/trust/v1/trust_service.pb.go | 28 +-- .../userloginstate/v1/userloginstate.pb.go | 8 +- .../v1/userloginstate_service.pb.go | 16 +- .../go/teleport/users/v1/users_service.pb.go | 26 +-- .../go/userpreferences/v1/access_graph.pb.go | 6 +- .../proto/go/userpreferences/v1/assist.pb.go | 6 +- .../v1/cluster_preferences.pb.go | 8 +- .../proto/go/userpreferences/v1/onboard.pb.go | 8 +- .../proto/go/userpreferences/v1/theme.pb.go | 4 +- .../v1/unified_resource_preferences.pb.go | 6 +- .../userpreferences/v1/userpreferences.pb.go | 12 +- .../v1alpha/access_graph_service.pb.go | 60 ++--- gen/proto/go/accessgraph/v1alpha/aws.pb.go | 68 +++--- gen/proto/go/accessgraph/v1alpha/entra.pb.go | 14 +- gen/proto/go/accessgraph/v1alpha/events.pb.go | 6 +- gen/proto/go/accessgraph/v1alpha/gitlab.pb.go | 24 +- gen/proto/go/accessgraph/v1alpha/graph.pb.go | 8 +- .../go/accessgraph/v1alpha/resources.pb.go | 18 +- gen/proto/go/prehog/v1/teleport.pb.go | 16 +- gen/proto/go/prehog/v1alpha/connect.pb.go | 28 +-- gen/proto/go/prehog/v1alpha/tbot.pb.go | 12 +- gen/proto/go/prehog/v1alpha/teleport.pb.go | 210 +++++++++--------- .../lib/teleterm/v1/access_request.pb.go | 14 +- .../go/teleport/lib/teleterm/v1/app.pb.go | 8 +- .../lib/teleterm/v1/auth_settings.pb.go | 8 +- .../go/teleport/lib/teleterm/v1/cluster.pb.go | 14 +- .../teleport/lib/teleterm/v1/database.pb.go | 6 +- .../go/teleport/lib/teleterm/v1/gateway.pb.go | 8 +- .../go/teleport/lib/teleterm/v1/kube.pb.go | 6 +- .../go/teleport/lib/teleterm/v1/label.pb.go | 6 +- .../go/teleport/lib/teleterm/v1/server.pb.go | 6 +- .../go/teleport/lib/teleterm/v1/service.pb.go | 160 ++++++------- .../lib/teleterm/v1/tshd_events_service.pb.go | 28 +-- .../lib/teleterm/v1/usage_events.pb.go | 6 +- go.mod | 14 +- go.sum | 29 ++- integrations/event-handler/go.mod | 4 +- integrations/event-handler/go.sum | 8 +- integrations/terraform/go.mod | 6 +- integrations/terraform/go.sum | 27 +-- lib/events/athena/consumer.go | 2 +- lib/events/athena/consumer_test.go | 2 +- lib/events/athena/querier.go | 2 +- lib/multiplexer/test/ping.pb.go | 8 +- 111 files changed, 1096 insertions(+), 1096 deletions(-) diff --git a/api/client/proto/event.pb.go b/api/client/proto/event.pb.go index 2e6962542ed11..2298cf7db82d7 100644 --- a/api/client/proto/event.pb.go +++ b/api/client/proto/event.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/legacy/client/proto/event.proto @@ -1335,7 +1335,7 @@ func file_teleport_legacy_client_proto_event_proto_rawDescGZIP() []byte { var file_teleport_legacy_client_proto_event_proto_enumTypes = make([]protoimpl.EnumInfo, 1) var file_teleport_legacy_client_proto_event_proto_msgTypes = make([]protoimpl.MessageInfo, 1) -var file_teleport_legacy_client_proto_event_proto_goTypes = []interface{}{ +var file_teleport_legacy_client_proto_event_proto_goTypes = []any{ (Operation)(0), // 0: proto.Operation (*Event)(nil), // 1: proto.Event (*types.ResourceHeader)(nil), // 2: types.ResourceHeader @@ -1465,7 +1465,7 @@ func file_teleport_legacy_client_proto_event_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_legacy_client_proto_event_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_legacy_client_proto_event_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*Event); i { case 0: return &v.state @@ -1478,7 +1478,7 @@ func file_teleport_legacy_client_proto_event_proto_init() { } } } - file_teleport_legacy_client_proto_event_proto_msgTypes[0].OneofWrappers = []interface{}{ + file_teleport_legacy_client_proto_event_proto_msgTypes[0].OneofWrappers = []any{ (*Event_ResourceHeader)(nil), (*Event_CertAuthority)(nil), (*Event_StaticTokens)(nil), diff --git a/api/gen/proto/go/assist/v1/assist.pb.go b/api/gen/proto/go/assist/v1/assist.pb.go index b19f99782914e..de0817fdee662 100644 --- a/api/gen/proto/go/assist/v1/assist.pb.go +++ b/api/gen/proto/go/assist/v1/assist.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/assist/v1/assist.proto @@ -1294,7 +1294,7 @@ func file_teleport_assist_v1_assist_proto_rawDescGZIP() []byte { } var file_teleport_assist_v1_assist_proto_msgTypes = make([]protoimpl.MessageInfo, 18) -var file_teleport_assist_v1_assist_proto_goTypes = []interface{}{ +var file_teleport_assist_v1_assist_proto_goTypes = []any{ (*GetAssistantMessagesRequest)(nil), // 0: teleport.assist.v1.GetAssistantMessagesRequest (*AssistantMessage)(nil), // 1: teleport.assist.v1.AssistantMessage (*CreateAssistantMessageRequest)(nil), // 2: teleport.assist.v1.CreateAssistantMessageRequest @@ -1357,7 +1357,7 @@ func file_teleport_assist_v1_assist_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_assist_v1_assist_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_assist_v1_assist_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*GetAssistantMessagesRequest); i { case 0: return &v.state @@ -1369,7 +1369,7 @@ func file_teleport_assist_v1_assist_proto_init() { return nil } } - file_teleport_assist_v1_assist_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_assist_v1_assist_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*AssistantMessage); i { case 0: return &v.state @@ -1381,7 +1381,7 @@ func file_teleport_assist_v1_assist_proto_init() { return nil } } - file_teleport_assist_v1_assist_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_teleport_assist_v1_assist_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*CreateAssistantMessageRequest); i { case 0: return &v.state @@ -1393,7 +1393,7 @@ func file_teleport_assist_v1_assist_proto_init() { return nil } } - file_teleport_assist_v1_assist_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_teleport_assist_v1_assist_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*GetAssistantMessagesResponse); i { case 0: return &v.state @@ -1405,7 +1405,7 @@ func file_teleport_assist_v1_assist_proto_init() { return nil } } - file_teleport_assist_v1_assist_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_teleport_assist_v1_assist_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*GetAssistantConversationsRequest); i { case 0: return &v.state @@ -1417,7 +1417,7 @@ func file_teleport_assist_v1_assist_proto_init() { return nil } } - file_teleport_assist_v1_assist_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_teleport_assist_v1_assist_proto_msgTypes[5].Exporter = func(v any, i int) any { switch v := v.(*ConversationInfo); i { case 0: return &v.state @@ -1429,7 +1429,7 @@ func file_teleport_assist_v1_assist_proto_init() { return nil } } - file_teleport_assist_v1_assist_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_teleport_assist_v1_assist_proto_msgTypes[6].Exporter = func(v any, i int) any { switch v := v.(*GetAssistantConversationsResponse); i { case 0: return &v.state @@ -1441,7 +1441,7 @@ func file_teleport_assist_v1_assist_proto_init() { return nil } } - file_teleport_assist_v1_assist_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_teleport_assist_v1_assist_proto_msgTypes[7].Exporter = func(v any, i int) any { switch v := v.(*CreateAssistantConversationRequest); i { case 0: return &v.state @@ -1453,7 +1453,7 @@ func file_teleport_assist_v1_assist_proto_init() { return nil } } - file_teleport_assist_v1_assist_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + file_teleport_assist_v1_assist_proto_msgTypes[8].Exporter = func(v any, i int) any { switch v := v.(*CreateAssistantConversationResponse); i { case 0: return &v.state @@ -1465,7 +1465,7 @@ func file_teleport_assist_v1_assist_proto_init() { return nil } } - file_teleport_assist_v1_assist_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + file_teleport_assist_v1_assist_proto_msgTypes[9].Exporter = func(v any, i int) any { switch v := v.(*UpdateAssistantConversationInfoRequest); i { case 0: return &v.state @@ -1477,7 +1477,7 @@ func file_teleport_assist_v1_assist_proto_init() { return nil } } - file_teleport_assist_v1_assist_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + file_teleport_assist_v1_assist_proto_msgTypes[10].Exporter = func(v any, i int) any { switch v := v.(*IsAssistEnabledRequest); i { case 0: return &v.state @@ -1489,7 +1489,7 @@ func file_teleport_assist_v1_assist_proto_init() { return nil } } - file_teleport_assist_v1_assist_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + file_teleport_assist_v1_assist_proto_msgTypes[11].Exporter = func(v any, i int) any { switch v := v.(*IsAssistEnabledResponse); i { case 0: return &v.state @@ -1501,7 +1501,7 @@ func file_teleport_assist_v1_assist_proto_init() { return nil } } - file_teleport_assist_v1_assist_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + file_teleport_assist_v1_assist_proto_msgTypes[12].Exporter = func(v any, i int) any { switch v := v.(*DeleteAssistantConversationRequest); i { case 0: return &v.state @@ -1513,7 +1513,7 @@ func file_teleport_assist_v1_assist_proto_init() { return nil } } - file_teleport_assist_v1_assist_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + file_teleport_assist_v1_assist_proto_msgTypes[13].Exporter = func(v any, i int) any { switch v := v.(*GetAssistantEmbeddingsRequest); i { case 0: return &v.state @@ -1525,7 +1525,7 @@ func file_teleport_assist_v1_assist_proto_init() { return nil } } - file_teleport_assist_v1_assist_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + file_teleport_assist_v1_assist_proto_msgTypes[14].Exporter = func(v any, i int) any { switch v := v.(*EmbeddedDocument); i { case 0: return &v.state @@ -1537,7 +1537,7 @@ func file_teleport_assist_v1_assist_proto_init() { return nil } } - file_teleport_assist_v1_assist_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + file_teleport_assist_v1_assist_proto_msgTypes[15].Exporter = func(v any, i int) any { switch v := v.(*GetAssistantEmbeddingsResponse); i { case 0: return &v.state @@ -1549,7 +1549,7 @@ func file_teleport_assist_v1_assist_proto_init() { return nil } } - file_teleport_assist_v1_assist_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + file_teleport_assist_v1_assist_proto_msgTypes[16].Exporter = func(v any, i int) any { switch v := v.(*SearchUnifiedResourcesRequest); i { case 0: return &v.state @@ -1561,7 +1561,7 @@ func file_teleport_assist_v1_assist_proto_init() { return nil } } - file_teleport_assist_v1_assist_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + file_teleport_assist_v1_assist_proto_msgTypes[17].Exporter = func(v any, i int) any { switch v := v.(*SearchUnifiedResourcesResponse); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/accessgraph/v1/authorized_key.pb.go b/api/gen/proto/go/teleport/accessgraph/v1/authorized_key.pb.go index 11a3a967d6dbc..a80ab32c12d25 100644 --- a/api/gen/proto/go/teleport/accessgraph/v1/authorized_key.pb.go +++ b/api/gen/proto/go/teleport/accessgraph/v1/authorized_key.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/access_graph/v1/authorized_key.proto @@ -264,7 +264,7 @@ func file_teleport_access_graph_v1_authorized_key_proto_rawDescGZIP() []byte { } var file_teleport_access_graph_v1_authorized_key_proto_msgTypes = make([]protoimpl.MessageInfo, 2) -var file_teleport_access_graph_v1_authorized_key_proto_goTypes = []interface{}{ +var file_teleport_access_graph_v1_authorized_key_proto_goTypes = []any{ (*AuthorizedKey)(nil), // 0: teleport.access_graph.v1.AuthorizedKey (*AuthorizedKeySpec)(nil), // 1: teleport.access_graph.v1.AuthorizedKeySpec (*v1.Metadata)(nil), // 2: teleport.header.v1.Metadata @@ -285,7 +285,7 @@ func file_teleport_access_graph_v1_authorized_key_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_access_graph_v1_authorized_key_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_access_graph_v1_authorized_key_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*AuthorizedKey); i { case 0: return &v.state @@ -297,7 +297,7 @@ func file_teleport_access_graph_v1_authorized_key_proto_init() { return nil } } - file_teleport_access_graph_v1_authorized_key_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_access_graph_v1_authorized_key_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*AuthorizedKeySpec); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/accessgraph/v1/private_key.pb.go b/api/gen/proto/go/teleport/accessgraph/v1/private_key.pb.go index e2d33a704c7e0..26e65b85e5eed 100644 --- a/api/gen/proto/go/teleport/accessgraph/v1/private_key.pb.go +++ b/api/gen/proto/go/teleport/accessgraph/v1/private_key.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/access_graph/v1/private_key.proto @@ -320,7 +320,7 @@ func file_teleport_access_graph_v1_private_key_proto_rawDescGZIP() []byte { var file_teleport_access_graph_v1_private_key_proto_enumTypes = make([]protoimpl.EnumInfo, 1) var file_teleport_access_graph_v1_private_key_proto_msgTypes = make([]protoimpl.MessageInfo, 2) -var file_teleport_access_graph_v1_private_key_proto_goTypes = []interface{}{ +var file_teleport_access_graph_v1_private_key_proto_goTypes = []any{ (PublicKeyMode)(0), // 0: teleport.access_graph.v1.PublicKeyMode (*PrivateKey)(nil), // 1: teleport.access_graph.v1.PrivateKey (*PrivateKeySpec)(nil), // 2: teleport.access_graph.v1.PrivateKeySpec @@ -343,7 +343,7 @@ func file_teleport_access_graph_v1_private_key_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_access_graph_v1_private_key_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_access_graph_v1_private_key_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*PrivateKey); i { case 0: return &v.state @@ -355,7 +355,7 @@ func file_teleport_access_graph_v1_private_key_proto_init() { return nil } } - file_teleport_access_graph_v1_private_key_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_access_graph_v1_private_key_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*PrivateKeySpec); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/accessgraph/v1/secrets_service.pb.go b/api/gen/proto/go/teleport/accessgraph/v1/secrets_service.pb.go index 954ea18e6d5af..0d2bd9af11f2b 100644 --- a/api/gen/proto/go/teleport/accessgraph/v1/secrets_service.pb.go +++ b/api/gen/proto/go/teleport/accessgraph/v1/secrets_service.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/access_graph/v1/secrets_service.proto @@ -498,7 +498,7 @@ func file_teleport_access_graph_v1_secrets_service_proto_rawDescGZIP() []byte { var file_teleport_access_graph_v1_secrets_service_proto_enumTypes = make([]protoimpl.EnumInfo, 1) var file_teleport_access_graph_v1_secrets_service_proto_msgTypes = make([]protoimpl.MessageInfo, 5) -var file_teleport_access_graph_v1_secrets_service_proto_goTypes = []interface{}{ +var file_teleport_access_graph_v1_secrets_service_proto_goTypes = []any{ (OperationType)(0), // 0: teleport.access_graph.v1.OperationType (*ReportAuthorizedKeysRequest)(nil), // 1: teleport.access_graph.v1.ReportAuthorizedKeysRequest (*ReportAuthorizedKeysResponse)(nil), // 2: teleport.access_graph.v1.ReportAuthorizedKeysResponse @@ -536,7 +536,7 @@ func file_teleport_access_graph_v1_secrets_service_proto_init() { file_teleport_access_graph_v1_authorized_key_proto_init() file_teleport_access_graph_v1_private_key_proto_init() if !protoimpl.UnsafeEnabled { - file_teleport_access_graph_v1_secrets_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_access_graph_v1_secrets_service_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*ReportAuthorizedKeysRequest); i { case 0: return &v.state @@ -548,7 +548,7 @@ func file_teleport_access_graph_v1_secrets_service_proto_init() { return nil } } - file_teleport_access_graph_v1_secrets_service_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_access_graph_v1_secrets_service_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*ReportAuthorizedKeysResponse); i { case 0: return &v.state @@ -560,7 +560,7 @@ func file_teleport_access_graph_v1_secrets_service_proto_init() { return nil } } - file_teleport_access_graph_v1_secrets_service_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_teleport_access_graph_v1_secrets_service_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*ReportSecretsRequest); i { case 0: return &v.state @@ -572,7 +572,7 @@ func file_teleport_access_graph_v1_secrets_service_proto_init() { return nil } } - file_teleport_access_graph_v1_secrets_service_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_teleport_access_graph_v1_secrets_service_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*ReportPrivateKeys); i { case 0: return &v.state @@ -584,7 +584,7 @@ func file_teleport_access_graph_v1_secrets_service_proto_init() { return nil } } - file_teleport_access_graph_v1_secrets_service_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_teleport_access_graph_v1_secrets_service_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*ReportSecretsResponse); i { case 0: return &v.state @@ -597,11 +597,11 @@ func file_teleport_access_graph_v1_secrets_service_proto_init() { } } } - file_teleport_access_graph_v1_secrets_service_proto_msgTypes[2].OneofWrappers = []interface{}{ + file_teleport_access_graph_v1_secrets_service_proto_msgTypes[2].OneofWrappers = []any{ (*ReportSecretsRequest_DeviceAssertion)(nil), (*ReportSecretsRequest_PrivateKeys)(nil), } - file_teleport_access_graph_v1_secrets_service_proto_msgTypes[4].OneofWrappers = []interface{}{ + file_teleport_access_graph_v1_secrets_service_proto_msgTypes[4].OneofWrappers = []any{ (*ReportSecretsResponse_DeviceAssertion)(nil), } type x struct{} diff --git a/api/gen/proto/go/teleport/accesslist/v1/accesslist.pb.go b/api/gen/proto/go/teleport/accesslist/v1/accesslist.pb.go index 607e5644f9d82..29d69216bb989 100644 --- a/api/gen/proto/go/teleport/accesslist/v1/accesslist.pb.go +++ b/api/gen/proto/go/teleport/accesslist/v1/accesslist.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/accesslist/v1/accesslist.proto @@ -1455,7 +1455,7 @@ func file_teleport_accesslist_v1_accesslist_proto_rawDescGZIP() []byte { var file_teleport_accesslist_v1_accesslist_proto_enumTypes = make([]protoimpl.EnumInfo, 3) var file_teleport_accesslist_v1_accesslist_proto_msgTypes = make([]protoimpl.MessageInfo, 14) -var file_teleport_accesslist_v1_accesslist_proto_goTypes = []interface{}{ +var file_teleport_accesslist_v1_accesslist_proto_goTypes = []any{ (ReviewFrequency)(0), // 0: teleport.accesslist.v1.ReviewFrequency (ReviewDayOfMonth)(0), // 1: teleport.accesslist.v1.ReviewDayOfMonth (IneligibleStatus)(0), // 2: teleport.accesslist.v1.IneligibleStatus @@ -1522,7 +1522,7 @@ func file_teleport_accesslist_v1_accesslist_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_accesslist_v1_accesslist_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accesslist_v1_accesslist_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*AccessList); i { case 0: return &v.state @@ -1534,7 +1534,7 @@ func file_teleport_accesslist_v1_accesslist_proto_init() { return nil } } - file_teleport_accesslist_v1_accesslist_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accesslist_v1_accesslist_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*AccessListSpec); i { case 0: return &v.state @@ -1546,7 +1546,7 @@ func file_teleport_accesslist_v1_accesslist_proto_init() { return nil } } - file_teleport_accesslist_v1_accesslist_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accesslist_v1_accesslist_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*AccessListOwner); i { case 0: return &v.state @@ -1558,7 +1558,7 @@ func file_teleport_accesslist_v1_accesslist_proto_init() { return nil } } - file_teleport_accesslist_v1_accesslist_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accesslist_v1_accesslist_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*AccessListAudit); i { case 0: return &v.state @@ -1570,7 +1570,7 @@ func file_teleport_accesslist_v1_accesslist_proto_init() { return nil } } - file_teleport_accesslist_v1_accesslist_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accesslist_v1_accesslist_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*Recurrence); i { case 0: return &v.state @@ -1582,7 +1582,7 @@ func file_teleport_accesslist_v1_accesslist_proto_init() { return nil } } - file_teleport_accesslist_v1_accesslist_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accesslist_v1_accesslist_proto_msgTypes[5].Exporter = func(v any, i int) any { switch v := v.(*Notifications); i { case 0: return &v.state @@ -1594,7 +1594,7 @@ func file_teleport_accesslist_v1_accesslist_proto_init() { return nil } } - file_teleport_accesslist_v1_accesslist_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accesslist_v1_accesslist_proto_msgTypes[6].Exporter = func(v any, i int) any { switch v := v.(*AccessListRequires); i { case 0: return &v.state @@ -1606,7 +1606,7 @@ func file_teleport_accesslist_v1_accesslist_proto_init() { return nil } } - file_teleport_accesslist_v1_accesslist_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accesslist_v1_accesslist_proto_msgTypes[7].Exporter = func(v any, i int) any { switch v := v.(*AccessListGrants); i { case 0: return &v.state @@ -1618,7 +1618,7 @@ func file_teleport_accesslist_v1_accesslist_proto_init() { return nil } } - file_teleport_accesslist_v1_accesslist_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accesslist_v1_accesslist_proto_msgTypes[8].Exporter = func(v any, i int) any { switch v := v.(*Member); i { case 0: return &v.state @@ -1630,7 +1630,7 @@ func file_teleport_accesslist_v1_accesslist_proto_init() { return nil } } - file_teleport_accesslist_v1_accesslist_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accesslist_v1_accesslist_proto_msgTypes[9].Exporter = func(v any, i int) any { switch v := v.(*MemberSpec); i { case 0: return &v.state @@ -1642,7 +1642,7 @@ func file_teleport_accesslist_v1_accesslist_proto_init() { return nil } } - file_teleport_accesslist_v1_accesslist_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accesslist_v1_accesslist_proto_msgTypes[10].Exporter = func(v any, i int) any { switch v := v.(*Review); i { case 0: return &v.state @@ -1654,7 +1654,7 @@ func file_teleport_accesslist_v1_accesslist_proto_init() { return nil } } - file_teleport_accesslist_v1_accesslist_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accesslist_v1_accesslist_proto_msgTypes[11].Exporter = func(v any, i int) any { switch v := v.(*ReviewSpec); i { case 0: return &v.state @@ -1666,7 +1666,7 @@ func file_teleport_accesslist_v1_accesslist_proto_init() { return nil } } - file_teleport_accesslist_v1_accesslist_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accesslist_v1_accesslist_proto_msgTypes[12].Exporter = func(v any, i int) any { switch v := v.(*ReviewChanges); i { case 0: return &v.state @@ -1678,7 +1678,7 @@ func file_teleport_accesslist_v1_accesslist_proto_init() { return nil } } - file_teleport_accesslist_v1_accesslist_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accesslist_v1_accesslist_proto_msgTypes[13].Exporter = func(v any, i int) any { switch v := v.(*AccessListStatus); i { case 0: return &v.state @@ -1691,7 +1691,7 @@ func file_teleport_accesslist_v1_accesslist_proto_init() { } } } - file_teleport_accesslist_v1_accesslist_proto_msgTypes[13].OneofWrappers = []interface{}{} + file_teleport_accesslist_v1_accesslist_proto_msgTypes[13].OneofWrappers = []any{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ diff --git a/api/gen/proto/go/teleport/accesslist/v1/accesslist_service.pb.go b/api/gen/proto/go/teleport/accesslist/v1/accesslist_service.pb.go index a5fce3e553e4b..734b0b43874b8 100644 --- a/api/gen/proto/go/teleport/accesslist/v1/accesslist_service.pb.go +++ b/api/gen/proto/go/teleport/accesslist/v1/accesslist_service.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/accesslist/v1/accesslist_service.proto @@ -2409,7 +2409,7 @@ func file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP() []byte { } var file_teleport_accesslist_v1_accesslist_service_proto_msgTypes = make([]protoimpl.MessageInfo, 36) -var file_teleport_accesslist_v1_accesslist_service_proto_goTypes = []interface{}{ +var file_teleport_accesslist_v1_accesslist_service_proto_goTypes = []any{ (*GetAccessListsRequest)(nil), // 0: teleport.accesslist.v1.GetAccessListsRequest (*GetAccessListsResponse)(nil), // 1: teleport.accesslist.v1.GetAccessListsResponse (*ListAccessListsRequest)(nil), // 2: teleport.accesslist.v1.ListAccessListsRequest @@ -2535,7 +2535,7 @@ func file_teleport_accesslist_v1_accesslist_service_proto_init() { } file_teleport_accesslist_v1_accesslist_proto_init() if !protoimpl.UnsafeEnabled { - file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*GetAccessListsRequest); i { case 0: return &v.state @@ -2547,7 +2547,7 @@ func file_teleport_accesslist_v1_accesslist_service_proto_init() { return nil } } - file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*GetAccessListsResponse); i { case 0: return &v.state @@ -2559,7 +2559,7 @@ func file_teleport_accesslist_v1_accesslist_service_proto_init() { return nil } } - file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*ListAccessListsRequest); i { case 0: return &v.state @@ -2571,7 +2571,7 @@ func file_teleport_accesslist_v1_accesslist_service_proto_init() { return nil } } - file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*ListAccessListsResponse); i { case 0: return &v.state @@ -2583,7 +2583,7 @@ func file_teleport_accesslist_v1_accesslist_service_proto_init() { return nil } } - file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*GetAccessListRequest); i { case 0: return &v.state @@ -2595,7 +2595,7 @@ func file_teleport_accesslist_v1_accesslist_service_proto_init() { return nil } } - file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[5].Exporter = func(v any, i int) any { switch v := v.(*UpsertAccessListRequest); i { case 0: return &v.state @@ -2607,7 +2607,7 @@ func file_teleport_accesslist_v1_accesslist_service_proto_init() { return nil } } - file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[6].Exporter = func(v any, i int) any { switch v := v.(*UpdateAccessListRequest); i { case 0: return &v.state @@ -2619,7 +2619,7 @@ func file_teleport_accesslist_v1_accesslist_service_proto_init() { return nil } } - file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[7].Exporter = func(v any, i int) any { switch v := v.(*DeleteAccessListRequest); i { case 0: return &v.state @@ -2631,7 +2631,7 @@ func file_teleport_accesslist_v1_accesslist_service_proto_init() { return nil } } - file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[8].Exporter = func(v any, i int) any { switch v := v.(*DeleteAllAccessListsRequest); i { case 0: return &v.state @@ -2643,7 +2643,7 @@ func file_teleport_accesslist_v1_accesslist_service_proto_init() { return nil } } - file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[9].Exporter = func(v any, i int) any { switch v := v.(*GetAccessListsToReviewRequest); i { case 0: return &v.state @@ -2655,7 +2655,7 @@ func file_teleport_accesslist_v1_accesslist_service_proto_init() { return nil } } - file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[10].Exporter = func(v any, i int) any { switch v := v.(*GetAccessListsToReviewResponse); i { case 0: return &v.state @@ -2667,7 +2667,7 @@ func file_teleport_accesslist_v1_accesslist_service_proto_init() { return nil } } - file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[11].Exporter = func(v any, i int) any { switch v := v.(*CountAccessListMembersRequest); i { case 0: return &v.state @@ -2679,7 +2679,7 @@ func file_teleport_accesslist_v1_accesslist_service_proto_init() { return nil } } - file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[12].Exporter = func(v any, i int) any { switch v := v.(*CountAccessListMembersResponse); i { case 0: return &v.state @@ -2691,7 +2691,7 @@ func file_teleport_accesslist_v1_accesslist_service_proto_init() { return nil } } - file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[13].Exporter = func(v any, i int) any { switch v := v.(*ListAccessListMembersRequest); i { case 0: return &v.state @@ -2703,7 +2703,7 @@ func file_teleport_accesslist_v1_accesslist_service_proto_init() { return nil } } - file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[14].Exporter = func(v any, i int) any { switch v := v.(*ListAccessListMembersResponse); i { case 0: return &v.state @@ -2715,7 +2715,7 @@ func file_teleport_accesslist_v1_accesslist_service_proto_init() { return nil } } - file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[15].Exporter = func(v any, i int) any { switch v := v.(*ListAllAccessListMembersRequest); i { case 0: return &v.state @@ -2727,7 +2727,7 @@ func file_teleport_accesslist_v1_accesslist_service_proto_init() { return nil } } - file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[16].Exporter = func(v any, i int) any { switch v := v.(*ListAllAccessListMembersResponse); i { case 0: return &v.state @@ -2739,7 +2739,7 @@ func file_teleport_accesslist_v1_accesslist_service_proto_init() { return nil } } - file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[17].Exporter = func(v any, i int) any { switch v := v.(*UpsertAccessListWithMembersRequest); i { case 0: return &v.state @@ -2751,7 +2751,7 @@ func file_teleport_accesslist_v1_accesslist_service_proto_init() { return nil } } - file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[18].Exporter = func(v any, i int) any { switch v := v.(*UpsertAccessListWithMembersResponse); i { case 0: return &v.state @@ -2763,7 +2763,7 @@ func file_teleport_accesslist_v1_accesslist_service_proto_init() { return nil } } - file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[19].Exporter = func(v any, i int) any { switch v := v.(*GetAccessListMemberRequest); i { case 0: return &v.state @@ -2775,7 +2775,7 @@ func file_teleport_accesslist_v1_accesslist_service_proto_init() { return nil } } - file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[20].Exporter = func(v any, i int) any { switch v := v.(*UpsertAccessListMemberRequest); i { case 0: return &v.state @@ -2787,7 +2787,7 @@ func file_teleport_accesslist_v1_accesslist_service_proto_init() { return nil } } - file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[21].Exporter = func(v any, i int) any { switch v := v.(*UpdateAccessListMemberRequest); i { case 0: return &v.state @@ -2799,7 +2799,7 @@ func file_teleport_accesslist_v1_accesslist_service_proto_init() { return nil } } - file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[22].Exporter = func(v any, i int) any { switch v := v.(*DeleteAccessListMemberRequest); i { case 0: return &v.state @@ -2811,7 +2811,7 @@ func file_teleport_accesslist_v1_accesslist_service_proto_init() { return nil } } - file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[23].Exporter = func(v any, i int) any { switch v := v.(*DeleteAllAccessListMembersForAccessListRequest); i { case 0: return &v.state @@ -2823,7 +2823,7 @@ func file_teleport_accesslist_v1_accesslist_service_proto_init() { return nil } } - file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[24].Exporter = func(v any, i int) any { switch v := v.(*DeleteAllAccessListMembersRequest); i { case 0: return &v.state @@ -2835,7 +2835,7 @@ func file_teleport_accesslist_v1_accesslist_service_proto_init() { return nil } } - file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[25].Exporter = func(v any, i int) any { switch v := v.(*ListAccessListReviewsRequest); i { case 0: return &v.state @@ -2847,7 +2847,7 @@ func file_teleport_accesslist_v1_accesslist_service_proto_init() { return nil } } - file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[26].Exporter = func(v any, i int) any { switch v := v.(*ListAccessListReviewsResponse); i { case 0: return &v.state @@ -2859,7 +2859,7 @@ func file_teleport_accesslist_v1_accesslist_service_proto_init() { return nil } } - file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[27].Exporter = func(v any, i int) any { switch v := v.(*ListAllAccessListReviewsRequest); i { case 0: return &v.state @@ -2871,7 +2871,7 @@ func file_teleport_accesslist_v1_accesslist_service_proto_init() { return nil } } - file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[28].Exporter = func(v any, i int) any { switch v := v.(*ListAllAccessListReviewsResponse); i { case 0: return &v.state @@ -2883,7 +2883,7 @@ func file_teleport_accesslist_v1_accesslist_service_proto_init() { return nil } } - file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[29].Exporter = func(v any, i int) any { switch v := v.(*CreateAccessListReviewRequest); i { case 0: return &v.state @@ -2895,7 +2895,7 @@ func file_teleport_accesslist_v1_accesslist_service_proto_init() { return nil } } - file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[30].Exporter = func(v any, i int) any { switch v := v.(*CreateAccessListReviewResponse); i { case 0: return &v.state @@ -2907,7 +2907,7 @@ func file_teleport_accesslist_v1_accesslist_service_proto_init() { return nil } } - file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[31].Exporter = func(v any, i int) any { switch v := v.(*DeleteAccessListReviewRequest); i { case 0: return &v.state @@ -2919,7 +2919,7 @@ func file_teleport_accesslist_v1_accesslist_service_proto_init() { return nil } } - file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[32].Exporter = func(v any, i int) any { switch v := v.(*AccessRequestPromoteRequest); i { case 0: return &v.state @@ -2931,7 +2931,7 @@ func file_teleport_accesslist_v1_accesslist_service_proto_init() { return nil } } - file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[33].Exporter = func(v any, i int) any { switch v := v.(*AccessRequestPromoteResponse); i { case 0: return &v.state @@ -2943,7 +2943,7 @@ func file_teleport_accesslist_v1_accesslist_service_proto_init() { return nil } } - file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[34].Exporter = func(v any, i int) any { switch v := v.(*GetSuggestedAccessListsRequest); i { case 0: return &v.state @@ -2955,7 +2955,7 @@ func file_teleport_accesslist_v1_accesslist_service_proto_init() { return nil } } - file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[35].Exporter = func(v any, i int) any { switch v := v.(*GetSuggestedAccessListsResponse); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/accessmonitoringrules/v1/access_monitoring_rules.pb.go b/api/gen/proto/go/teleport/accessmonitoringrules/v1/access_monitoring_rules.pb.go index 52e4d59e32fe2..b9534b748b78a 100644 --- a/api/gen/proto/go/teleport/accessmonitoringrules/v1/access_monitoring_rules.pb.go +++ b/api/gen/proto/go/teleport/accessmonitoringrules/v1/access_monitoring_rules.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/accessmonitoringrules/v1/access_monitoring_rules.proto @@ -886,7 +886,7 @@ func file_teleport_accessmonitoringrules_v1_access_monitoring_rules_proto_rawDes } var file_teleport_accessmonitoringrules_v1_access_monitoring_rules_proto_msgTypes = make([]protoimpl.MessageInfo, 12) -var file_teleport_accessmonitoringrules_v1_access_monitoring_rules_proto_goTypes = []interface{}{ +var file_teleport_accessmonitoringrules_v1_access_monitoring_rules_proto_goTypes = []any{ (*AccessMonitoringRule)(nil), // 0: teleport.accessmonitoringrules.v1.AccessMonitoringRule (*AccessMonitoringRuleSpec)(nil), // 1: teleport.accessmonitoringrules.v1.AccessMonitoringRuleSpec (*Notification)(nil), // 2: teleport.accessmonitoringrules.v1.Notification @@ -923,7 +923,7 @@ func file_teleport_accessmonitoringrules_v1_access_monitoring_rules_proto_init() return } if !protoimpl.UnsafeEnabled { - file_teleport_accessmonitoringrules_v1_access_monitoring_rules_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accessmonitoringrules_v1_access_monitoring_rules_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*AccessMonitoringRule); i { case 0: return &v.state @@ -935,7 +935,7 @@ func file_teleport_accessmonitoringrules_v1_access_monitoring_rules_proto_init() return nil } } - file_teleport_accessmonitoringrules_v1_access_monitoring_rules_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accessmonitoringrules_v1_access_monitoring_rules_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*AccessMonitoringRuleSpec); i { case 0: return &v.state @@ -947,7 +947,7 @@ func file_teleport_accessmonitoringrules_v1_access_monitoring_rules_proto_init() return nil } } - file_teleport_accessmonitoringrules_v1_access_monitoring_rules_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accessmonitoringrules_v1_access_monitoring_rules_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*Notification); i { case 0: return &v.state @@ -959,7 +959,7 @@ func file_teleport_accessmonitoringrules_v1_access_monitoring_rules_proto_init() return nil } } - file_teleport_accessmonitoringrules_v1_access_monitoring_rules_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accessmonitoringrules_v1_access_monitoring_rules_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*CreateAccessMonitoringRuleRequest); i { case 0: return &v.state @@ -971,7 +971,7 @@ func file_teleport_accessmonitoringrules_v1_access_monitoring_rules_proto_init() return nil } } - file_teleport_accessmonitoringrules_v1_access_monitoring_rules_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accessmonitoringrules_v1_access_monitoring_rules_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*UpdateAccessMonitoringRuleRequest); i { case 0: return &v.state @@ -983,7 +983,7 @@ func file_teleport_accessmonitoringrules_v1_access_monitoring_rules_proto_init() return nil } } - file_teleport_accessmonitoringrules_v1_access_monitoring_rules_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accessmonitoringrules_v1_access_monitoring_rules_proto_msgTypes[5].Exporter = func(v any, i int) any { switch v := v.(*UpsertAccessMonitoringRuleRequest); i { case 0: return &v.state @@ -995,7 +995,7 @@ func file_teleport_accessmonitoringrules_v1_access_monitoring_rules_proto_init() return nil } } - file_teleport_accessmonitoringrules_v1_access_monitoring_rules_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accessmonitoringrules_v1_access_monitoring_rules_proto_msgTypes[6].Exporter = func(v any, i int) any { switch v := v.(*GetAccessMonitoringRuleRequest); i { case 0: return &v.state @@ -1007,7 +1007,7 @@ func file_teleport_accessmonitoringrules_v1_access_monitoring_rules_proto_init() return nil } } - file_teleport_accessmonitoringrules_v1_access_monitoring_rules_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accessmonitoringrules_v1_access_monitoring_rules_proto_msgTypes[7].Exporter = func(v any, i int) any { switch v := v.(*DeleteAccessMonitoringRuleRequest); i { case 0: return &v.state @@ -1019,7 +1019,7 @@ func file_teleport_accessmonitoringrules_v1_access_monitoring_rules_proto_init() return nil } } - file_teleport_accessmonitoringrules_v1_access_monitoring_rules_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accessmonitoringrules_v1_access_monitoring_rules_proto_msgTypes[8].Exporter = func(v any, i int) any { switch v := v.(*ListAccessMonitoringRulesRequest); i { case 0: return &v.state @@ -1031,7 +1031,7 @@ func file_teleport_accessmonitoringrules_v1_access_monitoring_rules_proto_init() return nil } } - file_teleport_accessmonitoringrules_v1_access_monitoring_rules_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accessmonitoringrules_v1_access_monitoring_rules_proto_msgTypes[9].Exporter = func(v any, i int) any { switch v := v.(*ListAccessMonitoringRulesWithFilterRequest); i { case 0: return &v.state @@ -1043,7 +1043,7 @@ func file_teleport_accessmonitoringrules_v1_access_monitoring_rules_proto_init() return nil } } - file_teleport_accessmonitoringrules_v1_access_monitoring_rules_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accessmonitoringrules_v1_access_monitoring_rules_proto_msgTypes[10].Exporter = func(v any, i int) any { switch v := v.(*ListAccessMonitoringRulesResponse); i { case 0: return &v.state @@ -1055,7 +1055,7 @@ func file_teleport_accessmonitoringrules_v1_access_monitoring_rules_proto_init() return nil } } - file_teleport_accessmonitoringrules_v1_access_monitoring_rules_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accessmonitoringrules_v1_access_monitoring_rules_proto_msgTypes[11].Exporter = func(v any, i int) any { switch v := v.(*ListAccessMonitoringRulesWithFilterResponse); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/accessmonitoringrules/v1/access_monitoring_rules_service.pb.go b/api/gen/proto/go/teleport/accessmonitoringrules/v1/access_monitoring_rules_service.pb.go index 636b1cf7059e0..5e49489ce871a 100644 --- a/api/gen/proto/go/teleport/accessmonitoringrules/v1/access_monitoring_rules_service.pb.go +++ b/api/gen/proto/go/teleport/accessmonitoringrules/v1/access_monitoring_rules_service.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/accessmonitoringrules/v1/access_monitoring_rules_service.proto @@ -132,7 +132,7 @@ var file_teleport_accessmonitoringrules_v1_access_monitoring_rules_service_proto 0x33, } -var file_teleport_accessmonitoringrules_v1_access_monitoring_rules_service_proto_goTypes = []interface{}{ +var file_teleport_accessmonitoringrules_v1_access_monitoring_rules_service_proto_goTypes = []any{ (*CreateAccessMonitoringRuleRequest)(nil), // 0: teleport.accessmonitoringrules.v1.CreateAccessMonitoringRuleRequest (*UpdateAccessMonitoringRuleRequest)(nil), // 1: teleport.accessmonitoringrules.v1.UpdateAccessMonitoringRuleRequest (*UpsertAccessMonitoringRuleRequest)(nil), // 2: teleport.accessmonitoringrules.v1.UpsertAccessMonitoringRuleRequest diff --git a/api/gen/proto/go/teleport/auditlog/v1/auditlog.pb.go b/api/gen/proto/go/teleport/auditlog/v1/auditlog.pb.go index f3d9547c44855..4fb20ac18474d 100644 --- a/api/gen/proto/go/teleport/auditlog/v1/auditlog.pb.go +++ b/api/gen/proto/go/teleport/auditlog/v1/auditlog.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/auditlog/v1/auditlog.proto @@ -757,7 +757,7 @@ func file_teleport_auditlog_v1_auditlog_proto_rawDescGZIP() []byte { var file_teleport_auditlog_v1_auditlog_proto_enumTypes = make([]protoimpl.EnumInfo, 1) var file_teleport_auditlog_v1_auditlog_proto_msgTypes = make([]protoimpl.MessageInfo, 8) -var file_teleport_auditlog_v1_auditlog_proto_goTypes = []interface{}{ +var file_teleport_auditlog_v1_auditlog_proto_goTypes = []any{ (Order)(0), // 0: teleport.auditlog.v1.Order (*StreamUnstructuredSessionEventsRequest)(nil), // 1: teleport.auditlog.v1.StreamUnstructuredSessionEventsRequest (*GetUnstructuredEventsRequest)(nil), // 2: teleport.auditlog.v1.GetUnstructuredEventsRequest @@ -801,7 +801,7 @@ func file_teleport_auditlog_v1_auditlog_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_auditlog_v1_auditlog_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_auditlog_v1_auditlog_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*StreamUnstructuredSessionEventsRequest); i { case 0: return &v.state @@ -813,7 +813,7 @@ func file_teleport_auditlog_v1_auditlog_proto_init() { return nil } } - file_teleport_auditlog_v1_auditlog_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_auditlog_v1_auditlog_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*GetUnstructuredEventsRequest); i { case 0: return &v.state @@ -825,7 +825,7 @@ func file_teleport_auditlog_v1_auditlog_proto_init() { return nil } } - file_teleport_auditlog_v1_auditlog_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_teleport_auditlog_v1_auditlog_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*EventsUnstructured); i { case 0: return &v.state @@ -837,7 +837,7 @@ func file_teleport_auditlog_v1_auditlog_proto_init() { return nil } } - file_teleport_auditlog_v1_auditlog_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_teleport_auditlog_v1_auditlog_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*ExportUnstructuredEventsRequest); i { case 0: return &v.state @@ -849,7 +849,7 @@ func file_teleport_auditlog_v1_auditlog_proto_init() { return nil } } - file_teleport_auditlog_v1_auditlog_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_teleport_auditlog_v1_auditlog_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*ExportEventUnstructured); i { case 0: return &v.state @@ -861,7 +861,7 @@ func file_teleport_auditlog_v1_auditlog_proto_init() { return nil } } - file_teleport_auditlog_v1_auditlog_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_teleport_auditlog_v1_auditlog_proto_msgTypes[5].Exporter = func(v any, i int) any { switch v := v.(*EventUnstructured); i { case 0: return &v.state @@ -873,7 +873,7 @@ func file_teleport_auditlog_v1_auditlog_proto_init() { return nil } } - file_teleport_auditlog_v1_auditlog_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_teleport_auditlog_v1_auditlog_proto_msgTypes[6].Exporter = func(v any, i int) any { switch v := v.(*GetEventExportChunksRequest); i { case 0: return &v.state @@ -885,7 +885,7 @@ func file_teleport_auditlog_v1_auditlog_proto_init() { return nil } } - file_teleport_auditlog_v1_auditlog_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_teleport_auditlog_v1_auditlog_proto_msgTypes[7].Exporter = func(v any, i int) any { switch v := v.(*EventExportChunk); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/autoupdate/v1/autoupdate.pb.go b/api/gen/proto/go/teleport/autoupdate/v1/autoupdate.pb.go index eff70443d2f28..3d1d62b82fbdc 100644 --- a/api/gen/proto/go/teleport/autoupdate/v1/autoupdate.pb.go +++ b/api/gen/proto/go/teleport/autoupdate/v1/autoupdate.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/autoupdate/v1/autoupdate.proto @@ -361,7 +361,7 @@ func file_teleport_autoupdate_v1_autoupdate_proto_rawDescGZIP() []byte { } var file_teleport_autoupdate_v1_autoupdate_proto_msgTypes = make([]protoimpl.MessageInfo, 4) -var file_teleport_autoupdate_v1_autoupdate_proto_goTypes = []interface{}{ +var file_teleport_autoupdate_v1_autoupdate_proto_goTypes = []any{ (*AutoUpdateConfig)(nil), // 0: teleport.autoupdate.v1.AutoUpdateConfig (*AutoUpdateConfigSpec)(nil), // 1: teleport.autoupdate.v1.AutoUpdateConfigSpec (*AutoUpdateVersion)(nil), // 2: teleport.autoupdate.v1.AutoUpdateVersion @@ -386,7 +386,7 @@ func file_teleport_autoupdate_v1_autoupdate_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_autoupdate_v1_autoupdate_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_autoupdate_v1_autoupdate_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*AutoUpdateConfig); i { case 0: return &v.state @@ -398,7 +398,7 @@ func file_teleport_autoupdate_v1_autoupdate_proto_init() { return nil } } - file_teleport_autoupdate_v1_autoupdate_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_autoupdate_v1_autoupdate_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*AutoUpdateConfigSpec); i { case 0: return &v.state @@ -410,7 +410,7 @@ func file_teleport_autoupdate_v1_autoupdate_proto_init() { return nil } } - file_teleport_autoupdate_v1_autoupdate_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_teleport_autoupdate_v1_autoupdate_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*AutoUpdateVersion); i { case 0: return &v.state @@ -422,7 +422,7 @@ func file_teleport_autoupdate_v1_autoupdate_proto_init() { return nil } } - file_teleport_autoupdate_v1_autoupdate_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_teleport_autoupdate_v1_autoupdate_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*AutoUpdateVersionSpec); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/autoupdate/v1/autoupdate_service.pb.go b/api/gen/proto/go/teleport/autoupdate/v1/autoupdate_service.pb.go index 92d3898b1e75f..afe88216dd6bc 100644 --- a/api/gen/proto/go/teleport/autoupdate/v1/autoupdate_service.pb.go +++ b/api/gen/proto/go/teleport/autoupdate/v1/autoupdate_service.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/autoupdate/v1/autoupdate_service.proto @@ -634,7 +634,7 @@ func file_teleport_autoupdate_v1_autoupdate_service_proto_rawDescGZIP() []byte { } var file_teleport_autoupdate_v1_autoupdate_service_proto_msgTypes = make([]protoimpl.MessageInfo, 10) -var file_teleport_autoupdate_v1_autoupdate_service_proto_goTypes = []interface{}{ +var file_teleport_autoupdate_v1_autoupdate_service_proto_goTypes = []any{ (*GetAutoUpdateConfigRequest)(nil), // 0: teleport.autoupdate.v1.GetAutoUpdateConfigRequest (*CreateAutoUpdateConfigRequest)(nil), // 1: teleport.autoupdate.v1.CreateAutoUpdateConfigRequest (*UpdateAutoUpdateConfigRequest)(nil), // 2: teleport.autoupdate.v1.UpdateAutoUpdateConfigRequest @@ -690,7 +690,7 @@ func file_teleport_autoupdate_v1_autoupdate_service_proto_init() { } file_teleport_autoupdate_v1_autoupdate_proto_init() if !protoimpl.UnsafeEnabled { - file_teleport_autoupdate_v1_autoupdate_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_autoupdate_v1_autoupdate_service_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*GetAutoUpdateConfigRequest); i { case 0: return &v.state @@ -702,7 +702,7 @@ func file_teleport_autoupdate_v1_autoupdate_service_proto_init() { return nil } } - file_teleport_autoupdate_v1_autoupdate_service_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_autoupdate_v1_autoupdate_service_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*CreateAutoUpdateConfigRequest); i { case 0: return &v.state @@ -714,7 +714,7 @@ func file_teleport_autoupdate_v1_autoupdate_service_proto_init() { return nil } } - file_teleport_autoupdate_v1_autoupdate_service_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_teleport_autoupdate_v1_autoupdate_service_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*UpdateAutoUpdateConfigRequest); i { case 0: return &v.state @@ -726,7 +726,7 @@ func file_teleport_autoupdate_v1_autoupdate_service_proto_init() { return nil } } - file_teleport_autoupdate_v1_autoupdate_service_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_teleport_autoupdate_v1_autoupdate_service_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*UpsertAutoUpdateConfigRequest); i { case 0: return &v.state @@ -738,7 +738,7 @@ func file_teleport_autoupdate_v1_autoupdate_service_proto_init() { return nil } } - file_teleport_autoupdate_v1_autoupdate_service_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_teleport_autoupdate_v1_autoupdate_service_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*DeleteAutoUpdateConfigRequest); i { case 0: return &v.state @@ -750,7 +750,7 @@ func file_teleport_autoupdate_v1_autoupdate_service_proto_init() { return nil } } - file_teleport_autoupdate_v1_autoupdate_service_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_teleport_autoupdate_v1_autoupdate_service_proto_msgTypes[5].Exporter = func(v any, i int) any { switch v := v.(*GetAutoUpdateVersionRequest); i { case 0: return &v.state @@ -762,7 +762,7 @@ func file_teleport_autoupdate_v1_autoupdate_service_proto_init() { return nil } } - file_teleport_autoupdate_v1_autoupdate_service_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_teleport_autoupdate_v1_autoupdate_service_proto_msgTypes[6].Exporter = func(v any, i int) any { switch v := v.(*CreateAutoUpdateVersionRequest); i { case 0: return &v.state @@ -774,7 +774,7 @@ func file_teleport_autoupdate_v1_autoupdate_service_proto_init() { return nil } } - file_teleport_autoupdate_v1_autoupdate_service_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_teleport_autoupdate_v1_autoupdate_service_proto_msgTypes[7].Exporter = func(v any, i int) any { switch v := v.(*UpdateAutoUpdateVersionRequest); i { case 0: return &v.state @@ -786,7 +786,7 @@ func file_teleport_autoupdate_v1_autoupdate_service_proto_init() { return nil } } - file_teleport_autoupdate_v1_autoupdate_service_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + file_teleport_autoupdate_v1_autoupdate_service_proto_msgTypes[8].Exporter = func(v any, i int) any { switch v := v.(*UpsertAutoUpdateVersionRequest); i { case 0: return &v.state @@ -798,7 +798,7 @@ func file_teleport_autoupdate_v1_autoupdate_service_proto_init() { return nil } } - file_teleport_autoupdate_v1_autoupdate_service_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + file_teleport_autoupdate_v1_autoupdate_service_proto_msgTypes[9].Exporter = func(v any, i int) any { switch v := v.(*DeleteAutoUpdateVersionRequest); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/clusterconfig/v1/access_graph.pb.go b/api/gen/proto/go/teleport/clusterconfig/v1/access_graph.pb.go index 263c852cdf155..6a3ea8e7dddb5 100644 --- a/api/gen/proto/go/teleport/clusterconfig/v1/access_graph.pb.go +++ b/api/gen/proto/go/teleport/clusterconfig/v1/access_graph.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/clusterconfig/v1/access_graph.proto @@ -219,7 +219,7 @@ func file_teleport_clusterconfig_v1_access_graph_proto_rawDescGZIP() []byte { } var file_teleport_clusterconfig_v1_access_graph_proto_msgTypes = make([]protoimpl.MessageInfo, 2) -var file_teleport_clusterconfig_v1_access_graph_proto_goTypes = []interface{}{ +var file_teleport_clusterconfig_v1_access_graph_proto_goTypes = []any{ (*AccessGraphConfig)(nil), // 0: teleport.clusterconfig.v1.AccessGraphConfig (*AccessGraphSecretsScanConfiguration)(nil), // 1: teleport.clusterconfig.v1.AccessGraphSecretsScanConfiguration } @@ -238,7 +238,7 @@ func file_teleport_clusterconfig_v1_access_graph_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_clusterconfig_v1_access_graph_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_clusterconfig_v1_access_graph_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*AccessGraphConfig); i { case 0: return &v.state @@ -250,7 +250,7 @@ func file_teleport_clusterconfig_v1_access_graph_proto_init() { return nil } } - file_teleport_clusterconfig_v1_access_graph_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_clusterconfig_v1_access_graph_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*AccessGraphSecretsScanConfiguration); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/clusterconfig/v1/access_graph_settings.pb.go b/api/gen/proto/go/teleport/clusterconfig/v1/access_graph_settings.pb.go index 93c3141620969..dcc4ea5c0b255 100644 --- a/api/gen/proto/go/teleport/clusterconfig/v1/access_graph_settings.pb.go +++ b/api/gen/proto/go/teleport/clusterconfig/v1/access_graph_settings.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/clusterconfig/v1/access_graph_settings.proto @@ -289,7 +289,7 @@ func file_teleport_clusterconfig_v1_access_graph_settings_proto_rawDescGZIP() [] var file_teleport_clusterconfig_v1_access_graph_settings_proto_enumTypes = make([]protoimpl.EnumInfo, 1) var file_teleport_clusterconfig_v1_access_graph_settings_proto_msgTypes = make([]protoimpl.MessageInfo, 2) -var file_teleport_clusterconfig_v1_access_graph_settings_proto_goTypes = []interface{}{ +var file_teleport_clusterconfig_v1_access_graph_settings_proto_goTypes = []any{ (AccessGraphSecretsScanConfig)(0), // 0: teleport.clusterconfig.v1.AccessGraphSecretsScanConfig (*AccessGraphSettings)(nil), // 1: teleport.clusterconfig.v1.AccessGraphSettings (*AccessGraphSettingsSpec)(nil), // 2: teleport.clusterconfig.v1.AccessGraphSettingsSpec @@ -312,7 +312,7 @@ func file_teleport_clusterconfig_v1_access_graph_settings_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_clusterconfig_v1_access_graph_settings_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_clusterconfig_v1_access_graph_settings_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*AccessGraphSettings); i { case 0: return &v.state @@ -324,7 +324,7 @@ func file_teleport_clusterconfig_v1_access_graph_settings_proto_init() { return nil } } - file_teleport_clusterconfig_v1_access_graph_settings_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_clusterconfig_v1_access_graph_settings_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*AccessGraphSettingsSpec); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/clusterconfig/v1/clusterconfig_service.pb.go b/api/gen/proto/go/teleport/clusterconfig/v1/clusterconfig_service.pb.go index 16fd98fa757f8..4cdf6f55c1ed4 100644 --- a/api/gen/proto/go/teleport/clusterconfig/v1/clusterconfig_service.pb.go +++ b/api/gen/proto/go/teleport/clusterconfig/v1/clusterconfig_service.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/clusterconfig/v1/clusterconfig_service.proto @@ -1195,7 +1195,7 @@ func file_teleport_clusterconfig_v1_clusterconfig_service_proto_rawDescGZIP() [] } var file_teleport_clusterconfig_v1_clusterconfig_service_proto_msgTypes = make([]protoimpl.MessageInfo, 20) -var file_teleport_clusterconfig_v1_clusterconfig_service_proto_goTypes = []interface{}{ +var file_teleport_clusterconfig_v1_clusterconfig_service_proto_goTypes = []any{ (*GetClusterNetworkingConfigRequest)(nil), // 0: teleport.clusterconfig.v1.GetClusterNetworkingConfigRequest (*UpdateClusterNetworkingConfigRequest)(nil), // 1: teleport.clusterconfig.v1.UpdateClusterNetworkingConfigRequest (*UpsertClusterNetworkingConfigRequest)(nil), // 2: teleport.clusterconfig.v1.UpsertClusterNetworkingConfigRequest @@ -1287,7 +1287,7 @@ func file_teleport_clusterconfig_v1_clusterconfig_service_proto_init() { file_teleport_clusterconfig_v1_access_graph_proto_init() file_teleport_clusterconfig_v1_access_graph_settings_proto_init() if !protoimpl.UnsafeEnabled { - file_teleport_clusterconfig_v1_clusterconfig_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_clusterconfig_v1_clusterconfig_service_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*GetClusterNetworkingConfigRequest); i { case 0: return &v.state @@ -1299,7 +1299,7 @@ func file_teleport_clusterconfig_v1_clusterconfig_service_proto_init() { return nil } } - file_teleport_clusterconfig_v1_clusterconfig_service_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_clusterconfig_v1_clusterconfig_service_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*UpdateClusterNetworkingConfigRequest); i { case 0: return &v.state @@ -1311,7 +1311,7 @@ func file_teleport_clusterconfig_v1_clusterconfig_service_proto_init() { return nil } } - file_teleport_clusterconfig_v1_clusterconfig_service_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_teleport_clusterconfig_v1_clusterconfig_service_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*UpsertClusterNetworkingConfigRequest); i { case 0: return &v.state @@ -1323,7 +1323,7 @@ func file_teleport_clusterconfig_v1_clusterconfig_service_proto_init() { return nil } } - file_teleport_clusterconfig_v1_clusterconfig_service_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_teleport_clusterconfig_v1_clusterconfig_service_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*ResetClusterNetworkingConfigRequest); i { case 0: return &v.state @@ -1335,7 +1335,7 @@ func file_teleport_clusterconfig_v1_clusterconfig_service_proto_init() { return nil } } - file_teleport_clusterconfig_v1_clusterconfig_service_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_teleport_clusterconfig_v1_clusterconfig_service_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*GetSessionRecordingConfigRequest); i { case 0: return &v.state @@ -1347,7 +1347,7 @@ func file_teleport_clusterconfig_v1_clusterconfig_service_proto_init() { return nil } } - file_teleport_clusterconfig_v1_clusterconfig_service_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_teleport_clusterconfig_v1_clusterconfig_service_proto_msgTypes[5].Exporter = func(v any, i int) any { switch v := v.(*UpdateSessionRecordingConfigRequest); i { case 0: return &v.state @@ -1359,7 +1359,7 @@ func file_teleport_clusterconfig_v1_clusterconfig_service_proto_init() { return nil } } - file_teleport_clusterconfig_v1_clusterconfig_service_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_teleport_clusterconfig_v1_clusterconfig_service_proto_msgTypes[6].Exporter = func(v any, i int) any { switch v := v.(*UpsertSessionRecordingConfigRequest); i { case 0: return &v.state @@ -1371,7 +1371,7 @@ func file_teleport_clusterconfig_v1_clusterconfig_service_proto_init() { return nil } } - file_teleport_clusterconfig_v1_clusterconfig_service_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_teleport_clusterconfig_v1_clusterconfig_service_proto_msgTypes[7].Exporter = func(v any, i int) any { switch v := v.(*ResetSessionRecordingConfigRequest); i { case 0: return &v.state @@ -1383,7 +1383,7 @@ func file_teleport_clusterconfig_v1_clusterconfig_service_proto_init() { return nil } } - file_teleport_clusterconfig_v1_clusterconfig_service_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + file_teleport_clusterconfig_v1_clusterconfig_service_proto_msgTypes[8].Exporter = func(v any, i int) any { switch v := v.(*GetAuthPreferenceRequest); i { case 0: return &v.state @@ -1395,7 +1395,7 @@ func file_teleport_clusterconfig_v1_clusterconfig_service_proto_init() { return nil } } - file_teleport_clusterconfig_v1_clusterconfig_service_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + file_teleport_clusterconfig_v1_clusterconfig_service_proto_msgTypes[9].Exporter = func(v any, i int) any { switch v := v.(*UpdateAuthPreferenceRequest); i { case 0: return &v.state @@ -1407,7 +1407,7 @@ func file_teleport_clusterconfig_v1_clusterconfig_service_proto_init() { return nil } } - file_teleport_clusterconfig_v1_clusterconfig_service_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + file_teleport_clusterconfig_v1_clusterconfig_service_proto_msgTypes[10].Exporter = func(v any, i int) any { switch v := v.(*UpsertAuthPreferenceRequest); i { case 0: return &v.state @@ -1419,7 +1419,7 @@ func file_teleport_clusterconfig_v1_clusterconfig_service_proto_init() { return nil } } - file_teleport_clusterconfig_v1_clusterconfig_service_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + file_teleport_clusterconfig_v1_clusterconfig_service_proto_msgTypes[11].Exporter = func(v any, i int) any { switch v := v.(*ResetAuthPreferenceRequest); i { case 0: return &v.state @@ -1431,7 +1431,7 @@ func file_teleport_clusterconfig_v1_clusterconfig_service_proto_init() { return nil } } - file_teleport_clusterconfig_v1_clusterconfig_service_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + file_teleport_clusterconfig_v1_clusterconfig_service_proto_msgTypes[12].Exporter = func(v any, i int) any { switch v := v.(*GetClusterAuditConfigRequest); i { case 0: return &v.state @@ -1443,7 +1443,7 @@ func file_teleport_clusterconfig_v1_clusterconfig_service_proto_init() { return nil } } - file_teleport_clusterconfig_v1_clusterconfig_service_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + file_teleport_clusterconfig_v1_clusterconfig_service_proto_msgTypes[13].Exporter = func(v any, i int) any { switch v := v.(*GetClusterAccessGraphConfigRequest); i { case 0: return &v.state @@ -1455,7 +1455,7 @@ func file_teleport_clusterconfig_v1_clusterconfig_service_proto_init() { return nil } } - file_teleport_clusterconfig_v1_clusterconfig_service_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + file_teleport_clusterconfig_v1_clusterconfig_service_proto_msgTypes[14].Exporter = func(v any, i int) any { switch v := v.(*GetClusterAccessGraphConfigResponse); i { case 0: return &v.state @@ -1467,7 +1467,7 @@ func file_teleport_clusterconfig_v1_clusterconfig_service_proto_init() { return nil } } - file_teleport_clusterconfig_v1_clusterconfig_service_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + file_teleport_clusterconfig_v1_clusterconfig_service_proto_msgTypes[15].Exporter = func(v any, i int) any { switch v := v.(*GetAccessGraphSettingsRequest); i { case 0: return &v.state @@ -1479,7 +1479,7 @@ func file_teleport_clusterconfig_v1_clusterconfig_service_proto_init() { return nil } } - file_teleport_clusterconfig_v1_clusterconfig_service_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + file_teleport_clusterconfig_v1_clusterconfig_service_proto_msgTypes[16].Exporter = func(v any, i int) any { switch v := v.(*CreateAccessGraphSettingsRequest); i { case 0: return &v.state @@ -1491,7 +1491,7 @@ func file_teleport_clusterconfig_v1_clusterconfig_service_proto_init() { return nil } } - file_teleport_clusterconfig_v1_clusterconfig_service_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + file_teleport_clusterconfig_v1_clusterconfig_service_proto_msgTypes[17].Exporter = func(v any, i int) any { switch v := v.(*UpdateAccessGraphSettingsRequest); i { case 0: return &v.state @@ -1503,7 +1503,7 @@ func file_teleport_clusterconfig_v1_clusterconfig_service_proto_init() { return nil } } - file_teleport_clusterconfig_v1_clusterconfig_service_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + file_teleport_clusterconfig_v1_clusterconfig_service_proto_msgTypes[18].Exporter = func(v any, i int) any { switch v := v.(*UpsertAccessGraphSettingsRequest); i { case 0: return &v.state @@ -1515,7 +1515,7 @@ func file_teleport_clusterconfig_v1_clusterconfig_service_proto_init() { return nil } } - file_teleport_clusterconfig_v1_clusterconfig_service_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + file_teleport_clusterconfig_v1_clusterconfig_service_proto_msgTypes[19].Exporter = func(v any, i int) any { switch v := v.(*ResetAccessGraphSettingsRequest); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/crownjewel/v1/crownjewel.pb.go b/api/gen/proto/go/teleport/crownjewel/v1/crownjewel.pb.go index 6ddfa5028e2d7..6546467186699 100644 --- a/api/gen/proto/go/teleport/crownjewel/v1/crownjewel.pb.go +++ b/api/gen/proto/go/teleport/crownjewel/v1/crownjewel.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/crownjewel/v1/crownjewel.proto @@ -482,7 +482,7 @@ func file_teleport_crownjewel_v1_crownjewel_proto_rawDescGZIP() []byte { } var file_teleport_crownjewel_v1_crownjewel_proto_msgTypes = make([]protoimpl.MessageInfo, 5) -var file_teleport_crownjewel_v1_crownjewel_proto_goTypes = []interface{}{ +var file_teleport_crownjewel_v1_crownjewel_proto_goTypes = []any{ (*CrownJewel)(nil), // 0: teleport.crownjewel.v1.CrownJewel (*CrownJewelSpec)(nil), // 1: teleport.crownjewel.v1.CrownJewelSpec (*TeleportMatcher)(nil), // 2: teleport.crownjewel.v1.TeleportMatcher @@ -513,7 +513,7 @@ func file_teleport_crownjewel_v1_crownjewel_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_crownjewel_v1_crownjewel_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_crownjewel_v1_crownjewel_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*CrownJewel); i { case 0: return &v.state @@ -525,7 +525,7 @@ func file_teleport_crownjewel_v1_crownjewel_proto_init() { return nil } } - file_teleport_crownjewel_v1_crownjewel_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_crownjewel_v1_crownjewel_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*CrownJewelSpec); i { case 0: return &v.state @@ -537,7 +537,7 @@ func file_teleport_crownjewel_v1_crownjewel_proto_init() { return nil } } - file_teleport_crownjewel_v1_crownjewel_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_teleport_crownjewel_v1_crownjewel_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*TeleportMatcher); i { case 0: return &v.state @@ -549,7 +549,7 @@ func file_teleport_crownjewel_v1_crownjewel_proto_init() { return nil } } - file_teleport_crownjewel_v1_crownjewel_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_teleport_crownjewel_v1_crownjewel_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*AWSMatcher); i { case 0: return &v.state @@ -561,7 +561,7 @@ func file_teleport_crownjewel_v1_crownjewel_proto_init() { return nil } } - file_teleport_crownjewel_v1_crownjewel_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_teleport_crownjewel_v1_crownjewel_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*AWSTag); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/crownjewel/v1/crownjewel_service.pb.go b/api/gen/proto/go/teleport/crownjewel/v1/crownjewel_service.pb.go index 09c11dde341ed..97a4d9eefddd0 100644 --- a/api/gen/proto/go/teleport/crownjewel/v1/crownjewel_service.pb.go +++ b/api/gen/proto/go/teleport/crownjewel/v1/crownjewel_service.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/crownjewel/v1/crownjewel_service.proto @@ -509,7 +509,7 @@ func file_teleport_crownjewel_v1_crownjewel_service_proto_rawDescGZIP() []byte { } var file_teleport_crownjewel_v1_crownjewel_service_proto_msgTypes = make([]protoimpl.MessageInfo, 7) -var file_teleport_crownjewel_v1_crownjewel_service_proto_goTypes = []interface{}{ +var file_teleport_crownjewel_v1_crownjewel_service_proto_goTypes = []any{ (*CreateCrownJewelRequest)(nil), // 0: teleport.crownjewel.v1.CreateCrownJewelRequest (*GetCrownJewelRequest)(nil), // 1: teleport.crownjewel.v1.GetCrownJewelRequest (*ListCrownJewelsRequest)(nil), // 2: teleport.crownjewel.v1.ListCrownJewelsRequest @@ -551,7 +551,7 @@ func file_teleport_crownjewel_v1_crownjewel_service_proto_init() { } file_teleport_crownjewel_v1_crownjewel_proto_init() if !protoimpl.UnsafeEnabled { - file_teleport_crownjewel_v1_crownjewel_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_crownjewel_v1_crownjewel_service_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*CreateCrownJewelRequest); i { case 0: return &v.state @@ -563,7 +563,7 @@ func file_teleport_crownjewel_v1_crownjewel_service_proto_init() { return nil } } - file_teleport_crownjewel_v1_crownjewel_service_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_crownjewel_v1_crownjewel_service_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*GetCrownJewelRequest); i { case 0: return &v.state @@ -575,7 +575,7 @@ func file_teleport_crownjewel_v1_crownjewel_service_proto_init() { return nil } } - file_teleport_crownjewel_v1_crownjewel_service_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_teleport_crownjewel_v1_crownjewel_service_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*ListCrownJewelsRequest); i { case 0: return &v.state @@ -587,7 +587,7 @@ func file_teleport_crownjewel_v1_crownjewel_service_proto_init() { return nil } } - file_teleport_crownjewel_v1_crownjewel_service_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_teleport_crownjewel_v1_crownjewel_service_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*ListCrownJewelsResponse); i { case 0: return &v.state @@ -599,7 +599,7 @@ func file_teleport_crownjewel_v1_crownjewel_service_proto_init() { return nil } } - file_teleport_crownjewel_v1_crownjewel_service_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_teleport_crownjewel_v1_crownjewel_service_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*UpdateCrownJewelRequest); i { case 0: return &v.state @@ -611,7 +611,7 @@ func file_teleport_crownjewel_v1_crownjewel_service_proto_init() { return nil } } - file_teleport_crownjewel_v1_crownjewel_service_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_teleport_crownjewel_v1_crownjewel_service_proto_msgTypes[5].Exporter = func(v any, i int) any { switch v := v.(*UpsertCrownJewelRequest); i { case 0: return &v.state @@ -623,7 +623,7 @@ func file_teleport_crownjewel_v1_crownjewel_service_proto_init() { return nil } } - file_teleport_crownjewel_v1_crownjewel_service_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_teleport_crownjewel_v1_crownjewel_service_proto_msgTypes[6].Exporter = func(v any, i int) any { switch v := v.(*DeleteCrownJewelRequest); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/dbobject/v1/dbobject.pb.go b/api/gen/proto/go/teleport/dbobject/v1/dbobject.pb.go index 122300f36c198..a279eb18388db 100644 --- a/api/gen/proto/go/teleport/dbobject/v1/dbobject.pb.go +++ b/api/gen/proto/go/teleport/dbobject/v1/dbobject.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/dbobject/v1/dbobject.proto @@ -272,7 +272,7 @@ func file_teleport_dbobject_v1_dbobject_proto_rawDescGZIP() []byte { } var file_teleport_dbobject_v1_dbobject_proto_msgTypes = make([]protoimpl.MessageInfo, 2) -var file_teleport_dbobject_v1_dbobject_proto_goTypes = []interface{}{ +var file_teleport_dbobject_v1_dbobject_proto_goTypes = []any{ (*DatabaseObject)(nil), // 0: teleport.dbobject.v1.DatabaseObject (*DatabaseObjectSpec)(nil), // 1: teleport.dbobject.v1.DatabaseObjectSpec (*v1.Metadata)(nil), // 2: teleport.header.v1.Metadata @@ -293,7 +293,7 @@ func file_teleport_dbobject_v1_dbobject_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_dbobject_v1_dbobject_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_dbobject_v1_dbobject_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*DatabaseObject); i { case 0: return &v.state @@ -305,7 +305,7 @@ func file_teleport_dbobject_v1_dbobject_proto_init() { return nil } } - file_teleport_dbobject_v1_dbobject_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_dbobject_v1_dbobject_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*DatabaseObjectSpec); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/dbobject/v1/dbobject_service.pb.go b/api/gen/proto/go/teleport/dbobject/v1/dbobject_service.pb.go index e352413f504bb..712876623681d 100644 --- a/api/gen/proto/go/teleport/dbobject/v1/dbobject_service.pb.go +++ b/api/gen/proto/go/teleport/dbobject/v1/dbobject_service.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/dbobject/v1/dbobject_service.proto @@ -512,7 +512,7 @@ func file_teleport_dbobject_v1_dbobject_service_proto_rawDescGZIP() []byte { } var file_teleport_dbobject_v1_dbobject_service_proto_msgTypes = make([]protoimpl.MessageInfo, 7) -var file_teleport_dbobject_v1_dbobject_service_proto_goTypes = []interface{}{ +var file_teleport_dbobject_v1_dbobject_service_proto_goTypes = []any{ (*CreateDatabaseObjectRequest)(nil), // 0: teleport.dbobject.v1.CreateDatabaseObjectRequest (*GetDatabaseObjectRequest)(nil), // 1: teleport.dbobject.v1.GetDatabaseObjectRequest (*ListDatabaseObjectsRequest)(nil), // 2: teleport.dbobject.v1.ListDatabaseObjectsRequest @@ -554,7 +554,7 @@ func file_teleport_dbobject_v1_dbobject_service_proto_init() { } file_teleport_dbobject_v1_dbobject_proto_init() if !protoimpl.UnsafeEnabled { - file_teleport_dbobject_v1_dbobject_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_dbobject_v1_dbobject_service_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*CreateDatabaseObjectRequest); i { case 0: return &v.state @@ -566,7 +566,7 @@ func file_teleport_dbobject_v1_dbobject_service_proto_init() { return nil } } - file_teleport_dbobject_v1_dbobject_service_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_dbobject_v1_dbobject_service_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*GetDatabaseObjectRequest); i { case 0: return &v.state @@ -578,7 +578,7 @@ func file_teleport_dbobject_v1_dbobject_service_proto_init() { return nil } } - file_teleport_dbobject_v1_dbobject_service_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_teleport_dbobject_v1_dbobject_service_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*ListDatabaseObjectsRequest); i { case 0: return &v.state @@ -590,7 +590,7 @@ func file_teleport_dbobject_v1_dbobject_service_proto_init() { return nil } } - file_teleport_dbobject_v1_dbobject_service_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_teleport_dbobject_v1_dbobject_service_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*ListDatabaseObjectsResponse); i { case 0: return &v.state @@ -602,7 +602,7 @@ func file_teleport_dbobject_v1_dbobject_service_proto_init() { return nil } } - file_teleport_dbobject_v1_dbobject_service_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_teleport_dbobject_v1_dbobject_service_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*UpdateDatabaseObjectRequest); i { case 0: return &v.state @@ -614,7 +614,7 @@ func file_teleport_dbobject_v1_dbobject_service_proto_init() { return nil } } - file_teleport_dbobject_v1_dbobject_service_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_teleport_dbobject_v1_dbobject_service_proto_msgTypes[5].Exporter = func(v any, i int) any { switch v := v.(*UpsertDatabaseObjectRequest); i { case 0: return &v.state @@ -626,7 +626,7 @@ func file_teleport_dbobject_v1_dbobject_service_proto_init() { return nil } } - file_teleport_dbobject_v1_dbobject_service_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_teleport_dbobject_v1_dbobject_service_proto_msgTypes[6].Exporter = func(v any, i int) any { switch v := v.(*DeleteDatabaseObjectRequest); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/dbobjectimportrule/v1/dbobjectimportrule.pb.go b/api/gen/proto/go/teleport/dbobjectimportrule/v1/dbobjectimportrule.pb.go index 7c0e7941c1004..9efe30fd1e12c 100644 --- a/api/gen/proto/go/teleport/dbobjectimportrule/v1/dbobjectimportrule.pb.go +++ b/api/gen/proto/go/teleport/dbobjectimportrule/v1/dbobjectimportrule.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/dbobjectimportrule/v1/dbobjectimportrule.proto @@ -489,7 +489,7 @@ func file_teleport_dbobjectimportrule_v1_dbobjectimportrule_proto_rawDescGZIP() } var file_teleport_dbobjectimportrule_v1_dbobjectimportrule_proto_msgTypes = make([]protoimpl.MessageInfo, 6) -var file_teleport_dbobjectimportrule_v1_dbobjectimportrule_proto_goTypes = []interface{}{ +var file_teleport_dbobjectimportrule_v1_dbobjectimportrule_proto_goTypes = []any{ (*DatabaseObjectImportRule)(nil), // 0: teleport.dbobjectimportrule.v1.DatabaseObjectImportRule (*DatabaseObjectImportRuleSpec)(nil), // 1: teleport.dbobjectimportrule.v1.DatabaseObjectImportRuleSpec (*DatabaseObjectImportRuleMapping)(nil), // 2: teleport.dbobjectimportrule.v1.DatabaseObjectImportRuleMapping @@ -520,7 +520,7 @@ func file_teleport_dbobjectimportrule_v1_dbobjectimportrule_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_dbobjectimportrule_v1_dbobjectimportrule_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_dbobjectimportrule_v1_dbobjectimportrule_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*DatabaseObjectImportRule); i { case 0: return &v.state @@ -532,7 +532,7 @@ func file_teleport_dbobjectimportrule_v1_dbobjectimportrule_proto_init() { return nil } } - file_teleport_dbobjectimportrule_v1_dbobjectimportrule_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_dbobjectimportrule_v1_dbobjectimportrule_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*DatabaseObjectImportRuleSpec); i { case 0: return &v.state @@ -544,7 +544,7 @@ func file_teleport_dbobjectimportrule_v1_dbobjectimportrule_proto_init() { return nil } } - file_teleport_dbobjectimportrule_v1_dbobjectimportrule_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_teleport_dbobjectimportrule_v1_dbobjectimportrule_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*DatabaseObjectImportRuleMapping); i { case 0: return &v.state @@ -556,7 +556,7 @@ func file_teleport_dbobjectimportrule_v1_dbobjectimportrule_proto_init() { return nil } } - file_teleport_dbobjectimportrule_v1_dbobjectimportrule_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_teleport_dbobjectimportrule_v1_dbobjectimportrule_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*DatabaseObjectImportMatch); i { case 0: return &v.state @@ -568,7 +568,7 @@ func file_teleport_dbobjectimportrule_v1_dbobjectimportrule_proto_init() { return nil } } - file_teleport_dbobjectimportrule_v1_dbobjectimportrule_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_teleport_dbobjectimportrule_v1_dbobjectimportrule_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*DatabaseObjectImportScope); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/dbobjectimportrule/v1/dbobjectimportrule_service.pb.go b/api/gen/proto/go/teleport/dbobjectimportrule/v1/dbobjectimportrule_service.pb.go index e111630c56318..21c766d1d7713 100644 --- a/api/gen/proto/go/teleport/dbobjectimportrule/v1/dbobjectimportrule_service.pb.go +++ b/api/gen/proto/go/teleport/dbobjectimportrule/v1/dbobjectimportrule_service.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/dbobjectimportrule/v1/dbobjectimportrule_service.proto @@ -543,7 +543,7 @@ func file_teleport_dbobjectimportrule_v1_dbobjectimportrule_service_proto_rawDes } var file_teleport_dbobjectimportrule_v1_dbobjectimportrule_service_proto_msgTypes = make([]protoimpl.MessageInfo, 7) -var file_teleport_dbobjectimportrule_v1_dbobjectimportrule_service_proto_goTypes = []interface{}{ +var file_teleport_dbobjectimportrule_v1_dbobjectimportrule_service_proto_goTypes = []any{ (*CreateDatabaseObjectImportRuleRequest)(nil), // 0: teleport.dbobjectimportrule.v1.CreateDatabaseObjectImportRuleRequest (*GetDatabaseObjectImportRuleRequest)(nil), // 1: teleport.dbobjectimportrule.v1.GetDatabaseObjectImportRuleRequest (*ListDatabaseObjectImportRulesRequest)(nil), // 2: teleport.dbobjectimportrule.v1.ListDatabaseObjectImportRulesRequest @@ -585,7 +585,7 @@ func file_teleport_dbobjectimportrule_v1_dbobjectimportrule_service_proto_init() } file_teleport_dbobjectimportrule_v1_dbobjectimportrule_proto_init() if !protoimpl.UnsafeEnabled { - file_teleport_dbobjectimportrule_v1_dbobjectimportrule_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_dbobjectimportrule_v1_dbobjectimportrule_service_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*CreateDatabaseObjectImportRuleRequest); i { case 0: return &v.state @@ -597,7 +597,7 @@ func file_teleport_dbobjectimportrule_v1_dbobjectimportrule_service_proto_init() return nil } } - file_teleport_dbobjectimportrule_v1_dbobjectimportrule_service_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_dbobjectimportrule_v1_dbobjectimportrule_service_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*GetDatabaseObjectImportRuleRequest); i { case 0: return &v.state @@ -609,7 +609,7 @@ func file_teleport_dbobjectimportrule_v1_dbobjectimportrule_service_proto_init() return nil } } - file_teleport_dbobjectimportrule_v1_dbobjectimportrule_service_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_teleport_dbobjectimportrule_v1_dbobjectimportrule_service_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*ListDatabaseObjectImportRulesRequest); i { case 0: return &v.state @@ -621,7 +621,7 @@ func file_teleport_dbobjectimportrule_v1_dbobjectimportrule_service_proto_init() return nil } } - file_teleport_dbobjectimportrule_v1_dbobjectimportrule_service_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_teleport_dbobjectimportrule_v1_dbobjectimportrule_service_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*ListDatabaseObjectImportRulesResponse); i { case 0: return &v.state @@ -633,7 +633,7 @@ func file_teleport_dbobjectimportrule_v1_dbobjectimportrule_service_proto_init() return nil } } - file_teleport_dbobjectimportrule_v1_dbobjectimportrule_service_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_teleport_dbobjectimportrule_v1_dbobjectimportrule_service_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*UpdateDatabaseObjectImportRuleRequest); i { case 0: return &v.state @@ -645,7 +645,7 @@ func file_teleport_dbobjectimportrule_v1_dbobjectimportrule_service_proto_init() return nil } } - file_teleport_dbobjectimportrule_v1_dbobjectimportrule_service_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_teleport_dbobjectimportrule_v1_dbobjectimportrule_service_proto_msgTypes[5].Exporter = func(v any, i int) any { switch v := v.(*UpsertDatabaseObjectImportRuleRequest); i { case 0: return &v.state @@ -657,7 +657,7 @@ func file_teleport_dbobjectimportrule_v1_dbobjectimportrule_service_proto_init() return nil } } - file_teleport_dbobjectimportrule_v1_dbobjectimportrule_service_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_teleport_dbobjectimportrule_v1_dbobjectimportrule_service_proto_msgTypes[6].Exporter = func(v any, i int) any { switch v := v.(*DeleteDatabaseObjectImportRuleRequest); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/devicetrust/v1/assert.pb.go b/api/gen/proto/go/teleport/devicetrust/v1/assert.pb.go index 0efdc20200dfc..ef8f88442136d 100644 --- a/api/gen/proto/go/teleport/devicetrust/v1/assert.pb.go +++ b/api/gen/proto/go/teleport/devicetrust/v1/assert.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/devicetrust/v1/assert.proto @@ -430,7 +430,7 @@ func file_teleport_devicetrust_v1_assert_proto_rawDescGZIP() []byte { } var file_teleport_devicetrust_v1_assert_proto_msgTypes = make([]protoimpl.MessageInfo, 4) -var file_teleport_devicetrust_v1_assert_proto_goTypes = []interface{}{ +var file_teleport_devicetrust_v1_assert_proto_goTypes = []any{ (*AssertDeviceRequest)(nil), // 0: teleport.devicetrust.v1.AssertDeviceRequest (*AssertDeviceResponse)(nil), // 1: teleport.devicetrust.v1.AssertDeviceResponse (*AssertDeviceInit)(nil), // 2: teleport.devicetrust.v1.AssertDeviceInit @@ -464,7 +464,7 @@ func file_teleport_devicetrust_v1_assert_proto_init() { file_teleport_devicetrust_v1_authenticate_challenge_proto_init() file_teleport_devicetrust_v1_device_collected_data_proto_init() if !protoimpl.UnsafeEnabled { - file_teleport_devicetrust_v1_assert_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_assert_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*AssertDeviceRequest); i { case 0: return &v.state @@ -476,7 +476,7 @@ func file_teleport_devicetrust_v1_assert_proto_init() { return nil } } - file_teleport_devicetrust_v1_assert_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_assert_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*AssertDeviceResponse); i { case 0: return &v.state @@ -488,7 +488,7 @@ func file_teleport_devicetrust_v1_assert_proto_init() { return nil } } - file_teleport_devicetrust_v1_assert_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_assert_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*AssertDeviceInit); i { case 0: return &v.state @@ -500,7 +500,7 @@ func file_teleport_devicetrust_v1_assert_proto_init() { return nil } } - file_teleport_devicetrust_v1_assert_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_assert_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*DeviceAsserted); i { case 0: return &v.state @@ -513,12 +513,12 @@ func file_teleport_devicetrust_v1_assert_proto_init() { } } } - file_teleport_devicetrust_v1_assert_proto_msgTypes[0].OneofWrappers = []interface{}{ + file_teleport_devicetrust_v1_assert_proto_msgTypes[0].OneofWrappers = []any{ (*AssertDeviceRequest_Init)(nil), (*AssertDeviceRequest_ChallengeResponse)(nil), (*AssertDeviceRequest_TpmChallengeResponse)(nil), } - file_teleport_devicetrust_v1_assert_proto_msgTypes[1].OneofWrappers = []interface{}{ + file_teleport_devicetrust_v1_assert_proto_msgTypes[1].OneofWrappers = []any{ (*AssertDeviceResponse_Challenge)(nil), (*AssertDeviceResponse_TpmChallenge)(nil), (*AssertDeviceResponse_DeviceAsserted)(nil), diff --git a/api/gen/proto/go/teleport/devicetrust/v1/authenticate_challenge.pb.go b/api/gen/proto/go/teleport/devicetrust/v1/authenticate_challenge.pb.go index 087fc953bf867..b0e32c964b09b 100644 --- a/api/gen/proto/go/teleport/devicetrust/v1/authenticate_challenge.pb.go +++ b/api/gen/proto/go/teleport/devicetrust/v1/authenticate_challenge.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/devicetrust/v1/authenticate_challenge.proto @@ -289,7 +289,7 @@ func file_teleport_devicetrust_v1_authenticate_challenge_proto_rawDescGZIP() []b } var file_teleport_devicetrust_v1_authenticate_challenge_proto_msgTypes = make([]protoimpl.MessageInfo, 4) -var file_teleport_devicetrust_v1_authenticate_challenge_proto_goTypes = []interface{}{ +var file_teleport_devicetrust_v1_authenticate_challenge_proto_goTypes = []any{ (*AuthenticateDeviceChallenge)(nil), // 0: teleport.devicetrust.v1.AuthenticateDeviceChallenge (*AuthenticateDeviceChallengeResponse)(nil), // 1: teleport.devicetrust.v1.AuthenticateDeviceChallengeResponse (*TPMAuthenticateDeviceChallenge)(nil), // 2: teleport.devicetrust.v1.TPMAuthenticateDeviceChallenge @@ -312,7 +312,7 @@ func file_teleport_devicetrust_v1_authenticate_challenge_proto_init() { } file_teleport_devicetrust_v1_tpm_proto_init() if !protoimpl.UnsafeEnabled { - file_teleport_devicetrust_v1_authenticate_challenge_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_authenticate_challenge_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*AuthenticateDeviceChallenge); i { case 0: return &v.state @@ -324,7 +324,7 @@ func file_teleport_devicetrust_v1_authenticate_challenge_proto_init() { return nil } } - file_teleport_devicetrust_v1_authenticate_challenge_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_authenticate_challenge_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*AuthenticateDeviceChallengeResponse); i { case 0: return &v.state @@ -336,7 +336,7 @@ func file_teleport_devicetrust_v1_authenticate_challenge_proto_init() { return nil } } - file_teleport_devicetrust_v1_authenticate_challenge_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_authenticate_challenge_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*TPMAuthenticateDeviceChallenge); i { case 0: return &v.state @@ -348,7 +348,7 @@ func file_teleport_devicetrust_v1_authenticate_challenge_proto_init() { return nil } } - file_teleport_devicetrust_v1_authenticate_challenge_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_authenticate_challenge_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*TPMAuthenticateDeviceChallengeResponse); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/devicetrust/v1/device.pb.go b/api/gen/proto/go/teleport/devicetrust/v1/device.pb.go index c056635b58905..ea9fef7b84504 100644 --- a/api/gen/proto/go/teleport/devicetrust/v1/device.pb.go +++ b/api/gen/proto/go/teleport/devicetrust/v1/device.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/devicetrust/v1/device.proto @@ -549,7 +549,7 @@ func file_teleport_devicetrust_v1_device_proto_rawDescGZIP() []byte { var file_teleport_devicetrust_v1_device_proto_enumTypes = make([]protoimpl.EnumInfo, 2) var file_teleport_devicetrust_v1_device_proto_msgTypes = make([]protoimpl.MessageInfo, 2) -var file_teleport_devicetrust_v1_device_proto_goTypes = []interface{}{ +var file_teleport_devicetrust_v1_device_proto_goTypes = []any{ (DeviceAttestationType)(0), // 0: teleport.devicetrust.v1.DeviceAttestationType (DeviceEnrollStatus)(0), // 1: teleport.devicetrust.v1.DeviceEnrollStatus (*Device)(nil), // 2: teleport.devicetrust.v1.Device @@ -590,7 +590,7 @@ func file_teleport_devicetrust_v1_device_proto_init() { file_teleport_devicetrust_v1_device_source_proto_init() file_teleport_devicetrust_v1_os_type_proto_init() if !protoimpl.UnsafeEnabled { - file_teleport_devicetrust_v1_device_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_device_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*Device); i { case 0: return &v.state @@ -602,7 +602,7 @@ func file_teleport_devicetrust_v1_device_proto_init() { return nil } } - file_teleport_devicetrust_v1_device_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_device_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*DeviceCredential); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/devicetrust/v1/device_collected_data.pb.go b/api/gen/proto/go/teleport/devicetrust/v1/device_collected_data.pb.go index 6fd9fc8786af0..cff7209256b38 100644 --- a/api/gen/proto/go/teleport/devicetrust/v1/device_collected_data.pb.go +++ b/api/gen/proto/go/teleport/devicetrust/v1/device_collected_data.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/devicetrust/v1/device_collected_data.proto @@ -329,7 +329,7 @@ func file_teleport_devicetrust_v1_device_collected_data_proto_rawDescGZIP() []by } var file_teleport_devicetrust_v1_device_collected_data_proto_msgTypes = make([]protoimpl.MessageInfo, 1) -var file_teleport_devicetrust_v1_device_collected_data_proto_goTypes = []interface{}{ +var file_teleport_devicetrust_v1_device_collected_data_proto_goTypes = []any{ (*DeviceCollectedData)(nil), // 0: teleport.devicetrust.v1.DeviceCollectedData (*timestamppb.Timestamp)(nil), // 1: google.protobuf.Timestamp (OSType)(0), // 2: teleport.devicetrust.v1.OSType @@ -355,7 +355,7 @@ func file_teleport_devicetrust_v1_device_collected_data_proto_init() { file_teleport_devicetrust_v1_os_type_proto_init() file_teleport_devicetrust_v1_tpm_proto_init() if !protoimpl.UnsafeEnabled { - file_teleport_devicetrust_v1_device_collected_data_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_device_collected_data_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*DeviceCollectedData); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/devicetrust/v1/device_enroll_token.pb.go b/api/gen/proto/go/teleport/devicetrust/v1/device_enroll_token.pb.go index e43dab98b578a..b862bce1a60a8 100644 --- a/api/gen/proto/go/teleport/devicetrust/v1/device_enroll_token.pb.go +++ b/api/gen/proto/go/teleport/devicetrust/v1/device_enroll_token.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/devicetrust/v1/device_enroll_token.proto @@ -133,7 +133,7 @@ func file_teleport_devicetrust_v1_device_enroll_token_proto_rawDescGZIP() []byte } var file_teleport_devicetrust_v1_device_enroll_token_proto_msgTypes = make([]protoimpl.MessageInfo, 1) -var file_teleport_devicetrust_v1_device_enroll_token_proto_goTypes = []interface{}{ +var file_teleport_devicetrust_v1_device_enroll_token_proto_goTypes = []any{ (*DeviceEnrollToken)(nil), // 0: teleport.devicetrust.v1.DeviceEnrollToken (*timestamppb.Timestamp)(nil), // 1: google.protobuf.Timestamp } @@ -152,7 +152,7 @@ func file_teleport_devicetrust_v1_device_enroll_token_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_devicetrust_v1_device_enroll_token_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_device_enroll_token_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*DeviceEnrollToken); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/devicetrust/v1/device_profile.pb.go b/api/gen/proto/go/teleport/devicetrust/v1/device_profile.pb.go index 61fc63b439a83..ca894044402b1 100644 --- a/api/gen/proto/go/teleport/devicetrust/v1/device_profile.pb.go +++ b/api/gen/proto/go/teleport/devicetrust/v1/device_profile.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/devicetrust/v1/device_profile.proto @@ -223,7 +223,7 @@ func file_teleport_devicetrust_v1_device_profile_proto_rawDescGZIP() []byte { } var file_teleport_devicetrust_v1_device_profile_proto_msgTypes = make([]protoimpl.MessageInfo, 1) -var file_teleport_devicetrust_v1_device_profile_proto_goTypes = []interface{}{ +var file_teleport_devicetrust_v1_device_profile_proto_goTypes = []any{ (*DeviceProfile)(nil), // 0: teleport.devicetrust.v1.DeviceProfile (*timestamppb.Timestamp)(nil), // 1: google.protobuf.Timestamp } @@ -242,7 +242,7 @@ func file_teleport_devicetrust_v1_device_profile_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_devicetrust_v1_device_profile_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_device_profile_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*DeviceProfile); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/devicetrust/v1/device_source.pb.go b/api/gen/proto/go/teleport/devicetrust/v1/device_source.pb.go index a240c834db31a..1a0da79a82eb1 100644 --- a/api/gen/proto/go/teleport/devicetrust/v1/device_source.pb.go +++ b/api/gen/proto/go/teleport/devicetrust/v1/device_source.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/devicetrust/v1/device_source.proto @@ -197,7 +197,7 @@ func file_teleport_devicetrust_v1_device_source_proto_rawDescGZIP() []byte { var file_teleport_devicetrust_v1_device_source_proto_enumTypes = make([]protoimpl.EnumInfo, 1) var file_teleport_devicetrust_v1_device_source_proto_msgTypes = make([]protoimpl.MessageInfo, 1) -var file_teleport_devicetrust_v1_device_source_proto_goTypes = []interface{}{ +var file_teleport_devicetrust_v1_device_source_proto_goTypes = []any{ (DeviceOrigin)(0), // 0: teleport.devicetrust.v1.DeviceOrigin (*DeviceSource)(nil), // 1: teleport.devicetrust.v1.DeviceSource } @@ -216,7 +216,7 @@ func file_teleport_devicetrust_v1_device_source_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_devicetrust_v1_device_source_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_device_source_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*DeviceSource); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/devicetrust/v1/devicetrust_service.pb.go b/api/gen/proto/go/teleport/devicetrust/v1/devicetrust_service.pb.go index dda6636b39332..5eb46c2abb59e 100644 --- a/api/gen/proto/go/teleport/devicetrust/v1/devicetrust_service.pb.go +++ b/api/gen/proto/go/teleport/devicetrust/v1/devicetrust_service.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/devicetrust/v1/devicetrust_service.proto @@ -3065,7 +3065,7 @@ func file_teleport_devicetrust_v1_devicetrust_service_proto_rawDescGZIP() []byte var file_teleport_devicetrust_v1_devicetrust_service_proto_enumTypes = make([]protoimpl.EnumInfo, 1) var file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes = make([]protoimpl.MessageInfo, 37) -var file_teleport_devicetrust_v1_devicetrust_service_proto_goTypes = []interface{}{ +var file_teleport_devicetrust_v1_devicetrust_service_proto_goTypes = []any{ (DeviceView)(0), // 0: teleport.devicetrust.v1.DeviceView (*CreateDeviceRequest)(nil), // 1: teleport.devicetrust.v1.CreateDeviceRequest (*UpdateDeviceRequest)(nil), // 2: teleport.devicetrust.v1.UpdateDeviceRequest @@ -3213,7 +3213,7 @@ func file_teleport_devicetrust_v1_devicetrust_service_proto_init() { file_teleport_devicetrust_v1_usage_proto_init() file_teleport_devicetrust_v1_user_certificates_proto_init() if !protoimpl.UnsafeEnabled { - file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*CreateDeviceRequest); i { case 0: return &v.state @@ -3225,7 +3225,7 @@ func file_teleport_devicetrust_v1_devicetrust_service_proto_init() { return nil } } - file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*UpdateDeviceRequest); i { case 0: return &v.state @@ -3237,7 +3237,7 @@ func file_teleport_devicetrust_v1_devicetrust_service_proto_init() { return nil } } - file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*UpsertDeviceRequest); i { case 0: return &v.state @@ -3249,7 +3249,7 @@ func file_teleport_devicetrust_v1_devicetrust_service_proto_init() { return nil } } - file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*DeleteDeviceRequest); i { case 0: return &v.state @@ -3261,7 +3261,7 @@ func file_teleport_devicetrust_v1_devicetrust_service_proto_init() { return nil } } - file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*FindDevicesRequest); i { case 0: return &v.state @@ -3273,7 +3273,7 @@ func file_teleport_devicetrust_v1_devicetrust_service_proto_init() { return nil } } - file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[5].Exporter = func(v any, i int) any { switch v := v.(*FindDevicesResponse); i { case 0: return &v.state @@ -3285,7 +3285,7 @@ func file_teleport_devicetrust_v1_devicetrust_service_proto_init() { return nil } } - file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[6].Exporter = func(v any, i int) any { switch v := v.(*GetDeviceRequest); i { case 0: return &v.state @@ -3297,7 +3297,7 @@ func file_teleport_devicetrust_v1_devicetrust_service_proto_init() { return nil } } - file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[7].Exporter = func(v any, i int) any { switch v := v.(*ListDevicesRequest); i { case 0: return &v.state @@ -3309,7 +3309,7 @@ func file_teleport_devicetrust_v1_devicetrust_service_proto_init() { return nil } } - file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[8].Exporter = func(v any, i int) any { switch v := v.(*ListDevicesResponse); i { case 0: return &v.state @@ -3321,7 +3321,7 @@ func file_teleport_devicetrust_v1_devicetrust_service_proto_init() { return nil } } - file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[9].Exporter = func(v any, i int) any { switch v := v.(*BulkCreateDevicesRequest); i { case 0: return &v.state @@ -3333,7 +3333,7 @@ func file_teleport_devicetrust_v1_devicetrust_service_proto_init() { return nil } } - file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[10].Exporter = func(v any, i int) any { switch v := v.(*BulkCreateDevicesResponse); i { case 0: return &v.state @@ -3345,7 +3345,7 @@ func file_teleport_devicetrust_v1_devicetrust_service_proto_init() { return nil } } - file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[11].Exporter = func(v any, i int) any { switch v := v.(*DeviceOrStatus); i { case 0: return &v.state @@ -3357,7 +3357,7 @@ func file_teleport_devicetrust_v1_devicetrust_service_proto_init() { return nil } } - file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[12].Exporter = func(v any, i int) any { switch v := v.(*CreateDeviceEnrollTokenRequest); i { case 0: return &v.state @@ -3369,7 +3369,7 @@ func file_teleport_devicetrust_v1_devicetrust_service_proto_init() { return nil } } - file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[13].Exporter = func(v any, i int) any { switch v := v.(*EnrollDeviceRequest); i { case 0: return &v.state @@ -3381,7 +3381,7 @@ func file_teleport_devicetrust_v1_devicetrust_service_proto_init() { return nil } } - file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[14].Exporter = func(v any, i int) any { switch v := v.(*EnrollDeviceResponse); i { case 0: return &v.state @@ -3393,7 +3393,7 @@ func file_teleport_devicetrust_v1_devicetrust_service_proto_init() { return nil } } - file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[15].Exporter = func(v any, i int) any { switch v := v.(*EnrollDeviceInit); i { case 0: return &v.state @@ -3405,7 +3405,7 @@ func file_teleport_devicetrust_v1_devicetrust_service_proto_init() { return nil } } - file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[16].Exporter = func(v any, i int) any { switch v := v.(*EnrollDeviceSuccess); i { case 0: return &v.state @@ -3417,7 +3417,7 @@ func file_teleport_devicetrust_v1_devicetrust_service_proto_init() { return nil } } - file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[17].Exporter = func(v any, i int) any { switch v := v.(*MacOSEnrollPayload); i { case 0: return &v.state @@ -3429,7 +3429,7 @@ func file_teleport_devicetrust_v1_devicetrust_service_proto_init() { return nil } } - file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[18].Exporter = func(v any, i int) any { switch v := v.(*MacOSEnrollChallenge); i { case 0: return &v.state @@ -3441,7 +3441,7 @@ func file_teleport_devicetrust_v1_devicetrust_service_proto_init() { return nil } } - file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[19].Exporter = func(v any, i int) any { switch v := v.(*MacOSEnrollChallengeResponse); i { case 0: return &v.state @@ -3453,7 +3453,7 @@ func file_teleport_devicetrust_v1_devicetrust_service_proto_init() { return nil } } - file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[20].Exporter = func(v any, i int) any { switch v := v.(*TPMEnrollPayload); i { case 0: return &v.state @@ -3465,7 +3465,7 @@ func file_teleport_devicetrust_v1_devicetrust_service_proto_init() { return nil } } - file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[21].Exporter = func(v any, i int) any { switch v := v.(*TPMAttestationParameters); i { case 0: return &v.state @@ -3477,7 +3477,7 @@ func file_teleport_devicetrust_v1_devicetrust_service_proto_init() { return nil } } - file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[22].Exporter = func(v any, i int) any { switch v := v.(*TPMEnrollChallenge); i { case 0: return &v.state @@ -3489,7 +3489,7 @@ func file_teleport_devicetrust_v1_devicetrust_service_proto_init() { return nil } } - file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[23].Exporter = func(v any, i int) any { switch v := v.(*TPMEncryptedCredential); i { case 0: return &v.state @@ -3501,7 +3501,7 @@ func file_teleport_devicetrust_v1_devicetrust_service_proto_init() { return nil } } - file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[24].Exporter = func(v any, i int) any { switch v := v.(*TPMEnrollChallengeResponse); i { case 0: return &v.state @@ -3513,7 +3513,7 @@ func file_teleport_devicetrust_v1_devicetrust_service_proto_init() { return nil } } - file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[25].Exporter = func(v any, i int) any { switch v := v.(*AuthenticateDeviceRequest); i { case 0: return &v.state @@ -3525,7 +3525,7 @@ func file_teleport_devicetrust_v1_devicetrust_service_proto_init() { return nil } } - file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[26].Exporter = func(v any, i int) any { switch v := v.(*AuthenticateDeviceResponse); i { case 0: return &v.state @@ -3537,7 +3537,7 @@ func file_teleport_devicetrust_v1_devicetrust_service_proto_init() { return nil } } - file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[27].Exporter = func(v any, i int) any { switch v := v.(*AuthenticateDeviceInit); i { case 0: return &v.state @@ -3549,7 +3549,7 @@ func file_teleport_devicetrust_v1_devicetrust_service_proto_init() { return nil } } - file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[28].Exporter = func(v any, i int) any { switch v := v.(*SyncInventoryRequest); i { case 0: return &v.state @@ -3561,7 +3561,7 @@ func file_teleport_devicetrust_v1_devicetrust_service_proto_init() { return nil } } - file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[29].Exporter = func(v any, i int) any { switch v := v.(*SyncInventoryResponse); i { case 0: return &v.state @@ -3573,7 +3573,7 @@ func file_teleport_devicetrust_v1_devicetrust_service_proto_init() { return nil } } - file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[30].Exporter = func(v any, i int) any { switch v := v.(*SyncInventoryStart); i { case 0: return &v.state @@ -3585,7 +3585,7 @@ func file_teleport_devicetrust_v1_devicetrust_service_proto_init() { return nil } } - file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[31].Exporter = func(v any, i int) any { switch v := v.(*SyncInventoryEnd); i { case 0: return &v.state @@ -3597,7 +3597,7 @@ func file_teleport_devicetrust_v1_devicetrust_service_proto_init() { return nil } } - file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[32].Exporter = func(v any, i int) any { switch v := v.(*SyncInventoryDevices); i { case 0: return &v.state @@ -3609,7 +3609,7 @@ func file_teleport_devicetrust_v1_devicetrust_service_proto_init() { return nil } } - file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[33].Exporter = func(v any, i int) any { switch v := v.(*SyncInventoryAck); i { case 0: return &v.state @@ -3621,7 +3621,7 @@ func file_teleport_devicetrust_v1_devicetrust_service_proto_init() { return nil } } - file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[34].Exporter = func(v any, i int) any { switch v := v.(*SyncInventoryResult); i { case 0: return &v.state @@ -3633,7 +3633,7 @@ func file_teleport_devicetrust_v1_devicetrust_service_proto_init() { return nil } } - file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[35].Exporter = func(v any, i int) any { switch v := v.(*SyncInventoryMissingDevices); i { case 0: return &v.state @@ -3645,7 +3645,7 @@ func file_teleport_devicetrust_v1_devicetrust_service_proto_init() { return nil } } - file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[36].Exporter = func(v any, i int) any { switch v := v.(*GetDevicesUsageRequest); i { case 0: return &v.state @@ -3658,37 +3658,37 @@ func file_teleport_devicetrust_v1_devicetrust_service_proto_init() { } } } - file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[13].OneofWrappers = []interface{}{ + file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[13].OneofWrappers = []any{ (*EnrollDeviceRequest_Init)(nil), (*EnrollDeviceRequest_MacosChallengeResponse)(nil), (*EnrollDeviceRequest_TpmChallengeResponse)(nil), } - file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[14].OneofWrappers = []interface{}{ + file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[14].OneofWrappers = []any{ (*EnrollDeviceResponse_Success)(nil), (*EnrollDeviceResponse_MacosChallenge)(nil), (*EnrollDeviceResponse_TpmChallenge)(nil), } - file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[20].OneofWrappers = []interface{}{ + file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[20].OneofWrappers = []any{ (*TPMEnrollPayload_EkCert)(nil), (*TPMEnrollPayload_EkKey)(nil), } - file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[25].OneofWrappers = []interface{}{ + file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[25].OneofWrappers = []any{ (*AuthenticateDeviceRequest_Init)(nil), (*AuthenticateDeviceRequest_ChallengeResponse)(nil), (*AuthenticateDeviceRequest_TpmChallengeResponse)(nil), } - file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[26].OneofWrappers = []interface{}{ + file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[26].OneofWrappers = []any{ (*AuthenticateDeviceResponse_Challenge)(nil), (*AuthenticateDeviceResponse_UserCertificates)(nil), (*AuthenticateDeviceResponse_TpmChallenge)(nil), } - file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[28].OneofWrappers = []interface{}{ + file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[28].OneofWrappers = []any{ (*SyncInventoryRequest_Start)(nil), (*SyncInventoryRequest_End)(nil), (*SyncInventoryRequest_DevicesToUpsert)(nil), (*SyncInventoryRequest_DevicesToRemove)(nil), } - file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[29].OneofWrappers = []interface{}{ + file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[29].OneofWrappers = []any{ (*SyncInventoryResponse_Ack)(nil), (*SyncInventoryResponse_Result)(nil), (*SyncInventoryResponse_MissingDevices)(nil), diff --git a/api/gen/proto/go/teleport/devicetrust/v1/os_type.pb.go b/api/gen/proto/go/teleport/devicetrust/v1/os_type.pb.go index 7af0663bcba61..aa09d404fec03 100644 --- a/api/gen/proto/go/teleport/devicetrust/v1/os_type.pb.go +++ b/api/gen/proto/go/teleport/devicetrust/v1/os_type.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/devicetrust/v1/os_type.proto @@ -125,7 +125,7 @@ func file_teleport_devicetrust_v1_os_type_proto_rawDescGZIP() []byte { } var file_teleport_devicetrust_v1_os_type_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_teleport_devicetrust_v1_os_type_proto_goTypes = []interface{}{ +var file_teleport_devicetrust_v1_os_type_proto_goTypes = []any{ (OSType)(0), // 0: teleport.devicetrust.v1.OSType } var file_teleport_devicetrust_v1_os_type_proto_depIdxs = []int32{ diff --git a/api/gen/proto/go/teleport/devicetrust/v1/tpm.pb.go b/api/gen/proto/go/teleport/devicetrust/v1/tpm.pb.go index 09ec405587484..4d2b84051b277 100644 --- a/api/gen/proto/go/teleport/devicetrust/v1/tpm.pb.go +++ b/api/gen/proto/go/teleport/devicetrust/v1/tpm.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/devicetrust/v1/tpm.proto @@ -345,7 +345,7 @@ func file_teleport_devicetrust_v1_tpm_proto_rawDescGZIP() []byte { } var file_teleport_devicetrust_v1_tpm_proto_msgTypes = make([]protoimpl.MessageInfo, 4) -var file_teleport_devicetrust_v1_tpm_proto_goTypes = []interface{}{ +var file_teleport_devicetrust_v1_tpm_proto_goTypes = []any{ (*TPMPCR)(nil), // 0: teleport.devicetrust.v1.TPMPCR (*TPMQuote)(nil), // 1: teleport.devicetrust.v1.TPMQuote (*TPMPlatformParameters)(nil), // 2: teleport.devicetrust.v1.TPMPlatformParameters @@ -368,7 +368,7 @@ func file_teleport_devicetrust_v1_tpm_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_devicetrust_v1_tpm_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_tpm_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*TPMPCR); i { case 0: return &v.state @@ -380,7 +380,7 @@ func file_teleport_devicetrust_v1_tpm_proto_init() { return nil } } - file_teleport_devicetrust_v1_tpm_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_tpm_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*TPMQuote); i { case 0: return &v.state @@ -392,7 +392,7 @@ func file_teleport_devicetrust_v1_tpm_proto_init() { return nil } } - file_teleport_devicetrust_v1_tpm_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_tpm_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*TPMPlatformParameters); i { case 0: return &v.state @@ -404,7 +404,7 @@ func file_teleport_devicetrust_v1_tpm_proto_init() { return nil } } - file_teleport_devicetrust_v1_tpm_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_tpm_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*TPMPlatformAttestation); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/devicetrust/v1/usage.pb.go b/api/gen/proto/go/teleport/devicetrust/v1/usage.pb.go index e4e90e9477f1b..50b9067694eca 100644 --- a/api/gen/proto/go/teleport/devicetrust/v1/usage.pb.go +++ b/api/gen/proto/go/teleport/devicetrust/v1/usage.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/devicetrust/v1/usage.proto @@ -166,7 +166,7 @@ func file_teleport_devicetrust_v1_usage_proto_rawDescGZIP() []byte { var file_teleport_devicetrust_v1_usage_proto_enumTypes = make([]protoimpl.EnumInfo, 1) var file_teleport_devicetrust_v1_usage_proto_msgTypes = make([]protoimpl.MessageInfo, 1) -var file_teleport_devicetrust_v1_usage_proto_goTypes = []interface{}{ +var file_teleport_devicetrust_v1_usage_proto_goTypes = []any{ (AccountUsageType)(0), // 0: teleport.devicetrust.v1.AccountUsageType (*DevicesUsage)(nil), // 1: teleport.devicetrust.v1.DevicesUsage } @@ -184,7 +184,7 @@ func file_teleport_devicetrust_v1_usage_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_devicetrust_v1_usage_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_usage_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*DevicesUsage); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/devicetrust/v1/user_certificates.pb.go b/api/gen/proto/go/teleport/devicetrust/v1/user_certificates.pb.go index bdc95e58ab8fe..06622561ed2cb 100644 --- a/api/gen/proto/go/teleport/devicetrust/v1/user_certificates.pb.go +++ b/api/gen/proto/go/teleport/devicetrust/v1/user_certificates.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/devicetrust/v1/user_certificates.proto @@ -129,7 +129,7 @@ func file_teleport_devicetrust_v1_user_certificates_proto_rawDescGZIP() []byte { } var file_teleport_devicetrust_v1_user_certificates_proto_msgTypes = make([]protoimpl.MessageInfo, 1) -var file_teleport_devicetrust_v1_user_certificates_proto_goTypes = []interface{}{ +var file_teleport_devicetrust_v1_user_certificates_proto_goTypes = []any{ (*UserCertificates)(nil), // 0: teleport.devicetrust.v1.UserCertificates } var file_teleport_devicetrust_v1_user_certificates_proto_depIdxs = []int32{ @@ -146,7 +146,7 @@ func file_teleport_devicetrust_v1_user_certificates_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_devicetrust_v1_user_certificates_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_user_certificates_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*UserCertificates); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/discoveryconfig/v1/discoveryconfig.pb.go b/api/gen/proto/go/teleport/discoveryconfig/v1/discoveryconfig.pb.go index b2284615ea357..d7e10b700fee7 100644 --- a/api/gen/proto/go/teleport/discoveryconfig/v1/discoveryconfig.pb.go +++ b/api/gen/proto/go/teleport/discoveryconfig/v1/discoveryconfig.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/discoveryconfig/v1/discoveryconfig.proto @@ -435,7 +435,7 @@ func file_teleport_discoveryconfig_v1_discoveryconfig_proto_rawDescGZIP() []byte var file_teleport_discoveryconfig_v1_discoveryconfig_proto_enumTypes = make([]protoimpl.EnumInfo, 1) var file_teleport_discoveryconfig_v1_discoveryconfig_proto_msgTypes = make([]protoimpl.MessageInfo, 3) -var file_teleport_discoveryconfig_v1_discoveryconfig_proto_goTypes = []interface{}{ +var file_teleport_discoveryconfig_v1_discoveryconfig_proto_goTypes = []any{ (DiscoveryConfigState)(0), // 0: teleport.discoveryconfig.v1.DiscoveryConfigState (*DiscoveryConfig)(nil), // 1: teleport.discoveryconfig.v1.DiscoveryConfig (*DiscoveryConfigSpec)(nil), // 2: teleport.discoveryconfig.v1.DiscoveryConfigSpec @@ -472,7 +472,7 @@ func file_teleport_discoveryconfig_v1_discoveryconfig_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_discoveryconfig_v1_discoveryconfig_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_discoveryconfig_v1_discoveryconfig_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*DiscoveryConfig); i { case 0: return &v.state @@ -484,7 +484,7 @@ func file_teleport_discoveryconfig_v1_discoveryconfig_proto_init() { return nil } } - file_teleport_discoveryconfig_v1_discoveryconfig_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_discoveryconfig_v1_discoveryconfig_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*DiscoveryConfigSpec); i { case 0: return &v.state @@ -496,7 +496,7 @@ func file_teleport_discoveryconfig_v1_discoveryconfig_proto_init() { return nil } } - file_teleport_discoveryconfig_v1_discoveryconfig_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_teleport_discoveryconfig_v1_discoveryconfig_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*DiscoveryConfigStatus); i { case 0: return &v.state @@ -509,7 +509,7 @@ func file_teleport_discoveryconfig_v1_discoveryconfig_proto_init() { } } } - file_teleport_discoveryconfig_v1_discoveryconfig_proto_msgTypes[2].OneofWrappers = []interface{}{} + file_teleport_discoveryconfig_v1_discoveryconfig_proto_msgTypes[2].OneofWrappers = []any{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ diff --git a/api/gen/proto/go/teleport/discoveryconfig/v1/discoveryconfig_service.pb.go b/api/gen/proto/go/teleport/discoveryconfig/v1/discoveryconfig_service.pb.go index 1ffb53e71af86..566c4938a9049 100644 --- a/api/gen/proto/go/teleport/discoveryconfig/v1/discoveryconfig_service.pb.go +++ b/api/gen/proto/go/teleport/discoveryconfig/v1/discoveryconfig_service.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/discoveryconfig/v1/discoveryconfig_service.proto @@ -661,7 +661,7 @@ func file_teleport_discoveryconfig_v1_discoveryconfig_service_proto_rawDescGZIP( } var file_teleport_discoveryconfig_v1_discoveryconfig_service_proto_msgTypes = make([]protoimpl.MessageInfo, 9) -var file_teleport_discoveryconfig_v1_discoveryconfig_service_proto_goTypes = []interface{}{ +var file_teleport_discoveryconfig_v1_discoveryconfig_service_proto_goTypes = []any{ (*ListDiscoveryConfigsRequest)(nil), // 0: teleport.discoveryconfig.v1.ListDiscoveryConfigsRequest (*ListDiscoveryConfigsResponse)(nil), // 1: teleport.discoveryconfig.v1.ListDiscoveryConfigsResponse (*GetDiscoveryConfigRequest)(nil), // 2: teleport.discoveryconfig.v1.GetDiscoveryConfigRequest @@ -711,7 +711,7 @@ func file_teleport_discoveryconfig_v1_discoveryconfig_service_proto_init() { } file_teleport_discoveryconfig_v1_discoveryconfig_proto_init() if !protoimpl.UnsafeEnabled { - file_teleport_discoveryconfig_v1_discoveryconfig_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_discoveryconfig_v1_discoveryconfig_service_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*ListDiscoveryConfigsRequest); i { case 0: return &v.state @@ -723,7 +723,7 @@ func file_teleport_discoveryconfig_v1_discoveryconfig_service_proto_init() { return nil } } - file_teleport_discoveryconfig_v1_discoveryconfig_service_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_discoveryconfig_v1_discoveryconfig_service_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*ListDiscoveryConfigsResponse); i { case 0: return &v.state @@ -735,7 +735,7 @@ func file_teleport_discoveryconfig_v1_discoveryconfig_service_proto_init() { return nil } } - file_teleport_discoveryconfig_v1_discoveryconfig_service_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_teleport_discoveryconfig_v1_discoveryconfig_service_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*GetDiscoveryConfigRequest); i { case 0: return &v.state @@ -747,7 +747,7 @@ func file_teleport_discoveryconfig_v1_discoveryconfig_service_proto_init() { return nil } } - file_teleport_discoveryconfig_v1_discoveryconfig_service_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_teleport_discoveryconfig_v1_discoveryconfig_service_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*CreateDiscoveryConfigRequest); i { case 0: return &v.state @@ -759,7 +759,7 @@ func file_teleport_discoveryconfig_v1_discoveryconfig_service_proto_init() { return nil } } - file_teleport_discoveryconfig_v1_discoveryconfig_service_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_teleport_discoveryconfig_v1_discoveryconfig_service_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*UpdateDiscoveryConfigRequest); i { case 0: return &v.state @@ -771,7 +771,7 @@ func file_teleport_discoveryconfig_v1_discoveryconfig_service_proto_init() { return nil } } - file_teleport_discoveryconfig_v1_discoveryconfig_service_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_teleport_discoveryconfig_v1_discoveryconfig_service_proto_msgTypes[5].Exporter = func(v any, i int) any { switch v := v.(*UpsertDiscoveryConfigRequest); i { case 0: return &v.state @@ -783,7 +783,7 @@ func file_teleport_discoveryconfig_v1_discoveryconfig_service_proto_init() { return nil } } - file_teleport_discoveryconfig_v1_discoveryconfig_service_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_teleport_discoveryconfig_v1_discoveryconfig_service_proto_msgTypes[6].Exporter = func(v any, i int) any { switch v := v.(*DeleteDiscoveryConfigRequest); i { case 0: return &v.state @@ -795,7 +795,7 @@ func file_teleport_discoveryconfig_v1_discoveryconfig_service_proto_init() { return nil } } - file_teleport_discoveryconfig_v1_discoveryconfig_service_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_teleport_discoveryconfig_v1_discoveryconfig_service_proto_msgTypes[7].Exporter = func(v any, i int) any { switch v := v.(*DeleteAllDiscoveryConfigsRequest); i { case 0: return &v.state @@ -807,7 +807,7 @@ func file_teleport_discoveryconfig_v1_discoveryconfig_service_proto_init() { return nil } } - file_teleport_discoveryconfig_v1_discoveryconfig_service_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + file_teleport_discoveryconfig_v1_discoveryconfig_service_proto_msgTypes[8].Exporter = func(v any, i int) any { switch v := v.(*UpdateDiscoveryConfigStatusRequest); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/embedding/v1/embedding.pb.go b/api/gen/proto/go/teleport/embedding/v1/embedding.pb.go index ef63d4694b527..e35341ba75a99 100644 --- a/api/gen/proto/go/teleport/embedding/v1/embedding.pb.go +++ b/api/gen/proto/go/teleport/embedding/v1/embedding.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/embedding/v1/embedding.proto @@ -151,7 +151,7 @@ func file_teleport_embedding_v1_embedding_proto_rawDescGZIP() []byte { } var file_teleport_embedding_v1_embedding_proto_msgTypes = make([]protoimpl.MessageInfo, 1) -var file_teleport_embedding_v1_embedding_proto_goTypes = []interface{}{ +var file_teleport_embedding_v1_embedding_proto_goTypes = []any{ (*Embedding)(nil), // 0: teleport.embedding.v1.Embedding } var file_teleport_embedding_v1_embedding_proto_depIdxs = []int32{ @@ -168,7 +168,7 @@ func file_teleport_embedding_v1_embedding_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_embedding_v1_embedding_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_embedding_v1_embedding_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*Embedding); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/externalauditstorage/v1/externalauditstorage.pb.go b/api/gen/proto/go/teleport/externalauditstorage/v1/externalauditstorage.pb.go index c198ad22f0930..336a8833045d1 100644 --- a/api/gen/proto/go/teleport/externalauditstorage/v1/externalauditstorage.pb.go +++ b/api/gen/proto/go/teleport/externalauditstorage/v1/externalauditstorage.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/externalauditstorage/v1/externalauditstorage.proto @@ -290,7 +290,7 @@ func file_teleport_externalauditstorage_v1_externalauditstorage_proto_rawDescGZI } var file_teleport_externalauditstorage_v1_externalauditstorage_proto_msgTypes = make([]protoimpl.MessageInfo, 2) -var file_teleport_externalauditstorage_v1_externalauditstorage_proto_goTypes = []interface{}{ +var file_teleport_externalauditstorage_v1_externalauditstorage_proto_goTypes = []any{ (*ExternalAuditStorage)(nil), // 0: teleport.externalauditstorage.v1.ExternalAuditStorage (*ExternalAuditStorageSpec)(nil), // 1: teleport.externalauditstorage.v1.ExternalAuditStorageSpec (*v1.ResourceHeader)(nil), // 2: teleport.header.v1.ResourceHeader @@ -311,7 +311,7 @@ func file_teleport_externalauditstorage_v1_externalauditstorage_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_externalauditstorage_v1_externalauditstorage_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_externalauditstorage_v1_externalauditstorage_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*ExternalAuditStorage); i { case 0: return &v.state @@ -323,7 +323,7 @@ func file_teleport_externalauditstorage_v1_externalauditstorage_proto_init() { return nil } } - file_teleport_externalauditstorage_v1_externalauditstorage_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_externalauditstorage_v1_externalauditstorage_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*ExternalAuditStorageSpec); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/externalauditstorage/v1/externalauditstorage_service.pb.go b/api/gen/proto/go/teleport/externalauditstorage/v1/externalauditstorage_service.pb.go index 7be704847cd7a..493214b7d5c16 100644 --- a/api/gen/proto/go/teleport/externalauditstorage/v1/externalauditstorage_service.pb.go +++ b/api/gen/proto/go/teleport/externalauditstorage/v1/externalauditstorage_service.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/externalauditstorage/v1/externalauditstorage_service.proto @@ -1216,7 +1216,7 @@ func file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_ra } var file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_msgTypes = make([]protoimpl.MessageInfo, 20) -var file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_goTypes = []interface{}{ +var file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_goTypes = []any{ (*GetDraftExternalAuditStorageRequest)(nil), // 0: teleport.externalauditstorage.v1.GetDraftExternalAuditStorageRequest (*GetDraftExternalAuditStorageResponse)(nil), // 1: teleport.externalauditstorage.v1.GetDraftExternalAuditStorageResponse (*CreateDraftExternalAuditStorageRequest)(nil), // 2: teleport.externalauditstorage.v1.CreateDraftExternalAuditStorageRequest @@ -1285,7 +1285,7 @@ func file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_in } file_teleport_externalauditstorage_v1_externalauditstorage_proto_init() if !protoimpl.UnsafeEnabled { - file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*GetDraftExternalAuditStorageRequest); i { case 0: return &v.state @@ -1297,7 +1297,7 @@ func file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_in return nil } } - file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*GetDraftExternalAuditStorageResponse); i { case 0: return &v.state @@ -1309,7 +1309,7 @@ func file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_in return nil } } - file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*CreateDraftExternalAuditStorageRequest); i { case 0: return &v.state @@ -1321,7 +1321,7 @@ func file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_in return nil } } - file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*CreateDraftExternalAuditStorageResponse); i { case 0: return &v.state @@ -1333,7 +1333,7 @@ func file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_in return nil } } - file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*UpsertDraftExternalAuditStorageRequest); i { case 0: return &v.state @@ -1345,7 +1345,7 @@ func file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_in return nil } } - file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_msgTypes[5].Exporter = func(v any, i int) any { switch v := v.(*UpsertDraftExternalAuditStorageResponse); i { case 0: return &v.state @@ -1357,7 +1357,7 @@ func file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_in return nil } } - file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_msgTypes[6].Exporter = func(v any, i int) any { switch v := v.(*DeleteDraftExternalAuditStorageRequest); i { case 0: return &v.state @@ -1369,7 +1369,7 @@ func file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_in return nil } } - file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_msgTypes[7].Exporter = func(v any, i int) any { switch v := v.(*PromoteToClusterExternalAuditStorageRequest); i { case 0: return &v.state @@ -1381,7 +1381,7 @@ func file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_in return nil } } - file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_msgTypes[8].Exporter = func(v any, i int) any { switch v := v.(*PromoteToClusterExternalAuditStorageResponse); i { case 0: return &v.state @@ -1393,7 +1393,7 @@ func file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_in return nil } } - file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_msgTypes[9].Exporter = func(v any, i int) any { switch v := v.(*GetClusterExternalAuditStorageRequest); i { case 0: return &v.state @@ -1405,7 +1405,7 @@ func file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_in return nil } } - file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_msgTypes[10].Exporter = func(v any, i int) any { switch v := v.(*GetClusterExternalAuditStorageResponse); i { case 0: return &v.state @@ -1417,7 +1417,7 @@ func file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_in return nil } } - file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_msgTypes[11].Exporter = func(v any, i int) any { switch v := v.(*DisableClusterExternalAuditStorageRequest); i { case 0: return &v.state @@ -1429,7 +1429,7 @@ func file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_in return nil } } - file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_msgTypes[12].Exporter = func(v any, i int) any { switch v := v.(*GenerateDraftExternalAuditStorageRequest); i { case 0: return &v.state @@ -1441,7 +1441,7 @@ func file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_in return nil } } - file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_msgTypes[13].Exporter = func(v any, i int) any { switch v := v.(*GenerateDraftExternalAuditStorageResponse); i { case 0: return &v.state @@ -1453,7 +1453,7 @@ func file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_in return nil } } - file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_msgTypes[14].Exporter = func(v any, i int) any { switch v := v.(*TestDraftExternalAuditStorageBucketsRequest); i { case 0: return &v.state @@ -1465,7 +1465,7 @@ func file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_in return nil } } - file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_msgTypes[15].Exporter = func(v any, i int) any { switch v := v.(*TestDraftExternalAuditStorageBucketsResponse); i { case 0: return &v.state @@ -1477,7 +1477,7 @@ func file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_in return nil } } - file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_msgTypes[16].Exporter = func(v any, i int) any { switch v := v.(*TestDraftExternalAuditStorageGlueRequest); i { case 0: return &v.state @@ -1489,7 +1489,7 @@ func file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_in return nil } } - file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_msgTypes[17].Exporter = func(v any, i int) any { switch v := v.(*TestDraftExternalAuditStorageGlueResponse); i { case 0: return &v.state @@ -1501,7 +1501,7 @@ func file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_in return nil } } - file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_msgTypes[18].Exporter = func(v any, i int) any { switch v := v.(*TestDraftExternalAuditStorageAthenaRequest); i { case 0: return &v.state @@ -1513,7 +1513,7 @@ func file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_in return nil } } - file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_msgTypes[19].Exporter = func(v any, i int) any { switch v := v.(*TestDraftExternalAuditStorageAthenaResponse); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/header/v1/metadata.pb.go b/api/gen/proto/go/teleport/header/v1/metadata.pb.go index 20e03ff879f4b..82f9240ff41b6 100644 --- a/api/gen/proto/go/teleport/header/v1/metadata.pb.go +++ b/api/gen/proto/go/teleport/header/v1/metadata.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/header/v1/metadata.proto @@ -196,7 +196,7 @@ func file_teleport_header_v1_metadata_proto_rawDescGZIP() []byte { } var file_teleport_header_v1_metadata_proto_msgTypes = make([]protoimpl.MessageInfo, 2) -var file_teleport_header_v1_metadata_proto_goTypes = []interface{}{ +var file_teleport_header_v1_metadata_proto_goTypes = []any{ (*Metadata)(nil), // 0: teleport.header.v1.Metadata nil, // 1: teleport.header.v1.Metadata.LabelsEntry (*timestamppb.Timestamp)(nil), // 2: google.protobuf.Timestamp @@ -217,7 +217,7 @@ func file_teleport_header_v1_metadata_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_header_v1_metadata_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_header_v1_metadata_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*Metadata); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/header/v1/resourceheader.pb.go b/api/gen/proto/go/teleport/header/v1/resourceheader.pb.go index 1241518ab54ce..2d83e877f08a6 100644 --- a/api/gen/proto/go/teleport/header/v1/resourceheader.pb.go +++ b/api/gen/proto/go/teleport/header/v1/resourceheader.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/header/v1/resourceheader.proto @@ -152,7 +152,7 @@ func file_teleport_header_v1_resourceheader_proto_rawDescGZIP() []byte { } var file_teleport_header_v1_resourceheader_proto_msgTypes = make([]protoimpl.MessageInfo, 1) -var file_teleport_header_v1_resourceheader_proto_goTypes = []interface{}{ +var file_teleport_header_v1_resourceheader_proto_goTypes = []any{ (*ResourceHeader)(nil), // 0: teleport.header.v1.ResourceHeader (*Metadata)(nil), // 1: teleport.header.v1.Metadata } @@ -172,7 +172,7 @@ func file_teleport_header_v1_resourceheader_proto_init() { } file_teleport_header_v1_metadata_proto_init() if !protoimpl.UnsafeEnabled { - file_teleport_header_v1_resourceheader_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_header_v1_resourceheader_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*ResourceHeader); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/integration/v1/awsoidc_service.pb.go b/api/gen/proto/go/teleport/integration/v1/awsoidc_service.pb.go index 81240133ed30e..ab4d6a60fc4cb 100644 --- a/api/gen/proto/go/teleport/integration/v1/awsoidc_service.pb.go +++ b/api/gen/proto/go/teleport/integration/v1/awsoidc_service.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/integration/v1/awsoidc_service.proto @@ -2401,7 +2401,7 @@ func file_teleport_integration_v1_awsoidc_service_proto_rawDescGZIP() []byte { } var file_teleport_integration_v1_awsoidc_service_proto_msgTypes = make([]protoimpl.MessageInfo, 28) -var file_teleport_integration_v1_awsoidc_service_proto_goTypes = []interface{}{ +var file_teleport_integration_v1_awsoidc_service_proto_goTypes = []any{ (*ListEICERequest)(nil), // 0: teleport.integration.v1.ListEICERequest (*EC2InstanceConnectEndpoint)(nil), // 1: teleport.integration.v1.EC2InstanceConnectEndpoint (*ListEICEResponse)(nil), // 2: teleport.integration.v1.ListEICEResponse @@ -2479,7 +2479,7 @@ func file_teleport_integration_v1_awsoidc_service_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_integration_v1_awsoidc_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_integration_v1_awsoidc_service_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*ListEICERequest); i { case 0: return &v.state @@ -2491,7 +2491,7 @@ func file_teleport_integration_v1_awsoidc_service_proto_init() { return nil } } - file_teleport_integration_v1_awsoidc_service_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_integration_v1_awsoidc_service_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*EC2InstanceConnectEndpoint); i { case 0: return &v.state @@ -2503,7 +2503,7 @@ func file_teleport_integration_v1_awsoidc_service_proto_init() { return nil } } - file_teleport_integration_v1_awsoidc_service_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_teleport_integration_v1_awsoidc_service_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*ListEICEResponse); i { case 0: return &v.state @@ -2515,7 +2515,7 @@ func file_teleport_integration_v1_awsoidc_service_proto_init() { return nil } } - file_teleport_integration_v1_awsoidc_service_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_teleport_integration_v1_awsoidc_service_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*CreateEICERequest); i { case 0: return &v.state @@ -2527,7 +2527,7 @@ func file_teleport_integration_v1_awsoidc_service_proto_init() { return nil } } - file_teleport_integration_v1_awsoidc_service_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_teleport_integration_v1_awsoidc_service_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*EC2ICEndpoint); i { case 0: return &v.state @@ -2539,7 +2539,7 @@ func file_teleport_integration_v1_awsoidc_service_proto_init() { return nil } } - file_teleport_integration_v1_awsoidc_service_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_teleport_integration_v1_awsoidc_service_proto_msgTypes[5].Exporter = func(v any, i int) any { switch v := v.(*CreateEICEResponse); i { case 0: return &v.state @@ -2551,7 +2551,7 @@ func file_teleport_integration_v1_awsoidc_service_proto_init() { return nil } } - file_teleport_integration_v1_awsoidc_service_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_teleport_integration_v1_awsoidc_service_proto_msgTypes[6].Exporter = func(v any, i int) any { switch v := v.(*ListDatabasesRequest); i { case 0: return &v.state @@ -2563,7 +2563,7 @@ func file_teleport_integration_v1_awsoidc_service_proto_init() { return nil } } - file_teleport_integration_v1_awsoidc_service_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_teleport_integration_v1_awsoidc_service_proto_msgTypes[7].Exporter = func(v any, i int) any { switch v := v.(*ListDatabasesResponse); i { case 0: return &v.state @@ -2575,7 +2575,7 @@ func file_teleport_integration_v1_awsoidc_service_proto_init() { return nil } } - file_teleport_integration_v1_awsoidc_service_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + file_teleport_integration_v1_awsoidc_service_proto_msgTypes[8].Exporter = func(v any, i int) any { switch v := v.(*ListSecurityGroupsRequest); i { case 0: return &v.state @@ -2587,7 +2587,7 @@ func file_teleport_integration_v1_awsoidc_service_proto_init() { return nil } } - file_teleport_integration_v1_awsoidc_service_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + file_teleport_integration_v1_awsoidc_service_proto_msgTypes[9].Exporter = func(v any, i int) any { switch v := v.(*SecurityGroupRuleCIDR); i { case 0: return &v.state @@ -2599,7 +2599,7 @@ func file_teleport_integration_v1_awsoidc_service_proto_init() { return nil } } - file_teleport_integration_v1_awsoidc_service_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + file_teleport_integration_v1_awsoidc_service_proto_msgTypes[10].Exporter = func(v any, i int) any { switch v := v.(*SecurityGroupRule); i { case 0: return &v.state @@ -2611,7 +2611,7 @@ func file_teleport_integration_v1_awsoidc_service_proto_init() { return nil } } - file_teleport_integration_v1_awsoidc_service_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + file_teleport_integration_v1_awsoidc_service_proto_msgTypes[11].Exporter = func(v any, i int) any { switch v := v.(*SecurityGroup); i { case 0: return &v.state @@ -2623,7 +2623,7 @@ func file_teleport_integration_v1_awsoidc_service_proto_init() { return nil } } - file_teleport_integration_v1_awsoidc_service_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + file_teleport_integration_v1_awsoidc_service_proto_msgTypes[12].Exporter = func(v any, i int) any { switch v := v.(*ListSecurityGroupsResponse); i { case 0: return &v.state @@ -2635,7 +2635,7 @@ func file_teleport_integration_v1_awsoidc_service_proto_init() { return nil } } - file_teleport_integration_v1_awsoidc_service_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + file_teleport_integration_v1_awsoidc_service_proto_msgTypes[13].Exporter = func(v any, i int) any { switch v := v.(*DeployDatabaseServiceRequest); i { case 0: return &v.state @@ -2647,7 +2647,7 @@ func file_teleport_integration_v1_awsoidc_service_proto_init() { return nil } } - file_teleport_integration_v1_awsoidc_service_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + file_teleport_integration_v1_awsoidc_service_proto_msgTypes[14].Exporter = func(v any, i int) any { switch v := v.(*DeployDatabaseServiceDeployment); i { case 0: return &v.state @@ -2659,7 +2659,7 @@ func file_teleport_integration_v1_awsoidc_service_proto_init() { return nil } } - file_teleport_integration_v1_awsoidc_service_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + file_teleport_integration_v1_awsoidc_service_proto_msgTypes[15].Exporter = func(v any, i int) any { switch v := v.(*DeployDatabaseServiceResponse); i { case 0: return &v.state @@ -2671,7 +2671,7 @@ func file_teleport_integration_v1_awsoidc_service_proto_init() { return nil } } - file_teleport_integration_v1_awsoidc_service_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + file_teleport_integration_v1_awsoidc_service_proto_msgTypes[16].Exporter = func(v any, i int) any { switch v := v.(*DeployServiceRequest); i { case 0: return &v.state @@ -2683,7 +2683,7 @@ func file_teleport_integration_v1_awsoidc_service_proto_init() { return nil } } - file_teleport_integration_v1_awsoidc_service_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + file_teleport_integration_v1_awsoidc_service_proto_msgTypes[17].Exporter = func(v any, i int) any { switch v := v.(*DeployServiceResponse); i { case 0: return &v.state @@ -2695,7 +2695,7 @@ func file_teleport_integration_v1_awsoidc_service_proto_init() { return nil } } - file_teleport_integration_v1_awsoidc_service_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + file_teleport_integration_v1_awsoidc_service_proto_msgTypes[18].Exporter = func(v any, i int) any { switch v := v.(*EnrollEKSClustersRequest); i { case 0: return &v.state @@ -2707,7 +2707,7 @@ func file_teleport_integration_v1_awsoidc_service_proto_init() { return nil } } - file_teleport_integration_v1_awsoidc_service_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + file_teleport_integration_v1_awsoidc_service_proto_msgTypes[19].Exporter = func(v any, i int) any { switch v := v.(*EnrollEKSClusterResult); i { case 0: return &v.state @@ -2719,7 +2719,7 @@ func file_teleport_integration_v1_awsoidc_service_proto_init() { return nil } } - file_teleport_integration_v1_awsoidc_service_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + file_teleport_integration_v1_awsoidc_service_proto_msgTypes[20].Exporter = func(v any, i int) any { switch v := v.(*EnrollEKSClustersResponse); i { case 0: return &v.state @@ -2731,7 +2731,7 @@ func file_teleport_integration_v1_awsoidc_service_proto_init() { return nil } } - file_teleport_integration_v1_awsoidc_service_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + file_teleport_integration_v1_awsoidc_service_proto_msgTypes[21].Exporter = func(v any, i int) any { switch v := v.(*ListEC2Request); i { case 0: return &v.state @@ -2743,7 +2743,7 @@ func file_teleport_integration_v1_awsoidc_service_proto_init() { return nil } } - file_teleport_integration_v1_awsoidc_service_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { + file_teleport_integration_v1_awsoidc_service_proto_msgTypes[22].Exporter = func(v any, i int) any { switch v := v.(*ListEC2Response); i { case 0: return &v.state @@ -2755,7 +2755,7 @@ func file_teleport_integration_v1_awsoidc_service_proto_init() { return nil } } - file_teleport_integration_v1_awsoidc_service_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { + file_teleport_integration_v1_awsoidc_service_proto_msgTypes[23].Exporter = func(v any, i int) any { switch v := v.(*ListEKSClustersRequest); i { case 0: return &v.state @@ -2767,7 +2767,7 @@ func file_teleport_integration_v1_awsoidc_service_proto_init() { return nil } } - file_teleport_integration_v1_awsoidc_service_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { + file_teleport_integration_v1_awsoidc_service_proto_msgTypes[24].Exporter = func(v any, i int) any { switch v := v.(*EKSCluster); i { case 0: return &v.state @@ -2779,7 +2779,7 @@ func file_teleport_integration_v1_awsoidc_service_proto_init() { return nil } } - file_teleport_integration_v1_awsoidc_service_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { + file_teleport_integration_v1_awsoidc_service_proto_msgTypes[25].Exporter = func(v any, i int) any { switch v := v.(*ListEKSClustersResponse); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/integration/v1/integration_service.pb.go b/api/gen/proto/go/teleport/integration/v1/integration_service.pb.go index 6dd485f9c3cf3..e5f0823a4d48f 100644 --- a/api/gen/proto/go/teleport/integration/v1/integration_service.pb.go +++ b/api/gen/proto/go/teleport/integration/v1/integration_service.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/integration/v1/integration_service.proto @@ -635,7 +635,7 @@ func file_teleport_integration_v1_integration_service_proto_rawDescGZIP() []byte } var file_teleport_integration_v1_integration_service_proto_msgTypes = make([]protoimpl.MessageInfo, 9) -var file_teleport_integration_v1_integration_service_proto_goTypes = []interface{}{ +var file_teleport_integration_v1_integration_service_proto_goTypes = []any{ (*ListIntegrationsRequest)(nil), // 0: teleport.integration.v1.ListIntegrationsRequest (*ListIntegrationsResponse)(nil), // 1: teleport.integration.v1.ListIntegrationsResponse (*GetIntegrationRequest)(nil), // 2: teleport.integration.v1.GetIntegrationRequest @@ -679,7 +679,7 @@ func file_teleport_integration_v1_integration_service_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_integration_v1_integration_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_integration_v1_integration_service_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*ListIntegrationsRequest); i { case 0: return &v.state @@ -691,7 +691,7 @@ func file_teleport_integration_v1_integration_service_proto_init() { return nil } } - file_teleport_integration_v1_integration_service_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_integration_v1_integration_service_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*ListIntegrationsResponse); i { case 0: return &v.state @@ -703,7 +703,7 @@ func file_teleport_integration_v1_integration_service_proto_init() { return nil } } - file_teleport_integration_v1_integration_service_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_teleport_integration_v1_integration_service_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*GetIntegrationRequest); i { case 0: return &v.state @@ -715,7 +715,7 @@ func file_teleport_integration_v1_integration_service_proto_init() { return nil } } - file_teleport_integration_v1_integration_service_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_teleport_integration_v1_integration_service_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*CreateIntegrationRequest); i { case 0: return &v.state @@ -727,7 +727,7 @@ func file_teleport_integration_v1_integration_service_proto_init() { return nil } } - file_teleport_integration_v1_integration_service_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_teleport_integration_v1_integration_service_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*UpdateIntegrationRequest); i { case 0: return &v.state @@ -739,7 +739,7 @@ func file_teleport_integration_v1_integration_service_proto_init() { return nil } } - file_teleport_integration_v1_integration_service_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_teleport_integration_v1_integration_service_proto_msgTypes[5].Exporter = func(v any, i int) any { switch v := v.(*DeleteIntegrationRequest); i { case 0: return &v.state @@ -751,7 +751,7 @@ func file_teleport_integration_v1_integration_service_proto_init() { return nil } } - file_teleport_integration_v1_integration_service_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_teleport_integration_v1_integration_service_proto_msgTypes[6].Exporter = func(v any, i int) any { switch v := v.(*DeleteAllIntegrationsRequest); i { case 0: return &v.state @@ -763,7 +763,7 @@ func file_teleport_integration_v1_integration_service_proto_init() { return nil } } - file_teleport_integration_v1_integration_service_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_teleport_integration_v1_integration_service_proto_msgTypes[7].Exporter = func(v any, i int) any { switch v := v.(*GenerateAWSOIDCTokenRequest); i { case 0: return &v.state @@ -775,7 +775,7 @@ func file_teleport_integration_v1_integration_service_proto_init() { return nil } } - file_teleport_integration_v1_integration_service_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + file_teleport_integration_v1_integration_service_proto_msgTypes[8].Exporter = func(v any, i int) any { switch v := v.(*GenerateAWSOIDCTokenResponse); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/kube/v1/kube_service.pb.go b/api/gen/proto/go/teleport/kube/v1/kube_service.pb.go index 661ae6bdeb1bb..fe29cc410c567 100644 --- a/api/gen/proto/go/teleport/kube/v1/kube_service.pb.go +++ b/api/gen/proto/go/teleport/kube/v1/kube_service.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/kube/v1/kube_service.proto @@ -359,7 +359,7 @@ func file_teleport_kube_v1_kube_service_proto_rawDescGZIP() []byte { } var file_teleport_kube_v1_kube_service_proto_msgTypes = make([]protoimpl.MessageInfo, 3) -var file_teleport_kube_v1_kube_service_proto_goTypes = []interface{}{ +var file_teleport_kube_v1_kube_service_proto_goTypes = []any{ (*ListKubernetesResourcesRequest)(nil), // 0: teleport.kube.v1.ListKubernetesResourcesRequest (*ListKubernetesResourcesResponse)(nil), // 1: teleport.kube.v1.ListKubernetesResourcesResponse nil, // 2: teleport.kube.v1.ListKubernetesResourcesRequest.LabelsEntry @@ -385,7 +385,7 @@ func file_teleport_kube_v1_kube_service_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_kube_v1_kube_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_kube_v1_kube_service_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*ListKubernetesResourcesRequest); i { case 0: return &v.state @@ -397,7 +397,7 @@ func file_teleport_kube_v1_kube_service_proto_init() { return nil } } - file_teleport_kube_v1_kube_service_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_kube_v1_kube_service_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*ListKubernetesResourcesResponse); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/kubewaitingcontainer/v1/kubewaitingcontainer.pb.go b/api/gen/proto/go/teleport/kubewaitingcontainer/v1/kubewaitingcontainer.pb.go index 430158734350f..0182ab9262033 100644 --- a/api/gen/proto/go/teleport/kubewaitingcontainer/v1/kubewaitingcontainer.pb.go +++ b/api/gen/proto/go/teleport/kubewaitingcontainer/v1/kubewaitingcontainer.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/kubewaitingcontainer/v1/kubewaitingcontainer.proto @@ -290,7 +290,7 @@ func file_teleport_kubewaitingcontainer_v1_kubewaitingcontainer_proto_rawDescGZI } var file_teleport_kubewaitingcontainer_v1_kubewaitingcontainer_proto_msgTypes = make([]protoimpl.MessageInfo, 2) -var file_teleport_kubewaitingcontainer_v1_kubewaitingcontainer_proto_goTypes = []interface{}{ +var file_teleport_kubewaitingcontainer_v1_kubewaitingcontainer_proto_goTypes = []any{ (*KubernetesWaitingContainer)(nil), // 0: teleport.kubewaitingcontainer.v1.KubernetesWaitingContainer (*KubernetesWaitingContainerSpec)(nil), // 1: teleport.kubewaitingcontainer.v1.KubernetesWaitingContainerSpec (*v1.Metadata)(nil), // 2: teleport.header.v1.Metadata @@ -311,7 +311,7 @@ func file_teleport_kubewaitingcontainer_v1_kubewaitingcontainer_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_kubewaitingcontainer_v1_kubewaitingcontainer_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_kubewaitingcontainer_v1_kubewaitingcontainer_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*KubernetesWaitingContainer); i { case 0: return &v.state @@ -323,7 +323,7 @@ func file_teleport_kubewaitingcontainer_v1_kubewaitingcontainer_proto_init() { return nil } } - file_teleport_kubewaitingcontainer_v1_kubewaitingcontainer_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_kubewaitingcontainer_v1_kubewaitingcontainer_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*KubernetesWaitingContainerSpec); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/kubewaitingcontainer/v1/kubewaitingcontainer_service.pb.go b/api/gen/proto/go/teleport/kubewaitingcontainer/v1/kubewaitingcontainer_service.pb.go index 26975c6922f9c..7c42b2c4c2333 100644 --- a/api/gen/proto/go/teleport/kubewaitingcontainer/v1/kubewaitingcontainer_service.pb.go +++ b/api/gen/proto/go/teleport/kubewaitingcontainer/v1/kubewaitingcontainer_service.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/kubewaitingcontainer/v1/kubewaitingcontainer_service.proto @@ -504,7 +504,7 @@ func file_teleport_kubewaitingcontainer_v1_kubewaitingcontainer_service_proto_ra } var file_teleport_kubewaitingcontainer_v1_kubewaitingcontainer_service_proto_msgTypes = make([]protoimpl.MessageInfo, 5) -var file_teleport_kubewaitingcontainer_v1_kubewaitingcontainer_service_proto_goTypes = []interface{}{ +var file_teleport_kubewaitingcontainer_v1_kubewaitingcontainer_service_proto_goTypes = []any{ (*ListKubernetesWaitingContainersRequest)(nil), // 0: teleport.kubewaitingcontainer.v1.ListKubernetesWaitingContainersRequest (*ListKubernetesWaitingContainersResponse)(nil), // 1: teleport.kubewaitingcontainer.v1.ListKubernetesWaitingContainersResponse (*GetKubernetesWaitingContainerRequest)(nil), // 2: teleport.kubewaitingcontainer.v1.GetKubernetesWaitingContainerRequest @@ -538,7 +538,7 @@ func file_teleport_kubewaitingcontainer_v1_kubewaitingcontainer_service_proto_in } file_teleport_kubewaitingcontainer_v1_kubewaitingcontainer_proto_init() if !protoimpl.UnsafeEnabled { - file_teleport_kubewaitingcontainer_v1_kubewaitingcontainer_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_kubewaitingcontainer_v1_kubewaitingcontainer_service_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*ListKubernetesWaitingContainersRequest); i { case 0: return &v.state @@ -550,7 +550,7 @@ func file_teleport_kubewaitingcontainer_v1_kubewaitingcontainer_service_proto_in return nil } } - file_teleport_kubewaitingcontainer_v1_kubewaitingcontainer_service_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_kubewaitingcontainer_v1_kubewaitingcontainer_service_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*ListKubernetesWaitingContainersResponse); i { case 0: return &v.state @@ -562,7 +562,7 @@ func file_teleport_kubewaitingcontainer_v1_kubewaitingcontainer_service_proto_in return nil } } - file_teleport_kubewaitingcontainer_v1_kubewaitingcontainer_service_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_teleport_kubewaitingcontainer_v1_kubewaitingcontainer_service_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*GetKubernetesWaitingContainerRequest); i { case 0: return &v.state @@ -574,7 +574,7 @@ func file_teleport_kubewaitingcontainer_v1_kubewaitingcontainer_service_proto_in return nil } } - file_teleport_kubewaitingcontainer_v1_kubewaitingcontainer_service_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_teleport_kubewaitingcontainer_v1_kubewaitingcontainer_service_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*CreateKubernetesWaitingContainerRequest); i { case 0: return &v.state @@ -586,7 +586,7 @@ func file_teleport_kubewaitingcontainer_v1_kubewaitingcontainer_service_proto_in return nil } } - file_teleport_kubewaitingcontainer_v1_kubewaitingcontainer_service_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_teleport_kubewaitingcontainer_v1_kubewaitingcontainer_service_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*DeleteKubernetesWaitingContainerRequest); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/label/v1/label.pb.go b/api/gen/proto/go/teleport/label/v1/label.pb.go index b43a962f4148c..4e68929981f16 100644 --- a/api/gen/proto/go/teleport/label/v1/label.pb.go +++ b/api/gen/proto/go/teleport/label/v1/label.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/label/v1/label.proto @@ -122,7 +122,7 @@ func file_teleport_label_v1_label_proto_rawDescGZIP() []byte { } var file_teleport_label_v1_label_proto_msgTypes = make([]protoimpl.MessageInfo, 1) -var file_teleport_label_v1_label_proto_goTypes = []interface{}{ +var file_teleport_label_v1_label_proto_goTypes = []any{ (*Label)(nil), // 0: teleport.label.v1.Label } var file_teleport_label_v1_label_proto_depIdxs = []int32{ @@ -139,7 +139,7 @@ func file_teleport_label_v1_label_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_label_v1_label_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_label_v1_label_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*Label); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/loginrule/v1/loginrule.pb.go b/api/gen/proto/go/teleport/loginrule/v1/loginrule.pb.go index 3a01b1e524cb4..e2da6a5e233b8 100644 --- a/api/gen/proto/go/teleport/loginrule/v1/loginrule.pb.go +++ b/api/gen/proto/go/teleport/loginrule/v1/loginrule.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/loginrule/v1/loginrule.proto @@ -180,7 +180,7 @@ func file_teleport_loginrule_v1_loginrule_proto_rawDescGZIP() []byte { } var file_teleport_loginrule_v1_loginrule_proto_msgTypes = make([]protoimpl.MessageInfo, 2) -var file_teleport_loginrule_v1_loginrule_proto_goTypes = []interface{}{ +var file_teleport_loginrule_v1_loginrule_proto_goTypes = []any{ (*LoginRule)(nil), // 0: teleport.loginrule.v1.LoginRule nil, // 1: teleport.loginrule.v1.LoginRule.TraitsMapEntry (*types.Metadata)(nil), // 2: types.Metadata @@ -203,7 +203,7 @@ func file_teleport_loginrule_v1_loginrule_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_loginrule_v1_loginrule_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_loginrule_v1_loginrule_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*LoginRule); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/loginrule/v1/loginrule_service.pb.go b/api/gen/proto/go/teleport/loginrule/v1/loginrule_service.pb.go index 2641e8ced9f0e..aa49ef7a86c71 100644 --- a/api/gen/proto/go/teleport/loginrule/v1/loginrule_service.pb.go +++ b/api/gen/proto/go/teleport/loginrule/v1/loginrule_service.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/loginrule/v1/loginrule_service.proto @@ -604,7 +604,7 @@ func file_teleport_loginrule_v1_loginrule_service_proto_rawDescGZIP() []byte { } var file_teleport_loginrule_v1_loginrule_service_proto_msgTypes = make([]protoimpl.MessageInfo, 10) -var file_teleport_loginrule_v1_loginrule_service_proto_goTypes = []interface{}{ +var file_teleport_loginrule_v1_loginrule_service_proto_goTypes = []any{ (*CreateLoginRuleRequest)(nil), // 0: teleport.loginrule.v1.CreateLoginRuleRequest (*UpsertLoginRuleRequest)(nil), // 1: teleport.loginrule.v1.UpsertLoginRuleRequest (*GetLoginRuleRequest)(nil), // 2: teleport.loginrule.v1.GetLoginRuleRequest @@ -654,7 +654,7 @@ func file_teleport_loginrule_v1_loginrule_service_proto_init() { } file_teleport_loginrule_v1_loginrule_proto_init() if !protoimpl.UnsafeEnabled { - file_teleport_loginrule_v1_loginrule_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_loginrule_v1_loginrule_service_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*CreateLoginRuleRequest); i { case 0: return &v.state @@ -666,7 +666,7 @@ func file_teleport_loginrule_v1_loginrule_service_proto_init() { return nil } } - file_teleport_loginrule_v1_loginrule_service_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_loginrule_v1_loginrule_service_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*UpsertLoginRuleRequest); i { case 0: return &v.state @@ -678,7 +678,7 @@ func file_teleport_loginrule_v1_loginrule_service_proto_init() { return nil } } - file_teleport_loginrule_v1_loginrule_service_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_teleport_loginrule_v1_loginrule_service_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*GetLoginRuleRequest); i { case 0: return &v.state @@ -690,7 +690,7 @@ func file_teleport_loginrule_v1_loginrule_service_proto_init() { return nil } } - file_teleport_loginrule_v1_loginrule_service_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_teleport_loginrule_v1_loginrule_service_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*ListLoginRulesRequest); i { case 0: return &v.state @@ -702,7 +702,7 @@ func file_teleport_loginrule_v1_loginrule_service_proto_init() { return nil } } - file_teleport_loginrule_v1_loginrule_service_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_teleport_loginrule_v1_loginrule_service_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*ListLoginRulesResponse); i { case 0: return &v.state @@ -714,7 +714,7 @@ func file_teleport_loginrule_v1_loginrule_service_proto_init() { return nil } } - file_teleport_loginrule_v1_loginrule_service_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_teleport_loginrule_v1_loginrule_service_proto_msgTypes[5].Exporter = func(v any, i int) any { switch v := v.(*DeleteLoginRuleRequest); i { case 0: return &v.state @@ -726,7 +726,7 @@ func file_teleport_loginrule_v1_loginrule_service_proto_init() { return nil } } - file_teleport_loginrule_v1_loginrule_service_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_teleport_loginrule_v1_loginrule_service_proto_msgTypes[6].Exporter = func(v any, i int) any { switch v := v.(*TestLoginRuleRequest); i { case 0: return &v.state @@ -738,7 +738,7 @@ func file_teleport_loginrule_v1_loginrule_service_proto_init() { return nil } } - file_teleport_loginrule_v1_loginrule_service_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_teleport_loginrule_v1_loginrule_service_proto_msgTypes[7].Exporter = func(v any, i int) any { switch v := v.(*TestLoginRuleResponse); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/machineid/v1/bot.pb.go b/api/gen/proto/go/teleport/machineid/v1/bot.pb.go index 050b5d895ed8f..ddaf8c65ee7ef 100644 --- a/api/gen/proto/go/teleport/machineid/v1/bot.pb.go +++ b/api/gen/proto/go/teleport/machineid/v1/bot.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/machineid/v1/bot.proto @@ -372,7 +372,7 @@ func file_teleport_machineid_v1_bot_proto_rawDescGZIP() []byte { } var file_teleport_machineid_v1_bot_proto_msgTypes = make([]protoimpl.MessageInfo, 4) -var file_teleport_machineid_v1_bot_proto_goTypes = []interface{}{ +var file_teleport_machineid_v1_bot_proto_goTypes = []any{ (*Bot)(nil), // 0: teleport.machineid.v1.Bot (*Trait)(nil), // 1: teleport.machineid.v1.Trait (*BotSpec)(nil), // 2: teleport.machineid.v1.BotSpec @@ -397,7 +397,7 @@ func file_teleport_machineid_v1_bot_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_machineid_v1_bot_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_machineid_v1_bot_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*Bot); i { case 0: return &v.state @@ -409,7 +409,7 @@ func file_teleport_machineid_v1_bot_proto_init() { return nil } } - file_teleport_machineid_v1_bot_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_machineid_v1_bot_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*Trait); i { case 0: return &v.state @@ -421,7 +421,7 @@ func file_teleport_machineid_v1_bot_proto_init() { return nil } } - file_teleport_machineid_v1_bot_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_teleport_machineid_v1_bot_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*BotSpec); i { case 0: return &v.state @@ -433,7 +433,7 @@ func file_teleport_machineid_v1_bot_proto_init() { return nil } } - file_teleport_machineid_v1_bot_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_teleport_machineid_v1_bot_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*BotStatus); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/machineid/v1/bot_service.pb.go b/api/gen/proto/go/teleport/machineid/v1/bot_service.pb.go index 72213aa360574..0675d8a58fa18 100644 --- a/api/gen/proto/go/teleport/machineid/v1/bot_service.pb.go +++ b/api/gen/proto/go/teleport/machineid/v1/bot_service.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/machineid/v1/bot_service.proto @@ -509,7 +509,7 @@ func file_teleport_machineid_v1_bot_service_proto_rawDescGZIP() []byte { } var file_teleport_machineid_v1_bot_service_proto_msgTypes = make([]protoimpl.MessageInfo, 7) -var file_teleport_machineid_v1_bot_service_proto_goTypes = []interface{}{ +var file_teleport_machineid_v1_bot_service_proto_goTypes = []any{ (*CreateBotRequest)(nil), // 0: teleport.machineid.v1.CreateBotRequest (*GetBotRequest)(nil), // 1: teleport.machineid.v1.GetBotRequest (*ListBotsRequest)(nil), // 2: teleport.machineid.v1.ListBotsRequest @@ -553,7 +553,7 @@ func file_teleport_machineid_v1_bot_service_proto_init() { } file_teleport_machineid_v1_bot_proto_init() if !protoimpl.UnsafeEnabled { - file_teleport_machineid_v1_bot_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_machineid_v1_bot_service_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*CreateBotRequest); i { case 0: return &v.state @@ -565,7 +565,7 @@ func file_teleport_machineid_v1_bot_service_proto_init() { return nil } } - file_teleport_machineid_v1_bot_service_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_machineid_v1_bot_service_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*GetBotRequest); i { case 0: return &v.state @@ -577,7 +577,7 @@ func file_teleport_machineid_v1_bot_service_proto_init() { return nil } } - file_teleport_machineid_v1_bot_service_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_teleport_machineid_v1_bot_service_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*ListBotsRequest); i { case 0: return &v.state @@ -589,7 +589,7 @@ func file_teleport_machineid_v1_bot_service_proto_init() { return nil } } - file_teleport_machineid_v1_bot_service_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_teleport_machineid_v1_bot_service_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*ListBotsResponse); i { case 0: return &v.state @@ -601,7 +601,7 @@ func file_teleport_machineid_v1_bot_service_proto_init() { return nil } } - file_teleport_machineid_v1_bot_service_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_teleport_machineid_v1_bot_service_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*UpdateBotRequest); i { case 0: return &v.state @@ -613,7 +613,7 @@ func file_teleport_machineid_v1_bot_service_proto_init() { return nil } } - file_teleport_machineid_v1_bot_service_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_teleport_machineid_v1_bot_service_proto_msgTypes[5].Exporter = func(v any, i int) any { switch v := v.(*UpsertBotRequest); i { case 0: return &v.state @@ -625,7 +625,7 @@ func file_teleport_machineid_v1_bot_service_proto_init() { return nil } } - file_teleport_machineid_v1_bot_service_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_teleport_machineid_v1_bot_service_proto_msgTypes[6].Exporter = func(v any, i int) any { switch v := v.(*DeleteBotRequest); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/machineid/v1/federation.pb.go b/api/gen/proto/go/teleport/machineid/v1/federation.pb.go index eb5679a681150..a2290d9a93803 100644 --- a/api/gen/proto/go/teleport/machineid/v1/federation.pb.go +++ b/api/gen/proto/go/teleport/machineid/v1/federation.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/machineid/v1/federation.proto @@ -527,7 +527,7 @@ func file_teleport_machineid_v1_federation_proto_rawDescGZIP() []byte { } var file_teleport_machineid_v1_federation_proto_msgTypes = make([]protoimpl.MessageInfo, 6) -var file_teleport_machineid_v1_federation_proto_goTypes = []interface{}{ +var file_teleport_machineid_v1_federation_proto_goTypes = []any{ (*SPIFFEFederation)(nil), // 0: teleport.machineid.v1.SPIFFEFederation (*SPIFFEFederationBundleSourceStatic)(nil), // 1: teleport.machineid.v1.SPIFFEFederationBundleSourceStatic (*SPIFFEFederationBundleSourceHTTPSWeb)(nil), // 2: teleport.machineid.v1.SPIFFEFederationBundleSourceHTTPSWeb @@ -560,7 +560,7 @@ func file_teleport_machineid_v1_federation_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_machineid_v1_federation_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_machineid_v1_federation_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*SPIFFEFederation); i { case 0: return &v.state @@ -572,7 +572,7 @@ func file_teleport_machineid_v1_federation_proto_init() { return nil } } - file_teleport_machineid_v1_federation_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_machineid_v1_federation_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*SPIFFEFederationBundleSourceStatic); i { case 0: return &v.state @@ -584,7 +584,7 @@ func file_teleport_machineid_v1_federation_proto_init() { return nil } } - file_teleport_machineid_v1_federation_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_teleport_machineid_v1_federation_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*SPIFFEFederationBundleSourceHTTPSWeb); i { case 0: return &v.state @@ -596,7 +596,7 @@ func file_teleport_machineid_v1_federation_proto_init() { return nil } } - file_teleport_machineid_v1_federation_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_teleport_machineid_v1_federation_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*SPIFFEFederationBundleSource); i { case 0: return &v.state @@ -608,7 +608,7 @@ func file_teleport_machineid_v1_federation_proto_init() { return nil } } - file_teleport_machineid_v1_federation_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_teleport_machineid_v1_federation_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*SPIFFEFederationSpec); i { case 0: return &v.state @@ -620,7 +620,7 @@ func file_teleport_machineid_v1_federation_proto_init() { return nil } } - file_teleport_machineid_v1_federation_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_teleport_machineid_v1_federation_proto_msgTypes[5].Exporter = func(v any, i int) any { switch v := v.(*SPIFFEFederationStatus); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/machineid/v1/federation_service.pb.go b/api/gen/proto/go/teleport/machineid/v1/federation_service.pb.go index e58ad63436b61..abea4ef98c9d1 100644 --- a/api/gen/proto/go/teleport/machineid/v1/federation_service.pb.go +++ b/api/gen/proto/go/teleport/machineid/v1/federation_service.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/machineid/v1/federation_service.proto @@ -397,7 +397,7 @@ func file_teleport_machineid_v1_federation_service_proto_rawDescGZIP() []byte { } var file_teleport_machineid_v1_federation_service_proto_msgTypes = make([]protoimpl.MessageInfo, 5) -var file_teleport_machineid_v1_federation_service_proto_goTypes = []interface{}{ +var file_teleport_machineid_v1_federation_service_proto_goTypes = []any{ (*GetSPIFFEFederationRequest)(nil), // 0: teleport.machineid.v1.GetSPIFFEFederationRequest (*ListSPIFFEFederationsRequest)(nil), // 1: teleport.machineid.v1.ListSPIFFEFederationsRequest (*ListSPIFFEFederationsResponse)(nil), // 2: teleport.machineid.v1.ListSPIFFEFederationsResponse @@ -431,7 +431,7 @@ func file_teleport_machineid_v1_federation_service_proto_init() { } file_teleport_machineid_v1_federation_proto_init() if !protoimpl.UnsafeEnabled { - file_teleport_machineid_v1_federation_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_machineid_v1_federation_service_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*GetSPIFFEFederationRequest); i { case 0: return &v.state @@ -443,7 +443,7 @@ func file_teleport_machineid_v1_federation_service_proto_init() { return nil } } - file_teleport_machineid_v1_federation_service_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_machineid_v1_federation_service_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*ListSPIFFEFederationsRequest); i { case 0: return &v.state @@ -455,7 +455,7 @@ func file_teleport_machineid_v1_federation_service_proto_init() { return nil } } - file_teleport_machineid_v1_federation_service_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_teleport_machineid_v1_federation_service_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*ListSPIFFEFederationsResponse); i { case 0: return &v.state @@ -467,7 +467,7 @@ func file_teleport_machineid_v1_federation_service_proto_init() { return nil } } - file_teleport_machineid_v1_federation_service_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_teleport_machineid_v1_federation_service_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*DeleteSPIFFEFederationRequest); i { case 0: return &v.state @@ -479,7 +479,7 @@ func file_teleport_machineid_v1_federation_service_proto_init() { return nil } } - file_teleport_machineid_v1_federation_service_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_teleport_machineid_v1_federation_service_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*CreateSPIFFEFederationRequest); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/machineid/v1/workload_identity_service.pb.go b/api/gen/proto/go/teleport/machineid/v1/workload_identity_service.pb.go index 239ce8b66037e..a17891a4e37ae 100644 --- a/api/gen/proto/go/teleport/machineid/v1/workload_identity_service.pb.go +++ b/api/gen/proto/go/teleport/machineid/v1/workload_identity_service.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/machineid/v1/workload_identity_service.proto @@ -377,7 +377,7 @@ func file_teleport_machineid_v1_workload_identity_service_proto_rawDescGZIP() [] } var file_teleport_machineid_v1_workload_identity_service_proto_msgTypes = make([]protoimpl.MessageInfo, 4) -var file_teleport_machineid_v1_workload_identity_service_proto_goTypes = []interface{}{ +var file_teleport_machineid_v1_workload_identity_service_proto_goTypes = []any{ (*SVIDRequest)(nil), // 0: teleport.machineid.v1.SVIDRequest (*SVIDResponse)(nil), // 1: teleport.machineid.v1.SVIDResponse (*SignX509SVIDsRequest)(nil), // 2: teleport.machineid.v1.SignX509SVIDsRequest @@ -403,7 +403,7 @@ func file_teleport_machineid_v1_workload_identity_service_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_machineid_v1_workload_identity_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_machineid_v1_workload_identity_service_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*SVIDRequest); i { case 0: return &v.state @@ -415,7 +415,7 @@ func file_teleport_machineid_v1_workload_identity_service_proto_init() { return nil } } - file_teleport_machineid_v1_workload_identity_service_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_machineid_v1_workload_identity_service_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*SVIDResponse); i { case 0: return &v.state @@ -427,7 +427,7 @@ func file_teleport_machineid_v1_workload_identity_service_proto_init() { return nil } } - file_teleport_machineid_v1_workload_identity_service_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_teleport_machineid_v1_workload_identity_service_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*SignX509SVIDsRequest); i { case 0: return &v.state @@ -439,7 +439,7 @@ func file_teleport_machineid_v1_workload_identity_service_proto_init() { return nil } } - file_teleport_machineid_v1_workload_identity_service_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_teleport_machineid_v1_workload_identity_service_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*SignX509SVIDsResponse); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/notifications/v1/notifications.pb.go b/api/gen/proto/go/teleport/notifications/v1/notifications.pb.go index 5cd61d6808ccd..6a7bc6573e9bd 100644 --- a/api/gen/proto/go/teleport/notifications/v1/notifications.pb.go +++ b/api/gen/proto/go/teleport/notifications/v1/notifications.pb.go @@ -17,7 +17,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/notifications/v1/notifications.proto @@ -1103,7 +1103,7 @@ func file_teleport_notifications_v1_notifications_proto_rawDescGZIP() []byte { var file_teleport_notifications_v1_notifications_proto_enumTypes = make([]protoimpl.EnumInfo, 1) var file_teleport_notifications_v1_notifications_proto_msgTypes = make([]protoimpl.MessageInfo, 12) -var file_teleport_notifications_v1_notifications_proto_goTypes = []interface{}{ +var file_teleport_notifications_v1_notifications_proto_goTypes = []any{ (NotificationState)(0), // 0: teleport.notifications.v1.NotificationState (*Notification)(nil), // 1: teleport.notifications.v1.Notification (*NotificationSpec)(nil), // 2: teleport.notifications.v1.NotificationSpec @@ -1152,7 +1152,7 @@ func file_teleport_notifications_v1_notifications_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_notifications_v1_notifications_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_notifications_v1_notifications_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*Notification); i { case 0: return &v.state @@ -1164,7 +1164,7 @@ func file_teleport_notifications_v1_notifications_proto_init() { return nil } } - file_teleport_notifications_v1_notifications_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_notifications_v1_notifications_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*NotificationSpec); i { case 0: return &v.state @@ -1176,7 +1176,7 @@ func file_teleport_notifications_v1_notifications_proto_init() { return nil } } - file_teleport_notifications_v1_notifications_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_teleport_notifications_v1_notifications_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*GlobalNotification); i { case 0: return &v.state @@ -1188,7 +1188,7 @@ func file_teleport_notifications_v1_notifications_proto_init() { return nil } } - file_teleport_notifications_v1_notifications_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_teleport_notifications_v1_notifications_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*GlobalNotificationSpec); i { case 0: return &v.state @@ -1200,7 +1200,7 @@ func file_teleport_notifications_v1_notifications_proto_init() { return nil } } - file_teleport_notifications_v1_notifications_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_teleport_notifications_v1_notifications_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*ByPermissions); i { case 0: return &v.state @@ -1212,7 +1212,7 @@ func file_teleport_notifications_v1_notifications_proto_init() { return nil } } - file_teleport_notifications_v1_notifications_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_teleport_notifications_v1_notifications_proto_msgTypes[5].Exporter = func(v any, i int) any { switch v := v.(*ByRoles); i { case 0: return &v.state @@ -1224,7 +1224,7 @@ func file_teleport_notifications_v1_notifications_proto_init() { return nil } } - file_teleport_notifications_v1_notifications_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_teleport_notifications_v1_notifications_proto_msgTypes[6].Exporter = func(v any, i int) any { switch v := v.(*UserNotificationState); i { case 0: return &v.state @@ -1236,7 +1236,7 @@ func file_teleport_notifications_v1_notifications_proto_init() { return nil } } - file_teleport_notifications_v1_notifications_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_teleport_notifications_v1_notifications_proto_msgTypes[7].Exporter = func(v any, i int) any { switch v := v.(*UserNotificationStateSpec); i { case 0: return &v.state @@ -1248,7 +1248,7 @@ func file_teleport_notifications_v1_notifications_proto_init() { return nil } } - file_teleport_notifications_v1_notifications_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + file_teleport_notifications_v1_notifications_proto_msgTypes[8].Exporter = func(v any, i int) any { switch v := v.(*UserNotificationStateStatus); i { case 0: return &v.state @@ -1260,7 +1260,7 @@ func file_teleport_notifications_v1_notifications_proto_init() { return nil } } - file_teleport_notifications_v1_notifications_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + file_teleport_notifications_v1_notifications_proto_msgTypes[9].Exporter = func(v any, i int) any { switch v := v.(*UserLastSeenNotification); i { case 0: return &v.state @@ -1272,7 +1272,7 @@ func file_teleport_notifications_v1_notifications_proto_init() { return nil } } - file_teleport_notifications_v1_notifications_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + file_teleport_notifications_v1_notifications_proto_msgTypes[10].Exporter = func(v any, i int) any { switch v := v.(*UserLastSeenNotificationSpec); i { case 0: return &v.state @@ -1284,7 +1284,7 @@ func file_teleport_notifications_v1_notifications_proto_init() { return nil } } - file_teleport_notifications_v1_notifications_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + file_teleport_notifications_v1_notifications_proto_msgTypes[11].Exporter = func(v any, i int) any { switch v := v.(*UserLastSeenNotificationStatus); i { case 0: return &v.state @@ -1297,7 +1297,7 @@ func file_teleport_notifications_v1_notifications_proto_init() { } } } - file_teleport_notifications_v1_notifications_proto_msgTypes[3].OneofWrappers = []interface{}{ + file_teleport_notifications_v1_notifications_proto_msgTypes[3].OneofWrappers = []any{ (*GlobalNotificationSpec_ByPermissions)(nil), (*GlobalNotificationSpec_ByRoles)(nil), (*GlobalNotificationSpec_All)(nil), diff --git a/api/gen/proto/go/teleport/notifications/v1/notifications_service.pb.go b/api/gen/proto/go/teleport/notifications/v1/notifications_service.pb.go index 452bc49069ab6..853c4c5ba5a92 100644 --- a/api/gen/proto/go/teleport/notifications/v1/notifications_service.pb.go +++ b/api/gen/proto/go/teleport/notifications/v1/notifications_service.pb.go @@ -17,7 +17,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/notifications/v1/notifications_service.proto @@ -1051,7 +1051,7 @@ func file_teleport_notifications_v1_notifications_service_proto_rawDescGZIP() [] } var file_teleport_notifications_v1_notifications_service_proto_msgTypes = make([]protoimpl.MessageInfo, 14) -var file_teleport_notifications_v1_notifications_service_proto_goTypes = []interface{}{ +var file_teleport_notifications_v1_notifications_service_proto_goTypes = []any{ (*CreateUserNotificationRequest)(nil), // 0: teleport.notifications.v1.CreateUserNotificationRequest (*DeleteUserNotificationRequest)(nil), // 1: teleport.notifications.v1.DeleteUserNotificationRequest (*ListUserNotificationsRequest)(nil), // 2: teleport.notifications.v1.ListUserNotificationsRequest @@ -1116,7 +1116,7 @@ func file_teleport_notifications_v1_notifications_service_proto_init() { } file_teleport_notifications_v1_notifications_proto_init() if !protoimpl.UnsafeEnabled { - file_teleport_notifications_v1_notifications_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_notifications_v1_notifications_service_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*CreateUserNotificationRequest); i { case 0: return &v.state @@ -1128,7 +1128,7 @@ func file_teleport_notifications_v1_notifications_service_proto_init() { return nil } } - file_teleport_notifications_v1_notifications_service_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_notifications_v1_notifications_service_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*DeleteUserNotificationRequest); i { case 0: return &v.state @@ -1140,7 +1140,7 @@ func file_teleport_notifications_v1_notifications_service_proto_init() { return nil } } - file_teleport_notifications_v1_notifications_service_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_teleport_notifications_v1_notifications_service_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*ListUserNotificationsRequest); i { case 0: return &v.state @@ -1152,7 +1152,7 @@ func file_teleport_notifications_v1_notifications_service_proto_init() { return nil } } - file_teleport_notifications_v1_notifications_service_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_teleport_notifications_v1_notifications_service_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*ListUserNotificationsResponse); i { case 0: return &v.state @@ -1164,7 +1164,7 @@ func file_teleport_notifications_v1_notifications_service_proto_init() { return nil } } - file_teleport_notifications_v1_notifications_service_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_teleport_notifications_v1_notifications_service_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*CreateGlobalNotificationRequest); i { case 0: return &v.state @@ -1176,7 +1176,7 @@ func file_teleport_notifications_v1_notifications_service_proto_init() { return nil } } - file_teleport_notifications_v1_notifications_service_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_teleport_notifications_v1_notifications_service_proto_msgTypes[5].Exporter = func(v any, i int) any { switch v := v.(*DeleteGlobalNotificationRequest); i { case 0: return &v.state @@ -1188,7 +1188,7 @@ func file_teleport_notifications_v1_notifications_service_proto_init() { return nil } } - file_teleport_notifications_v1_notifications_service_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_teleport_notifications_v1_notifications_service_proto_msgTypes[6].Exporter = func(v any, i int) any { switch v := v.(*UpsertUserNotificationStateRequest); i { case 0: return &v.state @@ -1200,7 +1200,7 @@ func file_teleport_notifications_v1_notifications_service_proto_init() { return nil } } - file_teleport_notifications_v1_notifications_service_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_teleport_notifications_v1_notifications_service_proto_msgTypes[7].Exporter = func(v any, i int) any { switch v := v.(*UpdateUserNotificationStateRequest); i { case 0: return &v.state @@ -1212,7 +1212,7 @@ func file_teleport_notifications_v1_notifications_service_proto_init() { return nil } } - file_teleport_notifications_v1_notifications_service_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + file_teleport_notifications_v1_notifications_service_proto_msgTypes[8].Exporter = func(v any, i int) any { switch v := v.(*DeleteUserNotificationStateRequest); i { case 0: return &v.state @@ -1224,7 +1224,7 @@ func file_teleport_notifications_v1_notifications_service_proto_init() { return nil } } - file_teleport_notifications_v1_notifications_service_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + file_teleport_notifications_v1_notifications_service_proto_msgTypes[9].Exporter = func(v any, i int) any { switch v := v.(*ListUserNotificationStatesRequest); i { case 0: return &v.state @@ -1236,7 +1236,7 @@ func file_teleport_notifications_v1_notifications_service_proto_init() { return nil } } - file_teleport_notifications_v1_notifications_service_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + file_teleport_notifications_v1_notifications_service_proto_msgTypes[10].Exporter = func(v any, i int) any { switch v := v.(*ListUserNotificationStatesResponse); i { case 0: return &v.state @@ -1248,7 +1248,7 @@ func file_teleport_notifications_v1_notifications_service_proto_init() { return nil } } - file_teleport_notifications_v1_notifications_service_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + file_teleport_notifications_v1_notifications_service_proto_msgTypes[11].Exporter = func(v any, i int) any { switch v := v.(*GetUserLastSeenNotificationRequest); i { case 0: return &v.state @@ -1260,7 +1260,7 @@ func file_teleport_notifications_v1_notifications_service_proto_init() { return nil } } - file_teleport_notifications_v1_notifications_service_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + file_teleport_notifications_v1_notifications_service_proto_msgTypes[12].Exporter = func(v any, i int) any { switch v := v.(*UpsertUserLastSeenNotificationRequest); i { case 0: return &v.state @@ -1272,7 +1272,7 @@ func file_teleport_notifications_v1_notifications_service_proto_init() { return nil } } - file_teleport_notifications_v1_notifications_service_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + file_teleport_notifications_v1_notifications_service_proto_msgTypes[13].Exporter = func(v any, i int) any { switch v := v.(*DeleteUserLastSeenNotificationRequest); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/okta/v1/okta_service.pb.go b/api/gen/proto/go/teleport/okta/v1/okta_service.pb.go index 5852f14df4109..11c65fb4b70e3 100644 --- a/api/gen/proto/go/teleport/okta/v1/okta_service.pb.go +++ b/api/gen/proto/go/teleport/okta/v1/okta_service.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/okta/v1/okta_service.proto @@ -1001,7 +1001,7 @@ func file_teleport_okta_v1_okta_service_proto_rawDescGZIP() []byte { } var file_teleport_okta_v1_okta_service_proto_msgTypes = make([]protoimpl.MessageInfo, 15) -var file_teleport_okta_v1_okta_service_proto_goTypes = []interface{}{ +var file_teleport_okta_v1_okta_service_proto_goTypes = []any{ (*ListOktaImportRulesRequest)(nil), // 0: teleport.okta.v1.ListOktaImportRulesRequest (*ListOktaImportRulesResponse)(nil), // 1: teleport.okta.v1.ListOktaImportRulesResponse (*GetOktaImportRuleRequest)(nil), // 2: teleport.okta.v1.GetOktaImportRuleRequest @@ -1071,7 +1071,7 @@ func file_teleport_okta_v1_okta_service_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_okta_v1_okta_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_okta_v1_okta_service_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*ListOktaImportRulesRequest); i { case 0: return &v.state @@ -1083,7 +1083,7 @@ func file_teleport_okta_v1_okta_service_proto_init() { return nil } } - file_teleport_okta_v1_okta_service_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_okta_v1_okta_service_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*ListOktaImportRulesResponse); i { case 0: return &v.state @@ -1095,7 +1095,7 @@ func file_teleport_okta_v1_okta_service_proto_init() { return nil } } - file_teleport_okta_v1_okta_service_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_teleport_okta_v1_okta_service_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*GetOktaImportRuleRequest); i { case 0: return &v.state @@ -1107,7 +1107,7 @@ func file_teleport_okta_v1_okta_service_proto_init() { return nil } } - file_teleport_okta_v1_okta_service_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_teleport_okta_v1_okta_service_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*CreateOktaImportRuleRequest); i { case 0: return &v.state @@ -1119,7 +1119,7 @@ func file_teleport_okta_v1_okta_service_proto_init() { return nil } } - file_teleport_okta_v1_okta_service_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_teleport_okta_v1_okta_service_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*UpdateOktaImportRuleRequest); i { case 0: return &v.state @@ -1131,7 +1131,7 @@ func file_teleport_okta_v1_okta_service_proto_init() { return nil } } - file_teleport_okta_v1_okta_service_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_teleport_okta_v1_okta_service_proto_msgTypes[5].Exporter = func(v any, i int) any { switch v := v.(*DeleteOktaImportRuleRequest); i { case 0: return &v.state @@ -1143,7 +1143,7 @@ func file_teleport_okta_v1_okta_service_proto_init() { return nil } } - file_teleport_okta_v1_okta_service_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_teleport_okta_v1_okta_service_proto_msgTypes[6].Exporter = func(v any, i int) any { switch v := v.(*DeleteAllOktaImportRulesRequest); i { case 0: return &v.state @@ -1155,7 +1155,7 @@ func file_teleport_okta_v1_okta_service_proto_init() { return nil } } - file_teleport_okta_v1_okta_service_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_teleport_okta_v1_okta_service_proto_msgTypes[7].Exporter = func(v any, i int) any { switch v := v.(*ListOktaAssignmentsRequest); i { case 0: return &v.state @@ -1167,7 +1167,7 @@ func file_teleport_okta_v1_okta_service_proto_init() { return nil } } - file_teleport_okta_v1_okta_service_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + file_teleport_okta_v1_okta_service_proto_msgTypes[8].Exporter = func(v any, i int) any { switch v := v.(*ListOktaAssignmentsResponse); i { case 0: return &v.state @@ -1179,7 +1179,7 @@ func file_teleport_okta_v1_okta_service_proto_init() { return nil } } - file_teleport_okta_v1_okta_service_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + file_teleport_okta_v1_okta_service_proto_msgTypes[9].Exporter = func(v any, i int) any { switch v := v.(*GetOktaAssignmentRequest); i { case 0: return &v.state @@ -1191,7 +1191,7 @@ func file_teleport_okta_v1_okta_service_proto_init() { return nil } } - file_teleport_okta_v1_okta_service_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + file_teleport_okta_v1_okta_service_proto_msgTypes[10].Exporter = func(v any, i int) any { switch v := v.(*CreateOktaAssignmentRequest); i { case 0: return &v.state @@ -1203,7 +1203,7 @@ func file_teleport_okta_v1_okta_service_proto_init() { return nil } } - file_teleport_okta_v1_okta_service_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + file_teleport_okta_v1_okta_service_proto_msgTypes[11].Exporter = func(v any, i int) any { switch v := v.(*UpdateOktaAssignmentRequest); i { case 0: return &v.state @@ -1215,7 +1215,7 @@ func file_teleport_okta_v1_okta_service_proto_init() { return nil } } - file_teleport_okta_v1_okta_service_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + file_teleport_okta_v1_okta_service_proto_msgTypes[12].Exporter = func(v any, i int) any { switch v := v.(*UpdateOktaAssignmentStatusRequest); i { case 0: return &v.state @@ -1227,7 +1227,7 @@ func file_teleport_okta_v1_okta_service_proto_init() { return nil } } - file_teleport_okta_v1_okta_service_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + file_teleport_okta_v1_okta_service_proto_msgTypes[13].Exporter = func(v any, i int) any { switch v := v.(*DeleteOktaAssignmentRequest); i { case 0: return &v.state @@ -1239,7 +1239,7 @@ func file_teleport_okta_v1_okta_service_proto_init() { return nil } } - file_teleport_okta_v1_okta_service_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + file_teleport_okta_v1_okta_service_proto_msgTypes[14].Exporter = func(v any, i int) any { switch v := v.(*DeleteAllOktaAssignmentsRequest); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/plugins/v1/plugin_service.pb.go b/api/gen/proto/go/teleport/plugins/v1/plugin_service.pb.go index 67ef9f2405652..58a5792872d8b 100644 --- a/api/gen/proto/go/teleport/plugins/v1/plugin_service.pb.go +++ b/api/gen/proto/go/teleport/plugins/v1/plugin_service.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/plugins/v1/plugin_service.proto @@ -1171,7 +1171,7 @@ func file_teleport_plugins_v1_plugin_service_proto_rawDescGZIP() []byte { } var file_teleport_plugins_v1_plugin_service_proto_msgTypes = make([]protoimpl.MessageInfo, 18) -var file_teleport_plugins_v1_plugin_service_proto_goTypes = []interface{}{ +var file_teleport_plugins_v1_plugin_service_proto_goTypes = []any{ (*PluginType)(nil), // 0: teleport.plugins.v1.PluginType (*CreatePluginRequest)(nil), // 1: teleport.plugins.v1.CreatePluginRequest (*GetPluginRequest)(nil), // 2: teleport.plugins.v1.GetPluginRequest @@ -1247,7 +1247,7 @@ func file_teleport_plugins_v1_plugin_service_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_plugins_v1_plugin_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_plugins_v1_plugin_service_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*PluginType); i { case 0: return &v.state @@ -1259,7 +1259,7 @@ func file_teleport_plugins_v1_plugin_service_proto_init() { return nil } } - file_teleport_plugins_v1_plugin_service_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_plugins_v1_plugin_service_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*CreatePluginRequest); i { case 0: return &v.state @@ -1271,7 +1271,7 @@ func file_teleport_plugins_v1_plugin_service_proto_init() { return nil } } - file_teleport_plugins_v1_plugin_service_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_teleport_plugins_v1_plugin_service_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*GetPluginRequest); i { case 0: return &v.state @@ -1283,7 +1283,7 @@ func file_teleport_plugins_v1_plugin_service_proto_init() { return nil } } - file_teleport_plugins_v1_plugin_service_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_teleport_plugins_v1_plugin_service_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*UpdatePluginRequest); i { case 0: return &v.state @@ -1295,7 +1295,7 @@ func file_teleport_plugins_v1_plugin_service_proto_init() { return nil } } - file_teleport_plugins_v1_plugin_service_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_teleport_plugins_v1_plugin_service_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*ListPluginsRequest); i { case 0: return &v.state @@ -1307,7 +1307,7 @@ func file_teleport_plugins_v1_plugin_service_proto_init() { return nil } } - file_teleport_plugins_v1_plugin_service_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_teleport_plugins_v1_plugin_service_proto_msgTypes[5].Exporter = func(v any, i int) any { switch v := v.(*ListPluginsResponse); i { case 0: return &v.state @@ -1319,7 +1319,7 @@ func file_teleport_plugins_v1_plugin_service_proto_init() { return nil } } - file_teleport_plugins_v1_plugin_service_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_teleport_plugins_v1_plugin_service_proto_msgTypes[6].Exporter = func(v any, i int) any { switch v := v.(*DeletePluginRequest); i { case 0: return &v.state @@ -1331,7 +1331,7 @@ func file_teleport_plugins_v1_plugin_service_proto_init() { return nil } } - file_teleport_plugins_v1_plugin_service_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_teleport_plugins_v1_plugin_service_proto_msgTypes[7].Exporter = func(v any, i int) any { switch v := v.(*SetPluginCredentialsRequest); i { case 0: return &v.state @@ -1343,7 +1343,7 @@ func file_teleport_plugins_v1_plugin_service_proto_init() { return nil } } - file_teleport_plugins_v1_plugin_service_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + file_teleport_plugins_v1_plugin_service_proto_msgTypes[8].Exporter = func(v any, i int) any { switch v := v.(*SetPluginStatusRequest); i { case 0: return &v.state @@ -1355,7 +1355,7 @@ func file_teleport_plugins_v1_plugin_service_proto_init() { return nil } } - file_teleport_plugins_v1_plugin_service_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + file_teleport_plugins_v1_plugin_service_proto_msgTypes[9].Exporter = func(v any, i int) any { switch v := v.(*GetAvailablePluginTypesRequest); i { case 0: return &v.state @@ -1367,7 +1367,7 @@ func file_teleport_plugins_v1_plugin_service_proto_init() { return nil } } - file_teleport_plugins_v1_plugin_service_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + file_teleport_plugins_v1_plugin_service_proto_msgTypes[10].Exporter = func(v any, i int) any { switch v := v.(*GetAvailablePluginTypesResponse); i { case 0: return &v.state @@ -1379,7 +1379,7 @@ func file_teleport_plugins_v1_plugin_service_proto_init() { return nil } } - file_teleport_plugins_v1_plugin_service_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + file_teleport_plugins_v1_plugin_service_proto_msgTypes[11].Exporter = func(v any, i int) any { switch v := v.(*SearchPluginStaticCredentialsRequest); i { case 0: return &v.state @@ -1391,7 +1391,7 @@ func file_teleport_plugins_v1_plugin_service_proto_init() { return nil } } - file_teleport_plugins_v1_plugin_service_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + file_teleport_plugins_v1_plugin_service_proto_msgTypes[12].Exporter = func(v any, i int) any { switch v := v.(*SearchPluginStaticCredentialsResponse); i { case 0: return &v.state @@ -1403,7 +1403,7 @@ func file_teleport_plugins_v1_plugin_service_proto_init() { return nil } } - file_teleport_plugins_v1_plugin_service_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + file_teleport_plugins_v1_plugin_service_proto_msgTypes[13].Exporter = func(v any, i int) any { switch v := v.(*NeedsCleanupRequest); i { case 0: return &v.state @@ -1415,7 +1415,7 @@ func file_teleport_plugins_v1_plugin_service_proto_init() { return nil } } - file_teleport_plugins_v1_plugin_service_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + file_teleport_plugins_v1_plugin_service_proto_msgTypes[14].Exporter = func(v any, i int) any { switch v := v.(*NeedsCleanupResponse); i { case 0: return &v.state @@ -1427,7 +1427,7 @@ func file_teleport_plugins_v1_plugin_service_proto_init() { return nil } } - file_teleport_plugins_v1_plugin_service_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + file_teleport_plugins_v1_plugin_service_proto_msgTypes[15].Exporter = func(v any, i int) any { switch v := v.(*CleanupRequest); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/resourceusage/v1/access_requests.pb.go b/api/gen/proto/go/teleport/resourceusage/v1/access_requests.pb.go index b6d65fe58cd45..d91d1bf3a0109 100644 --- a/api/gen/proto/go/teleport/resourceusage/v1/access_requests.pb.go +++ b/api/gen/proto/go/teleport/resourceusage/v1/access_requests.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/resourceusage/v1/access_requests.proto @@ -129,7 +129,7 @@ func file_teleport_resourceusage_v1_access_requests_proto_rawDescGZIP() []byte { } var file_teleport_resourceusage_v1_access_requests_proto_msgTypes = make([]protoimpl.MessageInfo, 1) -var file_teleport_resourceusage_v1_access_requests_proto_goTypes = []interface{}{ +var file_teleport_resourceusage_v1_access_requests_proto_goTypes = []any{ (*AccessRequestsUsage)(nil), // 0: teleport.resourceusage.v1.AccessRequestsUsage } var file_teleport_resourceusage_v1_access_requests_proto_depIdxs = []int32{ @@ -146,7 +146,7 @@ func file_teleport_resourceusage_v1_access_requests_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_resourceusage_v1_access_requests_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_resourceusage_v1_access_requests_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*AccessRequestsUsage); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/resourceusage/v1/account_usage_type.pb.go b/api/gen/proto/go/teleport/resourceusage/v1/account_usage_type.pb.go index 98b0aa4d30022..dcf407b390988 100644 --- a/api/gen/proto/go/teleport/resourceusage/v1/account_usage_type.pb.go +++ b/api/gen/proto/go/teleport/resourceusage/v1/account_usage_type.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/resourceusage/v1/account_usage_type.proto @@ -123,7 +123,7 @@ func file_teleport_resourceusage_v1_account_usage_type_proto_rawDescGZIP() []byt } var file_teleport_resourceusage_v1_account_usage_type_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_teleport_resourceusage_v1_account_usage_type_proto_goTypes = []interface{}{ +var file_teleport_resourceusage_v1_account_usage_type_proto_goTypes = []any{ (AccountUsageType)(0), // 0: teleport.resourceusage.v1.AccountUsageType } var file_teleport_resourceusage_v1_account_usage_type_proto_depIdxs = []int32{ diff --git a/api/gen/proto/go/teleport/resourceusage/v1/device_trust.pb.go b/api/gen/proto/go/teleport/resourceusage/v1/device_trust.pb.go index 95e1da7d4e894..2bb3342b78821 100644 --- a/api/gen/proto/go/teleport/resourceusage/v1/device_trust.pb.go +++ b/api/gen/proto/go/teleport/resourceusage/v1/device_trust.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/resourceusage/v1/device_trust.proto @@ -131,7 +131,7 @@ func file_teleport_resourceusage_v1_device_trust_proto_rawDescGZIP() []byte { } var file_teleport_resourceusage_v1_device_trust_proto_msgTypes = make([]protoimpl.MessageInfo, 1) -var file_teleport_resourceusage_v1_device_trust_proto_goTypes = []interface{}{ +var file_teleport_resourceusage_v1_device_trust_proto_goTypes = []any{ (*DevicesUsage)(nil), // 0: teleport.resourceusage.v1.DevicesUsage } var file_teleport_resourceusage_v1_device_trust_proto_depIdxs = []int32{ @@ -148,7 +148,7 @@ func file_teleport_resourceusage_v1_device_trust_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_resourceusage_v1_device_trust_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_resourceusage_v1_device_trust_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*DevicesUsage); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/resourceusage/v1/resourceusage_service.pb.go b/api/gen/proto/go/teleport/resourceusage/v1/resourceusage_service.pb.go index 58bcd4be17087..37b5170b018a1 100644 --- a/api/gen/proto/go/teleport/resourceusage/v1/resourceusage_service.pb.go +++ b/api/gen/proto/go/teleport/resourceusage/v1/resourceusage_service.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/resourceusage/v1/resourceusage_service.proto @@ -207,7 +207,7 @@ func file_teleport_resourceusage_v1_resourceusage_service_proto_rawDescGZIP() [] } var file_teleport_resourceusage_v1_resourceusage_service_proto_msgTypes = make([]protoimpl.MessageInfo, 2) -var file_teleport_resourceusage_v1_resourceusage_service_proto_goTypes = []interface{}{ +var file_teleport_resourceusage_v1_resourceusage_service_proto_goTypes = []any{ (*GetUsageRequest)(nil), // 0: teleport.resourceusage.v1.GetUsageRequest (*GetUsageResponse)(nil), // 1: teleport.resourceusage.v1.GetUsageResponse (*AccessRequestsUsage)(nil), // 2: teleport.resourceusage.v1.AccessRequestsUsage @@ -236,7 +236,7 @@ func file_teleport_resourceusage_v1_resourceusage_service_proto_init() { file_teleport_resourceusage_v1_account_usage_type_proto_init() file_teleport_resourceusage_v1_device_trust_proto_init() if !protoimpl.UnsafeEnabled { - file_teleport_resourceusage_v1_resourceusage_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_resourceusage_v1_resourceusage_service_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*GetUsageRequest); i { case 0: return &v.state @@ -248,7 +248,7 @@ func file_teleport_resourceusage_v1_resourceusage_service_proto_init() { return nil } } - file_teleport_resourceusage_v1_resourceusage_service_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_resourceusage_v1_resourceusage_service_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*GetUsageResponse); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/samlidp/v1/samlidp.pb.go b/api/gen/proto/go/teleport/samlidp/v1/samlidp.pb.go index aa8f113513dfd..adbe2e7bbbfae 100644 --- a/api/gen/proto/go/teleport/samlidp/v1/samlidp.pb.go +++ b/api/gen/proto/go/teleport/samlidp/v1/samlidp.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/samlidp/v1/samlidp.proto @@ -468,7 +468,7 @@ func file_teleport_samlidp_v1_samlidp_proto_rawDescGZIP() []byte { } var file_teleport_samlidp_v1_samlidp_proto_msgTypes = make([]protoimpl.MessageInfo, 6) -var file_teleport_samlidp_v1_samlidp_proto_goTypes = []interface{}{ +var file_teleport_samlidp_v1_samlidp_proto_goTypes = []any{ (*ProcessSAMLIdPRequestRequest)(nil), // 0: teleport.samlidp.v1.ProcessSAMLIdPRequestRequest (*ProcessSAMLIdPRequestResponse)(nil), // 1: teleport.samlidp.v1.ProcessSAMLIdPRequestResponse (*TestSAMLIdPAttributeMappingRequest)(nil), // 2: teleport.samlidp.v1.TestSAMLIdPAttributeMappingRequest @@ -504,7 +504,7 @@ func file_teleport_samlidp_v1_samlidp_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_samlidp_v1_samlidp_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_samlidp_v1_samlidp_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*ProcessSAMLIdPRequestRequest); i { case 0: return &v.state @@ -516,7 +516,7 @@ func file_teleport_samlidp_v1_samlidp_proto_init() { return nil } } - file_teleport_samlidp_v1_samlidp_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_samlidp_v1_samlidp_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*ProcessSAMLIdPRequestResponse); i { case 0: return &v.state @@ -528,7 +528,7 @@ func file_teleport_samlidp_v1_samlidp_proto_init() { return nil } } - file_teleport_samlidp_v1_samlidp_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_teleport_samlidp_v1_samlidp_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*TestSAMLIdPAttributeMappingRequest); i { case 0: return &v.state @@ -540,7 +540,7 @@ func file_teleport_samlidp_v1_samlidp_proto_init() { return nil } } - file_teleport_samlidp_v1_samlidp_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_teleport_samlidp_v1_samlidp_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*TestSAMLIdPAttributeMappingResponse); i { case 0: return &v.state @@ -552,7 +552,7 @@ func file_teleport_samlidp_v1_samlidp_proto_init() { return nil } } - file_teleport_samlidp_v1_samlidp_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_teleport_samlidp_v1_samlidp_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*MappedAttribute); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/scim/v1/scim_service.pb.go b/api/gen/proto/go/teleport/scim/v1/scim_service.pb.go index 6a1d6d6324500..5bf9c2e0d41ce 100644 --- a/api/gen/proto/go/teleport/scim/v1/scim_service.pb.go +++ b/api/gen/proto/go/teleport/scim/v1/scim_service.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/scim/v1/scim_service.proto @@ -851,7 +851,7 @@ func file_teleport_scim_v1_scim_service_proto_rawDescGZIP() []byte { } var file_teleport_scim_v1_scim_service_proto_msgTypes = make([]protoimpl.MessageInfo, 10) -var file_teleport_scim_v1_scim_service_proto_goTypes = []interface{}{ +var file_teleport_scim_v1_scim_service_proto_goTypes = []any{ (*ListSCIMResourcesRequest)(nil), // 0: teleport.scim.v1.ListSCIMResourcesRequest (*GetSCIMResourceRequest)(nil), // 1: teleport.scim.v1.GetSCIMResourceRequest (*CreateSCIMResourceRequest)(nil), // 2: teleport.scim.v1.CreateSCIMResourceRequest @@ -903,7 +903,7 @@ func file_teleport_scim_v1_scim_service_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_scim_v1_scim_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_scim_v1_scim_service_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*ListSCIMResourcesRequest); i { case 0: return &v.state @@ -915,7 +915,7 @@ func file_teleport_scim_v1_scim_service_proto_init() { return nil } } - file_teleport_scim_v1_scim_service_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_scim_v1_scim_service_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*GetSCIMResourceRequest); i { case 0: return &v.state @@ -927,7 +927,7 @@ func file_teleport_scim_v1_scim_service_proto_init() { return nil } } - file_teleport_scim_v1_scim_service_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_teleport_scim_v1_scim_service_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*CreateSCIMResourceRequest); i { case 0: return &v.state @@ -939,7 +939,7 @@ func file_teleport_scim_v1_scim_service_proto_init() { return nil } } - file_teleport_scim_v1_scim_service_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_teleport_scim_v1_scim_service_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*UpdateSCIMResourceRequest); i { case 0: return &v.state @@ -951,7 +951,7 @@ func file_teleport_scim_v1_scim_service_proto_init() { return nil } } - file_teleport_scim_v1_scim_service_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_teleport_scim_v1_scim_service_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*DeleteSCIMResourceRequest); i { case 0: return &v.state @@ -963,7 +963,7 @@ func file_teleport_scim_v1_scim_service_proto_init() { return nil } } - file_teleport_scim_v1_scim_service_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_teleport_scim_v1_scim_service_proto_msgTypes[5].Exporter = func(v any, i int) any { switch v := v.(*Resource); i { case 0: return &v.state @@ -975,7 +975,7 @@ func file_teleport_scim_v1_scim_service_proto_init() { return nil } } - file_teleport_scim_v1_scim_service_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_teleport_scim_v1_scim_service_proto_msgTypes[6].Exporter = func(v any, i int) any { switch v := v.(*Meta); i { case 0: return &v.state @@ -987,7 +987,7 @@ func file_teleport_scim_v1_scim_service_proto_init() { return nil } } - file_teleport_scim_v1_scim_service_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_teleport_scim_v1_scim_service_proto_msgTypes[7].Exporter = func(v any, i int) any { switch v := v.(*ResourceList); i { case 0: return &v.state @@ -999,7 +999,7 @@ func file_teleport_scim_v1_scim_service_proto_init() { return nil } } - file_teleport_scim_v1_scim_service_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + file_teleport_scim_v1_scim_service_proto_msgTypes[8].Exporter = func(v any, i int) any { switch v := v.(*RequestTarget); i { case 0: return &v.state @@ -1011,7 +1011,7 @@ func file_teleport_scim_v1_scim_service_proto_init() { return nil } } - file_teleport_scim_v1_scim_service_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + file_teleport_scim_v1_scim_service_proto_msgTypes[9].Exporter = func(v any, i int) any { switch v := v.(*Page); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/secreports/v1/secreports.pb.go b/api/gen/proto/go/teleport/secreports/v1/secreports.pb.go index cc7e5d3939042..0c5f317a4a657 100644 --- a/api/gen/proto/go/teleport/secreports/v1/secreports.pb.go +++ b/api/gen/proto/go/teleport/secreports/v1/secreports.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/secreports/v1/secreports.proto @@ -508,7 +508,7 @@ func file_teleport_secreports_v1_secreports_proto_rawDescGZIP() []byte { } var file_teleport_secreports_v1_secreports_proto_msgTypes = make([]protoimpl.MessageInfo, 6) -var file_teleport_secreports_v1_secreports_proto_goTypes = []interface{}{ +var file_teleport_secreports_v1_secreports_proto_goTypes = []any{ (*AuditQuery)(nil), // 0: teleport.secreports.v1.AuditQuery (*AuditQuerySpec)(nil), // 1: teleport.secreports.v1.AuditQuerySpec (*Report)(nil), // 2: teleport.secreports.v1.Report @@ -538,7 +538,7 @@ func file_teleport_secreports_v1_secreports_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_secreports_v1_secreports_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_secreports_v1_secreports_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*AuditQuery); i { case 0: return &v.state @@ -550,7 +550,7 @@ func file_teleport_secreports_v1_secreports_proto_init() { return nil } } - file_teleport_secreports_v1_secreports_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_secreports_v1_secreports_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*AuditQuerySpec); i { case 0: return &v.state @@ -562,7 +562,7 @@ func file_teleport_secreports_v1_secreports_proto_init() { return nil } } - file_teleport_secreports_v1_secreports_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_teleport_secreports_v1_secreports_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*Report); i { case 0: return &v.state @@ -574,7 +574,7 @@ func file_teleport_secreports_v1_secreports_proto_init() { return nil } } - file_teleport_secreports_v1_secreports_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_teleport_secreports_v1_secreports_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*ReportSpec); i { case 0: return &v.state @@ -586,7 +586,7 @@ func file_teleport_secreports_v1_secreports_proto_init() { return nil } } - file_teleport_secreports_v1_secreports_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_teleport_secreports_v1_secreports_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*ReportState); i { case 0: return &v.state @@ -598,7 +598,7 @@ func file_teleport_secreports_v1_secreports_proto_init() { return nil } } - file_teleport_secreports_v1_secreports_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_teleport_secreports_v1_secreports_proto_msgTypes[5].Exporter = func(v any, i int) any { switch v := v.(*ReportStateSpec); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/secreports/v1/secreports_service.pb.go b/api/gen/proto/go/teleport/secreports/v1/secreports_service.pb.go index bf650f54a61b6..f46e772a3a2ea 100644 --- a/api/gen/proto/go/teleport/secreports/v1/secreports_service.pb.go +++ b/api/gen/proto/go/teleport/secreports/v1/secreports_service.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/secreports/v1/secreports_service.proto @@ -2036,7 +2036,7 @@ func file_teleport_secreports_v1_secreports_service_proto_rawDescGZIP() []byte { var file_teleport_secreports_v1_secreports_service_proto_enumTypes = make([]protoimpl.EnumInfo, 1) var file_teleport_secreports_v1_secreports_service_proto_msgTypes = make([]protoimpl.MessageInfo, 28) -var file_teleport_secreports_v1_secreports_service_proto_goTypes = []interface{}{ +var file_teleport_secreports_v1_secreports_service_proto_goTypes = []any{ (ReportSate_State)(0), // 0: teleport.secreports.v1.ReportSate.State (*GetAuditQueryResultRequest)(nil), // 1: teleport.secreports.v1.GetAuditQueryResultRequest (*QueryResultColumnInfo)(nil), // 2: teleport.secreports.v1.QueryResultColumnInfo @@ -2131,7 +2131,7 @@ func file_teleport_secreports_v1_secreports_service_proto_init() { } file_teleport_secreports_v1_secreports_proto_init() if !protoimpl.UnsafeEnabled { - file_teleport_secreports_v1_secreports_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_secreports_v1_secreports_service_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*GetAuditQueryResultRequest); i { case 0: return &v.state @@ -2143,7 +2143,7 @@ func file_teleport_secreports_v1_secreports_service_proto_init() { return nil } } - file_teleport_secreports_v1_secreports_service_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_secreports_v1_secreports_service_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*QueryResultColumnInfo); i { case 0: return &v.state @@ -2155,7 +2155,7 @@ func file_teleport_secreports_v1_secreports_service_proto_init() { return nil } } - file_teleport_secreports_v1_secreports_service_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_teleport_secreports_v1_secreports_service_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*QueryRowResult); i { case 0: return &v.state @@ -2167,7 +2167,7 @@ func file_teleport_secreports_v1_secreports_service_proto_init() { return nil } } - file_teleport_secreports_v1_secreports_service_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_teleport_secreports_v1_secreports_service_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*QueryResultSet); i { case 0: return &v.state @@ -2179,7 +2179,7 @@ func file_teleport_secreports_v1_secreports_service_proto_init() { return nil } } - file_teleport_secreports_v1_secreports_service_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_teleport_secreports_v1_secreports_service_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*GetAuditQueryResultResponse); i { case 0: return &v.state @@ -2191,7 +2191,7 @@ func file_teleport_secreports_v1_secreports_service_proto_init() { return nil } } - file_teleport_secreports_v1_secreports_service_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_teleport_secreports_v1_secreports_service_proto_msgTypes[5].Exporter = func(v any, i int) any { switch v := v.(*RunReportRequest); i { case 0: return &v.state @@ -2203,7 +2203,7 @@ func file_teleport_secreports_v1_secreports_service_proto_init() { return nil } } - file_teleport_secreports_v1_secreports_service_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_teleport_secreports_v1_secreports_service_proto_msgTypes[6].Exporter = func(v any, i int) any { switch v := v.(*GetReportStateRequest); i { case 0: return &v.state @@ -2215,7 +2215,7 @@ func file_teleport_secreports_v1_secreports_service_proto_init() { return nil } } - file_teleport_secreports_v1_secreports_service_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_teleport_secreports_v1_secreports_service_proto_msgTypes[7].Exporter = func(v any, i int) any { switch v := v.(*DeleteAuditQueryRequest); i { case 0: return &v.state @@ -2227,7 +2227,7 @@ func file_teleport_secreports_v1_secreports_service_proto_init() { return nil } } - file_teleport_secreports_v1_secreports_service_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + file_teleport_secreports_v1_secreports_service_proto_msgTypes[8].Exporter = func(v any, i int) any { switch v := v.(*DeleteReportRequest); i { case 0: return &v.state @@ -2239,7 +2239,7 @@ func file_teleport_secreports_v1_secreports_service_proto_init() { return nil } } - file_teleport_secreports_v1_secreports_service_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + file_teleport_secreports_v1_secreports_service_proto_msgTypes[9].Exporter = func(v any, i int) any { switch v := v.(*RunAuditQueryRequest); i { case 0: return &v.state @@ -2251,7 +2251,7 @@ func file_teleport_secreports_v1_secreports_service_proto_init() { return nil } } - file_teleport_secreports_v1_secreports_service_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + file_teleport_secreports_v1_secreports_service_proto_msgTypes[10].Exporter = func(v any, i int) any { switch v := v.(*UpsertAuditQueryRequest); i { case 0: return &v.state @@ -2263,7 +2263,7 @@ func file_teleport_secreports_v1_secreports_service_proto_init() { return nil } } - file_teleport_secreports_v1_secreports_service_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + file_teleport_secreports_v1_secreports_service_proto_msgTypes[11].Exporter = func(v any, i int) any { switch v := v.(*UpsertReportRequest); i { case 0: return &v.state @@ -2275,7 +2275,7 @@ func file_teleport_secreports_v1_secreports_service_proto_init() { return nil } } - file_teleport_secreports_v1_secreports_service_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + file_teleport_secreports_v1_secreports_service_proto_msgTypes[12].Exporter = func(v any, i int) any { switch v := v.(*GetAuditQueryRequest); i { case 0: return &v.state @@ -2287,7 +2287,7 @@ func file_teleport_secreports_v1_secreports_service_proto_init() { return nil } } - file_teleport_secreports_v1_secreports_service_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + file_teleport_secreports_v1_secreports_service_proto_msgTypes[13].Exporter = func(v any, i int) any { switch v := v.(*GetReportRequest); i { case 0: return &v.state @@ -2299,7 +2299,7 @@ func file_teleport_secreports_v1_secreports_service_proto_init() { return nil } } - file_teleport_secreports_v1_secreports_service_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + file_teleport_secreports_v1_secreports_service_proto_msgTypes[14].Exporter = func(v any, i int) any { switch v := v.(*GetReportResultRequest); i { case 0: return &v.state @@ -2311,7 +2311,7 @@ func file_teleport_secreports_v1_secreports_service_proto_init() { return nil } } - file_teleport_secreports_v1_secreports_service_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + file_teleport_secreports_v1_secreports_service_proto_msgTypes[15].Exporter = func(v any, i int) any { switch v := v.(*ListAuditQueriesRequest); i { case 0: return &v.state @@ -2323,7 +2323,7 @@ func file_teleport_secreports_v1_secreports_service_proto_init() { return nil } } - file_teleport_secreports_v1_secreports_service_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + file_teleport_secreports_v1_secreports_service_proto_msgTypes[16].Exporter = func(v any, i int) any { switch v := v.(*ListReportsRequest); i { case 0: return &v.state @@ -2335,7 +2335,7 @@ func file_teleport_secreports_v1_secreports_service_proto_init() { return nil } } - file_teleport_secreports_v1_secreports_service_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + file_teleport_secreports_v1_secreports_service_proto_msgTypes[17].Exporter = func(v any, i int) any { switch v := v.(*ListAuditQueriesResponse); i { case 0: return &v.state @@ -2347,7 +2347,7 @@ func file_teleport_secreports_v1_secreports_service_proto_init() { return nil } } - file_teleport_secreports_v1_secreports_service_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + file_teleport_secreports_v1_secreports_service_proto_msgTypes[18].Exporter = func(v any, i int) any { switch v := v.(*GetSchemaRequest); i { case 0: return &v.state @@ -2359,7 +2359,7 @@ func file_teleport_secreports_v1_secreports_service_proto_init() { return nil } } - file_teleport_secreports_v1_secreports_service_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + file_teleport_secreports_v1_secreports_service_proto_msgTypes[19].Exporter = func(v any, i int) any { switch v := v.(*GetSchemaResponse); i { case 0: return &v.state @@ -2371,7 +2371,7 @@ func file_teleport_secreports_v1_secreports_service_proto_init() { return nil } } - file_teleport_secreports_v1_secreports_service_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + file_teleport_secreports_v1_secreports_service_proto_msgTypes[20].Exporter = func(v any, i int) any { switch v := v.(*RunAuditQueryResponse); i { case 0: return &v.state @@ -2383,7 +2383,7 @@ func file_teleport_secreports_v1_secreports_service_proto_init() { return nil } } - file_teleport_secreports_v1_secreports_service_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + file_teleport_secreports_v1_secreports_service_proto_msgTypes[21].Exporter = func(v any, i int) any { switch v := v.(*ListReportsResponse); i { case 0: return &v.state @@ -2395,7 +2395,7 @@ func file_teleport_secreports_v1_secreports_service_proto_init() { return nil } } - file_teleport_secreports_v1_secreports_service_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { + file_teleport_secreports_v1_secreports_service_proto_msgTypes[22].Exporter = func(v any, i int) any { switch v := v.(*GetReportResultResponse); i { case 0: return &v.state @@ -2407,7 +2407,7 @@ func file_teleport_secreports_v1_secreports_service_proto_init() { return nil } } - file_teleport_secreports_v1_secreports_service_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { + file_teleport_secreports_v1_secreports_service_proto_msgTypes[23].Exporter = func(v any, i int) any { switch v := v.(*ReportResult); i { case 0: return &v.state @@ -2419,7 +2419,7 @@ func file_teleport_secreports_v1_secreports_service_proto_init() { return nil } } - file_teleport_secreports_v1_secreports_service_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { + file_teleport_secreports_v1_secreports_service_proto_msgTypes[24].Exporter = func(v any, i int) any { switch v := v.(*ReportSate); i { case 0: return &v.state @@ -2431,7 +2431,7 @@ func file_teleport_secreports_v1_secreports_service_proto_init() { return nil } } - file_teleport_secreports_v1_secreports_service_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { + file_teleport_secreports_v1_secreports_service_proto_msgTypes[25].Exporter = func(v any, i int) any { switch v := v.(*GetSchemaResponse_ViewDesc); i { case 0: return &v.state @@ -2443,7 +2443,7 @@ func file_teleport_secreports_v1_secreports_service_proto_init() { return nil } } - file_teleport_secreports_v1_secreports_service_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { + file_teleport_secreports_v1_secreports_service_proto_msgTypes[26].Exporter = func(v any, i int) any { switch v := v.(*GetSchemaResponse_ViewDesc_ColumnDesc); i { case 0: return &v.state @@ -2455,7 +2455,7 @@ func file_teleport_secreports_v1_secreports_service_proto_init() { return nil } } - file_teleport_secreports_v1_secreports_service_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { + file_teleport_secreports_v1_secreports_service_proto_msgTypes[27].Exporter = func(v any, i int) any { switch v := v.(*ReportResult_AuditQueryResult); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/trait/v1/trait.pb.go b/api/gen/proto/go/teleport/trait/v1/trait.pb.go index 84ee9e67a479f..4e597f85cfc33 100644 --- a/api/gen/proto/go/teleport/trait/v1/trait.pb.go +++ b/api/gen/proto/go/teleport/trait/v1/trait.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/trait/v1/trait.proto @@ -122,7 +122,7 @@ func file_teleport_trait_v1_trait_proto_rawDescGZIP() []byte { } var file_teleport_trait_v1_trait_proto_msgTypes = make([]protoimpl.MessageInfo, 1) -var file_teleport_trait_v1_trait_proto_goTypes = []interface{}{ +var file_teleport_trait_v1_trait_proto_goTypes = []any{ (*Trait)(nil), // 0: teleport.trait.v1.Trait } var file_teleport_trait_v1_trait_proto_depIdxs = []int32{ @@ -139,7 +139,7 @@ func file_teleport_trait_v1_trait_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_trait_v1_trait_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_trait_v1_trait_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*Trait); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/transport/v1/transport_service.pb.go b/api/gen/proto/go/teleport/transport/v1/transport_service.pb.go index fd88978c99184..c94482277128b 100644 --- a/api/gen/proto/go/teleport/transport/v1/transport_service.pb.go +++ b/api/gen/proto/go/teleport/transport/v1/transport_service.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/transport/v1/transport_service.proto @@ -697,7 +697,7 @@ func file_teleport_transport_v1_transport_service_proto_rawDescGZIP() []byte { } var file_teleport_transport_v1_transport_service_proto_msgTypes = make([]protoimpl.MessageInfo, 9) -var file_teleport_transport_v1_transport_service_proto_goTypes = []interface{}{ +var file_teleport_transport_v1_transport_service_proto_goTypes = []any{ (*ProxySSHRequest)(nil), // 0: teleport.transport.v1.ProxySSHRequest (*ProxySSHResponse)(nil), // 1: teleport.transport.v1.ProxySSHResponse (*ProxyClusterRequest)(nil), // 2: teleport.transport.v1.ProxyClusterRequest @@ -737,7 +737,7 @@ func file_teleport_transport_v1_transport_service_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_transport_v1_transport_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_transport_v1_transport_service_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*ProxySSHRequest); i { case 0: return &v.state @@ -749,7 +749,7 @@ func file_teleport_transport_v1_transport_service_proto_init() { return nil } } - file_teleport_transport_v1_transport_service_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_transport_v1_transport_service_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*ProxySSHResponse); i { case 0: return &v.state @@ -761,7 +761,7 @@ func file_teleport_transport_v1_transport_service_proto_init() { return nil } } - file_teleport_transport_v1_transport_service_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_teleport_transport_v1_transport_service_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*ProxyClusterRequest); i { case 0: return &v.state @@ -773,7 +773,7 @@ func file_teleport_transport_v1_transport_service_proto_init() { return nil } } - file_teleport_transport_v1_transport_service_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_teleport_transport_v1_transport_service_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*ProxyClusterResponse); i { case 0: return &v.state @@ -785,7 +785,7 @@ func file_teleport_transport_v1_transport_service_proto_init() { return nil } } - file_teleport_transport_v1_transport_service_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_teleport_transport_v1_transport_service_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*Frame); i { case 0: return &v.state @@ -797,7 +797,7 @@ func file_teleport_transport_v1_transport_service_proto_init() { return nil } } - file_teleport_transport_v1_transport_service_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_teleport_transport_v1_transport_service_proto_msgTypes[5].Exporter = func(v any, i int) any { switch v := v.(*TargetHost); i { case 0: return &v.state @@ -809,7 +809,7 @@ func file_teleport_transport_v1_transport_service_proto_init() { return nil } } - file_teleport_transport_v1_transport_service_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_teleport_transport_v1_transport_service_proto_msgTypes[6].Exporter = func(v any, i int) any { switch v := v.(*GetClusterDetailsRequest); i { case 0: return &v.state @@ -821,7 +821,7 @@ func file_teleport_transport_v1_transport_service_proto_init() { return nil } } - file_teleport_transport_v1_transport_service_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_teleport_transport_v1_transport_service_proto_msgTypes[7].Exporter = func(v any, i int) any { switch v := v.(*GetClusterDetailsResponse); i { case 0: return &v.state @@ -833,7 +833,7 @@ func file_teleport_transport_v1_transport_service_proto_init() { return nil } } - file_teleport_transport_v1_transport_service_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + file_teleport_transport_v1_transport_service_proto_msgTypes[8].Exporter = func(v any, i int) any { switch v := v.(*ClusterDetails); i { case 0: return &v.state @@ -846,11 +846,11 @@ func file_teleport_transport_v1_transport_service_proto_init() { } } } - file_teleport_transport_v1_transport_service_proto_msgTypes[0].OneofWrappers = []interface{}{ + file_teleport_transport_v1_transport_service_proto_msgTypes[0].OneofWrappers = []any{ (*ProxySSHRequest_Ssh)(nil), (*ProxySSHRequest_Agent)(nil), } - file_teleport_transport_v1_transport_service_proto_msgTypes[1].OneofWrappers = []interface{}{ + file_teleport_transport_v1_transport_service_proto_msgTypes[1].OneofWrappers = []any{ (*ProxySSHResponse_Ssh)(nil), (*ProxySSHResponse_Agent)(nil), } diff --git a/api/gen/proto/go/teleport/trust/v1/trust_service.pb.go b/api/gen/proto/go/teleport/trust/v1/trust_service.pb.go index 3b2911cbc3806..1a7513f3b1d22 100644 --- a/api/gen/proto/go/teleport/trust/v1/trust_service.pb.go +++ b/api/gen/proto/go/teleport/trust/v1/trust_service.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/trust/v1/trust_service.proto @@ -930,7 +930,7 @@ func file_teleport_trust_v1_trust_service_proto_rawDescGZIP() []byte { } var file_teleport_trust_v1_trust_service_proto_msgTypes = make([]protoimpl.MessageInfo, 12) -var file_teleport_trust_v1_trust_service_proto_goTypes = []interface{}{ +var file_teleport_trust_v1_trust_service_proto_goTypes = []any{ (*GetCertAuthorityRequest)(nil), // 0: teleport.trust.v1.GetCertAuthorityRequest (*GetCertAuthoritiesRequest)(nil), // 1: teleport.trust.v1.GetCertAuthoritiesRequest (*GetCertAuthoritiesResponse)(nil), // 2: teleport.trust.v1.GetCertAuthoritiesResponse @@ -985,7 +985,7 @@ func file_teleport_trust_v1_trust_service_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_trust_v1_trust_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_trust_v1_trust_service_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*GetCertAuthorityRequest); i { case 0: return &v.state @@ -997,7 +997,7 @@ func file_teleport_trust_v1_trust_service_proto_init() { return nil } } - file_teleport_trust_v1_trust_service_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_trust_v1_trust_service_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*GetCertAuthoritiesRequest); i { case 0: return &v.state @@ -1009,7 +1009,7 @@ func file_teleport_trust_v1_trust_service_proto_init() { return nil } } - file_teleport_trust_v1_trust_service_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_teleport_trust_v1_trust_service_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*GetCertAuthoritiesResponse); i { case 0: return &v.state @@ -1021,7 +1021,7 @@ func file_teleport_trust_v1_trust_service_proto_init() { return nil } } - file_teleport_trust_v1_trust_service_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_teleport_trust_v1_trust_service_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*DeleteCertAuthorityRequest); i { case 0: return &v.state @@ -1033,7 +1033,7 @@ func file_teleport_trust_v1_trust_service_proto_init() { return nil } } - file_teleport_trust_v1_trust_service_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_teleport_trust_v1_trust_service_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*UpsertCertAuthorityRequest); i { case 0: return &v.state @@ -1045,7 +1045,7 @@ func file_teleport_trust_v1_trust_service_proto_init() { return nil } } - file_teleport_trust_v1_trust_service_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_teleport_trust_v1_trust_service_proto_msgTypes[5].Exporter = func(v any, i int) any { switch v := v.(*RotateCertAuthorityRequest); i { case 0: return &v.state @@ -1057,7 +1057,7 @@ func file_teleport_trust_v1_trust_service_proto_init() { return nil } } - file_teleport_trust_v1_trust_service_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_teleport_trust_v1_trust_service_proto_msgTypes[6].Exporter = func(v any, i int) any { switch v := v.(*RotationSchedule); i { case 0: return &v.state @@ -1069,7 +1069,7 @@ func file_teleport_trust_v1_trust_service_proto_init() { return nil } } - file_teleport_trust_v1_trust_service_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_teleport_trust_v1_trust_service_proto_msgTypes[7].Exporter = func(v any, i int) any { switch v := v.(*RotateCertAuthorityResponse); i { case 0: return &v.state @@ -1081,7 +1081,7 @@ func file_teleport_trust_v1_trust_service_proto_init() { return nil } } - file_teleport_trust_v1_trust_service_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + file_teleport_trust_v1_trust_service_proto_msgTypes[8].Exporter = func(v any, i int) any { switch v := v.(*RotateExternalCertAuthorityRequest); i { case 0: return &v.state @@ -1093,7 +1093,7 @@ func file_teleport_trust_v1_trust_service_proto_init() { return nil } } - file_teleport_trust_v1_trust_service_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + file_teleport_trust_v1_trust_service_proto_msgTypes[9].Exporter = func(v any, i int) any { switch v := v.(*RotateExternalCertAuthorityResponse); i { case 0: return &v.state @@ -1105,7 +1105,7 @@ func file_teleport_trust_v1_trust_service_proto_init() { return nil } } - file_teleport_trust_v1_trust_service_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + file_teleport_trust_v1_trust_service_proto_msgTypes[10].Exporter = func(v any, i int) any { switch v := v.(*GenerateHostCertRequest); i { case 0: return &v.state @@ -1117,7 +1117,7 @@ func file_teleport_trust_v1_trust_service_proto_init() { return nil } } - file_teleport_trust_v1_trust_service_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + file_teleport_trust_v1_trust_service_proto_msgTypes[11].Exporter = func(v any, i int) any { switch v := v.(*GenerateHostCertResponse); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/userloginstate/v1/userloginstate.pb.go b/api/gen/proto/go/teleport/userloginstate/v1/userloginstate.pb.go index 92e238ec591c3..6179327c8865c 100644 --- a/api/gen/proto/go/teleport/userloginstate/v1/userloginstate.pb.go +++ b/api/gen/proto/go/teleport/userloginstate/v1/userloginstate.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/userloginstate/v1/userloginstate.proto @@ -237,7 +237,7 @@ func file_teleport_userloginstate_v1_userloginstate_proto_rawDescGZIP() []byte { } var file_teleport_userloginstate_v1_userloginstate_proto_msgTypes = make([]protoimpl.MessageInfo, 2) -var file_teleport_userloginstate_v1_userloginstate_proto_goTypes = []interface{}{ +var file_teleport_userloginstate_v1_userloginstate_proto_goTypes = []any{ (*UserLoginState)(nil), // 0: teleport.userloginstate.v1.UserLoginState (*Spec)(nil), // 1: teleport.userloginstate.v1.Spec (*v1.ResourceHeader)(nil), // 2: teleport.header.v1.ResourceHeader @@ -261,7 +261,7 @@ func file_teleport_userloginstate_v1_userloginstate_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_userloginstate_v1_userloginstate_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_userloginstate_v1_userloginstate_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*UserLoginState); i { case 0: return &v.state @@ -273,7 +273,7 @@ func file_teleport_userloginstate_v1_userloginstate_proto_init() { return nil } } - file_teleport_userloginstate_v1_userloginstate_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_userloginstate_v1_userloginstate_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*Spec); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/userloginstate/v1/userloginstate_service.pb.go b/api/gen/proto/go/teleport/userloginstate/v1/userloginstate_service.pb.go index c76cad3b5b9d1..9aa42a735dd9d 100644 --- a/api/gen/proto/go/teleport/userloginstate/v1/userloginstate_service.pb.go +++ b/api/gen/proto/go/teleport/userloginstate/v1/userloginstate_service.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/userloginstate/v1/userloginstate_service.proto @@ -408,7 +408,7 @@ func file_teleport_userloginstate_v1_userloginstate_service_proto_rawDescGZIP() } var file_teleport_userloginstate_v1_userloginstate_service_proto_msgTypes = make([]protoimpl.MessageInfo, 6) -var file_teleport_userloginstate_v1_userloginstate_service_proto_goTypes = []interface{}{ +var file_teleport_userloginstate_v1_userloginstate_service_proto_goTypes = []any{ (*GetUserLoginStatesRequest)(nil), // 0: teleport.userloginstate.v1.GetUserLoginStatesRequest (*GetUserLoginStatesResponse)(nil), // 1: teleport.userloginstate.v1.GetUserLoginStatesResponse (*GetUserLoginStateRequest)(nil), // 2: teleport.userloginstate.v1.GetUserLoginStateRequest @@ -445,7 +445,7 @@ func file_teleport_userloginstate_v1_userloginstate_service_proto_init() { } file_teleport_userloginstate_v1_userloginstate_proto_init() if !protoimpl.UnsafeEnabled { - file_teleport_userloginstate_v1_userloginstate_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_userloginstate_v1_userloginstate_service_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*GetUserLoginStatesRequest); i { case 0: return &v.state @@ -457,7 +457,7 @@ func file_teleport_userloginstate_v1_userloginstate_service_proto_init() { return nil } } - file_teleport_userloginstate_v1_userloginstate_service_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_userloginstate_v1_userloginstate_service_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*GetUserLoginStatesResponse); i { case 0: return &v.state @@ -469,7 +469,7 @@ func file_teleport_userloginstate_v1_userloginstate_service_proto_init() { return nil } } - file_teleport_userloginstate_v1_userloginstate_service_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_teleport_userloginstate_v1_userloginstate_service_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*GetUserLoginStateRequest); i { case 0: return &v.state @@ -481,7 +481,7 @@ func file_teleport_userloginstate_v1_userloginstate_service_proto_init() { return nil } } - file_teleport_userloginstate_v1_userloginstate_service_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_teleport_userloginstate_v1_userloginstate_service_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*UpsertUserLoginStateRequest); i { case 0: return &v.state @@ -493,7 +493,7 @@ func file_teleport_userloginstate_v1_userloginstate_service_proto_init() { return nil } } - file_teleport_userloginstate_v1_userloginstate_service_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_teleport_userloginstate_v1_userloginstate_service_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*DeleteUserLoginStateRequest); i { case 0: return &v.state @@ -505,7 +505,7 @@ func file_teleport_userloginstate_v1_userloginstate_service_proto_init() { return nil } } - file_teleport_userloginstate_v1_userloginstate_service_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_teleport_userloginstate_v1_userloginstate_service_proto_msgTypes[5].Exporter = func(v any, i int) any { switch v := v.(*DeleteAllUserLoginStatesRequest); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/users/v1/users_service.pb.go b/api/gen/proto/go/teleport/users/v1/users_service.pb.go index 366bc76a0cb59..2b8a3611b6eaf 100644 --- a/api/gen/proto/go/teleport/users/v1/users_service.pb.go +++ b/api/gen/proto/go/teleport/users/v1/users_service.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/users/v1/users_service.proto @@ -750,7 +750,7 @@ func file_teleport_users_v1_users_service_proto_rawDescGZIP() []byte { } var file_teleport_users_v1_users_service_proto_msgTypes = make([]protoimpl.MessageInfo, 11) -var file_teleport_users_v1_users_service_proto_goTypes = []interface{}{ +var file_teleport_users_v1_users_service_proto_goTypes = []any{ (*GetUserRequest)(nil), // 0: teleport.users.v1.GetUserRequest (*GetUserResponse)(nil), // 1: teleport.users.v1.GetUserResponse (*ListUsersRequest)(nil), // 2: teleport.users.v1.ListUsersRequest @@ -801,7 +801,7 @@ func file_teleport_users_v1_users_service_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_users_v1_users_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_users_v1_users_service_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*GetUserRequest); i { case 0: return &v.state @@ -813,7 +813,7 @@ func file_teleport_users_v1_users_service_proto_init() { return nil } } - file_teleport_users_v1_users_service_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_users_v1_users_service_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*GetUserResponse); i { case 0: return &v.state @@ -825,7 +825,7 @@ func file_teleport_users_v1_users_service_proto_init() { return nil } } - file_teleport_users_v1_users_service_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_teleport_users_v1_users_service_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*ListUsersRequest); i { case 0: return &v.state @@ -837,7 +837,7 @@ func file_teleport_users_v1_users_service_proto_init() { return nil } } - file_teleport_users_v1_users_service_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_teleport_users_v1_users_service_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*ListUsersResponse); i { case 0: return &v.state @@ -849,7 +849,7 @@ func file_teleport_users_v1_users_service_proto_init() { return nil } } - file_teleport_users_v1_users_service_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_teleport_users_v1_users_service_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*CreateUserRequest); i { case 0: return &v.state @@ -861,7 +861,7 @@ func file_teleport_users_v1_users_service_proto_init() { return nil } } - file_teleport_users_v1_users_service_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_teleport_users_v1_users_service_proto_msgTypes[5].Exporter = func(v any, i int) any { switch v := v.(*CreateUserResponse); i { case 0: return &v.state @@ -873,7 +873,7 @@ func file_teleport_users_v1_users_service_proto_init() { return nil } } - file_teleport_users_v1_users_service_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_teleport_users_v1_users_service_proto_msgTypes[6].Exporter = func(v any, i int) any { switch v := v.(*UpdateUserRequest); i { case 0: return &v.state @@ -885,7 +885,7 @@ func file_teleport_users_v1_users_service_proto_init() { return nil } } - file_teleport_users_v1_users_service_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_teleport_users_v1_users_service_proto_msgTypes[7].Exporter = func(v any, i int) any { switch v := v.(*UpdateUserResponse); i { case 0: return &v.state @@ -897,7 +897,7 @@ func file_teleport_users_v1_users_service_proto_init() { return nil } } - file_teleport_users_v1_users_service_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + file_teleport_users_v1_users_service_proto_msgTypes[8].Exporter = func(v any, i int) any { switch v := v.(*UpsertUserRequest); i { case 0: return &v.state @@ -909,7 +909,7 @@ func file_teleport_users_v1_users_service_proto_init() { return nil } } - file_teleport_users_v1_users_service_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + file_teleport_users_v1_users_service_proto_msgTypes[9].Exporter = func(v any, i int) any { switch v := v.(*UpsertUserResponse); i { case 0: return &v.state @@ -921,7 +921,7 @@ func file_teleport_users_v1_users_service_proto_init() { return nil } } - file_teleport_users_v1_users_service_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + file_teleport_users_v1_users_service_proto_msgTypes[10].Exporter = func(v any, i int) any { switch v := v.(*DeleteUserRequest); i { case 0: return &v.state diff --git a/api/gen/proto/go/userpreferences/v1/access_graph.pb.go b/api/gen/proto/go/userpreferences/v1/access_graph.pb.go index a2bea001a0711..9e645fbc1f2d7 100644 --- a/api/gen/proto/go/userpreferences/v1/access_graph.pb.go +++ b/api/gen/proto/go/userpreferences/v1/access_graph.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/userpreferences/v1/access_graph.proto @@ -118,7 +118,7 @@ func file_teleport_userpreferences_v1_access_graph_proto_rawDescGZIP() []byte { } var file_teleport_userpreferences_v1_access_graph_proto_msgTypes = make([]protoimpl.MessageInfo, 1) -var file_teleport_userpreferences_v1_access_graph_proto_goTypes = []interface{}{ +var file_teleport_userpreferences_v1_access_graph_proto_goTypes = []any{ (*AccessGraphUserPreferences)(nil), // 0: teleport.userpreferences.v1.AccessGraphUserPreferences } var file_teleport_userpreferences_v1_access_graph_proto_depIdxs = []int32{ @@ -135,7 +135,7 @@ func file_teleport_userpreferences_v1_access_graph_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_userpreferences_v1_access_graph_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_userpreferences_v1_access_graph_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*AccessGraphUserPreferences); i { case 0: return &v.state diff --git a/api/gen/proto/go/userpreferences/v1/assist.pb.go b/api/gen/proto/go/userpreferences/v1/assist.pb.go index 5806d8a0ca97d..68cf807582627 100644 --- a/api/gen/proto/go/userpreferences/v1/assist.pb.go +++ b/api/gen/proto/go/userpreferences/v1/assist.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/userpreferences/v1/assist.proto @@ -204,7 +204,7 @@ func file_teleport_userpreferences_v1_assist_proto_rawDescGZIP() []byte { var file_teleport_userpreferences_v1_assist_proto_enumTypes = make([]protoimpl.EnumInfo, 1) var file_teleport_userpreferences_v1_assist_proto_msgTypes = make([]protoimpl.MessageInfo, 1) -var file_teleport_userpreferences_v1_assist_proto_goTypes = []interface{}{ +var file_teleport_userpreferences_v1_assist_proto_goTypes = []any{ (AssistViewMode)(0), // 0: teleport.userpreferences.v1.AssistViewMode (*AssistUserPreferences)(nil), // 1: teleport.userpreferences.v1.AssistUserPreferences } @@ -223,7 +223,7 @@ func file_teleport_userpreferences_v1_assist_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_userpreferences_v1_assist_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_userpreferences_v1_assist_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*AssistUserPreferences); i { case 0: return &v.state diff --git a/api/gen/proto/go/userpreferences/v1/cluster_preferences.pb.go b/api/gen/proto/go/userpreferences/v1/cluster_preferences.pb.go index 709ff59099f28..8ab7131faa31e 100644 --- a/api/gen/proto/go/userpreferences/v1/cluster_preferences.pb.go +++ b/api/gen/proto/go/userpreferences/v1/cluster_preferences.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/userpreferences/v1/cluster_preferences.proto @@ -175,7 +175,7 @@ func file_teleport_userpreferences_v1_cluster_preferences_proto_rawDescGZIP() [] } var file_teleport_userpreferences_v1_cluster_preferences_proto_msgTypes = make([]protoimpl.MessageInfo, 2) -var file_teleport_userpreferences_v1_cluster_preferences_proto_goTypes = []interface{}{ +var file_teleport_userpreferences_v1_cluster_preferences_proto_goTypes = []any{ (*PinnedResourcesUserPreferences)(nil), // 0: teleport.userpreferences.v1.PinnedResourcesUserPreferences (*ClusterUserPreferences)(nil), // 1: teleport.userpreferences.v1.ClusterUserPreferences } @@ -194,7 +194,7 @@ func file_teleport_userpreferences_v1_cluster_preferences_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_userpreferences_v1_cluster_preferences_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_userpreferences_v1_cluster_preferences_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*PinnedResourcesUserPreferences); i { case 0: return &v.state @@ -206,7 +206,7 @@ func file_teleport_userpreferences_v1_cluster_preferences_proto_init() { return nil } } - file_teleport_userpreferences_v1_cluster_preferences_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_userpreferences_v1_cluster_preferences_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*ClusterUserPreferences); i { case 0: return &v.state diff --git a/api/gen/proto/go/userpreferences/v1/onboard.pb.go b/api/gen/proto/go/userpreferences/v1/onboard.pb.go index 39bffb3cce49f..0b1b153c8ef90 100644 --- a/api/gen/proto/go/userpreferences/v1/onboard.pb.go +++ b/api/gen/proto/go/userpreferences/v1/onboard.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/userpreferences/v1/onboard.proto @@ -290,7 +290,7 @@ func file_teleport_userpreferences_v1_onboard_proto_rawDescGZIP() []byte { var file_teleport_userpreferences_v1_onboard_proto_enumTypes = make([]protoimpl.EnumInfo, 1) var file_teleport_userpreferences_v1_onboard_proto_msgTypes = make([]protoimpl.MessageInfo, 2) -var file_teleport_userpreferences_v1_onboard_proto_goTypes = []interface{}{ +var file_teleport_userpreferences_v1_onboard_proto_goTypes = []any{ (Resource)(0), // 0: teleport.userpreferences.v1.Resource (*MarketingParams)(nil), // 1: teleport.userpreferences.v1.MarketingParams (*OnboardUserPreferences)(nil), // 2: teleport.userpreferences.v1.OnboardUserPreferences @@ -311,7 +311,7 @@ func file_teleport_userpreferences_v1_onboard_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_userpreferences_v1_onboard_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_userpreferences_v1_onboard_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*MarketingParams); i { case 0: return &v.state @@ -323,7 +323,7 @@ func file_teleport_userpreferences_v1_onboard_proto_init() { return nil } } - file_teleport_userpreferences_v1_onboard_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_userpreferences_v1_onboard_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*OnboardUserPreferences); i { case 0: return &v.state diff --git a/api/gen/proto/go/userpreferences/v1/theme.pb.go b/api/gen/proto/go/userpreferences/v1/theme.pb.go index fa2c0e749c603..a86eeb33a7d74 100644 --- a/api/gen/proto/go/userpreferences/v1/theme.pb.go +++ b/api/gen/proto/go/userpreferences/v1/theme.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/userpreferences/v1/theme.proto @@ -119,7 +119,7 @@ func file_teleport_userpreferences_v1_theme_proto_rawDescGZIP() []byte { } var file_teleport_userpreferences_v1_theme_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_teleport_userpreferences_v1_theme_proto_goTypes = []interface{}{ +var file_teleport_userpreferences_v1_theme_proto_goTypes = []any{ (Theme)(0), // 0: teleport.userpreferences.v1.Theme } var file_teleport_userpreferences_v1_theme_proto_depIdxs = []int32{ diff --git a/api/gen/proto/go/userpreferences/v1/unified_resource_preferences.pb.go b/api/gen/proto/go/userpreferences/v1/unified_resource_preferences.pb.go index c92c53de84d12..a3f82755d3db0 100644 --- a/api/gen/proto/go/userpreferences/v1/unified_resource_preferences.pb.go +++ b/api/gen/proto/go/userpreferences/v1/unified_resource_preferences.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/userpreferences/v1/unified_resource_preferences.proto @@ -322,7 +322,7 @@ func file_teleport_userpreferences_v1_unified_resource_preferences_proto_rawDesc var file_teleport_userpreferences_v1_unified_resource_preferences_proto_enumTypes = make([]protoimpl.EnumInfo, 3) var file_teleport_userpreferences_v1_unified_resource_preferences_proto_msgTypes = make([]protoimpl.MessageInfo, 1) -var file_teleport_userpreferences_v1_unified_resource_preferences_proto_goTypes = []interface{}{ +var file_teleport_userpreferences_v1_unified_resource_preferences_proto_goTypes = []any{ (DefaultTab)(0), // 0: teleport.userpreferences.v1.DefaultTab (ViewMode)(0), // 1: teleport.userpreferences.v1.ViewMode (LabelsViewMode)(0), // 2: teleport.userpreferences.v1.LabelsViewMode @@ -345,7 +345,7 @@ func file_teleport_userpreferences_v1_unified_resource_preferences_proto_init() return } if !protoimpl.UnsafeEnabled { - file_teleport_userpreferences_v1_unified_resource_preferences_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_userpreferences_v1_unified_resource_preferences_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*UnifiedResourcePreferences); i { case 0: return &v.state diff --git a/api/gen/proto/go/userpreferences/v1/userpreferences.pb.go b/api/gen/proto/go/userpreferences/v1/userpreferences.pb.go index 372d2c74abd91..9360ca65e1ad1 100644 --- a/api/gen/proto/go/userpreferences/v1/userpreferences.pb.go +++ b/api/gen/proto/go/userpreferences/v1/userpreferences.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/userpreferences/v1/userpreferences.proto @@ -385,7 +385,7 @@ func file_teleport_userpreferences_v1_userpreferences_proto_rawDescGZIP() []byte } var file_teleport_userpreferences_v1_userpreferences_proto_msgTypes = make([]protoimpl.MessageInfo, 4) -var file_teleport_userpreferences_v1_userpreferences_proto_goTypes = []interface{}{ +var file_teleport_userpreferences_v1_userpreferences_proto_goTypes = []any{ (*UserPreferences)(nil), // 0: teleport.userpreferences.v1.UserPreferences (*GetUserPreferencesRequest)(nil), // 1: teleport.userpreferences.v1.GetUserPreferencesRequest (*GetUserPreferencesResponse)(nil), // 2: teleport.userpreferences.v1.GetUserPreferencesResponse @@ -430,7 +430,7 @@ func file_teleport_userpreferences_v1_userpreferences_proto_init() { file_teleport_userpreferences_v1_theme_proto_init() file_teleport_userpreferences_v1_unified_resource_preferences_proto_init() if !protoimpl.UnsafeEnabled { - file_teleport_userpreferences_v1_userpreferences_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_userpreferences_v1_userpreferences_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*UserPreferences); i { case 0: return &v.state @@ -442,7 +442,7 @@ func file_teleport_userpreferences_v1_userpreferences_proto_init() { return nil } } - file_teleport_userpreferences_v1_userpreferences_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_userpreferences_v1_userpreferences_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*GetUserPreferencesRequest); i { case 0: return &v.state @@ -454,7 +454,7 @@ func file_teleport_userpreferences_v1_userpreferences_proto_init() { return nil } } - file_teleport_userpreferences_v1_userpreferences_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_teleport_userpreferences_v1_userpreferences_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*GetUserPreferencesResponse); i { case 0: return &v.state @@ -466,7 +466,7 @@ func file_teleport_userpreferences_v1_userpreferences_proto_init() { return nil } } - file_teleport_userpreferences_v1_userpreferences_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_teleport_userpreferences_v1_userpreferences_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*UpsertUserPreferencesRequest); i { case 0: return &v.state diff --git a/gen/proto/go/accessgraph/v1alpha/access_graph_service.pb.go b/gen/proto/go/accessgraph/v1alpha/access_graph_service.pb.go index 7a03706bbf50c..d01e9d79ebe5a 100644 --- a/gen/proto/go/accessgraph/v1alpha/access_graph_service.pb.go +++ b/gen/proto/go/accessgraph/v1alpha/access_graph_service.pb.go @@ -17,7 +17,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: accessgraph/v1alpha/access_graph_service.proto @@ -1636,7 +1636,7 @@ func file_accessgraph_v1alpha_access_graph_service_proto_rawDescGZIP() []byte { } var file_accessgraph_v1alpha_access_graph_service_proto_msgTypes = make([]protoimpl.MessageInfo, 21) -var file_accessgraph_v1alpha_access_graph_service_proto_goTypes = []interface{}{ +var file_accessgraph_v1alpha_access_graph_service_proto_goTypes = []any{ (*QueryRequest)(nil), // 0: accessgraph.v1alpha.QueryRequest (*QueryResponse)(nil), // 1: accessgraph.v1alpha.QueryResponse (*GetFileRequest)(nil), // 2: accessgraph.v1alpha.GetFileRequest @@ -1732,7 +1732,7 @@ func file_accessgraph_v1alpha_access_graph_service_proto_init() { file_accessgraph_v1alpha_graph_proto_init() file_accessgraph_v1alpha_resources_proto_init() if !protoimpl.UnsafeEnabled { - file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*QueryRequest); i { case 0: return &v.state @@ -1744,7 +1744,7 @@ func file_accessgraph_v1alpha_access_graph_service_proto_init() { return nil } } - file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*QueryResponse); i { case 0: return &v.state @@ -1756,7 +1756,7 @@ func file_accessgraph_v1alpha_access_graph_service_proto_init() { return nil } } - file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*GetFileRequest); i { case 0: return &v.state @@ -1768,7 +1768,7 @@ func file_accessgraph_v1alpha_access_graph_service_proto_init() { return nil } } - file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*GetFileResponse); i { case 0: return &v.state @@ -1780,7 +1780,7 @@ func file_accessgraph_v1alpha_access_graph_service_proto_init() { return nil } } - file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*EventsStreamRequest); i { case 0: return &v.state @@ -1792,7 +1792,7 @@ func file_accessgraph_v1alpha_access_graph_service_proto_init() { return nil } } - file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[5].Exporter = func(v any, i int) any { switch v := v.(*EventsStreamV2Request); i { case 0: return &v.state @@ -1804,7 +1804,7 @@ func file_accessgraph_v1alpha_access_graph_service_proto_init() { return nil } } - file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[6].Exporter = func(v any, i int) any { switch v := v.(*SyncOperation); i { case 0: return &v.state @@ -1816,7 +1816,7 @@ func file_accessgraph_v1alpha_access_graph_service_proto_init() { return nil } } - file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[7].Exporter = func(v any, i int) any { switch v := v.(*EventsStreamResponse); i { case 0: return &v.state @@ -1828,7 +1828,7 @@ func file_accessgraph_v1alpha_access_graph_service_proto_init() { return nil } } - file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[8].Exporter = func(v any, i int) any { switch v := v.(*EventsStreamV2Response); i { case 0: return &v.state @@ -1840,7 +1840,7 @@ func file_accessgraph_v1alpha_access_graph_service_proto_init() { return nil } } - file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[9].Exporter = func(v any, i int) any { switch v := v.(*AuditEvent); i { case 0: return &v.state @@ -1852,7 +1852,7 @@ func file_accessgraph_v1alpha_access_graph_service_proto_init() { return nil } } - file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[10].Exporter = func(v any, i int) any { switch v := v.(*RegisterRequest); i { case 0: return &v.state @@ -1864,7 +1864,7 @@ func file_accessgraph_v1alpha_access_graph_service_proto_init() { return nil } } - file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[11].Exporter = func(v any, i int) any { switch v := v.(*RegisterResponse); i { case 0: return &v.state @@ -1876,7 +1876,7 @@ func file_accessgraph_v1alpha_access_graph_service_proto_init() { return nil } } - file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[12].Exporter = func(v any, i int) any { switch v := v.(*ReplaceCAsRequest); i { case 0: return &v.state @@ -1888,7 +1888,7 @@ func file_accessgraph_v1alpha_access_graph_service_proto_init() { return nil } } - file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[13].Exporter = func(v any, i int) any { switch v := v.(*ReplaceCAsResponse); i { case 0: return &v.state @@ -1900,7 +1900,7 @@ func file_accessgraph_v1alpha_access_graph_service_proto_init() { return nil } } - file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[14].Exporter = func(v any, i int) any { switch v := v.(*AWSEventsStreamRequest); i { case 0: return &v.state @@ -1912,7 +1912,7 @@ func file_accessgraph_v1alpha_access_graph_service_proto_init() { return nil } } - file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[15].Exporter = func(v any, i int) any { switch v := v.(*AWSSyncOperation); i { case 0: return &v.state @@ -1924,7 +1924,7 @@ func file_accessgraph_v1alpha_access_graph_service_proto_init() { return nil } } - file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[16].Exporter = func(v any, i int) any { switch v := v.(*AWSEventsStreamResponse); i { case 0: return &v.state @@ -1936,7 +1936,7 @@ func file_accessgraph_v1alpha_access_graph_service_proto_init() { return nil } } - file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[17].Exporter = func(v any, i int) any { switch v := v.(*GitlabEventsStreamRequest); i { case 0: return &v.state @@ -1948,7 +1948,7 @@ func file_accessgraph_v1alpha_access_graph_service_proto_init() { return nil } } - file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[18].Exporter = func(v any, i int) any { switch v := v.(*GitlabEventsStreamResponse); i { case 0: return &v.state @@ -1960,7 +1960,7 @@ func file_accessgraph_v1alpha_access_graph_service_proto_init() { return nil } } - file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[19].Exporter = func(v any, i int) any { switch v := v.(*EntraEventsStreamRequest); i { case 0: return &v.state @@ -1972,7 +1972,7 @@ func file_accessgraph_v1alpha_access_graph_service_proto_init() { return nil } } - file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[20].Exporter = func(v any, i int) any { switch v := v.(*EntraEventsStreamResponse); i { case 0: return &v.state @@ -1985,37 +1985,37 @@ func file_accessgraph_v1alpha_access_graph_service_proto_init() { } } } - file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[4].OneofWrappers = []interface{}{ + file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[4].OneofWrappers = []any{ (*EventsStreamRequest_Sync)(nil), (*EventsStreamRequest_Upsert)(nil), (*EventsStreamRequest_Delete)(nil), (*EventsStreamRequest_AccessListsMembers)(nil), (*EventsStreamRequest_ExcludeAccessListMembers)(nil), } - file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[5].OneofWrappers = []interface{}{ + file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[5].OneofWrappers = []any{ (*EventsStreamV2Request_Sync)(nil), (*EventsStreamV2Request_Upsert)(nil), (*EventsStreamV2Request_Delete)(nil), (*EventsStreamV2Request_AccessListsMembers)(nil), (*EventsStreamV2Request_ExcludeAccessListMembers)(nil), } - file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[8].OneofWrappers = []interface{}{ + file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[8].OneofWrappers = []any{ (*EventsStreamV2Response_Event)(nil), } - file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[9].OneofWrappers = []interface{}{ + file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[9].OneofWrappers = []any{ (*AuditEvent_AccessPathChanged)(nil), } - file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[14].OneofWrappers = []interface{}{ + file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[14].OneofWrappers = []any{ (*AWSEventsStreamRequest_Sync)(nil), (*AWSEventsStreamRequest_Upsert)(nil), (*AWSEventsStreamRequest_Delete)(nil), } - file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[17].OneofWrappers = []interface{}{ + file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[17].OneofWrappers = []any{ (*GitlabEventsStreamRequest_Sync)(nil), (*GitlabEventsStreamRequest_Upsert)(nil), (*GitlabEventsStreamRequest_Delete)(nil), } - file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[19].OneofWrappers = []interface{}{ + file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[19].OneofWrappers = []any{ (*EntraEventsStreamRequest_Sync)(nil), (*EntraEventsStreamRequest_Upsert)(nil), (*EntraEventsStreamRequest_Delete)(nil), diff --git a/gen/proto/go/accessgraph/v1alpha/aws.pb.go b/gen/proto/go/accessgraph/v1alpha/aws.pb.go index f496b098bb68f..3ef1ca6496fc3 100644 --- a/gen/proto/go/accessgraph/v1alpha/aws.pb.go +++ b/gen/proto/go/accessgraph/v1alpha/aws.pb.go @@ -17,7 +17,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: accessgraph/v1alpha/aws.proto @@ -3986,7 +3986,7 @@ func file_accessgraph_v1alpha_aws_proto_rawDescGZIP() []byte { var file_accessgraph_v1alpha_aws_proto_enumTypes = make([]protoimpl.EnumInfo, 2) var file_accessgraph_v1alpha_aws_proto_msgTypes = make([]protoimpl.MessageInfo, 31) -var file_accessgraph_v1alpha_aws_proto_goTypes = []interface{}{ +var file_accessgraph_v1alpha_aws_proto_goTypes = []any{ (UsersPermissionsBoundaryType)(0), // 0: accessgraph.v1alpha.UsersPermissionsBoundaryType (RolePermissionsBoundaryType)(0), // 1: accessgraph.v1alpha.RolePermissionsBoundaryType (*AWSResourceList)(nil), // 2: accessgraph.v1alpha.AWSResourceList @@ -4135,7 +4135,7 @@ func file_accessgraph_v1alpha_aws_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_accessgraph_v1alpha_aws_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_aws_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*AWSResourceList); i { case 0: return &v.state @@ -4147,7 +4147,7 @@ func file_accessgraph_v1alpha_aws_proto_init() { return nil } } - file_accessgraph_v1alpha_aws_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_aws_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*AWSResource); i { case 0: return &v.state @@ -4159,7 +4159,7 @@ func file_accessgraph_v1alpha_aws_proto_init() { return nil } } - file_accessgraph_v1alpha_aws_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_aws_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*AWSUserInlinePolicyV1); i { case 0: return &v.state @@ -4171,7 +4171,7 @@ func file_accessgraph_v1alpha_aws_proto_init() { return nil } } - file_accessgraph_v1alpha_aws_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_aws_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*AWSPolicyV1); i { case 0: return &v.state @@ -4183,7 +4183,7 @@ func file_accessgraph_v1alpha_aws_proto_init() { return nil } } - file_accessgraph_v1alpha_aws_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_aws_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*AWSGroupV1); i { case 0: return &v.state @@ -4195,7 +4195,7 @@ func file_accessgraph_v1alpha_aws_proto_init() { return nil } } - file_accessgraph_v1alpha_aws_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_aws_proto_msgTypes[5].Exporter = func(v any, i int) any { switch v := v.(*AWSUserGroupsV1); i { case 0: return &v.state @@ -4207,7 +4207,7 @@ func file_accessgraph_v1alpha_aws_proto_init() { return nil } } - file_accessgraph_v1alpha_aws_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_aws_proto_msgTypes[6].Exporter = func(v any, i int) any { switch v := v.(*AWSUserV1); i { case 0: return &v.state @@ -4219,7 +4219,7 @@ func file_accessgraph_v1alpha_aws_proto_init() { return nil } } - file_accessgraph_v1alpha_aws_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_aws_proto_msgTypes[7].Exporter = func(v any, i int) any { switch v := v.(*AWSTag); i { case 0: return &v.state @@ -4231,7 +4231,7 @@ func file_accessgraph_v1alpha_aws_proto_init() { return nil } } - file_accessgraph_v1alpha_aws_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_aws_proto_msgTypes[8].Exporter = func(v any, i int) any { switch v := v.(*UsersPermissionsBoundaryV1); i { case 0: return &v.state @@ -4243,7 +4243,7 @@ func file_accessgraph_v1alpha_aws_proto_init() { return nil } } - file_accessgraph_v1alpha_aws_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_aws_proto_msgTypes[9].Exporter = func(v any, i int) any { switch v := v.(*AWSInstanceV1); i { case 0: return &v.state @@ -4255,7 +4255,7 @@ func file_accessgraph_v1alpha_aws_proto_init() { return nil } } - file_accessgraph_v1alpha_aws_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_aws_proto_msgTypes[10].Exporter = func(v any, i int) any { switch v := v.(*AWSUserAttachedPolicies); i { case 0: return &v.state @@ -4267,7 +4267,7 @@ func file_accessgraph_v1alpha_aws_proto_init() { return nil } } - file_accessgraph_v1alpha_aws_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_aws_proto_msgTypes[11].Exporter = func(v any, i int) any { switch v := v.(*AttachedPolicyV1); i { case 0: return &v.state @@ -4279,7 +4279,7 @@ func file_accessgraph_v1alpha_aws_proto_init() { return nil } } - file_accessgraph_v1alpha_aws_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_aws_proto_msgTypes[12].Exporter = func(v any, i int) any { switch v := v.(*AWSGroupAttachedPolicies); i { case 0: return &v.state @@ -4291,7 +4291,7 @@ func file_accessgraph_v1alpha_aws_proto_init() { return nil } } - file_accessgraph_v1alpha_aws_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_aws_proto_msgTypes[13].Exporter = func(v any, i int) any { switch v := v.(*AWSGroupInlinePolicyV1); i { case 0: return &v.state @@ -4303,7 +4303,7 @@ func file_accessgraph_v1alpha_aws_proto_init() { return nil } } - file_accessgraph_v1alpha_aws_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_aws_proto_msgTypes[14].Exporter = func(v any, i int) any { switch v := v.(*AWSS3BucketV1); i { case 0: return &v.state @@ -4315,7 +4315,7 @@ func file_accessgraph_v1alpha_aws_proto_init() { return nil } } - file_accessgraph_v1alpha_aws_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_aws_proto_msgTypes[15].Exporter = func(v any, i int) any { switch v := v.(*AWSS3BucketACL); i { case 0: return &v.state @@ -4327,7 +4327,7 @@ func file_accessgraph_v1alpha_aws_proto_init() { return nil } } - file_accessgraph_v1alpha_aws_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_aws_proto_msgTypes[16].Exporter = func(v any, i int) any { switch v := v.(*AWSS3BucketACLGrantee); i { case 0: return &v.state @@ -4339,7 +4339,7 @@ func file_accessgraph_v1alpha_aws_proto_init() { return nil } } - file_accessgraph_v1alpha_aws_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_aws_proto_msgTypes[17].Exporter = func(v any, i int) any { switch v := v.(*AWSRoleV1); i { case 0: return &v.state @@ -4351,7 +4351,7 @@ func file_accessgraph_v1alpha_aws_proto_init() { return nil } } - file_accessgraph_v1alpha_aws_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_aws_proto_msgTypes[18].Exporter = func(v any, i int) any { switch v := v.(*RolePermissionsBoundaryV1); i { case 0: return &v.state @@ -4363,7 +4363,7 @@ func file_accessgraph_v1alpha_aws_proto_init() { return nil } } - file_accessgraph_v1alpha_aws_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_aws_proto_msgTypes[19].Exporter = func(v any, i int) any { switch v := v.(*RoleLastUsedV1); i { case 0: return &v.state @@ -4375,7 +4375,7 @@ func file_accessgraph_v1alpha_aws_proto_init() { return nil } } - file_accessgraph_v1alpha_aws_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_aws_proto_msgTypes[20].Exporter = func(v any, i int) any { switch v := v.(*AWSRoleInlinePolicyV1); i { case 0: return &v.state @@ -4387,7 +4387,7 @@ func file_accessgraph_v1alpha_aws_proto_init() { return nil } } - file_accessgraph_v1alpha_aws_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_aws_proto_msgTypes[21].Exporter = func(v any, i int) any { switch v := v.(*AWSRoleAttachedPolicies); i { case 0: return &v.state @@ -4399,7 +4399,7 @@ func file_accessgraph_v1alpha_aws_proto_init() { return nil } } - file_accessgraph_v1alpha_aws_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_aws_proto_msgTypes[22].Exporter = func(v any, i int) any { switch v := v.(*AWSInstanceProfileV1); i { case 0: return &v.state @@ -4411,7 +4411,7 @@ func file_accessgraph_v1alpha_aws_proto_init() { return nil } } - file_accessgraph_v1alpha_aws_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_aws_proto_msgTypes[23].Exporter = func(v any, i int) any { switch v := v.(*AWSEKSClusterV1); i { case 0: return &v.state @@ -4423,7 +4423,7 @@ func file_accessgraph_v1alpha_aws_proto_init() { return nil } } - file_accessgraph_v1alpha_aws_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_aws_proto_msgTypes[24].Exporter = func(v any, i int) any { switch v := v.(*AWSEKSClusterAccessEntryV1); i { case 0: return &v.state @@ -4435,7 +4435,7 @@ func file_accessgraph_v1alpha_aws_proto_init() { return nil } } - file_accessgraph_v1alpha_aws_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_aws_proto_msgTypes[25].Exporter = func(v any, i int) any { switch v := v.(*AWSEKSAssociatedAccessPolicyV1); i { case 0: return &v.state @@ -4447,7 +4447,7 @@ func file_accessgraph_v1alpha_aws_proto_init() { return nil } } - file_accessgraph_v1alpha_aws_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_aws_proto_msgTypes[26].Exporter = func(v any, i int) any { switch v := v.(*AWSEKSAccessScopeV1); i { case 0: return &v.state @@ -4459,7 +4459,7 @@ func file_accessgraph_v1alpha_aws_proto_init() { return nil } } - file_accessgraph_v1alpha_aws_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_aws_proto_msgTypes[27].Exporter = func(v any, i int) any { switch v := v.(*AWSRDSDatabaseV1); i { case 0: return &v.state @@ -4471,7 +4471,7 @@ func file_accessgraph_v1alpha_aws_proto_init() { return nil } } - file_accessgraph_v1alpha_aws_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_aws_proto_msgTypes[28].Exporter = func(v any, i int) any { switch v := v.(*AWSRDSEngineV1); i { case 0: return &v.state @@ -4483,7 +4483,7 @@ func file_accessgraph_v1alpha_aws_proto_init() { return nil } } - file_accessgraph_v1alpha_aws_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_aws_proto_msgTypes[29].Exporter = func(v any, i int) any { switch v := v.(*AWSSAMLProviderV1); i { case 0: return &v.state @@ -4495,7 +4495,7 @@ func file_accessgraph_v1alpha_aws_proto_init() { return nil } } - file_accessgraph_v1alpha_aws_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_aws_proto_msgTypes[30].Exporter = func(v any, i int) any { switch v := v.(*AWSOIDCProviderV1); i { case 0: return &v.state @@ -4508,7 +4508,7 @@ func file_accessgraph_v1alpha_aws_proto_init() { } } } - file_accessgraph_v1alpha_aws_proto_msgTypes[1].OneofWrappers = []interface{}{ + file_accessgraph_v1alpha_aws_proto_msgTypes[1].OneofWrappers = []any{ (*AWSResource_User)(nil), (*AWSResource_Group)(nil), (*AWSResource_UserInlinePolicy)(nil), diff --git a/gen/proto/go/accessgraph/v1alpha/entra.pb.go b/gen/proto/go/accessgraph/v1alpha/entra.pb.go index cebba10060ffa..915a0e24710a3 100644 --- a/gen/proto/go/accessgraph/v1alpha/entra.pb.go +++ b/gen/proto/go/accessgraph/v1alpha/entra.pb.go @@ -17,7 +17,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: accessgraph/v1alpha/entra.proto @@ -344,7 +344,7 @@ func file_accessgraph_v1alpha_entra_proto_rawDescGZIP() []byte { } var file_accessgraph_v1alpha_entra_proto_msgTypes = make([]protoimpl.MessageInfo, 4) -var file_accessgraph_v1alpha_entra_proto_goTypes = []interface{}{ +var file_accessgraph_v1alpha_entra_proto_goTypes = []any{ (*EntraSyncOperation)(nil), // 0: accessgraph.v1alpha.EntraSyncOperation (*EntraResourceList)(nil), // 1: accessgraph.v1alpha.EntraResourceList (*EntraResource)(nil), // 2: accessgraph.v1alpha.EntraResource @@ -366,7 +366,7 @@ func file_accessgraph_v1alpha_entra_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_accessgraph_v1alpha_entra_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_entra_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*EntraSyncOperation); i { case 0: return &v.state @@ -378,7 +378,7 @@ func file_accessgraph_v1alpha_entra_proto_init() { return nil } } - file_accessgraph_v1alpha_entra_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_entra_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*EntraResourceList); i { case 0: return &v.state @@ -390,7 +390,7 @@ func file_accessgraph_v1alpha_entra_proto_init() { return nil } } - file_accessgraph_v1alpha_entra_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_entra_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*EntraResource); i { case 0: return &v.state @@ -402,7 +402,7 @@ func file_accessgraph_v1alpha_entra_proto_init() { return nil } } - file_accessgraph_v1alpha_entra_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_entra_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*EntraApplication); i { case 0: return &v.state @@ -415,7 +415,7 @@ func file_accessgraph_v1alpha_entra_proto_init() { } } } - file_accessgraph_v1alpha_entra_proto_msgTypes[2].OneofWrappers = []interface{}{ + file_accessgraph_v1alpha_entra_proto_msgTypes[2].OneofWrappers = []any{ (*EntraResource_Application)(nil), } type x struct{} diff --git a/gen/proto/go/accessgraph/v1alpha/events.pb.go b/gen/proto/go/accessgraph/v1alpha/events.pb.go index b260f6bd6910e..842ef8f248d8c 100644 --- a/gen/proto/go/accessgraph/v1alpha/events.pb.go +++ b/gen/proto/go/accessgraph/v1alpha/events.pb.go @@ -17,7 +17,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: accessgraph/v1alpha/events.proto @@ -170,7 +170,7 @@ func file_accessgraph_v1alpha_events_proto_rawDescGZIP() []byte { } var file_accessgraph_v1alpha_events_proto_msgTypes = make([]protoimpl.MessageInfo, 1) -var file_accessgraph_v1alpha_events_proto_goTypes = []interface{}{ +var file_accessgraph_v1alpha_events_proto_goTypes = []any{ (*AccessPathChanged)(nil), // 0: accessgraph.v1alpha.AccessPathChanged (*v1.Metadata)(nil), // 1: teleport.header.v1.Metadata } @@ -189,7 +189,7 @@ func file_accessgraph_v1alpha_events_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_accessgraph_v1alpha_events_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_events_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*AccessPathChanged); i { case 0: return &v.state diff --git a/gen/proto/go/accessgraph/v1alpha/gitlab.pb.go b/gen/proto/go/accessgraph/v1alpha/gitlab.pb.go index 4823d8ecc3dcd..0b3b2f408facb 100644 --- a/gen/proto/go/accessgraph/v1alpha/gitlab.pb.go +++ b/gen/proto/go/accessgraph/v1alpha/gitlab.pb.go @@ -17,7 +17,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: accessgraph/v1alpha/gitlab.proto @@ -940,7 +940,7 @@ func file_accessgraph_v1alpha_gitlab_proto_rawDescGZIP() []byte { var file_accessgraph_v1alpha_gitlab_proto_enumTypes = make([]protoimpl.EnumInfo, 1) var file_accessgraph_v1alpha_gitlab_proto_msgTypes = make([]protoimpl.MessageInfo, 9) -var file_accessgraph_v1alpha_gitlab_proto_goTypes = []interface{}{ +var file_accessgraph_v1alpha_gitlab_proto_goTypes = []any{ (AccessLevelType)(0), // 0: accessgraph.v1alpha.AccessLevelType (*GitlabSyncOperation)(nil), // 1: accessgraph.v1alpha.GitlabSyncOperation (*GitlabResourceList)(nil), // 2: accessgraph.v1alpha.GitlabResourceList @@ -979,7 +979,7 @@ func file_accessgraph_v1alpha_gitlab_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_accessgraph_v1alpha_gitlab_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_gitlab_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*GitlabSyncOperation); i { case 0: return &v.state @@ -991,7 +991,7 @@ func file_accessgraph_v1alpha_gitlab_proto_init() { return nil } } - file_accessgraph_v1alpha_gitlab_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_gitlab_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*GitlabResourceList); i { case 0: return &v.state @@ -1003,7 +1003,7 @@ func file_accessgraph_v1alpha_gitlab_proto_init() { return nil } } - file_accessgraph_v1alpha_gitlab_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_gitlab_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*GitlabResource); i { case 0: return &v.state @@ -1015,7 +1015,7 @@ func file_accessgraph_v1alpha_gitlab_proto_init() { return nil } } - file_accessgraph_v1alpha_gitlab_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_gitlab_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*GitlabGroup); i { case 0: return &v.state @@ -1027,7 +1027,7 @@ func file_accessgraph_v1alpha_gitlab_proto_init() { return nil } } - file_accessgraph_v1alpha_gitlab_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_gitlab_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*GitlabProject); i { case 0: return &v.state @@ -1039,7 +1039,7 @@ func file_accessgraph_v1alpha_gitlab_proto_init() { return nil } } - file_accessgraph_v1alpha_gitlab_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_gitlab_proto_msgTypes[5].Exporter = func(v any, i int) any { switch v := v.(*GitlabProjectMember); i { case 0: return &v.state @@ -1051,7 +1051,7 @@ func file_accessgraph_v1alpha_gitlab_proto_init() { return nil } } - file_accessgraph_v1alpha_gitlab_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_gitlab_proto_msgTypes[6].Exporter = func(v any, i int) any { switch v := v.(*GitlabGroupMember); i { case 0: return &v.state @@ -1063,7 +1063,7 @@ func file_accessgraph_v1alpha_gitlab_proto_init() { return nil } } - file_accessgraph_v1alpha_gitlab_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_gitlab_proto_msgTypes[7].Exporter = func(v any, i int) any { switch v := v.(*GitlabUser); i { case 0: return &v.state @@ -1075,7 +1075,7 @@ func file_accessgraph_v1alpha_gitlab_proto_init() { return nil } } - file_accessgraph_v1alpha_gitlab_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_gitlab_proto_msgTypes[8].Exporter = func(v any, i int) any { switch v := v.(*GitlabUserIdentity); i { case 0: return &v.state @@ -1088,7 +1088,7 @@ func file_accessgraph_v1alpha_gitlab_proto_init() { } } } - file_accessgraph_v1alpha_gitlab_proto_msgTypes[2].OneofWrappers = []interface{}{ + file_accessgraph_v1alpha_gitlab_proto_msgTypes[2].OneofWrappers = []any{ (*GitlabResource_Group)(nil), (*GitlabResource_Project)(nil), (*GitlabResource_ProjectMember)(nil), diff --git a/gen/proto/go/accessgraph/v1alpha/graph.pb.go b/gen/proto/go/accessgraph/v1alpha/graph.pb.go index 0fde3aa8c7dc0..c11a8a7d53ab7 100644 --- a/gen/proto/go/accessgraph/v1alpha/graph.pb.go +++ b/gen/proto/go/accessgraph/v1alpha/graph.pb.go @@ -17,7 +17,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: accessgraph/v1alpha/graph.proto @@ -281,7 +281,7 @@ func file_accessgraph_v1alpha_graph_proto_rawDescGZIP() []byte { } var file_accessgraph_v1alpha_graph_proto_msgTypes = make([]protoimpl.MessageInfo, 5) -var file_accessgraph_v1alpha_graph_proto_goTypes = []interface{}{ +var file_accessgraph_v1alpha_graph_proto_goTypes = []any{ (*Node)(nil), // 0: accessgraph.v1alpha.Node (*Edge)(nil), // 1: accessgraph.v1alpha.Edge nil, // 2: accessgraph.v1alpha.Node.LabelsEntry @@ -305,7 +305,7 @@ func file_accessgraph_v1alpha_graph_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_accessgraph_v1alpha_graph_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_graph_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*Node); i { case 0: return &v.state @@ -317,7 +317,7 @@ func file_accessgraph_v1alpha_graph_proto_init() { return nil } } - file_accessgraph_v1alpha_graph_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_graph_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*Edge); i { case 0: return &v.state diff --git a/gen/proto/go/accessgraph/v1alpha/resources.pb.go b/gen/proto/go/accessgraph/v1alpha/resources.pb.go index d901be034b673..7e40c3355e66c 100644 --- a/gen/proto/go/accessgraph/v1alpha/resources.pb.go +++ b/gen/proto/go/accessgraph/v1alpha/resources.pb.go @@ -17,7 +17,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: accessgraph/v1alpha/resources.proto @@ -662,7 +662,7 @@ func file_accessgraph_v1alpha_resources_proto_rawDescGZIP() []byte { } var file_accessgraph_v1alpha_resources_proto_msgTypes = make([]protoimpl.MessageInfo, 6) -var file_accessgraph_v1alpha_resources_proto_goTypes = []interface{}{ +var file_accessgraph_v1alpha_resources_proto_goTypes = []any{ (*ResourceList)(nil), // 0: accessgraph.v1alpha.ResourceList (*ResourceHeaderList)(nil), // 1: accessgraph.v1alpha.ResourceHeaderList (*AccessListsMembers)(nil), // 2: accessgraph.v1alpha.AccessListsMembers @@ -716,7 +716,7 @@ func file_accessgraph_v1alpha_resources_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_accessgraph_v1alpha_resources_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_resources_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*ResourceList); i { case 0: return &v.state @@ -728,7 +728,7 @@ func file_accessgraph_v1alpha_resources_proto_init() { return nil } } - file_accessgraph_v1alpha_resources_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_resources_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*ResourceHeaderList); i { case 0: return &v.state @@ -740,7 +740,7 @@ func file_accessgraph_v1alpha_resources_proto_init() { return nil } } - file_accessgraph_v1alpha_resources_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_resources_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*AccessListsMembers); i { case 0: return &v.state @@ -752,7 +752,7 @@ func file_accessgraph_v1alpha_resources_proto_init() { return nil } } - file_accessgraph_v1alpha_resources_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_resources_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*ExcludeAccessListsMembers); i { case 0: return &v.state @@ -764,7 +764,7 @@ func file_accessgraph_v1alpha_resources_proto_init() { return nil } } - file_accessgraph_v1alpha_resources_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_resources_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*ExcludeAccessListMember); i { case 0: return &v.state @@ -776,7 +776,7 @@ func file_accessgraph_v1alpha_resources_proto_init() { return nil } } - file_accessgraph_v1alpha_resources_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_resources_proto_msgTypes[5].Exporter = func(v any, i int) any { switch v := v.(*ResourceEntry); i { case 0: return &v.state @@ -789,7 +789,7 @@ func file_accessgraph_v1alpha_resources_proto_init() { } } } - file_accessgraph_v1alpha_resources_proto_msgTypes[5].OneofWrappers = []interface{}{ + file_accessgraph_v1alpha_resources_proto_msgTypes[5].OneofWrappers = []any{ (*ResourceEntry_User)(nil), (*ResourceEntry_Role)(nil), (*ResourceEntry_Server)(nil), diff --git a/gen/proto/go/prehog/v1/teleport.pb.go b/gen/proto/go/prehog/v1/teleport.pb.go index 73593cc5d7524..fcffc5164f7ca 100644 --- a/gen/proto/go/prehog/v1/teleport.pb.go +++ b/gen/proto/go/prehog/v1/teleport.pb.go @@ -17,7 +17,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: prehog/v1/teleport.proto @@ -900,7 +900,7 @@ func file_prehog_v1_teleport_proto_rawDescGZIP() []byte { var file_prehog_v1_teleport_proto_enumTypes = make([]protoimpl.EnumInfo, 2) var file_prehog_v1_teleport_proto_msgTypes = make([]protoimpl.MessageInfo, 6) -var file_prehog_v1_teleport_proto_goTypes = []interface{}{ +var file_prehog_v1_teleport_proto_goTypes = []any{ (UserKind)(0), // 0: prehog.v1.UserKind (ResourceKind)(0), // 1: prehog.v1.ResourceKind (*UserActivityReport)(nil), // 2: prehog.v1.UserActivityReport @@ -935,7 +935,7 @@ func file_prehog_v1_teleport_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_prehog_v1_teleport_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1_teleport_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*UserActivityReport); i { case 0: return &v.state @@ -947,7 +947,7 @@ func file_prehog_v1_teleport_proto_init() { return nil } } - file_prehog_v1_teleport_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1_teleport_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*UserActivityRecord); i { case 0: return &v.state @@ -959,7 +959,7 @@ func file_prehog_v1_teleport_proto_init() { return nil } } - file_prehog_v1_teleport_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1_teleport_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*ResourcePresenceReport); i { case 0: return &v.state @@ -971,7 +971,7 @@ func file_prehog_v1_teleport_proto_init() { return nil } } - file_prehog_v1_teleport_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1_teleport_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*ResourceKindPresenceReport); i { case 0: return &v.state @@ -983,7 +983,7 @@ func file_prehog_v1_teleport_proto_init() { return nil } } - file_prehog_v1_teleport_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1_teleport_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*SubmitUsageReportsRequest); i { case 0: return &v.state @@ -995,7 +995,7 @@ func file_prehog_v1_teleport_proto_init() { return nil } } - file_prehog_v1_teleport_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1_teleport_proto_msgTypes[5].Exporter = func(v any, i int) any { switch v := v.(*SubmitUsageReportsResponse); i { case 0: return &v.state diff --git a/gen/proto/go/prehog/v1alpha/connect.pb.go b/gen/proto/go/prehog/v1alpha/connect.pb.go index dcf199afee272..85962283dda70 100644 --- a/gen/proto/go/prehog/v1alpha/connect.pb.go +++ b/gen/proto/go/prehog/v1alpha/connect.pb.go @@ -17,7 +17,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: prehog/v1alpha/connect.proto @@ -1053,7 +1053,7 @@ func file_prehog_v1alpha_connect_proto_rawDescGZIP() []byte { } var file_prehog_v1alpha_connect_proto_msgTypes = make([]protoimpl.MessageInfo, 11) -var file_prehog_v1alpha_connect_proto_goTypes = []interface{}{ +var file_prehog_v1alpha_connect_proto_goTypes = []any{ (*ConnectClusterLoginEvent)(nil), // 0: prehog.v1alpha.ConnectClusterLoginEvent (*ConnectProtocolUseEvent)(nil), // 1: prehog.v1alpha.ConnectProtocolUseEvent (*ConnectAccessRequestCreateEvent)(nil), // 2: prehog.v1alpha.ConnectAccessRequestCreateEvent @@ -1093,7 +1093,7 @@ func file_prehog_v1alpha_connect_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_prehog_v1alpha_connect_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_connect_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*ConnectClusterLoginEvent); i { case 0: return &v.state @@ -1105,7 +1105,7 @@ func file_prehog_v1alpha_connect_proto_init() { return nil } } - file_prehog_v1alpha_connect_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_connect_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*ConnectProtocolUseEvent); i { case 0: return &v.state @@ -1117,7 +1117,7 @@ func file_prehog_v1alpha_connect_proto_init() { return nil } } - file_prehog_v1alpha_connect_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_connect_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*ConnectAccessRequestCreateEvent); i { case 0: return &v.state @@ -1129,7 +1129,7 @@ func file_prehog_v1alpha_connect_proto_init() { return nil } } - file_prehog_v1alpha_connect_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_connect_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*ConnectAccessRequestReviewEvent); i { case 0: return &v.state @@ -1141,7 +1141,7 @@ func file_prehog_v1alpha_connect_proto_init() { return nil } } - file_prehog_v1alpha_connect_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_connect_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*ConnectAccessRequestAssumeRoleEvent); i { case 0: return &v.state @@ -1153,7 +1153,7 @@ func file_prehog_v1alpha_connect_proto_init() { return nil } } - file_prehog_v1alpha_connect_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_connect_proto_msgTypes[5].Exporter = func(v any, i int) any { switch v := v.(*ConnectFileTransferRunEvent); i { case 0: return &v.state @@ -1165,7 +1165,7 @@ func file_prehog_v1alpha_connect_proto_init() { return nil } } - file_prehog_v1alpha_connect_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_connect_proto_msgTypes[6].Exporter = func(v any, i int) any { switch v := v.(*ConnectUserJobRoleUpdateEvent); i { case 0: return &v.state @@ -1177,7 +1177,7 @@ func file_prehog_v1alpha_connect_proto_init() { return nil } } - file_prehog_v1alpha_connect_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_connect_proto_msgTypes[7].Exporter = func(v any, i int) any { switch v := v.(*ConnectConnectMyComputerSetup); i { case 0: return &v.state @@ -1189,7 +1189,7 @@ func file_prehog_v1alpha_connect_proto_init() { return nil } } - file_prehog_v1alpha_connect_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_connect_proto_msgTypes[8].Exporter = func(v any, i int) any { switch v := v.(*ConnectConnectMyComputerAgentStart); i { case 0: return &v.state @@ -1201,7 +1201,7 @@ func file_prehog_v1alpha_connect_proto_init() { return nil } } - file_prehog_v1alpha_connect_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_connect_proto_msgTypes[9].Exporter = func(v any, i int) any { switch v := v.(*SubmitConnectEventRequest); i { case 0: return &v.state @@ -1213,7 +1213,7 @@ func file_prehog_v1alpha_connect_proto_init() { return nil } } - file_prehog_v1alpha_connect_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_connect_proto_msgTypes[10].Exporter = func(v any, i int) any { switch v := v.(*SubmitConnectEventResponse); i { case 0: return &v.state @@ -1226,7 +1226,7 @@ func file_prehog_v1alpha_connect_proto_init() { } } } - file_prehog_v1alpha_connect_proto_msgTypes[9].OneofWrappers = []interface{}{ + file_prehog_v1alpha_connect_proto_msgTypes[9].OneofWrappers = []any{ (*SubmitConnectEventRequest_ClusterLogin)(nil), (*SubmitConnectEventRequest_ProtocolUse)(nil), (*SubmitConnectEventRequest_AccessRequestCreate)(nil), diff --git a/gen/proto/go/prehog/v1alpha/tbot.pb.go b/gen/proto/go/prehog/v1alpha/tbot.pb.go index fd599680a8300..596c0bf24812d 100644 --- a/gen/proto/go/prehog/v1alpha/tbot.pb.go +++ b/gen/proto/go/prehog/v1alpha/tbot.pb.go @@ -17,7 +17,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: prehog/v1alpha/tbot.proto @@ -417,7 +417,7 @@ func file_prehog_v1alpha_tbot_proto_rawDescGZIP() []byte { var file_prehog_v1alpha_tbot_proto_enumTypes = make([]protoimpl.EnumInfo, 1) var file_prehog_v1alpha_tbot_proto_msgTypes = make([]protoimpl.MessageInfo, 3) -var file_prehog_v1alpha_tbot_proto_goTypes = []interface{}{ +var file_prehog_v1alpha_tbot_proto_goTypes = []any{ (TbotStartEvent_RunMode)(0), // 0: prehog.v1alpha.TbotStartEvent.RunMode (*TbotStartEvent)(nil), // 1: prehog.v1alpha.TbotStartEvent (*SubmitTbotEventRequest)(nil), // 2: prehog.v1alpha.SubmitTbotEventRequest @@ -443,7 +443,7 @@ func file_prehog_v1alpha_tbot_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_prehog_v1alpha_tbot_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_tbot_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*TbotStartEvent); i { case 0: return &v.state @@ -455,7 +455,7 @@ func file_prehog_v1alpha_tbot_proto_init() { return nil } } - file_prehog_v1alpha_tbot_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_tbot_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*SubmitTbotEventRequest); i { case 0: return &v.state @@ -467,7 +467,7 @@ func file_prehog_v1alpha_tbot_proto_init() { return nil } } - file_prehog_v1alpha_tbot_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_tbot_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*SubmitTbotEventResponse); i { case 0: return &v.state @@ -480,7 +480,7 @@ func file_prehog_v1alpha_tbot_proto_init() { } } } - file_prehog_v1alpha_tbot_proto_msgTypes[1].OneofWrappers = []interface{}{ + file_prehog_v1alpha_tbot_proto_msgTypes[1].OneofWrappers = []any{ (*SubmitTbotEventRequest_Start)(nil), } type x struct{} diff --git a/gen/proto/go/prehog/v1alpha/teleport.pb.go b/gen/proto/go/prehog/v1alpha/teleport.pb.go index 10749fa250c67..13960c33e3dd9 100644 --- a/gen/proto/go/prehog/v1alpha/teleport.pb.go +++ b/gen/proto/go/prehog/v1alpha/teleport.pb.go @@ -17,7 +17,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: prehog/v1alpha/teleport.proto @@ -11010,7 +11010,7 @@ func file_prehog_v1alpha_teleport_proto_rawDescGZIP() []byte { var file_prehog_v1alpha_teleport_proto_enumTypes = make([]protoimpl.EnumInfo, 13) var file_prehog_v1alpha_teleport_proto_msgTypes = make([]protoimpl.MessageInfo, 102) -var file_prehog_v1alpha_teleport_proto_goTypes = []interface{}{ +var file_prehog_v1alpha_teleport_proto_goTypes = []any{ (ResourceKind)(0), // 0: prehog.v1alpha.ResourceKind (UserKind)(0), // 1: prehog.v1alpha.UserKind (DiscoverResource)(0), // 2: prehog.v1alpha.DiscoverResource @@ -11331,7 +11331,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_prehog_v1alpha_teleport_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*UserLoginEvent); i { case 0: return &v.state @@ -11343,7 +11343,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*MFAAuthenticationEvent); i { case 0: return &v.state @@ -11355,7 +11355,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*SSOCreateEvent); i { case 0: return &v.state @@ -11367,7 +11367,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*ResourceCreateEvent); i { case 0: return &v.state @@ -11379,7 +11379,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*DiscoveredDatabaseMetadata); i { case 0: return &v.state @@ -11391,7 +11391,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[5].Exporter = func(v any, i int) any { switch v := v.(*ResourceHeartbeatEvent); i { case 0: return &v.state @@ -11403,7 +11403,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[6].Exporter = func(v any, i int) any { switch v := v.(*SessionStartEvent); i { case 0: return &v.state @@ -11415,7 +11415,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[7].Exporter = func(v any, i int) any { switch v := v.(*SessionStartDatabaseMetadata); i { case 0: return &v.state @@ -11427,7 +11427,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[8].Exporter = func(v any, i int) any { switch v := v.(*SessionStartDesktopMetadata); i { case 0: return &v.state @@ -11439,7 +11439,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[9].Exporter = func(v any, i int) any { switch v := v.(*UserCertificateIssuedEvent); i { case 0: return &v.state @@ -11451,7 +11451,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[10].Exporter = func(v any, i int) any { switch v := v.(*SPIFFESVIDIssuedEvent); i { case 0: return &v.state @@ -11463,7 +11463,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[11].Exporter = func(v any, i int) any { switch v := v.(*UIBannerClickEvent); i { case 0: return &v.state @@ -11475,7 +11475,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[12].Exporter = func(v any, i int) any { switch v := v.(*UIOnboardCompleteGoToDashboardClickEvent); i { case 0: return &v.state @@ -11487,7 +11487,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[13].Exporter = func(v any, i int) any { switch v := v.(*UIOnboardAddFirstResourceClickEvent); i { case 0: return &v.state @@ -11499,7 +11499,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[14].Exporter = func(v any, i int) any { switch v := v.(*UIOnboardAddFirstResourceLaterClickEvent); i { case 0: return &v.state @@ -11511,7 +11511,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[15].Exporter = func(v any, i int) any { switch v := v.(*UIOnboardSetCredentialSubmitEvent); i { case 0: return &v.state @@ -11523,7 +11523,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[16].Exporter = func(v any, i int) any { switch v := v.(*UIOnboardRegisterChallengeSubmitEvent); i { case 0: return &v.state @@ -11535,7 +11535,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[17].Exporter = func(v any, i int) any { switch v := v.(*UIOnboardQuestionnaireSubmitEvent); i { case 0: return &v.state @@ -11547,7 +11547,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[18].Exporter = func(v any, i int) any { switch v := v.(*UIRecoveryCodesContinueClickEvent); i { case 0: return &v.state @@ -11559,7 +11559,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[19].Exporter = func(v any, i int) any { switch v := v.(*UIRecoveryCodesCopyClickEvent); i { case 0: return &v.state @@ -11571,7 +11571,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[20].Exporter = func(v any, i int) any { switch v := v.(*UIRecoveryCodesPrintClickEvent); i { case 0: return &v.state @@ -11583,7 +11583,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[21].Exporter = func(v any, i int) any { switch v := v.(*DiscoverMetadata); i { case 0: return &v.state @@ -11595,7 +11595,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[22].Exporter = func(v any, i int) any { switch v := v.(*DiscoverResourceMetadata); i { case 0: return &v.state @@ -11607,7 +11607,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[23].Exporter = func(v any, i int) any { switch v := v.(*DiscoverStepStatus); i { case 0: return &v.state @@ -11619,7 +11619,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[24].Exporter = func(v any, i int) any { switch v := v.(*UIDiscoverStartedEvent); i { case 0: return &v.state @@ -11631,7 +11631,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[25].Exporter = func(v any, i int) any { switch v := v.(*UIDiscoverResourceSelectionEvent); i { case 0: return &v.state @@ -11643,7 +11643,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[26].Exporter = func(v any, i int) any { switch v := v.(*UIDiscoverIntegrationAWSOIDCConnectEvent); i { case 0: return &v.state @@ -11655,7 +11655,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[27].Exporter = func(v any, i int) any { switch v := v.(*UIDiscoverDatabaseRDSEnrollEvent); i { case 0: return &v.state @@ -11667,7 +11667,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[28].Exporter = func(v any, i int) any { switch v := v.(*UIDiscoverKubeEKSEnrollEvent); i { case 0: return &v.state @@ -11679,7 +11679,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[29].Exporter = func(v any, i int) any { switch v := v.(*UIDiscoverDeployServiceEvent); i { case 0: return &v.state @@ -11691,7 +11691,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[30].Exporter = func(v any, i int) any { switch v := v.(*UIDiscoverCreateDiscoveryConfigEvent); i { case 0: return &v.state @@ -11703,7 +11703,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[31].Exporter = func(v any, i int) any { switch v := v.(*UIDiscoverDatabaseRegisterEvent); i { case 0: return &v.state @@ -11715,7 +11715,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[32].Exporter = func(v any, i int) any { switch v := v.(*UIDiscoverDatabaseConfigureMTLSEvent); i { case 0: return &v.state @@ -11727,7 +11727,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[33].Exporter = func(v any, i int) any { switch v := v.(*UIDiscoverDesktopActiveDirectoryToolsInstallEvent); i { case 0: return &v.state @@ -11739,7 +11739,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[34].Exporter = func(v any, i int) any { switch v := v.(*UIDiscoverDesktopActiveDirectoryConfigureEvent); i { case 0: return &v.state @@ -11751,7 +11751,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[35].Exporter = func(v any, i int) any { switch v := v.(*UIDiscoverAutoDiscoveredResourcesEvent); i { case 0: return &v.state @@ -11763,7 +11763,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[36].Exporter = func(v any, i int) any { switch v := v.(*UIDiscoverEC2InstanceSelectionEvent); i { case 0: return &v.state @@ -11775,7 +11775,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[37].Exporter = func(v any, i int) any { switch v := v.(*UIDiscoverDeployEICEEvent); i { case 0: return &v.state @@ -11787,7 +11787,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[38].Exporter = func(v any, i int) any { switch v := v.(*UIDiscoverCreateNodeEvent); i { case 0: return &v.state @@ -11799,7 +11799,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[39].Exporter = func(v any, i int) any { switch v := v.(*UIDiscoverCreateAppServerEvent); i { case 0: return &v.state @@ -11811,7 +11811,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[40].Exporter = func(v any, i int) any { switch v := v.(*UIDiscoverDatabaseConfigureIAMPolicyEvent); i { case 0: return &v.state @@ -11823,7 +11823,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[41].Exporter = func(v any, i int) any { switch v := v.(*UIDiscoverPrincipalsConfigureEvent); i { case 0: return &v.state @@ -11835,7 +11835,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[42].Exporter = func(v any, i int) any { switch v := v.(*UIDiscoverTestConnectionEvent); i { case 0: return &v.state @@ -11847,7 +11847,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[43].Exporter = func(v any, i int) any { switch v := v.(*UIDiscoverCompletedEvent); i { case 0: return &v.state @@ -11859,7 +11859,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[44].Exporter = func(v any, i int) any { switch v := v.(*RoleCreateEvent); i { case 0: return &v.state @@ -11871,7 +11871,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[45].Exporter = func(v any, i int) any { switch v := v.(*BotCreateEvent); i { case 0: return &v.state @@ -11883,7 +11883,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[46].Exporter = func(v any, i int) any { switch v := v.(*BotJoinEvent); i { case 0: return &v.state @@ -11895,7 +11895,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[47].Exporter = func(v any, i int) any { switch v := v.(*UICreateNewRoleClickEvent); i { case 0: return &v.state @@ -11907,7 +11907,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[48].Exporter = func(v any, i int) any { switch v := v.(*UICreateNewRoleSaveClickEvent); i { case 0: return &v.state @@ -11919,7 +11919,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[49].Exporter = func(v any, i int) any { switch v := v.(*UICreateNewRoleCancelClickEvent); i { case 0: return &v.state @@ -11931,7 +11931,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[50].Exporter = func(v any, i int) any { switch v := v.(*UICreateNewRoleViewDocumentationClickEvent); i { case 0: return &v.state @@ -11943,7 +11943,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[51].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[51].Exporter = func(v any, i int) any { switch v := v.(*UICallToActionClickEvent); i { case 0: return &v.state @@ -11955,7 +11955,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[52].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[52].Exporter = func(v any, i int) any { switch v := v.(*KubeRequestEvent); i { case 0: return &v.state @@ -11967,7 +11967,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[53].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[53].Exporter = func(v any, i int) any { switch v := v.(*SFTPEvent); i { case 0: return &v.state @@ -11979,7 +11979,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[54].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[54].Exporter = func(v any, i int) any { switch v := v.(*AgentMetadataEvent); i { case 0: return &v.state @@ -11991,7 +11991,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[55].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[55].Exporter = func(v any, i int) any { switch v := v.(*AssistCompletionEvent); i { case 0: return &v.state @@ -12003,7 +12003,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[56].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[56].Exporter = func(v any, i int) any { switch v := v.(*AssistExecutionEvent); i { case 0: return &v.state @@ -12015,7 +12015,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[57].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[57].Exporter = func(v any, i int) any { switch v := v.(*AssistNewConversationEvent); i { case 0: return &v.state @@ -12027,7 +12027,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[58].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[58].Exporter = func(v any, i int) any { switch v := v.(*AssistAccessRequestEvent); i { case 0: return &v.state @@ -12039,7 +12039,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[59].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[59].Exporter = func(v any, i int) any { switch v := v.(*AssistActionEvent); i { case 0: return &v.state @@ -12051,7 +12051,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[60].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[60].Exporter = func(v any, i int) any { switch v := v.(*AccessListMetadata); i { case 0: return &v.state @@ -12063,7 +12063,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[61].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[61].Exporter = func(v any, i int) any { switch v := v.(*AccessListCreateEvent); i { case 0: return &v.state @@ -12075,7 +12075,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[62].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[62].Exporter = func(v any, i int) any { switch v := v.(*AccessListUpdateEvent); i { case 0: return &v.state @@ -12087,7 +12087,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[63].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[63].Exporter = func(v any, i int) any { switch v := v.(*AccessListDeleteEvent); i { case 0: return &v.state @@ -12099,7 +12099,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[64].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[64].Exporter = func(v any, i int) any { switch v := v.(*AccessListMemberCreateEvent); i { case 0: return &v.state @@ -12111,7 +12111,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[65].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[65].Exporter = func(v any, i int) any { switch v := v.(*AccessListMemberUpdateEvent); i { case 0: return &v.state @@ -12123,7 +12123,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[66].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[66].Exporter = func(v any, i int) any { switch v := v.(*AccessListMemberDeleteEvent); i { case 0: return &v.state @@ -12135,7 +12135,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[67].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[67].Exporter = func(v any, i int) any { switch v := v.(*AccessListGrantsToUserEvent); i { case 0: return &v.state @@ -12147,7 +12147,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[68].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[68].Exporter = func(v any, i int) any { switch v := v.(*AccessListReviewCreateEvent); i { case 0: return &v.state @@ -12159,7 +12159,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[69].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[69].Exporter = func(v any, i int) any { switch v := v.(*AccessListReviewDeleteEvent); i { case 0: return &v.state @@ -12171,7 +12171,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[70].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[70].Exporter = func(v any, i int) any { switch v := v.(*AccessListReviewComplianceEvent); i { case 0: return &v.state @@ -12183,7 +12183,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[71].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[71].Exporter = func(v any, i int) any { switch v := v.(*IntegrationEnrollMetadata); i { case 0: return &v.state @@ -12195,7 +12195,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[72].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[72].Exporter = func(v any, i int) any { switch v := v.(*UIIntegrationEnrollStartEvent); i { case 0: return &v.state @@ -12207,7 +12207,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[73].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[73].Exporter = func(v any, i int) any { switch v := v.(*UIIntegrationEnrollCompleteEvent); i { case 0: return &v.state @@ -12219,7 +12219,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[74].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[74].Exporter = func(v any, i int) any { switch v := v.(*EditorChangeEvent); i { case 0: return &v.state @@ -12231,7 +12231,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[75].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[75].Exporter = func(v any, i int) any { switch v := v.(*DeviceAuthenticateEvent); i { case 0: return &v.state @@ -12243,7 +12243,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[76].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[76].Exporter = func(v any, i int) any { switch v := v.(*DeviceEnrollEvent); i { case 0: return &v.state @@ -12255,7 +12255,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[77].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[77].Exporter = func(v any, i int) any { switch v := v.(*FeatureRecommendationEvent); i { case 0: return &v.state @@ -12267,7 +12267,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[78].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[78].Exporter = func(v any, i int) any { switch v := v.(*LicenseLimitEvent); i { case 0: return &v.state @@ -12279,7 +12279,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[79].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[79].Exporter = func(v any, i int) any { switch v := v.(*DesktopDirectoryShareEvent); i { case 0: return &v.state @@ -12291,7 +12291,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[80].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[80].Exporter = func(v any, i int) any { switch v := v.(*DesktopClipboardEvent); i { case 0: return &v.state @@ -12303,7 +12303,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[81].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[81].Exporter = func(v any, i int) any { switch v := v.(*TAGExecuteQueryEvent); i { case 0: return &v.state @@ -12315,7 +12315,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[82].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[82].Exporter = func(v any, i int) any { switch v := v.(*AccessGraphSecretsScanAuthorizedKeysEvent); i { case 0: return &v.state @@ -12327,7 +12327,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[83].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[83].Exporter = func(v any, i int) any { switch v := v.(*AccessGraphSecretsScanSSHPrivateKeysEvent); i { case 0: return &v.state @@ -12339,7 +12339,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[84].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[84].Exporter = func(v any, i int) any { switch v := v.(*AccessGraphGitlabScanEvent); i { case 0: return &v.state @@ -12351,7 +12351,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[85].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[85].Exporter = func(v any, i int) any { switch v := v.(*AccessGraphAWSScanEvent); i { case 0: return &v.state @@ -12363,7 +12363,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[86].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[86].Exporter = func(v any, i int) any { switch v := v.(*AccessGraphAccessPathChangedEvent); i { case 0: return &v.state @@ -12375,7 +12375,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[87].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[87].Exporter = func(v any, i int) any { switch v := v.(*UIAccessGraphCrownJewelDiffViewEvent); i { case 0: return &v.state @@ -12387,7 +12387,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[88].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[88].Exporter = func(v any, i int) any { switch v := v.(*AccessGraphCrownJewelCreateEvent); i { case 0: return &v.state @@ -12399,7 +12399,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[89].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[89].Exporter = func(v any, i int) any { switch v := v.(*ExternalAuditStorageAuthenticateEvent); i { case 0: return &v.state @@ -12411,7 +12411,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[90].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[90].Exporter = func(v any, i int) any { switch v := v.(*SecurityReportGetResultEvent); i { case 0: return &v.state @@ -12423,7 +12423,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[91].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[91].Exporter = func(v any, i int) any { switch v := v.(*AuditQueryRunEvent); i { case 0: return &v.state @@ -12435,7 +12435,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[92].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[92].Exporter = func(v any, i int) any { switch v := v.(*DiscoveryFetchEvent); i { case 0: return &v.state @@ -12447,7 +12447,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[93].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[93].Exporter = func(v any, i int) any { switch v := v.(*OktaAccessListSyncEvent); i { case 0: return &v.state @@ -12459,7 +12459,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[94].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[94].Exporter = func(v any, i int) any { switch v := v.(*DatabaseUserCreatedEvent); i { case 0: return &v.state @@ -12471,7 +12471,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[95].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[95].Exporter = func(v any, i int) any { switch v := v.(*DatabaseUserPermissionsUpdateEvent); i { case 0: return &v.state @@ -12483,7 +12483,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[96].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[96].Exporter = func(v any, i int) any { switch v := v.(*SubmitEventRequest); i { case 0: return &v.state @@ -12495,7 +12495,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[97].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[97].Exporter = func(v any, i int) any { switch v := v.(*SubmitEventResponse); i { case 0: return &v.state @@ -12507,7 +12507,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[98].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[98].Exporter = func(v any, i int) any { switch v := v.(*SubmitEventsRequest); i { case 0: return &v.state @@ -12519,7 +12519,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[99].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[99].Exporter = func(v any, i int) any { switch v := v.(*SubmitEventsResponse); i { case 0: return &v.state @@ -12531,7 +12531,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[100].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[100].Exporter = func(v any, i int) any { switch v := v.(*HelloTeleportRequest); i { case 0: return &v.state @@ -12543,7 +12543,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[101].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[101].Exporter = func(v any, i int) any { switch v := v.(*HelloTeleportResponse); i { case 0: return &v.state @@ -12556,7 +12556,7 @@ func file_prehog_v1alpha_teleport_proto_init() { } } } - file_prehog_v1alpha_teleport_proto_msgTypes[96].OneofWrappers = []interface{}{ + file_prehog_v1alpha_teleport_proto_msgTypes[96].OneofWrappers = []any{ (*SubmitEventRequest_UserLogin)(nil), (*SubmitEventRequest_SsoCreate)(nil), (*SubmitEventRequest_ResourceCreate)(nil), diff --git a/gen/proto/go/teleport/lib/teleterm/v1/access_request.pb.go b/gen/proto/go/teleport/lib/teleterm/v1/access_request.pb.go index af6b8f52a7662..32285bc7daae1 100644 --- a/gen/proto/go/teleport/lib/teleterm/v1/access_request.pb.go +++ b/gen/proto/go/teleport/lib/teleterm/v1/access_request.pb.go @@ -17,7 +17,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/lib/teleterm/v1/access_request.proto @@ -647,7 +647,7 @@ func file_teleport_lib_teleterm_v1_access_request_proto_rawDescGZIP() []byte { } var file_teleport_lib_teleterm_v1_access_request_proto_msgTypes = make([]protoimpl.MessageInfo, 5) -var file_teleport_lib_teleterm_v1_access_request_proto_goTypes = []interface{}{ +var file_teleport_lib_teleterm_v1_access_request_proto_goTypes = []any{ (*AccessRequest)(nil), // 0: teleport.lib.teleterm.v1.AccessRequest (*AccessRequestReview)(nil), // 1: teleport.lib.teleterm.v1.AccessRequestReview (*ResourceID)(nil), // 2: teleport.lib.teleterm.v1.ResourceID @@ -682,7 +682,7 @@ func file_teleport_lib_teleterm_v1_access_request_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_lib_teleterm_v1_access_request_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_access_request_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*AccessRequest); i { case 0: return &v.state @@ -694,7 +694,7 @@ func file_teleport_lib_teleterm_v1_access_request_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_access_request_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_access_request_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*AccessRequestReview); i { case 0: return &v.state @@ -706,7 +706,7 @@ func file_teleport_lib_teleterm_v1_access_request_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_access_request_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_access_request_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*ResourceID); i { case 0: return &v.state @@ -718,7 +718,7 @@ func file_teleport_lib_teleterm_v1_access_request_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_access_request_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_access_request_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*ResourceDetails); i { case 0: return &v.state @@ -730,7 +730,7 @@ func file_teleport_lib_teleterm_v1_access_request_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_access_request_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_access_request_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*Resource); i { case 0: return &v.state diff --git a/gen/proto/go/teleport/lib/teleterm/v1/app.pb.go b/gen/proto/go/teleport/lib/teleterm/v1/app.pb.go index 29b2ffdf2c439..6295781e49d53 100644 --- a/gen/proto/go/teleport/lib/teleterm/v1/app.pb.go +++ b/gen/proto/go/teleport/lib/teleterm/v1/app.pb.go @@ -17,7 +17,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/lib/teleterm/v1/app.proto @@ -329,7 +329,7 @@ func file_teleport_lib_teleterm_v1_app_proto_rawDescGZIP() []byte { } var file_teleport_lib_teleterm_v1_app_proto_msgTypes = make([]protoimpl.MessageInfo, 2) -var file_teleport_lib_teleterm_v1_app_proto_goTypes = []interface{}{ +var file_teleport_lib_teleterm_v1_app_proto_goTypes = []any{ (*App)(nil), // 0: teleport.lib.teleterm.v1.App (*AWSRole)(nil), // 1: teleport.lib.teleterm.v1.AWSRole (*Label)(nil), // 2: teleport.lib.teleterm.v1.Label @@ -351,7 +351,7 @@ func file_teleport_lib_teleterm_v1_app_proto_init() { } file_teleport_lib_teleterm_v1_label_proto_init() if !protoimpl.UnsafeEnabled { - file_teleport_lib_teleterm_v1_app_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_app_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*App); i { case 0: return &v.state @@ -363,7 +363,7 @@ func file_teleport_lib_teleterm_v1_app_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_app_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_app_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*AWSRole); i { case 0: return &v.state diff --git a/gen/proto/go/teleport/lib/teleterm/v1/auth_settings.pb.go b/gen/proto/go/teleport/lib/teleterm/v1/auth_settings.pb.go index da5ecb59f7573..cec1afc4ca243 100644 --- a/gen/proto/go/teleport/lib/teleterm/v1/auth_settings.pb.go +++ b/gen/proto/go/teleport/lib/teleterm/v1/auth_settings.pb.go @@ -17,7 +17,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/lib/teleterm/v1/auth_settings.proto @@ -278,7 +278,7 @@ func file_teleport_lib_teleterm_v1_auth_settings_proto_rawDescGZIP() []byte { } var file_teleport_lib_teleterm_v1_auth_settings_proto_msgTypes = make([]protoimpl.MessageInfo, 2) -var file_teleport_lib_teleterm_v1_auth_settings_proto_goTypes = []interface{}{ +var file_teleport_lib_teleterm_v1_auth_settings_proto_goTypes = []any{ (*AuthSettings)(nil), // 0: teleport.lib.teleterm.v1.AuthSettings (*AuthProvider)(nil), // 1: teleport.lib.teleterm.v1.AuthProvider } @@ -297,7 +297,7 @@ func file_teleport_lib_teleterm_v1_auth_settings_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_lib_teleterm_v1_auth_settings_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_auth_settings_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*AuthSettings); i { case 0: return &v.state @@ -309,7 +309,7 @@ func file_teleport_lib_teleterm_v1_auth_settings_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_auth_settings_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_auth_settings_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*AuthProvider); i { case 0: return &v.state diff --git a/gen/proto/go/teleport/lib/teleterm/v1/cluster.pb.go b/gen/proto/go/teleport/lib/teleterm/v1/cluster.pb.go index 9c5e6f97d5767..a5fc7afd6e95c 100644 --- a/gen/proto/go/teleport/lib/teleterm/v1/cluster.pb.go +++ b/gen/proto/go/teleport/lib/teleterm/v1/cluster.pb.go @@ -17,7 +17,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/lib/teleterm/v1/cluster.proto @@ -804,7 +804,7 @@ func file_teleport_lib_teleterm_v1_cluster_proto_rawDescGZIP() []byte { var file_teleport_lib_teleterm_v1_cluster_proto_enumTypes = make([]protoimpl.EnumInfo, 1) var file_teleport_lib_teleterm_v1_cluster_proto_msgTypes = make([]protoimpl.MessageInfo, 5) -var file_teleport_lib_teleterm_v1_cluster_proto_goTypes = []interface{}{ +var file_teleport_lib_teleterm_v1_cluster_proto_goTypes = []any{ (LoggedInUser_UserType)(0), // 0: teleport.lib.teleterm.v1.LoggedInUser.UserType (*Cluster)(nil), // 1: teleport.lib.teleterm.v1.Cluster (*LoggedInUser)(nil), // 2: teleport.lib.teleterm.v1.LoggedInUser @@ -843,7 +843,7 @@ func file_teleport_lib_teleterm_v1_cluster_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_lib_teleterm_v1_cluster_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_cluster_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*Cluster); i { case 0: return &v.state @@ -855,7 +855,7 @@ func file_teleport_lib_teleterm_v1_cluster_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_cluster_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_cluster_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*LoggedInUser); i { case 0: return &v.state @@ -867,7 +867,7 @@ func file_teleport_lib_teleterm_v1_cluster_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_cluster_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_cluster_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*ACL); i { case 0: return &v.state @@ -879,7 +879,7 @@ func file_teleport_lib_teleterm_v1_cluster_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_cluster_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_cluster_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*ResourceAccess); i { case 0: return &v.state @@ -891,7 +891,7 @@ func file_teleport_lib_teleterm_v1_cluster_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_cluster_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_cluster_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*Features); i { case 0: return &v.state diff --git a/gen/proto/go/teleport/lib/teleterm/v1/database.pb.go b/gen/proto/go/teleport/lib/teleterm/v1/database.pb.go index 00aeeded52c5d..89a319a34ee19 100644 --- a/gen/proto/go/teleport/lib/teleterm/v1/database.pb.go +++ b/gen/proto/go/teleport/lib/teleterm/v1/database.pb.go @@ -17,7 +17,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/lib/teleterm/v1/database.proto @@ -194,7 +194,7 @@ func file_teleport_lib_teleterm_v1_database_proto_rawDescGZIP() []byte { } var file_teleport_lib_teleterm_v1_database_proto_msgTypes = make([]protoimpl.MessageInfo, 1) -var file_teleport_lib_teleterm_v1_database_proto_goTypes = []interface{}{ +var file_teleport_lib_teleterm_v1_database_proto_goTypes = []any{ (*Database)(nil), // 0: teleport.lib.teleterm.v1.Database (*Label)(nil), // 1: teleport.lib.teleterm.v1.Label } @@ -214,7 +214,7 @@ func file_teleport_lib_teleterm_v1_database_proto_init() { } file_teleport_lib_teleterm_v1_label_proto_init() if !protoimpl.UnsafeEnabled { - file_teleport_lib_teleterm_v1_database_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_database_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*Database); i { case 0: return &v.state diff --git a/gen/proto/go/teleport/lib/teleterm/v1/gateway.pb.go b/gen/proto/go/teleport/lib/teleterm/v1/gateway.pb.go index 9b2399d5bc842..58326c1a9ba4f 100644 --- a/gen/proto/go/teleport/lib/teleterm/v1/gateway.pb.go +++ b/gen/proto/go/teleport/lib/teleterm/v1/gateway.pb.go @@ -17,7 +17,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/lib/teleterm/v1/gateway.proto @@ -321,7 +321,7 @@ func file_teleport_lib_teleterm_v1_gateway_proto_rawDescGZIP() []byte { } var file_teleport_lib_teleterm_v1_gateway_proto_msgTypes = make([]protoimpl.MessageInfo, 2) -var file_teleport_lib_teleterm_v1_gateway_proto_goTypes = []interface{}{ +var file_teleport_lib_teleterm_v1_gateway_proto_goTypes = []any{ (*Gateway)(nil), // 0: teleport.lib.teleterm.v1.Gateway (*GatewayCLICommand)(nil), // 1: teleport.lib.teleterm.v1.GatewayCLICommand } @@ -340,7 +340,7 @@ func file_teleport_lib_teleterm_v1_gateway_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_lib_teleterm_v1_gateway_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_gateway_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*Gateway); i { case 0: return &v.state @@ -352,7 +352,7 @@ func file_teleport_lib_teleterm_v1_gateway_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_gateway_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_gateway_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*GatewayCLICommand); i { case 0: return &v.state diff --git a/gen/proto/go/teleport/lib/teleterm/v1/kube.pb.go b/gen/proto/go/teleport/lib/teleterm/v1/kube.pb.go index f0af9114e8af6..29f6fdf5471b5 100644 --- a/gen/proto/go/teleport/lib/teleterm/v1/kube.pb.go +++ b/gen/proto/go/teleport/lib/teleterm/v1/kube.pb.go @@ -17,7 +17,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/lib/teleterm/v1/kube.proto @@ -141,7 +141,7 @@ func file_teleport_lib_teleterm_v1_kube_proto_rawDescGZIP() []byte { } var file_teleport_lib_teleterm_v1_kube_proto_msgTypes = make([]protoimpl.MessageInfo, 1) -var file_teleport_lib_teleterm_v1_kube_proto_goTypes = []interface{}{ +var file_teleport_lib_teleterm_v1_kube_proto_goTypes = []any{ (*Kube)(nil), // 0: teleport.lib.teleterm.v1.Kube (*Label)(nil), // 1: teleport.lib.teleterm.v1.Label } @@ -161,7 +161,7 @@ func file_teleport_lib_teleterm_v1_kube_proto_init() { } file_teleport_lib_teleterm_v1_label_proto_init() if !protoimpl.UnsafeEnabled { - file_teleport_lib_teleterm_v1_kube_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_kube_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*Kube); i { case 0: return &v.state diff --git a/gen/proto/go/teleport/lib/teleterm/v1/label.pb.go b/gen/proto/go/teleport/lib/teleterm/v1/label.pb.go index 5817c65b12ac5..57964f3e371b0 100644 --- a/gen/proto/go/teleport/lib/teleterm/v1/label.pb.go +++ b/gen/proto/go/teleport/lib/teleterm/v1/label.pb.go @@ -17,7 +17,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/lib/teleterm/v1/label.proto @@ -127,7 +127,7 @@ func file_teleport_lib_teleterm_v1_label_proto_rawDescGZIP() []byte { } var file_teleport_lib_teleterm_v1_label_proto_msgTypes = make([]protoimpl.MessageInfo, 1) -var file_teleport_lib_teleterm_v1_label_proto_goTypes = []interface{}{ +var file_teleport_lib_teleterm_v1_label_proto_goTypes = []any{ (*Label)(nil), // 0: teleport.lib.teleterm.v1.Label } var file_teleport_lib_teleterm_v1_label_proto_depIdxs = []int32{ @@ -144,7 +144,7 @@ func file_teleport_lib_teleterm_v1_label_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_lib_teleterm_v1_label_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_label_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*Label); i { case 0: return &v.state diff --git a/gen/proto/go/teleport/lib/teleterm/v1/server.pb.go b/gen/proto/go/teleport/lib/teleterm/v1/server.pb.go index 5fd9cbe28fb76..d9a1a5777bada 100644 --- a/gen/proto/go/teleport/lib/teleterm/v1/server.pb.go +++ b/gen/proto/go/teleport/lib/teleterm/v1/server.pb.go @@ -17,7 +17,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/lib/teleterm/v1/server.proto @@ -184,7 +184,7 @@ func file_teleport_lib_teleterm_v1_server_proto_rawDescGZIP() []byte { } var file_teleport_lib_teleterm_v1_server_proto_msgTypes = make([]protoimpl.MessageInfo, 1) -var file_teleport_lib_teleterm_v1_server_proto_goTypes = []interface{}{ +var file_teleport_lib_teleterm_v1_server_proto_goTypes = []any{ (*Server)(nil), // 0: teleport.lib.teleterm.v1.Server (*Label)(nil), // 1: teleport.lib.teleterm.v1.Label } @@ -204,7 +204,7 @@ func file_teleport_lib_teleterm_v1_server_proto_init() { } file_teleport_lib_teleterm_v1_label_proto_init() if !protoimpl.UnsafeEnabled { - file_teleport_lib_teleterm_v1_server_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_server_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*Server); i { case 0: return &v.state diff --git a/gen/proto/go/teleport/lib/teleterm/v1/service.pb.go b/gen/proto/go/teleport/lib/teleterm/v1/service.pb.go index 051d98bda06cd..48b4d5eaeb0af 100644 --- a/gen/proto/go/teleport/lib/teleterm/v1/service.pb.go +++ b/gen/proto/go/teleport/lib/teleterm/v1/service.pb.go @@ -17,7 +17,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/lib/teleterm/v1/service.proto @@ -5505,7 +5505,7 @@ func file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP() []byte { var file_teleport_lib_teleterm_v1_service_proto_enumTypes = make([]protoimpl.EnumInfo, 3) var file_teleport_lib_teleterm_v1_service_proto_msgTypes = make([]protoimpl.MessageInfo, 75) -var file_teleport_lib_teleterm_v1_service_proto_goTypes = []interface{}{ +var file_teleport_lib_teleterm_v1_service_proto_goTypes = []any{ (PasswordlessPrompt)(0), // 0: teleport.lib.teleterm.v1.PasswordlessPrompt (FileTransferDirection)(0), // 1: teleport.lib.teleterm.v1.FileTransferDirection (HeadlessAuthenticationState)(0), // 2: teleport.lib.teleterm.v1.HeadlessAuthenticationState @@ -5741,7 +5741,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { file_teleport_lib_teleterm_v1_server_proto_init() file_teleport_lib_teleterm_v1_usage_events_proto_init() if !protoimpl.UnsafeEnabled { - file_teleport_lib_teleterm_v1_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*EmptyResponse); i { case 0: return &v.state @@ -5753,7 +5753,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*RemoveClusterRequest); i { case 0: return &v.state @@ -5765,7 +5765,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*GetClusterRequest); i { case 0: return &v.state @@ -5777,7 +5777,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*LogoutRequest); i { case 0: return &v.state @@ -5789,7 +5789,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*GetAccessRequestRequest); i { case 0: return &v.state @@ -5801,7 +5801,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[5].Exporter = func(v any, i int) any { switch v := v.(*GetAccessRequestsRequest); i { case 0: return &v.state @@ -5813,7 +5813,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[6].Exporter = func(v any, i int) any { switch v := v.(*GetAccessRequestResponse); i { case 0: return &v.state @@ -5825,7 +5825,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[7].Exporter = func(v any, i int) any { switch v := v.(*GetAccessRequestsResponse); i { case 0: return &v.state @@ -5837,7 +5837,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[8].Exporter = func(v any, i int) any { switch v := v.(*DeleteAccessRequestRequest); i { case 0: return &v.state @@ -5849,7 +5849,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[9].Exporter = func(v any, i int) any { switch v := v.(*CreateAccessRequestRequest); i { case 0: return &v.state @@ -5861,7 +5861,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[10].Exporter = func(v any, i int) any { switch v := v.(*CreateAccessRequestResponse); i { case 0: return &v.state @@ -5873,7 +5873,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[11].Exporter = func(v any, i int) any { switch v := v.(*AssumeRoleRequest); i { case 0: return &v.state @@ -5885,7 +5885,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[12].Exporter = func(v any, i int) any { switch v := v.(*GetRequestableRolesRequest); i { case 0: return &v.state @@ -5897,7 +5897,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[13].Exporter = func(v any, i int) any { switch v := v.(*GetRequestableRolesResponse); i { case 0: return &v.state @@ -5909,7 +5909,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[14].Exporter = func(v any, i int) any { switch v := v.(*ReviewAccessRequestRequest); i { case 0: return &v.state @@ -5921,7 +5921,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[15].Exporter = func(v any, i int) any { switch v := v.(*ReviewAccessRequestResponse); i { case 0: return &v.state @@ -5933,7 +5933,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[16].Exporter = func(v any, i int) any { switch v := v.(*PromoteAccessRequestRequest); i { case 0: return &v.state @@ -5945,7 +5945,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[17].Exporter = func(v any, i int) any { switch v := v.(*PromoteAccessRequestResponse); i { case 0: return &v.state @@ -5957,7 +5957,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[18].Exporter = func(v any, i int) any { switch v := v.(*GetSuggestedAccessListsRequest); i { case 0: return &v.state @@ -5969,7 +5969,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[19].Exporter = func(v any, i int) any { switch v := v.(*GetSuggestedAccessListsResponse); i { case 0: return &v.state @@ -5981,7 +5981,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[20].Exporter = func(v any, i int) any { switch v := v.(*CredentialInfo); i { case 0: return &v.state @@ -5993,7 +5993,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[21].Exporter = func(v any, i int) any { switch v := v.(*LoginPasswordlessResponse); i { case 0: return &v.state @@ -6005,7 +6005,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[22].Exporter = func(v any, i int) any { switch v := v.(*LoginPasswordlessRequest); i { case 0: return &v.state @@ -6017,7 +6017,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[23].Exporter = func(v any, i int) any { switch v := v.(*FileTransferRequest); i { case 0: return &v.state @@ -6029,7 +6029,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[24].Exporter = func(v any, i int) any { switch v := v.(*FileTransferProgress); i { case 0: return &v.state @@ -6041,7 +6041,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[25].Exporter = func(v any, i int) any { switch v := v.(*LoginRequest); i { case 0: return &v.state @@ -6053,7 +6053,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[26].Exporter = func(v any, i int) any { switch v := v.(*AddClusterRequest); i { case 0: return &v.state @@ -6065,7 +6065,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[27].Exporter = func(v any, i int) any { switch v := v.(*ListClustersRequest); i { case 0: return &v.state @@ -6077,7 +6077,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[28].Exporter = func(v any, i int) any { switch v := v.(*ListClustersResponse); i { case 0: return &v.state @@ -6089,7 +6089,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[29].Exporter = func(v any, i int) any { switch v := v.(*GetDatabasesRequest); i { case 0: return &v.state @@ -6101,7 +6101,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[30].Exporter = func(v any, i int) any { switch v := v.(*ListLeafClustersRequest); i { case 0: return &v.state @@ -6113,7 +6113,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[31].Exporter = func(v any, i int) any { switch v := v.(*ListDatabaseUsersRequest); i { case 0: return &v.state @@ -6125,7 +6125,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[32].Exporter = func(v any, i int) any { switch v := v.(*ListDatabaseUsersResponse); i { case 0: return &v.state @@ -6137,7 +6137,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[33].Exporter = func(v any, i int) any { switch v := v.(*CreateGatewayRequest); i { case 0: return &v.state @@ -6149,7 +6149,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[34].Exporter = func(v any, i int) any { switch v := v.(*ListGatewaysRequest); i { case 0: return &v.state @@ -6161,7 +6161,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[35].Exporter = func(v any, i int) any { switch v := v.(*ListGatewaysResponse); i { case 0: return &v.state @@ -6173,7 +6173,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[36].Exporter = func(v any, i int) any { switch v := v.(*RemoveGatewayRequest); i { case 0: return &v.state @@ -6185,7 +6185,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[37].Exporter = func(v any, i int) any { switch v := v.(*SetGatewayTargetSubresourceNameRequest); i { case 0: return &v.state @@ -6197,7 +6197,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[38].Exporter = func(v any, i int) any { switch v := v.(*SetGatewayLocalPortRequest); i { case 0: return &v.state @@ -6209,7 +6209,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[39].Exporter = func(v any, i int) any { switch v := v.(*GetServersRequest); i { case 0: return &v.state @@ -6221,7 +6221,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[40].Exporter = func(v any, i int) any { switch v := v.(*GetServersResponse); i { case 0: return &v.state @@ -6233,7 +6233,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[41].Exporter = func(v any, i int) any { switch v := v.(*GetDatabasesResponse); i { case 0: return &v.state @@ -6245,7 +6245,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[42].Exporter = func(v any, i int) any { switch v := v.(*GetKubesRequest); i { case 0: return &v.state @@ -6257,7 +6257,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[43].Exporter = func(v any, i int) any { switch v := v.(*GetKubesResponse); i { case 0: return &v.state @@ -6269,7 +6269,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[44].Exporter = func(v any, i int) any { switch v := v.(*GetAppsRequest); i { case 0: return &v.state @@ -6281,7 +6281,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[45].Exporter = func(v any, i int) any { switch v := v.(*GetAppsResponse); i { case 0: return &v.state @@ -6293,7 +6293,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[46].Exporter = func(v any, i int) any { switch v := v.(*GetAuthSettingsRequest); i { case 0: return &v.state @@ -6305,7 +6305,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[47].Exporter = func(v any, i int) any { switch v := v.(*UpdateTshdEventsServerAddressRequest); i { case 0: return &v.state @@ -6317,7 +6317,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[48].Exporter = func(v any, i int) any { switch v := v.(*UpdateTshdEventsServerAddressResponse); i { case 0: return &v.state @@ -6329,7 +6329,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[49].Exporter = func(v any, i int) any { switch v := v.(*UpdateHeadlessAuthenticationStateRequest); i { case 0: return &v.state @@ -6341,7 +6341,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[50].Exporter = func(v any, i int) any { switch v := v.(*UpdateHeadlessAuthenticationStateResponse); i { case 0: return &v.state @@ -6353,7 +6353,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[51].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[51].Exporter = func(v any, i int) any { switch v := v.(*CreateConnectMyComputerRoleRequest); i { case 0: return &v.state @@ -6365,7 +6365,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[52].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[52].Exporter = func(v any, i int) any { switch v := v.(*CreateConnectMyComputerRoleResponse); i { case 0: return &v.state @@ -6377,7 +6377,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[53].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[53].Exporter = func(v any, i int) any { switch v := v.(*CreateConnectMyComputerNodeTokenRequest); i { case 0: return &v.state @@ -6389,7 +6389,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[54].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[54].Exporter = func(v any, i int) any { switch v := v.(*CreateConnectMyComputerNodeTokenResponse); i { case 0: return &v.state @@ -6401,7 +6401,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[55].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[55].Exporter = func(v any, i int) any { switch v := v.(*WaitForConnectMyComputerNodeJoinRequest); i { case 0: return &v.state @@ -6413,7 +6413,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[56].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[56].Exporter = func(v any, i int) any { switch v := v.(*WaitForConnectMyComputerNodeJoinResponse); i { case 0: return &v.state @@ -6425,7 +6425,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[57].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[57].Exporter = func(v any, i int) any { switch v := v.(*DeleteConnectMyComputerNodeRequest); i { case 0: return &v.state @@ -6437,7 +6437,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[58].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[58].Exporter = func(v any, i int) any { switch v := v.(*DeleteConnectMyComputerNodeResponse); i { case 0: return &v.state @@ -6449,7 +6449,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[59].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[59].Exporter = func(v any, i int) any { switch v := v.(*GetConnectMyComputerNodeNameRequest); i { case 0: return &v.state @@ -6461,7 +6461,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[60].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[60].Exporter = func(v any, i int) any { switch v := v.(*GetConnectMyComputerNodeNameResponse); i { case 0: return &v.state @@ -6473,7 +6473,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[61].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[61].Exporter = func(v any, i int) any { switch v := v.(*ListUnifiedResourcesRequest); i { case 0: return &v.state @@ -6485,7 +6485,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[62].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[62].Exporter = func(v any, i int) any { switch v := v.(*SortBy); i { case 0: return &v.state @@ -6497,7 +6497,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[63].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[63].Exporter = func(v any, i int) any { switch v := v.(*ListUnifiedResourcesResponse); i { case 0: return &v.state @@ -6509,7 +6509,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[64].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[64].Exporter = func(v any, i int) any { switch v := v.(*PaginatedResource); i { case 0: return &v.state @@ -6521,7 +6521,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[65].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[65].Exporter = func(v any, i int) any { switch v := v.(*GetUserPreferencesRequest); i { case 0: return &v.state @@ -6533,7 +6533,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[66].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[66].Exporter = func(v any, i int) any { switch v := v.(*GetUserPreferencesResponse); i { case 0: return &v.state @@ -6545,7 +6545,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[67].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[67].Exporter = func(v any, i int) any { switch v := v.(*UpdateUserPreferencesRequest); i { case 0: return &v.state @@ -6557,7 +6557,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[68].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[68].Exporter = func(v any, i int) any { switch v := v.(*UpdateUserPreferencesResponse); i { case 0: return &v.state @@ -6569,7 +6569,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[69].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[69].Exporter = func(v any, i int) any { switch v := v.(*UserPreferences); i { case 0: return &v.state @@ -6581,7 +6581,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[70].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[70].Exporter = func(v any, i int) any { switch v := v.(*LoginPasswordlessRequest_LoginPasswordlessRequestInit); i { case 0: return &v.state @@ -6593,7 +6593,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[71].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[71].Exporter = func(v any, i int) any { switch v := v.(*LoginPasswordlessRequest_LoginPasswordlessPINResponse); i { case 0: return &v.state @@ -6605,7 +6605,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[72].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[72].Exporter = func(v any, i int) any { switch v := v.(*LoginPasswordlessRequest_LoginPasswordlessCredentialResponse); i { case 0: return &v.state @@ -6617,7 +6617,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[73].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[73].Exporter = func(v any, i int) any { switch v := v.(*LoginRequest_LocalParams); i { case 0: return &v.state @@ -6629,7 +6629,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[74].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[74].Exporter = func(v any, i int) any { switch v := v.(*LoginRequest_SsoParams); i { case 0: return &v.state @@ -6642,16 +6642,16 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { } } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[22].OneofWrappers = []interface{}{ + file_teleport_lib_teleterm_v1_service_proto_msgTypes[22].OneofWrappers = []any{ (*LoginPasswordlessRequest_Init)(nil), (*LoginPasswordlessRequest_Pin)(nil), (*LoginPasswordlessRequest_Credential)(nil), } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[25].OneofWrappers = []interface{}{ + file_teleport_lib_teleterm_v1_service_proto_msgTypes[25].OneofWrappers = []any{ (*LoginRequest_Local)(nil), (*LoginRequest_Sso)(nil), } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[64].OneofWrappers = []interface{}{ + file_teleport_lib_teleterm_v1_service_proto_msgTypes[64].OneofWrappers = []any{ (*PaginatedResource_Database)(nil), (*PaginatedResource_Server)(nil), (*PaginatedResource_Kube)(nil), diff --git a/gen/proto/go/teleport/lib/teleterm/v1/tshd_events_service.pb.go b/gen/proto/go/teleport/lib/teleterm/v1/tshd_events_service.pb.go index 75a7598d6bd0f..c1c80b0f355a7 100644 --- a/gen/proto/go/teleport/lib/teleterm/v1/tshd_events_service.pb.go +++ b/gen/proto/go/teleport/lib/teleterm/v1/tshd_events_service.pb.go @@ -17,7 +17,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/lib/teleterm/v1/tshd_events_service.proto @@ -730,7 +730,7 @@ func file_teleport_lib_teleterm_v1_tshd_events_service_proto_rawDescGZIP() []byt } var file_teleport_lib_teleterm_v1_tshd_events_service_proto_msgTypes = make([]protoimpl.MessageInfo, 10) -var file_teleport_lib_teleterm_v1_tshd_events_service_proto_goTypes = []interface{}{ +var file_teleport_lib_teleterm_v1_tshd_events_service_proto_goTypes = []any{ (*ReloginRequest)(nil), // 0: teleport.lib.teleterm.v1.ReloginRequest (*GatewayCertExpired)(nil), // 1: teleport.lib.teleterm.v1.GatewayCertExpired (*ReloginResponse)(nil), // 2: teleport.lib.teleterm.v1.ReloginResponse @@ -766,7 +766,7 @@ func file_teleport_lib_teleterm_v1_tshd_events_service_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_lib_teleterm_v1_tshd_events_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_tshd_events_service_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*ReloginRequest); i { case 0: return &v.state @@ -778,7 +778,7 @@ func file_teleport_lib_teleterm_v1_tshd_events_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_tshd_events_service_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_tshd_events_service_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*GatewayCertExpired); i { case 0: return &v.state @@ -790,7 +790,7 @@ func file_teleport_lib_teleterm_v1_tshd_events_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_tshd_events_service_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_tshd_events_service_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*ReloginResponse); i { case 0: return &v.state @@ -802,7 +802,7 @@ func file_teleport_lib_teleterm_v1_tshd_events_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_tshd_events_service_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_tshd_events_service_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*SendNotificationRequest); i { case 0: return &v.state @@ -814,7 +814,7 @@ func file_teleport_lib_teleterm_v1_tshd_events_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_tshd_events_service_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_tshd_events_service_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*CannotProxyGatewayConnection); i { case 0: return &v.state @@ -826,7 +826,7 @@ func file_teleport_lib_teleterm_v1_tshd_events_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_tshd_events_service_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_tshd_events_service_proto_msgTypes[5].Exporter = func(v any, i int) any { switch v := v.(*SendNotificationResponse); i { case 0: return &v.state @@ -838,7 +838,7 @@ func file_teleport_lib_teleterm_v1_tshd_events_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_tshd_events_service_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_tshd_events_service_proto_msgTypes[6].Exporter = func(v any, i int) any { switch v := v.(*SendPendingHeadlessAuthenticationRequest); i { case 0: return &v.state @@ -850,7 +850,7 @@ func file_teleport_lib_teleterm_v1_tshd_events_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_tshd_events_service_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_tshd_events_service_proto_msgTypes[7].Exporter = func(v any, i int) any { switch v := v.(*SendPendingHeadlessAuthenticationResponse); i { case 0: return &v.state @@ -862,7 +862,7 @@ func file_teleport_lib_teleterm_v1_tshd_events_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_tshd_events_service_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_tshd_events_service_proto_msgTypes[8].Exporter = func(v any, i int) any { switch v := v.(*PromptMFARequest); i { case 0: return &v.state @@ -874,7 +874,7 @@ func file_teleport_lib_teleterm_v1_tshd_events_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_tshd_events_service_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_tshd_events_service_proto_msgTypes[9].Exporter = func(v any, i int) any { switch v := v.(*PromptMFAResponse); i { case 0: return &v.state @@ -887,10 +887,10 @@ func file_teleport_lib_teleterm_v1_tshd_events_service_proto_init() { } } } - file_teleport_lib_teleterm_v1_tshd_events_service_proto_msgTypes[0].OneofWrappers = []interface{}{ + file_teleport_lib_teleterm_v1_tshd_events_service_proto_msgTypes[0].OneofWrappers = []any{ (*ReloginRequest_GatewayCertExpired)(nil), } - file_teleport_lib_teleterm_v1_tshd_events_service_proto_msgTypes[3].OneofWrappers = []interface{}{ + file_teleport_lib_teleterm_v1_tshd_events_service_proto_msgTypes[3].OneofWrappers = []any{ (*SendNotificationRequest_CannotProxyGatewayConnection)(nil), } type x struct{} diff --git a/gen/proto/go/teleport/lib/teleterm/v1/usage_events.pb.go b/gen/proto/go/teleport/lib/teleterm/v1/usage_events.pb.go index aac8bdf9ee58b..a31b2d9bc1375 100644 --- a/gen/proto/go/teleport/lib/teleterm/v1/usage_events.pb.go +++ b/gen/proto/go/teleport/lib/teleterm/v1/usage_events.pb.go @@ -17,7 +17,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/lib/teleterm/v1/usage_events.proto @@ -133,7 +133,7 @@ func file_teleport_lib_teleterm_v1_usage_events_proto_rawDescGZIP() []byte { } var file_teleport_lib_teleterm_v1_usage_events_proto_msgTypes = make([]protoimpl.MessageInfo, 1) -var file_teleport_lib_teleterm_v1_usage_events_proto_goTypes = []interface{}{ +var file_teleport_lib_teleterm_v1_usage_events_proto_goTypes = []any{ (*ReportUsageEventRequest)(nil), // 0: teleport.lib.teleterm.v1.ReportUsageEventRequest (*v1alpha.SubmitConnectEventRequest)(nil), // 1: prehog.v1alpha.SubmitConnectEventRequest } @@ -152,7 +152,7 @@ func file_teleport_lib_teleterm_v1_usage_events_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_lib_teleterm_v1_usage_events_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_usage_events_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*ReportUsageEventRequest); i { case 0: return &v.state diff --git a/go.mod b/go.mod index 3808bf2962f50..6c6915404c164 100644 --- a/go.mod +++ b/go.mod @@ -40,7 +40,7 @@ require ( github.com/ThalesIgnite/crypto11 v1.2.5 github.com/alecthomas/kingpin/v2 v2.4.0 // replaced github.com/alicebob/miniredis/v2 v2.31.1 - github.com/andybalholm/brotli v1.0.6 + github.com/andybalholm/brotli v1.1.0 github.com/aquasecurity/libbpfgo v0.5.1-libbpf-1.2 github.com/armon/go-radix v1.0.0 github.com/aws/aws-sdk-go v1.51.6 @@ -152,6 +152,7 @@ require ( github.com/okta/okta-sdk-golang/v2 v2.20.0 github.com/opencontainers/go-digest v1.0.0 github.com/opensearch-project/opensearch-go/v2 v2.3.0 + github.com/parquet-go/parquet-go v0.23.0 github.com/pavlo-v-chernykh/keystore-go/v4 v4.5.0 github.com/pelletier/go-toml v1.9.5 github.com/pkg/sftp v1.13.6 @@ -165,7 +166,6 @@ require ( github.com/sashabaranov/go-openai v1.17.10 github.com/schollz/progressbar/v3 v3.14.1 github.com/scim2/filter-parser/v2 v2.2.0 - github.com/segmentio/parquet-go v0.0.0-20230622230624-510764ae9e80 github.com/shirou/gopsutil/v4 v4.24.6 github.com/sigstore/cosign/v2 v2.2.4 github.com/sigstore/sigstore v1.8.3 @@ -207,7 +207,7 @@ require ( google.golang.org/genproto/googleapis/rpc v0.0.0-20240429193739-8cf5692501f6 google.golang.org/grpc v1.63.2 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.3.0 - google.golang.org/protobuf v1.34.0 + google.golang.org/protobuf v1.34.2 gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c gopkg.in/dnaeon/go-vcr.v3 v3.1.2 gopkg.in/ini.v1 v1.67.0 @@ -400,7 +400,7 @@ require ( github.com/joshlf/testutil v0.0.0-20170608050642-b5d8aa79d93d // indirect github.com/kelseyhightower/envconfig v1.4.0 // indirect github.com/klauspost/asmfmt v1.3.2 // indirect - github.com/klauspost/compress v1.17.4 // indirect + github.com/klauspost/compress v1.17.9 // indirect github.com/klauspost/cpuid/v2 v2.2.6 // indirect github.com/kr/fs v0.1.0 // indirect github.com/kr/pretty v0.3.1 // indirect @@ -453,7 +453,7 @@ require ( github.com/pelletier/go-toml/v2 v2.1.0 // indirect github.com/peterbourgon/diskv v2.0.1+incompatible // indirect github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5 // indirect - github.com/pierrec/lz4/v4 v4.1.18 // indirect + github.com/pierrec/lz4/v4 v4.1.21 // indirect github.com/pingcap/errors v0.11.5-0.20201126102027-b0a155152ca3 // indirect github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c // indirect github.com/pkg/errors v0.9.1 // indirect @@ -462,7 +462,7 @@ require ( github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect github.com/pquerna/cachecontrol v0.1.0 // indirect github.com/prometheus/procfs v0.12.0 // indirect - github.com/rivo/uniseg v0.4.4 // indirect + github.com/rivo/uniseg v0.4.7 // indirect github.com/rogpeppe/go-internal v1.12.0 // indirect github.com/rs/zerolog v1.28.0 // indirect github.com/rubenv/sql-migrate v1.5.2 // indirect @@ -474,7 +474,7 @@ require ( github.com/sassoftware/relic v7.2.1+incompatible // indirect github.com/secure-systems-lab/go-securesystemslib v0.8.0 // indirect github.com/segmentio/asm v1.2.0 // indirect - github.com/segmentio/encoding v0.3.5 // indirect + github.com/segmentio/encoding v0.4.0 // indirect github.com/shabbyrobe/gocovmerge v0.0.0-20190829150210-3e036491d500 // indirect github.com/shibumi/go-pathspec v1.3.0 // indirect github.com/shoenig/go-m1cpu v0.1.6 // indirect diff --git a/go.sum b/go.sum index ed5167aea659f..bf6aba1354e89 100644 --- a/go.sum +++ b/go.sum @@ -206,8 +206,8 @@ github.com/alicebob/miniredis/v2 v2.31.1 h1:7XAt0uUg3DtwEKW5ZAGa+K7FZV2DdKQo5K/6 github.com/alicebob/miniredis/v2 v2.31.1/go.mod h1:UB/T2Uztp7MlFSDakaX1sTXUv5CASoprx0wulRT6HBg= github.com/aliyun/credentials-go v1.3.1 h1:uq/0v7kWrxmoLGpqjx7vtQ/s03f0zR//0br/xWDTE28= github.com/aliyun/credentials-go v1.3.1/go.mod h1:8jKYhQuDawt8x2+fusqa1Y6mPxemTsBEN04dgcAcYz0= -github.com/andybalholm/brotli v1.0.6 h1:Yf9fFpf49Zrxb9NlQaluyE92/+X7UVHlhMNJN2sxfOI= -github.com/andybalholm/brotli v1.0.6/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= +github.com/andybalholm/brotli v1.1.0 h1:eLKJA0d02Lf0mVpIDgYnqXcUn0GqVmEFny3VuID1U3M= +github.com/andybalholm/brotli v1.1.0/go.mod h1:sms7XGricyQI9K10gOSf56VKKWS4oLer58Q+mhRPtnY= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/apache/arrow/go/v12 v12.0.1 h1:JsR2+hzYYjgSUkBSaahpqCetqZMr76djX80fF/DiJbg= github.com/apache/arrow/go/v12 v12.0.1/go.mod h1:weuTY7JvTG/HDPtMQxEUp7pU73vkLWMLpY67QwZ/WWw= @@ -1066,8 +1066,8 @@ github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+o github.com/klauspost/asmfmt v1.3.2 h1:4Ri7ox3EwapiOjCki+hw14RyKk201CN4rzyCJRFLpK4= github.com/klauspost/asmfmt v1.3.2/go.mod h1:AG8TuvYojzulgDAMCnYn50l/5QV3Bs/tp6j0HLHbNSE= github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= -github.com/klauspost/compress v1.17.4 h1:Ej5ixsIri7BrIjBkRZLTo6ghwrEtHFk7ijlczPW4fZ4= -github.com/klauspost/compress v1.17.4/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM= +github.com/klauspost/compress v1.17.9 h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2qeMA= +github.com/klauspost/compress v1.17.9/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= github.com/klauspost/cpuid/v2 v2.2.6 h1:ndNyv040zDGIDh8thGkXYjnFtiN02M1PVVF+JE/48xc= github.com/klauspost/cpuid/v2 v2.2.6/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= @@ -1281,6 +1281,8 @@ github.com/opensearch-project/opensearch-go/v2 v2.3.0 h1:nQIEMr+A92CkhHrZgUhcfsr github.com/opensearch-project/opensearch-go/v2 v2.3.0/go.mod h1:8LDr9FCgUTVoT+5ESjc2+iaZuldqE+23Iq0r1XeNue8= github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs= github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= +github.com/parquet-go/parquet-go v0.23.0 h1:dyEU5oiHCtbASyItMCD2tXtT2nPmoPbKpqf0+nnGrmk= +github.com/parquet-go/parquet-go v0.23.0/go.mod h1:MnwbUcFHU6uBYMymKAlPPAw9yh3kE1wWl6Gl1uLdkNk= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pascaldekloe/name v1.0.1 h1:9lnXOHeqeHHnWLbKfH6X98+4+ETVqFqxN09UXSjcMb0= github.com/pascaldekloe/name v1.0.1/go.mod h1:Z//MfYJnH4jVpQ9wkclwu2I2MkHmXTlT9wR5UZScttM= @@ -1303,8 +1305,8 @@ github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5 h1:q2e307iGHPdTGp github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5/go.mod h1:jvVRKCrJTQWu0XVbaOlby/2lO20uSCHEMzzplHXte1o= github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 h1:Ii+DKncOVM8Cu1Hc+ETb5K+23HdAMvESYE3ZJ5b5cMI= github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5/go.mod h1:iIss55rKnNBTvrwdmkUpLnDpZoAHvWaiq5+iMmen4AE= -github.com/pierrec/lz4/v4 v4.1.18 h1:xaKrnTkyoqfh1YItXl56+6KJNVYWlEEPuAQW9xsplYQ= -github.com/pierrec/lz4/v4 v4.1.18/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= +github.com/pierrec/lz4/v4 v4.1.21 h1:yOVMLb6qSIDP67pl/5F7RepeKYu/VmTyEXvuMI5d9mQ= +github.com/pierrec/lz4/v4 v4.1.21/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= github.com/pingcap/check v0.0.0-20190102082844-67f458068fc8 h1:USx2/E1bX46VG32FIw034Au6seQ2fY9NEILmNh/UlQg= github.com/pingcap/check v0.0.0-20190102082844-67f458068fc8/go.mod h1:B1+S9LNcuMyLH/4HMTViQOJevkGiik3wW2AN9zb2fNQ= github.com/pingcap/errors v0.11.0/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8= @@ -1366,8 +1368,9 @@ github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqn github.com/remyoudompheng/bigfft v0.0.0-20190728182440-6a916e37a237/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= -github.com/rivo/uniseg v0.4.4 h1:8TfxU8dW6PdqD27gjM8MVNuicgxIjxpm4K7x4jp8sis= github.com/rivo/uniseg v0.4.4/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= +github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= +github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= @@ -1418,15 +1421,12 @@ github.com/scim2/filter-parser/v2 v2.2.0/go.mod h1:jWnkDToqX/Y0ugz0P5VvpVEUKcWcy github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= github.com/secure-systems-lab/go-securesystemslib v0.8.0 h1:mr5An6X45Kb2nddcFlbmfHkLguCE9laoZCUzEEpIZXA= github.com/secure-systems-lab/go-securesystemslib v0.8.0/go.mod h1:UH2VZVuJfCYR8WgMlCU1uFsOUU+KeyrTWcSS73NBOzU= -github.com/segmentio/asm v1.1.3/go.mod h1:Ld3L4ZXGNcSLRg4JBsZ3//1+f/TjYl0Mzen/DQy1EJg= github.com/segmentio/asm v1.2.0 h1:9BQrFxC+YOHJlTlHGkTrFWf59nbL3XnCoFLTwDCI7ys= github.com/segmentio/asm v1.2.0/go.mod h1:BqMnlJP91P8d+4ibuonYZw9mfnzI9HfxselHZr5aAcs= -github.com/segmentio/encoding v0.3.5 h1:UZEiaZ55nlXGDL92scoVuw00RmiRCazIEmvPSbSvt8Y= -github.com/segmentio/encoding v0.3.5/go.mod h1:n0JeuIqEQrQoPDGsjo8UNd1iA0U8d8+oHAA4E3G3OxM= +github.com/segmentio/encoding v0.4.0 h1:MEBYvRqiUB2nfR2criEXWqwdY6HJOUrCn5hboVOVmy8= +github.com/segmentio/encoding v0.4.0/go.mod h1:/d03Cd8PoaDeceuhUUUQWjU0KhWjrmYrWPgtJHYZSnI= github.com/segmentio/ksuid v1.0.4 h1:sBo2BdShXjmcugAMwjugoGUdUV0pcxY5mW4xKRn3v4c= github.com/segmentio/ksuid v1.0.4/go.mod h1:/XUiZBD3kVx5SmUOl55voK5yeAbBNNIed+2O73XgrPE= -github.com/segmentio/parquet-go v0.0.0-20230622230624-510764ae9e80 h1:d09YiLivaPHjCyYDGLI5BQbl+carOqUg/U0noDQQBmo= -github.com/segmentio/parquet-go v0.0.0-20230622230624-510764ae9e80/go.mod h1:+J0xQnJjm8DuQUHBO7t57EnmPbstT6+b45+p3DC9k1Q= github.com/sergi/go-diff v1.3.1 h1:xkr+Oxo4BOQKmkn/B9eMK0g5Kg/983T9DqqPHwYqD+8= github.com/sergi/go-diff v1.3.1/go.mod h1:aMJSSKb2lpPvRNec0+w3fl7LP9IOFzdc9Pa4NFbPK1I= github.com/shabbyrobe/gocovmerge v0.0.0-20180507124511-f6ea450bfb63/go.mod h1:n+VKSARF5y/tS9XFSP7vWDfS+GUC5vs/YT7M5XDTUEM= @@ -1836,7 +1836,6 @@ golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211110154304-99a53858aa08/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220408201424-a24fb2fb8a0f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -1980,8 +1979,8 @@ google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQ google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.34.0 h1:Qo/qEd2RZPCf2nKuorzksSknv0d3ERwp1vFG38gSmH4= -google.golang.org/protobuf v1.34.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= +google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg= +google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc h1:2gGKlE2+asNV9m7xrywl36YYNnBG5ZQ0r/BOOxqPpmk= gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc/go.mod h1:m7x9LTH6d71AHyAX77c9yqWCCa3UKHcVEj9y7hAtKDk= diff --git a/integrations/event-handler/go.mod b/integrations/event-handler/go.mod index eb39a836c00e8..767dc89ff1626 100644 --- a/integrations/event-handler/go.mod +++ b/integrations/event-handler/go.mod @@ -197,7 +197,7 @@ require ( github.com/julienschmidt/httprouter v1.3.0 // indirect github.com/kelseyhightower/envconfig v1.4.0 // indirect github.com/keys-pub/go-libfido2 v1.5.3-0.20220306005615-8ab03fb1ec27 // indirect - github.com/klauspost/compress v1.17.4 // indirect + github.com/klauspost/compress v1.17.9 // indirect github.com/kr/pretty v0.3.1 // indirect github.com/kr/text v0.2.0 // indirect github.com/kylelemons/godebug v1.1.0 // indirect @@ -242,7 +242,7 @@ require ( github.com/prometheus/client_model v0.6.0 // indirect github.com/prometheus/common v0.51.1 // indirect github.com/prometheus/procfs v0.12.0 // indirect - github.com/rivo/uniseg v0.4.4 // indirect + github.com/rivo/uniseg v0.4.7 // indirect github.com/rogpeppe/go-internal v1.12.0 // indirect github.com/rubenv/sql-migrate v1.5.2 // indirect github.com/russellhaering/gosaml2 v0.9.1 // indirect diff --git a/integrations/event-handler/go.sum b/integrations/event-handler/go.sum index 7e61ea6cfc746..cbad9394edb1e 100644 --- a/integrations/event-handler/go.sum +++ b/integrations/event-handler/go.sum @@ -626,8 +626,8 @@ github.com/kelseyhightower/envconfig v1.4.0 h1:Im6hONhd3pLkfDFsbRgu68RDNkGF1r3dv github.com/kelseyhightower/envconfig v1.4.0/go.mod h1:cccZRl6mQpaq41TPp5QxidR+Sa3axMbJDNb//FQX6Gg= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/klauspost/compress v1.17.4 h1:Ej5ixsIri7BrIjBkRZLTo6ghwrEtHFk7ijlczPW4fZ4= -github.com/klauspost/compress v1.17.4/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM= +github.com/klauspost/compress v1.17.9 h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2qeMA= +github.com/klauspost/compress v1.17.9/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= @@ -805,8 +805,8 @@ github.com/prometheus/procfs v0.0.3/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDa github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo= github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= -github.com/rivo/uniseg v0.4.4 h1:8TfxU8dW6PdqD27gjM8MVNuicgxIjxpm4K7x4jp8sis= -github.com/rivo/uniseg v0.4.4/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= +github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= +github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= diff --git a/integrations/terraform/go.mod b/integrations/terraform/go.mod index 57305672963bf..e302ddd41d841 100644 --- a/integrations/terraform/go.mod +++ b/integrations/terraform/go.mod @@ -19,7 +19,7 @@ require ( github.com/sirupsen/logrus v1.9.3 github.com/stretchr/testify v1.9.0 google.golang.org/grpc v1.63.2 - google.golang.org/protobuf v1.34.0 + google.golang.org/protobuf v1.34.2 ) require ( @@ -219,7 +219,7 @@ require ( github.com/julienschmidt/httprouter v1.3.0 // indirect github.com/kelseyhightower/envconfig v1.4.0 // indirect github.com/keys-pub/go-libfido2 v1.5.3-0.20220306005615-8ab03fb1ec27 // indirect - github.com/klauspost/compress v1.17.4 // indirect + github.com/klauspost/compress v1.17.9 // indirect github.com/kr/fs v0.1.0 // indirect github.com/kr/pretty v0.3.1 // indirect github.com/kr/text v0.2.0 // indirect @@ -271,7 +271,7 @@ require ( github.com/prometheus/client_model v0.6.0 // indirect github.com/prometheus/common v0.51.1 // indirect github.com/prometheus/procfs v0.12.0 // indirect - github.com/rivo/uniseg v0.4.4 // indirect + github.com/rivo/uniseg v0.4.7 // indirect github.com/rogpeppe/go-internal v1.12.0 // indirect github.com/rubenv/sql-migrate v1.5.2 // indirect github.com/russellhaering/gosaml2 v0.9.1 // indirect diff --git a/integrations/terraform/go.sum b/integrations/terraform/go.sum index f55371fc300f6..0e42d1d384ba5 100644 --- a/integrations/terraform/go.sum +++ b/integrations/terraform/go.sum @@ -164,8 +164,8 @@ github.com/alicebob/gopher-json v0.0.0-20200520072559-a9ecdc9d1d3a h1:HbKu58rmZp github.com/alicebob/gopher-json v0.0.0-20200520072559-a9ecdc9d1d3a/go.mod h1:SGnFV6hVsYE877CKEZ6tDNTjaSXYUk6QqoIK6PrAtcc= github.com/alicebob/miniredis/v2 v2.31.1 h1:7XAt0uUg3DtwEKW5ZAGa+K7FZV2DdKQo5K/6TTnfX8Y= github.com/alicebob/miniredis/v2 v2.31.1/go.mod h1:UB/T2Uztp7MlFSDakaX1sTXUv5CASoprx0wulRT6HBg= -github.com/andybalholm/brotli v1.0.6 h1:Yf9fFpf49Zrxb9NlQaluyE92/+X7UVHlhMNJN2sxfOI= -github.com/andybalholm/brotli v1.0.6/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= +github.com/andybalholm/brotli v1.1.0 h1:eLKJA0d02Lf0mVpIDgYnqXcUn0GqVmEFny3VuID1U3M= +github.com/andybalholm/brotli v1.1.0/go.mod h1:sms7XGricyQI9K10gOSf56VKKWS4oLer58Q+mhRPtnY= github.com/andybalholm/crlf v0.0.0-20171020200849-670099aa064f/go.mod h1:k8feO4+kXDxro6ErPXBRTJ/ro2mf0SsFG8s7doP9kJE= github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= @@ -892,8 +892,8 @@ github.com/kevinburke/ssh_config v0.0.0-20201106050909-4977a11b4351/go.mod h1:CT github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.11.2/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= -github.com/klauspost/compress v1.17.4 h1:Ej5ixsIri7BrIjBkRZLTo6ghwrEtHFk7ijlczPW4fZ4= -github.com/klauspost/compress v1.17.4/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM= +github.com/klauspost/compress v1.17.9 h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2qeMA= +github.com/klauspost/compress v1.17.9/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/fs v0.1.0 h1:Jskdu9ieNAYnjxsi0LbQp1ulIKZV1LAFgK1tWhpZgl8= @@ -1051,6 +1051,8 @@ github.com/opencontainers/image-spec v1.1.0 h1:8SG7/vwALn54lVB/0yZ/MMwhFrPYtpEHQ github.com/opencontainers/image-spec v1.1.0/go.mod h1:W4s4sFTMaBeK1BQLXbG4AdM2szdn85PY75RI83NrTrM= github.com/opensearch-project/opensearch-go/v2 v2.3.0 h1:nQIEMr+A92CkhHrZgUhcfsrZjibvB3APXf2a1VwCmMQ= github.com/opensearch-project/opensearch-go/v2 v2.3.0/go.mod h1:8LDr9FCgUTVoT+5ESjc2+iaZuldqE+23Iq0r1XeNue8= +github.com/parquet-go/parquet-go v0.23.0 h1:dyEU5oiHCtbASyItMCD2tXtT2nPmoPbKpqf0+nnGrmk= +github.com/parquet-go/parquet-go v0.23.0/go.mod h1:MnwbUcFHU6uBYMymKAlPPAw9yh3kE1wWl6Gl1uLdkNk= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pascaldekloe/name v1.0.1 h1:9lnXOHeqeHHnWLbKfH6X98+4+ETVqFqxN09UXSjcMb0= github.com/pascaldekloe/name v1.0.1/go.mod h1:Z//MfYJnH4jVpQ9wkclwu2I2MkHmXTlT9wR5UZScttM= @@ -1068,8 +1070,8 @@ github.com/peterbourgon/diskv v2.0.1+incompatible h1:UBdAOUP5p4RWqPBg048CAvpKN+v github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 h1:Ii+DKncOVM8Cu1Hc+ETb5K+23HdAMvESYE3ZJ5b5cMI= github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5/go.mod h1:iIss55rKnNBTvrwdmkUpLnDpZoAHvWaiq5+iMmen4AE= -github.com/pierrec/lz4/v4 v4.1.18 h1:xaKrnTkyoqfh1YItXl56+6KJNVYWlEEPuAQW9xsplYQ= -github.com/pierrec/lz4/v4 v4.1.18/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= +github.com/pierrec/lz4/v4 v4.1.21 h1:yOVMLb6qSIDP67pl/5F7RepeKYu/VmTyEXvuMI5d9mQ= +github.com/pierrec/lz4/v4 v4.1.21/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= github.com/pingcap/errors v0.11.5-0.20201126102027-b0a155152ca3 h1:LllgC9eGfqzkfubMgjKIDyZYaa609nNWAyNZtpy2B3M= github.com/pingcap/errors v0.11.5-0.20201126102027-b0a155152ca3/go.mod h1:G7x87le1poQzLB/TqvTJI2ILrSgobnq4Ut7luOwvfvI= github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c h1:+mdjkGKdHQG3305AYmdv1U2eRNDiU2ErMBj1gwrq8eQ= @@ -1112,8 +1114,9 @@ github.com/prometheus/procfs v0.0.3/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDa github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo= github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= -github.com/rivo/uniseg v0.4.4 h1:8TfxU8dW6PdqD27gjM8MVNuicgxIjxpm4K7x4jp8sis= github.com/rivo/uniseg v0.4.4/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= +github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= +github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= @@ -1148,10 +1151,8 @@ github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg github.com/sebdah/goldie v1.0.0/go.mod h1:jXP4hmWywNEwZzhMuv2ccnqTSFpuq8iyQhtQdkkZBH4= github.com/segmentio/asm v1.2.0 h1:9BQrFxC+YOHJlTlHGkTrFWf59nbL3XnCoFLTwDCI7ys= github.com/segmentio/asm v1.2.0/go.mod h1:BqMnlJP91P8d+4ibuonYZw9mfnzI9HfxselHZr5aAcs= -github.com/segmentio/encoding v0.3.5 h1:UZEiaZ55nlXGDL92scoVuw00RmiRCazIEmvPSbSvt8Y= -github.com/segmentio/encoding v0.3.5/go.mod h1:n0JeuIqEQrQoPDGsjo8UNd1iA0U8d8+oHAA4E3G3OxM= -github.com/segmentio/parquet-go v0.0.0-20230622230624-510764ae9e80 h1:d09YiLivaPHjCyYDGLI5BQbl+carOqUg/U0noDQQBmo= -github.com/segmentio/parquet-go v0.0.0-20230622230624-510764ae9e80/go.mod h1:+J0xQnJjm8DuQUHBO7t57EnmPbstT6+b45+p3DC9k1Q= +github.com/segmentio/encoding v0.4.0 h1:MEBYvRqiUB2nfR2criEXWqwdY6HJOUrCn5hboVOVmy8= +github.com/segmentio/encoding v0.4.0/go.mod h1:/d03Cd8PoaDeceuhUUUQWjU0KhWjrmYrWPgtJHYZSnI= github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= github.com/sergi/go-diff v1.2.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= @@ -1737,8 +1738,8 @@ google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp0 google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.34.0 h1:Qo/qEd2RZPCf2nKuorzksSknv0d3ERwp1vFG38gSmH4= -google.golang.org/protobuf v1.34.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= +google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg= +google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/lib/events/athena/consumer.go b/lib/events/athena/consumer.go index 0ee6f43a68492..38fb1e6aee52c 100644 --- a/lib/events/athena/consumer.go +++ b/lib/events/athena/consumer.go @@ -39,7 +39,7 @@ import ( sqsTypes "github.com/aws/aws-sdk-go-v2/service/sqs/types" "github.com/google/uuid" "github.com/gravitational/trace" - "github.com/segmentio/parquet-go" + "github.com/parquet-go/parquet-go" log "github.com/sirupsen/logrus" "github.com/gravitational/teleport" diff --git a/lib/events/athena/consumer_test.go b/lib/events/athena/consumer_test.go index cdec2359e1194..3f5e2241fdfd1 100644 --- a/lib/events/athena/consumer_test.go +++ b/lib/events/athena/consumer_test.go @@ -41,7 +41,7 @@ import ( "github.com/google/uuid" "github.com/gravitational/trace" "github.com/jonboulle/clockwork" - "github.com/segmentio/parquet-go" + "github.com/parquet-go/parquet-go" "github.com/stretchr/testify/require" "github.com/gravitational/teleport" diff --git a/lib/events/athena/querier.go b/lib/events/athena/querier.go index 1f4e1b6a6742a..78ea2a54d8898 100644 --- a/lib/events/athena/querier.go +++ b/lib/events/athena/querier.go @@ -39,7 +39,7 @@ import ( "github.com/google/uuid" "github.com/gravitational/trace" "github.com/jonboulle/clockwork" - "github.com/segmentio/parquet-go" + "github.com/parquet-go/parquet-go" log "github.com/sirupsen/logrus" "go.opentelemetry.io/otel/attribute" oteltrace "go.opentelemetry.io/otel/trace" diff --git a/lib/multiplexer/test/ping.pb.go b/lib/multiplexer/test/ping.pb.go index 5f9b36680629d..fd603de1cb437 100644 --- a/lib/multiplexer/test/ping.pb.go +++ b/lib/multiplexer/test/ping.pb.go @@ -17,7 +17,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/lib/multiplexer/test/ping.proto @@ -169,7 +169,7 @@ func file_teleport_lib_multiplexer_test_ping_proto_rawDescGZIP() []byte { } var file_teleport_lib_multiplexer_test_ping_proto_msgTypes = make([]protoimpl.MessageInfo, 2) -var file_teleport_lib_multiplexer_test_ping_proto_goTypes = []interface{}{ +var file_teleport_lib_multiplexer_test_ping_proto_goTypes = []any{ (*Request)(nil), // 0: teleport.lib.multiplexer.test.Request (*Response)(nil), // 1: teleport.lib.multiplexer.test.Response } @@ -189,7 +189,7 @@ func file_teleport_lib_multiplexer_test_ping_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_lib_multiplexer_test_ping_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_multiplexer_test_ping_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*Request); i { case 0: return &v.state @@ -201,7 +201,7 @@ func file_teleport_lib_multiplexer_test_ping_proto_init() { return nil } } - file_teleport_lib_multiplexer_test_ping_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_multiplexer_test_ping_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*Response); i { case 0: return &v.state From 5db4fccd9660c0cf94978eafcecd089ed7ab53e8 Mon Sep 17 00:00:00 2001 From: Andrew Burke <31974658+atburke@users.noreply.github.com> Date: Wed, 4 Dec 2024 11:28:31 -0800 Subject: [PATCH 092/111] Fix asserts in utmp tests (#49778) --- integration/utmp_integration_test.go | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/integration/utmp_integration_test.go b/integration/utmp_integration_test.go index 89627419c677e..04391d01933e8 100644 --- a/integration/utmp_integration_test.go +++ b/integration/utmp_integration_test.go @@ -116,10 +116,10 @@ func TestRootUTMPEntryExists(t *testing.T) { require.NoError(t, err) require.EventuallyWithTf(t, func(collect *assert.CollectT) { - require.NoError(collect, uacc.UserWithPtyInDatabase(s.utmpPath, teleportTestUser)) - require.NoError(collect, uacc.UserWithPtyInDatabase(s.wtmpPath, teleportTestUser)) + assert.NoError(collect, uacc.UserWithPtyInDatabase(s.utmpPath, teleportTestUser)) + assert.NoError(collect, uacc.UserWithPtyInDatabase(s.wtmpPath, teleportTestUser)) // Ensure than an entry was not written to btmp. - require.True(collect, trace.IsNotFound(uacc.UserWithPtyInDatabase(s.btmpPath, teleportTestUser)), "unexpected error: %v", err) + assert.True(collect, trace.IsNotFound(uacc.UserWithPtyInDatabase(s.btmpPath, teleportTestUser)), "unexpected error: %v", err) }, 5*time.Minute, time.Second, "did not detect utmp entry within 5 minutes") }) @@ -152,10 +152,10 @@ func TestRootUTMPEntryExists(t *testing.T) { require.NoError(t, err) require.EventuallyWithT(t, func(collect *assert.CollectT) { - require.NoError(collect, uacc.UserWithPtyInDatabase(s.btmpPath, teleportFakeUser)) + assert.NoError(collect, uacc.UserWithPtyInDatabase(s.btmpPath, teleportFakeUser)) // Ensure that entries were not written to utmp and wtmp - require.True(collect, trace.IsNotFound(uacc.UserWithPtyInDatabase(s.utmpPath, teleportFakeUser)), "unexpected error: %v", err) - require.True(collect, trace.IsNotFound(uacc.UserWithPtyInDatabase(s.wtmpPath, teleportFakeUser)), "unexpected error: %v", err) + assert.True(collect, trace.IsNotFound(uacc.UserWithPtyInDatabase(s.utmpPath, teleportFakeUser)), "unexpected error: %v", err) + assert.True(collect, trace.IsNotFound(uacc.UserWithPtyInDatabase(s.wtmpPath, teleportFakeUser)), "unexpected error: %v", err) }, 5*time.Minute, time.Second, "did not detect btmp entry within 5 minutes") }) From ed032253dd9adcc4c8455b3b09d45eea371bbe9e Mon Sep 17 00:00:00 2001 From: Russell Jones Date: Wed, 4 Dec 2024 14:02:10 -0800 Subject: [PATCH 093/111] Added actionable errors for network issues. (#49246) (#49786) Added actionable errors for common network issues. Updated Application Access to use actionable errors. --- lib/srv/app/transport.go | 62 +++++++++++++++++++++++++++++++++++-- lib/utils/errors.go | 66 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 125 insertions(+), 3 deletions(-) diff --git a/lib/srv/app/transport.go b/lib/srv/app/transport.go index d019af70dbe9f..262ce70626825 100644 --- a/lib/srv/app/transport.go +++ b/lib/srv/app/transport.go @@ -21,12 +21,15 @@ package app import ( "context" "crypto/tls" + "io" "log/slog" "net" "net/http" "net/url" "path" "slices" + "strings" + "time" "github.com/gravitational/trace" @@ -97,6 +100,12 @@ func newTransport(ctx context.Context, c *transportConfig) (*transport, error) { if err != nil { return nil, trace.Wrap(err) } + + // Add a timeout to control how long it takes to (start) getting a response + // from the target server. This allows Teleport to show the user a helpful + // error message when the target service is slow in responding. + tr.ResponseHeaderTimeout = requestTimeout + tr.TLSClientConfig, err = configureTLS(c) if err != nil { return nil, trace.Wrap(err) @@ -143,15 +152,35 @@ func (t *transport) RoundTrip(r *http.Request) (*http.Response, error) { return nil, trace.Wrap(err) } - // Forward the request to the target application and emit an audit event. + // Forward the request to the target application. + // + // If a network error occurred when connecting to the target application, + // log and return a helpful error message to the user and Teleport + // administrator. resp, err := t.tr.RoundTrip(r) + if message, ok := utils.CanExplainNetworkError(err); ok { + if t.log.Enabled(r.Context(), slog.LevelDebug) { + t.log.DebugContext(r.Context(), "application request failed with a network error", + "raw_error", err, "human_error", strings.Join(strings.Fields(message), " ")) + } + + code := trace.ErrorToCode(err) + return &http.Response{ + StatusCode: code, + Status: http.StatusText(code), + Proto: r.Proto, + ProtoMajor: r.ProtoMajor, + ProtoMinor: r.ProtoMinor, + Body: io.NopCloser(strings.NewReader(charWrap(message))), + TLS: r.TLS, + }, nil + } if err != nil { return nil, trace.Wrap(err) } - status := uint32(resp.StatusCode) // Emit the event to the audit log. - if err := sessCtx.Audit.OnRequest(t.closeContext, sessCtx, r, status, nil /*aws endpoint*/); err != nil { + if err := sessCtx.Audit.OnRequest(t.closeContext, sessCtx, r, uint32(resp.StatusCode), nil /*aws endpoint*/); err != nil { return nil, trace.Wrap(err) } @@ -293,3 +322,30 @@ func host(addr string) string { } return host } + +// charWrap wraps a line to about 80 characters to make it easier to read. +func charWrap(message string) string { + var sb strings.Builder + for _, line := range strings.Split(message, "\n") { + var n int + for _, word := range strings.Fields(line) { + sb.WriteString(word) + sb.WriteString(" ") + + n += len(word) + 1 + if n > 80 { + sb.WriteString("\n") + n = 0 + } + } + sb.WriteString("\n") + } + return sb.String() +} + +const ( + // requestTimeout is the timeout to receive a response from the upstream + // server. Start it out large (not to break things) and slowly decrease it + // over time. + requestTimeout = 5 * time.Minute +) diff --git a/lib/utils/errors.go b/lib/utils/errors.go index cbbfd687348ca..a2ba2dc73a8dd 100644 --- a/lib/utils/errors.go +++ b/lib/utils/errors.go @@ -19,6 +19,7 @@ package utils import ( + "context" "errors" "io" "net" @@ -90,6 +91,71 @@ func IsUntrustedCertErr(err error) bool { strings.Contains(errMsg, "certificate is not trusted") } +// CanExplainNetworkError returns a simple to understand error message that can +// be used to debug common network and/or protocol errors. +func CanExplainNetworkError(err error) (string, bool) { + var derr *net.DNSError + + switch { + // Connection refused errors can be reproduced by attempting to connect to a + // host:port that no process is listening on. The raw error typically looks + // like the following: + // + // dial tcp 127.0.0.1:8000: connect: connection refused + case errors.Is(err, syscall.ECONNREFUSED): + return `Connection Refused + +Teleport was unable to connect to the requested host, possibly because the server is not running. Ensure the server is running and listening on the correct port. + +Use "nc -vz HOST PORT" to help debug this issue.`, true + // Host unreachable errors can be reproduced by running + // "ip route add unreachable HOST" to update the routing table to make + // the host unreachable. Packets will be discarded and an ICMP message + // will be returned. The raw error typically looks like the following: + // + // dial tcp 10.10.10.10:8000: connect: no route to host + case errors.Is(err, syscall.EHOSTUNREACH): + return `No Route to Host + +Teleport could not connect to the requested host, likely because there is no valid network path to reach it. Check the network routing table to ensure a valid path to the host exists. + +Use "ping HOST" and "ip route get HOST" to help debug this issue.`, true + // Connection reset errors can be reproduced by creating a HTTP server that + // accepts requests but closes the connection before writing a response. The + // raw error typically looks like the following: + // + // read tcp 127.0.0.1:49764->127.0.0.1:8000: read: connection reset by peer + case errors.Is(err, syscall.ECONNRESET): + return `Connection Reset by Peer + +Teleport could not complete the request because the server abruptly closed the connection before the response was received. To resolve this issue, ensure the server (or load balancer) does not have a timeout terminating the connection early and verify that the server is not crash looping. + +Use protocol-specific tools (e.g., curl, psql) to help debug this issue.`, true + // Slow responses can be reprodued by creating a HTTP server that does a + // time.Sleep before responding. The raw error typically looks like the following: + // + // context deadline exceeded + case errors.Is(err, context.DeadlineExceeded): + return `Context Deadline Exceeded + +Teleport did not receive a response within the timeout period, likely due to the system being overloaded, network congestion, or a firewall blocking traffic. To resolve this issue, connect to the host directly and ensure it is responding promptly. + +Use protocol-specific tools (e.g., curl, psql) to assist in debugging this issue.`, true + // No such host errors can be reproduced by attempting to resolve a invalid + // domain name. The raw error typically looks like the following: + // + // dial tcp: lookup qweqweqwe.com: no such host + case errors.As(err, &derr) && derr.IsNotFound: + return `No Such Host + +Teleport was unable to resolve the provided domain name, likely because the domain does not exist. To resolve this issue, verify the domain is correct and ensure the DNS resolver is properly resolving it. + +Use "dig +short HOST" to help debug this issue.`, true + } + + return "", false +} + const ( // SelfSignedCertsMsg is a helper message to point users towards helpful documentation. SelfSignedCertsMsg = "Your proxy certificate is not trusted or expired. " + From 65f435946ee582229e2f7167aab15cfe043541ed Mon Sep 17 00:00:00 2001 From: Alan Parra Date: Thu, 5 Dec 2024 06:05:27 -0300 Subject: [PATCH 094/111] fix: Avoid large unix socket paths on lib/service tests (#49673) (#49781) --- lib/service/service_test.go | 37 ++++++++++++++++++++++--------------- 1 file changed, 22 insertions(+), 15 deletions(-) diff --git a/lib/service/service_test.go b/lib/service/service_test.go index 1c7570d30920c..2010734d95318 100644 --- a/lib/service/service_test.go +++ b/lib/service/service_test.go @@ -99,7 +99,7 @@ func TestAdditionalExpectedRoles(t *testing.T) { name: "everything enabled", cfg: func() *servicecfg.Config { cfg := servicecfg.MakeDefaultConfig() - cfg.DataDir = t.TempDir() + cfg.DataDir = makeTempDir(t) cfg.SetAuthServerAddress(utils.NetAddr{AddrNetwork: "tcp", Addr: "127.0.0.1:0"}) cfg.Auth.StorageConfig.Params["path"] = t.TempDir() cfg.DiagnosticAddr = utils.NetAddr{AddrNetwork: "tcp", Addr: "127.0.0.1:0"} @@ -130,7 +130,7 @@ func TestAdditionalExpectedRoles(t *testing.T) { name: "everything enabled with additional roles", cfg: func() *servicecfg.Config { cfg := servicecfg.MakeDefaultConfig() - cfg.DataDir = t.TempDir() + cfg.DataDir = makeTempDir(t) cfg.SetAuthServerAddress(utils.NetAddr{AddrNetwork: "tcp", Addr: "127.0.0.1:0"}) cfg.Auth.StorageConfig.Params["path"] = t.TempDir() cfg.DiagnosticAddr = utils.NetAddr{AddrNetwork: "tcp", Addr: "127.0.0.1:0"} @@ -190,7 +190,7 @@ func TestDynamicClientReuse(t *testing.T) { cfg := servicecfg.MakeDefaultConfig() cfg.Clock = fakeClock - cfg.DataDir = t.TempDir() + cfg.DataDir = makeTempDir(t) cfg.SetAuthServerAddress(utils.NetAddr{AddrNetwork: "tcp", Addr: "127.0.0.1:0"}) cfg.Auth.Enabled = true cfg.Auth.ListenAddr = utils.NetAddr{AddrNetwork: "tcp", Addr: "127.0.0.1:0"} @@ -272,7 +272,7 @@ func TestMonitor(t *testing.T) { cfg := servicecfg.MakeDefaultConfig() cfg.Clock = fakeClock var err error - cfg.DataDir = t.TempDir() + cfg.DataDir = makeTempDir(t) cfg.DiagnosticAddr = utils.NetAddr{AddrNetwork: "tcp", Addr: "127.0.0.1:0"} cfg.SetAuthServerAddress(utils.NetAddr{AddrNetwork: "tcp", Addr: "127.0.0.1:0"}) cfg.Auth.Enabled = true @@ -782,7 +782,7 @@ func TestDesktopAccessFIPS(t *testing.T) { cfg := servicecfg.MakeDefaultConfig() cfg.SetAuthServerAddress(utils.NetAddr{AddrNetwork: "tcp", Addr: "127.0.0.1:0"}) cfg.Clock = clockwork.NewFakeClock() - cfg.DataDir = t.TempDir() + cfg.DataDir = makeTempDir(t) cfg.Auth.Enabled = false cfg.Proxy.Enabled = false cfg.SSH.Enabled = false @@ -907,7 +907,7 @@ func TestSetupProxyTLSConfig(t *testing.T) { cfg := servicecfg.MakeDefaultConfig() cfg.CircuitBreakerConfig = breaker.NoopBreakerConfig() cfg.Proxy.ACME.Enabled = tc.acmeEnabled - cfg.DataDir = t.TempDir() + cfg.DataDir = makeTempDir(t) cfg.Proxy.PublicAddrs = utils.MustParseAddrList("localhost") process := TeleportProcess{ Config: cfg, @@ -941,7 +941,7 @@ func TestTeleportProcess_reconnectToAuth(t *testing.T) { cfg := servicecfg.MakeDefaultConfig() cfg.SetAuthServerAddress(utils.NetAddr{AddrNetwork: "tcp", Addr: "127.0.0.1:0"}) cfg.Clock = clockwork.NewRealClock() - cfg.DataDir = t.TempDir() + cfg.DataDir = makeTempDir(t) cfg.Auth.Enabled = false cfg.Proxy.Enabled = false cfg.SSH.Enabled = true @@ -1009,7 +1009,7 @@ func TestTeleportProcessAuthVersionCheck(t *testing.T) { authCfg := servicecfg.MakeDefaultConfig() authCfg.SetAuthServerAddress(listenAddr) - authCfg.DataDir = t.TempDir() + authCfg.DataDir = makeTempDir(t) authCfg.Auth.Enabled = true authCfg.Auth.StaticTokens = staticTokens authCfg.Auth.StorageConfig.Type = lite.GetName() @@ -1031,7 +1031,7 @@ func TestTeleportProcessAuthVersionCheck(t *testing.T) { authListenAddr := authProc.Config.AuthServerAddresses()[0] nodeCfg := servicecfg.MakeDefaultConfig() nodeCfg.SetAuthServerAddress(authListenAddr) - nodeCfg.DataDir = t.TempDir() + nodeCfg.DataDir = makeTempDir(t) nodeCfg.SetToken(token) nodeCfg.Auth.Enabled = false nodeCfg.Proxy.Enabled = false @@ -1611,11 +1611,7 @@ func TestDebugServiceStartSocket(t *testing.T) { t.Parallel() fakeClock := clockwork.NewFakeClock() - var err error - dataDir, err := os.MkdirTemp("", "*") - require.NoError(t, err) - t.Cleanup(func() { os.RemoveAll(dataDir) }) - + dataDir := makeTempDir(t) cfg := servicecfg.MakeDefaultConfig() cfg.DebugService.Enabled = true cfg.Clock = fakeClock @@ -1738,7 +1734,7 @@ func TestInstanceMetadata(t *testing.T) { for _, tc := range tests { t.Run(tc.name, func(t *testing.T) { cfg := newCfg() - cfg.DataDir = t.TempDir() + cfg.DataDir = makeTempDir(t) cfg.Auth.StorageConfig.Params["path"] = t.TempDir() cfg.InstanceMetadataClient = tc.imClient @@ -1758,3 +1754,14 @@ func TestInstanceMetadata(t *testing.T) { }) } } + +// makeTempDir makes a temp dir with a shorter name than t.TempDir() in order to +// avoid https://github.com/golang/go/issues/62614. +func makeTempDir(t *testing.T) string { + t.Helper() + + tempDir, err := os.MkdirTemp("", "teleport-test-") + require.NoError(t, err, "os.MkdirTemp() failed") + t.Cleanup(func() { os.RemoveAll(tempDir) }) + return tempDir +} From f098d40d5f34090ea83d1f6db51c9ad04e67f7f1 Mon Sep 17 00:00:00 2001 From: Alan Parra Date: Thu, 5 Dec 2024 10:48:22 -0300 Subject: [PATCH 095/111] [v15] fix: Take TTL into account when renewing sessions (#49770) * fix: Take TTL into account when renewing sessions * Update comments --- .../src/services/websession/websession.ts | 27 +++++++++++++++---- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/web/packages/teleport/src/services/websession/websession.ts b/web/packages/teleport/src/services/websession/websession.ts index 51a2b3c5461bf..e59a893295505 100644 --- a/web/packages/teleport/src/services/websession/websession.ts +++ b/web/packages/teleport/src/services/websession/websession.ts @@ -26,9 +26,8 @@ import { KeysEnum, storageService } from 'teleport/services/storageService'; import makeBearerToken from './makeBearerToken'; import { RenewSessionRequest } from './types'; -// Time to determine when to renew session which is -// when expiry time of token is less than 3 minutes. -const RENEW_TOKEN_TIME = 180 * 1000; +const MAX_RENEW_TOKEN_TIME = 180000; // 3m +const MIN_RENEW_TOKEN_TIME = 30000; // 30s const TOKEN_CHECKER_INTERVAL = 15 * 1000; // every 15 sec const logger = Logger.create('services/session'); @@ -142,11 +141,14 @@ const session = { return false; } - // Renew session if token expiry time is less than 3 minutes. + // Renew session if token expiry time is less than renewTime (with MIN_ and + // MAX_RENEW_TOKEN_TIME as floor and ceiling, respectively). // Browsers have js timer throttling behavior in inactive tabs that can go // up to 100s between timer calls from testing. 3 minutes seems to be a safe number // with extra padding. - return this._timeLeft() < RENEW_TOKEN_TIME; + let renewTime = Math.min(this._ttl() / 10, MAX_RENEW_TOKEN_TIME); + renewTime = Math.max(renewTime, MIN_RENEW_TOKEN_TIME); + return this._timeLeft() < renewTime; }, _renewToken(req: RenewSessionRequest = {}, signal?: AbortSignal) { @@ -192,6 +194,21 @@ const session = { return delta; }, + _ttl() { + const token = this._getBearerToken(); + if (!token) { + return 0; + } + + let { expiresIn, created } = token; + if (!created || !expiresIn) { + return 0; + } + + expiresIn = expiresIn * 1000; + return expiresIn; + }, + _shouldCheckStatus() { if (this._getIsRenewing()) { return false; From 6d4631571999236ca351573967abccf1ef1d44bb Mon Sep 17 00:00:00 2001 From: Taras <9948629+taraspos@users.noreply.github.com> Date: Thu, 5 Dec 2024 15:21:21 +0000 Subject: [PATCH 096/111] [16.4.8] bump cloud docs (#49817) --- docs/config.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/config.json b/docs/config.json index c21fbea75eb3e..1cb4988b45a1e 100644 --- a/docs/config.json +++ b/docs/config.json @@ -134,7 +134,7 @@ "aws_secret_access_key": "zyxw9876-this-is-an-example" }, "cloud": { - "version": "16.4.7", + "version": "16.4.8", "major_version": "16", "sla": { "monthly_percentage": "99.9%", From 3d83f35c4faf77f2d2447536bb387c906ad0b823 Mon Sep 17 00:00:00 2001 From: Steven Martin Date: Thu, 5 Dec 2024 12:44:03 -0500 Subject: [PATCH 097/111] [v15] [web] Include node name or k8s cluster for session started audit entry display (#49834) * Include node name or k8s cluster for session started audit entry display * update for order of variable assignment * update web ui tests for audit * test update for audit web --- .../Audit/__snapshots__/Audit.story.test.tsx.snap | 2 +- .../teleport/src/services/audit/makeEvent.ts | 15 ++++++++++++++- web/packages/teleport/src/services/audit/types.ts | 5 +++++ 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/web/packages/teleport/src/Audit/__snapshots__/Audit.story.test.tsx.snap b/web/packages/teleport/src/Audit/__snapshots__/Audit.story.test.tsx.snap index ebc8b9cb72f2b..06a6e5cf686b7 100644 --- a/web/packages/teleport/src/Audit/__snapshots__/Audit.story.test.tsx.snap +++ b/web/packages/teleport/src/Audit/__snapshots__/Audit.story.test.tsx.snap @@ -12800,7 +12800,7 @@ exports[`list of all events 1`] = ` - User [admin@example.com] has started a session [56408539-6536-11e9-80a1-427cfde50f5a] + User [admin@example.com] has started a session [56408539-6536-11e9-80a1-427cfde50f5a] on node [de3800ea-69d9-4d72-a108-97e57f8eb393] `User [${user}] has started a session [${sid}]`, + format: event => { + const user = event.user || ''; + + if (event.proto === 'kube') { + if (!event.kubernetes_cluster) { + return `User [${user}] has started a Kubernetes session [${event.sid}]`; + } + return `User [${user}] has started a session [${event.sid}] on Kubernetes cluster [${event.kubernetes_cluster}]`; + } + + const node = + event.server_hostname || event.server_addr || event.server_id; + return `User [${user}] has started a session [${event.sid}] on node [${node}] `; + }, }, [eventCodes.SESSION_UPLOAD]: { type: 'session.upload', diff --git a/web/packages/teleport/src/services/audit/types.ts b/web/packages/teleport/src/services/audit/types.ts index d20c51ee63813..509ca2ab1d956 100644 --- a/web/packages/teleport/src/services/audit/types.ts +++ b/web/packages/teleport/src/services/audit/types.ts @@ -573,6 +573,11 @@ export type RawEvents = { typeof eventCodes.SESSION_START, { sid: string; + kubernetes_cluster: string; + proto: string; + server_hostname: string; + server_addr: string; + server_id: string; } >; [eventCodes.SESSION_REJECT]: RawEvent< From 1b3bc4a440c9f0c73ad6f1c33417f68efdda2b9a Mon Sep 17 00:00:00 2001 From: Hugo Shaka Date: Thu, 5 Dec 2024 17:09:15 -0500 Subject: [PATCH 098/111] [v15] Dynamically retrieve the cluster audiences (#49843) * Dynamically retrieve the cluster audiences * hard fail * remove unused variable * Address edoardo's feedback + ensure support of older kube versions * Address edoardo and tiago's feedback + dedup audiences * lint --- lib/kubernetestoken/token_validator.go | 71 ++++++++--- lib/kubernetestoken/token_validator_test.go | 125 ++++++++++++++++++-- 2 files changed, 170 insertions(+), 26 deletions(-) diff --git a/lib/kubernetestoken/token_validator.go b/lib/kubernetestoken/token_validator.go index 3d04392f2eeae..6e9316ed835ca 100644 --- a/lib/kubernetestoken/token_validator.go +++ b/lib/kubernetestoken/token_validator.go @@ -37,6 +37,7 @@ import ( "k8s.io/client-go/rest" "github.com/gravitational/teleport/api/types" + "github.com/gravitational/teleport/api/utils" ) const ( @@ -46,8 +47,6 @@ const ( // Kubernetes should support bound tokens on 1.20 and 1.21, // but we can have an apiserver running 1.21 and kubelets running 1.19. kubernetesBoundTokenSupportVersion = "1.22.0" - // kubernetesAudience is the Kubernetes default audience put on SA tokens if we don't specify one. - kubernetesAudience = "https://kubernetes.default.svc" ) type ValidationResult struct { @@ -85,35 +84,65 @@ func (c *ValidationResult) JoinAuditAttributes() (map[string]interface{}, error) // Kubernetes TokenRequest API endpoint. type TokenReviewValidator struct { mu sync.Mutex - // client is protected by mu and should only be accessed via the getClient - // method. + // client and clusterAudiences are protected by mu and should only be + // accessed via the getClient method. client kubernetes.Interface + // clusterAudiences contains the default Kubernetes cluster audiences. + // This field is populated when getting the Kube client and returned by + // getClient. + // A nil value indicates that the cluster doesn't support audiences. + clusterAudiences []string } -// getClient allows the lazy initialisation of the Kubernetes client -func (v *TokenReviewValidator) getClient() (kubernetes.Interface, error) { +// getClient allows the lazy initialisation of the Kubernetes client and clusterAudiences +func (v *TokenReviewValidator) getClient(_ context.Context) (kubernetes.Interface, []string, error) { v.mu.Lock() defer v.mu.Unlock() if v.client != nil { - return v.client, nil + return v.client, v.clusterAudiences, nil } config, err := rest.InClusterConfig() if err != nil { - return nil, trace.WrapWithMessage(err, "failed to initialize in-cluster Kubernetes config") + return nil, nil, trace.WrapWithMessage(err, "failed to initialize in-cluster Kubernetes config") } client, err := kubernetes.NewForConfig(config) if err != nil { - return nil, trace.WrapWithMessage(err, "failed to initialize in-cluster Kubernetes client") + return nil, nil, trace.WrapWithMessage(err, "failed to initialize in-cluster Kubernetes client") + } + + // We extract the audiences from our own token. This allows us to detect the default Kubernetes audiences. + audiences, err := unsafeGetTokenAudiences(config.BearerToken) + if err != nil { + return nil, nil, trace.Wrap(err, "doing a self-review") } v.client = client - return client, nil + v.clusterAudiences = audiences + return client, audiences, nil +} + +// unsafeGetTokenAudiences extracts the audience from the mounted token. +// THIS FUNCTION DOES NOT VALIDATE THE TOKEN SIGNATURE. +// Bound tokens always have audiences and the list will not be empty. +// Legacy tokens don't have audiences, the result will be an empty list and no error. +func unsafeGetTokenAudiences(token string) ([]string, error) { + jwt, err := josejwt.ParseSigned(token) + if err != nil { + return nil, trace.Wrap(err) + } + claims := &ServiceAccountClaims{} + err = jwt.UnsafeClaimsWithoutVerification(claims) + if err != nil { + return nil, trace.Wrap(err) + } + + return claims.Audience, nil } // Validate uses the Kubernetes TokenReview API to validate a token and return its UserInfo func (v *TokenReviewValidator) Validate(ctx context.Context, token, clusterName string) (*ValidationResult, error) { - client, err := v.getClient() + client, audiences, err := v.getClient(ctx) if err != nil { return nil, trace.Wrap(err) } @@ -121,13 +150,23 @@ func (v *TokenReviewValidator) Validate(ctx context.Context, token, clusterName review := &v1.TokenReview{ Spec: v1.TokenReviewSpec{ Token: token, - // In-cluster used to only allow tokens with the kubernetes audience - // But people kept confusing it with JWKS and set the cluster name - // as the audience/. To avoid his common footgun we now allow tokens - // whose audience is the teleport cluster name. - Audiences: []string{kubernetesAudience, clusterName}, }, } + + // In-cluster used to only allow tokens with the kubernetes audience but people + // kept confusing it with the JWKS kube join method and set the cluster name + // as the audience. To avoid his common footgun we now allow tokens whose + // audience is the teleport cluster name. + // + // We do this only if the Kubernetes cluster supports audiences. + // Earlier Kube versions don't have audience + // support, in this case, we just do a regular token review. + if len(audiences) > 0 { + // We deduplicate because the Teleport cluster name could be one of the default audiences + // And I really don't want to discover if sending the same audience multiple times is valid for Kubernetes. + review.Spec.Audiences = utils.Deduplicate(append([]string{clusterName}, audiences...)) + } + options := metav1.CreateOptions{} reviewResult, err := client.AuthenticationV1().TokenReviews().Create(ctx, review, options) diff --git a/lib/kubernetestoken/token_validator_test.go b/lib/kubernetestoken/token_validator_test.go index b00c1ed048f90..1795a4f369c24 100644 --- a/lib/kubernetestoken/token_validator_test.go +++ b/lib/kubernetestoken/token_validator_test.go @@ -42,7 +42,9 @@ import ( "github.com/gravitational/teleport/api/types" ) -const testClusterName = "teleport.example.com" +const ( + testClusterName = "teleport.example.com" +) var userGroups = []string{"system:serviceaccounts", "system:serviceaccounts:namespace", "system:authenticated"} @@ -59,7 +61,7 @@ var legacyTokenKubernetesVersion = version.Info{ } // tokenReviewMock creates a testing.ReactionFunc validating the tokenReview request and answering it -func tokenReviewMock(t *testing.T, reviewResult *v1.TokenReview) func(ctest.Action) (bool, runtime.Object, error) { +func tokenReviewMock(t *testing.T, reviewResult *v1.TokenReview, expectedAudiences []string) func(ctest.Action) (bool, runtime.Object, error) { return func(action ctest.Action) (bool, runtime.Object, error) { createAction, ok := action.(ctest.CreateAction) require.True(t, ok) @@ -68,7 +70,7 @@ func tokenReviewMock(t *testing.T, reviewResult *v1.TokenReview) func(ctest.Acti require.True(t, ok) require.Equal(t, reviewResult.Spec.Token, reviewRequest.Spec.Token) - require.ElementsMatch(t, reviewRequest.Spec.Audiences, []string{kubernetesAudience, testClusterName}) + require.ElementsMatch(t, expectedAudiences, reviewRequest.Spec.Audiences) return true, reviewResult, nil } } @@ -94,13 +96,82 @@ func (c *fakeClientSet) Discovery() discovery.DiscoveryInterface { return &c.discovery } +const ( + // The tokens below are test data to validate that we can extract audiences properly from tokens coming from + // different Kubernetes clusters versions. + // Those tokens are only test data and don't provide access to anything. The Kube clusters who generated them + // are long gone. + // If your scanner brought you here, please save everyone's time and DO NOT REPORT accidentally committed tokens. + + // this token has no audience + testDataLegacyToken = "eyJhbGciOiJSUzI1NiIsImtpZCI6IkRVdTJXUGNPLUthZjk2c3ZJcXhFWlBsRHUyUUx5cWxrUm1qT0s2VG9XQTAifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJkZWZhdWx0Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZWNyZXQubmFtZSI6InRlc3RzYS10b2tlbi1namZxYiIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJ0ZXN0c2EiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiIwYWY0YTc4Zi04ZjEwLTQ2ODUtYWMyOS1jYWUwODY1OWJjYWUiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6ZGVmYXVsdDp0ZXN0c2EifQ.Y683lBdmc5e0wvL3BPXj4hVkYXiu7M4bn2w1tvqIdrXdat3Fnqlv5Qgih3RS1VRETXDOMp3_CA8Jv7Nqe_PSIrBPvLStRYvvRByWDWY3PvYDfFxeARKj0E_AQnFkXQxEN21eXkJi3k0i93uhGGNvUr5bNpk7buMbD2UKt-y8N7sQmTIQ6nPdjaC3YHn32-MHpAquqwbTqXhETPrvk9RjSzE4jszcd_P1Gi7BdZoHPErnCc5XaEVBJnHiWsZCsJDL00nAaAS_Ru8TsIdX_z1pyp91sigxfvFrGwhns3oXq54rrhpBuloPwmDW0gWDAV-qjje5MPFuaiov431ocKrOsg\n" + // audience is defaultKubeAudiences + testDataBoundTokenKubeAudiences = "eyJhbGciOiJSUzI1NiIsImtpZCI6InY2VnNnUmdpVS1DNlZWaUVjLV9Wb1dCR2dpZVEtblV0RDFXQjVfY3JOckEifQ.eyJhdWQiOlsiaHR0cHM6Ly9rdWJlcm5ldGVzLmRlZmF1bHQuc3ZjLmNsdXN0ZXIubG9jYWwiLCJrM3MiXSwiZXhwIjoxNzY0OTQ3Mzc3LCJpYXQiOjE3MzM0MTEzNzcsImlzcyI6Imh0dHBzOi8va3ViZXJuZXRlcy5kZWZhdWx0LnN2Yy5jbHVzdGVyLmxvY2FsIiwianRpIjoiMjE4Y2I0ZGQtMzQyNS00Yzc0LThiODktNTRiNzIzNGRiMDE4Iiwia3ViZXJuZXRlcy5pbyI6eyJuYW1lc3BhY2UiOiJkZWZhdWx0Iiwibm9kZSI6eyJuYW1lIjoiazNkLWszcy1kZWZhdWx0LXNlcnZlci0wIiwidWlkIjoiZWMwMTUzZGUtMThiOC00OTk3LTg4ZGQtNjFiYzVmZTkzYThiIn0sInBvZCI6eyJuYW1lIjoiaHVnby10ZXN0LXBvZCIsInVpZCI6ImIxNjliZTdkLWNkYTItNGNhNy04ODVmLWMxNzJiMzZhNjUzNyJ9LCJzZXJ2aWNlYWNjb3VudCI6eyJuYW1lIjoiZGVmYXVsdCIsInVpZCI6IjQxMzgxNWFiLWNjZjctNDI4YS1iNjA4LTllNGUyYmU1OTc2ZiJ9LCJ3YXJuYWZ0ZXIiOjE3MzM0MTQ5ODR9LCJuYmYiOjE3MzM0MTEzNzcsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDpkZWZhdWx0OmRlZmF1bHQifQ.Cs3mekFZzEOk1Gj_w0seURuYC92aY5Xy9WdNz5LtyL0L0eKNnzTV5MNWHgAas--t8ABcvHtcbdS1-XSemqyDfn_GcNJXeZa88bX1PKyG-XdDuqfn40DRxrBXR_sim_2WUGJM2oNh6C6irHzUOQFU0Wmx4oWY3pZ_BSFUlDi3xKnPv-TFWroBVmtc_wLAbCBl5gZF1KngAgMlbdX0szBEwzewkeoFhDTh3OoNWRaRpJL7_YeZsBkKPGY107fFMDXIKmZtd6qyU8-yp3Wwn_1qwucfllNmru8_bncqN18RuDOoQyFej4R93NwntyfzGy1wQexR363QFd7veSgtBS7nJQ" + // audience is customKubeAudiences + testDataBoundTokenCustomAudiences = "eyJhbGciOiJSUzI1NiIsImtpZCI6InY2VnNnUmdpVS1DNlZWaUVjLV9Wb1dCR2dpZVEtblV0RDFXQjVfY3JOckEifQ.eyJhdWQiOlsidGVsZXBvcnQuZXhhbXBsZS5jb20iXSwiZXhwIjoxNzMzNDE2MDEyLCJpYXQiOjE3MzM0MTI0MDUsImlzcyI6Imh0dHBzOi8va3ViZXJuZXRlcy5kZWZhdWx0LnN2Yy5jbHVzdGVyLmxvY2FsIiwianRpIjoiZDE5Yjk2ZjctMTgyYy00ODVjLThkYWYtNzdkMTRhYzA4NmNlIiwia3ViZXJuZXRlcy5pbyI6eyJuYW1lc3BhY2UiOiJkZWZhdWx0Iiwibm9kZSI6eyJuYW1lIjoiazNkLWszcy1kZWZhdWx0LXNlcnZlci0wIiwidWlkIjoiZWMwMTUzZGUtMThiOC00OTk3LTg4ZGQtNjFiYzVmZTkzYThiIn0sInBvZCI6eyJuYW1lIjoiaHVnby10ZXN0LXBvZCIsInVpZCI6Ijc1ZTIwMmFjLTAwZWMtNDVmZC05ZGViLTgwM2JkODA0YjMxNSJ9LCJzZXJ2aWNlYWNjb3VudCI6eyJuYW1lIjoiZGVmYXVsdCIsInVpZCI6IjQxMzgxNWFiLWNjZjctNDI4YS1iNjA4LTllNGUyYmU1OTc2ZiJ9fSwibmJmIjoxNzMzNDEyNDA1LCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6ZGVmYXVsdDpkZWZhdWx0In0.QwhCSQzDrXBNjZU6X642FC_fzglaT80ldCFTXQEwR6IdPvPntjbSAZq8yN6arngctgM6wEh3buc7kq0awmytgF2hbeSRN6PEeRbVvKaAClnCPTzlJYnDq4FOYezqSBZ7jVCW3cNxeU0QCNwj5w8Xy1uxCJu24iWov-ElyxqiCkpa9FjiquOu4kHq9OErXe5ZmXmTDOILnQBzsZnbg-sBKTX-mNAHro8DwQCfFtPmW27iySaScIegqwZNHXbZJDWZYDB2uj3xuHzX75amgPWpfqUq4JaNkf-xlldaH3SdZa5hlL9zvV9e9Dwgqlnergq6EpEZNHmCPb9birQFn46n_w" +) + +var ( + defaultKubeAudiences = []string{"https://kubernetes.default.svc.cluster.local", "k3s"} + customKubeAudiences = []string{testClusterName} +) + +func TestGetTokenAudiences(t *testing.T) { + tests := []struct { + name string + token string + expectedAudiences []string + expectErr require.ErrorAssertionFunc + }{ + { + name: "legacy token with no audience", + token: testDataLegacyToken, + expectedAudiences: nil, + expectErr: require.NoError, + }, + { + name: "modern bound token with default kube audience", + token: testDataBoundTokenKubeAudiences, + expectedAudiences: defaultKubeAudiences, + expectErr: require.NoError, + }, + { + name: "modern bound token with custom audience", + token: testDataBoundTokenCustomAudiences, + expectedAudiences: customKubeAudiences, + expectErr: require.NoError, + }, + { + name: "broken token", + token: "asdfghjkl", + expectedAudiences: nil, + expectErr: require.Error, + }, + { + name: "no token", + token: "", + expectedAudiences: nil, + expectErr: require.Error, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + result, err := unsafeGetTokenAudiences(tt.token) + tt.expectErr(t, err) + assert.Equal(t, tt.expectedAudiences, result) + }) + } +} + func TestIDTokenValidator_Validate(t *testing.T) { tests := []struct { - token string - review *v1.TokenReview - kubeVersion *version.Info - wantResult *ValidationResult - expectedError error + token string + review *v1.TokenReview + kubeVersion *version.Info + wantResult *ValidationResult + clusterAudiences []string + expectedAudiences []string + expectedError error }{ { token: "valid", @@ -128,6 +199,39 @@ func TestIDTokenValidator_Validate(t *testing.T) { }, kubeVersion: &boundTokenKubernetesVersion, expectedError: nil, + // As the cluster doesn't have default audiences, we should not set + // the cluster name in the tokenReview request audiences. + expectedAudiences: nil, + }, + { + token: "valid-with-cluster-audiences", + review: &v1.TokenReview{ + Spec: v1.TokenReviewSpec{ + Token: "valid-with-cluster-audiences", + }, + Status: v1.TokenReviewStatus{ + Authenticated: true, + User: v1.UserInfo{ + Username: "system:serviceaccount:namespace:my-service-account", + UID: "sa-uuid", + Groups: userGroups, + Extra: map[string]v1.ExtraValue{ + "authentication.kubernetes.io/pod-name": {"podA"}, + "authentication.kubernetes.io/pod-uid": {"podA-uuid"}, + }, + }, + }, + }, + wantResult: &ValidationResult{ + Type: types.KubernetesJoinTypeInCluster, + Username: "system:serviceaccount:namespace:my-service-account", + // Raw will be filled in during test run to value of review + }, + kubeVersion: &boundTokenKubernetesVersion, + expectedError: nil, + clusterAudiences: defaultKubeAudiences, + // We check that the cluster name got added to the default kube cluster audiences + expectedAudiences: append([]string{testClusterName}, defaultKubeAudiences...), }, { token: "valid-not-bound", @@ -238,9 +342,10 @@ func TestIDTokenValidator_Validate(t *testing.T) { } client := newFakeClientset(tt.kubeVersion) - client.AddReactor("create", "tokenreviews", tokenReviewMock(t, tt.review)) + client.AddReactor("create", "tokenreviews", tokenReviewMock(t, tt.review, tt.expectedAudiences)) v := TokenReviewValidator{ - client: client, + client: client, + clusterAudiences: tt.clusterAudiences, } result, err := v.Validate(context.Background(), tt.token, testClusterName) if tt.expectedError != nil { From cfd98920d7b8978a8ca335e474860a4c67e5d039 Mon Sep 17 00:00:00 2001 From: Zac Bergquist Date: Thu, 5 Dec 2024 15:30:13 -0700 Subject: [PATCH 099/111] postrelease: automatically update the Go version (#49743) Extract the Go version from go.mod and use it when we update the version numbers used throughout the docs. This has several advantages: 1. We no longer need to remember to periodically update this variable. For example, Teleport 17 was built with Go 1.23 but the docs still (incorrectly) mention Go 1.22. 2. We get even more precision, as we'll start using the full patch version of Go instead of only the minor. --- .github/workflows/post-release.yaml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/post-release.yaml b/.github/workflows/post-release.yaml index 05e12675db625..9641d2c00758a 100644 --- a/.github/workflows/post-release.yaml +++ b/.github/workflows/post-release.yaml @@ -94,12 +94,17 @@ jobs: git config --global user.email "noreply@github.com" git config --global user.name "GitHub" + # get Go version from go.mod + GO_VERSION=$(go mod edit -json | jq -r .Go) + # update versions in docs/config.json # for docker images replace version number after : jq --arg major "${MAJOR_VERSION}" \ --arg version "${FULL_VERSION}" \ + --arg go_version "${GO_VERSION}" \ '.variables.teleport.major_version |= $major | .variables.teleport.version |= $version | + .variables.teleport.golang |= $go_version | .variables.teleport.plugin.version |= $version | .variables.teleport.latest_oss_docker_image |= sub(":.*";":")+$version | .variables.teleport.latest_oss_debug_docker_image |= sub(":.*";":")+$version | From 5f57fde34580f36c17769dfd80f1fa085012a57c Mon Sep 17 00:00:00 2001 From: Cam Hutchison Date: Fri, 6 Dec 2024 12:12:37 +1100 Subject: [PATCH 100/111] Release 15.4.23 (#49857) * Update e ref for 15.4.23 release * Release 15.4.23 * Add GSSAPI and unmanaged to cspell dictionary --- CHANGELOG.md | 31 +++++++++ Makefile | 2 +- api/version.go | 2 +- .../macos/tsh/tsh.app/Contents/Info.plist | 4 +- .../macos/tshdev/tsh.app/Contents/Info.plist | 4 +- docs/cspell.json | 2 + e | 2 +- examples/chart/access/discord/Chart.yaml | 2 +- .../__snapshot__/configmap_test.yaml.snap | 4 +- .../__snapshot__/deployment_test.yaml.snap | 8 +-- examples/chart/access/email/Chart.yaml | 2 +- .../__snapshot__/configmap_test.yaml.snap | 24 +++---- .../__snapshot__/deployment_test.yaml.snap | 58 ++++++++--------- examples/chart/access/jira/Chart.yaml | 2 +- .../__snapshot__/configmap_test.yaml.snap | 4 +- .../__snapshot__/deployment_test.yaml.snap | 8 +-- examples/chart/access/mattermost/Chart.yaml | 2 +- .../__snapshot__/configmap_test.yaml.snap | 4 +- .../__snapshot__/deployment_test.yaml.snap | 28 ++++---- examples/chart/access/msteams/Chart.yaml | 2 +- .../__snapshot__/configmap_test.yaml.snap | 4 +- .../__snapshot__/deployment_test.yaml.snap | 8 +-- examples/chart/access/pagerduty/Chart.yaml | 2 +- .../__snapshot__/configmap_test.yaml.snap | 4 +- .../__snapshot__/deployment_test.yaml.snap | 8 +-- examples/chart/access/slack/Chart.yaml | 2 +- .../__snapshot__/configmap_test.yaml.snap | 4 +- .../__snapshot__/deployment_test.yaml.snap | 8 +-- examples/chart/event-handler/Chart.yaml | 2 +- .../__snapshot__/configmap_test.yaml.snap | 4 +- .../__snapshot__/deployment_test.yaml.snap | 6 +- examples/chart/tbot/Chart.yaml | 2 +- .../__snapshot__/deployment_test.yaml.snap | 8 +-- examples/chart/teleport-cluster/Chart.yaml | 2 +- .../charts/teleport-operator/Chart.yaml | 2 +- .../auth_clusterrole_test.yaml.snap | 4 +- .../__snapshot__/auth_config_test.yaml.snap | 4 +- .../auth_deployment_test.yaml.snap | 8 +-- .../__snapshot__/proxy_config_test.yaml.snap | 4 +- .../proxy_deployment_test.yaml.snap | 36 +++++------ examples/chart/teleport-kube-agent/Chart.yaml | 2 +- .../__snapshot__/deployment_test.yaml.snap | 58 ++++++++--------- .../tests/__snapshot__/job_test.yaml.snap | 12 ++-- .../__snapshot__/statefulset_test.yaml.snap | 64 +++++++++---------- .../updater_deployment_test.yaml.snap | 4 +- 45 files changed, 245 insertions(+), 212 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index adfad91e9ed45..2fb83c2df1e43 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,36 @@ # Changelog +## 15.4.23 (12/5/2024) + +* Fixed a bug breaking in-cluster joining on some Kubernetes clusters. [#49843](https://github.com/gravitational/teleport/pull/49843) +* SSH or Kubernetes information is now included for audit log list for start session events. [#49834](https://github.com/gravitational/teleport/pull/49834) +* Avoid tight web session renewals for sessions with short TTL (between 3m and 30s). [#49770](https://github.com/gravitational/teleport/pull/49770) +* Updated Go to 1.22.10. [#49760](https://github.com/gravitational/teleport/pull/49760) +* Added ability to configure resource labels in `teleport-cluster`'s operator sub-chart. [#49649](https://github.com/gravitational/teleport/pull/49649) +* Fixed proxy peering listener not using the exact address specified in `peer_listen_addr`. [#49591](https://github.com/gravitational/teleport/pull/49591) +* Kubernetes in-cluster joining now also accepts tokens whose audience is the Teleport cluster name (before it only allowed the default Kubernetes audience). Kubernetes JWKS joining is unchanged and still requires tokens with the cluster name in the audience. [#49558](https://github.com/gravitational/teleport/pull/49558) +* Restore interactive PAM authentication functionality when `use_pam_auth` is applied. [#49520](https://github.com/gravitational/teleport/pull/49520) +* Increase CockroachDB setup timeout from 5 to 30 seconds. This mitigates the Auth Service not being able to configure TTL on slow CockroachDB event backends. [#49471](https://github.com/gravitational/teleport/pull/49471) +* Fixed a potential panic in login rule and SAML IdP expression parser. [#49432](https://github.com/gravitational/teleport/pull/49432) +* Support for long-running kube exec/port-forward, respect `client_idle_timeout` config. [#49430](https://github.com/gravitational/teleport/pull/49430) +* Fixed a permissions error with Postgres database user auto-provisioning that occurs when the database admin is not a superuser and the database is upgraded to Postgres v16 or higher. [#49391](https://github.com/gravitational/teleport/pull/49391) +* Fixed missing user participants in session recordings listing for non-interactive Kubernetes recordings. [#49345](https://github.com/gravitational/teleport/pull/49345) +* Fixed an issue where `teleport park` processes could be leaked causing runaway resource usage. [#49262](https://github.com/gravitational/teleport/pull/49262) +* The `tsh puttyconfig` command now disables GSSAPI auth settings to avoid a "Not Responding" condition in PuTTY. [#49191](https://github.com/gravitational/teleport/pull/49191) +* Allow Azure VMs to join from a different subscription than their managed identity. [#49158](https://github.com/gravitational/teleport/pull/49158) +* Fixed an issue loading the license file when Teleport is started without a configuration file. [#49148](https://github.com/gravitational/teleport/pull/49148) +* Fixed a bug in the `teleport-cluster` Helm chart that can cause token mount to fail when using ArgoCD. [#49070](https://github.com/gravitational/teleport/pull/49070) +* Fixed an issue resulting in excess cpu usage and connection resets when teleport-event-handler is under moderate to high load. [#49035](https://github.com/gravitational/teleport/pull/49035) +* Fixed OpenSSH remote port forwarding not working for localhost. [#49021](https://github.com/gravitational/teleport/pull/49021) +* Allow to override Teleport license secret name when using `teleport-cluster` Helm chart. [#48980](https://github.com/gravitational/teleport/pull/48980) +* Fixed users not being able to connect to SQL server instances with PKINIT integration when the cluster is configured with different CAs for database access. [#48925](https://github.com/gravitational/teleport/pull/48925) +* Ensure that agentless server information is provided in all audit events. [#48835](https://github.com/gravitational/teleport/pull/48835) +* Fixed an issue preventing migration of unmanaged users to Teleport host users when including `teleport-keep` in a role's `host_groups`. [#48456](https://github.com/gravitational/teleport/pull/48456) +* Resolved an issue that caused false positive errors incorrectly indicating that the YubiKey was in use by another application, while only tsh was accessing it. [#47953](https://github.com/gravitational/teleport/pull/47953) + +Enterprise: +* Jamf Service sync audit events are attributed to "Jamf Service". + ## 15.4.22 (11/12/24) * Added a search input to the cluster dropdown in the Web UI when there's more than five clusters to show. [#48800](https://github.com/gravitational/teleport/pull/48800) diff --git a/Makefile b/Makefile index 578bab0d20fa1..8b891ccbfb7b3 100644 --- a/Makefile +++ b/Makefile @@ -11,7 +11,7 @@ # Stable releases: "1.0.0" # Pre-releases: "1.0.0-alpha.1", "1.0.0-beta.2", "1.0.0-rc.3" # Master/dev branch: "1.0.0-dev" -VERSION=15.4.22 +VERSION=15.4.23 DOCKER_IMAGE ?= teleport diff --git a/api/version.go b/api/version.go index 3b15a9ac03a5d..6d5b2e578d05c 100644 --- a/api/version.go +++ b/api/version.go @@ -3,6 +3,6 @@ package api import "github.com/coreos/go-semver/semver" -const Version = "15.4.22" +const Version = "15.4.23" var SemVersion = semver.New(Version) diff --git a/build.assets/macos/tsh/tsh.app/Contents/Info.plist b/build.assets/macos/tsh/tsh.app/Contents/Info.plist index 7ccf3354f4873..27528e22384c4 100644 --- a/build.assets/macos/tsh/tsh.app/Contents/Info.plist +++ b/build.assets/macos/tsh/tsh.app/Contents/Info.plist @@ -19,13 +19,13 @@ CFBundlePackageType APPL CFBundleShortVersionString - 15.4.22 + 15.4.23 CFBundleSupportedPlatforms MacOSX CFBundleVersion - 15.4.22 + 15.4.23 DTCompiler com.apple.compilers.llvm.clang.1_0 DTPlatformBuild diff --git a/build.assets/macos/tshdev/tsh.app/Contents/Info.plist b/build.assets/macos/tshdev/tsh.app/Contents/Info.plist index 844bd12b7b84f..ef93d20cb6cd7 100644 --- a/build.assets/macos/tshdev/tsh.app/Contents/Info.plist +++ b/build.assets/macos/tshdev/tsh.app/Contents/Info.plist @@ -17,13 +17,13 @@ CFBundlePackageType APPL CFBundleShortVersionString - 15.4.22 + 15.4.23 CFBundleSupportedPlatforms MacOSX CFBundleVersion - 15.4.22 + 15.4.23 DTCompiler com.apple.compilers.llvm.clang.1_0 DTPlatformBuild diff --git a/docs/cspell.json b/docs/cspell.json index ef0760dd761a6..07081b37e4245 100644 --- a/docs/cspell.json +++ b/docs/cspell.json @@ -82,6 +82,7 @@ "GODEBUG", "GOMAXPROCS", "GSLB", + "GSSAPI", "Gbps", "Ghostunnel", "Goland", @@ -932,6 +933,7 @@ "unconfigured", "uninstallation", "uniqueid", + "unmanaged", "unmarshal", "unprefixed", "unregistering", diff --git a/e b/e index 3420913eb7e67..a8393fdf07cb5 160000 --- a/e +++ b/e @@ -1 +1 @@ -Subproject commit 3420913eb7e67f8020cea6dc163e92a134af577b +Subproject commit a8393fdf07cb5614ad5d78b9e6eb67a93e1abb8c diff --git a/examples/chart/access/discord/Chart.yaml b/examples/chart/access/discord/Chart.yaml index 1ae60c9747dea..c429329b1f5e4 100644 --- a/examples/chart/access/discord/Chart.yaml +++ b/examples/chart/access/discord/Chart.yaml @@ -1,4 +1,4 @@ -.version: &version "15.4.22" +.version: &version "15.4.23" apiVersion: v2 name: teleport-plugin-discord diff --git a/examples/chart/access/discord/tests/__snapshot__/configmap_test.yaml.snap b/examples/chart/access/discord/tests/__snapshot__/configmap_test.yaml.snap index 7c762b9f4fce1..69992eb0744e2 100644 --- a/examples/chart/access/discord/tests/__snapshot__/configmap_test.yaml.snap +++ b/examples/chart/access/discord/tests/__snapshot__/configmap_test.yaml.snap @@ -24,6 +24,6 @@ should match the snapshot: app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-discord - app.kubernetes.io/version: 15.4.22 - helm.sh/chart: teleport-plugin-discord-15.4.22 + app.kubernetes.io/version: 15.4.23 + helm.sh/chart: teleport-plugin-discord-15.4.23 name: RELEASE-NAME-teleport-plugin-discord diff --git a/examples/chart/access/discord/tests/__snapshot__/deployment_test.yaml.snap b/examples/chart/access/discord/tests/__snapshot__/deployment_test.yaml.snap index bf714f0695534..28f9a34b27df1 100644 --- a/examples/chart/access/discord/tests/__snapshot__/deployment_test.yaml.snap +++ b/examples/chart/access/discord/tests/__snapshot__/deployment_test.yaml.snap @@ -7,8 +7,8 @@ should match the snapshot: app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-discord - app.kubernetes.io/version: 15.4.22 - helm.sh/chart: teleport-plugin-discord-15.4.22 + app.kubernetes.io/version: 15.4.23 + helm.sh/chart: teleport-plugin-discord-15.4.23 name: RELEASE-NAME-teleport-plugin-discord spec: replicas: 1 @@ -22,8 +22,8 @@ should match the snapshot: app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-discord - app.kubernetes.io/version: 15.4.22 - helm.sh/chart: teleport-plugin-discord-15.4.22 + app.kubernetes.io/version: 15.4.23 + helm.sh/chart: teleport-plugin-discord-15.4.23 spec: containers: - command: diff --git a/examples/chart/access/email/Chart.yaml b/examples/chart/access/email/Chart.yaml index aeaef830d7e9b..dce75acc89ac6 100644 --- a/examples/chart/access/email/Chart.yaml +++ b/examples/chart/access/email/Chart.yaml @@ -1,4 +1,4 @@ -.version: &version "15.4.22" +.version: &version "15.4.23" apiVersion: v2 name: teleport-plugin-email diff --git a/examples/chart/access/email/tests/__snapshot__/configmap_test.yaml.snap b/examples/chart/access/email/tests/__snapshot__/configmap_test.yaml.snap index 77919ca4c16b2..a78bc97f42572 100644 --- a/examples/chart/access/email/tests/__snapshot__/configmap_test.yaml.snap +++ b/examples/chart/access/email/tests/__snapshot__/configmap_test.yaml.snap @@ -26,8 +26,8 @@ should match the snapshot (mailgun on): app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-email - app.kubernetes.io/version: 15.4.22 - helm.sh/chart: teleport-plugin-email-15.4.22 + app.kubernetes.io/version: 15.4.23 + helm.sh/chart: teleport-plugin-email-15.4.23 name: RELEASE-NAME-teleport-plugin-email should match the snapshot (smtp on): 1: | @@ -59,8 +59,8 @@ should match the snapshot (smtp on): app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-email - app.kubernetes.io/version: 15.4.22 - helm.sh/chart: teleport-plugin-email-15.4.22 + app.kubernetes.io/version: 15.4.23 + helm.sh/chart: teleport-plugin-email-15.4.23 name: RELEASE-NAME-teleport-plugin-email should match the snapshot (smtp on, no starttls): 1: | @@ -92,8 +92,8 @@ should match the snapshot (smtp on, no starttls): app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-email - app.kubernetes.io/version: 15.4.22 - helm.sh/chart: teleport-plugin-email-15.4.22 + app.kubernetes.io/version: 15.4.23 + helm.sh/chart: teleport-plugin-email-15.4.23 name: RELEASE-NAME-teleport-plugin-email should match the snapshot (smtp on, password file): 1: | @@ -125,8 +125,8 @@ should match the snapshot (smtp on, password file): app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-email - app.kubernetes.io/version: 15.4.22 - helm.sh/chart: teleport-plugin-email-15.4.22 + app.kubernetes.io/version: 15.4.23 + helm.sh/chart: teleport-plugin-email-15.4.23 name: RELEASE-NAME-teleport-plugin-email should match the snapshot (smtp on, roleToRecipients set): 1: | @@ -161,8 +161,8 @@ should match the snapshot (smtp on, roleToRecipients set): app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-email - app.kubernetes.io/version: 15.4.22 - helm.sh/chart: teleport-plugin-email-15.4.22 + app.kubernetes.io/version: 15.4.23 + helm.sh/chart: teleport-plugin-email-15.4.23 name: RELEASE-NAME-teleport-plugin-email should match the snapshot (smtp on, starttls disabled): 1: | @@ -194,6 +194,6 @@ should match the snapshot (smtp on, starttls disabled): app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-email - app.kubernetes.io/version: 15.4.22 - helm.sh/chart: teleport-plugin-email-15.4.22 + app.kubernetes.io/version: 15.4.23 + helm.sh/chart: teleport-plugin-email-15.4.23 name: RELEASE-NAME-teleport-plugin-email diff --git a/examples/chart/access/email/tests/__snapshot__/deployment_test.yaml.snap b/examples/chart/access/email/tests/__snapshot__/deployment_test.yaml.snap index c93a7b5dd82b6..c3570da6c1ee0 100644 --- a/examples/chart/access/email/tests/__snapshot__/deployment_test.yaml.snap +++ b/examples/chart/access/email/tests/__snapshot__/deployment_test.yaml.snap @@ -7,8 +7,8 @@ should be possible to override volume name (smtp on): app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-email - app.kubernetes.io/version: 15.4.22 - helm.sh/chart: teleport-plugin-email-15.4.22 + app.kubernetes.io/version: 15.4.23 + helm.sh/chart: teleport-plugin-email-15.4.23 name: RELEASE-NAME-teleport-plugin-email spec: replicas: 1 @@ -22,8 +22,8 @@ should be possible to override volume name (smtp on): app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-email - app.kubernetes.io/version: 15.4.22 - helm.sh/chart: teleport-plugin-email-15.4.22 + app.kubernetes.io/version: 15.4.23 + helm.sh/chart: teleport-plugin-email-15.4.23 spec: containers: - command: @@ -34,7 +34,7 @@ should be possible to override volume name (smtp on): env: - name: TELEPORT_PLUGIN_FAIL_FAST value: "true" - image: public.ecr.aws/gravitational/teleport-plugin-email:15.4.22 + image: public.ecr.aws/gravitational/teleport-plugin-email:15.4.23 imagePullPolicy: IfNotPresent name: teleport-plugin-email ports: @@ -75,8 +75,8 @@ should match the snapshot: app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-email - app.kubernetes.io/version: 15.4.22 - helm.sh/chart: teleport-plugin-email-15.4.22 + app.kubernetes.io/version: 15.4.23 + helm.sh/chart: teleport-plugin-email-15.4.23 name: RELEASE-NAME-teleport-plugin-email spec: replicas: 1 @@ -90,8 +90,8 @@ should match the snapshot: app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-email - app.kubernetes.io/version: 15.4.22 - helm.sh/chart: teleport-plugin-email-15.4.22 + app.kubernetes.io/version: 15.4.23 + helm.sh/chart: teleport-plugin-email-15.4.23 spec: containers: - command: @@ -136,8 +136,8 @@ should match the snapshot (mailgun on): app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-email - app.kubernetes.io/version: 15.4.22 - helm.sh/chart: teleport-plugin-email-15.4.22 + app.kubernetes.io/version: 15.4.23 + helm.sh/chart: teleport-plugin-email-15.4.23 name: RELEASE-NAME-teleport-plugin-email spec: replicas: 1 @@ -151,8 +151,8 @@ should match the snapshot (mailgun on): app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-email - app.kubernetes.io/version: 15.4.22 - helm.sh/chart: teleport-plugin-email-15.4.22 + app.kubernetes.io/version: 15.4.23 + helm.sh/chart: teleport-plugin-email-15.4.23 spec: containers: - command: @@ -163,7 +163,7 @@ should match the snapshot (mailgun on): env: - name: TELEPORT_PLUGIN_FAIL_FAST value: "true" - image: public.ecr.aws/gravitational/teleport-plugin-email:15.4.22 + image: public.ecr.aws/gravitational/teleport-plugin-email:15.4.23 imagePullPolicy: IfNotPresent name: teleport-plugin-email ports: @@ -204,8 +204,8 @@ should match the snapshot (smtp on): app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-email - app.kubernetes.io/version: 15.4.22 - helm.sh/chart: teleport-plugin-email-15.4.22 + app.kubernetes.io/version: 15.4.23 + helm.sh/chart: teleport-plugin-email-15.4.23 name: RELEASE-NAME-teleport-plugin-email spec: replicas: 1 @@ -219,8 +219,8 @@ should match the snapshot (smtp on): app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-email - app.kubernetes.io/version: 15.4.22 - helm.sh/chart: teleport-plugin-email-15.4.22 + app.kubernetes.io/version: 15.4.23 + helm.sh/chart: teleport-plugin-email-15.4.23 spec: containers: - command: @@ -231,7 +231,7 @@ should match the snapshot (smtp on): env: - name: TELEPORT_PLUGIN_FAIL_FAST value: "true" - image: public.ecr.aws/gravitational/teleport-plugin-email:15.4.22 + image: public.ecr.aws/gravitational/teleport-plugin-email:15.4.23 imagePullPolicy: IfNotPresent name: teleport-plugin-email ports: @@ -272,8 +272,8 @@ should mount external secret (mailgun on): app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-email - app.kubernetes.io/version: 15.4.22 - helm.sh/chart: teleport-plugin-email-15.4.22 + app.kubernetes.io/version: 15.4.23 + helm.sh/chart: teleport-plugin-email-15.4.23 name: RELEASE-NAME-teleport-plugin-email spec: replicas: 1 @@ -287,8 +287,8 @@ should mount external secret (mailgun on): app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-email - app.kubernetes.io/version: 15.4.22 - helm.sh/chart: teleport-plugin-email-15.4.22 + app.kubernetes.io/version: 15.4.23 + helm.sh/chart: teleport-plugin-email-15.4.23 spec: containers: - command: @@ -299,7 +299,7 @@ should mount external secret (mailgun on): env: - name: TELEPORT_PLUGIN_FAIL_FAST value: "true" - image: public.ecr.aws/gravitational/teleport-plugin-email:15.4.22 + image: public.ecr.aws/gravitational/teleport-plugin-email:15.4.23 imagePullPolicy: IfNotPresent name: teleport-plugin-email ports: @@ -340,8 +340,8 @@ should mount external secret (smtp on): app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-email - app.kubernetes.io/version: 15.4.22 - helm.sh/chart: teleport-plugin-email-15.4.22 + app.kubernetes.io/version: 15.4.23 + helm.sh/chart: teleport-plugin-email-15.4.23 name: RELEASE-NAME-teleport-plugin-email spec: replicas: 1 @@ -355,8 +355,8 @@ should mount external secret (smtp on): app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-email - app.kubernetes.io/version: 15.4.22 - helm.sh/chart: teleport-plugin-email-15.4.22 + app.kubernetes.io/version: 15.4.23 + helm.sh/chart: teleport-plugin-email-15.4.23 spec: containers: - command: @@ -367,7 +367,7 @@ should mount external secret (smtp on): env: - name: TELEPORT_PLUGIN_FAIL_FAST value: "true" - image: public.ecr.aws/gravitational/teleport-plugin-email:15.4.22 + image: public.ecr.aws/gravitational/teleport-plugin-email:15.4.23 imagePullPolicy: IfNotPresent name: teleport-plugin-email ports: diff --git a/examples/chart/access/jira/Chart.yaml b/examples/chart/access/jira/Chart.yaml index 445b00f549675..7edb5a9076d14 100644 --- a/examples/chart/access/jira/Chart.yaml +++ b/examples/chart/access/jira/Chart.yaml @@ -1,4 +1,4 @@ -.version: &version "15.4.22" +.version: &version "15.4.23" apiVersion: v2 name: teleport-plugin-jira diff --git a/examples/chart/access/jira/tests/__snapshot__/configmap_test.yaml.snap b/examples/chart/access/jira/tests/__snapshot__/configmap_test.yaml.snap index 9ff7d0f4c5734..9cb720bafe428 100644 --- a/examples/chart/access/jira/tests/__snapshot__/configmap_test.yaml.snap +++ b/examples/chart/access/jira/tests/__snapshot__/configmap_test.yaml.snap @@ -32,6 +32,6 @@ should match the snapshot (smtp on): app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-jira - app.kubernetes.io/version: 15.4.22 - helm.sh/chart: teleport-plugin-jira-15.4.22 + app.kubernetes.io/version: 15.4.23 + helm.sh/chart: teleport-plugin-jira-15.4.23 name: RELEASE-NAME-teleport-plugin-jira diff --git a/examples/chart/access/jira/tests/__snapshot__/deployment_test.yaml.snap b/examples/chart/access/jira/tests/__snapshot__/deployment_test.yaml.snap index bb3ba35aba489..a70357f5ff8c8 100644 --- a/examples/chart/access/jira/tests/__snapshot__/deployment_test.yaml.snap +++ b/examples/chart/access/jira/tests/__snapshot__/deployment_test.yaml.snap @@ -7,8 +7,8 @@ should match the snapshot: app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-jira - app.kubernetes.io/version: 15.4.22 - helm.sh/chart: teleport-plugin-jira-15.4.22 + app.kubernetes.io/version: 15.4.23 + helm.sh/chart: teleport-plugin-jira-15.4.23 name: RELEASE-NAME-teleport-plugin-jira spec: replicas: 1 @@ -22,8 +22,8 @@ should match the snapshot: app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-jira - app.kubernetes.io/version: 15.4.22 - helm.sh/chart: teleport-plugin-jira-15.4.22 + app.kubernetes.io/version: 15.4.23 + helm.sh/chart: teleport-plugin-jira-15.4.23 spec: containers: - command: diff --git a/examples/chart/access/mattermost/Chart.yaml b/examples/chart/access/mattermost/Chart.yaml index c45e60cf9441b..1ef9b8d9c09a5 100644 --- a/examples/chart/access/mattermost/Chart.yaml +++ b/examples/chart/access/mattermost/Chart.yaml @@ -1,4 +1,4 @@ -.version: &version "15.4.22" +.version: &version "15.4.23" apiVersion: v2 name: teleport-plugin-mattermost diff --git a/examples/chart/access/mattermost/tests/__snapshot__/configmap_test.yaml.snap b/examples/chart/access/mattermost/tests/__snapshot__/configmap_test.yaml.snap index 44ce898fcef36..5906a54338974 100644 --- a/examples/chart/access/mattermost/tests/__snapshot__/configmap_test.yaml.snap +++ b/examples/chart/access/mattermost/tests/__snapshot__/configmap_test.yaml.snap @@ -22,6 +22,6 @@ should match the snapshot: app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-mattermost - app.kubernetes.io/version: 15.4.22 - helm.sh/chart: teleport-plugin-mattermost-15.4.22 + app.kubernetes.io/version: 15.4.23 + helm.sh/chart: teleport-plugin-mattermost-15.4.23 name: RELEASE-NAME-teleport-plugin-mattermost diff --git a/examples/chart/access/mattermost/tests/__snapshot__/deployment_test.yaml.snap b/examples/chart/access/mattermost/tests/__snapshot__/deployment_test.yaml.snap index 86041dc3262e4..cbaed3561fffd 100644 --- a/examples/chart/access/mattermost/tests/__snapshot__/deployment_test.yaml.snap +++ b/examples/chart/access/mattermost/tests/__snapshot__/deployment_test.yaml.snap @@ -7,8 +7,8 @@ should match the snapshot: app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-mattermost - app.kubernetes.io/version: 15.4.22 - helm.sh/chart: teleport-plugin-mattermost-15.4.22 + app.kubernetes.io/version: 15.4.23 + helm.sh/chart: teleport-plugin-mattermost-15.4.23 name: RELEASE-NAME-teleport-plugin-mattermost spec: replicas: 1 @@ -22,8 +22,8 @@ should match the snapshot: app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-mattermost - app.kubernetes.io/version: 15.4.22 - helm.sh/chart: teleport-plugin-mattermost-15.4.22 + app.kubernetes.io/version: 15.4.23 + helm.sh/chart: teleport-plugin-mattermost-15.4.23 spec: containers: - command: @@ -75,8 +75,8 @@ should mount external secret: app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-mattermost - app.kubernetes.io/version: 15.4.22 - helm.sh/chart: teleport-plugin-mattermost-15.4.22 + app.kubernetes.io/version: 15.4.23 + helm.sh/chart: teleport-plugin-mattermost-15.4.23 name: RELEASE-NAME-teleport-plugin-mattermost spec: replicas: 1 @@ -90,8 +90,8 @@ should mount external secret: app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-mattermost - app.kubernetes.io/version: 15.4.22 - helm.sh/chart: teleport-plugin-mattermost-15.4.22 + app.kubernetes.io/version: 15.4.23 + helm.sh/chart: teleport-plugin-mattermost-15.4.23 spec: containers: - command: @@ -102,7 +102,7 @@ should mount external secret: env: - name: TELEPORT_PLUGIN_FAIL_FAST value: "true" - image: public.ecr.aws/gravitational/teleport-plugin-mattermost:15.4.22 + image: public.ecr.aws/gravitational/teleport-plugin-mattermost:15.4.23 imagePullPolicy: IfNotPresent name: teleport-plugin-mattermost ports: @@ -143,8 +143,8 @@ should override volume name: app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-mattermost - app.kubernetes.io/version: 15.4.22 - helm.sh/chart: teleport-plugin-mattermost-15.4.22 + app.kubernetes.io/version: 15.4.23 + helm.sh/chart: teleport-plugin-mattermost-15.4.23 name: RELEASE-NAME-teleport-plugin-mattermost spec: replicas: 1 @@ -158,8 +158,8 @@ should override volume name: app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-mattermost - app.kubernetes.io/version: 15.4.22 - helm.sh/chart: teleport-plugin-mattermost-15.4.22 + app.kubernetes.io/version: 15.4.23 + helm.sh/chart: teleport-plugin-mattermost-15.4.23 spec: containers: - command: @@ -170,7 +170,7 @@ should override volume name: env: - name: TELEPORT_PLUGIN_FAIL_FAST value: "true" - image: public.ecr.aws/gravitational/teleport-plugin-mattermost:15.4.22 + image: public.ecr.aws/gravitational/teleport-plugin-mattermost:15.4.23 imagePullPolicy: IfNotPresent name: teleport-plugin-mattermost ports: diff --git a/examples/chart/access/msteams/Chart.yaml b/examples/chart/access/msteams/Chart.yaml index 0786ffc445d8f..3bb8c57ccc069 100644 --- a/examples/chart/access/msteams/Chart.yaml +++ b/examples/chart/access/msteams/Chart.yaml @@ -1,4 +1,4 @@ -.version: &version "15.4.22" +.version: &version "15.4.23" apiVersion: v2 name: teleport-plugin-msteams diff --git a/examples/chart/access/msteams/tests/__snapshot__/configmap_test.yaml.snap b/examples/chart/access/msteams/tests/__snapshot__/configmap_test.yaml.snap index 78c7237f71437..6389299b15482 100644 --- a/examples/chart/access/msteams/tests/__snapshot__/configmap_test.yaml.snap +++ b/examples/chart/access/msteams/tests/__snapshot__/configmap_test.yaml.snap @@ -29,6 +29,6 @@ should match the snapshot: app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-msteams - app.kubernetes.io/version: 15.4.22 - helm.sh/chart: teleport-plugin-msteams-15.4.22 + app.kubernetes.io/version: 15.4.23 + helm.sh/chart: teleport-plugin-msteams-15.4.23 name: RELEASE-NAME-teleport-plugin-msteams diff --git a/examples/chart/access/msteams/tests/__snapshot__/deployment_test.yaml.snap b/examples/chart/access/msteams/tests/__snapshot__/deployment_test.yaml.snap index 15bc22f6e03be..29a094855162f 100644 --- a/examples/chart/access/msteams/tests/__snapshot__/deployment_test.yaml.snap +++ b/examples/chart/access/msteams/tests/__snapshot__/deployment_test.yaml.snap @@ -7,8 +7,8 @@ should match the snapshot: app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-msteams - app.kubernetes.io/version: 15.4.22 - helm.sh/chart: teleport-plugin-msteams-15.4.22 + app.kubernetes.io/version: 15.4.23 + helm.sh/chart: teleport-plugin-msteams-15.4.23 name: RELEASE-NAME-teleport-plugin-msteams spec: replicas: 1 @@ -22,8 +22,8 @@ should match the snapshot: app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-msteams - app.kubernetes.io/version: 15.4.22 - helm.sh/chart: teleport-plugin-msteams-15.4.22 + app.kubernetes.io/version: 15.4.23 + helm.sh/chart: teleport-plugin-msteams-15.4.23 spec: containers: - command: diff --git a/examples/chart/access/pagerduty/Chart.yaml b/examples/chart/access/pagerduty/Chart.yaml index 2f57994ad3f8d..82a4e7c8c76b8 100644 --- a/examples/chart/access/pagerduty/Chart.yaml +++ b/examples/chart/access/pagerduty/Chart.yaml @@ -1,4 +1,4 @@ -.version: &version "15.4.22" +.version: &version "15.4.23" apiVersion: v2 name: teleport-plugin-pagerduty diff --git a/examples/chart/access/pagerduty/tests/__snapshot__/configmap_test.yaml.snap b/examples/chart/access/pagerduty/tests/__snapshot__/configmap_test.yaml.snap index 688217eb53714..25ba6fae1b121 100644 --- a/examples/chart/access/pagerduty/tests/__snapshot__/configmap_test.yaml.snap +++ b/examples/chart/access/pagerduty/tests/__snapshot__/configmap_test.yaml.snap @@ -21,6 +21,6 @@ should match the snapshot (smtp on): app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-pagerduty - app.kubernetes.io/version: 15.4.22 - helm.sh/chart: teleport-plugin-pagerduty-15.4.22 + app.kubernetes.io/version: 15.4.23 + helm.sh/chart: teleport-plugin-pagerduty-15.4.23 name: RELEASE-NAME-teleport-plugin-pagerduty diff --git a/examples/chart/access/pagerduty/tests/__snapshot__/deployment_test.yaml.snap b/examples/chart/access/pagerduty/tests/__snapshot__/deployment_test.yaml.snap index d056ffed5ab8f..b468fd2f536b4 100644 --- a/examples/chart/access/pagerduty/tests/__snapshot__/deployment_test.yaml.snap +++ b/examples/chart/access/pagerduty/tests/__snapshot__/deployment_test.yaml.snap @@ -7,8 +7,8 @@ should match the snapshot: app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-pagerduty - app.kubernetes.io/version: 15.4.22 - helm.sh/chart: teleport-plugin-pagerduty-15.4.22 + app.kubernetes.io/version: 15.4.23 + helm.sh/chart: teleport-plugin-pagerduty-15.4.23 name: RELEASE-NAME-teleport-plugin-pagerduty spec: replicas: 1 @@ -22,8 +22,8 @@ should match the snapshot: app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-pagerduty - app.kubernetes.io/version: 15.4.22 - helm.sh/chart: teleport-plugin-pagerduty-15.4.22 + app.kubernetes.io/version: 15.4.23 + helm.sh/chart: teleport-plugin-pagerduty-15.4.23 spec: containers: - command: diff --git a/examples/chart/access/slack/Chart.yaml b/examples/chart/access/slack/Chart.yaml index 033d2bc4d8b54..79f18f8966b13 100644 --- a/examples/chart/access/slack/Chart.yaml +++ b/examples/chart/access/slack/Chart.yaml @@ -1,4 +1,4 @@ -.version: &version "15.4.22" +.version: &version "15.4.23" apiVersion: v2 name: teleport-plugin-slack diff --git a/examples/chart/access/slack/tests/__snapshot__/configmap_test.yaml.snap b/examples/chart/access/slack/tests/__snapshot__/configmap_test.yaml.snap index ddb5e8e07920a..6f4f198c85ca2 100644 --- a/examples/chart/access/slack/tests/__snapshot__/configmap_test.yaml.snap +++ b/examples/chart/access/slack/tests/__snapshot__/configmap_test.yaml.snap @@ -24,6 +24,6 @@ should match the snapshot: app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-slack - app.kubernetes.io/version: 15.4.22 - helm.sh/chart: teleport-plugin-slack-15.4.22 + app.kubernetes.io/version: 15.4.23 + helm.sh/chart: teleport-plugin-slack-15.4.23 name: RELEASE-NAME-teleport-plugin-slack diff --git a/examples/chart/access/slack/tests/__snapshot__/deployment_test.yaml.snap b/examples/chart/access/slack/tests/__snapshot__/deployment_test.yaml.snap index 0c1b5bf336c1e..4412d89d0ceef 100644 --- a/examples/chart/access/slack/tests/__snapshot__/deployment_test.yaml.snap +++ b/examples/chart/access/slack/tests/__snapshot__/deployment_test.yaml.snap @@ -7,8 +7,8 @@ should match the snapshot: app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-slack - app.kubernetes.io/version: 15.4.22 - helm.sh/chart: teleport-plugin-slack-15.4.22 + app.kubernetes.io/version: 15.4.23 + helm.sh/chart: teleport-plugin-slack-15.4.23 name: RELEASE-NAME-teleport-plugin-slack spec: replicas: 1 @@ -22,8 +22,8 @@ should match the snapshot: app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-slack - app.kubernetes.io/version: 15.4.22 - helm.sh/chart: teleport-plugin-slack-15.4.22 + app.kubernetes.io/version: 15.4.23 + helm.sh/chart: teleport-plugin-slack-15.4.23 spec: containers: - command: diff --git a/examples/chart/event-handler/Chart.yaml b/examples/chart/event-handler/Chart.yaml index 50aa6186917fe..e5c7122ebc7d1 100644 --- a/examples/chart/event-handler/Chart.yaml +++ b/examples/chart/event-handler/Chart.yaml @@ -1,4 +1,4 @@ -.version: &version "15.4.22" +.version: &version "15.4.23" apiVersion: v2 name: teleport-plugin-event-handler diff --git a/examples/chart/event-handler/tests/__snapshot__/configmap_test.yaml.snap b/examples/chart/event-handler/tests/__snapshot__/configmap_test.yaml.snap index 14f9a4edaec9a..c3e7df7d5481a 100644 --- a/examples/chart/event-handler/tests/__snapshot__/configmap_test.yaml.snap +++ b/examples/chart/event-handler/tests/__snapshot__/configmap_test.yaml.snap @@ -26,6 +26,6 @@ should match the snapshot: app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-event-handler - app.kubernetes.io/version: 15.4.22 - helm.sh/chart: teleport-plugin-event-handler-15.4.22 + app.kubernetes.io/version: 15.4.23 + helm.sh/chart: teleport-plugin-event-handler-15.4.23 name: RELEASE-NAME-teleport-plugin-event-handler diff --git a/examples/chart/event-handler/tests/__snapshot__/deployment_test.yaml.snap b/examples/chart/event-handler/tests/__snapshot__/deployment_test.yaml.snap index 96d18275e1982..79661fd78453f 100644 --- a/examples/chart/event-handler/tests/__snapshot__/deployment_test.yaml.snap +++ b/examples/chart/event-handler/tests/__snapshot__/deployment_test.yaml.snap @@ -7,8 +7,8 @@ should match the snapshot: app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-event-handler - app.kubernetes.io/version: 15.4.22 - helm.sh/chart: teleport-plugin-event-handler-15.4.22 + app.kubernetes.io/version: 15.4.23 + helm.sh/chart: teleport-plugin-event-handler-15.4.23 name: RELEASE-NAME-teleport-plugin-event-handler spec: replicas: 1 @@ -82,7 +82,7 @@ should mount tls.existingCASecretName and set environment when set in values: value: "true" - name: SSL_CERT_FILE value: /etc/teleport-tls-ca/ca.pem - image: public.ecr.aws/gravitational/teleport-plugin-event-handler:15.4.22 + image: public.ecr.aws/gravitational/teleport-plugin-event-handler:15.4.23 imagePullPolicy: IfNotPresent name: teleport-plugin-event-handler ports: diff --git a/examples/chart/tbot/Chart.yaml b/examples/chart/tbot/Chart.yaml index 4fb3ce59e3be6..dd57cd2e65657 100644 --- a/examples/chart/tbot/Chart.yaml +++ b/examples/chart/tbot/Chart.yaml @@ -1,4 +1,4 @@ -.version: &version "15.4.22" +.version: &version "15.4.23" name: tbot apiVersion: v2 diff --git a/examples/chart/tbot/tests/__snapshot__/deployment_test.yaml.snap b/examples/chart/tbot/tests/__snapshot__/deployment_test.yaml.snap index 06cc288ce8c5d..054433732d6e5 100644 --- a/examples/chart/tbot/tests/__snapshot__/deployment_test.yaml.snap +++ b/examples/chart/tbot/tests/__snapshot__/deployment_test.yaml.snap @@ -29,7 +29,7 @@ should match the snapshot (full): app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: tbot - helm.sh/chart: tbot-15.4.22 + helm.sh/chart: tbot-15.4.23 test-key: test-label-pod spec: affinity: @@ -68,7 +68,7 @@ should match the snapshot (full): value: "1" - name: TEST_ENV value: test-value - image: public.ecr.aws/gravitational/tbot-distroless:15.4.22 + image: public.ecr.aws/gravitational/tbot-distroless:15.4.23 imagePullPolicy: Always livenessProbe: failureThreshold: 6 @@ -154,7 +154,7 @@ should match the snapshot (simple): app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: tbot - helm.sh/chart: tbot-15.4.22 + helm.sh/chart: tbot-15.4.23 spec: containers: - args: @@ -176,7 +176,7 @@ should match the snapshot (simple): fieldPath: spec.nodeName - name: KUBERNETES_TOKEN_PATH value: /var/run/secrets/tokens/join-sa-token - image: public.ecr.aws/gravitational/tbot-distroless:15.4.22 + image: public.ecr.aws/gravitational/tbot-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 diff --git a/examples/chart/teleport-cluster/Chart.yaml b/examples/chart/teleport-cluster/Chart.yaml index 7cc3e6c160a98..440b4dc48a773 100644 --- a/examples/chart/teleport-cluster/Chart.yaml +++ b/examples/chart/teleport-cluster/Chart.yaml @@ -1,4 +1,4 @@ -.version: &version "15.4.22" +.version: &version "15.4.23" name: teleport-cluster apiVersion: v2 diff --git a/examples/chart/teleport-cluster/charts/teleport-operator/Chart.yaml b/examples/chart/teleport-cluster/charts/teleport-operator/Chart.yaml index d2345bd10688f..ca501a7651dff 100644 --- a/examples/chart/teleport-cluster/charts/teleport-operator/Chart.yaml +++ b/examples/chart/teleport-cluster/charts/teleport-operator/Chart.yaml @@ -1,4 +1,4 @@ -.version: &version "15.4.22" +.version: &version "15.4.23" name: teleport-operator apiVersion: v2 diff --git a/examples/chart/teleport-cluster/tests/__snapshot__/auth_clusterrole_test.yaml.snap b/examples/chart/teleport-cluster/tests/__snapshot__/auth_clusterrole_test.yaml.snap index 9aec9fba079f1..01314ca6ae8c5 100644 --- a/examples/chart/teleport-cluster/tests/__snapshot__/auth_clusterrole_test.yaml.snap +++ b/examples/chart/teleport-cluster/tests/__snapshot__/auth_clusterrole_test.yaml.snap @@ -8,8 +8,8 @@ adds operator permissions to ClusterRole: app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-cluster - app.kubernetes.io/version: 15.4.22 - helm.sh/chart: teleport-cluster-15.4.22 + app.kubernetes.io/version: 15.4.23 + helm.sh/chart: teleport-cluster-15.4.23 teleport.dev/majorVersion: "15" name: RELEASE-NAME rules: diff --git a/examples/chart/teleport-cluster/tests/__snapshot__/auth_config_test.yaml.snap b/examples/chart/teleport-cluster/tests/__snapshot__/auth_config_test.yaml.snap index 5bba6df05106b..7a7367b31ecd3 100644 --- a/examples/chart/teleport-cluster/tests/__snapshot__/auth_config_test.yaml.snap +++ b/examples/chart/teleport-cluster/tests/__snapshot__/auth_config_test.yaml.snap @@ -1848,8 +1848,8 @@ sets clusterDomain on Configmap: app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-cluster - app.kubernetes.io/version: 15.4.22 - helm.sh/chart: teleport-cluster-15.4.22 + app.kubernetes.io/version: 15.4.23 + helm.sh/chart: teleport-cluster-15.4.23 teleport.dev/majorVersion: "15" name: RELEASE-NAME-auth namespace: NAMESPACE diff --git a/examples/chart/teleport-cluster/tests/__snapshot__/auth_deployment_test.yaml.snap b/examples/chart/teleport-cluster/tests/__snapshot__/auth_deployment_test.yaml.snap index 8623604cdf3cb..b2c07900c4cb4 100644 --- a/examples/chart/teleport-cluster/tests/__snapshot__/auth_deployment_test.yaml.snap +++ b/examples/chart/teleport-cluster/tests/__snapshot__/auth_deployment_test.yaml.snap @@ -8,7 +8,7 @@ - args: - --diag-addr=0.0.0.0:3000 - --apply-on-startup=/etc/teleport/apply-on-startup.yaml - image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent lifecycle: preStop: @@ -141,7 +141,7 @@ should set nodeSelector when set in values: - args: - --diag-addr=0.0.0.0:3000 - --apply-on-startup=/etc/teleport/apply-on-startup.yaml - image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent lifecycle: preStop: @@ -238,7 +238,7 @@ should set resources when set in values: - args: - --diag-addr=0.0.0.0:3000 - --apply-on-startup=/etc/teleport/apply-on-startup.yaml - image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent lifecycle: preStop: @@ -324,7 +324,7 @@ should set securityContext when set in values: - args: - --diag-addr=0.0.0.0:3000 - --apply-on-startup=/etc/teleport/apply-on-startup.yaml - image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent lifecycle: preStop: diff --git a/examples/chart/teleport-cluster/tests/__snapshot__/proxy_config_test.yaml.snap b/examples/chart/teleport-cluster/tests/__snapshot__/proxy_config_test.yaml.snap index a2c4c5f6bf9a2..6325a7ba9cc9a 100644 --- a/examples/chart/teleport-cluster/tests/__snapshot__/proxy_config_test.yaml.snap +++ b/examples/chart/teleport-cluster/tests/__snapshot__/proxy_config_test.yaml.snap @@ -567,8 +567,8 @@ sets clusterDomain on Configmap: app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-cluster - app.kubernetes.io/version: 15.4.22 - helm.sh/chart: teleport-cluster-15.4.22 + app.kubernetes.io/version: 15.4.23 + helm.sh/chart: teleport-cluster-15.4.23 teleport.dev/majorVersion: "15" name: RELEASE-NAME-proxy namespace: NAMESPACE diff --git a/examples/chart/teleport-cluster/tests/__snapshot__/proxy_deployment_test.yaml.snap b/examples/chart/teleport-cluster/tests/__snapshot__/proxy_deployment_test.yaml.snap index 40a446d292d9f..ada05f4705ca1 100644 --- a/examples/chart/teleport-cluster/tests/__snapshot__/proxy_deployment_test.yaml.snap +++ b/examples/chart/teleport-cluster/tests/__snapshot__/proxy_deployment_test.yaml.snap @@ -11,8 +11,8 @@ sets clusterDomain on Deployment Pods: app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-cluster - app.kubernetes.io/version: 15.4.22 - helm.sh/chart: teleport-cluster-15.4.22 + app.kubernetes.io/version: 15.4.23 + helm.sh/chart: teleport-cluster-15.4.23 teleport.dev/majorVersion: "15" name: RELEASE-NAME-proxy namespace: NAMESPACE @@ -26,7 +26,7 @@ sets clusterDomain on Deployment Pods: template: metadata: annotations: - checksum/config: a09773e9538ade08dafc8de61fc5d0cc721d89b5dcfefd11c9df1f5934d04546 + checksum/config: ad7b0a3d0684475676991c8017b6cb4d9c79fc8e1d68985be48e623b02d7b25d kubernetes.io/pod: test-annotation kubernetes.io/pod-different: 4 labels: @@ -34,8 +34,8 @@ sets clusterDomain on Deployment Pods: app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-cluster - app.kubernetes.io/version: 15.4.22 - helm.sh/chart: teleport-cluster-15.4.22 + app.kubernetes.io/version: 15.4.23 + helm.sh/chart: teleport-cluster-15.4.23 teleport.dev/majorVersion: "15" spec: affinity: @@ -44,7 +44,7 @@ sets clusterDomain on Deployment Pods: containers: - args: - --diag-addr=0.0.0.0:3000 - image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent lifecycle: preStop: @@ -105,7 +105,7 @@ sets clusterDomain on Deployment Pods: - wait - no-resolve - RELEASE-NAME-auth-v14.NAMESPACE.svc.test.com - image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 name: wait-auth-update serviceAccountName: RELEASE-NAME-proxy terminationGracePeriodSeconds: 60 @@ -137,7 +137,7 @@ should provision initContainer correctly when set in values: - wait - no-resolve - RELEASE-NAME-auth-v14.NAMESPACE.svc.cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 name: wait-auth-update resources: limits: @@ -201,7 +201,7 @@ should set nodeSelector when set in values: containers: - args: - --diag-addr=0.0.0.0:3000 - image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent lifecycle: preStop: @@ -262,7 +262,7 @@ should set nodeSelector when set in values: - wait - no-resolve - RELEASE-NAME-auth-v14.NAMESPACE.svc.cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 name: wait-auth-update nodeSelector: environment: security @@ -313,7 +313,7 @@ should set resources for wait-auth-update initContainer when set in values: containers: - args: - --diag-addr=0.0.0.0:3000 - image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent lifecycle: preStop: @@ -381,7 +381,7 @@ should set resources for wait-auth-update initContainer when set in values: - wait - no-resolve - RELEASE-NAME-auth-v14.NAMESPACE.svc.cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 name: wait-auth-update resources: limits: @@ -421,7 +421,7 @@ should set resources when set in values: containers: - args: - --diag-addr=0.0.0.0:3000 - image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent lifecycle: preStop: @@ -489,7 +489,7 @@ should set resources when set in values: - wait - no-resolve - RELEASE-NAME-auth-v14.NAMESPACE.svc.cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 name: wait-auth-update resources: limits: @@ -529,7 +529,7 @@ should set securityContext for initContainers when set in values: containers: - args: - --diag-addr=0.0.0.0:3000 - image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent lifecycle: preStop: @@ -597,7 +597,7 @@ should set securityContext for initContainers when set in values: - wait - no-resolve - RELEASE-NAME-auth-v14.NAMESPACE.svc.cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 name: wait-auth-update securityContext: allowPrivilegeEscalation: false @@ -637,7 +637,7 @@ should set securityContext when set in values: containers: - args: - --diag-addr=0.0.0.0:3000 - image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent lifecycle: preStop: @@ -705,7 +705,7 @@ should set securityContext when set in values: - wait - no-resolve - RELEASE-NAME-auth-v14.NAMESPACE.svc.cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 name: wait-auth-update securityContext: allowPrivilegeEscalation: false diff --git a/examples/chart/teleport-kube-agent/Chart.yaml b/examples/chart/teleport-kube-agent/Chart.yaml index 45b5cd6359297..bf04759b70a27 100644 --- a/examples/chart/teleport-kube-agent/Chart.yaml +++ b/examples/chart/teleport-kube-agent/Chart.yaml @@ -1,4 +1,4 @@ -.version: &version "15.4.22" +.version: &version "15.4.23" name: teleport-kube-agent apiVersion: v2 diff --git a/examples/chart/teleport-kube-agent/tests/__snapshot__/deployment_test.yaml.snap b/examples/chart/teleport-kube-agent/tests/__snapshot__/deployment_test.yaml.snap index 34b3edbdbb24f..6372972cdb87e 100644 --- a/examples/chart/teleport-kube-agent/tests/__snapshot__/deployment_test.yaml.snap +++ b/examples/chart/teleport-kube-agent/tests/__snapshot__/deployment_test.yaml.snap @@ -32,7 +32,7 @@ sets Deployment annotations when specified if action is Upgrade: value: "true" - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -107,7 +107,7 @@ sets Deployment labels when specified if action is Upgrade: value: "true" - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -169,7 +169,7 @@ sets Pod annotations when specified if action is Upgrade: value: "true" - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -231,7 +231,7 @@ sets Pod labels when specified if action is Upgrade: value: "true" - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -310,7 +310,7 @@ should add emptyDir for data when existingDataVolume is not set if action is Upg value: "true" - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -373,7 +373,7 @@ should add insecureSkipProxyTLSVerify to args when set in values if action is Up value: "true" - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -435,7 +435,7 @@ should correctly configure existingDataVolume when set if action is Upgrade: value: "true" - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -495,7 +495,7 @@ should expose diag port if action is Upgrade: value: "true" - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -569,7 +569,7 @@ should have multiple replicas when replicaCount is set (using .replicaCount, dep value: "true" - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -643,7 +643,7 @@ should have multiple replicas when replicaCount is set (using highAvailability.r value: "true" - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -705,7 +705,7 @@ should have one replica when replicaCount is not set if action is Upgrade: value: "true" - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -767,7 +767,7 @@ should mount extraVolumes and extraVolumeMounts if action is Upgrade: value: "true" - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -836,7 +836,7 @@ should mount tls.existingCASecretName and set environment when set in values if value: cluster.local - name: SSL_CERT_FILE value: /etc/teleport-tls-ca/ca.pem - image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -908,7 +908,7 @@ should mount tls.existingCASecretName and set extra environment when set in valu value: http://username:password@my.proxy.host:3128 - name: SSL_CERT_FILE value: /etc/teleport-tls-ca/ca.pem - image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -976,7 +976,7 @@ should provision initContainer correctly when set in values if action is Upgrade value: "true" - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -1074,7 +1074,7 @@ should set SecurityContext if action is Upgrade: value: "true" - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -1156,7 +1156,7 @@ should set affinity when set in values if action is Upgrade: value: "true" - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -1218,7 +1218,7 @@ should set default serviceAccountName when not set in values if action is Upgrad value: "true" - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -1293,7 +1293,7 @@ should set environment when extraEnv set in values if action is Upgrade: value: cluster.local - name: HTTPS_PROXY value: http://username:password@my.proxy.host:3128 - image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -1417,7 +1417,7 @@ should set imagePullPolicy when set in values if action is Upgrade: value: "true" - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: Always livenessProbe: failureThreshold: 6 @@ -1479,7 +1479,7 @@ should set nodeSelector if set in values if action is Upgrade: value: "true" - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -1543,7 +1543,7 @@ should set not set priorityClassName when not set in values if action is Upgrade value: "true" - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -1617,7 +1617,7 @@ should set preferred affinity when more than one replica is used if action is Up value: "true" - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -1679,7 +1679,7 @@ should set priorityClassName when set in values if action is Upgrade: value: "true" - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -1742,7 +1742,7 @@ should set probeTimeoutSeconds when set in values if action is Upgrade: value: "true" - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -1814,7 +1814,7 @@ should set required affinity when highAvailability.requireAntiAffinity is set if value: "true" - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -1876,7 +1876,7 @@ should set resources when set in values if action is Upgrade: value: "true" - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -1945,7 +1945,7 @@ should set serviceAccountName when set in values if action is Upgrade: value: "true" - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -2007,7 +2007,7 @@ should set tolerations when set in values if action is Upgrade: value: "true" - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 diff --git a/examples/chart/teleport-kube-agent/tests/__snapshot__/job_test.yaml.snap b/examples/chart/teleport-kube-agent/tests/__snapshot__/job_test.yaml.snap index 494e746228aae..62a120d9248ce 100644 --- a/examples/chart/teleport-kube-agent/tests/__snapshot__/job_test.yaml.snap +++ b/examples/chart/teleport-kube-agent/tests/__snapshot__/job_test.yaml.snap @@ -25,7 +25,7 @@ should create ServiceAccount for post-delete hook by default: fieldPath: metadata.namespace - name: RELEASE_NAME value: RELEASE-NAME - image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent name: post-delete-job securityContext: @@ -106,7 +106,7 @@ should not create ServiceAccount for post-delete hook if serviceAccount.create i fieldPath: metadata.namespace - name: RELEASE_NAME value: RELEASE-NAME - image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent name: post-delete-job securityContext: @@ -134,7 +134,7 @@ should not create ServiceAccount, Role or RoleBinding for post-delete hook if se fieldPath: metadata.namespace - name: RELEASE_NAME value: RELEASE-NAME - image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent name: post-delete-job securityContext: @@ -162,7 +162,7 @@ should set nodeSelector in post-delete hook: fieldPath: metadata.namespace - name: RELEASE_NAME value: RELEASE-NAME - image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent name: post-delete-job securityContext: @@ -192,7 +192,7 @@ should set resources in the Job's pod spec if resources is set in values: fieldPath: metadata.namespace - name: RELEASE_NAME value: RELEASE-NAME - image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent name: post-delete-job resources: @@ -227,7 +227,7 @@ should set securityContext in post-delete hook: fieldPath: metadata.namespace - name: RELEASE_NAME value: RELEASE-NAME - image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent name: post-delete-job securityContext: diff --git a/examples/chart/teleport-kube-agent/tests/__snapshot__/statefulset_test.yaml.snap b/examples/chart/teleport-kube-agent/tests/__snapshot__/statefulset_test.yaml.snap index c4080bbc19243..7364bebb7b023 100644 --- a/examples/chart/teleport-kube-agent/tests/__snapshot__/statefulset_test.yaml.snap +++ b/examples/chart/teleport-kube-agent/tests/__snapshot__/statefulset_test.yaml.snap @@ -18,7 +18,7 @@ sets Pod annotations when specified: value: RELEASE-NAME - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -88,7 +88,7 @@ sets Pod labels when specified: value: RELEASE-NAME - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -182,7 +182,7 @@ sets StatefulSet labels when specified: value: RELEASE-NAME - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -280,7 +280,7 @@ should add insecureSkipProxyTLSVerify to args when set in values: value: RELEASE-NAME - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -350,7 +350,7 @@ should add volumeClaimTemplate for data volume when using StatefulSet and action value: RELEASE-NAME - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -440,7 +440,7 @@ should add volumeClaimTemplate for data volume when using StatefulSet and is Fre value: RELEASE-NAME - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -520,7 +520,7 @@ should add volumeMount for data volume when using StatefulSet: value: RELEASE-NAME - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -590,7 +590,7 @@ should expose diag port: value: RELEASE-NAME - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -660,7 +660,7 @@ should generate Statefulset when storage is disabled and mode is a Upgrade: value: RELEASE-NAME - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -744,7 +744,7 @@ should have multiple replicas when replicaCount is set (using .replicaCount, dep value: RELEASE-NAME - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -826,7 +826,7 @@ should have multiple replicas when replicaCount is set (using highAvailability.r value: RELEASE-NAME - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -896,7 +896,7 @@ should have one replica when replicaCount is not set: value: RELEASE-NAME - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -966,7 +966,7 @@ should install Statefulset when storage is disabled and mode is a Fresh Install: value: RELEASE-NAME - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -1038,7 +1038,7 @@ should mount extraVolumes and extraVolumeMounts: value: RELEASE-NAME - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -1115,7 +1115,7 @@ should mount tls.existingCASecretName and set environment when set in values: value: cluster.local - name: SSL_CERT_FILE value: /etc/teleport-tls-ca/ca.pem - image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -1197,7 +1197,7 @@ should mount tls.existingCASecretName and set extra environment when set in valu value: /etc/teleport-tls-ca/ca.pem - name: HTTPS_PROXY value: http://username:password@my.proxy.host:3128 - image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -1275,7 +1275,7 @@ should not add emptyDir for data when using StatefulSet: value: RELEASE-NAME - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -1345,7 +1345,7 @@ should provision initContainer correctly when set in values: value: RELEASE-NAME - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -1451,7 +1451,7 @@ should set SecurityContext: value: RELEASE-NAME - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -1541,7 +1541,7 @@ should set affinity when set in values: value: RELEASE-NAME - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -1611,7 +1611,7 @@ should set default serviceAccountName when not set in values: value: RELEASE-NAME - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -1694,7 +1694,7 @@ should set environment when extraEnv set in values: value: cluster.local - name: HTTPS_PROXY value: http://username:password@my.proxy.host:3128 - image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -1834,7 +1834,7 @@ should set imagePullPolicy when set in values: value: RELEASE-NAME - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: Always livenessProbe: failureThreshold: 6 @@ -1904,7 +1904,7 @@ should set nodeSelector if set in values: value: RELEASE-NAME - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -1988,7 +1988,7 @@ should set preferred affinity when more than one replica is used: value: RELEASE-NAME - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -2058,7 +2058,7 @@ should set probeTimeoutSeconds when set in values: value: RELEASE-NAME - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -2138,7 +2138,7 @@ should set required affinity when highAvailability.requireAntiAffinity is set: value: RELEASE-NAME - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -2208,7 +2208,7 @@ should set resources when set in values: value: RELEASE-NAME - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -2285,7 +2285,7 @@ should set serviceAccountName when set in values: value: RELEASE-NAME - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -2355,7 +2355,7 @@ should set storage.requests when set in values and action is an Upgrade: value: RELEASE-NAME - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -2425,7 +2425,7 @@ should set storage.storageClassName when set in values and action is an Upgrade: value: RELEASE-NAME - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -2495,7 +2495,7 @@ should set tolerations when set in values: value: RELEASE-NAME - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.22 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 diff --git a/examples/chart/teleport-kube-agent/tests/__snapshot__/updater_deployment_test.yaml.snap b/examples/chart/teleport-kube-agent/tests/__snapshot__/updater_deployment_test.yaml.snap index 281b2e7ef24bd..0c82518203349 100644 --- a/examples/chart/teleport-kube-agent/tests/__snapshot__/updater_deployment_test.yaml.snap +++ b/examples/chart/teleport-kube-agent/tests/__snapshot__/updater_deployment_test.yaml.snap @@ -27,7 +27,7 @@ sets the affinity: - --base-image=public.ecr.aws/gravitational/teleport-distroless - --version-server=https://my-custom-version-server/v1 - --version-channel=custom/preview - image: public.ecr.aws/gravitational/teleport-kube-agent-updater:15.4.22 + image: public.ecr.aws/gravitational/teleport-kube-agent-updater:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -71,7 +71,7 @@ sets the tolerations: - --base-image=public.ecr.aws/gravitational/teleport-distroless - --version-server=https://my-custom-version-server/v1 - --version-channel=custom/preview - image: public.ecr.aws/gravitational/teleport-kube-agent-updater:15.4.22 + image: public.ecr.aws/gravitational/teleport-kube-agent-updater:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 From 9fb2d6a78af8484875eb8e6a2021a6aa81164fd7 Mon Sep 17 00:00:00 2001 From: Marco Dinis Date: Fri, 6 Dec 2024 16:38:20 +0000 Subject: [PATCH 101/111] [v15] AWS OIDC: add aws account id as label to AWS App (#49865) * AWS OIDC: add aws account id as label to AWS App We were not setting any labels in the AWS App when using the Discover Flow for a given AWS OIDC integration. This is a bad practice because this means that users must have `app_labels: *:*` in order to access this particular app. This is not recommended because it grants access to every app. This PR changes this so that the account id can be used to gate access. * fix test --- api/types/appserver.go | 8 +++++--- api/types/appserver_test.go | 6 +++++- lib/web/integrations_awsoidc.go | 13 ++++++++++++- lib/web/integrations_awsoidc_test.go | 10 ++++++---- tool/tctl/common/resource_command_test.go | 6 +++++- 5 files changed, 33 insertions(+), 10 deletions(-) diff --git a/api/types/appserver.go b/api/types/appserver.go index 5f0506e0d75e2..6fe3b67b7a2f1 100644 --- a/api/types/appserver.go +++ b/api/types/appserver.go @@ -86,13 +86,15 @@ func NewAppServerV3FromApp(app *AppV3, hostname, hostID string) (*AppServerV3, e // NewAppServerForAWSOIDCIntegration creates a new AppServer that will be used to grant AWS App Access // using the AWSOIDC credentials. -func NewAppServerForAWSOIDCIntegration(integrationName, hostID, publicAddr string) (*AppServerV3, error) { +func NewAppServerForAWSOIDCIntegration(integrationName, hostID, publicAddr string, labels map[string]string) (*AppServerV3, error) { return NewAppServerV3(Metadata{ - Name: integrationName, + Name: integrationName, + Labels: labels, }, AppServerSpecV3{ HostID: hostID, App: &AppV3{Metadata: Metadata{ - Name: integrationName, + Name: integrationName, + Labels: labels, }, Spec: AppSpecV3{ URI: constants.AWSConsoleURL, Integration: integrationName, diff --git a/api/types/appserver_test.go b/api/types/appserver_test.go index 74a0ab661f7dd..25fa31f6d4d63 100644 --- a/api/types/appserver_test.go +++ b/api/types/appserver_test.go @@ -63,6 +63,7 @@ func TestNewAppServerForAWSOIDCIntegration(t *testing.T) { integratioName string hostID string publicAddr string + labels map[string]string expectedApp *AppServerV3 errCheck require.ErrorAssertionFunc }{ @@ -71,12 +72,14 @@ func TestNewAppServerForAWSOIDCIntegration(t *testing.T) { integratioName: "valid", hostID: "my-host-id", publicAddr: "valid.proxy.example.com", + labels: map[string]string{"account_id": "123456789012"}, expectedApp: &AppServerV3{ Kind: KindAppServer, Version: V3, Metadata: Metadata{ Name: "valid", Namespace: "default", + Labels: map[string]string{"account_id": "123456789012"}, }, Spec: AppServerSpecV3{ Version: api.Version, @@ -87,6 +90,7 @@ func TestNewAppServerForAWSOIDCIntegration(t *testing.T) { Metadata: Metadata{ Name: "valid", Namespace: "default", + Labels: map[string]string{"account_id": "123456789012"}, }, Spec: AppSpecV3{ URI: "https://console.aws.amazon.com", @@ -106,7 +110,7 @@ func TestNewAppServerForAWSOIDCIntegration(t *testing.T) { }, } { t.Run(tt.name, func(t *testing.T) { - app, err := NewAppServerForAWSOIDCIntegration(tt.integratioName, tt.hostID, tt.publicAddr) + app, err := NewAppServerForAWSOIDCIntegration(tt.integratioName, tt.hostID, tt.publicAddr, tt.labels) if tt.errCheck != nil { tt.errCheck(t, err) } diff --git a/lib/web/integrations_awsoidc.go b/lib/web/integrations_awsoidc.go index 631643f1fd7d4..ca4983354517f 100644 --- a/lib/web/integrations_awsoidc.go +++ b/lib/web/integrations_awsoidc.go @@ -35,6 +35,7 @@ import ( "github.com/gravitational/teleport" "github.com/gravitational/teleport/api/client" "github.com/gravitational/teleport/api/client/proto" + "github.com/gravitational/teleport/api/constants" apidefaults "github.com/gravitational/teleport/api/defaults" integrationv1 "github.com/gravitational/teleport/api/gen/proto/go/teleport/integration/v1" "github.com/gravitational/teleport/api/types" @@ -49,6 +50,7 @@ import ( "github.com/gravitational/teleport/lib/reversetunnelclient" "github.com/gravitational/teleport/lib/services" libutils "github.com/gravitational/teleport/lib/utils" + awsutils "github.com/gravitational/teleport/lib/utils/aws" "github.com/gravitational/teleport/lib/utils/oidc" "github.com/gravitational/teleport/lib/web/scripts/oneoff" "github.com/gravitational/teleport/lib/web/ui" @@ -960,7 +962,16 @@ func (h *Handler) awsOIDCCreateAWSAppAccess(w http.ResponseWriter, r *http.Reque publicAddr := libutils.DefaultAppPublicAddr(integrationName, h.PublicProxyAddr()) - appServer, err := types.NewAppServerForAWSOIDCIntegration(integrationName, h.cfg.HostUUID, publicAddr) + parsedRoleARN, err := awsutils.ParseRoleARN(ig.GetAWSOIDCIntegrationSpec().RoleARN) + if err != nil { + return nil, trace.Wrap(err) + } + + labels := map[string]string{ + constants.AWSAccountIDLabel: parsedRoleARN.AccountID, + } + + appServer, err := types.NewAppServerForAWSOIDCIntegration(integrationName, h.cfg.HostUUID, publicAddr, labels) if err != nil { return nil, trace.Wrap(err) } diff --git a/lib/web/integrations_awsoidc_test.go b/lib/web/integrations_awsoidc_test.go index 761d794951fa1..ab8a45d36ec6e 100644 --- a/lib/web/integrations_awsoidc_test.go +++ b/lib/web/integrations_awsoidc_test.go @@ -982,7 +982,7 @@ func TestAWSOIDCAppAccessAppServerCreationDeletion(t *testing.T) { myIntegration, err := types.NewIntegrationAWSOIDC(types.Metadata{ Name: "my-integration", }, &types.AWSOIDCIntegrationSpecV1{ - RoleARN: "some-arn-role", + RoleARN: "arn:aws:iam::123456789012:role/teleport", }) require.NoError(t, err) @@ -1009,7 +1009,8 @@ func TestAWSOIDCAppAccessAppServerCreationDeletion(t *testing.T) { Kind: types.KindAppServer, Version: types.V3, Metadata: types.Metadata{ - Name: "my-integration", + Name: "my-integration", + Labels: map[string]string{"aws_account_id": "123456789012"}, }, Spec: types.AppServerSpecV3{ Version: api.Version, @@ -1018,7 +1019,8 @@ func TestAWSOIDCAppAccessAppServerCreationDeletion(t *testing.T) { Kind: types.KindApp, Version: types.V3, Metadata: types.Metadata{ - Name: "my-integration", + Name: "my-integration", + Labels: map[string]string{"aws_account_id": "123456789012"}, }, Spec: types.AppSpecV3{ URI: "https://console.aws.amazon.com", @@ -1048,7 +1050,7 @@ func TestAWSOIDCAppAccessAppServerCreationDeletion(t *testing.T) { myIntegrationWithAccountID, err := types.NewIntegrationAWSOIDC(types.Metadata{ Name: "123456789012", }, &types.AWSOIDCIntegrationSpecV1{ - RoleARN: "some-arn-role", + RoleARN: "arn:aws:iam::123456789012:role/teleport", }) require.NoError(t, err) diff --git a/tool/tctl/common/resource_command_test.go b/tool/tctl/common/resource_command_test.go index 347d073e68b5e..1423b2a06b3c8 100644 --- a/tool/tctl/common/resource_command_test.go +++ b/tool/tctl/common/resource_command_test.go @@ -1908,11 +1908,15 @@ func testCreateAppServer(t *testing.T, clt *authclient.Client) { kind: app_server metadata: name: my-integration + labels: + account_id: "123456789012" spec: app: kind: app metadata: name: my-integration + labels: + account_id: "123456789012" spec: uri: https://console.aws.amazon.com integration: my-integration @@ -1956,7 +1960,7 @@ version: v3 appServers := mustDecodeJSON[[]*types.AppServerV3](t, buf) require.Len(t, appServers, 1) - expectedAppServer, err := types.NewAppServerForAWSOIDCIntegration("my-integration", "c6cfe5c2-653f-4e5d-a914-bfac5a7baf38", "integration.example.com") + expectedAppServer, err := types.NewAppServerForAWSOIDCIntegration("my-integration", "c6cfe5c2-653f-4e5d-a914-bfac5a7baf38", "integration.example.com", map[string]string{"account_id": "123456789012"}) require.NoError(t, err) require.Empty(t, cmp.Diff( expectedAppServer, From d47e9544382873f1d065d91e160ab03711e56d89 Mon Sep 17 00:00:00 2001 From: "teleport-post-release-automation[bot]" <128860004+teleport-post-release-automation[bot]@users.noreply.github.com> Date: Fri, 6 Dec 2024 17:08:35 +0000 Subject: [PATCH 102/111] [auto] docs: Update version to v15.4.23 (#49862) Co-authored-by: GitHub --- docs/config.json | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/docs/config.json b/docs/config.json index 1cb4988b45a1e..c36e643417b26 100644 --- a/docs/config.json +++ b/docs/config.json @@ -179,18 +179,18 @@ "teleport": { "git": "api/14.0.0-gd1e081e", "major_version": "15", - "version": "15.4.22", + "version": "15.4.23", "url": "teleport.example.com", "golang": "1.21", "plugin": { - "version": "15.4.22" + "version": "15.4.23" }, "helm_repo_url": "https://charts.releases.teleport.dev", - "latest_oss_docker_image": "public.ecr.aws/gravitational/teleport-distroless:15.4.22", - "latest_oss_debug_docker_image": "public.ecr.aws/gravitational/teleport-distroless-debug:15.4.22", - "latest_ent_docker_image": "public.ecr.aws/gravitational/teleport-ent-distroless:15.4.22", - "latest_ent_debug_docker_image": "public.ecr.aws/gravitational/teleport-ent-distroless-debug:15.4.22", - "teleport_install_script_url": "https://cdn.teleport.dev/install-v15.4.22.sh" + "latest_oss_docker_image": "public.ecr.aws/gravitational/teleport-distroless:15.4.23", + "latest_oss_debug_docker_image": "public.ecr.aws/gravitational/teleport-distroless-debug:15.4.23", + "latest_ent_docker_image": "public.ecr.aws/gravitational/teleport-ent-distroless:15.4.23", + "latest_ent_debug_docker_image": "public.ecr.aws/gravitational/teleport-ent-distroless-debug:15.4.23", + "teleport_install_script_url": "https://cdn.teleport.dev/install-v15.4.23.sh" }, "terraform": { "version": "1.0.0" From c500727c6c77d4dfacc8f7eb879970eaf7832d19 Mon Sep 17 00:00:00 2001 From: Paul Gottschling Date: Fri, 6 Dec 2024 14:03:37 -0500 Subject: [PATCH 103/111] Fix Vale warnings in the Session Recording guide (#49880) This docs page is tied for the highest number of Vale warnings by page. --- .../architecture/session-recording.mdx | 33 ++++++++++--------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/docs/pages/reference/architecture/session-recording.mdx b/docs/pages/reference/architecture/session-recording.mdx index eae3e56e84d33..1f40d9d6eb35d 100644 --- a/docs/pages/reference/architecture/session-recording.mdx +++ b/docs/pages/reference/architecture/session-recording.mdx @@ -91,7 +91,7 @@ Proxy Server cannot see the SSH traffic to the node. It is encrypted end-to-end In **Recording Proxy Mode**, the Proxy Service terminates (decrypts) the SSH connection using the certificate supplied by the client via SSH agent forwarding and then establishes its own SSH connection to the final destination server. -This allows the Proxy Service to forward SSH session data to the auth server to +This allows the Proxy Service to forward SSH session data to the Auth Service to be recorded, as shown below: ![recording-proxy](../../../img/recording-proxy.svg) @@ -124,7 +124,7 @@ Auth Service. When synchronous recording is enabled, the Teleport component doing the recording (which may be the Teleport SSH Service or the Proxy Service instance depending on your configuration) -submits each recording event to Teleport's Auth Server as it occurs. In this mode, +submits each recording event to Teleport's Auth Service as it occurs. In this mode, failure to emit a recording event is considered fatal - the session will be terminated if an event cannot be recorded. This makes synchronous recording best suited for highly regulated environments where you need to be confident that all data is recorded. @@ -132,9 +132,9 @@ This also means that you need a reliable and low-latency connection to the Auth Server for the duration of the session to ensure that the session isn't interrupted or terminated due to temporary connection loss. -In synchronous recording modes, the Auth Server receives a stream of recording +In synchronous recording modes, the Auth Service receives a stream of recording events and is responsible for assembling them into the final artifact and uploading -it to the storage backend. Since data is streamed directly to the Auth Server, +it to the storage backend. Since data is streamed directly to the Auth Service, Teleport administrators don't need to be concerned with disk space on their Teleport SSH Service and Proxy Service instances, as no recording data is written to those disks. @@ -143,7 +143,7 @@ written to those disks. When asynchronous, recording events are written to the local filesystem during the session. When the session completes, Teleport assembles the parts into a -complete recording and submits the entire recording to the Auth Server for storage. +complete recording and submits the entire recording to the Auth Service for storage. Since recording data is flushed to disk, administrators should be careful to ensure that the system has enough disk space to accommodate the expected number of Teleport @@ -152,13 +152,14 @@ is a greater chance that it can be tampered with, deleted, or otherwise corrupte before the upload completes. The advantage of asynchronous recording is that it doesn't require a persistent -connection to the Auth Server. For example, an SSH session can continue to operate -even if Teleport's Auth Server goes down. When the session completes Teleport will -attempt to upload the recording to the Auth Server. If the Auth Server is still +connection to the Auth Service. For example, an SSH session can continue to operate +even if Teleport's Auth Service goes down. When the session completes Teleport will +attempt to upload the recording to the Auth Service. If the Auth Service is still unavailable, Teleport has built-in retry and backoff mechanisms that will upload -the artifact when the Auth Server comes back online. Additionally, asynchronous +the artifact when the Auth Service comes back online. Additionally, asynchronous recording is well-suited towards recording sessions that are extra chatty or in -environments where the connection to the auth server is unreliable or high-latency. +environments where the connection to the Auth Service is unreliable or +high-latency. ## Storage @@ -209,17 +210,17 @@ to be completed. In asynchronous recording modes, if the node goes down during the session, the partially completed recording will sit on the node's disk. The node's upload completer will eventually -detect the abandoned upload and stream it to the Teleport Auth Server where it will be +detect the abandoned upload and stream it to the Teleport Auth Service where it will be written to the storage backend. -In synchronous recording modes, Teleport's Auth Server is streaming the recording directly -to storage. If the Auth Server goes down during a session, the uncompleted upload will sit -as a series of parts (in cloud storage or on the Auth Server's disk) and it is the -responsibility of the Auth Server's upload completer to detect the abandoned upload and +In synchronous recording modes, Teleport's Auth Service is streaming the recording directly +to storage. If the Auth Service goes down during a session, the uncompleted upload will sit +as a series of parts (in cloud storage or on an Auth Service instance's disk) and it is the +responsibility of the Auth Service's upload completer to detect the abandoned upload and complete it. ## Related reading - [Recording Proxy Mode](../../enroll-resources/server-access/guides/recording-proxy-mode.mdx) - [SSH recording modes](../monitoring/audit.mdx) -- [Desktop Access recording](../agent-services/desktop-access-reference/sessions.mdx) +- [Session recording for desktops](../agent-services/desktop-access-reference/sessions.mdx) From f7ebb21965b163c021d6c24d57f894d31f51da0f Mon Sep 17 00:00:00 2001 From: "Guillaume J. Charmes" Date: Fri, 6 Dec 2024 14:22:48 -0500 Subject: [PATCH 104/111] Emit port-forward event only the first time, add port-forward-end event. Include cluster and pod metadta in event. (#49897) --- .../teleport/legacy/types/events/events.proto | 15 + api/types/events/events.pb.go | 2202 +++++++++-------- lib/events/api.go | 6 +- lib/events/codes.go | 2 + lib/kube/proxy/forwarder.go | 34 +- .../src/Audit/EventList/EventTypeCell.tsx | 1 + .../teleport/src/services/audit/makeEvent.ts | 5 + .../teleport/src/services/audit/types.ts | 2 + 8 files changed, 1210 insertions(+), 1057 deletions(-) diff --git a/api/proto/teleport/legacy/types/events/events.proto b/api/proto/teleport/legacy/types/events/events.proto index d9732d3872a36..8b8d725136bcf 100644 --- a/api/proto/teleport/legacy/types/events/events.proto +++ b/api/proto/teleport/legacy/types/events/events.proto @@ -1605,6 +1605,21 @@ message PortForward { // Addr is a target port forwarding address string Addr = 5 [(gogoproto.jsontag) = "addr"]; + + // KubernetesCluster has information about a kubernetes cluster, if + // applicable. + KubernetesClusterMetadata KubernetesCluster = 6 [ + (gogoproto.nullable) = false, + (gogoproto.embed) = true, + (gogoproto.jsontag) = "" + ]; + + // KubernetesPod has information about a kubernetes pod, if applicable. + KubernetesPodMetadata KubernetesPod = 7 [ + (gogoproto.nullable) = false, + (gogoproto.embed) = true, + (gogoproto.jsontag) = "" + ]; } // X11Forward is emitted when a user requests X11 protocol forwarding diff --git a/api/types/events/events.pb.go b/api/types/events/events.pb.go index 327fab866eac5..778d49f842c92 100644 --- a/api/types/events/events.pb.go +++ b/api/types/events/events.pb.go @@ -2967,10 +2967,15 @@ type PortForward struct { // Status contains operation success or failure status Status `protobuf:"bytes,4,opt,name=Status,proto3,embedded=Status" json:""` // Addr is a target port forwarding address - Addr string `protobuf:"bytes,5,opt,name=Addr,proto3" json:"addr"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Addr string `protobuf:"bytes,5,opt,name=Addr,proto3" json:"addr"` + // KubernetesCluster has information about a kubernetes cluster, if + // applicable. + KubernetesClusterMetadata `protobuf:"bytes,6,opt,name=KubernetesCluster,proto3,embedded=KubernetesCluster" json:""` + // KubernetesPod has information about a kubernetes pod, if applicable. + KubernetesPodMetadata `protobuf:"bytes,7,opt,name=KubernetesPod,proto3,embedded=KubernetesPod" json:""` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *PortForward) Reset() { *m = PortForward{} } @@ -14387,999 +14392,1000 @@ func init() { } var fileDescriptor_007ba1c3d6266d56 = []byte{ - // 15867 bytes of a gzipped FileDescriptorProto + // 15877 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0xbd, 0x6b, 0x74, 0x1c, 0x47, 0x76, 0x18, 0x8c, 0x79, 0x60, 0x00, 0x14, 0x1e, 0x04, 0x8a, 0x14, 0xd9, 0xa4, 0x48, 0x8e, 0xd4, 0x92, 0xb8, 0xa4, 0x56, 0x22, 0x25, 0x8a, 0x92, 0x56, 0xaf, 0x95, 0x06, 0x18, 0x80, 0x18, 0x11, 0x8f, 0x51, 0x0f, 0x48, 0xae, 0xf6, 0x35, 0x6e, 0x4c, 0x17, 0x80, 0x16, 0x67, 0xba, 0x67, 0xbb, - 0x7b, 0x08, 0x42, 0xdf, 0xcb, 0xeb, 0xcf, 0x8f, 0x5d, 0x7b, 0x77, 0xbd, 0xdf, 0xfa, 0xf3, 0xdb, - 0x49, 0xd6, 0x76, 0x9c, 0xd8, 0x8e, 0xed, 0xb5, 0x1d, 0x9f, 0xb5, 0xd7, 0xce, 0x9e, 0xd8, 0xd9, - 0xe4, 0x44, 0xf6, 0x26, 0x3e, 0xb6, 0x93, 0xf8, 0xf8, 0x24, 0x0e, 0xd6, 0xd9, 0xc4, 0xf9, 0x81, - 0x13, 0x9f, 0xe3, 0x24, 0x7b, 0xe2, 0x8d, 0xe3, 0xe4, 0xe4, 0xd4, 0xad, 0xea, 0xee, 0xaa, 0x7e, - 0x0c, 0x9e, 0x32, 0x04, 0x01, 0x7f, 0x48, 0xcc, 0xbd, 0xb7, 0x6e, 0x55, 0xdf, 0xba, 0x55, 0x75, - 0xab, 0xea, 0xd6, 0xbd, 0xe8, 0x92, 0x47, 0x9a, 0xa4, 0x6d, 0x3b, 0xde, 0x95, 0x26, 0x59, 0xd6, - 0x1b, 0x6b, 0x57, 0xbc, 0xb5, 0x36, 0x71, 0xaf, 0x90, 0xbb, 0xc4, 0xf2, 0xfc, 0xff, 0x2e, 0xb7, - 0x1d, 0xdb, 0xb3, 0x71, 0x81, 0xfd, 0x3a, 0x73, 0x62, 0xd9, 0x5e, 0xb6, 0x01, 0x74, 0x85, 0xfe, - 0xc5, 0xb0, 0x67, 0xce, 0x2e, 0xdb, 0xf6, 0x72, 0x93, 0x5c, 0x81, 0x5f, 0x8b, 0x9d, 0xa5, 0x2b, - 0xae, 0xe7, 0x74, 0x1a, 0x1e, 0xc7, 0x16, 0xa3, 0x58, 0xcf, 0x6c, 0x11, 0xd7, 0xd3, 0x5b, 0x6d, - 0x4e, 0x70, 0x3e, 0x4a, 0xb0, 0xea, 0xe8, 0xed, 0x36, 0x71, 0x78, 0xe5, 0x67, 0x1e, 0x4c, 0x6e, - 0x27, 0xfc, 0xcb, 0x49, 0x1e, 0x4f, 0x26, 0xf1, 0x19, 0x45, 0x38, 0xaa, 0x9f, 0xcb, 0xa2, 0xfe, - 0x59, 0xe2, 0xe9, 0x86, 0xee, 0xe9, 0xf8, 0x2c, 0xea, 0xad, 0x58, 0x06, 0xb9, 0xa7, 0x64, 0x1e, - 0xc8, 0x5c, 0xcc, 0x8d, 0x17, 0x36, 0xd6, 0x8b, 0x59, 0x62, 0x6a, 0x0c, 0x88, 0xcf, 0xa1, 0xfc, - 0xc2, 0x5a, 0x9b, 0x28, 0xd9, 0x07, 0x32, 0x17, 0x07, 0xc6, 0x07, 0x36, 0xd6, 0x8b, 0xbd, 0x20, - 0x0b, 0x0d, 0xc0, 0xf8, 0x41, 0x94, 0xad, 0x94, 0x95, 0x1c, 0x20, 0xc7, 0x36, 0xd6, 0x8b, 0xc3, - 0x1d, 0xd3, 0x78, 0xcc, 0x6e, 0x99, 0x1e, 0x69, 0xb5, 0xbd, 0x35, 0x2d, 0x5b, 0x29, 0xe3, 0x0b, - 0x28, 0x3f, 0x61, 0x1b, 0x44, 0xc9, 0x03, 0x11, 0xde, 0x58, 0x2f, 0x8e, 0x34, 0x6c, 0x83, 0x08, - 0x54, 0x80, 0xc7, 0xaf, 0xa0, 0xfc, 0x82, 0xd9, 0x22, 0x4a, 0xef, 0x03, 0x99, 0x8b, 0x83, 0x57, - 0xcf, 0x5c, 0x66, 0x52, 0xb9, 0xec, 0x4b, 0xe5, 0xf2, 0x82, 0x2f, 0xb6, 0xf1, 0xd1, 0xb7, 0xd6, - 0x8b, 0x3d, 0x1b, 0xeb, 0xc5, 0x3c, 0x95, 0xe4, 0x67, 0xbf, 0x56, 0xcc, 0x68, 0x50, 0x12, 0xbf, - 0x88, 0x06, 0x27, 0x9a, 0x1d, 0xd7, 0x23, 0xce, 0x9c, 0xde, 0x22, 0x4a, 0x01, 0x2a, 0x3c, 0xb3, - 0xb1, 0x5e, 0x3c, 0xd9, 0x60, 0xe0, 0xba, 0xa5, 0xb7, 0xc4, 0x8a, 0x45, 0x72, 0xf5, 0xd7, 0x32, - 0xe8, 0x58, 0x8d, 0xb8, 0xae, 0x69, 0x5b, 0x81, 0x6c, 0x1e, 0x41, 0x03, 0x1c, 0x54, 0x29, 0x83, - 0x7c, 0x06, 0xc6, 0xfb, 0x36, 0xd6, 0x8b, 0x39, 0xd7, 0x34, 0xb4, 0x10, 0x83, 0x9f, 0x40, 0x7d, - 0xb7, 0x4d, 0x6f, 0x65, 0x76, 0xaa, 0xc4, 0xe5, 0x74, 0x72, 0x63, 0xbd, 0x88, 0x57, 0x4d, 0x6f, - 0xa5, 0xde, 0x5a, 0xd2, 0x85, 0x0a, 0x7d, 0x32, 0x3c, 0x83, 0x46, 0xab, 0x8e, 0x79, 0x57, 0xf7, - 0xc8, 0x0d, 0xb2, 0x56, 0xb5, 0x9b, 0x66, 0x63, 0x8d, 0x4b, 0xf1, 0x81, 0x8d, 0xf5, 0xe2, 0xd9, - 0x36, 0xc3, 0xd5, 0xef, 0x90, 0xb5, 0x7a, 0x1b, 0xb0, 0x02, 0x93, 0x58, 0x49, 0xf5, 0x2b, 0xbd, - 0x68, 0xe8, 0xa6, 0x4b, 0x9c, 0xa0, 0xdd, 0x17, 0x50, 0x9e, 0xfe, 0xe6, 0x4d, 0x06, 0x99, 0x77, - 0x5c, 0xe2, 0x88, 0x32, 0xa7, 0x78, 0x7c, 0x09, 0xf5, 0xce, 0xd8, 0xcb, 0xa6, 0xc5, 0x9b, 0x7d, - 0x7c, 0x63, 0xbd, 0x78, 0xac, 0x49, 0x01, 0x02, 0x25, 0xa3, 0xc0, 0xef, 0x47, 0x43, 0x95, 0x16, - 0xd5, 0x21, 0xdb, 0xd2, 0x3d, 0xdb, 0xe1, 0xad, 0x05, 0xe9, 0x9a, 0x02, 0x5c, 0x28, 0x28, 0xd1, - 0xe3, 0xe7, 0x11, 0x2a, 0xdd, 0xae, 0x69, 0x76, 0x93, 0x94, 0xb4, 0x39, 0xae, 0x0c, 0x50, 0x5a, - 0x5f, 0x75, 0xeb, 0x8e, 0xdd, 0x24, 0x75, 0xdd, 0x11, 0xab, 0x15, 0xa8, 0xf1, 0x24, 0x1a, 0x29, - 0x35, 0x1a, 0xc4, 0x75, 0x35, 0xf2, 0xb1, 0x0e, 0x71, 0x3d, 0x57, 0xe9, 0x7d, 0x20, 0x77, 0x71, - 0x60, 0xfc, 0xdc, 0xc6, 0x7a, 0xf1, 0xb4, 0x0e, 0x98, 0xba, 0xc3, 0x51, 0x02, 0x8b, 0x48, 0x21, - 0x3c, 0x8e, 0x86, 0x4b, 0x6f, 0x76, 0x1c, 0x52, 0x31, 0x88, 0xe5, 0x99, 0xde, 0x1a, 0xd7, 0x90, - 0xb3, 0x1b, 0xeb, 0x45, 0x45, 0xa7, 0x88, 0xba, 0xc9, 0x31, 0x02, 0x13, 0xb9, 0x08, 0x9e, 0x47, - 0x63, 0xd7, 0x27, 0xaa, 0x35, 0xe2, 0xdc, 0x35, 0x1b, 0xa4, 0xd4, 0x68, 0xd8, 0x1d, 0xcb, 0x53, - 0xfa, 0x80, 0xcf, 0x83, 0x1b, 0xeb, 0xc5, 0x73, 0xcb, 0x8d, 0x76, 0xdd, 0x65, 0xd8, 0xba, 0xce, - 0xd0, 0x02, 0xb3, 0x78, 0x59, 0xfc, 0x41, 0x34, 0xbc, 0xe0, 0x50, 0x2d, 0x34, 0xca, 0x84, 0xc2, - 0x95, 0x7e, 0xd0, 0xff, 0x93, 0x97, 0xf9, 0x04, 0xc4, 0xa0, 0x7e, 0xcf, 0xb2, 0xc6, 0x7a, 0xac, - 0x40, 0xdd, 0x00, 0x9c, 0xd8, 0x58, 0x89, 0x15, 0x26, 0x48, 0xa1, 0x1f, 0x6f, 0x3a, 0xc4, 0x88, - 0x69, 0xdb, 0x00, 0xb4, 0xf9, 0xd2, 0xc6, 0x7a, 0xf1, 0x11, 0x87, 0xd3, 0xd4, 0xbb, 0xaa, 0x5d, - 0x2a, 0x2b, 0x3c, 0x89, 0xfa, 0xa9, 0x36, 0xdd, 0x30, 0x2d, 0x43, 0x41, 0x0f, 0x64, 0x2e, 0x8e, - 0x5c, 0x1d, 0xf5, 0x5b, 0xef, 0xc3, 0xc7, 0x4f, 0x6d, 0xac, 0x17, 0x8f, 0x53, 0x1d, 0xac, 0xdf, - 0x31, 0x2d, 0x71, 0x8a, 0x08, 0x8a, 0xaa, 0x7f, 0x91, 0x47, 0x23, 0x54, 0x38, 0x82, 0x1e, 0x97, - 0xe8, 0x90, 0xa4, 0x10, 0x3a, 0x42, 0xdd, 0xb6, 0xde, 0x20, 0x5c, 0xa5, 0x81, 0x9d, 0xe5, 0x03, - 0x05, 0x76, 0x51, 0x7a, 0x7c, 0x09, 0xf5, 0x33, 0x50, 0xa5, 0xcc, 0xb5, 0x7c, 0x78, 0x63, 0xbd, - 0x38, 0xe0, 0x02, 0xac, 0x6e, 0x1a, 0x5a, 0x80, 0xa6, 0x6a, 0xc6, 0xfe, 0x9e, 0xb6, 0x5d, 0x8f, - 0x32, 0xe7, 0x4a, 0x0e, 0x6a, 0xc6, 0x0b, 0xac, 0x70, 0x94, 0xa8, 0x66, 0x72, 0x21, 0xfc, 0x1c, - 0x42, 0x0c, 0x52, 0x32, 0x0c, 0x87, 0x6b, 0xfa, 0xe9, 0x8d, 0xf5, 0xe2, 0x7d, 0x9c, 0x85, 0x6e, - 0x18, 0xe2, 0x30, 0x11, 0x88, 0x71, 0x0b, 0x0d, 0xb1, 0x5f, 0x33, 0xfa, 0x22, 0x69, 0x32, 0x35, - 0x1f, 0xbc, 0x7a, 0xd1, 0x97, 0xa6, 0x2c, 0x9d, 0xcb, 0x22, 0xe9, 0xa4, 0xe5, 0x39, 0x6b, 0xe3, - 0x45, 0x3e, 0x33, 0x9e, 0xe2, 0x55, 0x35, 0x01, 0x27, 0x8e, 0x49, 0xb1, 0x0c, 0x9d, 0x30, 0xa7, - 0x6c, 0x67, 0x55, 0x77, 0x0c, 0x62, 0x8c, 0xaf, 0x89, 0x13, 0xe6, 0x92, 0x0f, 0xae, 0x2f, 0x8a, - 0x3a, 0x20, 0x92, 0xe3, 0x09, 0x34, 0xcc, 0xb8, 0xd5, 0x3a, 0x8b, 0xd0, 0xf7, 0x7d, 0x31, 0x69, - 0xb9, 0x9d, 0xc5, 0x68, 0x7f, 0xcb, 0x65, 0xe8, 0x98, 0x64, 0x80, 0x5b, 0xc4, 0xa1, 0xb3, 0x29, - 0xa8, 0x3f, 0x1f, 0x93, 0x9c, 0xc9, 0x5d, 0x86, 0x89, 0xf3, 0xe0, 0x45, 0xce, 0xbc, 0x8c, 0xc6, - 0x62, 0xa2, 0xc0, 0xa3, 0x28, 0x77, 0x87, 0xac, 0x31, 0x75, 0xd1, 0xe8, 0x9f, 0xf8, 0x04, 0xea, - 0xbd, 0xab, 0x37, 0x3b, 0x7c, 0x2d, 0xd3, 0xd8, 0x8f, 0xe7, 0xb3, 0xef, 0xcb, 0xd0, 0xa9, 0x1f, - 0x4f, 0xd8, 0x96, 0x45, 0x1a, 0x9e, 0x38, 0xfb, 0x3f, 0x83, 0x06, 0x66, 0xec, 0x86, 0xde, 0x84, - 0x7e, 0x64, 0x7a, 0xa7, 0x6c, 0xac, 0x17, 0x4f, 0xd0, 0x0e, 0xbc, 0xdc, 0xa4, 0x18, 0xa1, 0x4d, - 0x21, 0x29, 0x55, 0x00, 0x8d, 0xb4, 0x6c, 0x8f, 0x40, 0xc1, 0x6c, 0xa8, 0x00, 0x50, 0xd0, 0x01, - 0x94, 0xa8, 0x00, 0x21, 0x31, 0xbe, 0x82, 0xfa, 0xab, 0x74, 0xc1, 0x6b, 0xd8, 0x4d, 0xae, 0x7c, - 0x30, 0x27, 0xc3, 0x22, 0x28, 0x0e, 0x1a, 0x9f, 0x48, 0x9d, 0x46, 0x23, 0x13, 0x4d, 0x93, 0x58, - 0x9e, 0xd8, 0x6a, 0x3a, 0xa4, 0x4a, 0xcb, 0xc4, 0xf2, 0xc4, 0x56, 0xc3, 0xe0, 0xd3, 0x29, 0x54, - 0x6c, 0x75, 0x40, 0xaa, 0xfe, 0x6e, 0x0e, 0x9d, 0xbe, 0xd1, 0x59, 0x24, 0x8e, 0x45, 0x3c, 0xe2, - 0xf2, 0x95, 0x31, 0xe0, 0x3a, 0x87, 0xc6, 0x62, 0x48, 0xce, 0x1d, 0x56, 0xac, 0x3b, 0x01, 0xb2, - 0xce, 0x17, 0x5b, 0x71, 0xda, 0x8b, 0x15, 0xc5, 0xd3, 0xe8, 0x58, 0x08, 0xa4, 0x8d, 0x70, 0x95, - 0x2c, 0xcc, 0xe9, 0xe7, 0x37, 0xd6, 0x8b, 0x67, 0x04, 0x6e, 0xb4, 0xd9, 0xa2, 0x06, 0x47, 0x8b, - 0xe1, 0x1b, 0x68, 0x34, 0x04, 0x5d, 0x77, 0xec, 0x4e, 0xdb, 0x55, 0x72, 0xc0, 0xaa, 0xb8, 0xb1, - 0x5e, 0xbc, 0x5f, 0x60, 0xb5, 0x0c, 0x48, 0x71, 0x25, 0x8d, 0x16, 0xc4, 0xdf, 0x9e, 0x11, 0xb9, - 0xf1, 0x51, 0x98, 0x87, 0x51, 0xf8, 0xac, 0x3f, 0x0a, 0x53, 0x85, 0x74, 0x39, 0x5a, 0x92, 0x0f, - 0xca, 0x48, 0x33, 0x62, 0x83, 0x32, 0x56, 0xe3, 0x99, 0x09, 0x74, 0x5f, 0x22, 0xaf, 0x6d, 0x69, - 0xf5, 0x9f, 0xe6, 0x44, 0x2e, 0x55, 0xdb, 0x08, 0x3a, 0x73, 0x5e, 0xec, 0xcc, 0xaa, 0x6d, 0x80, - 0xb9, 0x94, 0x09, 0x17, 0x31, 0xa1, 0xb1, 0x6d, 0xdb, 0x88, 0x5a, 0x4d, 0xf1, 0xb2, 0xf8, 0xa3, - 0xe8, 0x64, 0x0c, 0xc8, 0xa6, 0x6b, 0xa6, 0xfd, 0x17, 0x36, 0xd6, 0x8b, 0x6a, 0x02, 0xd7, 0xe8, - 0xec, 0x9d, 0xc2, 0x05, 0xeb, 0xe8, 0x94, 0x20, 0x75, 0xdb, 0xf2, 0x74, 0xd3, 0xe2, 0x56, 0x1e, - 0x1b, 0x25, 0xef, 0xd9, 0x58, 0x2f, 0x3e, 0x24, 0xea, 0xa0, 0x4f, 0x13, 0x6d, 0x7c, 0x1a, 0x1f, - 0x6c, 0x20, 0x25, 0x01, 0x55, 0x69, 0xe9, 0xcb, 0xbe, 0xe9, 0x7a, 0x71, 0x63, 0xbd, 0xf8, 0x70, - 0x62, 0x1d, 0x26, 0xa5, 0x12, 0x97, 0xca, 0x34, 0x4e, 0x58, 0x43, 0x38, 0xc4, 0xcd, 0xd9, 0x06, - 0x81, 0x6f, 0xe8, 0x05, 0xfe, 0xea, 0xc6, 0x7a, 0xf1, 0xbc, 0xc0, 0xdf, 0xb2, 0x0d, 0x12, 0x6d, - 0x7e, 0x42, 0x69, 0xf5, 0xd7, 0x72, 0xe8, 0x7c, 0xad, 0x34, 0x3b, 0x53, 0x31, 0x7c, 0xdb, 0xa2, - 0xea, 0xd8, 0x77, 0x4d, 0x43, 0x18, 0xbd, 0x8b, 0xe8, 0x54, 0x04, 0x35, 0x09, 0xe6, 0x4c, 0x60, - 0xd5, 0xc2, 0xb7, 0xf9, 0x76, 0x4b, 0x9b, 0xd3, 0xd4, 0x99, 0xcd, 0x53, 0x97, 0x4c, 0xfa, 0x34, - 0x46, 0xb4, 0x8f, 0x22, 0xa8, 0xda, 0x8a, 0xed, 0x78, 0x8d, 0x8e, 0xc7, 0x95, 0x00, 0xfa, 0x28, - 0x56, 0x87, 0xcb, 0x89, 0xba, 0x54, 0xe1, 0xf3, 0xc1, 0x9f, 0xcc, 0xa0, 0xd1, 0x92, 0xe7, 0x39, - 0xe6, 0x62, 0xc7, 0x23, 0xb3, 0x7a, 0xbb, 0x6d, 0x5a, 0xcb, 0x30, 0xd6, 0x07, 0xaf, 0xbe, 0x18, - 0xac, 0x91, 0x5d, 0x25, 0x71, 0x39, 0x5a, 0x5c, 0x18, 0xa2, 0xba, 0x8f, 0xaa, 0xb7, 0x18, 0x4e, - 0x1c, 0xa2, 0xd1, 0x72, 0x74, 0x88, 0x26, 0xf2, 0xda, 0xd6, 0x10, 0xfd, 0x5c, 0x0e, 0x9d, 0x9d, - 0xbf, 0xe3, 0xe9, 0x1a, 0x71, 0xed, 0x8e, 0xd3, 0x20, 0xee, 0xcd, 0xb6, 0xa1, 0x7b, 0x24, 0x1c, - 0xa9, 0x45, 0xd4, 0x5b, 0x32, 0x0c, 0x62, 0x00, 0xbb, 0x5e, 0xb6, 0xff, 0xd2, 0x29, 0x40, 0x63, - 0x70, 0xfc, 0x08, 0xea, 0xe3, 0x65, 0x80, 0x7b, 0xef, 0xf8, 0xe0, 0xc6, 0x7a, 0xb1, 0xaf, 0xc3, - 0x40, 0x9a, 0x8f, 0xa3, 0x64, 0x65, 0xd2, 0x24, 0x94, 0x2c, 0x17, 0x92, 0x19, 0x0c, 0xa4, 0xf9, - 0x38, 0xfc, 0x1a, 0x1a, 0x01, 0xb6, 0x41, 0x7b, 0xf8, 0xdc, 0x77, 0xc2, 0x97, 0xae, 0xd8, 0x58, - 0xb6, 0x34, 0x41, 0x6b, 0xea, 0x8e, 0x5f, 0x40, 0x8b, 0x30, 0xc0, 0xb7, 0xd1, 0x28, 0x6f, 0x44, - 0xc8, 0xb4, 0xb7, 0x0b, 0xd3, 0xfb, 0x36, 0xd6, 0x8b, 0x63, 0xbc, 0xfd, 0x02, 0xdb, 0x18, 0x13, - 0xca, 0x98, 0x37, 0x3b, 0x64, 0x5c, 0xd8, 0x8c, 0x31, 0xff, 0x62, 0x91, 0x71, 0x94, 0x89, 0xfa, - 0x3a, 0x1a, 0x12, 0x0b, 0xe2, 0x93, 0xb0, 0xc7, 0x65, 0xe3, 0x04, 0x76, 0xc7, 0xa6, 0x01, 0x1b, - 0xdb, 0x27, 0xd1, 0x60, 0x99, 0xb8, 0x0d, 0xc7, 0x6c, 0x53, 0xab, 0x81, 0x2b, 0xf9, 0xb1, 0x8d, - 0xf5, 0xe2, 0xa0, 0x11, 0x82, 0x35, 0x91, 0x46, 0xfd, 0x6f, 0x19, 0x74, 0x92, 0xf2, 0x2e, 0xb9, - 0xae, 0xb9, 0x6c, 0xb5, 0xc4, 0x65, 0xfb, 0x31, 0x54, 0xa8, 0x41, 0x7d, 0xbc, 0xa6, 0x13, 0x1b, - 0xeb, 0xc5, 0x51, 0xd6, 0x02, 0x41, 0x0f, 0x39, 0x4d, 0xb0, 0xc1, 0xcb, 0x6e, 0xb2, 0xc1, 0xa3, - 0x26, 0xad, 0xa7, 0x3b, 0x9e, 0x69, 0x2d, 0xd7, 0x3c, 0xdd, 0xeb, 0xb8, 0x92, 0x49, 0xcb, 0x31, - 0x75, 0x17, 0x50, 0x92, 0x49, 0x2b, 0x15, 0xc2, 0x2f, 0xa3, 0xa1, 0x49, 0xcb, 0x08, 0x99, 0xb0, - 0x09, 0xf1, 0x7e, 0x6a, 0x69, 0x12, 0x80, 0xc7, 0x59, 0x48, 0x05, 0xd4, 0x9f, 0xcf, 0x20, 0x85, - 0xed, 0xc6, 0x66, 0x4c, 0xd7, 0x9b, 0x25, 0xad, 0x45, 0x61, 0x76, 0x9a, 0xf2, 0xb7, 0x77, 0x14, - 0x27, 0xac, 0x45, 0x60, 0x0a, 0xf0, 0xed, 0x5d, 0xd3, 0x74, 0xbd, 0xe8, 0x64, 0x18, 0x29, 0x85, - 0x2b, 0xa8, 0x8f, 0x71, 0x66, 0xb6, 0xc4, 0xe0, 0x55, 0xc5, 0x57, 0x84, 0x68, 0xd5, 0x4c, 0x19, - 0x5a, 0x8c, 0x58, 0xdc, 0x9f, 0xf3, 0xf2, 0xea, 0x2f, 0x66, 0xd1, 0x68, 0xb4, 0x10, 0xbe, 0x8d, - 0xfa, 0x5f, 0xb5, 0x4d, 0x8b, 0x18, 0xf3, 0x16, 0xb4, 0xb0, 0xfb, 0x29, 0x85, 0x6f, 0x8b, 0x1f, - 0x7f, 0x03, 0xca, 0xd4, 0x45, 0x0b, 0x16, 0x0e, 0x2d, 0x02, 0x66, 0xf8, 0x83, 0x68, 0x80, 0xda, - 0x80, 0x77, 0x81, 0x73, 0x76, 0x53, 0xce, 0x0f, 0x70, 0xce, 0x27, 0x1c, 0x56, 0x28, 0xce, 0x3a, - 0x64, 0x47, 0xf5, 0x4a, 0x23, 0xba, 0x6b, 0x5b, 0xbc, 0xe7, 0x41, 0xaf, 0x1c, 0x80, 0x88, 0x7a, - 0xc5, 0x68, 0xa8, 0xe9, 0xca, 0x3e, 0x16, 0xba, 0x41, 0xd8, 0xbb, 0x30, 0x59, 0x45, 0x7b, 0x40, - 0x20, 0x56, 0xbf, 0x33, 0x8b, 0x1e, 0x0f, 0x45, 0xa6, 0x91, 0xbb, 0x26, 0x59, 0xe5, 0xe2, 0x5c, - 0x31, 0xdb, 0x7c, 0xf3, 0x48, 0x55, 0xde, 0x9d, 0x58, 0xd1, 0xad, 0x65, 0x62, 0xe0, 0x4b, 0xa8, - 0x97, 0xee, 0xf0, 0x5d, 0x25, 0x03, 0xe6, 0x1a, 0x4c, 0x27, 0x0e, 0x05, 0x88, 0xa7, 0x0f, 0x40, - 0x81, 0x6d, 0x54, 0x58, 0x70, 0x74, 0xd3, 0xf3, 0x7b, 0xb6, 0x14, 0xef, 0xd9, 0x2d, 0xd4, 0x78, - 0x99, 0xf1, 0x60, 0x73, 0x3e, 0x08, 0xc2, 0x03, 0x80, 0x28, 0x08, 0x46, 0x72, 0xe6, 0x39, 0x34, - 0x28, 0x10, 0x6f, 0x6b, 0x52, 0xff, 0x52, 0x5e, 0xd4, 0x75, 0xbf, 0x59, 0x5c, 0xd7, 0xaf, 0x50, - 0x1d, 0x75, 0x5d, 0x6a, 0x55, 0x30, 0x25, 0xe7, 0x9a, 0x08, 0x20, 0x59, 0x13, 0x01, 0x84, 0x9f, - 0x42, 0xfd, 0x8c, 0x45, 0xb0, 0x7f, 0x85, 0xbd, 0xaf, 0x03, 0x30, 0x79, 0x69, 0x0e, 0x08, 0xf1, - 0xcf, 0x66, 0xd0, 0xb9, 0xae, 0x92, 0x00, 0x65, 0x18, 0xbc, 0xfa, 0xf4, 0x8e, 0xc4, 0x38, 0xfe, - 0xf8, 0xc6, 0x7a, 0xf1, 0x52, 0x2b, 0x20, 0xa9, 0x3b, 0x02, 0x4d, 0xbd, 0xc1, 0x88, 0x84, 0x76, - 0x75, 0x6f, 0x0a, 0x35, 0x1e, 0x59, 0xa5, 0x53, 0x70, 0x86, 0x63, 0x35, 0xd6, 0xfc, 0x46, 0xe6, - 0x43, 0xe3, 0x91, 0x7f, 0xef, 0x92, 0x4f, 0x92, 0x50, 0x4d, 0x0a, 0x17, 0xdc, 0x40, 0xa7, 0x18, - 0xa6, 0xac, 0xaf, 0xcd, 0x2f, 0xcd, 0xda, 0x96, 0xb7, 0xe2, 0x57, 0xd0, 0x2b, 0x1e, 0x82, 0x40, - 0x05, 0x86, 0xbe, 0x56, 0xb7, 0x97, 0xea, 0x2d, 0x4a, 0x95, 0x50, 0x47, 0x1a, 0x27, 0x3a, 0xd1, - 0xf2, 0x31, 0xe7, 0x4f, 0x41, 0x85, 0xf0, 0x88, 0xca, 0x1f, 0xa7, 0xf1, 0x09, 0x27, 0x52, 0x48, - 0xad, 0xa0, 0xa1, 0x19, 0xbb, 0x71, 0x27, 0x50, 0x97, 0xe7, 0x50, 0x61, 0x41, 0x77, 0x96, 0x89, - 0x07, 0xb2, 0x18, 0xbc, 0x3a, 0x76, 0x99, 0x1d, 0xfb, 0x52, 0x22, 0x86, 0x18, 0x1f, 0xe1, 0xb3, - 0x41, 0xc1, 0x83, 0xdf, 0x1a, 0x2f, 0xa0, 0x7e, 0xad, 0x17, 0x0d, 0xf1, 0x23, 0x4a, 0x98, 0xcd, - 0xf1, 0xf3, 0xe1, 0xa1, 0x2f, 0x9f, 0xbe, 0x82, 0x63, 0x9a, 0xe0, 0x78, 0x69, 0x88, 0x32, 0xfb, - 0xbd, 0xf5, 0x62, 0x66, 0x63, 0xbd, 0xd8, 0xa3, 0xf5, 0x0b, 0x9b, 0xca, 0x70, 0xbd, 0x11, 0x16, - 0x58, 0xf1, 0xd0, 0x31, 0x52, 0x96, 0xad, 0x3f, 0x2f, 0xa3, 0x3e, 0xde, 0x06, 0xae, 0x71, 0xa7, - 0xc2, 0xb3, 0x0c, 0xe9, 0xa8, 0x35, 0x52, 0xda, 0x2f, 0x85, 0x5f, 0x44, 0x05, 0xb6, 0xb7, 0xe7, - 0x02, 0x38, 0x99, 0x7c, 0x16, 0x12, 0x29, 0xce, 0xcb, 0xe0, 0x69, 0x84, 0xc2, 0x7d, 0x7d, 0x70, - 0xb2, 0xcc, 0x39, 0xc4, 0x77, 0xfc, 0x11, 0x2e, 0x42, 0x59, 0xfc, 0x0c, 0x1a, 0x5a, 0x20, 0x4e, - 0xcb, 0xb4, 0xf4, 0x66, 0xcd, 0x7c, 0xd3, 0x3f, 0x5c, 0x86, 0x85, 0xd7, 0x35, 0xdf, 0x14, 0x47, - 0xae, 0x44, 0x87, 0x3f, 0x92, 0xb4, 0x6f, 0xee, 0x83, 0x86, 0x3c, 0xb8, 0xe9, 0x86, 0x32, 0xd2, - 0x9e, 0x84, 0x6d, 0xf4, 0x6b, 0x68, 0x58, 0xda, 0x32, 0xf1, 0xd3, 0xc3, 0x73, 0x71, 0xd6, 0xc2, - 0xfe, 0x2f, 0xc2, 0x56, 0xe6, 0x40, 0x35, 0xb9, 0x62, 0x99, 0x9e, 0xa9, 0x37, 0x27, 0xec, 0x56, - 0x4b, 0xb7, 0x0c, 0x65, 0x20, 0xd4, 0x64, 0x93, 0x61, 0xea, 0x0d, 0x86, 0x12, 0x35, 0x59, 0x2e, - 0x44, 0xb7, 0xe5, 0xbc, 0x0f, 0x35, 0xd2, 0xb0, 0x1d, 0x6a, 0x0b, 0xc0, 0xe1, 0x20, 0xdf, 0x96, - 0xbb, 0x0c, 0x57, 0x77, 0x7c, 0xa4, 0x68, 0x6c, 0x47, 0x0b, 0xbe, 0x9a, 0xef, 0x1f, 0x1c, 0x1d, - 0x8a, 0x9e, 0xe7, 0xaa, 0x3f, 0x93, 0x43, 0x83, 0x9c, 0x94, 0x2e, 0xa5, 0x47, 0x0a, 0xbe, 0x1b, - 0x05, 0x4f, 0x54, 0xd4, 0xc2, 0x5e, 0x29, 0xaa, 0xfa, 0xa9, 0x6c, 0x30, 0x1b, 0x55, 0x1d, 0xd3, - 0xda, 0xdd, 0x6c, 0x74, 0x01, 0xa1, 0x89, 0x95, 0x8e, 0x75, 0x87, 0xdd, 0x5b, 0x65, 0xc3, 0x7b, - 0xab, 0x86, 0xa9, 0x09, 0x18, 0x7c, 0x0e, 0xe5, 0xcb, 0x94, 0x3f, 0xed, 0x99, 0xa1, 0xf1, 0x81, - 0xb7, 0x18, 0xa7, 0xcc, 0xe3, 0x1a, 0x80, 0xe9, 0xe6, 0x6a, 0x7c, 0xcd, 0x23, 0xcc, 0x9c, 0xcd, - 0xb1, 0xcd, 0xd5, 0x22, 0x05, 0x68, 0x0c, 0x8e, 0xaf, 0xa1, 0xb1, 0x32, 0x69, 0xea, 0x6b, 0xb3, - 0x66, 0xb3, 0x69, 0xba, 0xa4, 0x61, 0x5b, 0x86, 0x0b, 0x42, 0xe6, 0xd5, 0xb5, 0x5c, 0x2d, 0x4e, - 0x80, 0x55, 0x54, 0x98, 0x5f, 0x5a, 0x72, 0x89, 0x07, 0xe2, 0xcb, 0x8d, 0x23, 0x3a, 0x39, 0xdb, - 0x00, 0xd1, 0x38, 0x46, 0xfd, 0x42, 0x86, 0xee, 0x5e, 0xdc, 0x3b, 0x9e, 0xdd, 0x0e, 0xb4, 0x7c, - 0x57, 0x22, 0xb9, 0x14, 0xda, 0x15, 0x59, 0xf8, 0xda, 0x63, 0xfc, 0x6b, 0xfb, 0xb8, 0x6d, 0x11, - 0x5a, 0x14, 0x89, 0x5f, 0x95, 0xdb, 0xe4, 0xab, 0xd4, 0x3f, 0xcf, 0xa2, 0x53, 0xbc, 0xc5, 0x13, - 0x4d, 0xb3, 0xbd, 0x68, 0xeb, 0x8e, 0xa1, 0x91, 0x06, 0x31, 0xef, 0x92, 0x83, 0x39, 0xf0, 0xe4, - 0xa1, 0x93, 0xdf, 0xc5, 0xd0, 0xb9, 0x0a, 0x1b, 0x41, 0x2a, 0x19, 0x38, 0xf0, 0x65, 0x46, 0xc5, - 0xe8, 0xc6, 0x7a, 0x71, 0xc8, 0x60, 0x60, 0x38, 0xf2, 0xd7, 0x44, 0x22, 0xaa, 0x24, 0x33, 0xc4, - 0x5a, 0xf6, 0x56, 0x40, 0x49, 0x7a, 0x99, 0x92, 0x34, 0x01, 0xa2, 0x71, 0x8c, 0xfa, 0x67, 0x59, - 0x74, 0x22, 0x2a, 0xf2, 0x1a, 0xb1, 0x8c, 0x23, 0x79, 0xbf, 0x3d, 0xf2, 0xfe, 0x46, 0x0e, 0xdd, - 0xcf, 0xcb, 0xd4, 0x56, 0x74, 0x87, 0x18, 0x65, 0xd3, 0x21, 0x0d, 0xcf, 0x76, 0xd6, 0x0e, 0xb0, - 0x01, 0xb5, 0x77, 0x62, 0xbf, 0x86, 0x0a, 0x7c, 0xfb, 0xcf, 0xd6, 0x99, 0x91, 0xa0, 0x25, 0x00, - 0x8d, 0xad, 0x50, 0xec, 0xe8, 0x20, 0xd2, 0x59, 0x85, 0xad, 0x74, 0xd6, 0xfb, 0xd0, 0x70, 0x20, - 0x7a, 0xd8, 0x88, 0xf6, 0x85, 0xd6, 0x96, 0xe1, 0x23, 0x60, 0x2f, 0xaa, 0xc9, 0x84, 0x50, 0x9b, - 0x0f, 0xa8, 0x94, 0xc1, 0x1a, 0x1a, 0xe6, 0xb5, 0x05, 0xe5, 0x4c, 0x43, 0x13, 0x89, 0xd4, 0xf5, - 0x3c, 0x3a, 0x93, 0xdc, 0xed, 0x1a, 0xd1, 0x8d, 0xa3, 0x5e, 0x7f, 0x57, 0xf6, 0x3a, 0x7e, 0x10, - 0xe5, 0xab, 0xba, 0xb7, 0xc2, 0xef, 0xc1, 0xe1, 0x4e, 0x78, 0xc9, 0x6c, 0x92, 0x7a, 0x5b, 0xf7, - 0x56, 0x34, 0x40, 0x09, 0x73, 0x06, 0x02, 0x8e, 0x09, 0x73, 0x86, 0xb0, 0xd8, 0x0f, 0x3e, 0x90, - 0xb9, 0x98, 0x4f, 0x5c, 0xec, 0xbf, 0x96, 0x4f, 0x9b, 0x57, 0x6e, 0x3b, 0xa6, 0x47, 0x8e, 0x34, - 0xec, 0x48, 0xc3, 0x76, 0xa9, 0x61, 0x7f, 0x90, 0x45, 0xc3, 0xc1, 0xa6, 0xe9, 0x0d, 0xd2, 0xd8, - 0x9f, 0xb5, 0x2a, 0xdc, 0xca, 0xe4, 0x76, 0xbd, 0x95, 0xd9, 0x8d, 0x42, 0xa9, 0xc1, 0x91, 0x27, - 0x33, 0x0d, 0x40, 0x62, 0xec, 0xc8, 0x33, 0x38, 0xe8, 0x7c, 0x10, 0xf5, 0xcd, 0xea, 0xf7, 0xcc, - 0x56, 0xa7, 0xc5, 0xad, 0x74, 0xf0, 0xeb, 0x6a, 0xe9, 0xf7, 0x34, 0x1f, 0xae, 0xfe, 0xcb, 0x0c, - 0x1a, 0xe1, 0x42, 0xe5, 0xcc, 0x77, 0x25, 0xd5, 0x50, 0x3a, 0xd9, 0x5d, 0x4b, 0x27, 0xb7, 0x73, - 0xe9, 0xa8, 0x3f, 0x96, 0x43, 0xca, 0x94, 0xd9, 0x24, 0x0b, 0x8e, 0x6e, 0xb9, 0x4b, 0xc4, 0xe1, - 0xdb, 0xe9, 0x49, 0xca, 0x6a, 0x57, 0x1f, 0x28, 0x4c, 0x29, 0xd9, 0x1d, 0x4d, 0x29, 0xef, 0x45, - 0x03, 0xbc, 0x31, 0x81, 0x4f, 0x21, 0x8c, 0x1a, 0xc7, 0x07, 0x6a, 0x21, 0x9e, 0x12, 0x97, 0xda, - 0x6d, 0xc7, 0xbe, 0x4b, 0x1c, 0x76, 0x4b, 0xc5, 0x89, 0x75, 0x1f, 0xa8, 0x85, 0x78, 0x81, 0x33, - 0xf1, 0xed, 0x45, 0x91, 0x33, 0x71, 0xb4, 0x10, 0x8f, 0x2f, 0xa2, 0xfe, 0x19, 0xbb, 0xa1, 0x83, - 0xa0, 0xd9, 0xb4, 0x32, 0xb4, 0xb1, 0x5e, 0xec, 0x6f, 0x72, 0x98, 0x16, 0x60, 0x29, 0x65, 0xd9, - 0x5e, 0xb5, 0x9a, 0xb6, 0xce, 0x9c, 0x5f, 0xfa, 0x19, 0xa5, 0xc1, 0x61, 0x5a, 0x80, 0xa5, 0x94, - 0x54, 0xe6, 0xe0, 0x54, 0xd4, 0x1f, 0xf2, 0x5c, 0xe2, 0x30, 0x2d, 0xc0, 0xaa, 0x5f, 0xc8, 0x53, - 0xed, 0x75, 0xcd, 0x37, 0x0f, 0xfd, 0xba, 0x10, 0x0e, 0x98, 0xde, 0x1d, 0x0c, 0x98, 0x43, 0x73, - 0x60, 0xa7, 0xfe, 0x45, 0x1f, 0x42, 0x5c, 0xfa, 0x93, 0x47, 0x9b, 0xc3, 0xdd, 0x69, 0x4d, 0x19, - 0x8d, 0x4d, 0x5a, 0x2b, 0xba, 0xd5, 0x20, 0x46, 0x78, 0x6c, 0x59, 0x80, 0xa1, 0x0d, 0x3e, 0xbd, - 0x84, 0x23, 0xc3, 0x73, 0x4b, 0x2d, 0x5e, 0x00, 0x3f, 0x89, 0x06, 0x2b, 0x96, 0x47, 0x1c, 0xbd, - 0xe1, 0x99, 0x77, 0x09, 0x9f, 0x1a, 0xe0, 0x66, 0xd8, 0x0c, 0xc1, 0x9a, 0x48, 0x83, 0xaf, 0xa1, - 0xa1, 0xaa, 0xee, 0x78, 0x66, 0xc3, 0x6c, 0xeb, 0x96, 0xe7, 0x2a, 0xfd, 0x30, 0xa3, 0x81, 0x85, - 0xd1, 0x16, 0xe0, 0x9a, 0x44, 0x85, 0x3f, 0x82, 0x06, 0x60, 0x6b, 0x0a, 0x8e, 0xd3, 0x03, 0x9b, - 0x5e, 0x1c, 0x3e, 0x14, 0xba, 0x07, 0xb2, 0xd3, 0x57, 0xb8, 0x01, 0x8e, 0xde, 0x1d, 0x06, 0x1c, - 0xf1, 0x07, 0x50, 0xdf, 0xa4, 0x65, 0x00, 0x73, 0xb4, 0x29, 0x73, 0x95, 0x33, 0x3f, 0x19, 0x32, - 0xb7, 0xdb, 0x11, 0xde, 0x3e, 0xbb, 0xe4, 0x51, 0x36, 0xf8, 0xf6, 0x8d, 0xb2, 0xa1, 0xb7, 0xe1, - 0x58, 0x7c, 0x78, 0xaf, 0x8e, 0xc5, 0x47, 0x76, 0x78, 0x2c, 0xae, 0xbe, 0x89, 0x06, 0xc7, 0xab, - 0x53, 0xc1, 0xe8, 0x3d, 0x8d, 0x72, 0x55, 0xee, 0xa9, 0x90, 0x67, 0xf6, 0x4c, 0xdb, 0x34, 0x34, - 0x0a, 0xc3, 0x97, 0x50, 0xff, 0x04, 0xb8, 0xbf, 0xf1, 0x5b, 0xc4, 0x3c, 0x5b, 0xff, 0x1a, 0x00, - 0x03, 0x2f, 0x58, 0x1f, 0x8d, 0x1f, 0x41, 0x7d, 0x55, 0xc7, 0x5e, 0x76, 0xf4, 0x16, 0x5f, 0x83, - 0xc1, 0x55, 0xa4, 0xcd, 0x40, 0x9a, 0x8f, 0x53, 0xbf, 0x2f, 0xe3, 0x9b, 0xed, 0xb4, 0x44, 0xad, - 0x03, 0x47, 0xf3, 0x50, 0x77, 0x3f, 0x2b, 0xe1, 0x32, 0x90, 0xe6, 0xe3, 0xf0, 0x25, 0xd4, 0x3b, - 0xe9, 0x38, 0xb6, 0x23, 0x3a, 0x9b, 0x13, 0x0a, 0x10, 0xaf, 0x7b, 0x81, 0x02, 0x3f, 0x8b, 0x06, - 0xd9, 0x9c, 0xc3, 0x4e, 0x34, 0x73, 0xdd, 0x6e, 0x4a, 0x45, 0x4a, 0xf5, 0x2b, 0x39, 0xc1, 0x66, - 0x63, 0x12, 0x3f, 0x84, 0xb7, 0x02, 0x4f, 0xa1, 0xdc, 0x78, 0x75, 0x8a, 0x4f, 0x80, 0xc7, 0xfd, - 0xa2, 0x82, 0xaa, 0x44, 0xca, 0x51, 0x6a, 0x7c, 0x16, 0xe5, 0xab, 0x54, 0x7d, 0x0a, 0xa0, 0x1e, - 0xfd, 0x1b, 0xeb, 0xc5, 0x7c, 0x9b, 0xea, 0x0f, 0x40, 0x01, 0x4b, 0x37, 0x33, 0x6c, 0xc7, 0xc4, - 0xb0, 0xe1, 0x3e, 0xe6, 0x2c, 0xca, 0x97, 0x9c, 0xe5, 0xbb, 0x7c, 0xd6, 0x02, 0xac, 0xee, 0x2c, - 0xdf, 0xd5, 0x00, 0x8a, 0xaf, 0x20, 0xa4, 0x11, 0xaf, 0xe3, 0x58, 0xf0, 0x0e, 0x64, 0x00, 0xce, - 0xdf, 0x60, 0x36, 0x74, 0x00, 0x5a, 0x6f, 0xd8, 0x06, 0xd1, 0x04, 0x12, 0xf5, 0xa7, 0xc2, 0x8b, - 0x9d, 0xb2, 0xe9, 0xde, 0x39, 0xea, 0xc2, 0x6d, 0x74, 0xa1, 0xce, 0x8f, 0x38, 0xe3, 0x9d, 0x54, - 0x44, 0xbd, 0x53, 0x4d, 0x7d, 0xd9, 0x85, 0x3e, 0xe4, 0xbe, 0x64, 0x4b, 0x14, 0xa0, 0x31, 0x78, - 0xa4, 0x9f, 0xfa, 0x37, 0xef, 0xa7, 0x1f, 0xec, 0x0d, 0x46, 0xdb, 0x1c, 0xf1, 0x56, 0x6d, 0xe7, - 0xa8, 0xab, 0xb6, 0xda, 0x55, 0x17, 0x50, 0x5f, 0xcd, 0x69, 0x08, 0x47, 0x17, 0xb0, 0x1f, 0x70, - 0x9d, 0x06, 0x3b, 0xb6, 0xf0, 0x91, 0x94, 0xae, 0xec, 0x7a, 0x40, 0xd7, 0x17, 0xd2, 0x19, 0xae, - 0xc7, 0xe9, 0x38, 0x92, 0xd3, 0x55, 0x6d, 0xc7, 0xe3, 0x1d, 0x17, 0xd0, 0xb5, 0x6d, 0xc7, 0xd3, - 0x7c, 0x24, 0x7e, 0x2f, 0x42, 0x0b, 0x13, 0x55, 0xdf, 0xd9, 0x7e, 0x20, 0xf4, 0x05, 0xe4, 0x5e, - 0xf6, 0x9a, 0x80, 0xc6, 0x0b, 0x68, 0x60, 0xbe, 0x4d, 0x1c, 0xb6, 0x15, 0x62, 0x2f, 0x3b, 0xde, - 0x13, 0x11, 0x2d, 0xef, 0xf7, 0xcb, 0xfc, 0xff, 0x80, 0x9c, 0xad, 0x2f, 0xb6, 0xff, 0x53, 0x0b, - 0x19, 0xe1, 0x67, 0x51, 0xa1, 0xc4, 0xec, 0xbc, 0x41, 0x60, 0x19, 0x88, 0x0c, 0xb6, 0xa0, 0x0c, - 0xc5, 0xf6, 0xec, 0x3a, 0xfc, 0xad, 0x71, 0x72, 0xf5, 0x12, 0x1a, 0x8d, 0x56, 0x83, 0x07, 0x51, - 0xdf, 0xc4, 0xfc, 0xdc, 0xdc, 0xe4, 0xc4, 0xc2, 0x68, 0x0f, 0xee, 0x47, 0xf9, 0xda, 0xe4, 0x5c, - 0x79, 0x34, 0xa3, 0xfe, 0x9c, 0x30, 0x83, 0x50, 0xd5, 0x3a, 0xba, 0x1a, 0xde, 0xd5, 0x7d, 0xcb, - 0x28, 0xdc, 0x87, 0xc2, 0x89, 0x41, 0xcb, 0xf4, 0x3c, 0x62, 0xf0, 0x55, 0x02, 0xee, 0x0b, 0xbd, - 0x7b, 0x5a, 0x0c, 0x8f, 0x1f, 0x43, 0xc3, 0x00, 0xe3, 0x57, 0x84, 0x6c, 0x7f, 0xcc, 0x0b, 0x38, - 0xf7, 0x34, 0x19, 0xa9, 0x7e, 0x35, 0xbc, 0x1d, 0x9e, 0x21, 0xfa, 0x41, 0xbd, 0x51, 0x7c, 0x87, - 0xf4, 0x97, 0xfa, 0x57, 0x79, 0xf6, 0x04, 0x84, 0x3d, 0xdc, 0xdb, 0x0f, 0x51, 0x86, 0x47, 0xba, - 0xb9, 0x6d, 0x1c, 0xe9, 0x3e, 0x86, 0x0a, 0xb3, 0xc4, 0x5b, 0xb1, 0x7d, 0xc7, 0x2f, 0xf0, 0xd0, - 0x6b, 0x01, 0x44, 0xf4, 0xd0, 0x63, 0x34, 0xf8, 0x0e, 0xc2, 0xfe, 0xab, 0xbc, 0xc0, 0x11, 0xdb, - 0x3f, 0x42, 0x3e, 0x15, 0xdb, 0xa7, 0xd4, 0xe0, 0x49, 0x2e, 0xf8, 0xd8, 0x9f, 0x08, 0x1c, 0xbd, - 0x05, 0x4f, 0xac, 0xbf, 0x5c, 0x2f, 0x16, 0x18, 0x8d, 0x96, 0xc0, 0x16, 0xbf, 0x86, 0x06, 0x66, - 0xa7, 0x4a, 0xfc, 0x85, 0x1e, 0xf3, 0x8a, 0x38, 0x1d, 0x48, 0xd1, 0x47, 0x04, 0x22, 0x81, 0xf7, - 0x36, 0xad, 0x25, 0x3d, 0xfe, 0x40, 0x2f, 0xe4, 0x42, 0xb5, 0x85, 0xbd, 0xdc, 0xe1, 0xa7, 0x0b, - 0x81, 0xb6, 0xc8, 0xef, 0x79, 0xa2, 0xb2, 0x62, 0xd8, 0x88, 0xb6, 0xf4, 0xef, 0x62, 0x74, 0xcf, - 0xa3, 0xb1, 0x52, 0xbb, 0xdd, 0x34, 0x89, 0x01, 0xfa, 0xa2, 0x75, 0x9a, 0xc4, 0xe5, 0x2e, 0x3f, - 0xf0, 0x18, 0x44, 0x67, 0xc8, 0x3a, 0xbc, 0x0b, 0xad, 0x3b, 0x1d, 0xd9, 0x3f, 0x33, 0x5e, 0x56, - 0xfd, 0x81, 0x2c, 0x3a, 0x39, 0xe1, 0x10, 0xdd, 0x23, 0xb3, 0x53, 0xa5, 0x52, 0x07, 0x7c, 0xe4, - 0x9a, 0x4d, 0x62, 0x2d, 0xef, 0xcf, 0xb0, 0x7e, 0x01, 0x8d, 0x04, 0x0d, 0xa8, 0x35, 0xec, 0x36, - 0x11, 0x1f, 0x56, 0x35, 0x7c, 0x4c, 0xdd, 0xa5, 0x28, 0x2d, 0x42, 0x8a, 0x6f, 0xa0, 0xe3, 0x01, - 0xa4, 0xd4, 0x6c, 0xda, 0xab, 0x1a, 0xe9, 0xb8, 0xcc, 0x31, 0xb6, 0x9f, 0x39, 0xc6, 0x86, 0x1c, - 0x74, 0x8a, 0xaf, 0x3b, 0x94, 0x40, 0x4b, 0x2a, 0xa5, 0x7e, 0x3e, 0x87, 0x4e, 0xdd, 0xd2, 0x9b, - 0xa6, 0x11, 0x8a, 0x46, 0x23, 0x6e, 0xdb, 0xb6, 0x5c, 0x72, 0x80, 0x46, 0xa9, 0x34, 0x14, 0xf2, - 0x7b, 0x32, 0x14, 0xe2, 0x5d, 0xd4, 0xbb, 0xeb, 0x2e, 0x2a, 0xec, 0xa8, 0x8b, 0xfe, 0x53, 0x06, - 0x8d, 0xfa, 0x8e, 0xff, 0xe2, 0x6b, 0x6a, 0xc1, 0x2b, 0x1d, 0x8e, 0x10, 0x23, 0x7e, 0xd0, 0x80, - 0xc7, 0x35, 0xd4, 0x37, 0x79, 0xaf, 0x6d, 0x3a, 0xc4, 0xdd, 0x82, 0x13, 0xf7, 0x39, 0x7e, 0x5c, - 0x32, 0x46, 0x58, 0x91, 0xd8, 0x49, 0x09, 0x03, 0xc3, 0x73, 0x3e, 0xf6, 0xf4, 0x61, 0xdc, 0x7f, - 0x22, 0xce, 0x9e, 0xf3, 0xf1, 0x27, 0x12, 0xd2, 0xfb, 0xcc, 0x90, 0x14, 0x3f, 0x84, 0x72, 0x0b, - 0x0b, 0x33, 0x7c, 0x26, 0x85, 0xa7, 0xf9, 0x9e, 0x27, 0xbe, 0x57, 0xa4, 0x58, 0xf5, 0x8f, 0xb3, - 0x08, 0x51, 0x55, 0x60, 0xc3, 0x75, 0x5f, 0x94, 0x70, 0x1c, 0xf5, 0xfb, 0x02, 0xe7, 0x6a, 0x18, - 0x78, 0xed, 0x47, 0x3b, 0x22, 0x5a, 0x77, 0xf0, 0x42, 0xa3, 0xe8, 0x3b, 0x92, 0xb3, 0x7b, 0x00, - 0xd8, 0xd9, 0x80, 0x23, 0xb9, 0xef, 0x3e, 0xfe, 0x5e, 0x34, 0xc0, 0x67, 0x3c, 0x5b, 0x3a, 0xff, - 0x6f, 0xf8, 0x40, 0x2d, 0xc4, 0x47, 0xa6, 0xd6, 0xc2, 0x2e, 0x16, 0x62, 0x5f, 0xbc, 0xac, 0x57, - 0x8e, 0xc4, 0xbb, 0xc7, 0xe2, 0xfd, 0x0c, 0x17, 0x2f, 0x7b, 0xc1, 0x73, 0x60, 0xc5, 0xbb, 0x67, - 0x67, 0xdf, 0xea, 0x1f, 0x64, 0x10, 0xa6, 0xcd, 0xaa, 0xea, 0xae, 0xbb, 0x6a, 0x3b, 0x06, 0x73, - 0x4e, 0xdf, 0x17, 0xc1, 0xec, 0xdd, 0x7d, 0xe5, 0x57, 0xfa, 0xd1, 0x71, 0xc9, 0xf1, 0xf7, 0x80, - 0x4f, 0x56, 0x97, 0xe4, 0xd1, 0xd4, 0xed, 0xd5, 0xcb, 0xc3, 0xe2, 0x85, 0x68, 0xaf, 0xf4, 0x00, - 0x4d, 0xb8, 0x09, 0x7d, 0x1c, 0x0d, 0xf1, 0x1f, 0x74, 0x85, 0xf6, 0x6f, 0xba, 0x60, 0x94, 0xba, - 0x14, 0xa0, 0x49, 0x68, 0xfc, 0x34, 0x1a, 0xa0, 0x03, 0x66, 0x19, 0xa2, 0x78, 0xf4, 0x85, 0x2f, - 0x4a, 0x0c, 0x1f, 0x28, 0xae, 0x27, 0x01, 0xa5, 0xf0, 0x8e, 0xa8, 0x7f, 0x0b, 0xef, 0x88, 0x3e, - 0x8a, 0x06, 0x4b, 0x96, 0x65, 0x7b, 0xb0, 0x49, 0x77, 0xf9, 0xd5, 0x44, 0xaa, 0x55, 0xfe, 0x10, - 0x3c, 0x8e, 0x0f, 0xe9, 0x13, 0xcd, 0x72, 0x91, 0x21, 0xbe, 0xea, 0xbf, 0x8a, 0x21, 0x0e, 0xf7, - 0x2a, 0x87, 0xeb, 0x19, 0x87, 0xc3, 0xe2, 0x8f, 0x62, 0xa0, 0xf3, 0x86, 0xab, 0x8e, 0xdd, 0xb6, - 0x5d, 0x62, 0x30, 0x41, 0x0d, 0x86, 0xa1, 0x06, 0xda, 0x1c, 0x01, 0xef, 0xd8, 0xa4, 0x88, 0x1a, - 0x52, 0x11, 0xbc, 0x84, 0x4e, 0xf8, 0x17, 0xc5, 0xc1, 0x8b, 0xc1, 0x4a, 0xd9, 0x55, 0x86, 0xe0, - 0x55, 0x12, 0x8e, 0x2a, 0x43, 0xa5, 0x3c, 0x7e, 0xde, 0xbf, 0x16, 0xf1, 0x9f, 0x1c, 0xd6, 0x4d, - 0x43, 0xec, 0xea, 0x44, 0x7e, 0xf8, 0x5b, 0xd0, 0xe0, 0xac, 0x7e, 0xaf, 0xdc, 0xe1, 0x67, 0x2f, - 0xc3, 0x5b, 0xbf, 0x7d, 0x69, 0xe9, 0xf7, 0xea, 0x06, 0x2f, 0x17, 0xb1, 0x29, 0x44, 0x96, 0xb8, - 0x8e, 0x4e, 0x56, 0x1d, 0xbb, 0x65, 0x7b, 0xc4, 0x88, 0x3c, 0xbe, 0x3b, 0x16, 0xbe, 0xd6, 0x6d, - 0x73, 0x8a, 0x7a, 0x97, 0x57, 0x78, 0x29, 0x6c, 0x70, 0x0b, 0x1d, 0x2b, 0xb9, 0x6e, 0xa7, 0x45, - 0xc2, 0x1b, 0xaa, 0xd1, 0x4d, 0x3f, 0xe3, 0x3d, 0xdc, 0x6b, 0xf9, 0x7e, 0x1d, 0x8a, 0xb2, 0x0b, - 0xaa, 0xba, 0x67, 0x8a, 0x35, 0xc2, 0xb7, 0x44, 0x79, 0xbf, 0x9a, 0xef, 0x1f, 0x19, 0x3d, 0xa6, - 0x9d, 0x8a, 0x37, 0x66, 0xc1, 0xf4, 0x9a, 0x44, 0xfd, 0x72, 0x06, 0xa1, 0x50, 0xc0, 0xf8, 0x71, - 0x39, 0x54, 0x50, 0x26, 0xbc, 0xe8, 0xe0, 0xd1, 0x0b, 0xa4, 0xd8, 0x40, 0xf8, 0x2c, 0xca, 0x43, - 0x84, 0x8b, 0x6c, 0x78, 0xb0, 0x7a, 0xc7, 0xb4, 0x0c, 0x0d, 0xa0, 0x14, 0x2b, 0x3c, 0x45, 0x07, - 0x2c, 0x5c, 0xea, 0x33, 0xab, 0xb0, 0x8c, 0x8e, 0xd5, 0x3a, 0x8b, 0x7e, 0xdd, 0xc2, 0xbb, 0x3a, - 0x08, 0xb4, 0xe1, 0x76, 0x16, 0x83, 0xc7, 0xa8, 0x52, 0x18, 0x13, 0xb9, 0x88, 0xfa, 0x85, 0x4c, - 0x64, 0x16, 0xdc, 0xc7, 0x45, 0xef, 0xe1, 0xb8, 0x9f, 0x46, 0x7c, 0x5a, 0x52, 0xff, 0x56, 0x16, - 0x0d, 0x56, 0x6d, 0xc7, 0xe3, 0x21, 0x43, 0x0e, 0xf6, 0x2a, 0x24, 0xec, 0x95, 0xf2, 0xdb, 0xd8, - 0x2b, 0x9d, 0x45, 0x79, 0xc1, 0x45, 0x99, 0xdd, 0x8b, 0x18, 0x86, 0xa3, 0x01, 0x54, 0xfd, 0xd6, - 0x2c, 0x42, 0x1f, 0x78, 0xf2, 0xc9, 0x43, 0x2c, 0x20, 0xf5, 0x47, 0x33, 0xe8, 0x18, 0xbf, 0xa8, - 0x13, 0x82, 0x6e, 0xf5, 0xf9, 0x57, 0xac, 0xe2, 0xb8, 0x64, 0x20, 0xcd, 0xc7, 0xd1, 0x25, 0x60, - 0xf2, 0x9e, 0xe9, 0xc1, 0x5d, 0x85, 0x10, 0x75, 0x8b, 0x70, 0x98, 0xb8, 0x04, 0xf8, 0x74, 0xf8, - 0x71, 0xff, 0x0a, 0x32, 0x17, 0xae, 0x7b, 0xb4, 0xc0, 0x64, 0xe2, 0x35, 0xa4, 0xfa, 0xc5, 0x3c, - 0xca, 0x4f, 0xde, 0x23, 0x8d, 0x03, 0xde, 0x35, 0xc2, 0xc1, 0x66, 0x7e, 0x97, 0x07, 0x9b, 0x3b, - 0xf1, 0xa9, 0x78, 0x39, 0xec, 0xcf, 0x82, 0x5c, 0x7d, 0xa4, 0xe7, 0xa3, 0xd5, 0xfb, 0x3d, 0x7d, - 0xf0, 0x5c, 0x72, 0xfe, 0x49, 0x0e, 0xe5, 0x6a, 0x13, 0xd5, 0x23, 0xbd, 0xd9, 0x57, 0xbd, 0xe9, - 0x7e, 0x67, 0xad, 0x06, 0xd7, 0x50, 0xfd, 0xa1, 0x97, 0x68, 0xe4, 0xc6, 0xe9, 0x1b, 0x39, 0x34, - 0x52, 0x9b, 0x5a, 0xa8, 0x0a, 0x27, 0xc1, 0x37, 0x98, 0x27, 0x1f, 0xf8, 0x94, 0xb1, 0x2e, 0x3d, - 0x1b, 0xb3, 0x67, 0x6e, 0x56, 0x2c, 0xef, 0x99, 0x6b, 0xb7, 0xf4, 0x66, 0x87, 0xc0, 0xd1, 0x0b, - 0xf3, 0xfb, 0x75, 0xcd, 0x37, 0xc9, 0xe7, 0xe1, 0xe1, 0xbf, 0xcf, 0x00, 0xbf, 0x80, 0x72, 0x37, - 0xb9, 0x47, 0x46, 0x1a, 0x9f, 0xa7, 0xae, 0x32, 0x3e, 0x74, 0x12, 0xcc, 0x75, 0x4c, 0x03, 0x38, - 0xd0, 0x52, 0xb4, 0xf0, 0x75, 0xbe, 0x00, 0x6f, 0xa9, 0xf0, 0xb2, 0x5f, 0xf8, 0x7a, 0xa5, 0x8c, - 0x6b, 0x68, 0xb0, 0x4a, 0x9c, 0x96, 0x09, 0x1d, 0xe5, 0xcf, 0xd9, 0xdd, 0x99, 0xd0, 0x9d, 0xca, - 0x60, 0x3b, 0x2c, 0x04, 0xcc, 0x44, 0x2e, 0xf8, 0x75, 0x84, 0x98, 0x8d, 0xb2, 0xc5, 0x40, 0x8e, - 0xe7, 0xc0, 0xee, 0x67, 0xa6, 0x65, 0x82, 0x8d, 0x27, 0x30, 0xc3, 0x77, 0xd0, 0xe8, 0xac, 0x6d, - 0x98, 0x4b, 0x26, 0x73, 0xbd, 0x84, 0x0a, 0x0a, 0x9b, 0x3b, 0x3c, 0x51, 0x53, 0xb2, 0x25, 0x94, - 0x4b, 0xaa, 0x26, 0xc6, 0x58, 0xfd, 0x87, 0xbd, 0x28, 0x4f, 0xbb, 0xfd, 0x68, 0xfc, 0xee, 0x66, - 0xfc, 0x96, 0xd0, 0xe8, 0x6d, 0xdb, 0xb9, 0x63, 0x5a, 0xcb, 0x81, 0x57, 0x3c, 0xdf, 0x9b, 0x82, - 0x27, 0xcf, 0x2a, 0xc3, 0xd5, 0x03, 0x07, 0x7a, 0x2d, 0x46, 0xbe, 0xc9, 0x08, 0x7e, 0x0e, 0x21, - 0xf6, 0xd6, 0x1d, 0x68, 0xfa, 0xc3, 0x60, 0x15, 0xec, 0x25, 0x3c, 0x38, 0xda, 0x8b, 0xc1, 0x2a, - 0x42, 0x62, 0xba, 0x09, 0x67, 0xbe, 0x10, 0x03, 0xe0, 0x77, 0x0f, 0x9b, 0x70, 0xf0, 0x85, 0x10, - 0x8d, 0x00, 0xe6, 0x15, 0x51, 0x45, 0x48, 0xb8, 0x5f, 0x42, 0x11, 0x41, 0x48, 0x93, 0x03, 0x0f, - 0x0f, 0x97, 0x70, 0xbd, 0xa4, 0x09, 0x3c, 0xf0, 0x33, 0x91, 0x0b, 0x70, 0x2c, 0x71, 0x4b, 0xbd, - 0xff, 0x0e, 0x1d, 0xa8, 0x86, 0x36, 0x73, 0xa0, 0x52, 0x7f, 0x27, 0x8b, 0x06, 0x6a, 0x9d, 0x45, - 0x77, 0xcd, 0xf5, 0x48, 0xeb, 0x80, 0xab, 0xb1, 0xbf, 0xbd, 0xca, 0x27, 0x6e, 0xaf, 0x1e, 0xf2, - 0x85, 0x22, 0x9c, 0x3b, 0x06, 0x26, 0x9d, 0xef, 0x4f, 0x16, 0x2a, 0x72, 0x61, 0xfb, 0x8a, 0xac, - 0xfe, 0x72, 0x16, 0x8d, 0xb2, 0x6b, 0xb7, 0xb2, 0xe9, 0x36, 0xf6, 0xe0, 0x29, 0xc0, 0xfe, 0xcb, - 0x74, 0x77, 0x57, 0xd5, 0x5b, 0x78, 0x60, 0xa1, 0x7e, 0x3c, 0x8b, 0x06, 0x4b, 0x1d, 0x6f, 0xa5, - 0xe4, 0x81, 0x66, 0x1e, 0xca, 0xdd, 0xcd, 0x6f, 0x67, 0xd0, 0x31, 0xda, 0x90, 0x05, 0xfb, 0x0e, - 0xb1, 0xf6, 0xe0, 0xd8, 0x52, 0x3c, 0x7e, 0xcc, 0xee, 0xf0, 0xf8, 0xd1, 0x97, 0x65, 0x6e, 0x7b, - 0xb2, 0x84, 0xc3, 0x76, 0xcd, 0x6e, 0x92, 0x83, 0xfd, 0x19, 0x7b, 0x78, 0xd8, 0xee, 0x0b, 0x64, - 0x0f, 0x2e, 0x77, 0xde, 0x5d, 0x02, 0xd9, 0x83, 0x93, 0xa9, 0x77, 0x87, 0x40, 0xbe, 0x92, 0x41, - 0x03, 0xe3, 0xb6, 0x77, 0xc0, 0x07, 0x3e, 0xff, 0x8a, 0x83, 0xad, 0xe6, 0xfe, 0x57, 0x1c, 0x6c, - 0xdd, 0x54, 0x7f, 0x28, 0x8b, 0x4e, 0xf0, 0x10, 0xdf, 0xfc, 0xf4, 0xe2, 0x68, 0x3a, 0xe6, 0x83, - 0x2d, 0x2e, 0x9a, 0xa3, 0x79, 0x88, 0x8b, 0xe6, 0xa7, 0x73, 0xe8, 0x04, 0x04, 0x42, 0xa5, 0x9b, - 0xba, 0x77, 0x81, 0x2d, 0x82, 0x1b, 0xf2, 0x15, 0xea, 0x6c, 0xc2, 0x15, 0xea, 0x5f, 0xae, 0x17, - 0x9f, 0x59, 0x36, 0xbd, 0x95, 0xce, 0xe2, 0xe5, 0x86, 0xdd, 0xba, 0xb2, 0xec, 0xe8, 0x77, 0x4d, - 0x76, 0x79, 0xa8, 0x37, 0xaf, 0x04, 0xd9, 0x32, 0xf4, 0xb6, 0xc9, 0xf3, 0x68, 0xd4, 0x60, 0xa7, - 0x44, 0xb9, 0xfa, 0x97, 0xaf, 0x2e, 0x42, 0xaf, 0xda, 0xa6, 0xc5, 0x3d, 0x12, 0x99, 0xa1, 0x5b, - 0xa3, 0xbb, 0xcb, 0x37, 0x6c, 0xd3, 0xaa, 0x47, 0xdd, 0x12, 0xb7, 0x5b, 0x5f, 0xc8, 0x5a, 0x13, - 0xaa, 0x51, 0xff, 0x45, 0x06, 0x9d, 0x96, 0xb5, 0xf8, 0xdd, 0x60, 0x3b, 0xfe, 0x70, 0x16, 0xdd, - 0x77, 0x1d, 0x84, 0x13, 0xb8, 0x81, 0x1c, 0xcd, 0x5b, 0x7c, 0x70, 0x26, 0xc8, 0xe6, 0xc8, 0xa2, - 0x4c, 0x97, 0xcd, 0xd1, 0xa4, 0xce, 0x65, 0xf3, 0xcf, 0x33, 0xe8, 0xf8, 0x7c, 0xa5, 0x3c, 0xf1, - 0x2e, 0x19, 0x51, 0xf1, 0xef, 0x39, 0xe0, 0x06, 0x67, 0xec, 0x7b, 0x0e, 0xb8, 0xe9, 0x49, 0xbf, - 0xa7, 0x56, 0x9a, 0x9d, 0x79, 0x37, 0xe9, 0x9b, 0xf4, 0x3d, 0xef, 0x02, 0x7d, 0x93, 0xbe, 0xe7, - 0x80, 0xeb, 0xdb, 0x3f, 0x2e, 0xa0, 0xc1, 0x1b, 0x9d, 0x45, 0xc2, 0x1d, 0x4a, 0x0e, 0xf5, 0x79, - 0xeb, 0x55, 0x34, 0xc8, 0xc5, 0x00, 0x37, 0x1d, 0x42, 0xc0, 0x3b, 0x1e, 0xc0, 0x84, 0xc5, 0x14, - 0x12, 0x89, 0xf0, 0x59, 0x94, 0xbf, 0x45, 0x9c, 0x45, 0xf1, 0x2d, 0xe8, 0x5d, 0xe2, 0x2c, 0x6a, - 0x00, 0xc5, 0x33, 0xa1, 0x9b, 0x7b, 0xa9, 0x5a, 0x81, 0xe4, 0x27, 0xfc, 0x92, 0x05, 0xb2, 0xb9, - 0x04, 0xbe, 0x6a, 0x7a, 0xdb, 0x64, 0x69, 0x53, 0xc4, 0x77, 0xe8, 0xd1, 0x92, 0x78, 0x0e, 0x8d, - 0x89, 0xce, 0x4a, 0x2c, 0xf3, 0x47, 0x7f, 0x02, 0xbb, 0xa4, 0x9c, 0x1f, 0xf1, 0xa2, 0xf8, 0x65, - 0x34, 0xe4, 0x03, 0xc1, 0xed, 0x6a, 0x20, 0x0c, 0x37, 0x1f, 0xb0, 0x8a, 0xa4, 0x15, 0x92, 0x0a, - 0x88, 0x0c, 0xe0, 0xea, 0x00, 0x25, 0x30, 0x88, 0xb8, 0xb1, 0x49, 0x05, 0xf0, 0xd3, 0xc0, 0x00, - 0x9e, 0x66, 0x80, 0x83, 0xc9, 0x20, 0x3c, 0x94, 0x04, 0x37, 0x7a, 0x87, 0xc3, 0xd9, 0x73, 0x58, - 0x89, 0x0c, 0xcf, 0x23, 0x14, 0x3a, 0x02, 0xf0, 0xa0, 0x03, 0xdb, 0x76, 0x51, 0x10, 0x58, 0x88, - 0x57, 0x78, 0xc3, 0x3b, 0xb9, 0xc2, 0x53, 0x7f, 0x3f, 0x8b, 0x06, 0x4b, 0xed, 0x76, 0x30, 0x14, - 0x1e, 0x47, 0x85, 0x52, 0xbb, 0x7d, 0x53, 0xab, 0x88, 0xe1, 0xc7, 0xf5, 0x76, 0xbb, 0xde, 0x71, - 0x4c, 0xd1, 0x8f, 0x93, 0x11, 0xe1, 0x09, 0x34, 0x5c, 0x6a, 0xb7, 0xab, 0x9d, 0xc5, 0xa6, 0xd9, - 0x10, 0xb2, 0x19, 0xb1, 0xc4, 0x6b, 0xed, 0x76, 0xbd, 0x0d, 0x98, 0x68, 0x4a, 0x2b, 0xb9, 0x0c, - 0xfe, 0x28, 0x84, 0xea, 0xe1, 0xc9, 0x74, 0x58, 0xba, 0x0e, 0x35, 0x08, 0x3c, 0x1e, 0xb6, 0xed, - 0x72, 0x40, 0xc4, 0x02, 0xb4, 0x9f, 0xf5, 0xc3, 0xdc, 0xd3, 0x8a, 0x62, 0x49, 0x73, 0x42, 0x96, - 0xf8, 0x09, 0xd4, 0x57, 0x6a, 0xb7, 0x85, 0x3b, 0x22, 0x70, 0x04, 0xa2, 0xa5, 0x22, 0x7d, 0xec, - 0x93, 0x9d, 0x79, 0x11, 0x8d, 0xc8, 0x95, 0x6d, 0x2b, 0xc0, 0xfb, 0x37, 0x33, 0xf0, 0x41, 0x07, - 0xdc, 0x0f, 0xf9, 0x29, 0x94, 0x2b, 0xb5, 0xdb, 0x7c, 0x3e, 0x3a, 0x9e, 0xd0, 0x1f, 0xd1, 0x67, - 0xcb, 0xa5, 0x76, 0xdb, 0xff, 0xf4, 0x03, 0xfe, 0xa0, 0x61, 0x47, 0x9f, 0xfe, 0x15, 0xf6, 0xe9, - 0x07, 0xfb, 0xb1, 0x81, 0xfa, 0xc5, 0x1c, 0x3a, 0x56, 0x6a, 0xb7, 0x8f, 0x02, 0xc3, 0xef, 0xd5, - 0xe3, 0xe8, 0x27, 0x11, 0x12, 0xa6, 0xc7, 0xbe, 0xe0, 0xb9, 0xd5, 0xa0, 0x30, 0x35, 0x2a, 0x19, - 0x4d, 0x20, 0xf2, 0xd5, 0xaf, 0x7f, 0x5b, 0xea, 0xf7, 0xf1, 0x1c, 0x4c, 0xc5, 0x07, 0x3d, 0xd0, - 0xd3, 0x3b, 0xa5, 0xdb, 0x78, 0x1f, 0x14, 0xb6, 0xd5, 0x07, 0xbf, 0x25, 0x0d, 0x1e, 0x08, 0x34, - 0x7e, 0xd4, 0x0b, 0xbd, 0xbb, 0x32, 0x8b, 0x47, 0x44, 0x61, 0xf2, 0xe8, 0x33, 0x7e, 0xf2, 0x23, - 0x1e, 0x0b, 0xa9, 0x41, 0x51, 0x75, 0xd3, 0xd0, 0x22, 0xb4, 0x7e, 0x1f, 0xf6, 0x6d, 0xab, 0x0f, - 0xd7, 0xb3, 0xf0, 0xde, 0x39, 0x88, 0xa5, 0xb4, 0xfb, 0xdd, 0xc5, 0x15, 0x84, 0xd8, 0x7d, 0x7f, - 0xe0, 0x8a, 0x3c, 0xcc, 0xc2, 0xa6, 0xb0, 0x9c, 0x48, 0x3c, 0x6c, 0x4a, 0x48, 0x12, 0x78, 0x35, - 0xe5, 0x12, 0xbd, 0x9a, 0x2e, 0xa1, 0x7e, 0x4d, 0x5f, 0x7d, 0xad, 0x43, 0x9c, 0x35, 0x6e, 0xce, - 0xb0, 0x50, 0x85, 0xfa, 0x6a, 0xfd, 0x63, 0x14, 0xa8, 0x05, 0x68, 0xac, 0x06, 0x0f, 0xe6, 0x05, - 0x3f, 0x0c, 0x76, 0x32, 0x1d, 0x3c, 0x93, 0xdf, 0x89, 0xa2, 0xe3, 0xe7, 0x51, 0xae, 0x74, 0xbb, - 0xc6, 0x25, 0x1b, 0x74, 0x6d, 0xe9, 0x76, 0x8d, 0xcb, 0x2b, 0xb5, 0xec, 0xed, 0x9a, 0xfa, 0xf1, - 0x2c, 0xc2, 0x71, 0x4a, 0xfc, 0x0c, 0x1a, 0x00, 0xe8, 0x32, 0xd5, 0x19, 0x31, 0x99, 0xe6, 0xaa, - 0x5b, 0x77, 0x00, 0x2a, 0x19, 0x77, 0x3e, 0x29, 0x7e, 0x0e, 0xf2, 0x06, 0xf3, 0x74, 0x6e, 0x52, - 0x32, 0xcd, 0x55, 0xd7, 0xcf, 0xb4, 0x1b, 0x49, 0x1b, 0xcc, 0x89, 0xc1, 0x2e, 0xbc, 0x5d, 0x9b, - 0xb6, 0x5d, 0x8f, 0x8b, 0x9a, 0xd9, 0x85, 0xab, 0x2e, 0x64, 0x71, 0x95, 0xec, 0x42, 0x46, 0x06, - 0x99, 0xa8, 0x6e, 0xd7, 0xd8, 0xd3, 0x12, 0x43, 0xb3, 0x9b, 0xbe, 0x41, 0xc9, 0x32, 0x51, 0xad, - 0xba, 0x75, 0xf6, 0x2c, 0xc5, 0x80, 0x84, 0xc5, 0x52, 0x26, 0x2a, 0xa9, 0x94, 0xfa, 0xe9, 0x7e, - 0x34, 0x5a, 0xd6, 0x3d, 0x7d, 0x51, 0x77, 0x89, 0xb0, 0x9b, 0x3e, 0xe6, 0xc3, 0xfc, 0xcf, 0x11, - 0xe4, 0x60, 0x2c, 0x26, 0x7c, 0x4d, 0xb4, 0x00, 0x7e, 0x21, 0xe4, 0x1b, 0xe4, 0x09, 0x15, 0x13, - 0x8f, 0x2d, 0xd6, 0xdb, 0x1c, 0xac, 0xc5, 0x08, 0xf1, 0x63, 0x68, 0xd0, 0x87, 0xd1, 0x0d, 0x40, - 0x2e, 0xd4, 0x19, 0x63, 0x91, 0xda, 0xff, 0x9a, 0x88, 0xc6, 0xcf, 0xa1, 0x21, 0xff, 0xa7, 0x60, - 0x5a, 0xb3, 0x2c, 0x6a, 0x8b, 0xb1, 0xdd, 0x93, 0x48, 0x2a, 0x16, 0x85, 0xf9, 0xad, 0x57, 0x2a, - 0x1a, 0x49, 0x54, 0x26, 0x91, 0xe2, 0x8f, 0xa1, 0x11, 0xff, 0x37, 0xdf, 0x30, 0xb0, 0x9c, 0x6e, - 0x8f, 0x05, 0xf9, 0x90, 0x23, 0x62, 0xbd, 0x2c, 0x93, 0xb3, 0xad, 0xc3, 0xfd, 0x7e, 0xee, 0x2d, - 0x63, 0x31, 0xbe, 0x73, 0x88, 0x54, 0x80, 0x2b, 0x68, 0xcc, 0x87, 0x84, 0x1a, 0xda, 0x17, 0xee, - 0x18, 0x8d, 0xc5, 0x7a, 0xa2, 0x92, 0xc6, 0x4b, 0xe1, 0x26, 0x3a, 0x2b, 0x01, 0x0d, 0x77, 0xc5, - 0x5c, 0xf2, 0xf8, 0x76, 0x8f, 0xc7, 0x0d, 0xe6, 0xc9, 0x16, 0x03, 0xae, 0x8c, 0xc6, 0xcf, 0x9a, - 0x2a, 0x67, 0x74, 0xea, 0xca, 0x0d, 0xd7, 0xd0, 0x09, 0x1f, 0x7f, 0x7d, 0xa2, 0x5a, 0x75, 0xec, - 0x37, 0x48, 0xc3, 0xab, 0x94, 0xf9, 0x76, 0x19, 0xe2, 0xc9, 0x19, 0x8b, 0xf5, 0xe5, 0x46, 0x9b, - 0x2a, 0x05, 0xc5, 0xc9, 0xcc, 0x13, 0x0b, 0xe3, 0x5b, 0xe8, 0x3e, 0x01, 0x5e, 0xb1, 0x5c, 0x4f, - 0xb7, 0x1a, 0xa4, 0x52, 0xe6, 0x7b, 0x68, 0xd8, 0xcf, 0x73, 0xae, 0x26, 0x47, 0xca, 0x6c, 0x93, - 0x8b, 0xe3, 0x17, 0xd1, 0xb0, 0x8f, 0x60, 0x77, 0x77, 0x83, 0x70, 0x77, 0x07, 0x43, 0xd2, 0x58, - 0xac, 0x47, 0x5f, 0x40, 0xca, 0xc4, 0xa2, 0x46, 0x41, 0x3a, 0xfa, 0x21, 0x49, 0xa3, 0xbc, 0xb5, - 0x76, 0xa2, 0x32, 0x42, 0x8a, 0xfa, 0x97, 0x43, 0x8d, 0x9a, 0x77, 0xcc, 0x65, 0x93, 0xed, 0xa4, - 0xfd, 0x47, 0x8f, 0x8b, 0x75, 0x1b, 0x80, 0x49, 0xfa, 0xc1, 0xc8, 0xcf, 0x94, 0xd0, 0xf1, 0x04, - 0x1d, 0xdb, 0xd6, 0x8e, 0xf1, 0x53, 0xd9, 0xb0, 0x11, 0x07, 0x7c, 0xdb, 0x38, 0x8e, 0xfa, 0xfd, - 0x2f, 0xe1, 0xc6, 0x83, 0x92, 0x36, 0x34, 0xa3, 0x3c, 0x7c, 0xbc, 0x24, 0x8e, 0x03, 0xbe, 0x95, - 0xdc, 0x0b, 0x71, 0xbc, 0x95, 0x09, 0xc5, 0x71, 0xc0, 0xb7, 0x97, 0xdf, 0x93, 0x0f, 0xe7, 0xa4, - 0xa3, 0x3d, 0xe6, 0x5e, 0x99, 0xc9, 0xa1, 0xf7, 0x69, 0x61, 0x1b, 0x8f, 0x0f, 0x45, 0xd5, 0xec, - 0xdb, 0x99, 0x6a, 0xe2, 0x17, 0xd1, 0x60, 0xd5, 0x76, 0xbd, 0x65, 0x87, 0xb8, 0xd5, 0x20, 0xee, - 0x3d, 0x3c, 0x5c, 0x6d, 0x73, 0x70, 0xbd, 0x2d, 0xcd, 0xfe, 0x22, 0xb9, 0xfa, 0x87, 0xb9, 0x98, - 0x36, 0x30, 0xc3, 0xf5, 0x40, 0x6a, 0xc3, 0x1e, 0x0c, 0x75, 0x7c, 0x35, 0x5c, 0x05, 0x99, 0x85, - 0xdf, 0x2b, 0x04, 0xf5, 0x5b, 0xe4, 0x06, 0xbe, 0x4c, 0x82, 0x3f, 0x84, 0x4e, 0x49, 0x80, 0xaa, - 0xee, 0xe8, 0x2d, 0xe2, 0x85, 0x39, 0x06, 0x21, 0x4c, 0x93, 0x5f, 0xba, 0xde, 0x0e, 0xd0, 0x62, - 0xde, 0xc2, 0x14, 0x0e, 0x82, 0x6a, 0xf5, 0x6d, 0xc3, 0xb1, 0xf9, 0x8f, 0xf2, 0x48, 0x09, 0xcc, - 0xcb, 0xe0, 0x01, 0xd0, 0x3e, 0x4e, 0xe5, 0xef, 0x88, 0xce, 0x35, 0xd1, 0x58, 0x28, 0x8c, 0x5a, - 0xa7, 0xd5, 0xd2, 0xa1, 0x83, 0xa9, 0xf9, 0x5a, 0x8c, 0x32, 0x0b, 0x09, 0x99, 0xc5, 0x7a, 0x86, - 0x5b, 0xac, 0x38, 0x7c, 0x60, 0x55, 0x77, 0x19, 0x0b, 0x2d, 0xce, 0x15, 0x7f, 0x26, 0x83, 0x4e, - 0x94, 0x96, 0x96, 0x48, 0xc3, 0x23, 0xc6, 0xfc, 0x22, 0x35, 0xdd, 0x26, 0xec, 0x8e, 0xe5, 0xf9, - 0xd6, 0xf2, 0xf3, 0xe9, 0xd5, 0xb1, 0x4e, 0xba, 0x9c, 0x54, 0x98, 0xb5, 0x24, 0x08, 0x58, 0xa0, - 0x73, 0x92, 0xba, 0x0d, 0x34, 0xf5, 0x06, 0x10, 0x69, 0x89, 0xf5, 0x9e, 0xb9, 0x8e, 0x4e, 0xa7, - 0xb2, 0xdc, 0xcc, 0x54, 0xea, 0x15, 0x4d, 0xa5, 0x7f, 0x95, 0x09, 0xd5, 0x3d, 0x22, 0x24, 0x7c, - 0x19, 0xa1, 0x10, 0xc4, 0x37, 0x4f, 0x23, 0x1b, 0xeb, 0x45, 0x14, 0x0a, 0x4d, 0x13, 0x28, 0xf0, - 0x3c, 0x2a, 0x70, 0xb1, 0xb0, 0xac, 0xb1, 0xef, 0xdd, 0xa4, 0x17, 0x2e, 0x8b, 0x72, 0x80, 0x8d, - 0x11, 0xff, 0x66, 0xce, 0xe6, 0xcc, 0x73, 0x68, 0x70, 0xa7, 0xdf, 0xf5, 0x99, 0x1c, 0xc2, 0xe2, - 0x4e, 0x67, 0x1f, 0xcd, 0xc0, 0x77, 0xc4, 0x60, 0xd9, 0x59, 0xd6, 0x97, 0x8b, 0xa8, 0x9f, 0x7e, - 0x02, 0xe4, 0x51, 0x10, 0xe2, 0xa6, 0x76, 0x38, 0x4c, 0x0b, 0xb0, 0x61, 0xd0, 0xa2, 0xbe, 0xe4, - 0xa0, 0x45, 0xea, 0xf7, 0xe7, 0xd0, 0x49, 0xb1, 0x43, 0xca, 0x04, 0x42, 0xb1, 0x1f, 0x75, 0xca, - 0xdb, 0xd8, 0x29, 0x2a, 0x2a, 0x30, 0x03, 0x97, 0xc7, 0xc4, 0x67, 0x87, 0x0f, 0x00, 0xd1, 0x38, - 0x46, 0xfd, 0xf7, 0x59, 0x34, 0x1c, 0x18, 0x11, 0xba, 0xe3, 0x1e, 0xe2, 0xee, 0x78, 0x1f, 0x1a, - 0x86, 0xb0, 0x33, 0x2d, 0x62, 0xb1, 0xd0, 0x2c, 0xbd, 0x42, 0x12, 0x0b, 0x1f, 0xc1, 0xf3, 0x15, - 0x49, 0x84, 0x54, 0xfb, 0x99, 0x7d, 0x21, 0x04, 0x03, 0x62, 0xc6, 0x05, 0x83, 0xab, 0x3f, 0x91, - 0x43, 0x43, 0xbe, 0x94, 0xc7, 0xcd, 0x83, 0x7a, 0x9b, 0xb0, 0xbf, 0x42, 0xbe, 0x82, 0x50, 0xd5, - 0x76, 0x3c, 0xbd, 0x39, 0x17, 0x6a, 0x3e, 0x1c, 0xc3, 0xb5, 0x01, 0xca, 0xca, 0x08, 0x24, 0xb0, - 0x7e, 0x85, 0xc6, 0x1b, 0x9b, 0x98, 0xd8, 0xfa, 0x15, 0x40, 0x35, 0x81, 0x42, 0xfd, 0x8d, 0x2c, - 0x3a, 0xe6, 0x77, 0xd2, 0xe4, 0x3d, 0xd2, 0xe8, 0x1c, 0xe6, 0xb9, 0x49, 0x96, 0x76, 0xef, 0xa6, - 0xd2, 0x56, 0xff, 0xab, 0x30, 0x91, 0x4c, 0x34, 0xed, 0xa3, 0x89, 0xe4, 0xaf, 0x43, 0xc7, 0xd5, - 0x6f, 0xcf, 0xa1, 0x13, 0xbe, 0xd4, 0xa7, 0x3a, 0x16, 0x6c, 0x60, 0x27, 0xf4, 0x66, 0xf3, 0x30, - 0xef, 0xf9, 0x06, 0x7d, 0x41, 0xcc, 0xf3, 0x38, 0x6e, 0x3c, 0x77, 0xdc, 0x12, 0x07, 0xd7, 0x6d, - 0xd3, 0xd0, 0x44, 0x22, 0xfc, 0x32, 0x1a, 0xf2, 0x7f, 0x96, 0x9c, 0x65, 0x7f, 0xa3, 0x07, 0xc7, - 0xd1, 0x41, 0x21, 0xdd, 0x91, 0x9e, 0xab, 0x4b, 0x05, 0xd4, 0xff, 0x58, 0x40, 0x67, 0x6e, 0x9b, - 0x96, 0x61, 0xaf, 0xba, 0x7e, 0xea, 0xc1, 0x03, 0x7f, 0x1c, 0xb3, 0xdf, 0x29, 0x07, 0x5f, 0x43, - 0xf7, 0x45, 0x45, 0xea, 0x04, 0x01, 0xa1, 0x79, 0xef, 0xac, 0x32, 0x82, 0xba, 0x9f, 0x84, 0x90, - 0xdf, 0xe9, 0x68, 0xc9, 0x25, 0xa3, 0x59, 0x0c, 0xfb, 0xb6, 0x92, 0xc5, 0xf0, 0x51, 0x54, 0x28, - 0xdb, 0x2d, 0xdd, 0xf4, 0x03, 0x97, 0xc0, 0x28, 0x0e, 0xea, 0x05, 0x8c, 0xc6, 0x29, 0x28, 0x7f, - 0x5e, 0x31, 0x74, 0xd9, 0x40, 0xc8, 0xdf, 0x2f, 0x40, 0xad, 0x34, 0x4d, 0x24, 0xc2, 0x36, 0x1a, - 0xe6, 0xd5, 0xf1, 0x1b, 0x18, 0x04, 0x9b, 0xa7, 0xa7, 0x7d, 0x19, 0xa5, 0xab, 0xd5, 0x65, 0xa9, - 0x1c, 0xdb, 0x46, 0xb1, 0xe4, 0x8a, 0xfc, 0x63, 0xd8, 0x5d, 0x8c, 0x26, 0xf3, 0x17, 0x84, 0x00, - 0x93, 0xcc, 0x60, 0x5c, 0x08, 0x30, 0xcb, 0x88, 0x44, 0x78, 0x12, 0x8d, 0x41, 0xd8, 0xde, 0x60, - 0x2b, 0x45, 0x55, 0x62, 0x08, 0x8c, 0x4a, 0x38, 0xd8, 0x67, 0x91, 0x7e, 0xe9, 0xc7, 0xd5, 0x1b, - 0x1c, 0xad, 0xc5, 0x4b, 0x9c, 0x79, 0x05, 0xe1, 0x78, 0x9b, 0xb7, 0x75, 0xb4, 0xff, 0xe9, 0x6c, - 0xb8, 0xaf, 0x3b, 0xe8, 0xce, 0x19, 0x7b, 0x71, 0x98, 0xfd, 0x0b, 0x19, 0x34, 0x16, 0x0b, 0x03, - 0x8d, 0x9f, 0x42, 0x88, 0x41, 0x84, 0x70, 0x7b, 0x10, 0xbf, 0x22, 0x0c, 0x0d, 0xcd, 0x97, 0x92, - 0x90, 0x0c, 0x5f, 0x41, 0xfd, 0xec, 0x17, 0x0f, 0x91, 0x13, 0x2f, 0xd2, 0xe9, 0x98, 0x86, 0x16, - 0x10, 0x85, 0xb5, 0xc0, 0x1d, 0x51, 0x2e, 0xb1, 0x88, 0xb7, 0xd6, 0x0e, 0x6a, 0xa1, 0x64, 0xb4, - 0x03, 0x87, 0x82, 0x06, 0x97, 0x8c, 0xfd, 0xea, 0xba, 0x02, 0x8f, 0xa8, 0x9d, 0xdb, 0x2c, 0xa2, - 0x76, 0x64, 0x6e, 0xe2, 0x21, 0xb4, 0xf7, 0xee, 0x61, 0xc9, 0x67, 0xb3, 0xe8, 0x58, 0x50, 0xeb, - 0x3e, 0x5e, 0x47, 0xbc, 0x83, 0x44, 0xf2, 0x99, 0x0c, 0x52, 0xc6, 0xcd, 0x66, 0xd3, 0xb4, 0x96, - 0x2b, 0xd6, 0x92, 0xed, 0xb4, 0x60, 0xf2, 0xd8, 0xbf, 0xe3, 0x4e, 0xf5, 0xbb, 0x32, 0x68, 0x8c, - 0x37, 0x68, 0x42, 0x77, 0x8c, 0xfd, 0x3b, 0x4b, 0x8a, 0xb6, 0x64, 0xff, 0xf4, 0x45, 0xfd, 0x52, - 0x16, 0xa1, 0x19, 0xbb, 0x71, 0xe7, 0x80, 0xbf, 0x2c, 0x7c, 0x01, 0x15, 0x58, 0x9c, 0x22, 0xae, - 0xb1, 0x63, 0x97, 0xd9, 0x83, 0x51, 0xfa, 0x69, 0x0c, 0x31, 0x3e, 0xca, 0x4f, 0x68, 0x0b, 0x2c, - 0xce, 0x91, 0x92, 0xd1, 0x78, 0x11, 0x5a, 0x29, 0xa5, 0xe3, 0x56, 0x4d, 0x50, 0x29, 0x85, 0xc9, - 0x95, 0x6e, 0xac, 0x17, 0xf3, 0x4d, 0xbb, 0x71, 0x47, 0x03, 0x7a, 0xf5, 0xaf, 0x32, 0x4c, 0x76, - 0x07, 0xfc, 0x75, 0x9d, 0xff, 0xf9, 0xf9, 0x6d, 0x7e, 0xfe, 0x77, 0x67, 0xd0, 0x09, 0x8d, 0x34, - 0xec, 0xbb, 0xc4, 0x59, 0x9b, 0xb0, 0x0d, 0x72, 0x9d, 0x58, 0xc4, 0xd9, 0xaf, 0x11, 0xf5, 0x0f, - 0x20, 0x05, 0x41, 0xd8, 0x98, 0x9b, 0x2e, 0x31, 0x0e, 0x4e, 0x7a, 0x08, 0xf5, 0x57, 0xfa, 0x90, - 0x92, 0x68, 0x21, 0x1e, 0x58, 0xab, 0x28, 0xd5, 0xec, 0xcf, 0xef, 0x95, 0xd9, 0xdf, 0xbb, 0x3d, - 0xb3, 0xbf, 0xb0, 0x5d, 0xb3, 0xbf, 0x6f, 0x2b, 0x66, 0x7f, 0x2b, 0x6a, 0xf6, 0xf7, 0x83, 0xd9, - 0xff, 0x54, 0x57, 0xb3, 0x7f, 0xd2, 0x32, 0x76, 0x68, 0xf4, 0x1f, 0xd8, 0xd4, 0xa5, 0x3b, 0xd9, - 0xad, 0x5c, 0xa4, 0x93, 0x62, 0xc3, 0x76, 0x0c, 0x62, 0xf0, 0x4d, 0x0a, 0x9c, 0x90, 0x3b, 0x1c, - 0xa6, 0x05, 0xd8, 0x58, 0x1e, 0xd8, 0xe1, 0xad, 0xe4, 0x81, 0xdd, 0x83, 0x6d, 0xcc, 0xa7, 0xb2, - 0x68, 0x6c, 0x82, 0x38, 0x1e, 0x0b, 0x84, 0xb8, 0x17, 0x4e, 0x4a, 0x25, 0x74, 0x4c, 0x60, 0x08, - 0x16, 0x79, 0x36, 0x74, 0xbc, 0x6a, 0x10, 0xc7, 0x8b, 0xfa, 0x6d, 0x45, 0xe9, 0x69, 0xf5, 0x7e, - 0x2e, 0x26, 0x3e, 0x76, 0x83, 0xea, 0x7d, 0x38, 0x13, 0xa4, 0xc9, 0x7f, 0x69, 0x01, 0xbd, 0x90, - 0x5e, 0x29, 0xbf, 0xfd, 0xf4, 0x4a, 0xea, 0xcf, 0x65, 0xd0, 0x05, 0x8d, 0x58, 0x64, 0x55, 0x5f, - 0x6c, 0x12, 0xa1, 0x59, 0x7c, 0x65, 0xa0, 0xb3, 0x86, 0xe9, 0xb6, 0x74, 0xaf, 0xb1, 0xb2, 0x2b, - 0x19, 0x4d, 0xa1, 0x21, 0x71, 0xfe, 0xda, 0xc6, 0xdc, 0x26, 0x95, 0x53, 0x7f, 0x3d, 0x87, 0xfa, - 0xc6, 0x6d, 0xef, 0x55, 0x7b, 0x97, 0xf9, 0xbe, 0xc2, 0x29, 0x3f, 0xbb, 0x8d, 0x73, 0x91, 0x27, - 0xa0, 0x72, 0x21, 0x04, 0x3a, 0x38, 0xf5, 0x2d, 0xda, 0xb1, 0x50, 0xf1, 0x3e, 0xd9, 0x36, 0x33, - 0x7d, 0x3d, 0x83, 0x06, 0x20, 0x0a, 0x86, 0x70, 0x72, 0x09, 0x2e, 0xb3, 0x1e, 0x05, 0x46, 0xeb, - 0x08, 0x49, 0xf1, 0x87, 0xa4, 0xc8, 0x8d, 0x85, 0xdd, 0x67, 0x06, 0x13, 0x83, 0x38, 0xee, 0x59, - 0x02, 0x2e, 0xf5, 0x1b, 0x79, 0x34, 0xe4, 0x3b, 0x4a, 0xee, 0x53, 0x0f, 0x3e, 0x8e, 0x0a, 0xd3, - 0xb6, 0x10, 0xce, 0x1d, 0x1c, 0x2b, 0x57, 0x6c, 0x37, 0xe2, 0x31, 0xca, 0x89, 0xf0, 0x53, 0xa8, - 0x7f, 0xce, 0x36, 0x44, 0xb7, 0x60, 0x18, 0xd3, 0x96, 0x6d, 0xc4, 0x9e, 0x55, 0x06, 0x84, 0xf8, - 0x02, 0xca, 0x83, 0x47, 0xb5, 0x70, 0xf4, 0x1c, 0xf1, 0xa2, 0x06, 0xbc, 0xa0, 0x1b, 0x85, 0xed, - 0xea, 0x46, 0xdf, 0x4e, 0x75, 0xa3, 0x7f, 0x6f, 0x75, 0xe3, 0x75, 0x34, 0x04, 0x35, 0xf9, 0xd9, - 0xa0, 0x36, 0x5f, 0xde, 0x4e, 0xf3, 0x15, 0x68, 0x98, 0xb5, 0x9b, 0xe7, 0x84, 0x82, 0x85, 0x47, - 0x62, 0x15, 0x51, 0x3b, 0xb4, 0x0b, 0xb5, 0xfb, 0xc3, 0x0c, 0xea, 0xbb, 0x69, 0xdd, 0xb1, 0xec, - 0xd5, 0xdd, 0x69, 0xdc, 0x53, 0x68, 0x90, 0xb3, 0x11, 0xe6, 0x78, 0x78, 0x29, 0xdb, 0x61, 0xe0, - 0x3a, 0x70, 0xd2, 0x44, 0x2a, 0xfc, 0x62, 0x50, 0x08, 0x1e, 0x4d, 0xe4, 0xc2, 0x84, 0x08, 0x7e, - 0xa1, 0x86, 0x1c, 0xc3, 0x5d, 0x24, 0xc7, 0x67, 0x51, 0xbe, 0x4c, 0x9b, 0x2a, 0x44, 0x04, 0xa5, - 0x4d, 0xd1, 0x00, 0xaa, 0xfe, 0xb3, 0x2c, 0x1a, 0x89, 0x1c, 0x3f, 0x3d, 0x8a, 0x06, 0xf8, 0xf1, - 0x8f, 0xe9, 0x07, 0x95, 0x87, 0x47, 0x15, 0x01, 0x50, 0xeb, 0x67, 0x7f, 0x56, 0x0c, 0xfc, 0x7e, - 0xd4, 0x67, 0xbb, 0xb0, 0x34, 0xc1, 0xb7, 0x8c, 0x84, 0x43, 0x68, 0xbe, 0x46, 0xdb, 0xce, 0x06, - 0x07, 0x27, 0x11, 0x35, 0xd2, 0x76, 0xe1, 0xd3, 0xae, 0xa1, 0x01, 0xdd, 0x75, 0x89, 0x57, 0xf7, - 0xf4, 0x65, 0x31, 0xce, 0x7c, 0x00, 0x14, 0x47, 0x07, 0x00, 0x17, 0xf4, 0x65, 0xfc, 0x0a, 0x1a, - 0x6e, 0x38, 0x04, 0x16, 0x2f, 0xbd, 0x49, 0x5b, 0x29, 0x18, 0x97, 0x12, 0x42, 0x3c, 0xf1, 0x0f, - 0x11, 0x15, 0x03, 0xdf, 0x42, 0xc3, 0xfc, 0x73, 0x98, 0x47, 0x33, 0x0c, 0xb4, 0x91, 0x70, 0x31, - 0x61, 0x22, 0x61, 0x3e, 0xcd, 0xdc, 0xb1, 0x5d, 0x24, 0x17, 0xf9, 0x1a, 0x02, 0xa9, 0xfa, 0xd5, - 0x0c, 0x35, 0x78, 0x28, 0x00, 0xf2, 0xb3, 0x52, 0x5d, 0x69, 0x6d, 0x53, 0x57, 0x5a, 0x61, 0x26, - 0xb5, 0x82, 0xdb, 0x65, 0x76, 0xd2, 0x38, 0x16, 0x5f, 0x46, 0x05, 0x43, 0x3c, 0xfb, 0x39, 0x29, - 0x7f, 0x84, 0x5f, 0x8f, 0xc6, 0xa9, 0xf0, 0x45, 0x94, 0xa7, 0x06, 0x6d, 0x74, 0xe3, 0x27, 0xae, - 0x91, 0x1a, 0x50, 0xa8, 0xdf, 0x9a, 0x45, 0x43, 0xc2, 0xd7, 0x5c, 0xdd, 0xd5, 0xe7, 0x3c, 0xbf, - 0xb5, 0x66, 0xfa, 0x6e, 0x0e, 0xb0, 0x23, 0xf0, 0x9b, 0x7c, 0x2d, 0x10, 0xc5, 0x96, 0xae, 0x20, - 0xb8, 0x60, 0x9e, 0xe1, 0x1f, 0x5a, 0xd8, 0xfa, 0x26, 0x88, 0xd2, 0xbf, 0x9a, 0xef, 0xcf, 0x8e, - 0xe6, 0x5e, 0xcd, 0xf7, 0xe7, 0x47, 0x7b, 0x21, 0xaa, 0x0e, 0x04, 0xb2, 0x65, 0x3b, 0x4c, 0x6b, - 0xc9, 0x5c, 0x3e, 0xe0, 0x3e, 0xe9, 0x7b, 0x1b, 0x71, 0x28, 0x22, 0x9b, 0x03, 0xee, 0xa0, 0xfe, - 0xb6, 0xca, 0xe6, 0x28, 0xf3, 0x1a, 0x97, 0xcd, 0x1f, 0x65, 0x90, 0x92, 0x28, 0x9b, 0xd2, 0x3e, - 0xdd, 0x7c, 0xef, 0x5d, 0xfe, 0xb5, 0xaf, 0x67, 0xd1, 0x58, 0xc5, 0xf2, 0xc8, 0x32, 0xdb, 0xf7, - 0x1c, 0xf0, 0xa9, 0xe2, 0x06, 0x1a, 0x14, 0x3e, 0x86, 0xf7, 0xf9, 0xfd, 0xc1, 0xae, 0x32, 0x44, - 0xa5, 0x70, 0x12, 0x4b, 0xef, 0x61, 0xca, 0xe6, 0x88, 0x90, 0x0f, 0xf8, 0x9c, 0x73, 0x30, 0x84, - 0x7c, 0xc0, 0x27, 0xaf, 0x77, 0xa8, 0x90, 0xff, 0x73, 0x06, 0x1d, 0x4f, 0xa8, 0x1c, 0x5f, 0x40, - 0x7d, 0xb5, 0xce, 0x22, 0x84, 0xf3, 0xc9, 0x84, 0x3e, 0xa2, 0x6e, 0x67, 0x11, 0x22, 0xf9, 0x68, - 0x3e, 0x12, 0x2f, 0xc0, 0xa3, 0xdd, 0xf9, 0x4a, 0x79, 0x82, 0x4b, 0x55, 0x15, 0x9e, 0x1f, 0x53, - 0x70, 0xd2, 0x97, 0x05, 0x0f, 0x7b, 0x6d, 0xd3, 0x68, 0x44, 0x1e, 0xf6, 0xd2, 0x32, 0xf8, 0xc3, - 0x68, 0xa0, 0xf4, 0x66, 0xc7, 0x21, 0xc0, 0x97, 0x49, 0xfc, 0xe1, 0x80, 0xaf, 0x8f, 0x48, 0xe2, - 0xcc, 0xde, 0x28, 0x53, 0x8a, 0x28, 0xef, 0x90, 0xa1, 0xfa, 0xe9, 0x0c, 0x3a, 0x93, 0xde, 0x3a, - 0xfc, 0x04, 0xea, 0xa3, 0x3b, 0xdb, 0x92, 0x36, 0xc7, 0x3f, 0x9d, 0xe5, 0x2a, 0xb4, 0x9b, 0xa4, - 0xae, 0x3b, 0xa2, 0xe1, 0xed, 0x93, 0xe1, 0x97, 0xd0, 0x60, 0xc5, 0x75, 0x3b, 0xc4, 0xa9, 0x3d, - 0x75, 0x53, 0xab, 0xf0, 0x3d, 0x15, 0xd8, 0xec, 0x26, 0x80, 0xeb, 0xee, 0x53, 0x91, 0x80, 0x3d, - 0x22, 0xbd, 0xfa, 0x89, 0x0c, 0x3a, 0xdb, 0xed, 0xab, 0xe8, 0x06, 0x7e, 0x81, 0x58, 0xba, 0x45, - 0x77, 0xfc, 0x99, 0x70, 0x8b, 0xe2, 0x01, 0x4c, 0xde, 0x64, 0x04, 0x84, 0xb4, 0x10, 0x3b, 0x1d, - 0x0b, 0xae, 0xe3, 0xd9, 0x49, 0x1e, 0xc0, 0x22, 0x85, 0x7c, 0x42, 0xf5, 0x77, 0xb3, 0x68, 0xa8, - 0xda, 0xec, 0x2c, 0x9b, 0xc2, 0xc2, 0xb1, 0x63, 0x7b, 0xdb, 0xb7, 0x7e, 0xb3, 0xdb, 0xb3, 0x7e, - 0xe9, 0x70, 0x73, 0x76, 0x38, 0xdc, 0xfc, 0x72, 0xf8, 0x45, 0x54, 0x68, 0xc3, 0x77, 0x44, 0xcf, - 0x13, 0xd9, 0xd7, 0xa5, 0x9d, 0x27, 0xb2, 0x32, 0x74, 0x7c, 0x35, 0x76, 0x31, 0xbe, 0xc2, 0xb2, - 0x82, 0x40, 0xc3, 0x45, 0xe2, 0x48, 0xa0, 0x7b, 0x22, 0xd0, 0x70, 0x41, 0x38, 0x12, 0xe8, 0x2e, - 0x04, 0xfa, 0x2b, 0x59, 0x34, 0x22, 0x57, 0x89, 0x9f, 0x40, 0x83, 0xac, 0x1a, 0x76, 0xae, 0x92, - 0x11, 0xdc, 0x48, 0x43, 0xb0, 0x86, 0xd8, 0x0f, 0x7e, 0x40, 0x74, 0x6c, 0x45, 0x77, 0xeb, 0xe1, - 0x09, 0x07, 0xbb, 0x85, 0xec, 0x67, 0xfe, 0x3c, 0x11, 0x94, 0x36, 0xb2, 0xa2, 0xbb, 0x13, 0xe1, - 0x6f, 0x3c, 0x89, 0x30, 0x24, 0x79, 0x97, 0x19, 0xb0, 0xac, 0xfd, 0x3c, 0x51, 0x6c, 0x14, 0xab, - 0x8d, 0x31, 0x98, 0xc8, 0xe6, 0x23, 0x41, 0xb3, 0x41, 0x19, 0x7a, 0xb7, 0x90, 0xc5, 0x56, 0xa0, - 0x4f, 0x3e, 0x26, 0x64, 0x04, 0x65, 0xdd, 0xd3, 0xd9, 0xa6, 0xdc, 0xef, 0x00, 0xf5, 0xcf, 0x4c, - 0xd4, 0x3b, 0x6f, 0x91, 0xf9, 0x25, 0xfc, 0x24, 0x1a, 0xa0, 0x0a, 0x33, 0x63, 0xd3, 0xbe, 0xcc, - 0x70, 0x2f, 0x00, 0x41, 0x93, 0x00, 0x31, 0xdd, 0xa3, 0x85, 0x54, 0xf8, 0x9a, 0x98, 0xc7, 0x9d, - 0x6b, 0x1f, 0x16, 0xcb, 0x30, 0xcc, 0x74, 0x8f, 0x26, 0xe6, 0x7b, 0xbf, 0x26, 0xe6, 0xcf, 0xe6, - 0x7a, 0x27, 0x95, 0x62, 0x18, 0xbf, 0x14, 0x1f, 0x1f, 0x33, 0x49, 0x49, 0xa6, 0xa3, 0xbb, 0xa7, - 0x38, 0xc5, 0x74, 0x8f, 0x96, 0x9c, 0x9c, 0x7a, 0x48, 0x74, 0x21, 0x8c, 0xba, 0x2e, 0x88, 0xb8, - 0xe9, 0x1e, 0x4d, 0xa2, 0xc5, 0xcf, 0xa2, 0x41, 0xfe, 0xfb, 0x55, 0xdb, 0xb4, 0xa2, 0x31, 0x4e, - 0x04, 0xd4, 0x74, 0x8f, 0x26, 0x52, 0x0a, 0x95, 0x56, 0x1d, 0xd3, 0xf2, 0xf8, 0xdb, 0xc7, 0x68, - 0xa5, 0x80, 0x13, 0x2a, 0x85, 0xdf, 0xf8, 0x25, 0x34, 0x1c, 0x04, 0x8f, 0x79, 0x83, 0x34, 0x3c, - 0x7e, 0x78, 0x7c, 0x5f, 0xa4, 0x30, 0x43, 0x4e, 0xf7, 0x68, 0x32, 0x35, 0xbe, 0x88, 0x0a, 0x1a, - 0x71, 0xcd, 0x37, 0xfd, 0x4b, 0xcf, 0x11, 0x61, 0x9c, 0x9b, 0x6f, 0x52, 0x29, 0x71, 0x3c, 0xed, - 0x9d, 0xf0, 0x96, 0x95, 0x1f, 0xf5, 0xe2, 0x48, 0x2d, 0x93, 0x96, 0x41, 0x7b, 0x47, 0xb8, 0x62, - 0x7f, 0x25, 0x0c, 0xa9, 0xc3, 0x93, 0xe7, 0x0d, 0x46, 0xdf, 0x2e, 0x8b, 0xd8, 0xe9, 0x1e, 0x2d, - 0x42, 0x2f, 0x48, 0xb5, 0x6c, 0xba, 0x77, 0x78, 0x14, 0xc3, 0xa8, 0x54, 0x29, 0x4a, 0x90, 0x2a, - 0xfd, 0x29, 0x54, 0x3d, 0x47, 0xbc, 0x55, 0xdb, 0xb9, 0xc3, 0x63, 0x16, 0x46, 0xab, 0xe6, 0x58, - 0xa1, 0x6a, 0x0e, 0x11, 0xab, 0xa6, 0x03, 0x6e, 0x24, 0xb9, 0x6a, 0xdd, 0xd3, 0xc5, 0xaa, 0xd9, - 0x49, 0x9c, 0xdf, 0x49, 0x33, 0x44, 0xbf, 0xcb, 0x72, 0x18, 0xc7, 0x3b, 0x14, 0x70, 0x42, 0x87, - 0xc2, 0x6f, 0x5a, 0xa9, 0x90, 0xa7, 0x96, 0x27, 0x29, 0x0e, 0x2a, 0x15, 0x50, 0xb4, 0x52, 0x31, - 0xa3, 0xed, 0x35, 0x31, 0x7d, 0xab, 0x32, 0x26, 0x77, 0x50, 0x88, 0xa1, 0x1d, 0x24, 0xa4, 0x79, - 0x2d, 0x42, 0x6a, 0x48, 0x05, 0x03, 0xf9, 0x60, 0xd0, 0xc2, 0x89, 0xea, 0x74, 0x8f, 0x06, 0x49, - 0x23, 0x55, 0x96, 0x74, 0x54, 0x39, 0x0e, 0x14, 0x43, 0x3e, 0x05, 0x85, 0x4d, 0xf7, 0x68, 0x2c, - 0x21, 0xe9, 0x93, 0x42, 0x7a, 0x2f, 0xe5, 0x84, 0x3c, 0x45, 0x04, 0x08, 0x3a, 0x45, 0x84, 0x49, - 0xc0, 0xa6, 0xe2, 0x49, 0xac, 0x94, 0xfb, 0xe4, 0xa5, 0x26, 0x8a, 0x9f, 0xee, 0xd1, 0xe2, 0x89, - 0xaf, 0x9e, 0x95, 0xf2, 0x3a, 0x29, 0x27, 0x23, 0x81, 0x85, 0x42, 0x14, 0x15, 0x97, 0x98, 0x01, - 0x6a, 0x3e, 0x31, 0x8f, 0xbb, 0x72, 0x4a, 0xde, 0xb8, 0x24, 0x90, 0x4c, 0xf7, 0x68, 0x89, 0x19, - 0xe0, 0x27, 0x62, 0xd9, 0x95, 0x14, 0x45, 0xf6, 0xf0, 0x88, 0xa0, 0xa7, 0x7b, 0xb4, 0x58, 0x3e, - 0xa6, 0x6b, 0x62, 0x5a, 0x23, 0xe5, 0xb4, 0xdc, 0x89, 0x21, 0x86, 0x76, 0xa2, 0x90, 0xfe, 0xe8, - 0x9a, 0x98, 0xea, 0x46, 0x39, 0x13, 0x2f, 0x15, 0xce, 0x9c, 0x42, 0x4a, 0x1c, 0x2d, 0x39, 0x7b, - 0x87, 0x72, 0x3f, 0xcf, 0xbe, 0xc8, 0xcb, 0x27, 0xd1, 0x4c, 0xf7, 0x68, 0xc9, 0x99, 0x3f, 0xb4, - 0xe4, 0xb4, 0x17, 0xca, 0xd9, 0x6e, 0x3c, 0x83, 0xd6, 0x25, 0xa7, 0xcc, 0xd0, 0xbb, 0x24, 0x21, - 0x50, 0xce, 0xc9, 0x51, 0x4d, 0x53, 0x09, 0xa7, 0x7b, 0xb4, 0x2e, 0xa9, 0x0c, 0x6e, 0xa6, 0x64, - 0x04, 0x50, 0xce, 0xcb, 0xc9, 0x57, 0x13, 0x89, 0xa6, 0x7b, 0xb4, 0x94, 0x7c, 0x02, 0x37, 0x53, - 0x02, 0xc6, 0x2b, 0xc5, 0xae, 0x6c, 0x03, 0x79, 0xa4, 0x84, 0x9b, 0x9f, 0x4f, 0x8c, 0xb5, 0xae, - 0x3c, 0x20, 0xab, 0x6e, 0x02, 0x09, 0x55, 0xdd, 0xa4, 0x28, 0xed, 0xf3, 0x89, 0xc1, 0xc1, 0x95, - 0x07, 0xbb, 0x30, 0x0c, 0xda, 0x98, 0x18, 0x56, 0x7c, 0x3e, 0x31, 0x3a, 0xb7, 0xa2, 0xca, 0x0c, - 0x13, 0x48, 0x28, 0xc3, 0xa4, 0xb8, 0xde, 0xf3, 0x89, 0xe1, 0xa4, 0x95, 0x87, 0xba, 0x30, 0x0c, - 0x5b, 0x98, 0x14, 0x88, 0xfa, 0x59, 0x29, 0x9e, 0xb3, 0xf2, 0xb0, 0x3c, 0x6f, 0x08, 0x28, 0x3a, - 0x6f, 0x88, 0x91, 0x9f, 0x27, 0x62, 0x11, 0x2b, 0x95, 0x47, 0xe4, 0x61, 0x1e, 0x41, 0xd3, 0x61, - 0x1e, 0x8d, 0x71, 0x39, 0x11, 0x8b, 0xdc, 0xa7, 0x5c, 0x48, 0x63, 0x02, 0x68, 0x99, 0x09, 0x8b, - 0xf5, 0x57, 0x49, 0x08, 0x1d, 0xa7, 0xbc, 0x47, 0xf6, 0x4e, 0x8e, 0x11, 0x4c, 0xf7, 0x68, 0x09, - 0x01, 0xe7, 0xb4, 0xe4, 0x38, 0x29, 0xca, 0x45, 0x79, 0xd8, 0x26, 0xd1, 0xd0, 0x61, 0x9b, 0x18, - 0x63, 0x65, 0x26, 0xe9, 0x25, 0x82, 0x72, 0x49, 0x36, 0xcc, 0xe2, 0x14, 0xd4, 0x30, 0x4b, 0x78, - 0xc1, 0xa0, 0x25, 0xc7, 0xee, 0x50, 0x1e, 0xed, 0xda, 0x42, 0xa0, 0x49, 0x68, 0x21, 0x0b, 0x65, - 0x11, 0xda, 0x4e, 0x37, 0xdb, 0x4d, 0x5b, 0x37, 0x94, 0xf7, 0x26, 0xda, 0x4e, 0x0c, 0x29, 0xd8, - 0x4e, 0x0c, 0x40, 0x57, 0x79, 0xd1, 0x53, 0x5f, 0x79, 0x4c, 0x5e, 0xe5, 0x45, 0x1c, 0x5d, 0xe5, - 0x25, 0xaf, 0xfe, 0x89, 0x98, 0x57, 0xbb, 0xf2, 0xb8, 0xac, 0x00, 0x11, 0x34, 0x55, 0x80, 0xa8, - 0x1f, 0xfc, 0x47, 0xd3, 0xfd, 0xc0, 0x95, 0xcb, 0xc0, 0xed, 0x01, 0x9f, 0x5b, 0x1a, 0xdd, 0x74, - 0x8f, 0x96, 0xee, 0x4b, 0x5e, 0x49, 0x70, 0xeb, 0x56, 0xae, 0xc8, 0x0a, 0x16, 0x23, 0xa0, 0x0a, - 0x16, 0x77, 0x06, 0xaf, 0x24, 0xf8, 0x65, 0x2b, 0x4f, 0xa4, 0xb2, 0x0a, 0xbe, 0x39, 0xc1, 0x9b, - 0xfb, 0x9a, 0xe8, 0x58, 0xad, 0x3c, 0x29, 0x2f, 0x76, 0x21, 0x86, 0x2e, 0x76, 0x82, 0x03, 0xf6, - 0x35, 0xd1, 0xa5, 0x58, 0xb9, 0x1a, 0x2f, 0x15, 0x2e, 0x91, 0x82, 0xeb, 0xb1, 0x96, 0xec, 0x89, - 0xab, 0x3c, 0x25, 0x6b, 0x5d, 0x12, 0x0d, 0xd5, 0xba, 0x44, 0x2f, 0xde, 0xa9, 0xb8, 0x43, 0xad, - 0x72, 0x2d, 0xba, 0xc9, 0x96, 0xf1, 0xd4, 0xf2, 0x89, 0x39, 0xe1, 0xbe, 0x12, 0x0d, 0xe2, 0xa5, - 0x3c, 0x1d, 0xb9, 0xf6, 0x95, 0xb0, 0xd4, 0xbe, 0x8d, 0x04, 0xfd, 0x7a, 0x25, 0x1a, 0xf7, 0x4a, - 0x79, 0x26, 0x99, 0x43, 0xa0, 0x2b, 0xd1, 0x38, 0x59, 0xaf, 0x44, 0x43, 0x45, 0x29, 0xcf, 0x26, - 0x73, 0x08, 0xa4, 0x1b, 0x0d, 0x2d, 0xf5, 0xa4, 0x10, 0xbc, 0x5a, 0x79, 0x9f, 0x6c, 0x3a, 0x06, - 0x08, 0x6a, 0x3a, 0x86, 0x21, 0xae, 0x9f, 0x14, 0x82, 0x3e, 0x2b, 0xcf, 0xc5, 0x8a, 0x04, 0x8d, - 0x15, 0x42, 0x43, 0x3f, 0x29, 0x04, 0x4b, 0x56, 0x9e, 0x8f, 0x15, 0x09, 0x5a, 0x27, 0x84, 0x54, - 0x36, 0xba, 0xbd, 0x58, 0x54, 0x5e, 0x90, 0x0f, 0x83, 0xd3, 0x29, 0xa7, 0x7b, 0xb4, 0x6e, 0x2f, - 0x1f, 0x3f, 0x9a, 0xee, 0x9e, 0xac, 0xbc, 0x28, 0x0f, 0xe1, 0x34, 0x3a, 0x3a, 0x84, 0x53, 0x5d, - 0x9c, 0x5f, 0x8a, 0x44, 0x2f, 0x50, 0x5e, 0x92, 0xa7, 0x38, 0x09, 0x49, 0xa7, 0xb8, 0x68, 0xac, - 0x03, 0xe9, 0x59, 0xbe, 0xf2, 0x7e, 0x79, 0x8a, 0x13, 0x71, 0x74, 0x8a, 0x93, 0x9e, 0xf0, 0x4f, - 0xc4, 0x5e, 0x8b, 0x2b, 0x2f, 0xcb, 0x53, 0x5c, 0x04, 0x4d, 0xa7, 0xb8, 0xe8, 0xfb, 0xf2, 0x97, - 0x22, 0x8f, 0xa6, 0x95, 0x57, 0x92, 0xdb, 0x0f, 0x48, 0xb1, 0xfd, 0xec, 0x89, 0xb5, 0x96, 0xfc, - 0xfa, 0x57, 0x29, 0xc9, 0xe3, 0x37, 0x89, 0x86, 0x8e, 0xdf, 0xc4, 0x97, 0xc3, 0xd1, 0x8d, 0x03, - 0xd7, 0xaa, 0xf1, 0x2e, 0x1b, 0x87, 0xd0, 0x14, 0x49, 0x00, 0x4b, 0x7b, 0x64, 0xb6, 0x11, 0x9a, - 0x48, 0xd9, 0x23, 0xfb, 0xdb, 0xa0, 0x08, 0x3d, 0x9d, 0x5d, 0x63, 0xde, 0xb2, 0x4a, 0x59, 0x9e, - 0x5d, 0x63, 0x04, 0x74, 0x76, 0x8d, 0xfb, 0xd8, 0x4e, 0xa1, 0x51, 0xae, 0x45, 0xcc, 0x09, 0xd8, - 0xb4, 0x96, 0x95, 0xc9, 0xc8, 0xe3, 0xbb, 0x08, 0x9e, 0xce, 0x4e, 0x51, 0x18, 0xac, 0xd7, 0x0c, - 0x36, 0xd1, 0x34, 0xdb, 0x8b, 0xb6, 0xee, 0x18, 0x35, 0x62, 0x19, 0xca, 0x54, 0x64, 0xbd, 0x4e, - 0xa0, 0x81, 0xf5, 0x3a, 0x01, 0x0e, 0xa1, 0xa7, 0x22, 0x70, 0x8d, 0x34, 0x88, 0x79, 0x97, 0x28, - 0xd7, 0x81, 0x6d, 0x31, 0x8d, 0x2d, 0x27, 0x9b, 0xee, 0xd1, 0xd2, 0x38, 0x50, 0x5b, 0x7d, 0x76, - 0xad, 0xf6, 0xda, 0x4c, 0xf0, 0xe0, 0xbc, 0xea, 0x90, 0xb6, 0xee, 0x10, 0x65, 0x5a, 0xb6, 0xd5, - 0x13, 0x89, 0xa8, 0xad, 0x9e, 0x88, 0x88, 0xb3, 0xf5, 0xc7, 0x42, 0xa5, 0x1b, 0xdb, 0x70, 0x44, - 0x24, 0x97, 0xa6, 0xb3, 0x93, 0x8c, 0xa0, 0x02, 0x9a, 0xb1, 0xad, 0x65, 0x38, 0xa9, 0x78, 0x55, - 0x9e, 0x9d, 0xd2, 0x29, 0xe9, 0xec, 0x94, 0x8e, 0xa5, 0xaa, 0x2e, 0x63, 0xd9, 0x18, 0xbc, 0x21, - 0xab, 0x7a, 0x02, 0x09, 0x55, 0xf5, 0x04, 0x70, 0x9c, 0xa1, 0x46, 0x5c, 0xe2, 0x29, 0x33, 0xdd, - 0x18, 0x02, 0x49, 0x9c, 0x21, 0x80, 0xe3, 0x0c, 0xa7, 0x88, 0xd7, 0x58, 0x51, 0x66, 0xbb, 0x31, - 0x04, 0x92, 0x38, 0x43, 0x00, 0xd3, 0xcd, 0xa6, 0x0c, 0x1e, 0xef, 0x34, 0xef, 0xf8, 0x7d, 0x36, - 0x27, 0x6f, 0x36, 0x53, 0x09, 0xe9, 0x66, 0x33, 0x15, 0x89, 0x3f, 0xb1, 0x65, 0x6f, 0x6e, 0x65, - 0x1e, 0x2a, 0xbc, 0x1c, 0xda, 0x05, 0x5b, 0x29, 0x35, 0xdd, 0xa3, 0x6d, 0xd5, 0x5b, 0xfc, 0xbd, - 0x81, 0xd3, 0xa5, 0x52, 0x85, 0xaa, 0x8e, 0x05, 0x67, 0x15, 0x0c, 0x3c, 0xdd, 0xa3, 0x05, 0x6e, - 0x99, 0xcf, 0xa2, 0x41, 0xf8, 0xa8, 0x8a, 0x65, 0x7a, 0xe5, 0x71, 0xe5, 0x35, 0x79, 0xcb, 0x24, - 0xa0, 0xe8, 0x96, 0x49, 0xf8, 0x49, 0x27, 0x71, 0xf8, 0xc9, 0xa6, 0x98, 0xf2, 0xb8, 0xa2, 0xc9, - 0x93, 0xb8, 0x84, 0xa4, 0x93, 0xb8, 0x04, 0x08, 0xea, 0x2d, 0x3b, 0x76, 0xbb, 0x3c, 0xae, 0xd4, - 0x12, 0xea, 0x65, 0xa8, 0xa0, 0x5e, 0xf6, 0x33, 0xa8, 0xb7, 0xb6, 0xd2, 0xf1, 0xca, 0xf4, 0x1b, - 0x17, 0x12, 0xea, 0xf5, 0x91, 0x41, 0xbd, 0x3e, 0x80, 0x4e, 0x85, 0x00, 0xa8, 0x3a, 0x36, 0x9d, - 0xb4, 0x6f, 0x98, 0xcd, 0xa6, 0x72, 0x53, 0x9e, 0x0a, 0xa3, 0x78, 0x3a, 0x15, 0x46, 0x61, 0xd4, - 0xf4, 0x64, 0xad, 0x22, 0x8b, 0x9d, 0x65, 0xe5, 0x96, 0x6c, 0x7a, 0x86, 0x18, 0x6a, 0x7a, 0x86, - 0xbf, 0x60, 0x77, 0x41, 0x7f, 0x69, 0x64, 0xc9, 0x21, 0xee, 0x8a, 0x72, 0x3b, 0xb2, 0xbb, 0x10, - 0x70, 0xb0, 0xbb, 0x10, 0x7e, 0xe3, 0x65, 0x74, 0xbf, 0xb4, 0xd0, 0xf8, 0x97, 0x36, 0x35, 0xa2, - 0x3b, 0x8d, 0x15, 0xe5, 0x03, 0xc0, 0xea, 0xa1, 0xc4, 0xa5, 0x4a, 0x26, 0x9d, 0xee, 0xd1, 0xba, - 0x71, 0x82, 0x6d, 0xf9, 0x6b, 0x33, 0x2c, 0xc2, 0xa4, 0x56, 0x9d, 0xf0, 0x37, 0xa1, 0xaf, 0x47, - 0xb6, 0xe5, 0x71, 0x12, 0xd8, 0x96, 0xc7, 0xc1, 0xb8, 0x8d, 0xce, 0x47, 0xb6, 0x6a, 0xb3, 0x7a, - 0x93, 0xee, 0x4b, 0x88, 0x51, 0xd5, 0x1b, 0x77, 0x88, 0xa7, 0x7c, 0x10, 0x78, 0x5f, 0x48, 0xd9, - 0xf0, 0x45, 0xa8, 0xa7, 0x7b, 0xb4, 0x4d, 0xf8, 0x61, 0x15, 0xe5, 0x6b, 0x53, 0x0b, 0x55, 0xe5, - 0x43, 0xf2, 0xf9, 0x26, 0x85, 0x4d, 0xf7, 0x68, 0x80, 0xa3, 0x56, 0xda, 0xcd, 0xf6, 0xb2, 0xa3, - 0x1b, 0x84, 0x19, 0x5a, 0x60, 0xbb, 0x71, 0x03, 0xf4, 0xc3, 0xb2, 0x95, 0x96, 0x46, 0x47, 0xad, - 0xb4, 0x34, 0x1c, 0x55, 0x54, 0x29, 0x99, 0x82, 0xf2, 0x11, 0x59, 0x51, 0x25, 0x24, 0x55, 0x54, - 0x39, 0xf5, 0xc2, 0x07, 0xd0, 0xc9, 0x60, 0x3f, 0xcf, 0xd7, 0x5f, 0xd6, 0x69, 0xca, 0x47, 0x81, - 0xcf, 0xf9, 0xd8, 0x65, 0x80, 0x44, 0x35, 0xdd, 0xa3, 0xa5, 0x94, 0xa7, 0x2b, 0x6e, 0x2c, 0x4f, - 0x10, 0x37, 0x2f, 0xbe, 0x45, 0x5e, 0x71, 0x53, 0xc8, 0xe8, 0x8a, 0x9b, 0x82, 0x4a, 0x64, 0xce, - 0x85, 0xaa, 0x6f, 0xc2, 0x3c, 0x90, 0x69, 0x1a, 0x87, 0x44, 0xe6, 0xdc, 0x52, 0x5b, 0xdc, 0x84, - 0x79, 0x60, 0xad, 0xa5, 0x71, 0xc0, 0x17, 0x51, 0xa1, 0x56, 0x9b, 0xd5, 0x3a, 0x96, 0xd2, 0x88, - 0x78, 0xcb, 0x02, 0x74, 0xba, 0x47, 0xe3, 0x78, 0x6a, 0x06, 0x4d, 0x36, 0x75, 0xd7, 0x33, 0x1b, - 0x2e, 0x8c, 0x18, 0x7f, 0x84, 0x18, 0xb2, 0x19, 0x94, 0x44, 0x43, 0xcd, 0xa0, 0x24, 0x38, 0xb5, - 0x17, 0x27, 0x74, 0xd7, 0xd5, 0x2d, 0xc3, 0xd1, 0xc7, 0x61, 0x99, 0x20, 0x91, 0x37, 0x45, 0x12, - 0x96, 0xda, 0x8b, 0x32, 0x04, 0x0e, 0xdf, 0x7d, 0x88, 0x6f, 0xe6, 0x2c, 0x45, 0x0e, 0xdf, 0x23, - 0x78, 0x38, 0x7c, 0x8f, 0xc0, 0xc0, 0xee, 0xf4, 0x61, 0x1a, 0x59, 0x36, 0xa9, 0x88, 0x94, 0xe5, - 0x88, 0xdd, 0x19, 0x25, 0x00, 0xbb, 0x33, 0x0a, 0x94, 0x9a, 0xe4, 0x2f, 0xb7, 0x2b, 0x29, 0x4d, - 0x0a, 0x57, 0xd9, 0x58, 0x19, 0xba, 0x7e, 0x87, 0x83, 0xa3, 0xbc, 0x66, 0xe9, 0x2d, 0xbb, 0x3c, - 0xee, 0x4b, 0xdd, 0x94, 0xd7, 0xef, 0x54, 0x42, 0xba, 0x7e, 0xa7, 0x22, 0xe9, 0xec, 0xea, 0x6f, - 0xb4, 0x56, 0x74, 0x87, 0x18, 0x65, 0xd3, 0x81, 0x93, 0xc5, 0x35, 0xb6, 0x35, 0x7c, 0x43, 0x9e, - 0x5d, 0xbb, 0x90, 0xd2, 0xd9, 0xb5, 0x0b, 0x9a, 0x1a, 0x79, 0xc9, 0x68, 0x8d, 0xe8, 0x86, 0x72, - 0x47, 0x36, 0xf2, 0xd2, 0x29, 0xa9, 0x91, 0x97, 0x8e, 0x4d, 0xff, 0x9c, 0xdb, 0x8e, 0xe9, 0x11, - 0xa5, 0xb9, 0x95, 0xcf, 0x01, 0xd2, 0xf4, 0xcf, 0x01, 0x34, 0xdd, 0x10, 0x46, 0x3b, 0xa4, 0x25, - 0x6f, 0x08, 0xe3, 0xdd, 0x10, 0x2d, 0x41, 0x2d, 0x16, 0xfe, 0xb4, 0x4c, 0xb1, 0x64, 0x8b, 0x85, - 0x83, 0xa9, 0xc5, 0x12, 0x3e, 0x3e, 0x93, 0x9e, 0x32, 0x29, 0xb6, 0xbc, 0x86, 0x8a, 0x38, 0xba, - 0x86, 0x4a, 0xcf, 0x9e, 0x9e, 0x95, 0xde, 0x19, 0x28, 0x6d, 0xd9, 0xea, 0x10, 0x50, 0xd4, 0xea, - 0x10, 0x5f, 0x24, 0x4c, 0xa0, 0x63, 0x70, 0x0b, 0xae, 0x75, 0x82, 0x7b, 0x9c, 0x8f, 0xc9, 0x9f, - 0x19, 0x41, 0xd3, 0xcf, 0x8c, 0x80, 0x24, 0x26, 0x7c, 0xda, 0x72, 0x52, 0x98, 0x84, 0xe7, 0x83, - 0x11, 0x10, 0x9e, 0x41, 0xb8, 0x56, 0x9a, 0x9d, 0xa9, 0x18, 0x55, 0xf1, 0x8a, 0xcc, 0x95, 0x4f, - 0x60, 0xe3, 0x14, 0xd3, 0x3d, 0x5a, 0x42, 0x39, 0xfc, 0x06, 0x3a, 0xcb, 0xa1, 0xfc, 0xdd, 0x30, - 0x24, 0xf1, 0x36, 0x82, 0x05, 0xc1, 0x93, 0xfd, 0xd8, 0xba, 0xd1, 0x4e, 0xf7, 0x68, 0x5d, 0x79, - 0xa5, 0xd7, 0xc5, 0xd7, 0x87, 0xce, 0x56, 0xea, 0x0a, 0x16, 0x89, 0xae, 0xbc, 0xd2, 0xeb, 0xe2, - 0x72, 0xbf, 0xbb, 0x95, 0xba, 0x82, 0x4e, 0xe8, 0xca, 0x0b, 0xbb, 0xa8, 0xd8, 0x0d, 0x5f, 0x6a, - 0x36, 0x95, 0x55, 0xa8, 0xee, 0x3d, 0x5b, 0xa9, 0xae, 0x04, 0x06, 0xe7, 0x66, 0x1c, 0xe9, 0x2c, - 0x3d, 0xdf, 0x26, 0x56, 0x4d, 0x5a, 0x80, 0xee, 0xc9, 0xb3, 0x74, 0x8c, 0x80, 0xce, 0xd2, 0x31, - 0x20, 0x1d, 0x50, 0xe2, 0x73, 0x15, 0x65, 0x4d, 0x1e, 0x50, 0x22, 0x8e, 0x0e, 0x28, 0xe9, 0x69, - 0xcb, 0x3c, 0x3a, 0x3e, 0x7f, 0xc7, 0xd3, 0x7d, 0x0b, 0xd2, 0xe5, 0x5d, 0xf9, 0x66, 0xe4, 0x92, - 0x29, 0x4e, 0x02, 0x97, 0x4c, 0x71, 0x30, 0x1d, 0x23, 0x14, 0x5c, 0x5b, 0xb3, 0x1a, 0x53, 0xba, - 0xd9, 0xec, 0x38, 0x44, 0xf9, 0x3f, 0xe4, 0x31, 0x12, 0x41, 0xd3, 0x31, 0x12, 0x01, 0xd1, 0x05, - 0x9a, 0x82, 0x4a, 0xae, 0x6b, 0x2e, 0x5b, 0x7c, 0x5f, 0xd9, 0x69, 0x7a, 0xca, 0xff, 0x29, 0x2f, - 0xd0, 0x49, 0x34, 0x74, 0x81, 0x4e, 0x82, 0xc3, 0xa9, 0x53, 0x42, 0x82, 0x7b, 0xe5, 0xff, 0x8a, - 0x9c, 0x3a, 0x25, 0xd0, 0xc0, 0xa9, 0x53, 0x52, 0x72, 0xfc, 0x29, 0x34, 0xca, 0x6c, 0xb2, 0x19, - 0x33, 0xb8, 0xab, 0xfe, 0xbf, 0xe5, 0xf5, 0x31, 0x8a, 0xa7, 0xeb, 0x63, 0x14, 0x26, 0xf3, 0xe1, - 0x5d, 0xf0, 0xff, 0xa4, 0xf1, 0x09, 0xe4, 0x1f, 0x2b, 0x83, 0xaf, 0x8b, 0x7c, 0xf8, 0x48, 0xf9, - 0xd6, 0x4c, 0x1a, 0xa3, 0x60, 0x78, 0xc4, 0x0a, 0xc9, 0x8c, 0x34, 0x72, 0xd7, 0x24, 0xab, 0xca, - 0xc7, 0x53, 0x19, 0x31, 0x02, 0x99, 0x11, 0x83, 0xe1, 0xd7, 0xd1, 0xc9, 0x10, 0x36, 0x4b, 0x5a, - 0x8b, 0xc1, 0xcc, 0xf4, 0x6d, 0x19, 0xd9, 0x0c, 0x4e, 0x26, 0xa3, 0x66, 0x70, 0x32, 0x26, 0x89, - 0x35, 0x17, 0xdd, 0xff, 0xbb, 0x09, 0xeb, 0x40, 0x82, 0x29, 0x0c, 0x92, 0x58, 0x73, 0x69, 0x7e, - 0xfb, 0x26, 0xac, 0x03, 0x99, 0xa6, 0x30, 0xc0, 0x9f, 0xcc, 0xa0, 0x0b, 0xc9, 0xa8, 0x52, 0xb3, - 0x39, 0x65, 0x3b, 0x21, 0x4e, 0xf9, 0x8e, 0x8c, 0x7c, 0xd0, 0xb0, 0xb5, 0x62, 0xd3, 0x3d, 0xda, - 0x16, 0x2b, 0xc0, 0xef, 0x47, 0xc3, 0xa5, 0x8e, 0x61, 0x7a, 0x70, 0xf1, 0x46, 0x0d, 0xe7, 0xef, - 0xcc, 0x44, 0xb6, 0x38, 0x22, 0x16, 0xb6, 0x38, 0x22, 0x00, 0xbf, 0x8a, 0xc6, 0x6a, 0xa4, 0xd1, - 0x71, 0x4c, 0x6f, 0x4d, 0x23, 0x6d, 0xdb, 0xf1, 0x28, 0x8f, 0xef, 0xca, 0xc8, 0x93, 0x58, 0x8c, - 0x82, 0x4e, 0x62, 0x31, 0x20, 0xbe, 0x95, 0x92, 0xe2, 0x5e, 0xf9, 0x44, 0xa6, 0xeb, 0xb5, 0x7c, - 0xd0, 0x97, 0x29, 0x19, 0xf2, 0xab, 0x89, 0x29, 0xc3, 0x95, 0x4f, 0x66, 0xba, 0x5c, 0xa3, 0x0b, - 0x33, 0x5c, 0x42, 0xb6, 0xf1, 0x6a, 0x62, 0x52, 0x68, 0xe5, 0xbb, 0x33, 0x5d, 0xae, 0xbd, 0x43, - 0x8e, 0x49, 0xf9, 0xa4, 0x9f, 0x66, 0x9e, 0x22, 0x9c, 0xd1, 0xf7, 0x64, 0xe2, 0xae, 0x22, 0x41, - 0x79, 0x81, 0x90, 0x16, 0xbb, 0xe9, 0x06, 0x4a, 0xff, 0xa9, 0x4c, 0xdc, 0x37, 0x2f, 0x2c, 0x16, - 0xfe, 0xc2, 0x04, 0x9d, 0x99, 0xbc, 0xe7, 0x11, 0xc7, 0xd2, 0x9b, 0xd0, 0x9d, 0x35, 0xcf, 0x76, - 0xf4, 0x65, 0x32, 0x69, 0xe9, 0x8b, 0x4d, 0xa2, 0x7c, 0x3a, 0x23, 0x5b, 0xb0, 0xe9, 0xa4, 0xd4, - 0x82, 0x4d, 0xc7, 0xe2, 0x15, 0x74, 0x7f, 0x12, 0xb6, 0x6c, 0xba, 0x50, 0xcf, 0x67, 0x32, 0xb2, - 0x09, 0xdb, 0x85, 0x96, 0x9a, 0xb0, 0x5d, 0xd0, 0xf8, 0x2a, 0x1a, 0x18, 0xb7, 0xfd, 0xe9, 0xf7, - 0x7b, 0x23, 0xce, 0x90, 0x01, 0x66, 0xba, 0x47, 0x0b, 0xc9, 0x78, 0x19, 0x3e, 0xa8, 0x3f, 0x1b, - 0x2f, 0x13, 0x5e, 0x3e, 0x05, 0x3f, 0x78, 0x19, 0x2e, 0xee, 0xff, 0x2f, 0x5e, 0x26, 0xbc, 0xe3, - 0x0a, 0x7e, 0xd0, 0x99, 0x84, 0xd5, 0x38, 0x3b, 0x55, 0xa2, 0x76, 0xdb, 0xc4, 0x8a, 0xde, 0x6c, - 0x12, 0x6b, 0x99, 0x28, 0x9f, 0x8b, 0xcc, 0x24, 0xc9, 0x64, 0x74, 0x26, 0x49, 0xc6, 0xe0, 0x0f, - 0xa3, 0x53, 0xb7, 0xf4, 0xa6, 0x69, 0x84, 0x38, 0x3f, 0xcf, 0xb0, 0xf2, 0x7d, 0x19, 0x79, 0x37, - 0x9d, 0x42, 0x47, 0x77, 0xd3, 0x29, 0x28, 0x3c, 0x8b, 0x30, 0x2c, 0xa3, 0xc1, 0x6c, 0x41, 0xd7, - 0x67, 0xe5, 0xff, 0xcf, 0xc8, 0x76, 0x6a, 0x9c, 0x84, 0xda, 0xa9, 0x71, 0x28, 0xae, 0xa7, 0x27, - 0x83, 0x50, 0xbe, 0x3f, 0x23, 0x9f, 0xd6, 0xa4, 0x11, 0x4e, 0xf7, 0x68, 0xe9, 0x19, 0x25, 0xae, - 0xa3, 0xd1, 0x5a, 0xb5, 0x32, 0x35, 0x35, 0x59, 0xbb, 0x55, 0x29, 0xc3, 0x43, 0x07, 0x43, 0xf9, - 0x81, 0xc8, 0x8a, 0x15, 0x25, 0xa0, 0x2b, 0x56, 0x14, 0x86, 0x6b, 0xe8, 0x04, 0x15, 0x44, 0xd5, - 0x21, 0x4b, 0xc4, 0x21, 0x56, 0xc3, 0x1f, 0x96, 0x3f, 0x94, 0x91, 0x0d, 0x85, 0x24, 0x22, 0x6a, - 0x28, 0x24, 0xc1, 0xf1, 0x1d, 0x74, 0x36, 0x7a, 0x98, 0x23, 0xbe, 0x1c, 0x55, 0x7e, 0x38, 0x13, - 0xb1, 0x67, 0xbb, 0x10, 0x83, 0x3d, 0xdb, 0x05, 0x8f, 0x2d, 0x74, 0x8e, 0x9f, 0x8c, 0x70, 0x9f, - 0xc9, 0x68, 0x6d, 0x3f, 0xc2, 0x6a, 0x7b, 0x24, 0xf4, 0xe9, 0xeb, 0x42, 0x3d, 0xdd, 0xa3, 0x75, - 0x67, 0x47, 0x55, 0x25, 0x9e, 0xb5, 0x40, 0xf9, 0xd1, 0x4c, 0xb2, 0x53, 0x89, 0xe4, 0x69, 0x9c, - 0x94, 0xee, 0xe0, 0xf5, 0xb4, 0x98, 0xfb, 0xca, 0x8f, 0x45, 0x86, 0x4c, 0x32, 0x19, 0x1d, 0x32, - 0x29, 0x41, 0xfb, 0x5f, 0x45, 0x63, 0x4c, 0x2f, 0xab, 0x3a, 0x8c, 0x24, 0x6b, 0x99, 0x18, 0xca, - 0xdf, 0x88, 0x2c, 0x58, 0x31, 0x0a, 0xf0, 0xce, 0x89, 0x02, 0xe9, 0xec, 0x5b, 0x6b, 0xeb, 0x96, - 0x05, 0x27, 0xa5, 0xca, 0xdf, 0x8c, 0xcc, 0xbe, 0x21, 0x0a, 0x7c, 0x6f, 0x83, 0x5f, 0x90, 0x3b, - 0x2d, 0xe9, 0x61, 0xb5, 0xf2, 0xf9, 0xc8, 0x3a, 0x97, 0x48, 0x45, 0xd7, 0xb9, 0xe4, 0x77, 0xd9, - 0xb7, 0x52, 0x1e, 0x25, 0x2b, 0x3f, 0xde, 0x9d, 0x6f, 0xb8, 0x7e, 0x26, 0xbf, 0x69, 0xbe, 0x95, - 0xf2, 0xa0, 0x57, 0xf9, 0x89, 0xee, 0x7c, 0x43, 0x77, 0xb9, 0xe4, 0xf7, 0xc0, 0xf5, 0xf4, 0xc7, - 0xb0, 0xca, 0x4f, 0x46, 0x27, 0x84, 0x14, 0x42, 0x98, 0x10, 0xd2, 0x5e, 0xd4, 0x2e, 0xa2, 0xd3, - 0xac, 0xd3, 0xae, 0x3b, 0x7a, 0x7b, 0xa5, 0x46, 0x3c, 0xcf, 0xb4, 0x96, 0xfd, 0xfd, 0xcd, 0xdf, - 0xce, 0x44, 0x0e, 0x9d, 0xd2, 0x28, 0xe1, 0xd0, 0x29, 0x0d, 0x49, 0xf5, 0x29, 0xf6, 0xec, 0x55, - 0xf9, 0xa9, 0x88, 0x3e, 0xc5, 0x28, 0xa8, 0x3e, 0xc5, 0x5f, 0xcb, 0xbe, 0x9a, 0xf0, 0xba, 0x53, - 0xf9, 0x3b, 0xe9, 0xbc, 0x82, 0xf6, 0x25, 0x3c, 0x0a, 0x7d, 0x35, 0xe1, 0x11, 0xa3, 0xf2, 0x77, - 0xd3, 0x79, 0x85, 0x9e, 0x3d, 0xf1, 0xb7, 0x8f, 0xaf, 0xa3, 0x93, 0x6c, 0x8e, 0x9c, 0x22, 0x06, - 0x91, 0x3e, 0xf4, 0xa7, 0x23, 0xc3, 0x31, 0x99, 0x0c, 0x0e, 0xb2, 0x13, 0x31, 0x49, 0xac, 0x79, - 0x5b, 0x7f, 0x66, 0x13, 0xd6, 0xa1, 0x99, 0x9d, 0x8c, 0xc1, 0x2f, 0xc8, 0x4f, 0xca, 0x94, 0x9f, - 0xcd, 0x44, 0x9c, 0x24, 0x04, 0x24, 0x38, 0x49, 0x88, 0xef, 0xcf, 0x5e, 0x90, 0x9f, 0x4f, 0x29, - 0x7f, 0x2f, 0xb1, 0x70, 0xd0, 0x01, 0xf2, 0x5b, 0xab, 0x17, 0xe4, 0xa7, 0x42, 0xca, 0xcf, 0x25, - 0x16, 0x0e, 0x3e, 0x40, 0x7e, 0x57, 0x44, 0x37, 0x1e, 0x1d, 0xcf, 0x66, 0xac, 0xa4, 0xe9, 0xe1, - 0xe7, 0xa3, 0x1b, 0x8f, 0x44, 0x32, 0xd8, 0x78, 0x24, 0x62, 0x92, 0x58, 0xf3, 0xcf, 0xfb, 0x85, - 0x4d, 0x58, 0x0b, 0xdb, 0xa5, 0x44, 0x4c, 0x12, 0x6b, 0xfe, 0xf1, 0x5f, 0xd8, 0x84, 0xb5, 0xb0, - 0x5d, 0x4a, 0xc4, 0x50, 0x23, 0x27, 0xc4, 0xdc, 0x22, 0x8e, 0x1b, 0xaa, 0xdf, 0x2f, 0x46, 0x8c, - 0x9c, 0x14, 0x3a, 0x6a, 0xe4, 0xa4, 0xa0, 0x12, 0xb9, 0x73, 0xa1, 0xfc, 0xd2, 0x66, 0xdc, 0xc3, - 0xdb, 0x8e, 0x14, 0x54, 0x22, 0x77, 0x2e, 0x97, 0x5f, 0xde, 0x8c, 0x7b, 0x78, 0xdd, 0x91, 0x82, - 0xa2, 0x06, 0xcf, 0x84, 0x63, 0xaf, 0x5a, 0xaf, 0x92, 0x55, 0xd2, 0xe4, 0x22, 0xf9, 0x62, 0xc4, - 0xe0, 0x89, 0x12, 0xc0, 0xe1, 0x7c, 0x04, 0x26, 0x33, 0xe2, 0x5f, 0xff, 0xab, 0xa9, 0x8c, 0xc2, - 0xd3, 0x87, 0x28, 0x4c, 0x66, 0xc4, 0x3f, 0xf4, 0xd7, 0x52, 0x19, 0x85, 0xa7, 0x0f, 0x51, 0xd8, - 0x78, 0x1f, 0xea, 0x85, 0xe3, 0x29, 0xf5, 0xf3, 0x19, 0x34, 0x54, 0xf3, 0x1c, 0xa2, 0xb7, 0x78, - 0x10, 0xaa, 0x33, 0xa8, 0x9f, 0xf9, 0x79, 0xfa, 0x8f, 0x52, 0xb5, 0xe0, 0x37, 0xbe, 0x80, 0x46, - 0x66, 0x74, 0xd7, 0x83, 0x92, 0x15, 0xcb, 0x20, 0xf7, 0xe0, 0x8d, 0x53, 0x4e, 0x8b, 0x40, 0xf1, - 0x0c, 0xa3, 0x63, 0xe5, 0x20, 0xfa, 0x5f, 0x6e, 0xd3, 0xd8, 0x4b, 0xfd, 0x6f, 0xad, 0x17, 0x7b, - 0x20, 0xd4, 0x52, 0xa4, 0xac, 0xfa, 0xd5, 0x0c, 0x8a, 0x79, 0xa0, 0xee, 0xfc, 0xb1, 0xf8, 0x3c, - 0x3a, 0x16, 0x89, 0x38, 0xc9, 0x1f, 0x6a, 0x6d, 0x31, 0x20, 0x65, 0xb4, 0x34, 0x7e, 0x4f, 0xf0, - 0x40, 0xe8, 0xa6, 0x36, 0xc3, 0xe3, 0x6a, 0xf5, 0x6d, 0xac, 0x17, 0x73, 0x1d, 0xa7, 0xa9, 0x09, - 0x28, 0x1e, 0xf7, 0xe5, 0xef, 0x8f, 0x86, 0xe1, 0xf4, 0xf0, 0x05, 0xfe, 0x72, 0x3d, 0x13, 0x46, - 0xe3, 0x8a, 0xe4, 0xe5, 0x65, 0x2f, 0xd5, 0xdf, 0x8f, 0x86, 0x2a, 0xad, 0x36, 0x71, 0x5c, 0xdb, - 0xd2, 0x3d, 0xdb, 0xe1, 0x0f, 0x7f, 0x21, 0x52, 0x93, 0x29, 0xc0, 0xc5, 0xe8, 0x41, 0x22, 0x3d, - 0xbe, 0xe4, 0xa7, 0x61, 0xca, 0x41, 0x20, 0x43, 0x78, 0xbd, 0x17, 0xcd, 0xf5, 0xca, 0x28, 0x28, - 0xe9, 0x4d, 0x57, 0x87, 0xa7, 0x64, 0x01, 0x69, 0x87, 0x02, 0x44, 0x52, 0xa0, 0xc0, 0x8f, 0xa1, - 0x02, 0x1c, 0xbd, 0xbb, 0x90, 0x5e, 0x8d, 0xc7, 0x08, 0x6b, 0x02, 0x44, 0x8c, 0xc8, 0xc4, 0x68, - 0xf0, 0x0d, 0x34, 0x1a, 0xde, 0x2b, 0x5e, 0x77, 0xec, 0x4e, 0xdb, 0x4f, 0xa8, 0x00, 0x39, 0x72, - 0xef, 0x04, 0xb8, 0xfa, 0x32, 0x20, 0x05, 0x16, 0xb1, 0x82, 0x78, 0x1a, 0x1d, 0x0b, 0x61, 0x54, - 0x44, 0x7e, 0x22, 0x17, 0xc8, 0x11, 0x2d, 0xf0, 0xa2, 0xe2, 0x14, 0x59, 0x45, 0x8b, 0xe1, 0x0a, - 0xea, 0xf3, 0x03, 0x84, 0xf5, 0x6f, 0xaa, 0xa4, 0xc7, 0x79, 0x80, 0xb0, 0x3e, 0x31, 0x34, 0x98, - 0x5f, 0x1e, 0x4f, 0xa1, 0x11, 0xcd, 0xee, 0x78, 0x64, 0xc1, 0xe6, 0xd6, 0x3c, 0x8f, 0xf4, 0x0f, - 0x6d, 0x72, 0x28, 0xa6, 0xee, 0xd9, 0x7e, 0x8a, 0x61, 0x31, 0xd5, 0xad, 0x5c, 0x0a, 0xcf, 0xa1, - 0xb1, 0xd8, 0x0d, 0xac, 0x98, 0xf8, 0x57, 0xf8, 0xbc, 0x38, 0xb3, 0x78, 0x51, 0xfc, 0x9d, 0x19, - 0x54, 0x58, 0x70, 0x74, 0xd3, 0x73, 0xf9, 0x2b, 0xb4, 0xfb, 0x2e, 0xaf, 0x3a, 0x7a, 0x9b, 0xea, - 0xc7, 0x65, 0x88, 0x54, 0x79, 0x4b, 0x6f, 0x76, 0x88, 0x3b, 0x7e, 0x9b, 0x7e, 0xdd, 0xbf, 0x5e, - 0x2f, 0xbe, 0xb0, 0x0c, 0xe7, 0x3c, 0x97, 0x1b, 0x76, 0xeb, 0xca, 0xb2, 0xa3, 0xdf, 0x35, 0x3d, - 0x58, 0xf7, 0xf5, 0xe6, 0x15, 0x8f, 0x34, 0xe1, 0x38, 0xe9, 0x8a, 0xde, 0x36, 0xaf, 0x40, 0x44, - 0xe4, 0x2b, 0x01, 0x27, 0x56, 0x03, 0x55, 0x01, 0x0f, 0xfe, 0x12, 0x55, 0x80, 0xe1, 0xf0, 0x1c, - 0x42, 0xfc, 0x53, 0x4b, 0xed, 0x36, 0x7f, 0xd2, 0x26, 0x1c, 0xc2, 0xf8, 0x18, 0xa6, 0xd8, 0x81, - 0xc0, 0xf4, 0x76, 0x5b, 0x4c, 0x2d, 0x1e, 0xd2, 0x51, 0x2d, 0x58, 0xe0, 0x2d, 0xf2, 0xc5, 0x34, - 0x1c, 0x4a, 0xdc, 0x6f, 0x6c, 0x82, 0x90, 0xa2, 0xc5, 0xf0, 0x22, 0x3a, 0xc6, 0xf9, 0x06, 0xa1, - 0xf7, 0x47, 0xe4, 0x59, 0x21, 0x82, 0x66, 0x4a, 0x1b, 0xb4, 0xd1, 0xe0, 0x60, 0xb1, 0x8e, 0x48, - 0x09, 0x3c, 0x1e, 0x66, 0x9d, 0x9c, 0xd3, 0x5b, 0xc4, 0x55, 0x8e, 0x81, 0xc6, 0x9e, 0xdd, 0x58, - 0x2f, 0x2a, 0x7e, 0x79, 0x88, 0x95, 0x97, 0x98, 0x81, 0x19, 0x8a, 0x88, 0x3c, 0x98, 0xd6, 0x8f, - 0x26, 0xf0, 0x88, 0xea, 0xbc, 0x5c, 0x04, 0x4f, 0xa0, 0xe1, 0xc0, 0xa3, 0xfe, 0xe6, 0xcd, 0x4a, - 0x19, 0xde, 0xcc, 0x0d, 0x8c, 0x9f, 0xdb, 0x58, 0x2f, 0x9e, 0x8e, 0x44, 0xf5, 0x17, 0x99, 0x48, - 0x65, 0x84, 0x30, 0x04, 0xec, 0x11, 0x5d, 0x24, 0x0c, 0x41, 0x3b, 0x21, 0x0c, 0x41, 0x15, 0xbf, - 0x84, 0x06, 0x4b, 0xb7, 0x6b, 0x3c, 0xbc, 0x82, 0xab, 0x1c, 0x0f, 0xd3, 0xa9, 0x40, 0x12, 0x6e, - 0x1e, 0x8a, 0x41, 0x6c, 0xba, 0x48, 0x8f, 0x27, 0xd1, 0x88, 0xe4, 0x94, 0xe3, 0x2a, 0x27, 0x80, - 0x03, 0xb4, 0x5c, 0x07, 0x4c, 0xdd, 0xe1, 0x28, 0x29, 0x2d, 0xbc, 0x54, 0x88, 0x6a, 0x4d, 0xd9, - 0x74, 0x21, 0x35, 0x85, 0x46, 0x20, 0x92, 0x03, 0xbc, 0xc0, 0xeb, 0x67, 0x5a, 0x63, 0x70, 0x54, - 0xdd, 0x61, 0x38, 0x29, 0x0f, 0xbc, 0x5c, 0x0c, 0xbf, 0x81, 0x30, 0x24, 0xb3, 0x20, 0x86, 0x7f, - 0x47, 0x53, 0x29, 0xbb, 0xca, 0x49, 0x88, 0xd8, 0x8b, 0xa3, 0x2f, 0xc7, 0x2b, 0xe5, 0xf1, 0x0b, - 0x7c, 0xfa, 0x38, 0xaf, 0xb3, 0x52, 0x75, 0xff, 0xd5, 0x78, 0xdd, 0x34, 0xc4, 0x16, 0x27, 0x70, - 0xc5, 0xab, 0xe8, 0x54, 0xd5, 0x21, 0x77, 0x4d, 0xbb, 0xe3, 0xfa, 0xcb, 0x87, 0x3f, 0x6f, 0x9d, - 0xda, 0x74, 0xde, 0x7a, 0x90, 0x57, 0x7c, 0x5f, 0xdb, 0x21, 0x77, 0xeb, 0x7e, 0x9c, 0x56, 0x29, - 0xc0, 0x61, 0x1a, 0x77, 0x2a, 0x2e, 0x88, 0x62, 0xc1, 0xe1, 0x26, 0x71, 0x15, 0x25, 0x9c, 0x6a, - 0x59, 0x50, 0x0e, 0x33, 0xc0, 0x89, 0xe2, 0x8a, 0x14, 0xc3, 0x1a, 0xc2, 0xd7, 0x27, 0xfc, 0xfb, - 0xba, 0x52, 0x83, 0x65, 0x75, 0x54, 0x4e, 0x03, 0x33, 0x95, 0x8a, 0x65, 0xb9, 0x11, 0xc4, 0x6c, - 0xae, 0xeb, 0x1c, 0x2f, 0x8a, 0x25, 0x5e, 0x1a, 0xcf, 0xa0, 0xd1, 0xaa, 0x03, 0x47, 0x0f, 0x37, - 0xc8, 0x5a, 0xd5, 0x6e, 0x9a, 0x8d, 0x35, 0x78, 0x08, 0xc8, 0xa7, 0xca, 0x36, 0xc3, 0xd5, 0xef, - 0x90, 0xb5, 0x7a, 0x1b, 0xb0, 0xe2, 0xb2, 0x12, 0x2d, 0x29, 0xc6, 0x50, 0xbd, 0x7f, 0x6b, 0x31, - 0x54, 0x09, 0x1a, 0xe5, 0xb7, 0x7d, 0xf7, 0x3c, 0x62, 0xd1, 0xa5, 0xde, 0xe5, 0x8f, 0xfe, 0x94, - 0xc8, 0xed, 0x60, 0x80, 0xe7, 0x39, 0xe1, 0xd9, 0x28, 0x23, 0x01, 0x58, 0x6c, 0x58, 0xb4, 0x88, - 0xfa, 0x99, 0x9c, 0x38, 0x75, 0xe2, 0xb3, 0x28, 0x2f, 0xa4, 0xf0, 0x80, 0xd0, 0x8b, 0x10, 0xee, - 0x38, 0xcf, 0xe3, 0xba, 0x0e, 0x70, 0xb3, 0x23, 0x88, 0x11, 0x02, 0xf9, 0xcd, 0xfc, 0xb8, 0xca, - 0xa6, 0xa1, 0x85, 0x04, 0x90, 0x5b, 0xaa, 0xb3, 0xd8, 0x34, 0x1b, 0x10, 0x04, 0x3b, 0x27, 0x04, - 0x05, 0x00, 0x28, 0x8b, 0x81, 0x2d, 0x90, 0xe0, 0xab, 0x68, 0xd0, 0x3f, 0xad, 0x0a, 0x43, 0x8f, - 0x42, 0x6c, 0x64, 0x3f, 0x7b, 0x3e, 0x0b, 0xbd, 0x2c, 0x10, 0xe1, 0xe7, 0x11, 0x0a, 0x47, 0x32, - 0x37, 0x92, 0x60, 0x96, 0x17, 0x07, 0xbe, 0x38, 0xcb, 0x87, 0xd4, 0x74, 0xce, 0x13, 0x35, 0xc9, - 0xcf, 0xa6, 0x07, 0x73, 0x9e, 0xa4, 0x7e, 0x62, 0xdf, 0xca, 0x45, 0xf0, 0x3c, 0x1a, 0x8b, 0x29, - 0x0f, 0x0f, 0x54, 0x0a, 0x79, 0x7b, 0x13, 0x34, 0x4f, 0x5c, 0x53, 0x63, 0x65, 0xd5, 0x6f, 0xcb, - 0xc6, 0x56, 0x0c, 0x2a, 0x18, 0x4e, 0x25, 0x74, 0x0e, 0x08, 0xc6, 0x67, 0xcd, 0x04, 0x23, 0x10, - 0xe1, 0x8b, 0xa8, 0xbf, 0x4a, 0xc7, 0x6b, 0xc3, 0x6e, 0xf2, 0xae, 0x82, 0x88, 0x3c, 0x6d, 0x0e, - 0xd3, 0x02, 0x2c, 0xbe, 0x2a, 0xe4, 0x77, 0x14, 0x02, 0xfc, 0xfa, 0xf9, 0x1d, 0xc5, 0x09, 0x37, - 0xc8, 0xf4, 0x78, 0x35, 0x92, 0x4a, 0x86, 0x97, 0x49, 0x58, 0xad, 0xc2, 0x44, 0x59, 0x81, 0xad, - 0xd8, 0xbb, 0x99, 0xad, 0xa8, 0xfe, 0x66, 0x26, 0xae, 0xfd, 0xf8, 0x5a, 0x3c, 0xca, 0x27, 0x4b, - 0xf2, 0xef, 0x03, 0xc5, 0x5a, 0x83, 0x78, 0x9f, 0x52, 0xbc, 0xce, 0xec, 0x8e, 0xe3, 0x75, 0xe6, - 0xb6, 0x19, 0xaf, 0x53, 0xfd, 0x1f, 0xf9, 0xae, 0x3e, 0xa3, 0xfb, 0x12, 0x97, 0xea, 0x39, 0xba, - 0xdf, 0xa1, 0xb5, 0x97, 0xdc, 0x98, 0xd5, 0xce, 0x5c, 0xe2, 0xea, 0x3a, 0x1b, 0x35, 0xae, 0x26, - 0x53, 0xe2, 0x97, 0xd1, 0x90, 0xff, 0x01, 0x10, 0x07, 0x56, 0x88, 0x5f, 0x1a, 0xac, 0x35, 0x91, - 0x88, 0xa9, 0x52, 0x01, 0xfc, 0x34, 0x1a, 0x00, 0x4b, 0xa3, 0xad, 0x37, 0xfc, 0x20, 0xc1, 0x2c, - 0xaa, 0xb0, 0x0f, 0x14, 0x63, 0x2f, 0x05, 0x94, 0xf8, 0x23, 0xa8, 0xc0, 0xe3, 0xd5, 0xb3, 0xd4, - 0xc7, 0x57, 0xb6, 0xe0, 0x64, 0x7b, 0x59, 0x8c, 0x55, 0xcf, 0xf6, 0x0e, 0x00, 0x90, 0xf6, 0x0e, - 0x2c, 0x4c, 0xfd, 0x02, 0x3a, 0x5e, 0x75, 0x88, 0x01, 0xee, 0xdc, 0x93, 0xf7, 0xda, 0x0e, 0xcf, - 0x24, 0xc0, 0x06, 0x30, 0x2c, 0x1d, 0x6d, 0x1f, 0x4d, 0x17, 0x35, 0x8e, 0x17, 0x18, 0x25, 0x15, - 0xa7, 0xf6, 0x04, 0x6b, 0xc9, 0x0d, 0xb2, 0xb6, 0x6a, 0x3b, 0x06, 0x0b, 0xb6, 0xcf, 0xed, 0x09, - 0x2e, 0xe8, 0x3b, 0x1c, 0x25, 0xda, 0x13, 0x72, 0xa1, 0x33, 0xcf, 0xa1, 0xc1, 0x9d, 0xc6, 0x7b, - 0xff, 0xa5, 0x6c, 0xca, 0xeb, 0x8b, 0xc3, 0x9b, 0xa7, 0x2f, 0xc8, 0x99, 0xda, 0x9b, 0x92, 0x33, - 0xf5, 0x1b, 0xd9, 0x94, 0xa7, 0x25, 0x87, 0x3a, 0xb7, 0x61, 0x20, 0x0c, 0x39, 0xb7, 0x61, 0x98, - 0x56, 0xd2, 0x34, 0x34, 0x91, 0x28, 0x92, 0x05, 0xb5, 0xb0, 0x69, 0x16, 0xd4, 0x9f, 0xce, 0x75, - 0x7b, 0x7a, 0x73, 0x24, 0xfb, 0xed, 0xc8, 0xfe, 0x2a, 0x1a, 0x0c, 0x24, 0x5b, 0x29, 0x83, 0x3d, - 0x33, 0x1c, 0x64, 0x97, 0x60, 0x60, 0x28, 0x23, 0x10, 0xe1, 0x4b, 0xac, 0xad, 0x35, 0xf3, 0x4d, - 0x16, 0x61, 0x7d, 0x98, 0xc7, 0xce, 0xd6, 0x3d, 0xbd, 0xee, 0x9a, 0x6f, 0x12, 0x2d, 0x40, 0xab, - 0xff, 0x28, 0x9b, 0xf8, 0x7e, 0xe9, 0xa8, 0x8f, 0xb6, 0xd1, 0x47, 0x09, 0x42, 0x64, 0x2f, 0xaf, - 0x8e, 0x84, 0xb8, 0x0d, 0x21, 0xfe, 0x79, 0x36, 0xf1, 0x9d, 0xda, 0x91, 0x10, 0xb7, 0x33, 0x5b, - 0x3c, 0x86, 0x06, 0x34, 0x7b, 0xd5, 0x9d, 0x80, 0x3d, 0x0b, 0x9b, 0x2b, 0x60, 0xa2, 0x76, 0xec, - 0x55, 0xb7, 0x0e, 0xbb, 0x11, 0x2d, 0x24, 0x50, 0xbf, 0x99, 0xed, 0xf2, 0x92, 0xef, 0x48, 0xf0, - 0x6f, 0xe7, 0x12, 0xf9, 0xab, 0x59, 0xe9, 0xa5, 0xe0, 0xa1, 0x4e, 0x12, 0x5e, 0x6b, 0xac, 0x90, - 0x96, 0x1e, 0x4d, 0x12, 0xee, 0x02, 0x94, 0xe7, 0x18, 0x0d, 0x49, 0xd4, 0x2f, 0x65, 0x23, 0x4f, - 0x25, 0x8f, 0x64, 0xb7, 0x65, 0xd9, 0x05, 0x5a, 0xc7, 0x5f, 0x7f, 0x1e, 0x49, 0x6e, 0xab, 0x92, - 0xfb, 0x44, 0x36, 0xf2, 0x50, 0xf6, 0xf0, 0xe6, 0x0b, 0xfe, 0x52, 0x36, 0xfe, 0xe8, 0xf7, 0xf0, - 0x6a, 0xd2, 0x63, 0x68, 0x80, 0xcb, 0x21, 0x58, 0x2a, 0xd8, 0xbc, 0xcf, 0x80, 0x70, 0x80, 0x1a, - 0x10, 0xa8, 0xdf, 0x91, 0x45, 0xf2, 0x03, 0xe6, 0x43, 0xaa, 0x43, 0xbf, 0x9a, 0x95, 0x9f, 0x6e, - 0x1f, 0x5e, 0xfd, 0xb9, 0x8c, 0x50, 0xad, 0xb3, 0xd8, 0xe0, 0x91, 0x3f, 0x7b, 0x85, 0x13, 0xf8, - 0x00, 0xaa, 0x09, 0x14, 0xea, 0xff, 0xcc, 0x26, 0xbe, 0x27, 0x3f, 0xbc, 0x02, 0x7c, 0x0a, 0x4e, - 0xc5, 0x1b, 0x56, 0x38, 0x91, 0xc3, 0x21, 0x24, 0x1d, 0x7f, 0xb1, 0xd4, 0x66, 0x3e, 0x21, 0x7e, - 0x5f, 0x82, 0xb9, 0x06, 0x81, 0xe3, 0x43, 0x73, 0x4d, 0xbc, 0x61, 0x10, 0x0c, 0xb7, 0xdf, 0xc9, - 0x6e, 0xf6, 0xfc, 0xfe, 0x30, 0xaf, 0xaa, 0x7d, 0x55, 0x7d, 0x0d, 0xc2, 0xc4, 0xd1, 0x9e, 0x18, - 0x62, 0x89, 0xb7, 0xda, 0x0c, 0x24, 0xde, 0x88, 0x71, 0x2a, 0xf5, 0x4f, 0x7b, 0x93, 0xdf, 0x7e, - 0x1f, 0x5e, 0x11, 0x9e, 0x45, 0xf9, 0xaa, 0xee, 0xad, 0x70, 0x4d, 0x86, 0xdb, 0xba, 0xb6, 0xee, - 0xad, 0x68, 0x00, 0xc5, 0x97, 0x50, 0xbf, 0xa6, 0xaf, 0xb2, 0x33, 0xcf, 0x42, 0x98, 0x14, 0xcd, - 0xd1, 0x57, 0xeb, 0xec, 0xdc, 0x33, 0x40, 0x63, 0x35, 0x48, 0xca, 0xc7, 0x4e, 0xbe, 0x21, 0xa3, - 0x15, 0x4b, 0xca, 0x17, 0xa4, 0xe2, 0x3b, 0x8b, 0xf2, 0xe3, 0xb6, 0xb1, 0x06, 0xce, 0x2c, 0x43, - 0xac, 0xb2, 0x45, 0xdb, 0x58, 0xd3, 0x00, 0x8a, 0x3f, 0x99, 0x41, 0x7d, 0xd3, 0x44, 0x37, 0xe8, - 0x08, 0x19, 0xe8, 0xe6, 0x0b, 0xf2, 0x81, 0xbd, 0xf1, 0x05, 0x19, 0x5b, 0x61, 0x95, 0x89, 0x8a, - 0xc2, 0xeb, 0xc7, 0xd7, 0x51, 0xff, 0x84, 0xee, 0x91, 0x65, 0xdb, 0x59, 0x03, 0xef, 0x96, 0x91, - 0xd0, 0xd3, 0x59, 0xd2, 0x1f, 0x9f, 0x88, 0xdd, 0x8c, 0x35, 0xf8, 0x2f, 0x2d, 0x28, 0x4c, 0xc5, - 0xc2, 0x93, 0x75, 0x0f, 0x86, 0x62, 0x61, 0x59, 0xb9, 0x83, 0x9c, 0xdc, 0xc1, 0xb1, 0xf2, 0x50, - 0xf2, 0xb1, 0x32, 0x58, 0x8f, 0xe0, 0x01, 0x07, 0xa9, 0xf0, 0x86, 0x61, 0xd1, 0x67, 0xd6, 0x23, - 0x40, 0x21, 0x13, 0x9e, 0x26, 0x90, 0xa8, 0x5f, 0xeb, 0x45, 0x89, 0x2f, 0x45, 0x8f, 0x94, 0xfc, - 0x48, 0xc9, 0x43, 0x25, 0x2f, 0xc7, 0x94, 0xfc, 0x4c, 0xfc, 0xed, 0xf1, 0x3b, 0x54, 0xc3, 0x7f, - 0x30, 0x1f, 0x8b, 0x5c, 0x70, 0xb8, 0x77, 0x97, 0xa1, 0xf4, 0x7a, 0x37, 0x95, 0x5e, 0x30, 0x20, - 0x0a, 0x9b, 0x0e, 0x88, 0xbe, 0xad, 0x0e, 0x88, 0xfe, 0xd4, 0x01, 0x11, 0x2a, 0xc8, 0x40, 0xaa, - 0x82, 0x54, 0xf8, 0xa0, 0x41, 0xdd, 0x13, 0x28, 0x9c, 0xdd, 0x58, 0x2f, 0x8e, 0xd0, 0xd1, 0x94, - 0x98, 0x39, 0x01, 0x58, 0xa8, 0x5f, 0xcd, 0x77, 0x09, 0x37, 0xb2, 0x2f, 0x3a, 0xf2, 0x14, 0xca, - 0x95, 0xda, 0x6d, 0xae, 0x1f, 0xc7, 0x85, 0x48, 0x27, 0x29, 0xa5, 0x28, 0x35, 0x7e, 0x1e, 0xe5, - 0x4a, 0xb7, 0x6b, 0xd1, 0xa4, 0x09, 0xa5, 0xdb, 0x35, 0xfe, 0x25, 0xa9, 0x65, 0x6f, 0xd7, 0xf0, - 0x8b, 0x61, 0xf4, 0xc2, 0x95, 0x8e, 0x75, 0x87, 0x6f, 0x14, 0xb9, 0x13, 0xac, 0xef, 0x69, 0xd3, - 0xa0, 0x28, 0xba, 0x5d, 0x8c, 0xd0, 0x46, 0xb4, 0xa9, 0xb0, 0x75, 0x6d, 0xea, 0xdb, 0x54, 0x9b, - 0xfa, 0xb7, 0xaa, 0x4d, 0x03, 0x5b, 0xd0, 0x26, 0xb4, 0xa9, 0x36, 0x0d, 0xee, 0x5e, 0x9b, 0xda, - 0xe8, 0x4c, 0x3c, 0x44, 0x54, 0xa0, 0x11, 0x1a, 0xc2, 0x71, 0x2c, 0x77, 0x2c, 0x81, 0xab, 0xff, - 0x0e, 0xc3, 0xd6, 0x59, 0x52, 0xfd, 0x68, 0x4a, 0x7a, 0x2d, 0xa1, 0xb4, 0xfa, 0x4b, 0xd9, 0xf4, - 0xc8, 0x56, 0x07, 0x73, 0x8a, 0xfb, 0x96, 0x44, 0x29, 0xe5, 0xe5, 0x97, 0xc6, 0xe9, 0x52, 0x8e, - 0xb0, 0x4d, 0x92, 0xd9, 0x57, 0x32, 0x69, 0xe1, 0xb6, 0x76, 0x25, 0xb1, 0x47, 0xe2, 0xce, 0x6a, - 0xe0, 0x3d, 0xef, 0xca, 0x5e, 0x6a, 0xd1, 0x1c, 0xed, 0xb9, 0x1d, 0xe6, 0x68, 0xff, 0xcd, 0x0c, - 0x3a, 0x7e, 0xa3, 0xb3, 0x48, 0xb8, 0x73, 0x5a, 0xd0, 0x8c, 0x37, 0x10, 0xa2, 0x60, 0xee, 0xc4, - 0x92, 0x01, 0x27, 0x96, 0xf7, 0x8a, 0xa1, 0xb2, 0x22, 0x05, 0x2e, 0x87, 0xd4, 0xcc, 0x81, 0xe5, - 0x9c, 0xef, 0x62, 0x79, 0xa7, 0xb3, 0x48, 0xea, 0x31, 0x4f, 0x16, 0x81, 0xfb, 0x99, 0x97, 0x98, - 0xf3, 0xfa, 0x4e, 0x9d, 0x46, 0x7e, 0x21, 0x9b, 0x1a, 0x9d, 0xec, 0xc0, 0xa6, 0xd1, 0xfb, 0x50, - 0x62, 0xaf, 0x44, 0xd3, 0xe9, 0x25, 0x90, 0x44, 0x38, 0x26, 0x71, 0x49, 0x16, 0xd8, 0x01, 0x4f, - 0xee, 0xf8, 0xb6, 0x0a, 0xec, 0xf7, 0x33, 0xa9, 0x51, 0xe4, 0x0e, 0xaa, 0xc0, 0xd4, 0xff, 0x90, - 0xf3, 0x83, 0xd7, 0xed, 0xea, 0x13, 0x1e, 0x43, 0x03, 0x3c, 0x43, 0x8f, 0xec, 0x5b, 0xcb, 0x8f, - 0xf2, 0xe0, 0x68, 0x38, 0x20, 0xa0, 0xcb, 0xbc, 0x1f, 0x5c, 0x2b, 0xc8, 0xea, 0x0f, 0xcb, 0xbc, - 0xc9, 0xa1, 0x94, 0x5e, 0x20, 0xa1, 0x0b, 0xf9, 0xe4, 0x3d, 0xd3, 0x03, 0xab, 0x80, 0xf6, 0x65, - 0x8e, 0x2d, 0xe4, 0xe4, 0x9e, 0xe9, 0x31, 0x9b, 0x20, 0x40, 0xd3, 0x45, 0xba, 0x16, 0xa6, 0xae, - 0xe6, 0x8b, 0xb4, 0xcb, 0x33, 0x78, 0xf3, 0xc7, 0x5c, 0x8f, 0xa1, 0x01, 0xee, 0xb0, 0xca, 0xdd, - 0x4c, 0x78, 0x6b, 0xb9, 0x8b, 0x2b, 0xb4, 0x36, 0x20, 0xa0, 0x1c, 0x35, 0xb2, 0x1c, 0x3a, 0xd6, - 0x01, 0x47, 0x07, 0x20, 0x1a, 0xc7, 0xe0, 0xab, 0x68, 0xa4, 0xe6, 0xe9, 0x96, 0xa1, 0x3b, 0xc6, - 0x7c, 0xc7, 0x6b, 0x77, 0x3c, 0xd1, 0x28, 0x75, 0x3d, 0xc3, 0xee, 0x78, 0x5a, 0x84, 0x02, 0x3f, - 0x81, 0x86, 0x7d, 0xc8, 0xa4, 0xe3, 0xd8, 0x8e, 0x68, 0x79, 0xb8, 0x9e, 0x41, 0x1c, 0x47, 0x93, - 0x09, 0xf0, 0xfb, 0xd0, 0x70, 0xc5, 0xba, 0x6b, 0x37, 0xd8, 0x8b, 0x5b, 0x6d, 0x86, 0xdb, 0x21, - 0xf0, 0x40, 0xca, 0x0c, 0x10, 0xf5, 0x8e, 0xd3, 0xd4, 0x64, 0x42, 0x75, 0x23, 0x1b, 0x8f, 0xf1, - 0x77, 0x78, 0x37, 0x2d, 0x97, 0x64, 0x67, 0x3a, 0xf0, 0x20, 0x05, 0x83, 0x50, 0xf4, 0xe5, 0x65, - 0x76, 0xe1, 0x55, 0xd4, 0x7f, 0x83, 0xac, 0x31, 0xbf, 0xcf, 0x42, 0xe8, 0x2a, 0x7c, 0x87, 0xc3, - 0xc4, 0x13, 0x57, 0x9f, 0x4e, 0xfd, 0x72, 0x36, 0x1e, 0xbd, 0xf0, 0xf0, 0x0a, 0xfb, 0x09, 0xd4, - 0x07, 0xa2, 0xac, 0xf8, 0x47, 0xfe, 0x20, 0x40, 0x10, 0xb7, 0xec, 0x81, 0xec, 0x93, 0xa9, 0x3f, - 0x5e, 0x88, 0x86, 0xb4, 0x3c, 0xbc, 0xd2, 0x7b, 0x01, 0x0d, 0x4e, 0xd8, 0x96, 0x6b, 0xba, 0x1e, - 0xb1, 0x1a, 0xbe, 0xc2, 0x9e, 0xa6, 0x06, 0x55, 0x23, 0x04, 0x8b, 0x2f, 0x83, 0x04, 0xea, 0x9d, - 0x28, 0x2f, 0x7e, 0x06, 0x0d, 0x80, 0xc8, 0xc1, 0x4f, 0x9a, 0x4d, 0x78, 0x70, 0x5b, 0xb0, 0x48, - 0x81, 0x51, 0x27, 0xe9, 0x90, 0x14, 0xdf, 0x44, 0xfd, 0x13, 0x2b, 0x66, 0xd3, 0x70, 0x88, 0x05, - 0xfe, 0xc2, 0x42, 0x8c, 0x03, 0xb9, 0x2f, 0x2f, 0xc3, 0xbf, 0x40, 0xcb, 0x9a, 0xd3, 0xe0, 0xc5, - 0xa4, 0xb7, 0x51, 0x1c, 0x76, 0xe6, 0xfb, 0xb3, 0x08, 0x85, 0x05, 0xf0, 0x03, 0x28, 0x1b, 0x64, - 0x85, 0x05, 0x37, 0x15, 0x49, 0x83, 0xb2, 0xb0, 0x54, 0xf0, 0xb1, 0x9d, 0xdd, 0x74, 0x6c, 0xdf, - 0x44, 0x05, 0x76, 0xe2, 0x05, 0x9e, 0xe4, 0x42, 0x94, 0xbd, 0xd4, 0x06, 0x5f, 0x06, 0x7a, 0xb6, - 0x99, 0x05, 0xcb, 0x53, 0xf2, 0xca, 0x66, 0xcc, 0xce, 0x34, 0x50, 0x2f, 0xfc, 0x85, 0x2f, 0xa0, - 0xfc, 0x82, 0x9f, 0x51, 0x72, 0x98, 0xcd, 0xd2, 0x11, 0xf9, 0x01, 0x9e, 0x76, 0xd3, 0x84, 0x6d, - 0x79, 0xb4, 0x6a, 0x68, 0xf5, 0x10, 0x97, 0x0b, 0x87, 0x49, 0x72, 0xe1, 0x30, 0xf5, 0x9f, 0x66, - 0x13, 0x82, 0xad, 0x1e, 0xde, 0x61, 0xf2, 0x1c, 0x42, 0xf0, 0xd0, 0x9a, 0xca, 0xd3, 0x7f, 0xa2, - 0x01, 0xa3, 0x04, 0x18, 0x81, 0xda, 0x4a, 0xdb, 0x8e, 0x90, 0x58, 0xfd, 0xed, 0x4c, 0x2c, 0x42, - 0xe7, 0xae, 0xe4, 0x28, 0x5a, 0x65, 0xd9, 0x1d, 0x9a, 0xb1, 0x7e, 0x5f, 0xe4, 0xb6, 0xd7, 0x17, - 0xf2, 0xb7, 0xec, 0x81, 0x65, 0xba, 0x9f, 0xdf, 0xf2, 0xb5, 0x6c, 0x52, 0xbc, 0xd2, 0x83, 0xa9, - 0xe2, 0xd7, 0x02, 0xa3, 0x34, 0x1f, 0x89, 0x10, 0x0d, 0xd0, 0x68, 0xd6, 0x5b, 0x6e, 0xa6, 0x7e, - 0x14, 0x1d, 0x8b, 0x44, 0xf1, 0xe4, 0x09, 0x48, 0x2f, 0x74, 0x0f, 0x07, 0x9a, 0xfe, 0x44, 0x5f, - 0x22, 0x53, 0xff, 0x57, 0xa6, 0x7b, 0x0c, 0xd7, 0x7d, 0x57, 0x9d, 0x04, 0x01, 0xe4, 0xfe, 0x7a, - 0x04, 0xb0, 0x07, 0xdb, 0xe0, 0x83, 0x2d, 0x80, 0x77, 0xc8, 0xe4, 0xf1, 0x76, 0x0b, 0xe0, 0xc7, - 0x33, 0x9b, 0x86, 0xe0, 0xdd, 0x6f, 0x19, 0xa8, 0xff, 0x36, 0x93, 0x18, 0x2a, 0x77, 0x57, 0xed, - 0x7a, 0x11, 0x15, 0x98, 0x5b, 0x0d, 0x6f, 0x95, 0x90, 0x5c, 0x88, 0x42, 0xd3, 0xd2, 0x71, 0x33, - 0x2c, 0x9e, 0x41, 0x7d, 0xac, 0x0d, 0x06, 0xef, 0x8d, 0x87, 0xbb, 0xc4, 0xeb, 0x35, 0xd2, 0x26, - 0x47, 0x8e, 0x56, 0x7f, 0x2b, 0x13, 0x8b, 0xdc, 0xbb, 0x8f, 0xdf, 0x16, 0x4e, 0xd5, 0xb9, 0xad, - 0x4f, 0xd5, 0xea, 0x9f, 0x64, 0x93, 0x03, 0x07, 0xef, 0xe3, 0x87, 0xec, 0xc5, 0x71, 0xda, 0xce, - 0xd6, 0xad, 0x05, 0x34, 0x22, 0xcb, 0x82, 0x2f, 0x5b, 0xe7, 0x93, 0xc3, 0x27, 0xa7, 0xb4, 0x22, - 0xc2, 0x43, 0x7d, 0x2b, 0x13, 0x8f, 0x79, 0xbc, 0xef, 0xf3, 0xd3, 0xce, 0xb4, 0x45, 0xfe, 0x94, - 0x77, 0xc8, 0x5a, 0xb3, 0x17, 0x9f, 0xf2, 0x0e, 0x59, 0x35, 0x76, 0xf6, 0x29, 0x3f, 0x9b, 0x4d, - 0x0b, 0x19, 0xbd, 0xef, 0x1f, 0xf4, 0x41, 0x51, 0xc8, 0xac, 0x65, 0xfc, 0xd3, 0x1e, 0x48, 0x8b, - 0xd1, 0x9c, 0xc2, 0x33, 0xc6, 0x67, 0x67, 0x63, 0x3c, 0x51, 0x58, 0xef, 0x10, 0x45, 0x3e, 0x18, - 0xc2, 0x7a, 0x87, 0x0c, 0x95, 0x77, 0x9e, 0xb0, 0x7e, 0x3d, 0xbb, 0xd5, 0x38, 0xe5, 0x47, 0xc2, - 0x8b, 0x09, 0xef, 0xb3, 0xd9, 0x78, 0xfc, 0xfc, 0x7d, 0x17, 0xd3, 0x14, 0x2a, 0xf0, 0x48, 0xfe, - 0xa9, 0xc2, 0x61, 0xf8, 0x34, 0x8b, 0x86, 0x7f, 0xc7, 0x35, 0xc4, 0x2f, 0x72, 0xb6, 0x26, 0x12, - 0x46, 0xab, 0x7e, 0x33, 0x13, 0x09, 0x36, 0xbf, 0x2f, 0x47, 0x08, 0x3b, 0x5a, 0x92, 0xf0, 0x4b, - 0xfe, 0x61, 0x66, 0x3e, 0x12, 0x29, 0x38, 0xf8, 0x9e, 0x32, 0xf1, 0x74, 0xb3, 0x19, 0x2d, 0xcf, - 0x63, 0x02, 0x7c, 0x39, 0x8b, 0xc6, 0x62, 0xa4, 0xf8, 0x82, 0x14, 0x25, 0x07, 0x8e, 0x25, 0x23, - 0xce, 0xe3, 0x2c, 0x5e, 0xce, 0x36, 0x4e, 0x52, 0x2f, 0xa0, 0x7c, 0x59, 0x5f, 0x63, 0xdf, 0xd6, - 0xcb, 0x58, 0x1a, 0xfa, 0x9a, 0x78, 0xe2, 0x06, 0x78, 0xbc, 0x88, 0xee, 0x63, 0xf7, 0x21, 0xa6, - 0x6d, 0x2d, 0x98, 0x2d, 0x52, 0xb1, 0x66, 0xcd, 0x66, 0xd3, 0x74, 0xf9, 0xa5, 0xde, 0x63, 0x1b, - 0xeb, 0xc5, 0x8b, 0x9e, 0xed, 0xe9, 0xcd, 0x3a, 0xf1, 0xc9, 0xea, 0x9e, 0xd9, 0x22, 0x75, 0xd3, - 0xaa, 0xb7, 0x80, 0x52, 0x60, 0x99, 0xcc, 0x0a, 0x57, 0x58, 0x50, 0xe8, 0x5a, 0x43, 0xb7, 0x2c, - 0x62, 0x54, 0xac, 0xf1, 0x35, 0x8f, 0xb0, 0xcb, 0xc0, 0x1c, 0x3b, 0x12, 0x64, 0x6f, 0xc3, 0x19, - 0x9a, 0x32, 0x5e, 0xa4, 0x04, 0x5a, 0x42, 0x21, 0xf5, 0x37, 0xf2, 0x09, 0x79, 0x06, 0x0e, 0x90, - 0xfa, 0xf8, 0x3d, 0x9d, 0xdf, 0xa4, 0xa7, 0xaf, 0xa0, 0x3e, 0x1e, 0xe2, 0x93, 0x5f, 0x30, 0x80, - 0x33, 0xfb, 0x5d, 0x06, 0x12, 0x6f, 0x68, 0x38, 0x15, 0x6e, 0xa2, 0x33, 0x0b, 0xb4, 0x9b, 0x92, - 0x3b, 0xb3, 0xb0, 0x83, 0xce, 0xec, 0xc2, 0x0f, 0xbf, 0x8e, 0x4e, 0x01, 0x36, 0xa1, 0x5b, 0xfb, - 0xa0, 0x2a, 0x88, 0x1c, 0xc5, 0xaa, 0x4a, 0xee, 0xdc, 0xb4, 0xf2, 0xf8, 0x83, 0x68, 0x28, 0x18, - 0x20, 0x26, 0x71, 0xf9, 0xcd, 0x45, 0x97, 0x71, 0xc6, 0xc2, 0xb2, 0x51, 0x30, 0xb8, 0x90, 0xc9, - 0xa1, 0xbd, 0x24, 0x5e, 0xea, 0xbf, 0xc9, 0x74, 0xcb, 0x77, 0xb0, 0xef, 0xb3, 0xf2, 0x4b, 0xa8, - 0xcf, 0x60, 0x1f, 0xc5, 0x75, 0xaa, 0x7b, 0x46, 0x04, 0x46, 0xaa, 0xf9, 0x65, 0xd4, 0x3f, 0xce, - 0x74, 0x4d, 0xb3, 0x70, 0xd0, 0x3f, 0xef, 0xb3, 0xb9, 0x94, 0xcf, 0xe3, 0x93, 0xe8, 0x25, 0x34, - 0x6a, 0x86, 0x11, 0xab, 0xeb, 0x61, 0xf8, 0x29, 0xed, 0x98, 0x00, 0x87, 0xd1, 0x75, 0x0d, 0x9d, - 0xf4, 0x1d, 0x1f, 0x1d, 0xdf, 0x43, 0xcc, 0xad, 0x77, 0x1c, 0x93, 0x8d, 0x4b, 0xed, 0x84, 0x1b, - 0x71, 0x1f, 0x73, 0x6f, 0x3a, 0x26, 0xad, 0x40, 0xf7, 0x56, 0x88, 0xa5, 0xd7, 0x57, 0x6d, 0xe7, - 0x0e, 0xc4, 0xfe, 0x64, 0x83, 0x53, 0x3b, 0xc6, 0xe0, 0xb7, 0x7d, 0x30, 0x7e, 0x08, 0x0d, 0x2f, - 0x37, 0x3b, 0x24, 0x88, 0xb6, 0xc8, 0xee, 0xfa, 0xb4, 0x21, 0x0a, 0x0c, 0x6e, 0x48, 0xce, 0x21, - 0x04, 0x44, 0x1e, 0x24, 0xc1, 0x80, 0x8b, 0x3d, 0x6d, 0x80, 0x42, 0x16, 0x78, 0x77, 0x9d, 0x61, - 0x5a, 0xcd, 0x84, 0x54, 0x6f, 0xda, 0xd6, 0x72, 0xdd, 0x23, 0x4e, 0x0b, 0x1a, 0x0a, 0xce, 0x0c, - 0xda, 0x49, 0xa0, 0x80, 0xab, 0x13, 0x77, 0xc6, 0xb6, 0x96, 0x17, 0x88, 0xd3, 0xa2, 0x4d, 0x7d, - 0x0c, 0x61, 0xde, 0x54, 0x07, 0x0e, 0x3d, 0xd8, 0xc7, 0x81, 0x37, 0x83, 0xc6, 0x3f, 0x82, 0x9d, - 0x86, 0xc0, 0x87, 0x15, 0xd1, 0x20, 0x0b, 0x39, 0xc7, 0x84, 0x06, 0x2e, 0x0c, 0x1a, 0x62, 0x20, - 0x90, 0xd7, 0x49, 0xc4, 0xbd, 0x2b, 0x98, 0x57, 0xb7, 0xc6, 0x7f, 0xa9, 0x9f, 0xca, 0x25, 0x65, - 0x86, 0xd8, 0x95, 0xa2, 0x85, 0xd3, 0x6a, 0x76, 0x5b, 0xd3, 0xea, 0x31, 0xab, 0xd3, 0xaa, 0xeb, - 0xed, 0x76, 0x7d, 0xc9, 0x6c, 0xc2, 0xb3, 0x2a, 0x58, 0xf8, 0xb4, 0x61, 0xab, 0xd3, 0x2a, 0xb5, - 0xdb, 0x53, 0x0c, 0x88, 0x1f, 0x45, 0x63, 0x94, 0x0e, 0x3a, 0x29, 0xa0, 0xcc, 0x03, 0x25, 0x65, - 0x00, 0x31, 0x5b, 0x7d, 0xda, 0xd3, 0xa8, 0x9f, 0xf3, 0x64, 0x6b, 0x55, 0xaf, 0xd6, 0xc7, 0x98, - 0xb9, 0xb4, 0xe7, 0x02, 0x36, 0x6c, 0x72, 0xed, 0xd5, 0x06, 0xfc, 0xf2, 0x10, 0x99, 0xd8, 0xea, - 0xb4, 0x58, 0x44, 0xac, 0x3e, 0x40, 0x06, 0xbf, 0xf1, 0x05, 0x34, 0x42, 0xb9, 0x04, 0x02, 0x63, - 0xc1, 0x5c, 0x7b, 0xb5, 0x08, 0x14, 0x5f, 0x45, 0x27, 0x24, 0x08, 0xb3, 0x41, 0xd9, 0x33, 0x81, - 0x5e, 0x2d, 0x11, 0xa7, 0xbe, 0x95, 0x8b, 0x27, 0xbe, 0xd8, 0x97, 0xb5, 0x71, 0x1a, 0x21, 0x9e, - 0xd7, 0x26, 0xbc, 0xa0, 0x09, 0xbc, 0x96, 0x43, 0x4c, 0x0a, 0x0f, 0xa1, 0x2c, 0xbe, 0x84, 0xfa, - 0xd9, 0x17, 0x55, 0xca, 0x7c, 0xcd, 0x04, 0x37, 0x23, 0xb7, 0x6d, 0x2e, 0x2d, 0x81, 0x4f, 0x52, - 0x80, 0xc6, 0x17, 0x50, 0x5f, 0x79, 0xae, 0x56, 0x2b, 0xcd, 0xf9, 0xb7, 0x8d, 0xf0, 0x46, 0xc1, - 0xb0, 0xdc, 0xba, 0xab, 0x5b, 0xae, 0xe6, 0x23, 0xf1, 0x43, 0xa8, 0x50, 0xa9, 0x02, 0x19, 0x7b, - 0x79, 0x37, 0xb8, 0xb1, 0x5e, 0xec, 0x33, 0xdb, 0x8c, 0x8a, 0xa3, 0xa0, 0xde, 0x5b, 0x95, 0xb2, - 0x70, 0xe5, 0xce, 0xea, 0xbd, 0x6b, 0x1a, 0x70, 0x75, 0xa9, 0x05, 0x68, 0xfc, 0x34, 0x1a, 0xaa, - 0x11, 0xc7, 0xd4, 0x9b, 0x73, 0x1d, 0xd8, 0x6e, 0x30, 0x37, 0xa3, 0xb1, 0x8d, 0xf5, 0xe2, 0xb0, - 0x0b, 0xf0, 0xba, 0x05, 0x08, 0x4d, 0x22, 0xc3, 0x67, 0x51, 0x7e, 0xda, 0xb4, 0x7c, 0x37, 0x78, - 0xf0, 0x93, 0x5e, 0x31, 0x2d, 0x4f, 0x03, 0xa8, 0xfa, 0x5f, 0xb2, 0xc9, 0xa9, 0x47, 0xf6, 0x61, - 0x6c, 0xed, 0xf0, 0xb6, 0x30, 0xa2, 0x04, 0xf9, 0x5d, 0x28, 0xc1, 0x12, 0x3a, 0x56, 0x32, 0x5a, - 0xa6, 0x55, 0x82, 0x9f, 0xee, 0xec, 0x54, 0x09, 0x06, 0xa4, 0xf0, 0x0c, 0x2b, 0x82, 0xe6, 0xdf, - 0xc3, 0xc2, 0xad, 0x52, 0x54, 0x5d, 0x67, 0xb8, 0x7a, 0x6b, 0x49, 0xaf, 0x37, 0x58, 0xd6, 0x0e, - 0x2d, 0xca, 0x54, 0xfd, 0xbe, 0xec, 0x26, 0xd9, 0x52, 0x0e, 0xa3, 0xf4, 0xd5, 0xcf, 0x65, 0xbb, - 0x27, 0xac, 0x39, 0x94, 0x42, 0xf9, 0xf3, 0x6c, 0x42, 0xfa, 0x98, 0x5d, 0x49, 0xe2, 0x12, 0xea, - 0x67, 0x6c, 0x02, 0x77, 0x4d, 0x98, 0x71, 0x98, 0xb2, 0xc2, 0x4c, 0xe7, 0xa3, 0xf1, 0x1c, 0x3a, - 0x51, 0x5a, 0x5a, 0x22, 0x0d, 0x2f, 0x0c, 0xbc, 0x3b, 0x17, 0x06, 0xdb, 0x64, 0xd1, 0x4a, 0x39, - 0x3e, 0x0c, 0xdc, 0x0b, 0x41, 0x25, 0x12, 0xcb, 0xe1, 0x05, 0x74, 0x32, 0x0a, 0xaf, 0x31, 0x53, - 0x2f, 0x2f, 0x04, 0x30, 0x8d, 0x71, 0x64, 0xff, 0x69, 0x29, 0x65, 0x93, 0x5a, 0x09, 0xd3, 0x69, - 0x6f, 0xb7, 0x56, 0xc2, 0xdc, 0x9a, 0x58, 0x4e, 0xfd, 0x72, 0x4e, 0xcc, 0xb2, 0x73, 0x78, 0x1d, - 0x6b, 0xae, 0x49, 0xee, 0xb4, 0x5b, 0x1d, 0x32, 0x4f, 0xf3, 0x48, 0x11, 0x46, 0xc7, 0xf1, 0x3d, - 0xcf, 0x82, 0x97, 0xea, 0x00, 0x14, 0x7d, 0xc8, 0x02, 0x4a, 0x5c, 0x41, 0xf9, 0x92, 0xb3, 0xcc, - 0xcc, 0x98, 0xcd, 0x1e, 0xcf, 0xe8, 0xce, 0xb2, 0x9b, 0xfc, 0x78, 0x86, 0xb2, 0x50, 0xbf, 0x37, - 0xdb, 0x25, 0x0b, 0xcf, 0xa1, 0x9c, 0x44, 0x7e, 0x24, 0x9b, 0x96, 0x4f, 0xe7, 0xa0, 0xba, 0x08, - 0xbd, 0xcd, 0xc2, 0x39, 0xd8, 0xfe, 0x53, 0x7b, 0x2c, 0x9c, 0x94, 0xdc, 0x3e, 0x47, 0xc2, 0xf9, - 0x54, 0x36, 0x2d, 0xbd, 0xd1, 0xa1, 0x9d, 0x65, 0x52, 0x32, 0x2a, 0x1d, 0xe9, 0xca, 0x8f, 0x66, - 0x53, 0x93, 0x4a, 0x1d, 0x49, 0x47, 0xfd, 0x74, 0x36, 0x35, 0x29, 0xd6, 0xa1, 0x1c, 0x4a, 0x89, - 0xda, 0x72, 0x34, 0x96, 0xb8, 0x74, 0xbe, 0x27, 0x17, 0x4f, 0x43, 0x76, 0x28, 0xcf, 0x2b, 0xc6, - 0x51, 0xbf, 0xbf, 0xa1, 0xe1, 0x36, 0xfa, 0x96, 0xbb, 0xd3, 0x2f, 0x87, 0x5f, 0x46, 0xc7, 0x42, - 0x59, 0x8a, 0xe1, 0x48, 0xe0, 0x22, 0xa8, 0x41, 0x51, 0xf5, 0x37, 0x28, 0x8e, 0xbf, 0x9b, 0x8f, - 0x52, 0xab, 0xdf, 0xcc, 0xc5, 0x73, 0xb9, 0x1d, 0xf5, 0xc6, 0x0e, 0x7b, 0xe3, 0x26, 0x3a, 0x39, - 0xd1, 0x71, 0x1c, 0x62, 0x79, 0xc9, 0x9d, 0x02, 0x27, 0x4d, 0x0d, 0x46, 0x51, 0x8f, 0x77, 0x4e, - 0x4a, 0x61, 0xca, 0x96, 0xbb, 0x5c, 0x46, 0xd9, 0xf6, 0x85, 0x6c, 0x3b, 0x8c, 0x22, 0x89, 0x6d, - 0x72, 0x61, 0xf5, 0x77, 0xb2, 0xf1, 0xec, 0x7b, 0x47, 0x5d, 0xbf, 0xb3, 0xae, 0x7f, 0x74, 0x96, - 0x65, 0x33, 0xb9, 0x61, 0x5a, 0x06, 0x3e, 0x8d, 0xee, 0xbb, 0x59, 0x9b, 0xd4, 0xea, 0x37, 0x2a, - 0x73, 0xe5, 0xfa, 0xcd, 0xb9, 0x5a, 0x75, 0x72, 0xa2, 0x32, 0x55, 0x99, 0x2c, 0x8f, 0xf6, 0xe0, - 0xe3, 0xe8, 0x58, 0x88, 0x9a, 0xbe, 0x39, 0x5b, 0x9a, 0x1b, 0xcd, 0xe0, 0x31, 0x34, 0x1c, 0x02, - 0xc7, 0xe7, 0x17, 0x46, 0xb3, 0x8f, 0xbe, 0x07, 0x0d, 0xc2, 0x75, 0x0d, 0x3b, 0x76, 0xc4, 0x43, - 0xa8, 0x7f, 0x7e, 0xbc, 0x36, 0xa9, 0xdd, 0x02, 0x26, 0x08, 0x15, 0xca, 0x93, 0x73, 0x94, 0x61, - 0xe6, 0xd1, 0xff, 0x9e, 0x41, 0xa8, 0x36, 0xb5, 0x50, 0xe5, 0x84, 0x83, 0xa8, 0xaf, 0x32, 0x77, - 0xab, 0x34, 0x53, 0xa1, 0x74, 0xfd, 0x28, 0x3f, 0x5f, 0x9d, 0xa4, 0x35, 0x0c, 0xa0, 0xde, 0x89, - 0x99, 0xf9, 0xda, 0xe4, 0x68, 0x96, 0x02, 0xb5, 0xc9, 0x52, 0x79, 0x34, 0x47, 0x81, 0xb7, 0xb5, - 0xca, 0xc2, 0xe4, 0x68, 0x9e, 0xfe, 0x39, 0x53, 0x5b, 0x28, 0x2d, 0x8c, 0xf6, 0xd2, 0x3f, 0xa7, - 0xe0, 0xcf, 0x02, 0x65, 0x56, 0x9b, 0x5c, 0x80, 0x1f, 0x7d, 0xb4, 0x09, 0x53, 0xfe, 0xaf, 0x7e, - 0x8a, 0xa2, 0xac, 0xcb, 0x15, 0x6d, 0x74, 0x80, 0xfe, 0xa0, 0x2c, 0xe9, 0x0f, 0x44, 0x1b, 0xa7, - 0x4d, 0xce, 0xce, 0xdf, 0x9a, 0x1c, 0x1d, 0xa4, 0xbc, 0x66, 0x6f, 0x50, 0xf0, 0x10, 0xfd, 0x53, - 0x9b, 0xa5, 0x7f, 0x0e, 0x53, 0x4e, 0xda, 0x64, 0x69, 0xa6, 0x5a, 0x5a, 0x98, 0x1e, 0x1d, 0xa1, - 0xed, 0x01, 0x9e, 0xc7, 0x58, 0xc9, 0xb9, 0xd2, 0xec, 0xe4, 0xe8, 0x28, 0xa7, 0x29, 0xcf, 0x54, - 0xe6, 0x6e, 0x8c, 0x8e, 0x41, 0x43, 0x5e, 0x9f, 0x85, 0x1f, 0x98, 0x16, 0x80, 0xbf, 0x8e, 0x3f, - 0xfa, 0x61, 0x54, 0x98, 0xaf, 0xc1, 0xe1, 0xfa, 0x29, 0x74, 0x7c, 0xbe, 0x56, 0x5f, 0x78, 0xbd, - 0x3a, 0x19, 0x91, 0xf7, 0x18, 0x1a, 0xf6, 0x11, 0x33, 0x95, 0xb9, 0x9b, 0x1f, 0x60, 0xd2, 0xf6, - 0x41, 0xb3, 0xa5, 0x89, 0xf9, 0xda, 0x68, 0x96, 0xf6, 0x8a, 0x0f, 0xba, 0x5d, 0x99, 0x2b, 0xcf, - 0xdf, 0xae, 0x8d, 0xe6, 0x1e, 0xbd, 0x8b, 0x86, 0x58, 0x2e, 0x98, 0x79, 0xc7, 0x5c, 0x36, 0x2d, - 0x7c, 0x0e, 0x9d, 0x2e, 0x4f, 0xde, 0xaa, 0x4c, 0x4c, 0xd6, 0xe7, 0xb5, 0xca, 0xf5, 0xca, 0x5c, - 0xa4, 0xa6, 0xfb, 0xd0, 0x98, 0x8c, 0x2e, 0x55, 0x2b, 0xa3, 0x19, 0x7c, 0x12, 0x61, 0x19, 0xfc, - 0x6a, 0x69, 0x76, 0x6a, 0x34, 0x8b, 0x15, 0x74, 0x42, 0x86, 0x57, 0xe6, 0x16, 0x6e, 0xce, 0x4d, - 0x8e, 0xe6, 0x1e, 0xfd, 0xc9, 0x0c, 0xba, 0x2f, 0x31, 0x5e, 0x18, 0x56, 0xd1, 0xf9, 0xc9, 0x99, - 0x52, 0x6d, 0xa1, 0x32, 0x51, 0x9b, 0x2c, 0x69, 0x13, 0xd3, 0xf5, 0x89, 0xd2, 0xc2, 0xe4, 0xf5, - 0x79, 0xed, 0xf5, 0xfa, 0xf5, 0xc9, 0xb9, 0x49, 0xad, 0x34, 0x33, 0xda, 0x83, 0x1f, 0x42, 0xc5, - 0x14, 0x9a, 0xda, 0xe4, 0xc4, 0x4d, 0xad, 0xb2, 0xf0, 0xfa, 0x68, 0x06, 0x3f, 0x88, 0xce, 0xa5, - 0x12, 0xd1, 0xdf, 0xa3, 0x59, 0x7c, 0x1e, 0x9d, 0x49, 0x23, 0x79, 0x6d, 0x66, 0x34, 0xf7, 0xe8, - 0x0f, 0x65, 0x10, 0x8e, 0x07, 0x7c, 0xc2, 0x0f, 0xa0, 0xb3, 0x54, 0x2f, 0xea, 0xe9, 0x0d, 0x7c, - 0x10, 0x9d, 0x4b, 0xa4, 0x10, 0x9a, 0x57, 0x44, 0xf7, 0xa7, 0x90, 0xf0, 0xc6, 0x9d, 0x45, 0x4a, - 0x32, 0x01, 0x34, 0xed, 0x8b, 0x19, 0x74, 0x5f, 0xe2, 0x49, 0x3f, 0xbe, 0x88, 0x1e, 0x2e, 0x95, - 0x67, 0x69, 0xdf, 0x4c, 0x2c, 0x54, 0xe6, 0xe7, 0x6a, 0xf5, 0xd9, 0xa9, 0x52, 0x9d, 0x6a, 0xdf, - 0xcd, 0x5a, 0xa4, 0x37, 0x2f, 0x20, 0xb5, 0x0b, 0xe5, 0xc4, 0x74, 0x69, 0xee, 0x3a, 0x1d, 0x7e, - 0xf8, 0x61, 0xf4, 0x40, 0x2a, 0xdd, 0xe4, 0x5c, 0x69, 0x7c, 0x66, 0xb2, 0x3c, 0x9a, 0xc5, 0x8f, - 0xa0, 0x07, 0x53, 0xa9, 0xca, 0x95, 0x1a, 0x23, 0xcb, 0x8d, 0x97, 0xdf, 0xfa, 0x77, 0xe7, 0x7b, - 0xde, 0xfa, 0xfa, 0xf9, 0xcc, 0xef, 0x7d, 0xfd, 0x7c, 0xe6, 0x4f, 0xbe, 0x7e, 0x3e, 0xf3, 0xc1, - 0xab, 0xdb, 0x09, 0xe4, 0xc5, 0xa6, 0xac, 0xc5, 0x02, 0x9c, 0xba, 0x3d, 0xf5, 0xbf, 0x03, 0x00, - 0x00, 0xff, 0xff, 0xf7, 0x7d, 0x76, 0x2e, 0x89, 0x68, 0x01, 0x00, + 0x7b, 0x08, 0x42, 0xdf, 0xcb, 0xeb, 0xcf, 0x8f, 0x5d, 0x7b, 0x77, 0xbd, 0x59, 0xc7, 0x6f, 0x27, + 0x67, 0x6d, 0xc7, 0x89, 0xed, 0xd8, 0x5e, 0xdb, 0xf1, 0x59, 0x7b, 0xed, 0xec, 0x89, 0x9d, 0x4d, + 0x4e, 0x64, 0x6f, 0xe2, 0x63, 0x3b, 0x89, 0x8f, 0x4f, 0xe2, 0x60, 0x9d, 0x4d, 0x9c, 0x1f, 0x38, + 0xf1, 0x39, 0x4e, 0xb2, 0x27, 0xde, 0x38, 0x4e, 0x4e, 0x4e, 0xdd, 0xaa, 0xee, 0xae, 0xea, 0xc7, + 0xe0, 0x29, 0x43, 0x10, 0xf0, 0x87, 0xc4, 0xdc, 0x7b, 0xeb, 0x56, 0xf5, 0xad, 0x5b, 0x55, 0xb7, + 0xaa, 0x6e, 0xdd, 0x8b, 0x2e, 0x79, 0xa4, 0x49, 0xda, 0xb6, 0xe3, 0x5d, 0x69, 0x92, 0x65, 0xbd, + 0xb1, 0x76, 0xc5, 0x5b, 0x6b, 0x13, 0xf7, 0x0a, 0xb9, 0x4b, 0x2c, 0xcf, 0xff, 0xef, 0x72, 0xdb, + 0xb1, 0x3d, 0x1b, 0x17, 0xd8, 0xaf, 0x33, 0x27, 0x96, 0xed, 0x65, 0x1b, 0x40, 0x57, 0xe8, 0x5f, + 0x0c, 0x7b, 0xe6, 0xec, 0xb2, 0x6d, 0x2f, 0x37, 0xc9, 0x15, 0xf8, 0xb5, 0xd8, 0x59, 0xba, 0xe2, + 0x7a, 0x4e, 0xa7, 0xe1, 0x71, 0x6c, 0x31, 0x8a, 0xf5, 0xcc, 0x16, 0x71, 0x3d, 0xbd, 0xd5, 0xe6, + 0x04, 0xe7, 0xa3, 0x04, 0xab, 0x8e, 0xde, 0x6e, 0x13, 0x87, 0x57, 0x7e, 0xe6, 0xc1, 0xe4, 0x76, + 0xc2, 0xbf, 0x9c, 0xe4, 0xf1, 0x64, 0x12, 0x9f, 0x51, 0x84, 0xa3, 0xfa, 0xb9, 0x2c, 0xea, 0x9f, + 0x25, 0x9e, 0x6e, 0xe8, 0x9e, 0x8e, 0xcf, 0xa2, 0xde, 0x8a, 0x65, 0x90, 0x7b, 0x4a, 0xe6, 0x81, + 0xcc, 0xc5, 0xdc, 0x78, 0x61, 0x63, 0xbd, 0x98, 0x25, 0xa6, 0xc6, 0x80, 0xf8, 0x1c, 0xca, 0x2f, + 0xac, 0xb5, 0x89, 0x92, 0x7d, 0x20, 0x73, 0x71, 0x60, 0x7c, 0x60, 0x63, 0xbd, 0xd8, 0x0b, 0xb2, + 0xd0, 0x00, 0x8c, 0x1f, 0x44, 0xd9, 0x4a, 0x59, 0xc9, 0x01, 0x72, 0x6c, 0x63, 0xbd, 0x38, 0xdc, + 0x31, 0x8d, 0xc7, 0xec, 0x96, 0xe9, 0x91, 0x56, 0xdb, 0x5b, 0xd3, 0xb2, 0x95, 0x32, 0xbe, 0x80, + 0xf2, 0x13, 0xb6, 0x41, 0x94, 0x3c, 0x10, 0xe1, 0x8d, 0xf5, 0xe2, 0x48, 0xc3, 0x36, 0x88, 0x40, + 0x05, 0x78, 0xfc, 0x0a, 0xca, 0x2f, 0x98, 0x2d, 0xa2, 0xf4, 0x3e, 0x90, 0xb9, 0x38, 0x78, 0xf5, + 0xcc, 0x65, 0x26, 0x95, 0xcb, 0xbe, 0x54, 0x2e, 0x2f, 0xf8, 0x62, 0x1b, 0x1f, 0x7d, 0x6b, 0xbd, + 0xd8, 0xb3, 0xb1, 0x5e, 0xcc, 0x53, 0x49, 0x7e, 0xf6, 0x6b, 0xc5, 0x8c, 0x06, 0x25, 0xf1, 0x8b, + 0x68, 0x70, 0xa2, 0xd9, 0x71, 0x3d, 0xe2, 0xcc, 0xe9, 0x2d, 0xa2, 0x14, 0xa0, 0xc2, 0x33, 0x1b, + 0xeb, 0xc5, 0x93, 0x0d, 0x06, 0xae, 0x5b, 0x7a, 0x4b, 0xac, 0x58, 0x24, 0x57, 0x7f, 0x2d, 0x83, + 0x8e, 0xd5, 0x88, 0xeb, 0x9a, 0xb6, 0x15, 0xc8, 0xe6, 0x11, 0x34, 0xc0, 0x41, 0x95, 0x32, 0xc8, + 0x67, 0x60, 0xbc, 0x6f, 0x63, 0xbd, 0x98, 0x73, 0x4d, 0x43, 0x0b, 0x31, 0xf8, 0x09, 0xd4, 0x77, + 0xdb, 0xf4, 0x56, 0x66, 0xa7, 0x4a, 0x5c, 0x4e, 0x27, 0x37, 0xd6, 0x8b, 0x78, 0xd5, 0xf4, 0x56, + 0xea, 0xad, 0x25, 0x5d, 0xa8, 0xd0, 0x27, 0xc3, 0x33, 0x68, 0xb4, 0xea, 0x98, 0x77, 0x75, 0x8f, + 0xdc, 0x20, 0x6b, 0x55, 0xbb, 0x69, 0x36, 0xd6, 0xb8, 0x14, 0x1f, 0xd8, 0x58, 0x2f, 0x9e, 0x6d, + 0x33, 0x5c, 0xfd, 0x0e, 0x59, 0xab, 0xb7, 0x01, 0x2b, 0x30, 0x89, 0x95, 0x54, 0xbf, 0xd2, 0x8b, + 0x86, 0x6e, 0xba, 0xc4, 0x09, 0xda, 0x7d, 0x01, 0xe5, 0xe9, 0x6f, 0xde, 0x64, 0x90, 0x79, 0xc7, + 0x25, 0x8e, 0x28, 0x73, 0x8a, 0xc7, 0x97, 0x50, 0xef, 0x8c, 0xbd, 0x6c, 0x5a, 0xbc, 0xd9, 0xc7, + 0x37, 0xd6, 0x8b, 0xc7, 0x9a, 0x14, 0x20, 0x50, 0x32, 0x0a, 0xfc, 0x7e, 0x34, 0x54, 0x69, 0x51, + 0x1d, 0xb2, 0x2d, 0xdd, 0xb3, 0x1d, 0xde, 0x5a, 0x90, 0xae, 0x29, 0xc0, 0x85, 0x82, 0x12, 0x3d, + 0x7e, 0x1e, 0xa1, 0xd2, 0xed, 0x9a, 0x66, 0x37, 0x49, 0x49, 0x9b, 0xe3, 0xca, 0x00, 0xa5, 0xf5, + 0x55, 0xb7, 0xee, 0xd8, 0x4d, 0x52, 0xd7, 0x1d, 0xb1, 0x5a, 0x81, 0x1a, 0x4f, 0xa2, 0x91, 0x52, + 0xa3, 0x41, 0x5c, 0x57, 0x23, 0x1f, 0xeb, 0x10, 0xd7, 0x73, 0x95, 0xde, 0x07, 0x72, 0x17, 0x07, + 0xc6, 0xcf, 0x6d, 0xac, 0x17, 0x4f, 0xeb, 0x80, 0xa9, 0x3b, 0x1c, 0x25, 0xb0, 0x88, 0x14, 0xc2, + 0xe3, 0x68, 0xb8, 0xf4, 0x66, 0xc7, 0x21, 0x15, 0x83, 0x58, 0x9e, 0xe9, 0xad, 0x71, 0x0d, 0x39, + 0xbb, 0xb1, 0x5e, 0x54, 0x74, 0x8a, 0xa8, 0x9b, 0x1c, 0x23, 0x30, 0x91, 0x8b, 0xe0, 0x79, 0x34, + 0x76, 0x7d, 0xa2, 0x5a, 0x23, 0xce, 0x5d, 0xb3, 0x41, 0x4a, 0x8d, 0x86, 0xdd, 0xb1, 0x3c, 0xa5, + 0x0f, 0xf8, 0x3c, 0xb8, 0xb1, 0x5e, 0x3c, 0xb7, 0xdc, 0x68, 0xd7, 0x5d, 0x86, 0xad, 0xeb, 0x0c, + 0x2d, 0x30, 0x8b, 0x97, 0xc5, 0x1f, 0x44, 0xc3, 0x0b, 0x0e, 0xd5, 0x42, 0xa3, 0x4c, 0x28, 0x5c, + 0xe9, 0x07, 0xfd, 0x3f, 0x79, 0x99, 0x4f, 0x40, 0x0c, 0xea, 0xf7, 0x2c, 0x6b, 0xac, 0xc7, 0x0a, + 0xd4, 0x0d, 0xc0, 0x89, 0x8d, 0x95, 0x58, 0x61, 0x82, 0x14, 0xfa, 0xf1, 0xa6, 0x43, 0x8c, 0x98, + 0xb6, 0x0d, 0x40, 0x9b, 0x2f, 0x6d, 0xac, 0x17, 0x1f, 0x71, 0x38, 0x4d, 0xbd, 0xab, 0xda, 0xa5, + 0xb2, 0xc2, 0x93, 0xa8, 0x9f, 0x6a, 0xd3, 0x0d, 0xd3, 0x32, 0x14, 0xf4, 0x40, 0xe6, 0xe2, 0xc8, + 0xd5, 0x51, 0xbf, 0xf5, 0x3e, 0x7c, 0xfc, 0xd4, 0xc6, 0x7a, 0xf1, 0x38, 0xd5, 0xc1, 0xfa, 0x1d, + 0xd3, 0x12, 0xa7, 0x88, 0xa0, 0xa8, 0xfa, 0x17, 0x79, 0x34, 0x42, 0x85, 0x23, 0xe8, 0x71, 0x89, + 0x0e, 0x49, 0x0a, 0xa1, 0x23, 0xd4, 0x6d, 0xeb, 0x0d, 0xc2, 0x55, 0x1a, 0xd8, 0x59, 0x3e, 0x50, + 0x60, 0x17, 0xa5, 0xc7, 0x97, 0x50, 0x3f, 0x03, 0x55, 0xca, 0x5c, 0xcb, 0x87, 0x37, 0xd6, 0x8b, + 0x03, 0x2e, 0xc0, 0xea, 0xa6, 0xa1, 0x05, 0x68, 0xaa, 0x66, 0xec, 0xef, 0x69, 0xdb, 0xf5, 0x28, + 0x73, 0xae, 0xe4, 0xa0, 0x66, 0xbc, 0xc0, 0x0a, 0x47, 0x89, 0x6a, 0x26, 0x17, 0xc2, 0xcf, 0x21, + 0xc4, 0x20, 0x25, 0xc3, 0x70, 0xb8, 0xa6, 0x9f, 0xde, 0x58, 0x2f, 0xde, 0xc7, 0x59, 0xe8, 0x86, + 0x21, 0x0e, 0x13, 0x81, 0x18, 0xb7, 0xd0, 0x10, 0xfb, 0x35, 0xa3, 0x2f, 0x92, 0x26, 0x53, 0xf3, + 0xc1, 0xab, 0x17, 0x7d, 0x69, 0xca, 0xd2, 0xb9, 0x2c, 0x92, 0x4e, 0x5a, 0x9e, 0xb3, 0x36, 0x5e, + 0xe4, 0x33, 0xe3, 0x29, 0x5e, 0x55, 0x13, 0x70, 0xe2, 0x98, 0x14, 0xcb, 0xd0, 0x09, 0x73, 0xca, + 0x76, 0x56, 0x75, 0xc7, 0x20, 0xc6, 0xf8, 0x9a, 0x38, 0x61, 0x2e, 0xf9, 0xe0, 0xfa, 0xa2, 0xa8, + 0x03, 0x22, 0x39, 0x9e, 0x40, 0xc3, 0x8c, 0x5b, 0xad, 0xb3, 0x08, 0x7d, 0xdf, 0x17, 0x93, 0x96, + 0xdb, 0x59, 0x8c, 0xf6, 0xb7, 0x5c, 0x86, 0x8e, 0x49, 0x06, 0xb8, 0x45, 0x1c, 0x3a, 0x9b, 0x82, + 0xfa, 0xf3, 0x31, 0xc9, 0x99, 0xdc, 0x65, 0x98, 0x38, 0x0f, 0x5e, 0xe4, 0xcc, 0xcb, 0x68, 0x2c, + 0x26, 0x0a, 0x3c, 0x8a, 0x72, 0x77, 0xc8, 0x1a, 0x53, 0x17, 0x8d, 0xfe, 0x89, 0x4f, 0xa0, 0xde, + 0xbb, 0x7a, 0xb3, 0xc3, 0xd7, 0x32, 0x8d, 0xfd, 0x78, 0x3e, 0xfb, 0xbe, 0x0c, 0x9d, 0xfa, 0xf1, + 0x84, 0x6d, 0x59, 0xa4, 0xe1, 0x89, 0xb3, 0xff, 0x33, 0x68, 0x60, 0xc6, 0x6e, 0xe8, 0x4d, 0xe8, + 0x47, 0xa6, 0x77, 0xca, 0xc6, 0x7a, 0xf1, 0x04, 0xed, 0xc0, 0xcb, 0x4d, 0x8a, 0x11, 0xda, 0x14, + 0x92, 0x52, 0x05, 0xd0, 0x48, 0xcb, 0xf6, 0x08, 0x14, 0xcc, 0x86, 0x0a, 0x00, 0x05, 0x1d, 0x40, + 0x89, 0x0a, 0x10, 0x12, 0xe3, 0x2b, 0xa8, 0xbf, 0x4a, 0x17, 0xbc, 0x86, 0xdd, 0xe4, 0xca, 0x07, + 0x73, 0x32, 0x2c, 0x82, 0xe2, 0xa0, 0xf1, 0x89, 0xd4, 0x69, 0x34, 0x32, 0xd1, 0x34, 0x89, 0xe5, + 0x89, 0xad, 0xa6, 0x43, 0xaa, 0xb4, 0x4c, 0x2c, 0x4f, 0x6c, 0x35, 0x0c, 0x3e, 0x9d, 0x42, 0xc5, + 0x56, 0x07, 0xa4, 0xea, 0xef, 0xe6, 0xd0, 0xe9, 0x1b, 0x9d, 0x45, 0xe2, 0x58, 0xc4, 0x23, 0x2e, + 0x5f, 0x19, 0x03, 0xae, 0x73, 0x68, 0x2c, 0x86, 0xe4, 0xdc, 0x61, 0xc5, 0xba, 0x13, 0x20, 0xeb, + 0x7c, 0xb1, 0x15, 0xa7, 0xbd, 0x58, 0x51, 0x3c, 0x8d, 0x8e, 0x85, 0x40, 0xda, 0x08, 0x57, 0xc9, + 0xc2, 0x9c, 0x7e, 0x7e, 0x63, 0xbd, 0x78, 0x46, 0xe0, 0x46, 0x9b, 0x2d, 0x6a, 0x70, 0xb4, 0x18, + 0xbe, 0x81, 0x46, 0x43, 0xd0, 0x75, 0xc7, 0xee, 0xb4, 0x5d, 0x25, 0x07, 0xac, 0x8a, 0x1b, 0xeb, + 0xc5, 0xfb, 0x05, 0x56, 0xcb, 0x80, 0x14, 0x57, 0xd2, 0x68, 0x41, 0xfc, 0xed, 0x19, 0x91, 0x1b, + 0x1f, 0x85, 0x79, 0x18, 0x85, 0xcf, 0xfa, 0xa3, 0x30, 0x55, 0x48, 0x97, 0xa3, 0x25, 0xf9, 0xa0, + 0x8c, 0x34, 0x23, 0x36, 0x28, 0x63, 0x35, 0x9e, 0x99, 0x40, 0xf7, 0x25, 0xf2, 0xda, 0x96, 0x56, + 0xff, 0x69, 0x4e, 0xe4, 0x52, 0xb5, 0x8d, 0xa0, 0x33, 0xe7, 0xc5, 0xce, 0xac, 0xda, 0x06, 0x98, + 0x4b, 0x99, 0x70, 0x11, 0x13, 0x1a, 0xdb, 0xb6, 0x8d, 0xa8, 0xd5, 0x14, 0x2f, 0x8b, 0x3f, 0x8a, + 0x4e, 0xc6, 0x80, 0x6c, 0xba, 0x66, 0xda, 0x7f, 0x61, 0x63, 0xbd, 0xa8, 0x26, 0x70, 0x8d, 0xce, + 0xde, 0x29, 0x5c, 0xb0, 0x8e, 0x4e, 0x09, 0x52, 0xb7, 0x2d, 0x4f, 0x37, 0x2d, 0x6e, 0xe5, 0xb1, + 0x51, 0xf2, 0x9e, 0x8d, 0xf5, 0xe2, 0x43, 0xa2, 0x0e, 0xfa, 0x34, 0xd1, 0xc6, 0xa7, 0xf1, 0xc1, + 0x06, 0x52, 0x12, 0x50, 0x95, 0x96, 0xbe, 0xec, 0x9b, 0xae, 0x17, 0x37, 0xd6, 0x8b, 0x0f, 0x27, + 0xd6, 0x61, 0x52, 0x2a, 0x71, 0xa9, 0x4c, 0xe3, 0x84, 0x35, 0x84, 0x43, 0xdc, 0x9c, 0x6d, 0x10, + 0xf8, 0x86, 0x5e, 0xe0, 0xaf, 0x6e, 0xac, 0x17, 0xcf, 0x0b, 0xfc, 0x2d, 0xdb, 0x20, 0xd1, 0xe6, + 0x27, 0x94, 0x56, 0x7f, 0x2d, 0x87, 0xce, 0xd7, 0x4a, 0xb3, 0x33, 0x15, 0xc3, 0xb7, 0x2d, 0xaa, + 0x8e, 0x7d, 0xd7, 0x34, 0x84, 0xd1, 0xbb, 0x88, 0x4e, 0x45, 0x50, 0x93, 0x60, 0xce, 0x04, 0x56, + 0x2d, 0x7c, 0x9b, 0x6f, 0xb7, 0xb4, 0x39, 0x4d, 0x9d, 0xd9, 0x3c, 0x75, 0xc9, 0xa4, 0x4f, 0x63, + 0x44, 0xfb, 0x28, 0x82, 0xaa, 0xad, 0xd8, 0x8e, 0xd7, 0xe8, 0x78, 0x5c, 0x09, 0xa0, 0x8f, 0x62, + 0x75, 0xb8, 0x9c, 0xa8, 0x4b, 0x15, 0x3e, 0x1f, 0xfc, 0xc9, 0x0c, 0x1a, 0x2d, 0x79, 0x9e, 0x63, + 0x2e, 0x76, 0x3c, 0x32, 0xab, 0xb7, 0xdb, 0xa6, 0xb5, 0x0c, 0x63, 0x7d, 0xf0, 0xea, 0x8b, 0xc1, + 0x1a, 0xd9, 0x55, 0x12, 0x97, 0xa3, 0xc5, 0x85, 0x21, 0xaa, 0xfb, 0xa8, 0x7a, 0x8b, 0xe1, 0xc4, + 0x21, 0x1a, 0x2d, 0x47, 0x87, 0x68, 0x22, 0xaf, 0x6d, 0x0d, 0xd1, 0xcf, 0xe5, 0xd0, 0xd9, 0xf9, + 0x3b, 0x9e, 0xae, 0x11, 0xd7, 0xee, 0x38, 0x0d, 0xe2, 0xde, 0x6c, 0x1b, 0xba, 0x47, 0xc2, 0x91, + 0x5a, 0x44, 0xbd, 0x25, 0xc3, 0x20, 0x06, 0xb0, 0xeb, 0x65, 0xfb, 0x2f, 0x9d, 0x02, 0x34, 0x06, + 0xc7, 0x8f, 0xa0, 0x3e, 0x5e, 0x06, 0xb8, 0xf7, 0x8e, 0x0f, 0x6e, 0xac, 0x17, 0xfb, 0x3a, 0x0c, + 0xa4, 0xf9, 0x38, 0x4a, 0x56, 0x26, 0x4d, 0x42, 0xc9, 0x72, 0x21, 0x99, 0xc1, 0x40, 0x9a, 0x8f, + 0xc3, 0xaf, 0xa1, 0x11, 0x60, 0x1b, 0xb4, 0x87, 0xcf, 0x7d, 0x27, 0x7c, 0xe9, 0x8a, 0x8d, 0x65, + 0x4b, 0x13, 0xb4, 0xa6, 0xee, 0xf8, 0x05, 0xb4, 0x08, 0x03, 0x7c, 0x1b, 0x8d, 0xf2, 0x46, 0x84, + 0x4c, 0x7b, 0xbb, 0x30, 0xbd, 0x6f, 0x63, 0xbd, 0x38, 0xc6, 0xdb, 0x2f, 0xb0, 0x8d, 0x31, 0xa1, + 0x8c, 0x79, 0xb3, 0x43, 0xc6, 0x85, 0xcd, 0x18, 0xf3, 0x2f, 0x16, 0x19, 0x47, 0x99, 0xa8, 0xaf, + 0xa3, 0x21, 0xb1, 0x20, 0x3e, 0x09, 0x7b, 0x5c, 0x36, 0x4e, 0x60, 0x77, 0x6c, 0x1a, 0xb0, 0xb1, + 0x7d, 0x12, 0x0d, 0x96, 0x89, 0xdb, 0x70, 0xcc, 0x36, 0xb5, 0x1a, 0xb8, 0x92, 0x1f, 0xdb, 0x58, + 0x2f, 0x0e, 0x1a, 0x21, 0x58, 0x13, 0x69, 0xd4, 0xff, 0x9e, 0x41, 0x27, 0x29, 0xef, 0x92, 0xeb, + 0x9a, 0xcb, 0x56, 0x4b, 0x5c, 0xb6, 0x1f, 0x43, 0x85, 0x1a, 0xd4, 0xc7, 0x6b, 0x3a, 0xb1, 0xb1, + 0x5e, 0x1c, 0x65, 0x2d, 0x10, 0xf4, 0x90, 0xd3, 0x04, 0x1b, 0xbc, 0xec, 0x26, 0x1b, 0x3c, 0x6a, + 0xd2, 0x7a, 0xba, 0xe3, 0x99, 0xd6, 0x72, 0xcd, 0xd3, 0xbd, 0x8e, 0x2b, 0x99, 0xb4, 0x1c, 0x53, + 0x77, 0x01, 0x25, 0x99, 0xb4, 0x52, 0x21, 0xfc, 0x32, 0x1a, 0x9a, 0xb4, 0x8c, 0x90, 0x09, 0x9b, + 0x10, 0xef, 0xa7, 0x96, 0x26, 0x01, 0x78, 0x9c, 0x85, 0x54, 0x40, 0xfd, 0xf9, 0x0c, 0x52, 0xd8, + 0x6e, 0x6c, 0xc6, 0x74, 0xbd, 0x59, 0xd2, 0x5a, 0x14, 0x66, 0xa7, 0x29, 0x7f, 0x7b, 0x47, 0x71, + 0xc2, 0x5a, 0x04, 0xa6, 0x00, 0xdf, 0xde, 0x35, 0x4d, 0xd7, 0x8b, 0x4e, 0x86, 0x91, 0x52, 0xb8, + 0x82, 0xfa, 0x18, 0x67, 0x66, 0x4b, 0x0c, 0x5e, 0x55, 0x7c, 0x45, 0x88, 0x56, 0xcd, 0x94, 0xa1, + 0xc5, 0x88, 0xc5, 0xfd, 0x39, 0x2f, 0xaf, 0xfe, 0x62, 0x16, 0x8d, 0x46, 0x0b, 0xe1, 0xdb, 0xa8, + 0xff, 0x55, 0xdb, 0xb4, 0x88, 0x31, 0x6f, 0x41, 0x0b, 0xbb, 0x9f, 0x52, 0xf8, 0xb6, 0xf8, 0xf1, + 0x37, 0xa0, 0x4c, 0x5d, 0xb4, 0x60, 0xe1, 0xd0, 0x22, 0x60, 0x86, 0x3f, 0x88, 0x06, 0xa8, 0x0d, + 0x78, 0x17, 0x38, 0x67, 0x37, 0xe5, 0xfc, 0x00, 0xe7, 0x7c, 0xc2, 0x61, 0x85, 0xe2, 0xac, 0x43, + 0x76, 0x54, 0xaf, 0x34, 0xa2, 0xbb, 0xb6, 0xc5, 0x7b, 0x1e, 0xf4, 0xca, 0x01, 0x88, 0xa8, 0x57, + 0x8c, 0x86, 0x9a, 0xae, 0xec, 0x63, 0xa1, 0x1b, 0x84, 0xbd, 0x0b, 0x93, 0x55, 0xb4, 0x07, 0x04, + 0x62, 0xf5, 0x3b, 0xb3, 0xe8, 0xf1, 0x50, 0x64, 0x1a, 0xb9, 0x6b, 0x92, 0x55, 0x2e, 0xce, 0x15, + 0xb3, 0xcd, 0x37, 0x8f, 0x54, 0xe5, 0xdd, 0x89, 0x15, 0xdd, 0x5a, 0x26, 0x06, 0xbe, 0x84, 0x7a, + 0xe9, 0x0e, 0xdf, 0x55, 0x32, 0x60, 0xae, 0xc1, 0x74, 0xe2, 0x50, 0x80, 0x78, 0xfa, 0x00, 0x14, + 0xd8, 0x46, 0x85, 0x05, 0x47, 0x37, 0x3d, 0xbf, 0x67, 0x4b, 0xf1, 0x9e, 0xdd, 0x42, 0x8d, 0x97, + 0x19, 0x0f, 0x36, 0xe7, 0x83, 0x20, 0x3c, 0x00, 0x88, 0x82, 0x60, 0x24, 0x67, 0x9e, 0x43, 0x83, + 0x02, 0xf1, 0xb6, 0x26, 0xf5, 0x2f, 0xe5, 0x45, 0x5d, 0xf7, 0x9b, 0xc5, 0x75, 0xfd, 0x0a, 0xd5, + 0x51, 0xd7, 0xa5, 0x56, 0x05, 0x53, 0x72, 0xae, 0x89, 0x00, 0x92, 0x35, 0x11, 0x40, 0xf8, 0x29, + 0xd4, 0xcf, 0x58, 0x04, 0xfb, 0x57, 0xd8, 0xfb, 0x3a, 0x00, 0x93, 0x97, 0xe6, 0x80, 0x10, 0xff, + 0x6c, 0x06, 0x9d, 0xeb, 0x2a, 0x09, 0x50, 0x86, 0xc1, 0xab, 0x4f, 0xef, 0x48, 0x8c, 0xe3, 0x8f, + 0x6f, 0xac, 0x17, 0x2f, 0xb5, 0x02, 0x92, 0xba, 0x23, 0xd0, 0xd4, 0x1b, 0x8c, 0x48, 0x68, 0x57, + 0xf7, 0xa6, 0x50, 0xe3, 0x91, 0x55, 0x3a, 0x05, 0x67, 0x38, 0x56, 0x63, 0xcd, 0x6f, 0x64, 0x3e, + 0x34, 0x1e, 0xf9, 0xf7, 0x2e, 0xf9, 0x24, 0x09, 0xd5, 0xa4, 0x70, 0xc1, 0x0d, 0x74, 0x8a, 0x61, + 0xca, 0xfa, 0xda, 0xfc, 0xd2, 0xac, 0x6d, 0x79, 0x2b, 0x7e, 0x05, 0xbd, 0xe2, 0x21, 0x08, 0x54, + 0x60, 0xe8, 0x6b, 0x75, 0x7b, 0xa9, 0xde, 0xa2, 0x54, 0x09, 0x75, 0xa4, 0x71, 0xa2, 0x13, 0x2d, + 0x1f, 0x73, 0xfe, 0x14, 0x54, 0x08, 0x8f, 0xa8, 0xfc, 0x71, 0x1a, 0x9f, 0x70, 0x22, 0x85, 0xd4, + 0x0a, 0x1a, 0x9a, 0xb1, 0x1b, 0x77, 0x02, 0x75, 0x79, 0x0e, 0x15, 0x16, 0x74, 0x67, 0x99, 0x78, + 0x20, 0x8b, 0xc1, 0xab, 0x63, 0x97, 0xd9, 0xb1, 0x2f, 0x25, 0x62, 0x88, 0xf1, 0x11, 0x3e, 0x1b, + 0x14, 0x3c, 0xf8, 0xad, 0xf1, 0x02, 0xea, 0xd7, 0x7a, 0xd1, 0x10, 0x3f, 0xa2, 0x84, 0xd9, 0x1c, + 0x3f, 0x1f, 0x1e, 0xfa, 0xf2, 0xe9, 0x2b, 0x38, 0xa6, 0x09, 0x8e, 0x97, 0x86, 0x28, 0xb3, 0xdf, + 0x5b, 0x2f, 0x66, 0x36, 0xd6, 0x8b, 0x3d, 0x5a, 0xbf, 0xb0, 0xa9, 0x0c, 0xd7, 0x1b, 0x61, 0x81, + 0x15, 0x0f, 0x1d, 0x23, 0x65, 0xd9, 0xfa, 0xf3, 0x32, 0xea, 0xe3, 0x6d, 0xe0, 0x1a, 0x77, 0x2a, + 0x3c, 0xcb, 0x90, 0x8e, 0x5a, 0x23, 0xa5, 0xfd, 0x52, 0xf8, 0x45, 0x54, 0x60, 0x7b, 0x7b, 0x2e, + 0x80, 0x93, 0xc9, 0x67, 0x21, 0x91, 0xe2, 0xbc, 0x0c, 0x9e, 0x46, 0x28, 0xdc, 0xd7, 0x07, 0x27, + 0xcb, 0x9c, 0x43, 0x7c, 0xc7, 0x1f, 0xe1, 0x22, 0x94, 0xc5, 0xcf, 0xa0, 0xa1, 0x05, 0xe2, 0xb4, + 0x4c, 0x4b, 0x6f, 0xd6, 0xcc, 0x37, 0xfd, 0xc3, 0x65, 0x58, 0x78, 0x5d, 0xf3, 0x4d, 0x71, 0xe4, + 0x4a, 0x74, 0xf8, 0x23, 0x49, 0xfb, 0xe6, 0x3e, 0x68, 0xc8, 0x83, 0x9b, 0x6e, 0x28, 0x23, 0xed, + 0x49, 0xd8, 0x46, 0xbf, 0x86, 0x86, 0xa5, 0x2d, 0x13, 0x3f, 0x3d, 0x3c, 0x17, 0x67, 0x2d, 0xec, + 0xff, 0x22, 0x6c, 0x65, 0x0e, 0x54, 0x93, 0x2b, 0x96, 0xe9, 0x99, 0x7a, 0x73, 0xc2, 0x6e, 0xb5, + 0x74, 0xcb, 0x50, 0x06, 0x42, 0x4d, 0x36, 0x19, 0xa6, 0xde, 0x60, 0x28, 0x51, 0x93, 0xe5, 0x42, + 0x74, 0x5b, 0xce, 0xfb, 0x50, 0x23, 0x0d, 0xdb, 0xa1, 0xb6, 0x00, 0x1c, 0x0e, 0xf2, 0x6d, 0xb9, + 0xcb, 0x70, 0x75, 0xc7, 0x47, 0x8a, 0xc6, 0x76, 0xb4, 0xe0, 0xab, 0xf9, 0xfe, 0xc1, 0xd1, 0xa1, + 0xe8, 0x79, 0xae, 0xfa, 0x33, 0x39, 0x34, 0xc8, 0x49, 0xe9, 0x52, 0x7a, 0xa4, 0xe0, 0xbb, 0x51, + 0xf0, 0x44, 0x45, 0x2d, 0xec, 0x95, 0xa2, 0xaa, 0x9f, 0xca, 0x06, 0xb3, 0x51, 0xd5, 0x31, 0xad, + 0xdd, 0xcd, 0x46, 0x17, 0x10, 0x9a, 0x58, 0xe9, 0x58, 0x77, 0xd8, 0xbd, 0x55, 0x36, 0xbc, 0xb7, + 0x6a, 0x98, 0x9a, 0x80, 0xc1, 0xe7, 0x50, 0xbe, 0x4c, 0xf9, 0xd3, 0x9e, 0x19, 0x1a, 0x1f, 0x78, + 0x8b, 0x71, 0xca, 0x3c, 0xae, 0x01, 0x98, 0x6e, 0xae, 0xc6, 0xd7, 0x3c, 0xc2, 0xcc, 0xd9, 0x1c, + 0xdb, 0x5c, 0x2d, 0x52, 0x80, 0xc6, 0xe0, 0xf8, 0x1a, 0x1a, 0x2b, 0x93, 0xa6, 0xbe, 0x36, 0x6b, + 0x36, 0x9b, 0xa6, 0x4b, 0x1a, 0xb6, 0x65, 0xb8, 0x20, 0x64, 0x5e, 0x5d, 0xcb, 0xd5, 0xe2, 0x04, + 0x58, 0x45, 0x85, 0xf9, 0xa5, 0x25, 0x97, 0x78, 0x20, 0xbe, 0xdc, 0x38, 0xa2, 0x93, 0xb3, 0x0d, + 0x10, 0x8d, 0x63, 0xd4, 0x2f, 0x64, 0xe8, 0xee, 0xc5, 0xbd, 0xe3, 0xd9, 0xed, 0x40, 0xcb, 0x77, + 0x25, 0x92, 0x4b, 0xa1, 0x5d, 0x91, 0x85, 0xaf, 0x3d, 0xc6, 0xbf, 0xb6, 0x8f, 0xdb, 0x16, 0xa1, + 0x45, 0x91, 0xf8, 0x55, 0xb9, 0x4d, 0xbe, 0x4a, 0xfd, 0xf3, 0x2c, 0x3a, 0xc5, 0x5b, 0x3c, 0xd1, + 0x34, 0xdb, 0x8b, 0xb6, 0xee, 0x18, 0x1a, 0x69, 0x10, 0xf3, 0x2e, 0x39, 0x98, 0x03, 0x4f, 0x1e, + 0x3a, 0xf9, 0x5d, 0x0c, 0x9d, 0xab, 0xb0, 0x11, 0xa4, 0x92, 0x81, 0x03, 0x5f, 0x66, 0x54, 0x8c, + 0x6e, 0xac, 0x17, 0x87, 0x0c, 0x06, 0x86, 0x23, 0x7f, 0x4d, 0x24, 0xa2, 0x4a, 0x32, 0x43, 0xac, + 0x65, 0x6f, 0x05, 0x94, 0xa4, 0x97, 0x29, 0x49, 0x13, 0x20, 0x1a, 0xc7, 0xa8, 0x7f, 0x96, 0x45, + 0x27, 0xa2, 0x22, 0xaf, 0x11, 0xcb, 0x38, 0x92, 0xf7, 0xdb, 0x23, 0xef, 0x6f, 0xe4, 0xd0, 0xfd, + 0xbc, 0x4c, 0x6d, 0x45, 0x77, 0x88, 0x51, 0x36, 0x1d, 0xd2, 0xf0, 0x6c, 0x67, 0xed, 0x00, 0x1b, + 0x50, 0x7b, 0x27, 0xf6, 0x6b, 0xa8, 0xc0, 0xb7, 0xff, 0x6c, 0x9d, 0x19, 0x09, 0x5a, 0x02, 0xd0, + 0xd8, 0x0a, 0xc5, 0x8e, 0x0e, 0x22, 0x9d, 0x55, 0xd8, 0x4a, 0x67, 0xbd, 0x0f, 0x0d, 0x07, 0xa2, + 0x87, 0x8d, 0x68, 0x5f, 0x68, 0x6d, 0x19, 0x3e, 0x02, 0xf6, 0xa2, 0x9a, 0x4c, 0x08, 0xb5, 0xf9, + 0x80, 0x4a, 0x19, 0xac, 0xa1, 0x61, 0x5e, 0x5b, 0x50, 0xce, 0x34, 0x34, 0x91, 0x48, 0x5d, 0xcf, + 0xa3, 0x33, 0xc9, 0xdd, 0xae, 0x11, 0xdd, 0x38, 0xea, 0xf5, 0x77, 0x65, 0xaf, 0xe3, 0x07, 0x51, + 0xbe, 0xaa, 0x7b, 0x2b, 0xfc, 0x1e, 0x1c, 0xee, 0x84, 0x97, 0xcc, 0x26, 0xa9, 0xb7, 0x75, 0x6f, + 0x45, 0x03, 0x94, 0x30, 0x67, 0x20, 0xe0, 0x98, 0x30, 0x67, 0x08, 0x8b, 0xfd, 0xe0, 0x03, 0x99, + 0x8b, 0xf9, 0xc4, 0xc5, 0xfe, 0x6b, 0xf9, 0xb4, 0x79, 0xe5, 0xb6, 0x63, 0x7a, 0xe4, 0x48, 0xc3, + 0x8e, 0x34, 0x6c, 0x97, 0x1a, 0xf6, 0x07, 0x59, 0x34, 0x1c, 0x6c, 0x9a, 0xde, 0x20, 0x8d, 0xfd, + 0x59, 0xab, 0xc2, 0xad, 0x4c, 0x6e, 0xd7, 0x5b, 0x99, 0xdd, 0x28, 0x94, 0x1a, 0x1c, 0x79, 0x32, + 0xd3, 0x00, 0x24, 0xc6, 0x8e, 0x3c, 0x83, 0x83, 0xce, 0x07, 0x51, 0xdf, 0xac, 0x7e, 0xcf, 0x6c, + 0x75, 0x5a, 0xdc, 0x4a, 0x07, 0xbf, 0xae, 0x96, 0x7e, 0x4f, 0xf3, 0xe1, 0xea, 0xbf, 0xca, 0xa0, + 0x11, 0x2e, 0x54, 0xce, 0x7c, 0x57, 0x52, 0x0d, 0xa5, 0x93, 0xdd, 0xb5, 0x74, 0x72, 0x3b, 0x97, + 0x8e, 0xfa, 0x63, 0x39, 0xa4, 0x4c, 0x99, 0x4d, 0xb2, 0xe0, 0xe8, 0x96, 0xbb, 0x44, 0x1c, 0xbe, + 0x9d, 0x9e, 0xa4, 0xac, 0x76, 0xf5, 0x81, 0xc2, 0x94, 0x92, 0xdd, 0xd1, 0x94, 0xf2, 0x5e, 0x34, + 0xc0, 0x1b, 0x13, 0xf8, 0x14, 0xc2, 0xa8, 0x71, 0x7c, 0xa0, 0x16, 0xe2, 0x29, 0x71, 0xa9, 0xdd, + 0x76, 0xec, 0xbb, 0xc4, 0x61, 0xb7, 0x54, 0x9c, 0x58, 0xf7, 0x81, 0x5a, 0x88, 0x17, 0x38, 0x13, + 0xdf, 0x5e, 0x14, 0x39, 0x13, 0x47, 0x0b, 0xf1, 0xf8, 0x22, 0xea, 0x9f, 0xb1, 0x1b, 0x3a, 0x08, + 0x9a, 0x4d, 0x2b, 0x43, 0x1b, 0xeb, 0xc5, 0xfe, 0x26, 0x87, 0x69, 0x01, 0x96, 0x52, 0x96, 0xed, + 0x55, 0xab, 0x69, 0xeb, 0xcc, 0xf9, 0xa5, 0x9f, 0x51, 0x1a, 0x1c, 0xa6, 0x05, 0x58, 0x4a, 0x49, + 0x65, 0x0e, 0x4e, 0x45, 0xfd, 0x21, 0xcf, 0x25, 0x0e, 0xd3, 0x02, 0xac, 0xfa, 0x85, 0x3c, 0xd5, + 0x5e, 0xd7, 0x7c, 0xf3, 0xd0, 0xaf, 0x0b, 0xe1, 0x80, 0xe9, 0xdd, 0xc1, 0x80, 0x39, 0x34, 0x07, + 0x76, 0xea, 0x5f, 0xf4, 0x21, 0xc4, 0xa5, 0x3f, 0x79, 0xb4, 0x39, 0xdc, 0x9d, 0xd6, 0x94, 0xd1, + 0xd8, 0xa4, 0xb5, 0xa2, 0x5b, 0x0d, 0x62, 0x84, 0xc7, 0x96, 0x05, 0x18, 0xda, 0xe0, 0xd3, 0x4b, + 0x38, 0x32, 0x3c, 0xb7, 0xd4, 0xe2, 0x05, 0xf0, 0x93, 0x68, 0xb0, 0x62, 0x79, 0xc4, 0xd1, 0x1b, + 0x9e, 0x79, 0x97, 0xf0, 0xa9, 0x01, 0x6e, 0x86, 0xcd, 0x10, 0xac, 0x89, 0x34, 0xf8, 0x1a, 0x1a, + 0xaa, 0xea, 0x8e, 0x67, 0x36, 0xcc, 0xb6, 0x6e, 0x79, 0xae, 0xd2, 0x0f, 0x33, 0x1a, 0x58, 0x18, + 0x6d, 0x01, 0xae, 0x49, 0x54, 0xf8, 0x23, 0x68, 0x00, 0xb6, 0xa6, 0xe0, 0x38, 0x3d, 0xb0, 0xe9, + 0xc5, 0xe1, 0x43, 0xa1, 0x7b, 0x20, 0x3b, 0x7d, 0x85, 0x1b, 0xe0, 0xe8, 0xdd, 0x61, 0xc0, 0x11, + 0x7f, 0x00, 0xf5, 0x4d, 0x5a, 0x06, 0x30, 0x47, 0x9b, 0x32, 0x57, 0x39, 0xf3, 0x93, 0x21, 0x73, + 0xbb, 0x1d, 0xe1, 0xed, 0xb3, 0x4b, 0x1e, 0x65, 0x83, 0x6f, 0xdf, 0x28, 0x1b, 0x7a, 0x1b, 0x8e, + 0xc5, 0x87, 0xf7, 0xea, 0x58, 0x7c, 0x64, 0x87, 0xc7, 0xe2, 0xea, 0x9b, 0x68, 0x70, 0xbc, 0x3a, + 0x15, 0x8c, 0xde, 0xd3, 0x28, 0x57, 0xe5, 0x9e, 0x0a, 0x79, 0x66, 0xcf, 0xb4, 0x4d, 0x43, 0xa3, + 0x30, 0x7c, 0x09, 0xf5, 0x4f, 0x80, 0xfb, 0x1b, 0xbf, 0x45, 0xcc, 0xb3, 0xf5, 0xaf, 0x01, 0x30, + 0xf0, 0x82, 0xf5, 0xd1, 0xf8, 0x11, 0xd4, 0x57, 0x75, 0xec, 0x65, 0x47, 0x6f, 0xf1, 0x35, 0x18, + 0x5c, 0x45, 0xda, 0x0c, 0xa4, 0xf9, 0x38, 0xf5, 0xfb, 0x32, 0xbe, 0xd9, 0x4e, 0x4b, 0xd4, 0x3a, + 0x70, 0x34, 0x0f, 0x75, 0xf7, 0xb3, 0x12, 0x2e, 0x03, 0x69, 0x3e, 0x0e, 0x5f, 0x42, 0xbd, 0x93, + 0x8e, 0x63, 0x3b, 0xa2, 0xb3, 0x39, 0xa1, 0x00, 0xf1, 0xba, 0x17, 0x28, 0xf0, 0xb3, 0x68, 0x90, + 0xcd, 0x39, 0xec, 0x44, 0x33, 0xd7, 0xed, 0xa6, 0x54, 0xa4, 0x54, 0xbf, 0x92, 0x13, 0x6c, 0x36, + 0x26, 0xf1, 0x43, 0x78, 0x2b, 0xf0, 0x14, 0xca, 0x8d, 0x57, 0xa7, 0xf8, 0x04, 0x78, 0xdc, 0x2f, + 0x2a, 0xa8, 0x4a, 0xa4, 0x1c, 0xa5, 0xc6, 0x67, 0x51, 0xbe, 0x4a, 0xd5, 0xa7, 0x00, 0xea, 0xd1, + 0xbf, 0xb1, 0x5e, 0xcc, 0xb7, 0xa9, 0xfe, 0x00, 0x14, 0xb0, 0x74, 0x33, 0xc3, 0x76, 0x4c, 0x0c, + 0x1b, 0xee, 0x63, 0xce, 0xa2, 0x7c, 0xc9, 0x59, 0xbe, 0xcb, 0x67, 0x2d, 0xc0, 0xea, 0xce, 0xf2, + 0x5d, 0x0d, 0xa0, 0xf8, 0x0a, 0x42, 0x1a, 0xf1, 0x3a, 0x8e, 0x05, 0xef, 0x40, 0x06, 0xe0, 0xfc, + 0x0d, 0x66, 0x43, 0x07, 0xa0, 0xf5, 0x86, 0x6d, 0x10, 0x4d, 0x20, 0x51, 0x7f, 0x2a, 0xbc, 0xd8, + 0x29, 0x9b, 0xee, 0x9d, 0xa3, 0x2e, 0xdc, 0x46, 0x17, 0xea, 0xfc, 0x88, 0x33, 0xde, 0x49, 0x45, + 0xd4, 0x3b, 0xd5, 0xd4, 0x97, 0x5d, 0xe8, 0x43, 0xee, 0x4b, 0xb6, 0x44, 0x01, 0x1a, 0x83, 0x47, + 0xfa, 0xa9, 0x7f, 0xf3, 0x7e, 0xfa, 0xc1, 0xde, 0x60, 0xb4, 0xcd, 0x11, 0x6f, 0xd5, 0x76, 0x8e, + 0xba, 0x6a, 0xab, 0x5d, 0x75, 0x01, 0xf5, 0xd5, 0x9c, 0x86, 0x70, 0x74, 0x01, 0xfb, 0x01, 0xd7, + 0x69, 0xb0, 0x63, 0x0b, 0x1f, 0x49, 0xe9, 0xca, 0xae, 0x07, 0x74, 0x7d, 0x21, 0x9d, 0xe1, 0x7a, + 0x9c, 0x8e, 0x23, 0x39, 0x5d, 0xd5, 0x76, 0x3c, 0xde, 0x71, 0x01, 0x5d, 0xdb, 0x76, 0x3c, 0xcd, + 0x47, 0xe2, 0xf7, 0x22, 0xb4, 0x30, 0x51, 0xf5, 0x9d, 0xed, 0x07, 0x42, 0x5f, 0x40, 0xee, 0x65, + 0xaf, 0x09, 0x68, 0xbc, 0x80, 0x06, 0xe6, 0xdb, 0xc4, 0x61, 0x5b, 0x21, 0xf6, 0xb2, 0xe3, 0x3d, + 0x11, 0xd1, 0xf2, 0x7e, 0xbf, 0xcc, 0xff, 0x0f, 0xc8, 0xd9, 0xfa, 0x62, 0xfb, 0x3f, 0xb5, 0x90, + 0x11, 0x7e, 0x16, 0x15, 0x4a, 0xcc, 0xce, 0x1b, 0x04, 0x96, 0x81, 0xc8, 0x60, 0x0b, 0xca, 0x50, + 0x6c, 0xcf, 0xae, 0xc3, 0xdf, 0x1a, 0x27, 0x57, 0x2f, 0xa1, 0xd1, 0x68, 0x35, 0x78, 0x10, 0xf5, + 0x4d, 0xcc, 0xcf, 0xcd, 0x4d, 0x4e, 0x2c, 0x8c, 0xf6, 0xe0, 0x7e, 0x94, 0xaf, 0x4d, 0xce, 0x95, + 0x47, 0x33, 0xea, 0xcf, 0x09, 0x33, 0x08, 0x55, 0xad, 0xa3, 0xab, 0xe1, 0x5d, 0xdd, 0xb7, 0x8c, + 0xc2, 0x7d, 0x28, 0x9c, 0x18, 0xb4, 0x4c, 0xcf, 0x23, 0x06, 0x5f, 0x25, 0xe0, 0xbe, 0xd0, 0xbb, + 0xa7, 0xc5, 0xf0, 0xf8, 0x31, 0x34, 0x0c, 0x30, 0x7e, 0x45, 0xc8, 0xf6, 0xc7, 0xbc, 0x80, 0x73, + 0x4f, 0x93, 0x91, 0xea, 0x57, 0xc3, 0xdb, 0xe1, 0x19, 0xa2, 0x1f, 0xd4, 0x1b, 0xc5, 0x77, 0x48, + 0x7f, 0xa9, 0x7f, 0x95, 0x67, 0x4f, 0x40, 0xd8, 0xc3, 0xbd, 0xfd, 0x10, 0x65, 0x78, 0xa4, 0x9b, + 0xdb, 0xc6, 0x91, 0xee, 0x63, 0xa8, 0x30, 0x4b, 0xbc, 0x15, 0xdb, 0x77, 0xfc, 0x02, 0x0f, 0xbd, + 0x16, 0x40, 0x44, 0x0f, 0x3d, 0x46, 0x83, 0xef, 0x20, 0xec, 0xbf, 0xca, 0x0b, 0x1c, 0xb1, 0xfd, + 0x23, 0xe4, 0x53, 0xb1, 0x7d, 0x4a, 0x0d, 0x9e, 0xe4, 0x82, 0x8f, 0xfd, 0x89, 0xc0, 0xd1, 0x5b, + 0xf0, 0xc4, 0xfa, 0xcb, 0xf5, 0x62, 0x81, 0xd1, 0x68, 0x09, 0x6c, 0xf1, 0x6b, 0x68, 0x60, 0x76, + 0xaa, 0xc4, 0x5f, 0xe8, 0x31, 0xaf, 0x88, 0xd3, 0x81, 0x14, 0x7d, 0x44, 0x20, 0x12, 0x78, 0x6f, + 0xd3, 0x5a, 0xd2, 0xe3, 0x0f, 0xf4, 0x42, 0x2e, 0x54, 0x5b, 0xd8, 0xcb, 0x1d, 0x7e, 0xba, 0x10, + 0x68, 0x8b, 0xfc, 0x9e, 0x27, 0x2a, 0x2b, 0x86, 0x8d, 0x68, 0x4b, 0xff, 0x2e, 0x46, 0xf7, 0x3c, + 0x1a, 0x2b, 0xb5, 0xdb, 0x4d, 0x93, 0x18, 0xa0, 0x2f, 0x5a, 0xa7, 0x49, 0x5c, 0xee, 0xf2, 0x03, + 0x8f, 0x41, 0x74, 0x86, 0xac, 0xc3, 0xbb, 0xd0, 0xba, 0xd3, 0x91, 0xfd, 0x33, 0xe3, 0x65, 0xd5, + 0x1f, 0xc8, 0xa2, 0x93, 0x13, 0x0e, 0xd1, 0x3d, 0x32, 0x3b, 0x55, 0x2a, 0x75, 0xc0, 0x47, 0xae, + 0xd9, 0x24, 0xd6, 0xf2, 0xfe, 0x0c, 0xeb, 0x17, 0xd0, 0x48, 0xd0, 0x80, 0x5a, 0xc3, 0x6e, 0x13, + 0xf1, 0x61, 0x55, 0xc3, 0xc7, 0xd4, 0x5d, 0x8a, 0xd2, 0x22, 0xa4, 0xf8, 0x06, 0x3a, 0x1e, 0x40, + 0x4a, 0xcd, 0xa6, 0xbd, 0xaa, 0x91, 0x8e, 0xcb, 0x1c, 0x63, 0xfb, 0x99, 0x63, 0x6c, 0xc8, 0x41, + 0xa7, 0xf8, 0xba, 0x43, 0x09, 0xb4, 0xa4, 0x52, 0xea, 0xe7, 0x73, 0xe8, 0xd4, 0x2d, 0xbd, 0x69, + 0x1a, 0xa1, 0x68, 0x34, 0xe2, 0xb6, 0x6d, 0xcb, 0x25, 0x07, 0x68, 0x94, 0x4a, 0x43, 0x21, 0xbf, + 0x27, 0x43, 0x21, 0xde, 0x45, 0xbd, 0xbb, 0xee, 0xa2, 0xc2, 0x8e, 0xba, 0xe8, 0x3f, 0x67, 0xd0, + 0xa8, 0xef, 0xf8, 0x2f, 0xbe, 0xa6, 0x16, 0xbc, 0xd2, 0xe1, 0x08, 0x31, 0xe2, 0x07, 0x0d, 0x78, + 0x5c, 0x43, 0x7d, 0x93, 0xf7, 0xda, 0xa6, 0x43, 0xdc, 0x2d, 0x38, 0x71, 0x9f, 0xe3, 0xc7, 0x25, + 0x63, 0x84, 0x15, 0x89, 0x9d, 0x94, 0x30, 0x30, 0x3c, 0xe7, 0x63, 0x4f, 0x1f, 0xc6, 0xfd, 0x27, + 0xe2, 0xec, 0x39, 0x1f, 0x7f, 0x22, 0x21, 0xbd, 0xcf, 0x0c, 0x49, 0xf1, 0x43, 0x28, 0xb7, 0xb0, + 0x30, 0xc3, 0x67, 0x52, 0x78, 0x9a, 0xef, 0x79, 0xe2, 0x7b, 0x45, 0x8a, 0x55, 0xff, 0x38, 0x8b, + 0x10, 0x55, 0x05, 0x36, 0x5c, 0xf7, 0x45, 0x09, 0xc7, 0x51, 0xbf, 0x2f, 0x70, 0xae, 0x86, 0x81, + 0xd7, 0x7e, 0xb4, 0x23, 0xa2, 0x75, 0x07, 0x2f, 0x34, 0x8a, 0xbe, 0x23, 0x39, 0xbb, 0x07, 0x80, + 0x9d, 0x0d, 0x38, 0x92, 0xfb, 0xee, 0xe3, 0xef, 0x45, 0x03, 0x7c, 0xc6, 0xb3, 0xa5, 0xf3, 0xff, + 0x86, 0x0f, 0xd4, 0x42, 0x7c, 0x64, 0x6a, 0x2d, 0xec, 0x62, 0x21, 0xf6, 0xc5, 0xcb, 0x7a, 0xe5, + 0x48, 0xbc, 0x7b, 0x2c, 0xde, 0xcf, 0x70, 0xf1, 0xb2, 0x17, 0x3c, 0x07, 0x56, 0xbc, 0x7b, 0x76, + 0xf6, 0xad, 0xfe, 0x41, 0x06, 0x61, 0xda, 0xac, 0xaa, 0xee, 0xba, 0xab, 0xb6, 0x63, 0x30, 0xe7, + 0xf4, 0x7d, 0x11, 0xcc, 0xde, 0xdd, 0x57, 0x7e, 0xa5, 0x1f, 0x1d, 0x97, 0x1c, 0x7f, 0x0f, 0xf8, + 0x64, 0x75, 0x49, 0x1e, 0x4d, 0xdd, 0x5e, 0xbd, 0x3c, 0x2c, 0x5e, 0x88, 0xf6, 0x4a, 0x0f, 0xd0, + 0x84, 0x9b, 0xd0, 0xc7, 0xd1, 0x10, 0xff, 0x41, 0x57, 0x68, 0xff, 0xa6, 0x0b, 0x46, 0xa9, 0x4b, + 0x01, 0x9a, 0x84, 0xc6, 0x4f, 0xa3, 0x01, 0x3a, 0x60, 0x96, 0x21, 0x8a, 0x47, 0x5f, 0xf8, 0xa2, + 0xc4, 0xf0, 0x81, 0xe2, 0x7a, 0x12, 0x50, 0x0a, 0xef, 0x88, 0xfa, 0xb7, 0xf0, 0x8e, 0xe8, 0xa3, + 0x68, 0xb0, 0x64, 0x59, 0xb6, 0x07, 0x9b, 0x74, 0x97, 0x5f, 0x4d, 0xa4, 0x5a, 0xe5, 0x0f, 0xc1, + 0xe3, 0xf8, 0x90, 0x3e, 0xd1, 0x2c, 0x17, 0x19, 0xe2, 0xab, 0xfe, 0xab, 0x18, 0xe2, 0x70, 0xaf, + 0x72, 0xb8, 0x9e, 0x71, 0x38, 0x2c, 0xfe, 0x28, 0x06, 0x3a, 0x6f, 0xb8, 0xea, 0xd8, 0x6d, 0xdb, + 0x25, 0x06, 0x13, 0xd4, 0x60, 0x18, 0x6a, 0xa0, 0xcd, 0x11, 0xf0, 0x8e, 0x4d, 0x8a, 0xa8, 0x21, + 0x15, 0xc1, 0x4b, 0xe8, 0x84, 0x7f, 0x51, 0x1c, 0xbc, 0x18, 0xac, 0x94, 0x5d, 0x65, 0x08, 0x5e, + 0x25, 0xe1, 0xa8, 0x32, 0x54, 0xca, 0xe3, 0xe7, 0xfd, 0x6b, 0x11, 0xff, 0xc9, 0x61, 0xdd, 0x34, + 0xc4, 0xae, 0x4e, 0xe4, 0x87, 0xbf, 0x05, 0x0d, 0xce, 0xea, 0xf7, 0xca, 0x1d, 0x7e, 0xf6, 0x32, + 0xbc, 0xf5, 0xdb, 0x97, 0x96, 0x7e, 0xaf, 0x6e, 0xf0, 0x72, 0x11, 0x9b, 0x42, 0x64, 0x89, 0xeb, + 0xe8, 0x64, 0xd5, 0xb1, 0x5b, 0xb6, 0x47, 0x8c, 0xc8, 0xe3, 0xbb, 0x63, 0xe1, 0x6b, 0xdd, 0x36, + 0xa7, 0xa8, 0x77, 0x79, 0x85, 0x97, 0xc2, 0x06, 0xb7, 0xd0, 0xb1, 0x92, 0xeb, 0x76, 0x5a, 0x24, + 0xbc, 0xa1, 0x1a, 0xdd, 0xf4, 0x33, 0xde, 0xc3, 0xbd, 0x96, 0xef, 0xd7, 0xa1, 0x28, 0xbb, 0xa0, + 0xaa, 0x7b, 0xa6, 0x58, 0x23, 0x7c, 0x4b, 0x94, 0xf7, 0xab, 0xf9, 0xfe, 0x91, 0xd1, 0x63, 0xda, + 0xa9, 0x78, 0x63, 0x16, 0x4c, 0xaf, 0x49, 0xd4, 0x2f, 0x67, 0x10, 0x0a, 0x05, 0x8c, 0x1f, 0x97, + 0x43, 0x05, 0x65, 0xc2, 0x8b, 0x0e, 0x1e, 0xbd, 0x40, 0x8a, 0x0d, 0x84, 0xcf, 0xa2, 0x3c, 0x44, + 0xb8, 0xc8, 0x86, 0x07, 0xab, 0x77, 0x4c, 0xcb, 0xd0, 0x00, 0x4a, 0xb1, 0xc2, 0x53, 0x74, 0xc0, + 0xc2, 0xa5, 0x3e, 0xb3, 0x0a, 0xcb, 0xe8, 0x58, 0xad, 0xb3, 0xe8, 0xd7, 0x2d, 0xbc, 0xab, 0x83, + 0x40, 0x1b, 0x6e, 0x67, 0x31, 0x78, 0x8c, 0x2a, 0x85, 0x31, 0x91, 0x8b, 0xa8, 0x5f, 0xc8, 0x44, + 0x66, 0xc1, 0x7d, 0x5c, 0xf4, 0x1e, 0x8e, 0xfb, 0x69, 0xc4, 0xa7, 0x25, 0xf5, 0xf7, 0x73, 0x68, + 0xb0, 0x6a, 0x3b, 0x1e, 0x0f, 0x19, 0x72, 0xb0, 0x57, 0x21, 0x61, 0xaf, 0x94, 0xdf, 0xc6, 0x5e, + 0xe9, 0x2c, 0xca, 0x0b, 0x2e, 0xca, 0xec, 0x5e, 0xc4, 0x30, 0x1c, 0x0d, 0xa0, 0x6f, 0xf3, 0x93, + 0x8b, 0xf8, 0x25, 0x68, 0xdf, 0xae, 0x5d, 0x0d, 0xbe, 0x35, 0x8b, 0xd0, 0x07, 0x9e, 0x7c, 0xf2, + 0x10, 0x77, 0xa9, 0xfa, 0xa3, 0x19, 0x74, 0x8c, 0x5f, 0x2d, 0x0a, 0x61, 0xc2, 0xfa, 0xfc, 0x4b, + 0x61, 0x71, 0x26, 0x61, 0x20, 0xcd, 0xc7, 0xd1, 0x45, 0x6b, 0xf2, 0x9e, 0xe9, 0xc1, 0xed, 0x8a, + 0x10, 0x27, 0x8c, 0x70, 0x98, 0xb8, 0x68, 0xf9, 0x74, 0xf8, 0x71, 0xff, 0xd2, 0x34, 0x17, 0xae, + 0xd4, 0xb4, 0xc0, 0x64, 0xe2, 0xc5, 0xa9, 0xfa, 0xc5, 0x3c, 0xca, 0x4f, 0xde, 0x23, 0x8d, 0x03, + 0xde, 0x35, 0xc2, 0x51, 0x6c, 0x7e, 0x97, 0x47, 0xb1, 0x3b, 0xf1, 0x02, 0x79, 0x39, 0xec, 0xcf, + 0x82, 0x5c, 0x7d, 0xa4, 0xe7, 0xa3, 0xd5, 0xfb, 0x3d, 0x7d, 0xf0, 0x9c, 0x88, 0xfe, 0x69, 0x0e, + 0xe5, 0x6a, 0x13, 0xd5, 0x23, 0xbd, 0xd9, 0x57, 0xbd, 0xe9, 0x7e, 0xcb, 0xae, 0x06, 0x17, 0x67, + 0xfd, 0xa1, 0x5f, 0x6b, 0xe4, 0x8e, 0xec, 0x1b, 0x39, 0x34, 0x52, 0x9b, 0x5a, 0xa8, 0x0a, 0x67, + 0xd7, 0x37, 0x98, 0xef, 0x21, 0x78, 0xc1, 0xb1, 0x2e, 0x3d, 0x1b, 0xb3, 0xc0, 0x6e, 0x56, 0x2c, + 0xef, 0x99, 0x6b, 0xb7, 0xf4, 0x66, 0x87, 0xc0, 0x61, 0x11, 0xf3, 0x54, 0x76, 0xcd, 0x37, 0xc9, + 0xe7, 0x21, 0x54, 0x81, 0xcf, 0x00, 0xbf, 0x80, 0x72, 0x37, 0xb9, 0x0f, 0x49, 0x1a, 0x9f, 0xa7, + 0xae, 0x32, 0x3e, 0x74, 0x12, 0xcc, 0x75, 0x4c, 0x03, 0x38, 0xd0, 0x52, 0xb4, 0xf0, 0x75, 0x6e, + 0x32, 0x6c, 0xa9, 0xf0, 0xb2, 0x5f, 0xf8, 0x7a, 0xa5, 0x8c, 0x6b, 0x68, 0xb0, 0x4a, 0x9c, 0x96, + 0x09, 0x1d, 0xe5, 0xcf, 0xd9, 0xdd, 0x99, 0xd0, 0xbd, 0xd5, 0x60, 0x3b, 0x2c, 0x04, 0xcc, 0x44, + 0x2e, 0xf8, 0x75, 0x84, 0x98, 0x55, 0xb5, 0xc5, 0xd0, 0x93, 0xe7, 0x60, 0xa7, 0xc2, 0x8c, 0xe1, + 0x04, 0xab, 0x54, 0x60, 0x86, 0xef, 0xa0, 0xd1, 0x59, 0xdb, 0x30, 0x97, 0x4c, 0xe6, 0x2c, 0x0a, + 0x15, 0x14, 0x36, 0x77, 0xd1, 0xa2, 0xc6, 0x6f, 0x4b, 0x28, 0x97, 0x54, 0x4d, 0x8c, 0xb1, 0xfa, + 0x8f, 0x7a, 0x51, 0x9e, 0x76, 0xfb, 0xd1, 0xf8, 0xdd, 0xcd, 0xf8, 0x2d, 0xa1, 0xd1, 0xdb, 0xb6, + 0x73, 0xc7, 0xb4, 0x96, 0x03, 0x3f, 0x7e, 0xbe, 0x9b, 0x06, 0xdf, 0xa3, 0x55, 0x86, 0xab, 0x07, + 0x2e, 0xff, 0x5a, 0x8c, 0x7c, 0x93, 0x11, 0xfc, 0x1c, 0x42, 0xec, 0x75, 0x3e, 0xd0, 0xf4, 0x87, + 0xe1, 0x35, 0xd8, 0xdb, 0x7d, 0x78, 0x1a, 0x20, 0x86, 0xd7, 0x08, 0x89, 0xf1, 0x25, 0xdf, 0x7b, + 0x63, 0x00, 0x5e, 0x0a, 0xc0, 0xb1, 0x01, 0x78, 0x6f, 0x88, 0x46, 0x00, 0xf3, 0xe3, 0xa8, 0x22, + 0x24, 0xdc, 0x88, 0xa1, 0x88, 0x20, 0xa4, 0xc9, 0x81, 0x07, 0xb4, 0x4b, 0xb8, 0x10, 0xd3, 0x04, + 0x1e, 0xf8, 0x99, 0xc8, 0x95, 0x3d, 0x96, 0xb8, 0xa5, 0xde, 0xd8, 0x87, 0x2e, 0x5f, 0x43, 0x9b, + 0xb9, 0x7c, 0xa9, 0xbf, 0x93, 0x45, 0x03, 0xb5, 0xce, 0xa2, 0xbb, 0xe6, 0x7a, 0xa4, 0x75, 0xc0, + 0xd5, 0xd8, 0xdf, 0x10, 0xe6, 0x13, 0x37, 0x84, 0x0f, 0xf9, 0x42, 0x11, 0x4e, 0x4a, 0x03, 0x93, + 0xce, 0xf7, 0x80, 0x0b, 0x15, 0xb9, 0xb0, 0x7d, 0x45, 0x56, 0x7f, 0x39, 0x8b, 0x46, 0xd9, 0x45, + 0x61, 0xd9, 0x74, 0x1b, 0x7b, 0xf0, 0x78, 0x61, 0xff, 0x65, 0xba, 0xbb, 0xcb, 0xf5, 0x2d, 0x3c, + 0x09, 0x51, 0x3f, 0x9e, 0x45, 0x83, 0xa5, 0x8e, 0xb7, 0x52, 0xf2, 0x40, 0x33, 0x0f, 0xe5, 0xee, + 0xe6, 0xb7, 0x33, 0xe8, 0x18, 0x6d, 0xc8, 0x82, 0x7d, 0x87, 0x58, 0x7b, 0x70, 0xd0, 0x2a, 0x1e, + 0x98, 0x66, 0x77, 0x78, 0x60, 0xea, 0xcb, 0x32, 0xb7, 0x3d, 0x59, 0xc2, 0xf5, 0x80, 0x66, 0x37, + 0xc9, 0xc1, 0xfe, 0x8c, 0x3d, 0xbc, 0x1e, 0xf0, 0x05, 0xb2, 0x07, 0xd7, 0x51, 0xef, 0x2e, 0x81, + 0xec, 0xc1, 0x59, 0xda, 0xbb, 0x43, 0x20, 0x5f, 0xc9, 0xa0, 0x81, 0x71, 0xdb, 0x3b, 0xe0, 0x03, + 0x9f, 0x7f, 0xc5, 0xc1, 0x56, 0x73, 0xff, 0x2b, 0x0e, 0xb6, 0x6e, 0xaa, 0x3f, 0x94, 0x45, 0x27, + 0x78, 0x50, 0x72, 0x7e, 0x7a, 0x71, 0x34, 0x1d, 0xf3, 0xc1, 0x16, 0x17, 0xcd, 0xd1, 0x3c, 0xc4, + 0x45, 0xf3, 0xd3, 0x39, 0x74, 0x02, 0x42, 0xb7, 0xd2, 0x4d, 0xdd, 0xbb, 0xc0, 0x16, 0xc1, 0x0d, + 0xf9, 0xd2, 0x77, 0x36, 0xe1, 0xd2, 0xf7, 0x2f, 0xd7, 0x8b, 0xcf, 0x2c, 0x9b, 0xde, 0x4a, 0x67, + 0xf1, 0x72, 0xc3, 0x6e, 0x5d, 0x59, 0x76, 0xf4, 0xbb, 0x26, 0xbb, 0xee, 0xd4, 0x9b, 0x57, 0x82, + 0xfc, 0x1e, 0x7a, 0xdb, 0xe4, 0x99, 0x3f, 0x6a, 0xb0, 0x53, 0xa2, 0x5c, 0xfd, 0xeb, 0x62, 0x17, + 0xa1, 0x57, 0x6d, 0xd3, 0xe2, 0x3e, 0x94, 0xcc, 0xd0, 0xad, 0xd1, 0xdd, 0xe5, 0x1b, 0xb6, 0x69, + 0xd5, 0xa3, 0x8e, 0x94, 0xdb, 0xad, 0x2f, 0x64, 0xad, 0x09, 0xd5, 0xa8, 0xff, 0x32, 0x83, 0x4e, + 0xcb, 0x5a, 0xfc, 0x6e, 0xb0, 0x1d, 0x7f, 0x38, 0x8b, 0xee, 0xbb, 0x0e, 0xc2, 0x09, 0x1c, 0x57, + 0x8e, 0xe6, 0x2d, 0x3e, 0x38, 0x13, 0x64, 0x73, 0x64, 0x51, 0xa6, 0xcb, 0xe6, 0x68, 0x52, 0xe7, + 0xb2, 0xf9, 0x17, 0x19, 0x74, 0x7c, 0xbe, 0x52, 0x9e, 0x78, 0x97, 0x8c, 0xa8, 0xf8, 0xf7, 0x1c, + 0x70, 0x83, 0x33, 0xf6, 0x3d, 0x07, 0xdc, 0xf4, 0xa4, 0xdf, 0x53, 0x2b, 0xcd, 0xce, 0xbc, 0x9b, + 0xf4, 0x4d, 0xfa, 0x9e, 0x77, 0x81, 0xbe, 0x49, 0xdf, 0x73, 0xc0, 0xf5, 0xed, 0x9f, 0x14, 0xd0, + 0xe0, 0x8d, 0xce, 0x22, 0xe1, 0x2e, 0x30, 0x87, 0xfa, 0xbc, 0xf5, 0x2a, 0x1a, 0xe4, 0x62, 0x80, + 0x9b, 0x0e, 0x21, 0x44, 0x1f, 0x0f, 0xb9, 0xc2, 0xa2, 0x20, 0x89, 0x44, 0xf8, 0x2c, 0xca, 0xdf, + 0x22, 0xce, 0xa2, 0xf8, 0x7a, 0xf5, 0x2e, 0x71, 0x16, 0x35, 0x80, 0xe2, 0x99, 0xd0, 0x31, 0xbf, + 0x54, 0xad, 0x40, 0xba, 0x16, 0x7e, 0xc9, 0x02, 0xf9, 0x67, 0x02, 0xef, 0x3a, 0xbd, 0x6d, 0xb2, + 0x44, 0x2f, 0xe2, 0xcb, 0xf9, 0x68, 0x49, 0x3c, 0x87, 0xc6, 0x44, 0xf7, 0x2a, 0x96, 0xab, 0xa4, + 0x3f, 0x81, 0x5d, 0x52, 0x96, 0x92, 0x78, 0x51, 0xfc, 0x32, 0x1a, 0xf2, 0x81, 0xe0, 0x28, 0x36, + 0x10, 0x06, 0xc8, 0x0f, 0x58, 0x45, 0x12, 0x21, 0x49, 0x05, 0x44, 0x06, 0x70, 0x75, 0x80, 0x12, + 0x18, 0x44, 0x1c, 0xef, 0xa4, 0x02, 0xf8, 0x69, 0x60, 0x00, 0x8f, 0x49, 0xc0, 0xc1, 0x64, 0x10, + 0x9e, 0x76, 0x82, 0xe3, 0xbf, 0xc3, 0xe1, 0xec, 0x01, 0xaf, 0x44, 0x86, 0xe7, 0x11, 0x0a, 0x1d, + 0x01, 0x78, 0x98, 0x84, 0x6d, 0xbb, 0x28, 0x08, 0x2c, 0xc4, 0x2b, 0xbc, 0xe1, 0x9d, 0x5c, 0xe1, + 0xa9, 0xbf, 0x9f, 0x45, 0x83, 0xa5, 0x76, 0x3b, 0x18, 0x0a, 0x8f, 0xa3, 0x42, 0xa9, 0xdd, 0xbe, + 0xa9, 0x55, 0xc4, 0x80, 0xe9, 0x7a, 0xbb, 0x5d, 0xef, 0x38, 0xa6, 0xe8, 0x79, 0xca, 0x88, 0xf0, + 0x04, 0x1a, 0x2e, 0xb5, 0xdb, 0xd5, 0xce, 0x62, 0xd3, 0x6c, 0x08, 0xf9, 0x97, 0x58, 0xaa, 0xb8, + 0x76, 0xbb, 0xde, 0x06, 0x4c, 0x34, 0x09, 0x97, 0x5c, 0x06, 0x7f, 0x14, 0x82, 0x0b, 0xf1, 0xf4, + 0x3f, 0x2c, 0xc1, 0x88, 0x1a, 0x84, 0x4a, 0x0f, 0xdb, 0x76, 0x39, 0x20, 0x62, 0x21, 0xe5, 0xcf, + 0xfa, 0x81, 0xf9, 0x69, 0x45, 0xb1, 0x34, 0x3f, 0x21, 0x4b, 0xfc, 0x04, 0xea, 0x2b, 0xb5, 0xdb, + 0xc2, 0x1d, 0x11, 0x38, 0x02, 0xd1, 0x52, 0x91, 0x3e, 0xf6, 0xc9, 0xce, 0xbc, 0x88, 0x46, 0xe4, + 0xca, 0xb6, 0x15, 0x92, 0xfe, 0x9b, 0x19, 0xf8, 0xa0, 0x03, 0xee, 0x39, 0xfd, 0x14, 0xca, 0x95, + 0xda, 0x6d, 0x3e, 0x1f, 0x1d, 0x4f, 0xe8, 0x8f, 0xe8, 0x43, 0xeb, 0x52, 0xbb, 0xed, 0x7f, 0xfa, + 0x01, 0x7f, 0x82, 0xb1, 0xa3, 0x4f, 0xff, 0x0a, 0xfb, 0xf4, 0x83, 0xfd, 0x3c, 0x42, 0xfd, 0x62, + 0x0e, 0x1d, 0x2b, 0xb5, 0xdb, 0x47, 0xa1, 0xec, 0xf7, 0xea, 0x39, 0xf7, 0x93, 0x08, 0x09, 0xd3, + 0x63, 0x5f, 0xf0, 0x40, 0x6c, 0x50, 0x98, 0x1a, 0x95, 0x8c, 0x26, 0x10, 0xf9, 0xea, 0xd7, 0xbf, + 0x2d, 0xf5, 0xfb, 0x78, 0x0e, 0xa6, 0xe2, 0x83, 0x1e, 0x9a, 0xea, 0x9d, 0xd2, 0x6d, 0xbc, 0x0f, + 0x0a, 0xdb, 0xea, 0x83, 0xdf, 0x92, 0x06, 0x0f, 0x84, 0x46, 0x3f, 0xea, 0x85, 0xde, 0x5d, 0x99, + 0xc5, 0x23, 0xa2, 0x30, 0x79, 0xbc, 0x1c, 0x3f, 0x5d, 0x13, 0x8f, 0xde, 0xd4, 0xa0, 0xa8, 0xba, + 0x69, 0x68, 0x11, 0x5a, 0xbf, 0x0f, 0xfb, 0xb6, 0xd5, 0x87, 0xeb, 0x59, 0x78, 0xa1, 0x1d, 0x44, + 0x7f, 0xda, 0xfd, 0xee, 0xe2, 0x0a, 0x42, 0xec, 0xbe, 0x3f, 0x70, 0x45, 0x1e, 0x66, 0x81, 0x5e, + 0x58, 0x16, 0x27, 0x1e, 0xe8, 0x25, 0x24, 0x09, 0xbc, 0x9a, 0x72, 0x89, 0x5e, 0x4d, 0x97, 0x50, + 0xbf, 0xa6, 0xaf, 0xbe, 0xd6, 0x21, 0xce, 0x1a, 0x37, 0x67, 0x58, 0x70, 0x45, 0x7d, 0xb5, 0xfe, + 0x31, 0x0a, 0xd4, 0x02, 0x34, 0x56, 0x83, 0x27, 0xfe, 0x82, 0x1f, 0x06, 0x3b, 0x99, 0x0e, 0x1e, + 0xf6, 0xef, 0x44, 0xd1, 0xf1, 0xf3, 0x28, 0x57, 0xba, 0x5d, 0xe3, 0x92, 0x0d, 0xba, 0xb6, 0x74, + 0xbb, 0xc6, 0xe5, 0x95, 0x5a, 0xf6, 0x76, 0x4d, 0xfd, 0x78, 0x16, 0xe1, 0x38, 0x25, 0x7e, 0x06, + 0x0d, 0x00, 0x74, 0x99, 0xea, 0x8c, 0x98, 0xfe, 0x73, 0xd5, 0xad, 0x3b, 0x00, 0x95, 0x8c, 0x3b, + 0x9f, 0x14, 0x3f, 0x07, 0x99, 0x8e, 0x79, 0x02, 0x3a, 0x29, 0xfd, 0xe7, 0xaa, 0xeb, 0xe7, 0x06, + 0x8e, 0x24, 0x3a, 0xe6, 0xc4, 0x60, 0x17, 0xde, 0xae, 0x4d, 0xdb, 0xae, 0xc7, 0x45, 0xcd, 0xec, + 0xc2, 0x55, 0x17, 0xf2, 0xce, 0x4a, 0x76, 0x21, 0x23, 0x83, 0xdc, 0x59, 0xb7, 0x6b, 0xec, 0x31, + 0x8c, 0xa1, 0xd9, 0x4d, 0xdf, 0xa0, 0x64, 0xb9, 0xb3, 0x56, 0xdd, 0x3a, 0x7b, 0x48, 0x63, 0x40, + 0x8a, 0x65, 0x29, 0x77, 0x96, 0x54, 0x4a, 0xfd, 0x74, 0x3f, 0x1a, 0x2d, 0xeb, 0x9e, 0xbe, 0xa8, + 0xbb, 0x44, 0xd8, 0x4d, 0x1f, 0xf3, 0x61, 0xfe, 0xe7, 0x08, 0x72, 0x30, 0x16, 0x13, 0xbe, 0x26, + 0x5a, 0x00, 0xbf, 0x10, 0xf2, 0x0d, 0x32, 0x9b, 0x8a, 0xa9, 0xd2, 0x16, 0xeb, 0x6d, 0x0e, 0xd6, + 0x62, 0x84, 0xf8, 0x31, 0x34, 0xe8, 0xc3, 0xe8, 0x06, 0x20, 0x17, 0xea, 0x8c, 0xb1, 0x48, 0xed, + 0x7f, 0x4d, 0x44, 0xe3, 0xe7, 0xd0, 0x90, 0xff, 0x53, 0x30, 0xad, 0x59, 0xde, 0xb7, 0xc5, 0xd8, + 0xee, 0x49, 0x24, 0x15, 0x8b, 0xc2, 0xfc, 0xd6, 0x2b, 0x15, 0x8d, 0xa4, 0x56, 0x93, 0x48, 0xf1, + 0xc7, 0xd0, 0x88, 0xff, 0x9b, 0x6f, 0x18, 0x58, 0x16, 0xba, 0xc7, 0x82, 0x0c, 0xce, 0x11, 0xb1, + 0x5e, 0x96, 0xc9, 0xd9, 0xd6, 0xe1, 0x7e, 0x3f, 0x5b, 0x98, 0xb1, 0x18, 0xdf, 0x39, 0x44, 0x2a, + 0xc0, 0x15, 0x34, 0xe6, 0x43, 0x42, 0x0d, 0xed, 0x0b, 0x77, 0x8c, 0xc6, 0x62, 0x3d, 0x51, 0x49, + 0xe3, 0xa5, 0x70, 0x13, 0x9d, 0x95, 0x80, 0x86, 0xbb, 0x62, 0x2e, 0x79, 0x7c, 0xbb, 0xc7, 0x23, + 0x1d, 0xf3, 0xf4, 0x90, 0x01, 0x57, 0x46, 0xe3, 0xe7, 0x79, 0x95, 0x73, 0x50, 0x75, 0xe5, 0x86, + 0x6b, 0xe8, 0x84, 0x8f, 0xbf, 0x3e, 0x51, 0xad, 0x3a, 0xf6, 0x1b, 0xa4, 0xe1, 0x55, 0xca, 0x7c, + 0xbb, 0x0c, 0x11, 0xf0, 0x8c, 0xc5, 0xfa, 0x72, 0xa3, 0x4d, 0x95, 0x82, 0xe2, 0x64, 0xe6, 0x89, + 0x85, 0xf1, 0x2d, 0x74, 0x9f, 0x00, 0xaf, 0x58, 0xae, 0xa7, 0x5b, 0x0d, 0x52, 0x29, 0xf3, 0x3d, + 0x34, 0xec, 0xe7, 0x39, 0x57, 0x93, 0x23, 0x65, 0xb6, 0xc9, 0xc5, 0xf1, 0x8b, 0x68, 0xd8, 0x47, + 0xb0, 0xbb, 0xbb, 0x41, 0xb8, 0xbb, 0x83, 0x21, 0x69, 0x2c, 0xd6, 0xa3, 0x6f, 0x36, 0x65, 0x62, + 0x51, 0xa3, 0x20, 0x81, 0xfe, 0x90, 0xa4, 0x51, 0xde, 0x5a, 0x3b, 0x51, 0x19, 0x21, 0xa9, 0xfe, + 0xcb, 0xa1, 0x46, 0xcd, 0x3b, 0xe6, 0xb2, 0xc9, 0x76, 0xd2, 0xfe, 0x33, 0xcd, 0xc5, 0xba, 0x0d, + 0xc0, 0x24, 0xfd, 0x60, 0xe4, 0x67, 0x4a, 0xe8, 0x78, 0x82, 0x8e, 0x6d, 0x6b, 0xc7, 0xf8, 0xa9, + 0x6c, 0xd8, 0x88, 0x03, 0xbe, 0x6d, 0x1c, 0x47, 0xfd, 0xfe, 0x97, 0x70, 0xe3, 0x41, 0x49, 0x1b, + 0x9a, 0x51, 0x1e, 0x3e, 0x5e, 0x12, 0xc7, 0x01, 0xdf, 0x4a, 0xee, 0x85, 0x38, 0xde, 0xca, 0x84, + 0xe2, 0x38, 0xe0, 0xdb, 0xcb, 0xef, 0xc9, 0x87, 0x73, 0xd2, 0xd1, 0x1e, 0x73, 0xaf, 0xcc, 0xe4, + 0xd0, 0xfb, 0xb4, 0xb0, 0x8d, 0xe7, 0x92, 0xa2, 0x6a, 0xf6, 0xed, 0x4c, 0x35, 0xf1, 0x8b, 0x68, + 0xb0, 0x6a, 0xbb, 0xde, 0xb2, 0x43, 0xdc, 0x6a, 0x10, 0xa9, 0x1f, 0x9e, 0xda, 0xb6, 0x39, 0xb8, + 0xde, 0x96, 0x66, 0x7f, 0x91, 0x5c, 0xfd, 0xc3, 0x5c, 0x4c, 0x1b, 0x98, 0xe1, 0x7a, 0x20, 0xb5, + 0x61, 0x0f, 0x86, 0x3a, 0xbe, 0x1a, 0xae, 0x82, 0xcc, 0xc2, 0xef, 0x15, 0xc2, 0x10, 0x2e, 0x72, + 0x03, 0x5f, 0x26, 0xc1, 0x1f, 0x42, 0xa7, 0x24, 0x40, 0x55, 0x77, 0xf4, 0x16, 0xf1, 0xc2, 0xac, + 0x88, 0x10, 0x58, 0xca, 0x2f, 0x5d, 0x6f, 0x07, 0x68, 0x31, 0xd3, 0x62, 0x0a, 0x07, 0x41, 0xb5, + 0xfa, 0xb6, 0xe1, 0xd8, 0xfc, 0x47, 0x79, 0xa4, 0x04, 0xe6, 0x65, 0xf0, 0x00, 0x68, 0x1f, 0xa7, + 0xf2, 0x77, 0x44, 0xe7, 0x9a, 0x68, 0x2c, 0x14, 0x46, 0xad, 0xd3, 0x6a, 0xe9, 0xd0, 0xc1, 0xd4, + 0x7c, 0x2d, 0x46, 0x99, 0x85, 0x84, 0xcc, 0x62, 0x3d, 0xc3, 0x2d, 0x56, 0x1c, 0x3e, 0xb0, 0xaa, + 0xbb, 0x8c, 0x85, 0x16, 0xe7, 0x8a, 0x3f, 0x93, 0x41, 0x27, 0x4a, 0x4b, 0x4b, 0xa4, 0xe1, 0x11, + 0x63, 0x7e, 0x91, 0x9a, 0x6e, 0x13, 0x76, 0xc7, 0xf2, 0x7c, 0x6b, 0xf9, 0xf9, 0xf4, 0xea, 0x58, + 0x27, 0x5d, 0x4e, 0x2a, 0xcc, 0x5a, 0x12, 0x84, 0x58, 0xd0, 0x39, 0x49, 0xdd, 0x06, 0x9a, 0x7a, + 0x03, 0x88, 0xb4, 0xc4, 0x7a, 0xcf, 0x5c, 0x47, 0xa7, 0x53, 0x59, 0x6e, 0x66, 0x2a, 0xf5, 0x8a, + 0xa6, 0xd2, 0xbf, 0xce, 0x84, 0xea, 0x1e, 0x11, 0x12, 0xbe, 0x8c, 0x50, 0x08, 0xe2, 0x9b, 0xa7, + 0x91, 0x8d, 0xf5, 0x22, 0x0a, 0x85, 0xa6, 0x09, 0x14, 0x78, 0x1e, 0x15, 0xb8, 0x58, 0x58, 0x9e, + 0xdb, 0xf7, 0x6e, 0xd2, 0x0b, 0x97, 0x45, 0x39, 0xc0, 0xc6, 0x88, 0x7f, 0x33, 0x67, 0x73, 0xe6, + 0x39, 0x34, 0xb8, 0xd3, 0xef, 0xfa, 0x4c, 0x0e, 0x61, 0x71, 0xa7, 0xb3, 0x8f, 0x66, 0xe0, 0x3b, + 0x62, 0xb0, 0xec, 0x2c, 0x4f, 0xcd, 0x45, 0xd4, 0x4f, 0x3f, 0x01, 0x32, 0x3f, 0x08, 0x91, 0x5e, + 0x3b, 0x1c, 0xa6, 0x05, 0xd8, 0x30, 0xcc, 0x52, 0x5f, 0x72, 0x98, 0x25, 0xf5, 0xfb, 0x73, 0xe8, + 0xa4, 0xd8, 0x21, 0x65, 0x02, 0xc1, 0xe3, 0x8f, 0x3a, 0xe5, 0x6d, 0xec, 0x14, 0x15, 0x15, 0x98, + 0x81, 0xcb, 0xa3, 0xf8, 0xb3, 0xc3, 0x07, 0x80, 0x68, 0x1c, 0xa3, 0xfe, 0x87, 0x2c, 0x1a, 0x0e, + 0x8c, 0x08, 0xdd, 0x71, 0x0f, 0x71, 0x77, 0xbc, 0x0f, 0x0d, 0x43, 0xa0, 0x9c, 0x16, 0xb1, 0x58, + 0x30, 0x99, 0x5e, 0x21, 0xed, 0x86, 0x8f, 0xe0, 0x19, 0x96, 0x24, 0x42, 0xaa, 0xfd, 0xcc, 0xbe, + 0x10, 0xc2, 0x17, 0x31, 0xe3, 0x82, 0xc1, 0xd5, 0x9f, 0xc8, 0xa1, 0x21, 0x5f, 0xca, 0xe3, 0xe6, + 0x41, 0xbd, 0x4d, 0xd8, 0x5f, 0x21, 0x5f, 0x41, 0xa8, 0x6a, 0x3b, 0x9e, 0xde, 0x9c, 0x0b, 0x35, + 0x1f, 0x8e, 0xe1, 0xda, 0x00, 0x65, 0x65, 0x04, 0x12, 0x58, 0xbf, 0x42, 0xe3, 0x8d, 0x4d, 0x4c, + 0x6c, 0xfd, 0x0a, 0xa0, 0x9a, 0x40, 0xa1, 0xfe, 0x46, 0x16, 0x1d, 0xf3, 0x3b, 0x69, 0xf2, 0x1e, + 0x69, 0x74, 0x0e, 0xf3, 0xdc, 0x24, 0x4b, 0xbb, 0x77, 0x53, 0x69, 0xab, 0xff, 0x4d, 0x98, 0x48, + 0x26, 0x9a, 0xf6, 0xd1, 0x44, 0xf2, 0xd7, 0xa1, 0xe3, 0xea, 0xb7, 0xe7, 0xd0, 0x09, 0x5f, 0xea, + 0x53, 0x1d, 0x0b, 0x36, 0xb0, 0x13, 0x7a, 0xb3, 0x79, 0x98, 0xf7, 0x7c, 0x83, 0xbe, 0x20, 0xe6, + 0x79, 0xe4, 0x39, 0x9e, 0xed, 0x6e, 0x89, 0x83, 0xeb, 0xb6, 0x69, 0x68, 0x22, 0x11, 0x7e, 0x19, + 0x0d, 0xf9, 0x3f, 0x4b, 0xce, 0xb2, 0xbf, 0xd1, 0x83, 0xe3, 0xe8, 0xa0, 0x90, 0xee, 0x48, 0xcf, + 0xd5, 0xa5, 0x02, 0xea, 0x7f, 0x2a, 0xa0, 0x33, 0xb7, 0x4d, 0xcb, 0xb0, 0x57, 0x5d, 0x3f, 0x59, + 0xe2, 0x81, 0x3f, 0x8e, 0xd9, 0xef, 0x24, 0x89, 0xaf, 0xa1, 0xfb, 0xa2, 0x22, 0x75, 0x82, 0x10, + 0xd6, 0xbc, 0x77, 0x56, 0x19, 0x41, 0xdd, 0x4f, 0x9b, 0xc8, 0xef, 0x74, 0xb4, 0xe4, 0x92, 0xd1, + 0xbc, 0x8b, 0x7d, 0x5b, 0xc9, 0xbb, 0xf8, 0x28, 0x2a, 0x94, 0xed, 0x96, 0x6e, 0xfa, 0x81, 0x4b, + 0x60, 0x14, 0x07, 0xf5, 0x02, 0x46, 0xe3, 0x14, 0x94, 0x3f, 0xaf, 0x18, 0xba, 0x6c, 0x20, 0xe4, + 0xef, 0x17, 0xa0, 0x56, 0x9a, 0x26, 0x12, 0x61, 0x1b, 0x0d, 0xf3, 0xea, 0xf8, 0x0d, 0x0c, 0x82, + 0xcd, 0xd3, 0xd3, 0xbe, 0x8c, 0xd2, 0xd5, 0xea, 0xb2, 0x54, 0x8e, 0x6d, 0xa3, 0x58, 0x3a, 0x48, + 0xfe, 0x31, 0xec, 0x2e, 0x46, 0x93, 0xf9, 0x0b, 0x42, 0x80, 0x49, 0x66, 0x30, 0x2e, 0x04, 0x98, + 0x65, 0x44, 0x22, 0x3c, 0x89, 0xc6, 0x20, 0xd0, 0x70, 0xb0, 0x95, 0xa2, 0x2a, 0x31, 0x04, 0x46, + 0x25, 0x1c, 0xec, 0xb3, 0xd8, 0xc4, 0xf4, 0xe3, 0xea, 0x0d, 0x8e, 0xd6, 0xe2, 0x25, 0xce, 0xbc, + 0x82, 0x70, 0xbc, 0xcd, 0xdb, 0x3a, 0xda, 0xff, 0x74, 0x36, 0xdc, 0xd7, 0x1d, 0x74, 0xe7, 0x8c, + 0xbd, 0x38, 0xcc, 0xfe, 0x85, 0x0c, 0x1a, 0x8b, 0x05, 0xae, 0xc6, 0x4f, 0x21, 0xc4, 0x20, 0x42, + 0x80, 0x40, 0x88, 0x5f, 0x11, 0x06, 0xb3, 0xe6, 0x4b, 0x49, 0x48, 0x86, 0xaf, 0xa0, 0x7e, 0xf6, + 0x8b, 0x87, 0xc8, 0x89, 0x17, 0xe9, 0x74, 0x4c, 0x43, 0x0b, 0x88, 0xc2, 0x5a, 0xe0, 0x8e, 0x28, + 0x97, 0x58, 0xc4, 0x5b, 0x6b, 0x07, 0xb5, 0x50, 0x32, 0xda, 0x81, 0x43, 0x41, 0x83, 0x4b, 0xc6, + 0x7e, 0x75, 0x5d, 0x81, 0xc7, 0x00, 0xcf, 0x6d, 0x16, 0x03, 0x3c, 0x32, 0x37, 0xf1, 0xa0, 0xdf, + 0x7b, 0xf7, 0xb0, 0xe4, 0xb3, 0x59, 0x74, 0x2c, 0xa8, 0x75, 0x1f, 0xaf, 0x23, 0xde, 0x41, 0x22, + 0xf9, 0x4c, 0x06, 0x29, 0xe3, 0x66, 0xb3, 0x69, 0x5a, 0xcb, 0x15, 0x6b, 0xc9, 0x76, 0x5a, 0x30, + 0x79, 0xec, 0xdf, 0x71, 0xa7, 0xfa, 0x5d, 0x19, 0x34, 0xc6, 0x1b, 0x34, 0xa1, 0x3b, 0xc6, 0xfe, + 0x9d, 0x25, 0x45, 0x5b, 0xb2, 0x7f, 0xfa, 0xa2, 0x7e, 0x29, 0x8b, 0xd0, 0x8c, 0xdd, 0xb8, 0x73, + 0xc0, 0x5f, 0x16, 0xbe, 0x80, 0x0a, 0x2c, 0x4e, 0x11, 0xd7, 0xd8, 0xb1, 0xcb, 0xec, 0xc1, 0x28, + 0xfd, 0x34, 0x86, 0x18, 0x1f, 0xe5, 0x27, 0xb4, 0x05, 0x16, 0xe7, 0x48, 0xc9, 0x68, 0xbc, 0x08, + 0xad, 0x94, 0xd2, 0x71, 0xab, 0x26, 0xa8, 0x94, 0xc2, 0xe4, 0x4a, 0x37, 0xd6, 0x8b, 0xf9, 0xa6, + 0xdd, 0xb8, 0xa3, 0x01, 0xbd, 0xfa, 0x57, 0x19, 0x26, 0xbb, 0x03, 0xfe, 0xba, 0xce, 0xff, 0xfc, + 0xfc, 0x36, 0x3f, 0xff, 0xbb, 0x33, 0xe8, 0x84, 0x46, 0x1a, 0xf6, 0x5d, 0xe2, 0xac, 0x4d, 0xd8, + 0x06, 0xb9, 0x4e, 0x2c, 0xe2, 0xec, 0xd7, 0x88, 0xfa, 0x87, 0x90, 0x34, 0x21, 0x6c, 0xcc, 0x4d, + 0x97, 0x18, 0x07, 0x27, 0xa1, 0x85, 0xfa, 0x2b, 0x7d, 0x48, 0x49, 0xb4, 0x10, 0x0f, 0xac, 0x55, + 0x94, 0x6a, 0xf6, 0xe7, 0xf7, 0xca, 0xec, 0xef, 0xdd, 0x9e, 0xd9, 0x5f, 0xd8, 0xae, 0xd9, 0xdf, + 0xb7, 0x15, 0xb3, 0xbf, 0x15, 0x35, 0xfb, 0xfb, 0xc1, 0xec, 0x7f, 0xaa, 0xab, 0xd9, 0x3f, 0x69, + 0x19, 0x3b, 0x34, 0xfa, 0x0f, 0x6c, 0xb2, 0xd5, 0x9d, 0xec, 0x56, 0x2e, 0xd2, 0x49, 0xb1, 0x61, + 0x3b, 0x06, 0x31, 0xf8, 0x26, 0x05, 0x4e, 0xc8, 0x1d, 0x0e, 0xd3, 0x02, 0x6c, 0x2c, 0x73, 0xed, + 0xf0, 0x56, 0x32, 0xd7, 0xee, 0xc1, 0x36, 0xe6, 0x53, 0x59, 0x34, 0x36, 0x41, 0x1c, 0x8f, 0x05, + 0x42, 0xdc, 0x0b, 0x27, 0xa5, 0x12, 0x3a, 0x26, 0x30, 0x04, 0x8b, 0x3c, 0x1b, 0x3a, 0x5e, 0x35, + 0x88, 0xe3, 0x45, 0xfd, 0xb6, 0xa2, 0xf4, 0xb4, 0x7a, 0x3f, 0x7b, 0x14, 0x1f, 0xbb, 0x41, 0xf5, + 0x3e, 0x9c, 0x09, 0xd2, 0xe4, 0xbf, 0xb4, 0x80, 0x5e, 0x48, 0x08, 0x95, 0xdf, 0x7e, 0x42, 0x28, + 0xf5, 0xe7, 0x32, 0xe8, 0x82, 0x46, 0x2c, 0xb2, 0xaa, 0x2f, 0x36, 0x89, 0xd0, 0x2c, 0xbe, 0x32, + 0xd0, 0x59, 0xc3, 0x74, 0x5b, 0xba, 0xd7, 0x58, 0xd9, 0x95, 0x8c, 0xa6, 0xd0, 0x90, 0x38, 0x7f, + 0x6d, 0x63, 0x6e, 0x93, 0xca, 0xa9, 0xbf, 0x9e, 0x43, 0x7d, 0xe3, 0xb6, 0xf7, 0xaa, 0xbd, 0xcb, + 0x0c, 0x65, 0xe1, 0x94, 0x9f, 0xdd, 0xc6, 0xb9, 0xc8, 0x13, 0x50, 0xb9, 0x10, 0xb4, 0x1d, 0x9c, + 0xfa, 0x16, 0xed, 0x58, 0x70, 0x7b, 0x9f, 0x6c, 0x9b, 0xb9, 0xc9, 0x9e, 0x41, 0x03, 0x10, 0x05, + 0x43, 0x38, 0xb9, 0x04, 0x97, 0x59, 0x8f, 0x02, 0xa3, 0x75, 0x84, 0xa4, 0xf8, 0x43, 0x52, 0xe4, + 0xc6, 0xc2, 0xee, 0x73, 0x99, 0x89, 0x41, 0x1c, 0xf7, 0x2c, 0x65, 0x98, 0xfa, 0x8d, 0x3c, 0x1a, + 0xf2, 0x1d, 0x25, 0xf7, 0xa9, 0x07, 0x1f, 0x47, 0x85, 0x69, 0x5b, 0x08, 0x40, 0x0f, 0x8e, 0x95, + 0x2b, 0xb6, 0x1b, 0xf1, 0x18, 0xe5, 0x44, 0xf8, 0x29, 0xd4, 0x3f, 0x67, 0x1b, 0xa2, 0x5b, 0x30, + 0x8c, 0x69, 0xcb, 0x36, 0x62, 0xcf, 0x2a, 0x03, 0x42, 0x7c, 0x01, 0xe5, 0xc1, 0xa3, 0x5a, 0x38, + 0x7a, 0x8e, 0x78, 0x51, 0x03, 0x5e, 0xd0, 0x8d, 0xc2, 0x76, 0x75, 0xa3, 0x6f, 0xa7, 0xba, 0xd1, + 0xbf, 0xb7, 0xba, 0xf1, 0x3a, 0x1a, 0x82, 0x9a, 0xfc, 0xfc, 0x55, 0x9b, 0x2f, 0x6f, 0xa7, 0xf9, + 0x0a, 0x34, 0xcc, 0xda, 0xcd, 0xb3, 0x58, 0xc1, 0xc2, 0x23, 0xb1, 0x8a, 0xa8, 0x1d, 0xda, 0x85, + 0xda, 0xfd, 0x61, 0x06, 0xf5, 0xdd, 0xb4, 0xee, 0x58, 0xf6, 0xea, 0xee, 0x34, 0xee, 0x29, 0x34, + 0xc8, 0xd9, 0x08, 0x73, 0x3c, 0xbc, 0x94, 0xed, 0x30, 0x70, 0x1d, 0x38, 0x69, 0x22, 0x15, 0x7e, + 0x31, 0x28, 0x04, 0x8f, 0x26, 0x72, 0x61, 0x0a, 0x07, 0xbf, 0x50, 0x43, 0x8e, 0xe1, 0x2e, 0x92, + 0xe3, 0xb3, 0x28, 0x5f, 0xa6, 0x4d, 0x15, 0x22, 0x82, 0xd2, 0xa6, 0x68, 0x00, 0x55, 0xff, 0x79, + 0x16, 0x8d, 0x44, 0x8e, 0x9f, 0x1e, 0x45, 0x03, 0xfc, 0xf8, 0xc7, 0xf4, 0x83, 0xca, 0xc3, 0xa3, + 0x8a, 0x00, 0xa8, 0xf5, 0xb3, 0x3f, 0x2b, 0x06, 0x7e, 0x3f, 0xea, 0xb3, 0x5d, 0x58, 0x9a, 0xe0, + 0x5b, 0x46, 0xc2, 0x21, 0x34, 0x5f, 0xa3, 0x6d, 0x67, 0x83, 0x83, 0x93, 0x88, 0x1a, 0x69, 0xbb, + 0xf0, 0x69, 0xd7, 0xd0, 0x80, 0xee, 0xba, 0xc4, 0xab, 0x7b, 0xfa, 0xb2, 0x18, 0x67, 0x3e, 0x00, + 0x8a, 0xa3, 0x03, 0x80, 0x0b, 0xfa, 0x32, 0x7e, 0x05, 0x0d, 0x37, 0x1c, 0x02, 0x8b, 0x97, 0xde, + 0xa4, 0xad, 0x14, 0x8c, 0x4b, 0x09, 0x21, 0x9e, 0xf8, 0x87, 0x88, 0x8a, 0x81, 0x6f, 0xa1, 0x61, + 0xfe, 0x39, 0xcc, 0xa3, 0x19, 0x06, 0xda, 0x48, 0xb8, 0x98, 0x30, 0x91, 0x30, 0x9f, 0x66, 0xee, + 0xd8, 0x2e, 0x92, 0x8b, 0x7c, 0x0d, 0x81, 0x54, 0xfd, 0x6a, 0x86, 0x1a, 0x3c, 0x14, 0x00, 0x19, + 0x65, 0xa9, 0xae, 0xb4, 0xb6, 0xa9, 0x2b, 0xad, 0x30, 0xf7, 0x5b, 0xc1, 0xed, 0x32, 0x3b, 0x69, + 0x1c, 0x8b, 0x2f, 0xa3, 0x82, 0x21, 0x9e, 0xfd, 0x9c, 0x94, 0x3f, 0xc2, 0xaf, 0x47, 0xe3, 0x54, + 0xf8, 0x22, 0xca, 0x53, 0x83, 0x36, 0xba, 0xf1, 0x13, 0xd7, 0x48, 0x0d, 0x28, 0xd4, 0x6f, 0xcd, + 0xa2, 0x21, 0xe1, 0x6b, 0xae, 0xee, 0xea, 0x73, 0x9e, 0xdf, 0x5a, 0x33, 0x7d, 0x37, 0x07, 0xd8, + 0x11, 0xf8, 0x4d, 0xbe, 0x16, 0x88, 0x62, 0x4b, 0x57, 0x10, 0x5c, 0x30, 0xcf, 0xf0, 0x0f, 0x2d, + 0x6c, 0x7d, 0x13, 0x44, 0xe9, 0x5f, 0xcd, 0xf7, 0x67, 0x47, 0x73, 0xaf, 0xe6, 0xfb, 0xf3, 0xa3, + 0xbd, 0x10, 0x55, 0x07, 0x02, 0xd9, 0xb2, 0x1d, 0xa6, 0xb5, 0x64, 0x2e, 0x1f, 0x70, 0x9f, 0xf4, + 0xbd, 0x8d, 0x38, 0x14, 0x91, 0xcd, 0x01, 0x77, 0x50, 0x7f, 0x5b, 0x65, 0x73, 0x94, 0x2b, 0x8e, + 0xcb, 0xe6, 0x8f, 0x32, 0x48, 0x49, 0x94, 0x4d, 0x69, 0x9f, 0x6e, 0xbe, 0xf7, 0x2e, 0x63, 0xdc, + 0xd7, 0xb3, 0x68, 0xac, 0x62, 0x79, 0x64, 0x99, 0xed, 0x7b, 0x0e, 0xf8, 0x54, 0x71, 0x03, 0x0d, + 0x0a, 0x1f, 0xc3, 0xfb, 0xfc, 0xfe, 0x60, 0x57, 0x19, 0xa2, 0x52, 0x38, 0x89, 0xa5, 0xf7, 0x30, + 0xc9, 0x74, 0x44, 0xc8, 0x07, 0x7c, 0xce, 0x39, 0x18, 0x42, 0x3e, 0xe0, 0x93, 0xd7, 0x3b, 0x54, + 0xc8, 0xff, 0x25, 0x83, 0x8e, 0x27, 0x54, 0x8e, 0x2f, 0xa0, 0xbe, 0x5a, 0x67, 0x11, 0xc2, 0xf9, + 0x64, 0x42, 0x1f, 0x51, 0xb7, 0xb3, 0x08, 0x91, 0x7c, 0x34, 0x1f, 0x89, 0x17, 0xe0, 0xd1, 0xee, + 0x7c, 0xa5, 0x3c, 0xc1, 0xa5, 0xaa, 0x0a, 0xcf, 0x8f, 0x29, 0x38, 0xe9, 0xcb, 0x82, 0x87, 0xbd, + 0xb6, 0x69, 0x34, 0x22, 0x0f, 0x7b, 0x69, 0x19, 0xfc, 0x61, 0x34, 0x50, 0x7a, 0xb3, 0xe3, 0x10, + 0xe0, 0xcb, 0x24, 0xfe, 0x70, 0xc0, 0xd7, 0x47, 0x24, 0x71, 0x66, 0x6f, 0x94, 0x29, 0x45, 0x94, + 0x77, 0xc8, 0x50, 0xfd, 0x74, 0x06, 0x9d, 0x49, 0x6f, 0x1d, 0x7e, 0x02, 0xf5, 0xd1, 0x9d, 0x6d, + 0x49, 0x9b, 0xe3, 0x9f, 0xce, 0xb2, 0x2b, 0xda, 0x4d, 0x52, 0xd7, 0x1d, 0xd1, 0xf0, 0xf6, 0xc9, + 0xf0, 0x4b, 0x68, 0xb0, 0xe2, 0xba, 0x1d, 0xe2, 0xd4, 0x9e, 0xba, 0xa9, 0x55, 0xf8, 0x9e, 0x0a, + 0x6c, 0x76, 0x13, 0xc0, 0x75, 0xf7, 0xa9, 0x48, 0xc0, 0x1e, 0x91, 0x5e, 0xfd, 0x44, 0x06, 0x9d, + 0xed, 0xf6, 0x55, 0x74, 0x03, 0xbf, 0x40, 0x2c, 0xdd, 0xa2, 0x3b, 0xfe, 0x4c, 0xb8, 0x45, 0xf1, + 0x00, 0x26, 0x6f, 0x32, 0x02, 0x42, 0x5a, 0x88, 0x9d, 0x8e, 0x05, 0xd7, 0xf1, 0xec, 0x24, 0x0f, + 0x60, 0x91, 0x42, 0x3e, 0xa1, 0xfa, 0xbb, 0x59, 0x34, 0x54, 0x6d, 0x76, 0x96, 0x4d, 0x61, 0xe1, + 0xd8, 0xb1, 0xbd, 0xed, 0x5b, 0xbf, 0xd9, 0xed, 0x59, 0xbf, 0x74, 0xb8, 0x39, 0x3b, 0x1c, 0x6e, + 0x7e, 0x39, 0xfc, 0x22, 0x2a, 0xb4, 0xe1, 0x3b, 0xa2, 0xe7, 0x89, 0xec, 0xeb, 0xd2, 0xce, 0x13, + 0x59, 0x19, 0x3a, 0xbe, 0x1a, 0xbb, 0x18, 0x5f, 0x61, 0x59, 0x41, 0xa0, 0xe1, 0x22, 0x71, 0x24, + 0xd0, 0x3d, 0x11, 0x68, 0xb8, 0x20, 0x1c, 0x09, 0x74, 0x17, 0x02, 0xfd, 0x95, 0x2c, 0x1a, 0x91, + 0xab, 0xc4, 0x4f, 0xa0, 0x41, 0x56, 0x0d, 0x3b, 0x57, 0xc9, 0x08, 0x6e, 0xa4, 0x21, 0x58, 0x43, + 0xec, 0x07, 0x3f, 0x20, 0x3a, 0xb6, 0xa2, 0xbb, 0xf5, 0xf0, 0x84, 0x83, 0xdd, 0x42, 0xf6, 0x33, + 0x7f, 0x9e, 0x08, 0x4a, 0x1b, 0x59, 0xd1, 0xdd, 0x89, 0xf0, 0x37, 0x9e, 0x44, 0x18, 0xd2, 0xd2, + 0xcb, 0x0c, 0xf2, 0xc0, 0x80, 0xa7, 0xb6, 0x8d, 0x62, 0xb5, 0x31, 0x06, 0x13, 0xd9, 0x7c, 0x24, + 0x68, 0x36, 0x28, 0x43, 0xef, 0x16, 0xf2, 0xee, 0x0a, 0xf4, 0xc9, 0xc7, 0x84, 0x8c, 0xa0, 0xac, + 0x7b, 0x3a, 0xdb, 0x94, 0xfb, 0x1d, 0xa0, 0xfe, 0x99, 0x89, 0x7a, 0xe7, 0x2d, 0x32, 0xbf, 0x84, + 0x9f, 0x44, 0x03, 0x54, 0x61, 0x66, 0x6c, 0xda, 0x97, 0x19, 0xee, 0x05, 0x20, 0x68, 0x12, 0x20, + 0xa6, 0x7b, 0xb4, 0x90, 0x0a, 0x5f, 0x13, 0x33, 0xcf, 0x73, 0xed, 0xc3, 0x62, 0x19, 0x86, 0x99, + 0xee, 0xd1, 0xc4, 0x0c, 0xf5, 0xd7, 0xc4, 0x8c, 0xdf, 0x5c, 0xef, 0xa4, 0x52, 0x0c, 0xe3, 0x97, + 0xe2, 0xe3, 0x63, 0x26, 0x29, 0x2d, 0x76, 0x74, 0xf7, 0x14, 0xa7, 0x98, 0xee, 0xd1, 0x92, 0xd3, + 0x69, 0x0f, 0x89, 0x2e, 0x84, 0x51, 0xd7, 0x05, 0x11, 0x37, 0xdd, 0xa3, 0x49, 0xb4, 0xf8, 0x59, + 0x34, 0xc8, 0x7f, 0xbf, 0x6a, 0x9b, 0x56, 0x34, 0xc6, 0x89, 0x80, 0x9a, 0xee, 0xd1, 0x44, 0x4a, + 0xa1, 0xd2, 0xaa, 0x63, 0x5a, 0x1e, 0x7f, 0xfb, 0x18, 0xad, 0x14, 0x70, 0x42, 0xa5, 0xf0, 0x1b, + 0xbf, 0x84, 0x86, 0x83, 0xe0, 0x31, 0x6f, 0x90, 0x86, 0xc7, 0x0f, 0x8f, 0xef, 0x8b, 0x14, 0x66, + 0xc8, 0xe9, 0x1e, 0x4d, 0xa6, 0xc6, 0x17, 0x51, 0x41, 0x23, 0xae, 0xf9, 0xa6, 0x7f, 0xe9, 0x39, + 0x22, 0x8c, 0x73, 0xf3, 0x4d, 0x2a, 0x25, 0x8e, 0xa7, 0xbd, 0x13, 0xde, 0xb2, 0xf2, 0xa3, 0x5e, + 0x1c, 0xa9, 0x65, 0xd2, 0x32, 0x68, 0xef, 0x08, 0x57, 0xec, 0xaf, 0x84, 0x21, 0x75, 0x78, 0xf2, + 0xbc, 0xc1, 0xe8, 0xdb, 0x65, 0x11, 0x3b, 0xdd, 0xa3, 0x45, 0xe8, 0x05, 0xa9, 0x96, 0x4d, 0xf7, + 0x0e, 0x8f, 0x62, 0x18, 0x95, 0x2a, 0x45, 0x09, 0x52, 0xa5, 0x3f, 0x85, 0xaa, 0xe7, 0x88, 0xb7, + 0x6a, 0x3b, 0x77, 0x78, 0xcc, 0xc2, 0x68, 0xd5, 0x1c, 0x2b, 0x54, 0xcd, 0x21, 0x62, 0xd5, 0x74, + 0xc0, 0x8d, 0x24, 0x57, 0xad, 0x7b, 0xba, 0x58, 0x35, 0x3b, 0x89, 0xf3, 0x3b, 0x69, 0x86, 0xe8, + 0x77, 0x59, 0xd6, 0xe5, 0x78, 0x87, 0x02, 0x4e, 0xe8, 0x50, 0xf8, 0x4d, 0x2b, 0x15, 0x32, 0xeb, + 0xf2, 0xb4, 0xca, 0x41, 0xa5, 0x02, 0x8a, 0x56, 0x2a, 0xe6, 0xe0, 0xbd, 0x26, 0xa6, 0x6f, 0x55, + 0xc6, 0xe4, 0x0e, 0x0a, 0x31, 0xb4, 0x83, 0x84, 0x34, 0xaf, 0x45, 0x48, 0x0d, 0xa9, 0x60, 0x20, + 0x1f, 0x0c, 0x5a, 0x38, 0x51, 0x9d, 0xee, 0xd1, 0x20, 0x69, 0xa4, 0xca, 0x92, 0x8e, 0x2a, 0xc7, + 0x81, 0x62, 0xc8, 0xa7, 0xa0, 0xb0, 0xe9, 0x1e, 0x8d, 0x25, 0x24, 0x7d, 0x52, 0x48, 0xef, 0xa5, + 0x9c, 0x90, 0xa7, 0x88, 0x00, 0x41, 0xa7, 0x88, 0x30, 0x09, 0xd8, 0x54, 0x3c, 0x89, 0x95, 0x72, + 0x9f, 0xbc, 0xd4, 0x44, 0xf1, 0xd3, 0x3d, 0x5a, 0x3c, 0xf1, 0xd5, 0xb3, 0x52, 0x5e, 0x27, 0xe5, + 0x64, 0x24, 0xb0, 0x50, 0x88, 0xa2, 0xe2, 0x12, 0x33, 0x40, 0xcd, 0x27, 0x66, 0x9e, 0x57, 0x4e, + 0xc9, 0x1b, 0x97, 0x04, 0x92, 0xe9, 0x1e, 0x2d, 0x31, 0x67, 0xfd, 0x44, 0x2c, 0xbb, 0x92, 0xa2, + 0xc8, 0x1e, 0x1e, 0x11, 0xf4, 0x74, 0x8f, 0x16, 0xcb, 0xc7, 0x74, 0x4d, 0x4c, 0x6b, 0xa4, 0x9c, + 0x96, 0x3b, 0x31, 0xc4, 0xd0, 0x4e, 0x14, 0xd2, 0x1f, 0x5d, 0x13, 0x53, 0xdd, 0x28, 0x67, 0xe2, + 0xa5, 0xc2, 0x99, 0x53, 0x48, 0x89, 0xa3, 0x25, 0x67, 0xef, 0x50, 0xee, 0xe7, 0xd9, 0x17, 0x79, + 0xf9, 0x24, 0x9a, 0xe9, 0x1e, 0x2d, 0x39, 0xf3, 0x87, 0x96, 0x9c, 0xf6, 0x42, 0x39, 0xdb, 0x8d, + 0x67, 0xd0, 0xba, 0xe4, 0x94, 0x19, 0x7a, 0x97, 0x24, 0x04, 0xca, 0x39, 0x39, 0xaa, 0x69, 0x2a, + 0xe1, 0x74, 0x8f, 0xd6, 0x25, 0x95, 0xc1, 0xcd, 0x94, 0x8c, 0x00, 0xca, 0x79, 0x39, 0xf9, 0x6a, + 0x22, 0xd1, 0x74, 0x8f, 0x96, 0x92, 0x4f, 0xe0, 0x66, 0x4a, 0xc0, 0x78, 0xa5, 0xd8, 0x95, 0x6d, + 0x20, 0x8f, 0x94, 0x70, 0xf3, 0xf3, 0x89, 0xb1, 0xd6, 0x95, 0x07, 0x64, 0xd5, 0x4d, 0x20, 0xa1, + 0xaa, 0x9b, 0x14, 0xa5, 0x7d, 0x3e, 0x31, 0x38, 0xb8, 0xf2, 0x60, 0x17, 0x86, 0x41, 0x1b, 0x13, + 0xc3, 0x8a, 0xcf, 0x27, 0x46, 0xe7, 0x56, 0x54, 0x99, 0x61, 0x02, 0x09, 0x65, 0x98, 0x14, 0xd7, + 0x7b, 0x3e, 0x31, 0x9c, 0xb4, 0xf2, 0x50, 0x17, 0x86, 0x61, 0x0b, 0x93, 0x02, 0x51, 0x3f, 0x2b, + 0xc5, 0x73, 0x56, 0x1e, 0x96, 0xe7, 0x0d, 0x01, 0x45, 0xe7, 0x0d, 0x31, 0xf2, 0xf3, 0x44, 0x2c, + 0x62, 0xa5, 0xf2, 0x88, 0x3c, 0xcc, 0x23, 0x68, 0x3a, 0xcc, 0xa3, 0x31, 0x2e, 0x27, 0x62, 0x91, + 0xfb, 0x94, 0x0b, 0x69, 0x4c, 0x00, 0x2d, 0x33, 0x61, 0xb1, 0xfe, 0x2a, 0x09, 0xa1, 0xe3, 0x94, + 0xf7, 0xc8, 0xde, 0xc9, 0x31, 0x82, 0xe9, 0x1e, 0x2d, 0x21, 0xe0, 0x9c, 0x96, 0x1c, 0x27, 0x45, + 0xb9, 0x28, 0x0f, 0xdb, 0x24, 0x1a, 0x3a, 0x6c, 0x13, 0x63, 0xac, 0xcc, 0x24, 0xbd, 0x44, 0x50, + 0x2e, 0xc9, 0x86, 0x59, 0x9c, 0x82, 0x1a, 0x66, 0x09, 0x2f, 0x18, 0xb4, 0xe4, 0xd8, 0x1d, 0xca, + 0xa3, 0x5d, 0x5b, 0x08, 0x34, 0x09, 0x2d, 0x64, 0xa1, 0x2c, 0x42, 0xdb, 0xe9, 0x66, 0xbb, 0x69, + 0xeb, 0x86, 0xf2, 0xde, 0x44, 0xdb, 0x89, 0x21, 0x05, 0xdb, 0x89, 0x01, 0xe8, 0x2a, 0x2f, 0x7a, + 0xea, 0x2b, 0x8f, 0xc9, 0xab, 0xbc, 0x88, 0xa3, 0xab, 0xbc, 0xe4, 0xd5, 0x3f, 0x11, 0xf3, 0x6a, + 0x57, 0x1e, 0x97, 0x15, 0x20, 0x82, 0xa6, 0x0a, 0x10, 0xf5, 0x83, 0xff, 0x68, 0xba, 0x1f, 0xb8, + 0x72, 0x19, 0xb8, 0x3d, 0xe0, 0x73, 0x4b, 0xa3, 0x9b, 0xee, 0xd1, 0xd2, 0x7d, 0xc9, 0x2b, 0x09, + 0x6e, 0xdd, 0xca, 0x15, 0x59, 0xc1, 0x62, 0x04, 0x54, 0xc1, 0xe2, 0xce, 0xe0, 0x95, 0x04, 0xbf, + 0x6c, 0xe5, 0x89, 0x54, 0x56, 0xc1, 0x37, 0x27, 0x78, 0x73, 0x5f, 0x13, 0x1d, 0xab, 0x95, 0x27, + 0xe5, 0xc5, 0x2e, 0xc4, 0xd0, 0xc5, 0x4e, 0x70, 0xc0, 0xbe, 0x26, 0xba, 0x14, 0x2b, 0x57, 0xe3, + 0xa5, 0xc2, 0x25, 0x52, 0x70, 0x3d, 0xd6, 0x92, 0x3d, 0x71, 0x95, 0xa7, 0x64, 0xad, 0x4b, 0xa2, + 0xa1, 0x5a, 0x97, 0xe8, 0xc5, 0x3b, 0x15, 0x77, 0xa8, 0x55, 0xae, 0x45, 0x37, 0xd9, 0x32, 0x9e, + 0x5a, 0x3e, 0x31, 0x27, 0xdc, 0x57, 0xa2, 0x41, 0xbc, 0x94, 0xa7, 0x23, 0xd7, 0xbe, 0x12, 0x96, + 0xda, 0xb7, 0x91, 0xa0, 0x5f, 0xaf, 0x44, 0xe3, 0x5e, 0x29, 0xcf, 0x24, 0x73, 0x08, 0x74, 0x25, + 0x1a, 0x27, 0xeb, 0x95, 0x68, 0xa8, 0x28, 0xe5, 0xd9, 0x64, 0x0e, 0x81, 0x74, 0xa3, 0xa1, 0xa5, + 0x9e, 0x14, 0x82, 0x57, 0x2b, 0xef, 0x93, 0x4d, 0xc7, 0x00, 0x41, 0x4d, 0xc7, 0x30, 0xc4, 0xf5, + 0x93, 0x42, 0xd0, 0x67, 0xe5, 0xb9, 0x58, 0x91, 0xa0, 0xb1, 0x42, 0x68, 0xe8, 0x27, 0x85, 0x60, + 0xc9, 0xca, 0xf3, 0xb1, 0x22, 0x41, 0xeb, 0x84, 0x90, 0xca, 0x46, 0xb7, 0x17, 0x8b, 0xca, 0x0b, + 0xf2, 0x61, 0x70, 0x3a, 0xe5, 0x74, 0x8f, 0xd6, 0xed, 0xe5, 0xe3, 0x47, 0xd3, 0xdd, 0x93, 0x95, + 0x17, 0xe5, 0x21, 0x9c, 0x46, 0x47, 0x87, 0x70, 0xaa, 0x8b, 0xf3, 0x4b, 0x91, 0xe8, 0x05, 0xca, + 0x4b, 0xf2, 0x14, 0x27, 0x21, 0xe9, 0x14, 0x17, 0x8d, 0x75, 0x20, 0x3d, 0xcb, 0x57, 0xde, 0x2f, + 0x4f, 0x71, 0x22, 0x8e, 0x4e, 0x71, 0xd2, 0x13, 0xfe, 0x89, 0xd8, 0x6b, 0x71, 0xe5, 0x65, 0x79, + 0x8a, 0x8b, 0xa0, 0xe9, 0x14, 0x17, 0x7d, 0x5f, 0xfe, 0x52, 0xe4, 0xd1, 0xb4, 0xf2, 0x4a, 0x72, + 0xfb, 0x01, 0x29, 0xb6, 0x9f, 0x3d, 0xb1, 0xd6, 0x92, 0x5f, 0xff, 0x2a, 0x25, 0x79, 0xfc, 0x26, + 0xd1, 0xd0, 0xf1, 0x9b, 0xf8, 0x72, 0x38, 0xba, 0x71, 0xe0, 0x5a, 0x35, 0xde, 0x65, 0xe3, 0x10, + 0x9a, 0x22, 0x09, 0x60, 0x69, 0x8f, 0xcc, 0x36, 0x42, 0x13, 0x29, 0x7b, 0x64, 0x7f, 0x1b, 0x14, + 0xa1, 0xa7, 0xb3, 0x6b, 0xcc, 0x5b, 0x56, 0x29, 0xcb, 0xb3, 0x6b, 0x8c, 0x80, 0xce, 0xae, 0x71, + 0x1f, 0xdb, 0x29, 0x34, 0xca, 0xb5, 0x88, 0x39, 0x01, 0x9b, 0xd6, 0xb2, 0x32, 0x19, 0x79, 0x7c, + 0x17, 0xc1, 0xd3, 0xd9, 0x29, 0x0a, 0x83, 0xf5, 0x9a, 0xc1, 0x26, 0x9a, 0x66, 0x7b, 0xd1, 0xd6, + 0x1d, 0xa3, 0x46, 0x2c, 0x43, 0x99, 0x8a, 0xac, 0xd7, 0x09, 0x34, 0xb0, 0x5e, 0x27, 0xc0, 0x21, + 0xf4, 0x54, 0x04, 0xae, 0x91, 0x06, 0x31, 0xef, 0x12, 0xe5, 0x3a, 0xb0, 0x2d, 0xa6, 0xb1, 0xe5, + 0x64, 0xd3, 0x3d, 0x5a, 0x1a, 0x07, 0x6a, 0xab, 0xcf, 0xae, 0xd5, 0x5e, 0x9b, 0x09, 0x1e, 0x9c, + 0x57, 0x1d, 0xd2, 0xd6, 0x1d, 0xa2, 0x4c, 0xcb, 0xb6, 0x7a, 0x22, 0x11, 0xb5, 0xd5, 0x13, 0x11, + 0x71, 0xb6, 0xfe, 0x58, 0xa8, 0x74, 0x63, 0x1b, 0x8e, 0x88, 0xe4, 0xd2, 0x74, 0x76, 0x92, 0x11, + 0x54, 0x40, 0x33, 0xb6, 0xb5, 0x0c, 0x27, 0x15, 0xaf, 0xca, 0xb3, 0x53, 0x3a, 0x25, 0x9d, 0x9d, + 0xd2, 0xb1, 0x54, 0xd5, 0x65, 0x2c, 0x1b, 0x83, 0x37, 0x64, 0x55, 0x4f, 0x20, 0xa1, 0xaa, 0x9e, + 0x00, 0x8e, 0x33, 0xd4, 0x88, 0x4b, 0x3c, 0x65, 0xa6, 0x1b, 0x43, 0x20, 0x89, 0x33, 0x04, 0x70, + 0x9c, 0xe1, 0x14, 0xf1, 0x1a, 0x2b, 0xca, 0x6c, 0x37, 0x86, 0x40, 0x12, 0x67, 0x08, 0x60, 0xba, + 0xd9, 0x94, 0xc1, 0xe3, 0x9d, 0xe6, 0x1d, 0xbf, 0xcf, 0xe6, 0xe4, 0xcd, 0x66, 0x2a, 0x21, 0xdd, + 0x6c, 0xa6, 0x22, 0xf1, 0x27, 0xb6, 0xec, 0xcd, 0xad, 0xcc, 0x43, 0x85, 0x97, 0x43, 0xbb, 0x60, + 0x2b, 0xa5, 0xa6, 0x7b, 0xb4, 0xad, 0x7a, 0x8b, 0xbf, 0x37, 0x70, 0xba, 0x54, 0xaa, 0x50, 0xd5, + 0xb1, 0xe0, 0xac, 0x82, 0x81, 0xa7, 0x7b, 0xb4, 0xc0, 0x2d, 0xf3, 0x59, 0x34, 0x08, 0x1f, 0x55, + 0xb1, 0x4c, 0xaf, 0x3c, 0xae, 0xbc, 0x26, 0x6f, 0x99, 0x04, 0x14, 0xdd, 0x32, 0x09, 0x3f, 0xe9, + 0x24, 0x0e, 0x3f, 0xd9, 0x14, 0x53, 0x1e, 0x57, 0x34, 0x79, 0x12, 0x97, 0x90, 0x74, 0x12, 0x97, + 0x00, 0x41, 0xbd, 0x65, 0xc7, 0x6e, 0x97, 0xc7, 0x95, 0x5a, 0x42, 0xbd, 0x0c, 0x15, 0xd4, 0xcb, + 0x7e, 0x06, 0xf5, 0xd6, 0x56, 0x3a, 0x5e, 0x99, 0x7e, 0xe3, 0x42, 0x42, 0xbd, 0x3e, 0x32, 0xa8, + 0xd7, 0x07, 0xd0, 0xa9, 0x10, 0x00, 0x55, 0xc7, 0xa6, 0x93, 0xf6, 0x0d, 0xb3, 0xd9, 0x54, 0x6e, + 0xca, 0x53, 0x61, 0x14, 0x4f, 0xa7, 0xc2, 0x28, 0x8c, 0x9a, 0x9e, 0xac, 0x55, 0x64, 0xb1, 0xb3, + 0xac, 0xdc, 0x92, 0x4d, 0xcf, 0x10, 0x43, 0x4d, 0xcf, 0xf0, 0x17, 0xec, 0x2e, 0xe8, 0x2f, 0x8d, + 0x2c, 0x39, 0xc4, 0x5d, 0x51, 0x6e, 0x47, 0x76, 0x17, 0x02, 0x0e, 0x76, 0x17, 0xc2, 0x6f, 0xbc, + 0x8c, 0xee, 0x97, 0x16, 0x1a, 0xff, 0xd2, 0xa6, 0x46, 0x74, 0xa7, 0xb1, 0xa2, 0x7c, 0x00, 0x58, + 0x3d, 0x94, 0xb8, 0x54, 0xc9, 0xa4, 0xd3, 0x3d, 0x5a, 0x37, 0x4e, 0xb0, 0x2d, 0x7f, 0x6d, 0x86, + 0x45, 0x98, 0xd4, 0xaa, 0x13, 0xfe, 0x26, 0xf4, 0xf5, 0xc8, 0xb6, 0x3c, 0x4e, 0x02, 0xdb, 0xf2, + 0x38, 0x18, 0xb7, 0xd1, 0xf9, 0xc8, 0x56, 0x6d, 0x56, 0x6f, 0xd2, 0x7d, 0x09, 0x31, 0xaa, 0x7a, + 0xe3, 0x0e, 0xf1, 0x94, 0x0f, 0x02, 0xef, 0x0b, 0x29, 0x1b, 0xbe, 0x08, 0xf5, 0x74, 0x8f, 0xb6, + 0x09, 0x3f, 0xac, 0xa2, 0x7c, 0x6d, 0x6a, 0xa1, 0xaa, 0x7c, 0x48, 0x3e, 0xdf, 0xa4, 0xb0, 0xe9, + 0x1e, 0x0d, 0x70, 0xd4, 0x4a, 0xbb, 0xd9, 0x5e, 0x76, 0x74, 0x83, 0x30, 0x43, 0x0b, 0x6c, 0x37, + 0x6e, 0x80, 0x7e, 0x58, 0xb6, 0xd2, 0xd2, 0xe8, 0xa8, 0x95, 0x96, 0x86, 0xa3, 0x8a, 0x2a, 0x25, + 0x53, 0x50, 0x3e, 0x22, 0x2b, 0xaa, 0x84, 0xa4, 0x8a, 0x2a, 0xa7, 0x5e, 0xf8, 0x00, 0x3a, 0x19, + 0xec, 0xe7, 0xf9, 0xfa, 0xcb, 0x3a, 0x4d, 0xf9, 0x28, 0xf0, 0x39, 0x1f, 0xbb, 0x0c, 0x90, 0xa8, + 0xa6, 0x7b, 0xb4, 0x94, 0xf2, 0x74, 0xc5, 0x8d, 0xe5, 0x09, 0xe2, 0xe6, 0xc5, 0xb7, 0xc8, 0x2b, + 0x6e, 0x0a, 0x19, 0x5d, 0x71, 0x53, 0x50, 0x89, 0xcc, 0xb9, 0x50, 0xf5, 0x4d, 0x98, 0x07, 0x32, + 0x4d, 0xe3, 0x90, 0xc8, 0x9c, 0x5b, 0x6a, 0x8b, 0x9b, 0x30, 0x0f, 0xac, 0xb5, 0x34, 0x0e, 0xf8, + 0x22, 0x2a, 0xd4, 0x6a, 0xb3, 0x5a, 0xc7, 0x52, 0x1a, 0x11, 0x6f, 0x59, 0x80, 0x4e, 0xf7, 0x68, + 0x1c, 0x4f, 0xcd, 0xa0, 0xc9, 0xa6, 0xee, 0x7a, 0x66, 0xc3, 0x85, 0x11, 0xe3, 0x8f, 0x10, 0x43, + 0x36, 0x83, 0x92, 0x68, 0xa8, 0x19, 0x94, 0x04, 0xa7, 0xf6, 0xe2, 0x84, 0xee, 0xba, 0xba, 0x65, + 0x38, 0xfa, 0x38, 0x2c, 0x13, 0x24, 0xf2, 0xa6, 0x48, 0xc2, 0x52, 0x7b, 0x51, 0x86, 0xc0, 0xe1, + 0xbb, 0x0f, 0xf1, 0xcd, 0x9c, 0xa5, 0xc8, 0xe1, 0x7b, 0x04, 0x0f, 0x87, 0xef, 0x11, 0x18, 0xd8, + 0x9d, 0x3e, 0x4c, 0x23, 0xcb, 0x26, 0x15, 0x91, 0xb2, 0x1c, 0xb1, 0x3b, 0xa3, 0x04, 0x60, 0x77, + 0x46, 0x81, 0x52, 0x93, 0xfc, 0xe5, 0x76, 0x25, 0xa5, 0x49, 0xe1, 0x2a, 0x1b, 0x2b, 0x43, 0xd7, + 0xef, 0x70, 0x70, 0x94, 0xd7, 0x2c, 0xbd, 0x65, 0x97, 0xc7, 0x7d, 0xa9, 0x9b, 0xf2, 0xfa, 0x9d, + 0x4a, 0x48, 0xd7, 0xef, 0x54, 0x24, 0x9d, 0x5d, 0xfd, 0x8d, 0xd6, 0x8a, 0xee, 0x10, 0xa3, 0x6c, + 0x3a, 0x70, 0xb2, 0xb8, 0xc6, 0xb6, 0x86, 0x6f, 0xc8, 0xb3, 0x6b, 0x17, 0x52, 0x3a, 0xbb, 0x76, + 0x41, 0x53, 0x23, 0x2f, 0x19, 0xad, 0x11, 0xdd, 0x50, 0xee, 0xc8, 0x46, 0x5e, 0x3a, 0x25, 0x35, + 0xf2, 0xd2, 0xb1, 0xe9, 0x9f, 0x73, 0xdb, 0x31, 0x3d, 0xa2, 0x34, 0xb7, 0xf2, 0x39, 0x40, 0x9a, + 0xfe, 0x39, 0x80, 0xa6, 0x1b, 0xc2, 0x68, 0x87, 0xb4, 0xe4, 0x0d, 0x61, 0xbc, 0x1b, 0xa2, 0x25, + 0xa8, 0xc5, 0xc2, 0x9f, 0x96, 0x29, 0x96, 0x6c, 0xb1, 0x70, 0x30, 0xb5, 0x58, 0xc2, 0xc7, 0x67, + 0xd2, 0x53, 0x26, 0xc5, 0x96, 0xd7, 0x50, 0x11, 0x47, 0xd7, 0x50, 0xe9, 0xd9, 0xd3, 0xb3, 0xd2, + 0x3b, 0x03, 0xa5, 0x2d, 0x5b, 0x1d, 0x02, 0x8a, 0x5a, 0x1d, 0xe2, 0x8b, 0x84, 0x09, 0x74, 0x0c, + 0x6e, 0xc1, 0xb5, 0x4e, 0x70, 0x8f, 0xf3, 0x31, 0xf9, 0x33, 0x23, 0x68, 0xfa, 0x99, 0x11, 0x90, + 0xc4, 0x84, 0x4f, 0x5b, 0x4e, 0x0a, 0x93, 0xf0, 0x7c, 0x30, 0x02, 0xc2, 0x33, 0x08, 0xd7, 0x4a, + 0xb3, 0x33, 0x15, 0xa3, 0x2a, 0x5e, 0x91, 0xb9, 0xf2, 0x09, 0x6c, 0x9c, 0x62, 0xba, 0x47, 0x4b, + 0x28, 0x87, 0xdf, 0x40, 0x67, 0x39, 0x94, 0xbf, 0x1b, 0x86, 0x24, 0xde, 0x46, 0xb0, 0x20, 0x78, + 0xb2, 0x1f, 0x5b, 0x37, 0xda, 0xe9, 0x1e, 0xad, 0x2b, 0xaf, 0xf4, 0xba, 0xf8, 0xfa, 0xd0, 0xd9, + 0x4a, 0x5d, 0xc1, 0x22, 0xd1, 0x95, 0x57, 0x7a, 0x5d, 0x5c, 0xee, 0x77, 0xb7, 0x52, 0x57, 0xd0, + 0x09, 0x5d, 0x79, 0x61, 0x17, 0x15, 0xbb, 0xe1, 0x4b, 0xcd, 0xa6, 0xb2, 0x0a, 0xd5, 0xbd, 0x67, + 0x2b, 0xd5, 0x95, 0xc0, 0xe0, 0xdc, 0x8c, 0x23, 0x9d, 0xa5, 0xe7, 0xdb, 0xc4, 0xaa, 0x49, 0x0b, + 0xd0, 0x3d, 0x79, 0x96, 0x8e, 0x11, 0xd0, 0x59, 0x3a, 0x06, 0xa4, 0x03, 0x4a, 0x7c, 0xae, 0xa2, + 0xac, 0xc9, 0x03, 0x4a, 0xc4, 0xd1, 0x01, 0x25, 0x3d, 0x6d, 0x99, 0x47, 0xc7, 0xe7, 0xef, 0x78, + 0xba, 0x6f, 0x41, 0xba, 0xbc, 0x2b, 0xdf, 0x8c, 0x5c, 0x32, 0xc5, 0x49, 0xe0, 0x92, 0x29, 0x0e, + 0xa6, 0x63, 0x84, 0x82, 0x6b, 0x6b, 0x56, 0x63, 0x4a, 0x37, 0x9b, 0x1d, 0x87, 0x28, 0xff, 0x97, + 0x3c, 0x46, 0x22, 0x68, 0x3a, 0x46, 0x22, 0x20, 0xba, 0x40, 0x53, 0x50, 0xc9, 0x75, 0xcd, 0x65, + 0x8b, 0xef, 0x2b, 0x3b, 0x4d, 0x4f, 0xf9, 0xbf, 0xe5, 0x05, 0x3a, 0x89, 0x86, 0x2e, 0xd0, 0x49, + 0x70, 0x38, 0x75, 0x4a, 0x48, 0x70, 0xaf, 0xfc, 0x3f, 0x91, 0x53, 0xa7, 0x04, 0x1a, 0x38, 0x75, + 0x4a, 0x4a, 0x8e, 0x3f, 0x85, 0x46, 0x99, 0x4d, 0x36, 0x63, 0x06, 0x77, 0xd5, 0xff, 0xaf, 0xbc, + 0x3e, 0x46, 0xf1, 0x74, 0x7d, 0x8c, 0xc2, 0x64, 0x3e, 0xbc, 0x0b, 0xfe, 0xbf, 0x34, 0x3e, 0x81, + 0xfc, 0x63, 0x65, 0xf0, 0x75, 0x91, 0x0f, 0x1f, 0x29, 0xdf, 0x9a, 0x49, 0x63, 0x14, 0x0c, 0x8f, + 0x58, 0x21, 0x99, 0x91, 0x46, 0xee, 0x9a, 0x64, 0x55, 0xf9, 0x78, 0x2a, 0x23, 0x46, 0x20, 0x33, + 0x62, 0x30, 0xfc, 0x3a, 0x3a, 0x19, 0xc2, 0x66, 0x49, 0x6b, 0x31, 0x98, 0x99, 0xbe, 0x2d, 0x23, + 0x9b, 0xc1, 0xc9, 0x64, 0xd4, 0x0c, 0x4e, 0xc6, 0x24, 0xb1, 0xe6, 0xa2, 0xfb, 0xff, 0x37, 0x61, + 0x1d, 0x48, 0x30, 0x85, 0x41, 0x12, 0x6b, 0x2e, 0xcd, 0x6f, 0xdf, 0x84, 0x75, 0x20, 0xd3, 0x14, + 0x06, 0xf8, 0x93, 0x19, 0x74, 0x21, 0x19, 0x55, 0x6a, 0x36, 0xa7, 0x6c, 0x27, 0xc4, 0x29, 0xdf, + 0x91, 0x91, 0x0f, 0x1a, 0xb6, 0x56, 0x6c, 0xba, 0x47, 0xdb, 0x62, 0x05, 0xf8, 0xfd, 0x68, 0xb8, + 0xd4, 0x31, 0x4c, 0x0f, 0x2e, 0xde, 0xa8, 0xe1, 0xfc, 0x9d, 0x99, 0xc8, 0x16, 0x47, 0xc4, 0xc2, + 0x16, 0x47, 0x04, 0xe0, 0x57, 0xd1, 0x58, 0x8d, 0x34, 0x3a, 0x8e, 0xe9, 0xad, 0x69, 0xa4, 0x6d, + 0x3b, 0x1e, 0xe5, 0xf1, 0x5d, 0x19, 0x79, 0x12, 0x8b, 0x51, 0xd0, 0x49, 0x2c, 0x06, 0xc4, 0xb7, + 0x52, 0x52, 0xdc, 0x2b, 0x9f, 0xc8, 0x74, 0xbd, 0x96, 0x0f, 0xfa, 0x32, 0x25, 0x43, 0x7e, 0x35, + 0x31, 0x65, 0xb8, 0xf2, 0xc9, 0x4c, 0x97, 0x6b, 0x74, 0x61, 0x86, 0x4b, 0xc8, 0x36, 0x5e, 0x4d, + 0x4c, 0x0a, 0xad, 0x7c, 0x77, 0xa6, 0xcb, 0xb5, 0x77, 0xc8, 0x31, 0x29, 0x9f, 0xf4, 0xd3, 0xcc, + 0x53, 0x84, 0x33, 0xfa, 0x9e, 0x4c, 0xdc, 0x55, 0x24, 0x28, 0x2f, 0x10, 0xd2, 0x62, 0x37, 0xdd, + 0x40, 0xe9, 0x3f, 0x95, 0x89, 0xfb, 0xe6, 0x85, 0xc5, 0xc2, 0x5f, 0x98, 0xa0, 0x33, 0x93, 0xf7, + 0x3c, 0xe2, 0x58, 0x7a, 0x13, 0xba, 0xb3, 0xe6, 0xd9, 0x8e, 0xbe, 0x4c, 0x26, 0x2d, 0x7d, 0xb1, + 0x49, 0x94, 0x4f, 0x67, 0x64, 0x0b, 0x36, 0x9d, 0x94, 0x5a, 0xb0, 0xe9, 0x58, 0xbc, 0x82, 0xee, + 0x4f, 0xc2, 0x96, 0x4d, 0x17, 0xea, 0xf9, 0x4c, 0x46, 0x36, 0x61, 0xbb, 0xd0, 0x52, 0x13, 0xb6, + 0x0b, 0x1a, 0x5f, 0x45, 0x03, 0xe3, 0xb6, 0x3f, 0xfd, 0x7e, 0x6f, 0xc4, 0x19, 0x32, 0xc0, 0x4c, + 0xf7, 0x68, 0x21, 0x19, 0x2f, 0xc3, 0x07, 0xf5, 0x67, 0xe3, 0x65, 0xc2, 0xcb, 0xa7, 0xe0, 0x07, + 0x2f, 0xc3, 0xc5, 0xfd, 0x37, 0xe2, 0x65, 0xc2, 0x3b, 0xae, 0xe0, 0x07, 0x9d, 0x49, 0x58, 0x8d, + 0xb3, 0x53, 0x25, 0x6a, 0xb7, 0x4d, 0xac, 0xe8, 0xcd, 0x26, 0xb1, 0x96, 0x89, 0xf2, 0xb9, 0xc8, + 0x4c, 0x92, 0x4c, 0x46, 0x67, 0x92, 0x64, 0x0c, 0xfe, 0x30, 0x3a, 0x75, 0x4b, 0x6f, 0x9a, 0x46, + 0x88, 0xf3, 0xf3, 0x0c, 0x2b, 0xdf, 0x97, 0x91, 0x77, 0xd3, 0x29, 0x74, 0x74, 0x37, 0x9d, 0x82, + 0xc2, 0xb3, 0x08, 0xc3, 0x32, 0x1a, 0xcc, 0x16, 0x74, 0x7d, 0x56, 0xfe, 0x66, 0x46, 0xb6, 0x53, + 0xe3, 0x24, 0xd4, 0x4e, 0x8d, 0x43, 0x71, 0x3d, 0x3d, 0x19, 0x84, 0xf2, 0xfd, 0x19, 0xf9, 0xb4, + 0x26, 0x8d, 0x70, 0xba, 0x47, 0x4b, 0xcf, 0x28, 0x71, 0x1d, 0x8d, 0xd6, 0xaa, 0x95, 0xa9, 0xa9, + 0xc9, 0xda, 0xad, 0x4a, 0x19, 0x1e, 0x3a, 0x18, 0xca, 0x0f, 0x44, 0x56, 0xac, 0x28, 0x01, 0x5d, + 0xb1, 0xa2, 0x30, 0x5c, 0x43, 0x27, 0xa8, 0x20, 0xaa, 0x0e, 0x59, 0x22, 0x0e, 0xb1, 0x1a, 0xfe, + 0xb0, 0xfc, 0xa1, 0x8c, 0x6c, 0x28, 0x24, 0x11, 0x51, 0x43, 0x21, 0x09, 0x8e, 0xef, 0xa0, 0xb3, + 0xd1, 0xc3, 0x1c, 0xf1, 0xe5, 0xa8, 0xf2, 0xc3, 0x99, 0x88, 0x3d, 0xdb, 0x85, 0x18, 0xec, 0xd9, + 0x2e, 0x78, 0x6c, 0xa1, 0x73, 0xfc, 0x64, 0x84, 0xfb, 0x4c, 0x46, 0x6b, 0xfb, 0x11, 0x56, 0xdb, + 0x23, 0xa1, 0x4f, 0x5f, 0x17, 0xea, 0xe9, 0x1e, 0xad, 0x3b, 0x3b, 0xaa, 0x2a, 0xf1, 0xac, 0x05, + 0xca, 0x8f, 0x66, 0x92, 0x9d, 0x4a, 0x24, 0x4f, 0xe3, 0xa4, 0x74, 0x07, 0xaf, 0xa7, 0xc5, 0xdc, + 0x57, 0x7e, 0x2c, 0x32, 0x64, 0x92, 0xc9, 0xe8, 0x90, 0x49, 0x09, 0xda, 0xff, 0x2a, 0x1a, 0x63, + 0x7a, 0x59, 0xd5, 0x61, 0x24, 0x59, 0xcb, 0xc4, 0x50, 0xfe, 0x56, 0x64, 0xc1, 0x8a, 0x51, 0x80, + 0x77, 0x4e, 0x14, 0x48, 0x67, 0xdf, 0x5a, 0x5b, 0xb7, 0x2c, 0x38, 0x29, 0x55, 0xfe, 0x76, 0x64, + 0xf6, 0x0d, 0x51, 0xe0, 0x7b, 0x1b, 0xfc, 0x82, 0xdc, 0x69, 0x49, 0x0f, 0xab, 0x95, 0xcf, 0x47, + 0xd6, 0xb9, 0x44, 0x2a, 0xba, 0xce, 0x25, 0xbf, 0xcb, 0xbe, 0x95, 0xf2, 0x28, 0x59, 0xf9, 0xf1, + 0xee, 0x7c, 0xc3, 0xf5, 0x33, 0xf9, 0x4d, 0xf3, 0xad, 0x94, 0x07, 0xbd, 0xca, 0x4f, 0x74, 0xe7, + 0x1b, 0xba, 0xcb, 0x25, 0xbf, 0x07, 0xae, 0xa7, 0x3f, 0x86, 0x55, 0x7e, 0x32, 0x3a, 0x21, 0xa4, + 0x10, 0xc2, 0x84, 0x90, 0xf6, 0xa2, 0x76, 0x11, 0x9d, 0x66, 0x9d, 0x76, 0xdd, 0xd1, 0xdb, 0x2b, + 0x35, 0xe2, 0x79, 0xa6, 0xb5, 0xec, 0xef, 0x6f, 0xfe, 0x4e, 0x26, 0x72, 0xe8, 0x94, 0x46, 0x09, + 0x87, 0x4e, 0x69, 0x48, 0xaa, 0x4f, 0xb1, 0x67, 0xaf, 0xca, 0x4f, 0x45, 0xf4, 0x29, 0x46, 0x41, + 0xf5, 0x29, 0xfe, 0x5a, 0xf6, 0xd5, 0x84, 0xd7, 0x9d, 0xca, 0xdf, 0x4d, 0xe7, 0x15, 0xb4, 0x2f, + 0xe1, 0x51, 0xe8, 0xab, 0x09, 0x8f, 0x18, 0x95, 0xbf, 0x97, 0xce, 0x2b, 0xf4, 0xec, 0x89, 0xbf, + 0x7d, 0x7c, 0x1d, 0x9d, 0x64, 0x73, 0xe4, 0x14, 0x31, 0x88, 0xf4, 0xa1, 0x3f, 0x1d, 0x19, 0x8e, + 0xc9, 0x64, 0x70, 0x90, 0x9d, 0x88, 0x49, 0x62, 0xcd, 0xdb, 0xfa, 0x33, 0x9b, 0xb0, 0x0e, 0xcd, + 0xec, 0x64, 0x0c, 0x7e, 0x41, 0x7e, 0x52, 0xa6, 0xfc, 0x6c, 0x26, 0xe2, 0x24, 0x21, 0x20, 0xc1, + 0x49, 0x42, 0x7c, 0x7f, 0xf6, 0x82, 0xfc, 0x7c, 0x4a, 0xf9, 0xfb, 0x89, 0x85, 0x83, 0x0e, 0x90, + 0xdf, 0x5a, 0xbd, 0x20, 0x3f, 0x15, 0x52, 0x7e, 0x2e, 0xb1, 0x70, 0xf0, 0x01, 0xf2, 0xbb, 0x22, + 0xba, 0xf1, 0xe8, 0x78, 0x36, 0x63, 0x25, 0x4d, 0x0f, 0x3f, 0x1f, 0xdd, 0x78, 0x24, 0x92, 0xc1, + 0xc6, 0x23, 0x11, 0x93, 0xc4, 0x9a, 0x7f, 0xde, 0x2f, 0x6c, 0xc2, 0x5a, 0xd8, 0x2e, 0x25, 0x62, + 0x92, 0x58, 0xf3, 0x8f, 0xff, 0xc2, 0x26, 0xac, 0x85, 0xed, 0x52, 0x22, 0x86, 0x1a, 0x39, 0x21, + 0xe6, 0x16, 0x71, 0xdc, 0x50, 0xfd, 0x7e, 0x31, 0x62, 0xe4, 0xa4, 0xd0, 0x51, 0x23, 0x27, 0x05, + 0x95, 0xc8, 0x9d, 0x0b, 0xe5, 0x97, 0x36, 0xe3, 0x1e, 0xde, 0x76, 0xa4, 0xa0, 0x12, 0xb9, 0x73, + 0xb9, 0xfc, 0xf2, 0x66, 0xdc, 0xc3, 0xeb, 0x8e, 0x14, 0x14, 0x35, 0x78, 0x26, 0x1c, 0x7b, 0xd5, + 0x7a, 0x95, 0xac, 0x92, 0x26, 0x17, 0xc9, 0x17, 0x23, 0x06, 0x4f, 0x94, 0x00, 0x0e, 0xe7, 0x23, + 0x30, 0x99, 0x11, 0xff, 0xfa, 0x5f, 0x4d, 0x65, 0x14, 0x9e, 0x3e, 0x44, 0x61, 0x32, 0x23, 0xfe, + 0xa1, 0xbf, 0x96, 0xca, 0x28, 0x3c, 0x7d, 0x88, 0xc2, 0xc6, 0xfb, 0x50, 0x2f, 0x1c, 0x4f, 0xa9, + 0x9f, 0xcf, 0xa0, 0xa1, 0x9a, 0xe7, 0x10, 0xbd, 0xc5, 0x83, 0x50, 0x9d, 0x41, 0xfd, 0xcc, 0xcf, + 0xd3, 0x7f, 0x94, 0xaa, 0x05, 0xbf, 0xf1, 0x05, 0x34, 0x32, 0xa3, 0xbb, 0x1e, 0x94, 0xac, 0x58, + 0x06, 0xb9, 0x07, 0x6f, 0x9c, 0x72, 0x5a, 0x04, 0x8a, 0x67, 0x18, 0x1d, 0x2b, 0x07, 0xd1, 0xff, + 0x72, 0x9b, 0xc6, 0x5e, 0xea, 0x7f, 0x6b, 0xbd, 0xd8, 0x03, 0xa1, 0x96, 0x22, 0x65, 0xd5, 0xaf, + 0x66, 0x50, 0xcc, 0x03, 0x75, 0xe7, 0x8f, 0xc5, 0xe7, 0xd1, 0xb1, 0x48, 0xc4, 0x49, 0xfe, 0x50, + 0x6b, 0x8b, 0x01, 0x29, 0xa3, 0xa5, 0xf1, 0x7b, 0x82, 0x07, 0x42, 0x37, 0xb5, 0x19, 0x1e, 0x57, + 0xab, 0x6f, 0x63, 0xbd, 0x98, 0xeb, 0x38, 0x4d, 0x4d, 0x40, 0xf1, 0xb8, 0x2f, 0xff, 0x60, 0x34, + 0x0c, 0xa7, 0x87, 0x2f, 0xf0, 0x97, 0xeb, 0x99, 0x30, 0x1a, 0x57, 0x24, 0x2f, 0x2f, 0x7b, 0xa9, + 0xfe, 0x7e, 0x34, 0x54, 0x69, 0xb5, 0x89, 0xe3, 0xda, 0x96, 0xee, 0xd9, 0x0e, 0x7f, 0xf8, 0x0b, + 0x91, 0x9a, 0x4c, 0x01, 0x2e, 0x46, 0x0f, 0x12, 0xe9, 0xf1, 0x25, 0x3f, 0x0d, 0x53, 0x0e, 0x02, + 0x19, 0xc2, 0xeb, 0xbd, 0x68, 0xae, 0x57, 0x46, 0x41, 0x49, 0x6f, 0xba, 0x3a, 0x3c, 0x25, 0x0b, + 0x48, 0x3b, 0x14, 0x20, 0x92, 0x02, 0x05, 0x7e, 0x0c, 0x15, 0xe0, 0xe8, 0xdd, 0x85, 0xf4, 0x6a, + 0x3c, 0x46, 0x58, 0x13, 0x20, 0x62, 0x44, 0x26, 0x46, 0x83, 0x6f, 0xa0, 0xd1, 0xf0, 0x5e, 0xf1, + 0xba, 0x63, 0x77, 0xda, 0x7e, 0x42, 0x05, 0xc8, 0x91, 0x7b, 0x27, 0xc0, 0xd5, 0x97, 0x01, 0x29, + 0xb0, 0x88, 0x15, 0xc4, 0xd3, 0xe8, 0x58, 0x08, 0xa3, 0x22, 0xf2, 0x13, 0xb9, 0x40, 0x8e, 0x68, + 0x81, 0x17, 0x15, 0xa7, 0xc8, 0x2a, 0x5a, 0x0c, 0x57, 0x50, 0x9f, 0x1f, 0x20, 0xac, 0x7f, 0x53, + 0x25, 0x3d, 0xce, 0x03, 0x84, 0xf5, 0x89, 0xa1, 0xc1, 0xfc, 0xf2, 0x78, 0x0a, 0x8d, 0x68, 0x76, + 0xc7, 0x23, 0x0b, 0x36, 0xb7, 0xe6, 0x79, 0xa4, 0x7f, 0x68, 0x93, 0x43, 0x31, 0x75, 0xcf, 0xf6, + 0x53, 0x0c, 0x8b, 0xa9, 0x6e, 0xe5, 0x52, 0x78, 0x0e, 0x8d, 0xc5, 0x6e, 0x60, 0xc5, 0xc4, 0xbf, + 0xc2, 0xe7, 0xc5, 0x99, 0xc5, 0x8b, 0xe2, 0xef, 0xcc, 0xa0, 0xc2, 0x82, 0xa3, 0x9b, 0x9e, 0xcb, + 0x5f, 0xa1, 0xdd, 0x77, 0x79, 0xd5, 0xd1, 0xdb, 0x54, 0x3f, 0x2e, 0x43, 0xa4, 0xca, 0x5b, 0x7a, + 0xb3, 0x43, 0xdc, 0xf1, 0xdb, 0xf4, 0xeb, 0xfe, 0xcd, 0x7a, 0xf1, 0x85, 0x65, 0x38, 0xe7, 0xb9, + 0xdc, 0xb0, 0x5b, 0x57, 0x96, 0x1d, 0xfd, 0xae, 0xe9, 0xc1, 0xba, 0xaf, 0x37, 0xaf, 0x78, 0xa4, + 0x09, 0xc7, 0x49, 0x57, 0xf4, 0xb6, 0x79, 0x05, 0x22, 0x22, 0x5f, 0x09, 0x38, 0xb1, 0x1a, 0xa8, + 0x0a, 0x78, 0xf0, 0x97, 0xa8, 0x02, 0x0c, 0x87, 0xe7, 0x10, 0xe2, 0x9f, 0x5a, 0x6a, 0xb7, 0xf9, + 0x93, 0x36, 0xe1, 0x10, 0xc6, 0xc7, 0x30, 0xc5, 0x0e, 0x04, 0xa6, 0xb7, 0xdb, 0x62, 0x6a, 0xf1, + 0x90, 0x8e, 0x6a, 0xc1, 0x02, 0x6f, 0x91, 0x2f, 0xa6, 0xe1, 0x50, 0xe2, 0x7e, 0x63, 0x13, 0x84, + 0x14, 0x2d, 0x86, 0x17, 0xd1, 0x31, 0xce, 0x37, 0x08, 0xbd, 0x3f, 0x22, 0xcf, 0x0a, 0x11, 0x34, + 0x53, 0xda, 0xa0, 0x8d, 0x06, 0x07, 0x8b, 0x75, 0x44, 0x4a, 0xe0, 0xf1, 0x30, 0xeb, 0xe4, 0x9c, + 0xde, 0x22, 0xae, 0x72, 0x0c, 0x34, 0xf6, 0xec, 0xc6, 0x7a, 0x51, 0xf1, 0xcb, 0x43, 0xac, 0xbc, + 0xc4, 0x0c, 0xcc, 0x50, 0x44, 0xe4, 0xc1, 0xb4, 0x7e, 0x34, 0x81, 0x47, 0x54, 0xe7, 0xe5, 0x22, + 0x78, 0x02, 0x0d, 0x07, 0x1e, 0xf5, 0x37, 0x6f, 0x56, 0xca, 0xf0, 0x66, 0x6e, 0x60, 0xfc, 0xdc, + 0xc6, 0x7a, 0xf1, 0x74, 0x24, 0xaa, 0xbf, 0xc8, 0x44, 0x2a, 0x23, 0x84, 0x21, 0x60, 0x8f, 0xe8, + 0x22, 0x61, 0x08, 0xda, 0x09, 0x61, 0x08, 0xaa, 0xf8, 0x25, 0x34, 0x58, 0xba, 0x5d, 0xe3, 0xe1, + 0x15, 0x5c, 0xe5, 0x78, 0x98, 0x4e, 0x05, 0x92, 0x70, 0xf3, 0x50, 0x0c, 0x62, 0xd3, 0x45, 0x7a, + 0x3c, 0x89, 0x46, 0x24, 0xa7, 0x1c, 0x57, 0x39, 0x01, 0x1c, 0xa0, 0xe5, 0x3a, 0x60, 0xea, 0x0e, + 0x47, 0x49, 0x69, 0xe1, 0xa5, 0x42, 0x54, 0x6b, 0xca, 0xa6, 0x0b, 0xa9, 0x29, 0x34, 0x02, 0x91, + 0x1c, 0xe0, 0x05, 0x5e, 0x3f, 0xd3, 0x1a, 0x83, 0xa3, 0xea, 0x0e, 0xc3, 0x49, 0x79, 0xe0, 0xe5, + 0x62, 0xf8, 0x0d, 0x84, 0x21, 0x99, 0x05, 0x31, 0xfc, 0x3b, 0x9a, 0x4a, 0xd9, 0x55, 0x4e, 0x42, + 0xc4, 0x5e, 0x1c, 0x7d, 0x39, 0x5e, 0x29, 0x8f, 0x5f, 0xe0, 0xd3, 0xc7, 0x79, 0x9d, 0x95, 0xaa, + 0xfb, 0xaf, 0xc6, 0xeb, 0xa6, 0x21, 0xb6, 0x38, 0x81, 0x2b, 0x5e, 0x45, 0xa7, 0xaa, 0x0e, 0xb9, + 0x6b, 0xda, 0x1d, 0xd7, 0x5f, 0x3e, 0xfc, 0x79, 0xeb, 0xd4, 0xa6, 0xf3, 0xd6, 0x83, 0xbc, 0xe2, + 0xfb, 0xda, 0x0e, 0xb9, 0x5b, 0xf7, 0xe3, 0xb4, 0x4a, 0x01, 0x0e, 0xd3, 0xb8, 0x53, 0x71, 0x41, + 0x14, 0x0b, 0x0e, 0x37, 0x89, 0xab, 0x28, 0xe1, 0x54, 0xcb, 0x82, 0x72, 0x98, 0x01, 0x4e, 0x14, + 0x57, 0xa4, 0x18, 0xd6, 0x10, 0xbe, 0x3e, 0xe1, 0xdf, 0xd7, 0x95, 0x1a, 0x2c, 0xab, 0xa3, 0x72, + 0x1a, 0x98, 0xa9, 0x54, 0x2c, 0xcb, 0x8d, 0x20, 0x66, 0x73, 0x5d, 0xe7, 0x78, 0x51, 0x2c, 0xf1, + 0xd2, 0x78, 0x06, 0x8d, 0x56, 0x1d, 0x38, 0x7a, 0xb8, 0x41, 0xd6, 0xaa, 0x76, 0xd3, 0x6c, 0xac, + 0xc1, 0x43, 0x40, 0x3e, 0x55, 0xb6, 0x19, 0xae, 0x7e, 0x87, 0xac, 0xd5, 0xdb, 0x80, 0x15, 0x97, + 0x95, 0x68, 0x49, 0x31, 0x86, 0xea, 0xfd, 0x5b, 0x8b, 0xa1, 0x4a, 0xd0, 0x28, 0xbf, 0xed, 0xbb, + 0xe7, 0x11, 0x8b, 0x2e, 0xf5, 0x2e, 0x7f, 0xf4, 0xa7, 0x44, 0x6e, 0x07, 0x03, 0x3c, 0xcf, 0x09, + 0xcf, 0x46, 0x19, 0x09, 0xc0, 0x62, 0xc3, 0xa2, 0x45, 0xd4, 0xcf, 0xe4, 0xc4, 0xa9, 0x13, 0x9f, + 0x45, 0x79, 0x21, 0x85, 0x07, 0x84, 0x5e, 0x84, 0x70, 0xc7, 0x79, 0x1e, 0xd7, 0x75, 0x80, 0x9b, + 0x1d, 0x41, 0x8c, 0x10, 0xc8, 0x6f, 0xe6, 0xc7, 0x55, 0x36, 0x0d, 0x2d, 0x24, 0x80, 0xdc, 0x52, + 0x9d, 0xc5, 0xa6, 0xd9, 0x80, 0x20, 0xd8, 0x39, 0x21, 0x28, 0x00, 0x40, 0x59, 0x0c, 0x6c, 0x81, + 0x04, 0x5f, 0x45, 0x83, 0xfe, 0x69, 0x55, 0x18, 0x7a, 0x14, 0x62, 0x23, 0xfb, 0xd9, 0xf3, 0x59, + 0xe8, 0x65, 0x81, 0x08, 0x3f, 0x8f, 0x50, 0x38, 0x92, 0xb9, 0x91, 0x04, 0xb3, 0xbc, 0x38, 0xf0, + 0xc5, 0x59, 0x3e, 0xa4, 0xa6, 0x73, 0x9e, 0xa8, 0x49, 0x7e, 0x36, 0x3d, 0x98, 0xf3, 0x24, 0xf5, + 0x13, 0xfb, 0x56, 0x2e, 0x82, 0xe7, 0xd1, 0x58, 0x4c, 0x79, 0x78, 0xa0, 0x52, 0xc8, 0xdb, 0x9b, + 0xa0, 0x79, 0xe2, 0x9a, 0x1a, 0x2b, 0xab, 0x7e, 0x5b, 0x36, 0xb6, 0x62, 0x50, 0xc1, 0x70, 0x2a, + 0xa1, 0x73, 0x40, 0x30, 0x3e, 0x6b, 0x26, 0x18, 0x81, 0x08, 0x5f, 0x44, 0xfd, 0x55, 0x3a, 0x5e, + 0x1b, 0x76, 0x93, 0x77, 0x15, 0x44, 0xe4, 0x69, 0x73, 0x98, 0x16, 0x60, 0xf1, 0x55, 0x21, 0xbf, + 0xa3, 0x10, 0xe0, 0xd7, 0xcf, 0xef, 0x28, 0x4e, 0xb8, 0x41, 0xa6, 0xc7, 0xab, 0x91, 0x54, 0x32, + 0x7e, 0xa6, 0xff, 0xf8, 0x6a, 0x15, 0x26, 0xca, 0x0a, 0x6c, 0xc5, 0xde, 0xcd, 0x6c, 0x45, 0xf5, + 0x37, 0x33, 0x71, 0xed, 0xc7, 0xd7, 0xe2, 0x51, 0x3e, 0x59, 0x92, 0x7f, 0x1f, 0x28, 0xd6, 0x1a, + 0xc4, 0xfb, 0x94, 0xe2, 0x75, 0x66, 0x77, 0x1c, 0xaf, 0x33, 0xb7, 0xcd, 0x78, 0x9d, 0xea, 0xff, + 0xcc, 0x77, 0xf5, 0x19, 0xdd, 0x97, 0xb8, 0x54, 0xcf, 0xd1, 0xfd, 0x0e, 0xad, 0xbd, 0xe4, 0xc6, + 0xac, 0x76, 0xe6, 0x12, 0x57, 0xd7, 0xd9, 0xa8, 0x71, 0x35, 0x99, 0x12, 0xbf, 0x8c, 0x86, 0xfc, + 0x0f, 0x80, 0x38, 0xb0, 0x42, 0xfc, 0xd2, 0x60, 0xad, 0x89, 0x44, 0x4c, 0x95, 0x0a, 0xe0, 0xa7, + 0xd1, 0x00, 0x58, 0x1a, 0x6d, 0xbd, 0xe1, 0x07, 0x09, 0x66, 0x51, 0x85, 0x7d, 0xa0, 0x18, 0x7b, + 0x29, 0xa0, 0xc4, 0x1f, 0x41, 0x05, 0x1e, 0xaf, 0x9e, 0xa5, 0x3e, 0xbe, 0xb2, 0x05, 0x27, 0xdb, + 0xcb, 0x62, 0xac, 0x7a, 0xb6, 0x77, 0x00, 0x80, 0xb4, 0x77, 0x60, 0x61, 0xea, 0x17, 0xd0, 0xf1, + 0xaa, 0x43, 0x0c, 0x70, 0xe7, 0x9e, 0xbc, 0xd7, 0x76, 0x78, 0x26, 0x01, 0x36, 0x80, 0x61, 0xe9, + 0x68, 0xfb, 0x68, 0xba, 0xa8, 0x71, 0xbc, 0xc0, 0x28, 0xa9, 0x38, 0xb5, 0x27, 0x58, 0x4b, 0x6e, + 0x90, 0xb5, 0x55, 0xdb, 0x31, 0x58, 0xb0, 0x7d, 0x6e, 0x4f, 0x70, 0x41, 0xdf, 0xe1, 0x28, 0xd1, + 0x9e, 0x90, 0x0b, 0x9d, 0x79, 0x0e, 0x0d, 0xee, 0x34, 0xde, 0xfb, 0x2f, 0x65, 0x53, 0x5e, 0x5f, + 0x1c, 0xde, 0x3c, 0x7d, 0x41, 0xce, 0xd4, 0xde, 0x94, 0x9c, 0xa9, 0xdf, 0xc8, 0xa6, 0x3c, 0x2d, + 0x39, 0xd4, 0xb9, 0x0d, 0x03, 0x61, 0xc8, 0xb9, 0x0d, 0xc3, 0xb4, 0x92, 0xa6, 0xa1, 0x89, 0x44, + 0x91, 0x2c, 0xa8, 0x85, 0x4d, 0xb3, 0xa0, 0xfe, 0x74, 0xae, 0xdb, 0xd3, 0x9b, 0x23, 0xd9, 0x6f, + 0x47, 0xf6, 0x57, 0xd1, 0x60, 0x20, 0xd9, 0x4a, 0x19, 0xec, 0x99, 0xe1, 0x20, 0xbb, 0x04, 0x03, + 0x43, 0x19, 0x81, 0x08, 0x5f, 0x62, 0x6d, 0xad, 0x99, 0x6f, 0xb2, 0x08, 0xeb, 0xc3, 0x3c, 0x76, + 0xb6, 0xee, 0xe9, 0x75, 0xd7, 0x7c, 0x93, 0x68, 0x01, 0x5a, 0xfd, 0xc7, 0xd9, 0xc4, 0xf7, 0x4b, + 0x47, 0x7d, 0xb4, 0x8d, 0x3e, 0x4a, 0x10, 0x22, 0x7b, 0x79, 0x75, 0x24, 0xc4, 0x6d, 0x08, 0xf1, + 0xcf, 0xb3, 0x89, 0xef, 0xd4, 0x8e, 0x84, 0xb8, 0x9d, 0xd9, 0xe2, 0x31, 0x34, 0xa0, 0xd9, 0xab, + 0xee, 0x04, 0xec, 0x59, 0xd8, 0x5c, 0x01, 0x13, 0xb5, 0x63, 0xaf, 0xba, 0x75, 0xd8, 0x8d, 0x68, + 0x21, 0x81, 0xfa, 0xcd, 0x6c, 0x97, 0x97, 0x7c, 0x47, 0x82, 0x7f, 0x3b, 0x97, 0xc8, 0x5f, 0xcd, + 0x4a, 0x2f, 0x05, 0x0f, 0x75, 0x92, 0xf0, 0x5a, 0x63, 0x85, 0xb4, 0xf4, 0x68, 0x92, 0x70, 0x17, + 0xa0, 0x3c, 0xc7, 0x68, 0x48, 0xa2, 0x7e, 0x29, 0x1b, 0x79, 0x2a, 0x79, 0x24, 0xbb, 0x2d, 0xcb, + 0x2e, 0xd0, 0x3a, 0xfe, 0xfa, 0xf3, 0x48, 0x72, 0x5b, 0x95, 0xdc, 0x27, 0xb2, 0x91, 0x87, 0xb2, + 0x87, 0x37, 0x5f, 0xf0, 0x97, 0xb2, 0xf1, 0x47, 0xbf, 0x87, 0x57, 0x93, 0x1e, 0x43, 0x03, 0x5c, + 0x0e, 0xc1, 0x52, 0xc1, 0xe6, 0x7d, 0x06, 0x84, 0x03, 0xd4, 0x80, 0x40, 0xfd, 0x8e, 0x2c, 0x92, + 0x1f, 0x30, 0x1f, 0x52, 0x1d, 0xfa, 0xd5, 0xac, 0xfc, 0x74, 0xfb, 0xf0, 0xea, 0xcf, 0x65, 0x84, + 0x6a, 0x9d, 0xc5, 0x06, 0x8f, 0xfc, 0xd9, 0x2b, 0x9c, 0xc0, 0x07, 0x50, 0x4d, 0xa0, 0x50, 0xff, + 0x57, 0x36, 0xf1, 0x3d, 0xf9, 0xe1, 0x15, 0xe0, 0x53, 0x70, 0x2a, 0xde, 0xb0, 0xc2, 0x89, 0x1c, + 0x0e, 0x21, 0xe9, 0xf8, 0x8b, 0xa5, 0x36, 0xf3, 0x09, 0xf1, 0xfb, 0x12, 0xcc, 0x35, 0x08, 0x1c, + 0x1f, 0x9a, 0x6b, 0xe2, 0x0d, 0x83, 0x60, 0xb8, 0xfd, 0x4e, 0x76, 0xb3, 0xe7, 0xf7, 0x87, 0x79, + 0x55, 0xed, 0xab, 0xea, 0x6b, 0x10, 0x26, 0x8e, 0xf6, 0xc4, 0x10, 0x4b, 0xbc, 0xd5, 0x66, 0x20, + 0xf1, 0x46, 0x8c, 0x53, 0xa9, 0x7f, 0xda, 0x9b, 0xfc, 0xf6, 0xfb, 0xf0, 0x8a, 0xf0, 0x2c, 0xca, + 0x57, 0x75, 0x6f, 0x85, 0x6b, 0x32, 0xdc, 0xd6, 0xb5, 0x75, 0x6f, 0x45, 0x03, 0x28, 0xbe, 0x84, + 0xfa, 0x35, 0x7d, 0x95, 0x9d, 0x79, 0x16, 0xc2, 0xa4, 0x68, 0x8e, 0xbe, 0x5a, 0x67, 0xe7, 0x9e, + 0x01, 0x1a, 0xab, 0x41, 0x52, 0x3e, 0x76, 0xf2, 0x0d, 0x19, 0xad, 0x58, 0x52, 0xbe, 0x20, 0x15, + 0xdf, 0x59, 0x94, 0x1f, 0xb7, 0x8d, 0x35, 0x70, 0x66, 0x19, 0x62, 0x95, 0x2d, 0xda, 0xc6, 0x9a, + 0x06, 0x50, 0xfc, 0xc9, 0x0c, 0xea, 0x9b, 0x26, 0xba, 0x41, 0x47, 0xc8, 0x40, 0x37, 0x5f, 0x90, + 0x0f, 0xec, 0x8d, 0x2f, 0xc8, 0xd8, 0x0a, 0xab, 0x4c, 0x54, 0x14, 0x5e, 0x3f, 0xbe, 0x8e, 0xfa, + 0x27, 0x74, 0x8f, 0x2c, 0xdb, 0xce, 0x1a, 0x78, 0xb7, 0x8c, 0x84, 0x9e, 0xce, 0x92, 0xfe, 0xf8, + 0x44, 0xec, 0x66, 0xac, 0xc1, 0x7f, 0x69, 0x41, 0x61, 0x2a, 0x16, 0x9e, 0xac, 0x7b, 0x30, 0x14, + 0x0b, 0xcb, 0xca, 0x1d, 0xe4, 0xe4, 0x0e, 0x8e, 0x95, 0x87, 0x92, 0x8f, 0x95, 0xc1, 0x7a, 0x04, + 0x0f, 0x38, 0x48, 0x85, 0x37, 0x0c, 0x8b, 0x3e, 0xb3, 0x1e, 0x01, 0x0a, 0x99, 0xf0, 0x34, 0x81, + 0x44, 0xfd, 0x5a, 0x2f, 0x4a, 0x7c, 0x29, 0x7a, 0xa4, 0xe4, 0x47, 0x4a, 0x1e, 0x2a, 0x79, 0x39, + 0xa6, 0xe4, 0x67, 0xe2, 0x6f, 0x8f, 0xdf, 0xa1, 0x1a, 0xfe, 0x83, 0xf9, 0x58, 0xe4, 0x82, 0xc3, + 0xbd, 0xbb, 0x0c, 0xa5, 0xd7, 0xbb, 0xa9, 0xf4, 0x82, 0x01, 0x51, 0xd8, 0x74, 0x40, 0xf4, 0x6d, + 0x75, 0x40, 0xf4, 0xa7, 0x0e, 0x88, 0x50, 0x41, 0x06, 0x52, 0x15, 0xa4, 0xc2, 0x07, 0x0d, 0xea, + 0x9e, 0x40, 0xe1, 0xec, 0xc6, 0x7a, 0x71, 0x84, 0x8e, 0xa6, 0xc4, 0xcc, 0x09, 0xc0, 0x42, 0xfd, + 0x6a, 0xbe, 0x4b, 0xb8, 0x91, 0x7d, 0xd1, 0x91, 0xa7, 0x50, 0xae, 0xd4, 0x6e, 0x73, 0xfd, 0x38, + 0x2e, 0x44, 0x3a, 0x49, 0x29, 0x45, 0xa9, 0xf1, 0xf3, 0x28, 0x57, 0xba, 0x5d, 0x8b, 0x26, 0x4d, + 0x28, 0xdd, 0xae, 0xf1, 0x2f, 0x49, 0x2d, 0x7b, 0xbb, 0x86, 0x5f, 0x0c, 0xa3, 0x17, 0xae, 0x74, + 0xac, 0x3b, 0x7c, 0xa3, 0xc8, 0x9d, 0x60, 0x7d, 0x4f, 0x9b, 0x06, 0x45, 0xd1, 0xed, 0x62, 0x84, + 0x36, 0xa2, 0x4d, 0x85, 0xad, 0x6b, 0x53, 0xdf, 0xa6, 0xda, 0xd4, 0xbf, 0x55, 0x6d, 0x1a, 0xd8, + 0x82, 0x36, 0xa1, 0x4d, 0xb5, 0x69, 0x70, 0xf7, 0xda, 0xd4, 0x46, 0x67, 0xe2, 0x21, 0xa2, 0x02, + 0x8d, 0xd0, 0x10, 0x8e, 0x63, 0xb9, 0x63, 0x09, 0x5c, 0xfd, 0x77, 0x18, 0xb6, 0xce, 0x92, 0xea, + 0x47, 0x53, 0xd2, 0x6b, 0x09, 0xa5, 0xd5, 0x5f, 0xca, 0xa6, 0x47, 0xb6, 0x3a, 0x98, 0x53, 0xdc, + 0xb7, 0x24, 0x4a, 0x29, 0x2f, 0xbf, 0x34, 0x4e, 0x97, 0x72, 0x84, 0x6d, 0x92, 0xcc, 0xbe, 0x92, + 0x49, 0x0b, 0xb7, 0xb5, 0x2b, 0x89, 0x3d, 0x12, 0x77, 0x56, 0x03, 0xef, 0x79, 0x57, 0xf6, 0x52, + 0x8b, 0xe6, 0x68, 0xcf, 0xed, 0x30, 0x47, 0xfb, 0x6f, 0x66, 0xd0, 0xf1, 0x1b, 0x9d, 0x45, 0xc2, + 0x9d, 0xd3, 0x82, 0x66, 0xbc, 0x81, 0x10, 0x05, 0x73, 0x27, 0x96, 0x0c, 0x38, 0xb1, 0xbc, 0x57, + 0x0c, 0x95, 0x15, 0x29, 0x70, 0x39, 0xa4, 0x66, 0x0e, 0x2c, 0xe7, 0x7c, 0x17, 0xcb, 0x3b, 0x9d, + 0x45, 0x52, 0x8f, 0x79, 0xb2, 0x08, 0xdc, 0xcf, 0xbc, 0xc4, 0x9c, 0xd7, 0x77, 0xea, 0x34, 0xf2, + 0x0b, 0xd9, 0xd4, 0xe8, 0x64, 0x07, 0x36, 0x8d, 0xde, 0x87, 0x12, 0x7b, 0x25, 0x9a, 0x4e, 0x2f, + 0x81, 0x24, 0xc2, 0x31, 0x89, 0x4b, 0xb2, 0xc0, 0x0e, 0x78, 0x72, 0xc7, 0xb7, 0x55, 0x60, 0xbf, + 0x9f, 0x49, 0x8d, 0x22, 0x77, 0x50, 0x05, 0xa6, 0xfe, 0xc7, 0x9c, 0x1f, 0xbc, 0x6e, 0x57, 0x9f, + 0xf0, 0x18, 0x1a, 0xe0, 0x19, 0x7a, 0x64, 0xdf, 0x5a, 0x7e, 0x94, 0x07, 0x47, 0xc3, 0x01, 0x01, + 0x5d, 0xe6, 0xfd, 0xe0, 0x5a, 0x41, 0x56, 0x7f, 0x58, 0xe6, 0x4d, 0x0e, 0xa5, 0xf4, 0x02, 0x09, + 0x5d, 0xc8, 0x27, 0xef, 0x99, 0x1e, 0x58, 0x05, 0xb4, 0x2f, 0x73, 0x6c, 0x21, 0x27, 0xf7, 0x4c, + 0x8f, 0xd9, 0x04, 0x01, 0x9a, 0x2e, 0xd2, 0xb5, 0x30, 0x75, 0x35, 0x5f, 0xa4, 0x5d, 0x9e, 0xc1, + 0x9b, 0x3f, 0xe6, 0x7a, 0x0c, 0x0d, 0x70, 0x87, 0x55, 0xee, 0x66, 0xc2, 0x5b, 0xcb, 0x5d, 0x5c, + 0xa1, 0xb5, 0x01, 0x01, 0xe5, 0xa8, 0x91, 0xe5, 0xd0, 0xb1, 0x0e, 0x38, 0x3a, 0x00, 0xd1, 0x38, + 0x06, 0x5f, 0x45, 0x23, 0x35, 0x4f, 0xb7, 0x0c, 0xdd, 0x31, 0xe6, 0x3b, 0x5e, 0xbb, 0xe3, 0x89, + 0x46, 0xa9, 0xeb, 0x19, 0x76, 0xc7, 0xd3, 0x22, 0x14, 0xf8, 0x09, 0x34, 0xec, 0x43, 0x26, 0x1d, + 0xc7, 0x76, 0x44, 0xcb, 0xc3, 0xf5, 0x0c, 0xe2, 0x38, 0x9a, 0x4c, 0x80, 0xdf, 0x87, 0x86, 0x2b, + 0xd6, 0x5d, 0xbb, 0xc1, 0x5e, 0xdc, 0x6a, 0x33, 0xdc, 0x0e, 0x81, 0x07, 0x52, 0x66, 0x80, 0xa8, + 0x77, 0x9c, 0xa6, 0x26, 0x13, 0xaa, 0x1b, 0xd9, 0x78, 0x8c, 0xbf, 0xc3, 0xbb, 0x69, 0xb9, 0x24, + 0x3b, 0xd3, 0x81, 0x07, 0x29, 0x18, 0x84, 0xa2, 0x2f, 0x2f, 0xb3, 0x0b, 0xaf, 0xa2, 0xfe, 0x1b, + 0x64, 0x8d, 0xf9, 0x7d, 0x16, 0x42, 0x57, 0xe1, 0x3b, 0x1c, 0x26, 0x9e, 0xb8, 0xfa, 0x74, 0xea, + 0x97, 0xb3, 0xf1, 0xe8, 0x85, 0x87, 0x57, 0xd8, 0x4f, 0xa0, 0x3e, 0x10, 0x65, 0xc5, 0x3f, 0xf2, + 0x07, 0x01, 0x82, 0xb8, 0x65, 0x0f, 0x64, 0x9f, 0x4c, 0xfd, 0xf1, 0x42, 0x34, 0xa4, 0xe5, 0xe1, + 0x95, 0xde, 0x0b, 0x68, 0x70, 0xc2, 0xb6, 0x5c, 0xd3, 0xf5, 0x88, 0xd5, 0xf0, 0x15, 0xf6, 0x34, + 0x35, 0xa8, 0x1a, 0x21, 0x58, 0x7c, 0x19, 0x24, 0x50, 0xef, 0x44, 0x79, 0xf1, 0x33, 0x68, 0x00, + 0x44, 0x0e, 0x7e, 0xd2, 0x6c, 0xc2, 0x83, 0xdb, 0x82, 0x45, 0x0a, 0x8c, 0x3a, 0x49, 0x87, 0xa4, + 0xf8, 0x26, 0xea, 0x9f, 0x58, 0x31, 0x9b, 0x86, 0x43, 0x2c, 0xf0, 0x17, 0x16, 0x62, 0x1c, 0xc8, + 0x7d, 0x79, 0x19, 0xfe, 0x05, 0x5a, 0xd6, 0x9c, 0x06, 0x2f, 0x26, 0xbd, 0x8d, 0xe2, 0xb0, 0x33, + 0xdf, 0x9f, 0x45, 0x28, 0x2c, 0x80, 0x1f, 0x40, 0xd9, 0x20, 0x2b, 0x2c, 0xb8, 0xa9, 0x48, 0x1a, + 0x94, 0x85, 0xa5, 0x82, 0x8f, 0xed, 0xec, 0xa6, 0x63, 0xfb, 0x26, 0x2a, 0xb0, 0x13, 0x2f, 0xf0, + 0x24, 0x17, 0xa2, 0xec, 0xa5, 0x36, 0xf8, 0x32, 0xd0, 0xb3, 0xcd, 0x2c, 0x58, 0x9e, 0x92, 0x57, + 0x36, 0x63, 0x76, 0xa6, 0x81, 0x7a, 0xe1, 0x2f, 0x7c, 0x01, 0xe5, 0x17, 0xfc, 0x8c, 0x92, 0xc3, + 0x6c, 0x96, 0x8e, 0xc8, 0x0f, 0xf0, 0xb4, 0x9b, 0x26, 0x6c, 0xcb, 0xa3, 0x55, 0x43, 0xab, 0x87, + 0xb8, 0x5c, 0x38, 0x4c, 0x92, 0x0b, 0x87, 0xa9, 0xff, 0x2c, 0x9b, 0x10, 0x6c, 0xf5, 0xf0, 0x0e, + 0x93, 0xe7, 0x10, 0x82, 0x87, 0xd6, 0x54, 0x9e, 0xfe, 0x13, 0x0d, 0x18, 0x25, 0xc0, 0x08, 0xd4, + 0x56, 0xda, 0x76, 0x84, 0xc4, 0xea, 0x6f, 0x67, 0x62, 0x11, 0x3a, 0x77, 0x25, 0x47, 0xd1, 0x2a, + 0xcb, 0xee, 0xd0, 0x8c, 0xf5, 0xfb, 0x22, 0xb7, 0xbd, 0xbe, 0x90, 0xbf, 0x65, 0x0f, 0x2c, 0xd3, + 0xfd, 0xfc, 0x96, 0xaf, 0x65, 0x93, 0xe2, 0x95, 0x1e, 0x4c, 0x15, 0xbf, 0x16, 0x18, 0xa5, 0xf9, + 0x48, 0x84, 0x68, 0x80, 0x46, 0xb3, 0xde, 0x72, 0x33, 0xf5, 0xa3, 0xe8, 0x58, 0x24, 0x8a, 0x27, + 0x4f, 0x40, 0x7a, 0xa1, 0x7b, 0x38, 0xd0, 0xf4, 0x27, 0xfa, 0x12, 0x99, 0xfa, 0xbf, 0x33, 0xdd, + 0x63, 0xb8, 0xee, 0xbb, 0xea, 0x24, 0x08, 0x20, 0xf7, 0xd7, 0x23, 0x80, 0x3d, 0xd8, 0x06, 0x1f, + 0x6c, 0x01, 0xbc, 0x43, 0x26, 0x8f, 0xb7, 0x5b, 0x00, 0x3f, 0x9e, 0xd9, 0x34, 0x04, 0xef, 0x7e, + 0xcb, 0x40, 0xfd, 0x77, 0x99, 0xc4, 0x50, 0xb9, 0xbb, 0x6a, 0xd7, 0x8b, 0xa8, 0xc0, 0xdc, 0x6a, + 0x78, 0xab, 0x84, 0xe4, 0x42, 0x14, 0x9a, 0x96, 0x8e, 0x9b, 0x61, 0xf1, 0x0c, 0xea, 0x63, 0x6d, + 0x30, 0x78, 0x6f, 0x3c, 0xdc, 0x25, 0x5e, 0xaf, 0x91, 0x36, 0x39, 0x72, 0xb4, 0xfa, 0x5b, 0x99, + 0x58, 0xe4, 0xde, 0x7d, 0xfc, 0xb6, 0x70, 0xaa, 0xce, 0x6d, 0x7d, 0xaa, 0x56, 0xff, 0x24, 0x9b, + 0x1c, 0x38, 0x78, 0x1f, 0x3f, 0x64, 0x2f, 0x8e, 0xd3, 0x76, 0xb6, 0x6e, 0x2d, 0xa0, 0x11, 0x59, + 0x16, 0x7c, 0xd9, 0x3a, 0x9f, 0x1c, 0x3e, 0x39, 0xa5, 0x15, 0x11, 0x1e, 0xea, 0x5b, 0x99, 0x78, + 0xcc, 0xe3, 0x7d, 0x9f, 0x9f, 0x76, 0xa6, 0x2d, 0xf2, 0xa7, 0xbc, 0x43, 0xd6, 0x9a, 0xbd, 0xf8, + 0x94, 0x77, 0xc8, 0xaa, 0xb1, 0xb3, 0x4f, 0xf9, 0xd9, 0x6c, 0x5a, 0xc8, 0xe8, 0x7d, 0xff, 0xa0, + 0x0f, 0x8a, 0x42, 0x66, 0x2d, 0xe3, 0x9f, 0xf6, 0x40, 0x5a, 0x8c, 0xe6, 0x14, 0x9e, 0x31, 0x3e, + 0x3b, 0x1b, 0xe3, 0x89, 0xc2, 0x7a, 0x87, 0x28, 0xf2, 0xc1, 0x10, 0xd6, 0x3b, 0x64, 0xa8, 0xbc, + 0xf3, 0x84, 0xf5, 0xeb, 0xd9, 0xad, 0xc6, 0x29, 0x3f, 0x12, 0x5e, 0x4c, 0x78, 0x9f, 0xcd, 0xc6, + 0xe3, 0xe7, 0xef, 0xbb, 0x98, 0xa6, 0x50, 0x81, 0x47, 0xf2, 0x4f, 0x15, 0x0e, 0xc3, 0xa7, 0x59, + 0x34, 0xfc, 0x3b, 0xae, 0x21, 0x7e, 0x91, 0xb3, 0x35, 0x91, 0x30, 0x5a, 0xf5, 0x9b, 0x99, 0x48, + 0xb0, 0xf9, 0x7d, 0x39, 0x42, 0xd8, 0xd1, 0x92, 0x84, 0x5f, 0xf2, 0x0f, 0x33, 0xf3, 0x91, 0x48, + 0xc1, 0xc1, 0xf7, 0x94, 0x89, 0xa7, 0x9b, 0xcd, 0x68, 0x79, 0x1e, 0x13, 0xe0, 0xcb, 0x59, 0x34, + 0x16, 0x23, 0xc5, 0x17, 0xa4, 0x28, 0x39, 0x70, 0x2c, 0x19, 0x71, 0x1e, 0x67, 0xf1, 0x72, 0xb6, + 0x71, 0x92, 0x7a, 0x01, 0xe5, 0xcb, 0xfa, 0x1a, 0xfb, 0xb6, 0x5e, 0xc6, 0xd2, 0xd0, 0xd7, 0xc4, + 0x13, 0x37, 0xc0, 0xe3, 0x45, 0x74, 0x1f, 0xbb, 0x0f, 0x31, 0x6d, 0x6b, 0xc1, 0x6c, 0x91, 0x8a, + 0x35, 0x6b, 0x36, 0x9b, 0xa6, 0xcb, 0x2f, 0xf5, 0x1e, 0xdb, 0x58, 0x2f, 0x5e, 0xf4, 0x6c, 0x4f, + 0x6f, 0xd6, 0x89, 0x4f, 0x56, 0xf7, 0xcc, 0x16, 0xa9, 0x9b, 0x56, 0xbd, 0x05, 0x94, 0x02, 0xcb, + 0x64, 0x56, 0xb8, 0xc2, 0x82, 0x42, 0xd7, 0x1a, 0xba, 0x65, 0x11, 0xa3, 0x62, 0x8d, 0xaf, 0x79, + 0x84, 0x5d, 0x06, 0xe6, 0xd8, 0x91, 0x20, 0x7b, 0x1b, 0xce, 0xd0, 0x94, 0xf1, 0x22, 0x25, 0xd0, + 0x12, 0x0a, 0xa9, 0xbf, 0x91, 0x4f, 0xc8, 0x33, 0x70, 0x80, 0xd4, 0xc7, 0xef, 0xe9, 0xfc, 0x26, + 0x3d, 0x7d, 0x05, 0xf5, 0xf1, 0x10, 0x9f, 0xfc, 0x82, 0x01, 0x9c, 0xd9, 0xef, 0x32, 0x90, 0x78, + 0x43, 0xc3, 0xa9, 0x70, 0x13, 0x9d, 0x59, 0xa0, 0xdd, 0x94, 0xdc, 0x99, 0x85, 0x1d, 0x74, 0x66, + 0x17, 0x7e, 0xf8, 0x75, 0x74, 0x0a, 0xb0, 0x09, 0xdd, 0xda, 0x07, 0x55, 0x41, 0xe4, 0x28, 0x56, + 0x55, 0x72, 0xe7, 0xa6, 0x95, 0xc7, 0x1f, 0x44, 0x43, 0xc1, 0x00, 0x31, 0x89, 0xcb, 0x6f, 0x2e, + 0xba, 0x8c, 0x33, 0x16, 0x96, 0x8d, 0x82, 0xc1, 0x85, 0x4c, 0x0e, 0xed, 0x25, 0xf1, 0x52, 0xff, + 0x6d, 0xa6, 0x5b, 0xbe, 0x83, 0x7d, 0x9f, 0x95, 0x5f, 0x42, 0x7d, 0x06, 0xfb, 0x28, 0xae, 0x53, + 0xdd, 0x33, 0x22, 0x30, 0x52, 0xcd, 0x2f, 0xa3, 0xfe, 0x71, 0xa6, 0x6b, 0x9a, 0x85, 0x83, 0xfe, + 0x79, 0x9f, 0xcd, 0xa5, 0x7c, 0x1e, 0x9f, 0x44, 0x2f, 0xa1, 0x51, 0x33, 0x8c, 0x58, 0x5d, 0x0f, + 0xc3, 0x4f, 0x69, 0xc7, 0x04, 0x38, 0x8c, 0xae, 0x6b, 0xe8, 0xa4, 0xef, 0xf8, 0xe8, 0xf8, 0x1e, + 0x62, 0x6e, 0xbd, 0xe3, 0x98, 0x6c, 0x5c, 0x6a, 0x27, 0xdc, 0x88, 0xfb, 0x98, 0x7b, 0xd3, 0x31, + 0x69, 0x05, 0xba, 0xb7, 0x42, 0x2c, 0xbd, 0xbe, 0x6a, 0x3b, 0x77, 0x20, 0xf6, 0x27, 0x1b, 0x9c, + 0xda, 0x31, 0x06, 0xbf, 0xed, 0x83, 0xf1, 0x43, 0x68, 0x78, 0xb9, 0xd9, 0x21, 0x41, 0xb4, 0x45, + 0x76, 0xd7, 0xa7, 0x0d, 0x51, 0x60, 0x70, 0x43, 0x72, 0x0e, 0x21, 0x20, 0xf2, 0x20, 0x09, 0x06, + 0x5c, 0xec, 0x69, 0x03, 0x14, 0xb2, 0xc0, 0xbb, 0xeb, 0x0c, 0xd3, 0x6a, 0x26, 0xa4, 0x7a, 0xd3, + 0xb6, 0x96, 0xeb, 0x1e, 0x71, 0x5a, 0xd0, 0x50, 0x70, 0x66, 0xd0, 0x4e, 0x02, 0x05, 0x5c, 0x9d, + 0xb8, 0x33, 0xb6, 0xb5, 0xbc, 0x40, 0x9c, 0x16, 0x6d, 0xea, 0x63, 0x08, 0xf3, 0xa6, 0x3a, 0x70, + 0xe8, 0xc1, 0x3e, 0x0e, 0xbc, 0x19, 0x34, 0xfe, 0x11, 0xec, 0x34, 0x04, 0x3e, 0xac, 0x88, 0x06, + 0x59, 0xc8, 0x39, 0x26, 0x34, 0x70, 0x61, 0xd0, 0x10, 0x03, 0x81, 0xbc, 0x4e, 0x22, 0xee, 0x5d, + 0xc1, 0xbc, 0xba, 0x35, 0xfe, 0x4b, 0xfd, 0x54, 0x2e, 0x29, 0x33, 0xc4, 0xae, 0x14, 0x2d, 0x9c, + 0x56, 0xb3, 0xdb, 0x9a, 0x56, 0x8f, 0x59, 0x9d, 0x56, 0x5d, 0x6f, 0xb7, 0xeb, 0x4b, 0x66, 0x13, + 0x9e, 0x55, 0xc1, 0xc2, 0xa7, 0x0d, 0x5b, 0x9d, 0x56, 0xa9, 0xdd, 0x9e, 0x62, 0x40, 0xfc, 0x28, + 0x1a, 0xa3, 0x74, 0xd0, 0x49, 0x01, 0x65, 0x1e, 0x28, 0x29, 0x03, 0x88, 0xd9, 0xea, 0xd3, 0x9e, + 0x46, 0xfd, 0x9c, 0x27, 0x5b, 0xab, 0x7a, 0xb5, 0x3e, 0xc6, 0xcc, 0xa5, 0x3d, 0x17, 0xb0, 0x61, + 0x93, 0x6b, 0xaf, 0x36, 0xe0, 0x97, 0x87, 0xc8, 0xc4, 0x56, 0xa7, 0xc5, 0x22, 0x62, 0xf5, 0x01, + 0x32, 0xf8, 0x8d, 0x2f, 0xa0, 0x11, 0xca, 0x25, 0x10, 0x18, 0x0b, 0xe6, 0xda, 0xab, 0x45, 0xa0, + 0xf8, 0x2a, 0x3a, 0x21, 0x41, 0x98, 0x0d, 0xca, 0x9e, 0x09, 0xf4, 0x6a, 0x89, 0x38, 0xf5, 0xad, + 0x5c, 0x3c, 0xf1, 0xc5, 0xbe, 0xac, 0x8d, 0xd3, 0x08, 0xf1, 0xbc, 0x36, 0xe1, 0x05, 0x4d, 0xe0, + 0xb5, 0x1c, 0x62, 0x52, 0x78, 0x08, 0x65, 0xf1, 0x25, 0xd4, 0xcf, 0xbe, 0xa8, 0x52, 0xe6, 0x6b, + 0x26, 0xb8, 0x19, 0xb9, 0x6d, 0x73, 0x69, 0x09, 0x7c, 0x92, 0x02, 0x34, 0xbe, 0x80, 0xfa, 0xca, + 0x73, 0xb5, 0x5a, 0x69, 0xce, 0xbf, 0x6d, 0x84, 0x37, 0x0a, 0x86, 0xe5, 0xd6, 0x5d, 0xdd, 0x72, + 0x35, 0x1f, 0x89, 0x1f, 0x42, 0x85, 0x4a, 0x15, 0xc8, 0xd8, 0xcb, 0xbb, 0xc1, 0x8d, 0xf5, 0x62, + 0x9f, 0xd9, 0x66, 0x54, 0x1c, 0x05, 0xf5, 0xde, 0xaa, 0x94, 0x85, 0x2b, 0x77, 0x56, 0xef, 0x5d, + 0xd3, 0x80, 0xab, 0x4b, 0x2d, 0x40, 0xe3, 0xa7, 0xd1, 0x50, 0x8d, 0x38, 0xa6, 0xde, 0x9c, 0xeb, + 0xc0, 0x76, 0x83, 0xb9, 0x19, 0x8d, 0x6d, 0xac, 0x17, 0x87, 0x5d, 0x80, 0xd7, 0x2d, 0x40, 0x68, + 0x12, 0x19, 0x3e, 0x8b, 0xf2, 0xd3, 0xa6, 0xe5, 0xbb, 0xc1, 0x83, 0x9f, 0xf4, 0x8a, 0x69, 0x79, + 0x1a, 0x40, 0xd5, 0xff, 0x9a, 0x4d, 0x4e, 0x3d, 0xb2, 0x0f, 0x63, 0x6b, 0x87, 0xb7, 0x85, 0x11, + 0x25, 0xc8, 0xef, 0x42, 0x09, 0x96, 0xd0, 0xb1, 0x92, 0xd1, 0x32, 0xad, 0x12, 0xfc, 0x74, 0x67, + 0xa7, 0x4a, 0x30, 0x20, 0x85, 0x67, 0x58, 0x11, 0x34, 0xff, 0x1e, 0x16, 0x6e, 0x95, 0xa2, 0xea, + 0x3a, 0xc3, 0xd5, 0x5b, 0x4b, 0x7a, 0xbd, 0xc1, 0xb2, 0x76, 0x68, 0x51, 0xa6, 0xea, 0xf7, 0x65, + 0x37, 0xc9, 0x96, 0x72, 0x18, 0xa5, 0xaf, 0x7e, 0x2e, 0xdb, 0x3d, 0x61, 0xcd, 0xa1, 0x14, 0xca, + 0x9f, 0x67, 0x13, 0xd2, 0xc7, 0xec, 0x4a, 0x12, 0x97, 0x50, 0x3f, 0x63, 0x13, 0xb8, 0x6b, 0xc2, + 0x8c, 0xc3, 0x94, 0x15, 0x66, 0x3a, 0x1f, 0x8d, 0xe7, 0xd0, 0x89, 0xd2, 0xd2, 0x12, 0x69, 0x78, + 0x61, 0xe0, 0xdd, 0xb9, 0x30, 0xd8, 0x26, 0x8b, 0x56, 0xca, 0xf1, 0x61, 0xe0, 0x5e, 0x08, 0x2a, + 0x91, 0x58, 0x0e, 0x2f, 0xa0, 0x93, 0x51, 0x78, 0x8d, 0x99, 0x7a, 0x79, 0x21, 0x80, 0x69, 0x8c, + 0x23, 0xfb, 0x4f, 0x4b, 0x29, 0x9b, 0xd4, 0x4a, 0x98, 0x4e, 0x7b, 0xbb, 0xb5, 0x12, 0xe6, 0xd6, + 0xc4, 0x72, 0xea, 0x97, 0x73, 0x62, 0x96, 0x9d, 0xc3, 0xeb, 0x58, 0x73, 0x4d, 0x72, 0xa7, 0xdd, + 0xea, 0x90, 0x79, 0x9a, 0x47, 0x8a, 0x30, 0x3a, 0x8e, 0xef, 0x79, 0x16, 0xbc, 0x54, 0x07, 0xa0, + 0xe8, 0x43, 0x16, 0x50, 0xe2, 0x0a, 0xca, 0x97, 0x9c, 0x65, 0x66, 0xc6, 0x6c, 0xf6, 0x78, 0x46, + 0x77, 0x96, 0xdd, 0xe4, 0xc7, 0x33, 0x94, 0x85, 0xfa, 0xbd, 0xd9, 0x2e, 0x59, 0x78, 0x0e, 0xe5, + 0x24, 0xf2, 0x23, 0xd9, 0xb4, 0x7c, 0x3a, 0x07, 0xd5, 0x45, 0xe8, 0x6d, 0x16, 0xce, 0xc1, 0xf6, + 0x9f, 0xda, 0x63, 0xe1, 0xa4, 0xe4, 0xf6, 0x39, 0x12, 0xce, 0xa7, 0xb2, 0x69, 0xe9, 0x8d, 0x0e, + 0xed, 0x2c, 0x93, 0x92, 0x51, 0xe9, 0x48, 0x57, 0x7e, 0x34, 0x9b, 0x9a, 0x54, 0xea, 0x48, 0x3a, + 0xea, 0xa7, 0xb3, 0xa9, 0x49, 0xb1, 0x0e, 0xe5, 0x50, 0x4a, 0xd4, 0x96, 0xa3, 0xb1, 0xc4, 0xa5, + 0xf3, 0x3d, 0xb9, 0x78, 0x1a, 0xb2, 0x43, 0x79, 0x5e, 0x31, 0x8e, 0xfa, 0xfd, 0x0d, 0x0d, 0xb7, + 0xd1, 0xb7, 0xdc, 0x9d, 0x7e, 0x39, 0xfc, 0x32, 0x3a, 0x16, 0xca, 0x52, 0x0c, 0x47, 0x02, 0x17, + 0x41, 0x0d, 0x8a, 0xaa, 0xbf, 0x41, 0x71, 0xfc, 0xdd, 0x7c, 0x94, 0x5a, 0xfd, 0x66, 0x2e, 0x9e, + 0xcb, 0xed, 0xa8, 0x37, 0x76, 0xd8, 0x1b, 0x37, 0xd1, 0xc9, 0x89, 0x8e, 0xe3, 0x10, 0xcb, 0x4b, + 0xee, 0x14, 0x38, 0x69, 0x6a, 0x30, 0x8a, 0x7a, 0xbc, 0x73, 0x52, 0x0a, 0x53, 0xb6, 0xdc, 0xe5, + 0x32, 0xca, 0xb6, 0x2f, 0x64, 0xdb, 0x61, 0x14, 0x49, 0x6c, 0x93, 0x0b, 0xab, 0xbf, 0x93, 0x8d, + 0x67, 0xdf, 0x3b, 0xea, 0xfa, 0x9d, 0x75, 0xfd, 0xa3, 0xb3, 0x2c, 0x9b, 0xc9, 0x0d, 0xd3, 0x32, + 0xf0, 0x69, 0x74, 0xdf, 0xcd, 0xda, 0xa4, 0x56, 0xbf, 0x51, 0x99, 0x2b, 0xd7, 0x6f, 0xce, 0xd5, + 0xaa, 0x93, 0x13, 0x95, 0xa9, 0xca, 0x64, 0x79, 0xb4, 0x07, 0x1f, 0x47, 0xc7, 0x42, 0xd4, 0xf4, + 0xcd, 0xd9, 0xd2, 0xdc, 0x68, 0x06, 0x8f, 0xa1, 0xe1, 0x10, 0x38, 0x3e, 0xbf, 0x30, 0x9a, 0x7d, + 0xf4, 0x3d, 0x68, 0x10, 0xae, 0x6b, 0xd8, 0xb1, 0x23, 0x1e, 0x42, 0xfd, 0xf3, 0xe3, 0xb5, 0x49, + 0xed, 0x16, 0x30, 0x41, 0xa8, 0x50, 0x9e, 0x9c, 0xa3, 0x0c, 0x33, 0x8f, 0xfe, 0x8f, 0x0c, 0x42, + 0xb5, 0xa9, 0x85, 0x2a, 0x27, 0x1c, 0x44, 0x7d, 0x95, 0xb9, 0x5b, 0xa5, 0x99, 0x0a, 0xa5, 0xeb, + 0x47, 0xf9, 0xf9, 0xea, 0x24, 0xad, 0x61, 0x00, 0xf5, 0x4e, 0xcc, 0xcc, 0xd7, 0x26, 0x47, 0xb3, + 0x14, 0xa8, 0x4d, 0x96, 0xca, 0xa3, 0x39, 0x0a, 0xbc, 0xad, 0x55, 0x16, 0x26, 0x47, 0xf3, 0xf4, + 0xcf, 0x99, 0xda, 0x42, 0x69, 0x61, 0xb4, 0x97, 0xfe, 0x39, 0x05, 0x7f, 0x16, 0x28, 0xb3, 0xda, + 0xe4, 0x02, 0xfc, 0xe8, 0xa3, 0x4d, 0x98, 0xf2, 0x7f, 0xf5, 0x53, 0x14, 0x65, 0x5d, 0xae, 0x68, + 0xa3, 0x03, 0xf4, 0x07, 0x65, 0x49, 0x7f, 0x20, 0xda, 0x38, 0x6d, 0x72, 0x76, 0xfe, 0xd6, 0xe4, + 0xe8, 0x20, 0xe5, 0x35, 0x7b, 0x83, 0x82, 0x87, 0xe8, 0x9f, 0xda, 0x2c, 0xfd, 0x73, 0x98, 0x72, + 0xd2, 0x26, 0x4b, 0x33, 0xd5, 0xd2, 0xc2, 0xf4, 0xe8, 0x08, 0x6d, 0x0f, 0xf0, 0x3c, 0xc6, 0x4a, + 0xce, 0x95, 0x66, 0x27, 0x47, 0x47, 0x39, 0x4d, 0x79, 0xa6, 0x32, 0x77, 0x63, 0x74, 0x0c, 0x1a, + 0xf2, 0xfa, 0x2c, 0xfc, 0xc0, 0xb4, 0x00, 0xfc, 0x75, 0xfc, 0xd1, 0x0f, 0xa3, 0xc2, 0x7c, 0x0d, + 0x0e, 0xd7, 0x4f, 0xa1, 0xe3, 0xf3, 0xb5, 0xfa, 0xc2, 0xeb, 0xd5, 0xc9, 0x88, 0xbc, 0xc7, 0xd0, + 0xb0, 0x8f, 0x98, 0xa9, 0xcc, 0xdd, 0xfc, 0x00, 0x93, 0xb6, 0x0f, 0x9a, 0x2d, 0x4d, 0xcc, 0xd7, + 0x46, 0xb3, 0xb4, 0x57, 0x7c, 0xd0, 0xed, 0xca, 0x5c, 0x79, 0xfe, 0x76, 0x6d, 0x34, 0xf7, 0xe8, + 0x5d, 0x34, 0xc4, 0x72, 0xc1, 0xcc, 0x3b, 0xe6, 0xb2, 0x69, 0xe1, 0x73, 0xe8, 0x74, 0x79, 0xf2, + 0x56, 0x65, 0x62, 0xb2, 0x3e, 0xaf, 0x55, 0xae, 0x57, 0xe6, 0x22, 0x35, 0xdd, 0x87, 0xc6, 0x64, + 0x74, 0xa9, 0x5a, 0x19, 0xcd, 0xe0, 0x93, 0x08, 0xcb, 0xe0, 0x57, 0x4b, 0xb3, 0x53, 0xa3, 0x59, + 0xac, 0xa0, 0x13, 0x32, 0xbc, 0x32, 0xb7, 0x70, 0x73, 0x6e, 0x72, 0x34, 0xf7, 0xe8, 0x4f, 0x66, + 0xd0, 0x7d, 0x89, 0xf1, 0xc2, 0xb0, 0x8a, 0xce, 0x4f, 0xce, 0x94, 0x6a, 0x0b, 0x95, 0x89, 0xda, + 0x64, 0x49, 0x9b, 0x98, 0xae, 0x4f, 0x94, 0x16, 0x26, 0xaf, 0xcf, 0x6b, 0xaf, 0xd7, 0xaf, 0x4f, + 0xce, 0x4d, 0x6a, 0xa5, 0x99, 0xd1, 0x1e, 0xfc, 0x10, 0x2a, 0xa6, 0xd0, 0xd4, 0x26, 0x27, 0x6e, + 0x6a, 0x95, 0x85, 0xd7, 0x47, 0x33, 0xf8, 0x41, 0x74, 0x2e, 0x95, 0x88, 0xfe, 0x1e, 0xcd, 0xe2, + 0xf3, 0xe8, 0x4c, 0x1a, 0xc9, 0x6b, 0x33, 0xa3, 0xb9, 0x47, 0x7f, 0x28, 0x83, 0x70, 0x3c, 0xe0, + 0x13, 0x7e, 0x00, 0x9d, 0xa5, 0x7a, 0x51, 0x4f, 0x6f, 0xe0, 0x83, 0xe8, 0x5c, 0x22, 0x85, 0xd0, + 0xbc, 0x22, 0xba, 0x3f, 0x85, 0x84, 0x37, 0xee, 0x2c, 0x52, 0x92, 0x09, 0xa0, 0x69, 0x5f, 0xcc, + 0xa0, 0xfb, 0x12, 0x4f, 0xfa, 0xf1, 0x45, 0xf4, 0x70, 0xa9, 0x3c, 0x4b, 0xfb, 0x66, 0x62, 0xa1, + 0x32, 0x3f, 0x57, 0xab, 0xcf, 0x4e, 0x95, 0xea, 0x54, 0xfb, 0x6e, 0xd6, 0x22, 0xbd, 0x79, 0x01, + 0xa9, 0x5d, 0x28, 0x27, 0xa6, 0x4b, 0x73, 0xd7, 0xe9, 0xf0, 0xc3, 0x0f, 0xa3, 0x07, 0x52, 0xe9, + 0x26, 0xe7, 0x4a, 0xe3, 0x33, 0x93, 0xe5, 0xd1, 0x2c, 0x7e, 0x04, 0x3d, 0x98, 0x4a, 0x55, 0xae, + 0xd4, 0x18, 0x59, 0x6e, 0xbc, 0xfc, 0xd6, 0xbf, 0x3f, 0xdf, 0xf3, 0xd6, 0xd7, 0xcf, 0x67, 0x7e, + 0xef, 0xeb, 0xe7, 0x33, 0x7f, 0xf2, 0xf5, 0xf3, 0x99, 0x0f, 0x5e, 0xdd, 0x4e, 0x20, 0x2f, 0x36, + 0x65, 0x2d, 0x16, 0xe0, 0xd4, 0xed, 0xa9, 0xff, 0x13, 0x00, 0x00, 0xff, 0xff, 0x77, 0xa4, 0x7e, + 0x4d, 0x3b, 0x69, 0x01, 0x00, } func (m *Metadata) Marshal() (dAtA []byte, err error) { @@ -19189,6 +19195,26 @@ func (m *PortForward) MarshalToSizedBuffer(dAtA []byte) (int, error) { i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } + { + size, err := m.KubernetesPodMetadata.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintEvents(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x3a + { + size, err := m.KubernetesClusterMetadata.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintEvents(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x32 if len(m.Addr) > 0 { i -= len(m.Addr) copy(dAtA[i:], m.Addr) @@ -19587,63 +19613,63 @@ func (m *SFTPAttributes) MarshalToSizedBuffer(dAtA []byte) (int, error) { copy(dAtA[i:], m.XXX_unrecognized) } if m.ModificationTime != nil { - n154, err154 := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.ModificationTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(*m.ModificationTime):]) - if err154 != nil { - return 0, err154 - } - i -= n154 - i = encodeVarintEvents(dAtA, i, uint64(n154)) - i-- - dAtA[i] = 0x32 - } - if m.AccessTime != nil { - n155, err155 := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.AccessTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(*m.AccessTime):]) - if err155 != nil { - return 0, err155 - } - i -= n155 - i = encodeVarintEvents(dAtA, i, uint64(n155)) - i-- - dAtA[i] = 0x2a - } - if m.Permissions != nil { - n156, err156 := github_com_gogo_protobuf_types.StdUInt32MarshalTo(*m.Permissions, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdUInt32(*m.Permissions):]) + n156, err156 := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.ModificationTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(*m.ModificationTime):]) if err156 != nil { return 0, err156 } i -= n156 i = encodeVarintEvents(dAtA, i, uint64(n156)) i-- - dAtA[i] = 0x22 + dAtA[i] = 0x32 } - if m.GID != nil { - n157, err157 := github_com_gogo_protobuf_types.StdUInt32MarshalTo(*m.GID, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdUInt32(*m.GID):]) + if m.AccessTime != nil { + n157, err157 := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.AccessTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(*m.AccessTime):]) if err157 != nil { return 0, err157 } i -= n157 i = encodeVarintEvents(dAtA, i, uint64(n157)) i-- - dAtA[i] = 0x1a + dAtA[i] = 0x2a } - if m.UID != nil { - n158, err158 := github_com_gogo_protobuf_types.StdUInt32MarshalTo(*m.UID, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdUInt32(*m.UID):]) + if m.Permissions != nil { + n158, err158 := github_com_gogo_protobuf_types.StdUInt32MarshalTo(*m.Permissions, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdUInt32(*m.Permissions):]) if err158 != nil { return 0, err158 } i -= n158 i = encodeVarintEvents(dAtA, i, uint64(n158)) i-- - dAtA[i] = 0x12 + dAtA[i] = 0x22 } - if m.FileSize != nil { - n159, err159 := github_com_gogo_protobuf_types.StdUInt64MarshalTo(*m.FileSize, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdUInt64(*m.FileSize):]) + if m.GID != nil { + n159, err159 := github_com_gogo_protobuf_types.StdUInt32MarshalTo(*m.GID, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdUInt32(*m.GID):]) if err159 != nil { return 0, err159 } i -= n159 i = encodeVarintEvents(dAtA, i, uint64(n159)) i-- + dAtA[i] = 0x1a + } + if m.UID != nil { + n160, err160 := github_com_gogo_protobuf_types.StdUInt32MarshalTo(*m.UID, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdUInt32(*m.UID):]) + if err160 != nil { + return 0, err160 + } + i -= n160 + i = encodeVarintEvents(dAtA, i, uint64(n160)) + i-- + dAtA[i] = 0x12 + } + if m.FileSize != nil { + n161, err161 := github_com_gogo_protobuf_types.StdUInt64MarshalTo(*m.FileSize, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdUInt64(*m.FileSize):]) + if err161 != nil { + return 0, err161 + } + i -= n161 + i = encodeVarintEvents(dAtA, i, uint64(n161)) + i-- dAtA[i] = 0xa } return len(dAtA) - i, nil @@ -24129,20 +24155,20 @@ func (m *WindowsDesktopSessionEnd) MarshalToSizedBuffer(dAtA []byte) (int, error i-- dAtA[i] = 0x5a } - n378, err378 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.EndTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.EndTime):]) - if err378 != nil { - return 0, err378 + n380, err380 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.EndTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.EndTime):]) + if err380 != nil { + return 0, err380 } - i -= n378 - i = encodeVarintEvents(dAtA, i, uint64(n378)) + i -= n380 + i = encodeVarintEvents(dAtA, i, uint64(n380)) i-- dAtA[i] = 0x52 - n379, err379 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.StartTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.StartTime):]) - if err379 != nil { - return 0, err379 + n381, err381 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.StartTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.StartTime):]) + if err381 != nil { + return 0, err381 } - i -= n379 - i = encodeVarintEvents(dAtA, i, uint64(n379)) + i -= n381 + i = encodeVarintEvents(dAtA, i, uint64(n381)) i-- dAtA[i] = 0x4a if len(m.DesktopLabels) > 0 { @@ -24462,12 +24488,12 @@ func (m *InstanceJoin) MarshalToSizedBuffer(dAtA []byte) (int, error) { } i-- dAtA[i] = 0x52 - n393, err393 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.TokenExpires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.TokenExpires):]) - if err393 != nil { - return 0, err393 + n395, err395 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.TokenExpires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.TokenExpires):]) + if err395 != nil { + return 0, err395 } - i -= n393 - i = encodeVarintEvents(dAtA, i, uint64(n393)) + i -= n395 + i = encodeVarintEvents(dAtA, i, uint64(n395)) i-- dAtA[i] = 0x4a if m.Attributes != nil { @@ -29848,12 +29874,12 @@ func (m *StreamStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } - n632, err632 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.LastUploadTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.LastUploadTime):]) - if err632 != nil { - return 0, err632 + n634, err634 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.LastUploadTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.LastUploadTime):]) + if err634 != nil { + return 0, err634 } - i -= n632 - i = encodeVarintEvents(dAtA, i, uint64(n632)) + i -= n634 + i = encodeVarintEvents(dAtA, i, uint64(n634)) i-- dAtA[i] = 0x1a if m.LastEventIndex != 0 { @@ -30003,12 +30029,12 @@ func (m *Identity) MarshalToSizedBuffer(dAtA []byte) (int, error) { dAtA[i] = 0xc2 } } - n636, err636 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.PreviousIdentityExpires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.PreviousIdentityExpires):]) - if err636 != nil { - return 0, err636 + n638, err638 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.PreviousIdentityExpires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.PreviousIdentityExpires):]) + if err638 != nil { + return 0, err638 } - i -= n636 - i = encodeVarintEvents(dAtA, i, uint64(n636)) + i -= n638 + i = encodeVarintEvents(dAtA, i, uint64(n638)) i-- dAtA[i] = 0x1 i-- @@ -30156,12 +30182,12 @@ func (m *Identity) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x4a } - n640, err640 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Expires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Expires):]) - if err640 != nil { - return 0, err640 + n642, err642 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Expires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Expires):]) + if err642 != nil { + return 0, err642 } - i -= n640 - i = encodeVarintEvents(dAtA, i, uint64(n640)) + i -= n642 + i = encodeVarintEvents(dAtA, i, uint64(n642)) i-- dAtA[i] = 0x42 if len(m.KubernetesUsers) > 0 { @@ -37591,6 +37617,10 @@ func (m *PortForward) Size() (n int) { if l > 0 { n += 1 + l + sovEvents(uint64(l)) } + l = m.KubernetesClusterMetadata.Size() + n += 1 + l + sovEvents(uint64(l)) + l = m.KubernetesPodMetadata.Size() + n += 1 + l + sovEvents(uint64(l)) if m.XXX_unrecognized != nil { n += len(m.XXX_unrecognized) } @@ -56118,6 +56148,72 @@ func (m *PortForward) Unmarshal(dAtA []byte) error { } m.Addr = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field KubernetesClusterMetadata", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthEvents + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.KubernetesClusterMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field KubernetesPodMetadata", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthEvents + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.KubernetesPodMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipEvents(dAtA[iNdEx:]) diff --git a/lib/events/api.go b/lib/events/api.go index 201e919e98456..9a5d1ff52b17b 100644 --- a/lib/events/api.go +++ b/lib/events/api.go @@ -773,21 +773,21 @@ const ( // IntegrationCreateEvent is emitted when an integration resource is created. IntegrationCreateEvent = "integration.create" - //IntegrationUpdateEvent is emitted when an integration resource is updated. + // IntegrationUpdateEvent is emitted when an integration resource is updated. IntegrationUpdateEvent = "integration.update" // IntegrationDeleteEvent is emitted when an integration resource is deleted. IntegrationDeleteEvent = "integration.delete" // PluginCreateEvent is emitted when a plugin resource is created. PluginCreateEvent = "plugin.create" - //PluginUpdateEvent is emitted when a plugin resource is updated. + // PluginUpdateEvent is emitted when a plugin resource is updated. PluginUpdateEvent = "plugin.update" // PluginDeleteEvent is emitted when a plugin resource is deleted. PluginDeleteEvent = "plugin.delete" // CrownJewelCreateEvent is emitted when a crown jewel resource is created. CrownJewelCreateEvent = "access_graph.crown_jewel.create" - //CrownJewelUpdateEvent is emitted when a crown jewel resource is updated. + // CrownJewelUpdateEvent is emitted when a crown jewel resource is updated. CrownJewelUpdateEvent = "access_graph.crown_jewel.update" // CrownJewelDeleteEvent is emitted when a crown jewel resource is deleted. CrownJewelDeleteEvent = "access_graph.crown_jewel.delete" diff --git a/lib/events/codes.go b/lib/events/codes.go index e697f4b5742c7..3a3e25c316885 100644 --- a/lib/events/codes.go +++ b/lib/events/codes.go @@ -284,6 +284,8 @@ const ( ExecFailureCode = "T3002E" // PortForwardCode is the port forward event code. PortForwardCode = "T3003I" + // PortForwardStopCode is the port forward stop event code. + PortForwardStopCode = "T3003S" // PortForwardFailureCode is the port forward failure event code. PortForwardFailureCode = "T3003E" // SCPDownloadCode is the file download event code. diff --git a/lib/kube/proxy/forwarder.go b/lib/kube/proxy/forwarder.go index a7a773f7632c7..6ad431886bb1f 100644 --- a/lib/kube/proxy/forwarder.go +++ b/lib/kube/proxy/forwarder.go @@ -1744,10 +1744,12 @@ func (f *Forwarder) portForward(authCtx *authContext, w http.ResponseWriter, req return nil, trace.Wrap(err) } + auditSent := map[string]bool{} // Set of `addr`. Can be multiple ports on single call. Using bool to simplify the check. onPortForward := func(addr string, success bool) { - if !sess.isLocalKubernetesCluster { + if !sess.isLocalKubernetesCluster || auditSent[addr] { return } + auditSent[addr] = true portForward := &apievents.PortForward{ Metadata: apievents.Metadata{ Type: events.PortForwardEvent, @@ -1763,6 +1765,11 @@ func (f *Forwarder) portForward(authCtx *authContext, w http.ResponseWriter, req Status: apievents.Status{ Success: success, }, + KubernetesClusterMetadata: sess.eventClusterMeta(req), + KubernetesPodMetadata: apievents.KubernetesPodMetadata{ + KubernetesPodNamespace: p.ByName("podNamespace"), + KubernetesPodName: p.ByName("podName"), + }, } if !success { portForward.Code = events.PortForwardFailureCode @@ -1771,6 +1778,31 @@ func (f *Forwarder) portForward(authCtx *authContext, w http.ResponseWriter, req f.log.WithError(err).Warn("Failed to emit event.") } } + defer func() { + for addr := range auditSent { + portForward := &apievents.PortForward{ + Metadata: apievents.Metadata{ + Type: events.PortForwardEvent, + Code: events.PortForwardStopCode, + }, + UserMetadata: authCtx.eventUserMeta(), + ConnectionMetadata: apievents.ConnectionMetadata{ + LocalAddr: sess.kubeAddress, + RemoteAddr: req.RemoteAddr, + Protocol: events.EventProtocolKube, + }, + Addr: addr, + KubernetesClusterMetadata: sess.eventClusterMeta(req), + KubernetesPodMetadata: apievents.KubernetesPodMetadata{ + KubernetesPodNamespace: p.ByName("podNamespace"), + KubernetesPodName: p.ByName("podName"), + }, + } + if err := f.cfg.Emitter.EmitAuditEvent(f.ctx, portForward); err != nil { + f.log.WithError(err).Warn("Failed to emit event.") + } + } + }() q := req.URL.Query() request := portForwardRequest{ diff --git a/web/packages/teleport/src/Audit/EventList/EventTypeCell.tsx b/web/packages/teleport/src/Audit/EventList/EventTypeCell.tsx index d4c92c788e71a..d73a3e9d453e0 100644 --- a/web/packages/teleport/src/Audit/EventList/EventTypeCell.tsx +++ b/web/packages/teleport/src/Audit/EventList/EventTypeCell.tsx @@ -211,6 +211,7 @@ const EventIconMap: Record = { [eventCodes.CLIENT_DISCONNECT]: Icons.Info, [eventCodes.PORTFORWARD]: Icons.Info, [eventCodes.PORTFORWARD_FAILURE]: Icons.Info, + [eventCodes.PORTFORWARD_STOP]: Icons.Info, [eventCodes.SUBSYSTEM]: Icons.Info, [eventCodes.SUBSYSTEM_FAILURE]: Icons.Info, [eventCodes.LOCK_CREATED]: Icons.Lock, diff --git a/web/packages/teleport/src/services/audit/makeEvent.ts b/web/packages/teleport/src/services/audit/makeEvent.ts index be19b2d33e4ed..26e2a522deb1a 100644 --- a/web/packages/teleport/src/services/audit/makeEvent.ts +++ b/web/packages/teleport/src/services/audit/makeEvent.ts @@ -231,6 +231,11 @@ export const formatters: Formatters = { format: ({ user, error }) => `User [${user}] port forwarding request failed: ${error}`, }, + [eventCodes.PORTFORWARD_STOP]: { + type: 'port', + desc: 'Port Forwarding Stopped', + format: ({ user }) => `User [${user}] stopped port forwarding`, + }, [eventCodes.SAML_CONNECTOR_CREATED]: { type: 'saml.created', desc: 'SAML Connector Created', diff --git a/web/packages/teleport/src/services/audit/types.ts b/web/packages/teleport/src/services/audit/types.ts index 509ca2ab1d956..582c16e1866c2 100644 --- a/web/packages/teleport/src/services/audit/types.ts +++ b/web/packages/teleport/src/services/audit/types.ts @@ -141,6 +141,7 @@ export const eventCodes = { OIDC_CONNECTOR_DELETED: 'T8101I', OIDC_CONNECTOR_UPDATED: 'T8102I', PORTFORWARD_FAILURE: 'T3003E', + PORTFORWARD_STOP: 'T3003S', PORTFORWARD: 'T3003I', RECOVERY_TOKEN_CREATED: 'T6001I', PRIVILEGE_TOKEN_CREATED: 'T6002I', @@ -399,6 +400,7 @@ export type RawEvents = { typeof eventCodes.OIDC_CONNECTOR_UPDATED >; [eventCodes.PORTFORWARD]: RawEvent; + [eventCodes.PORTFORWARD_STOP]: RawEvent; [eventCodes.PORTFORWARD_FAILURE]: RawEvent< typeof eventCodes.PORTFORWARD_FAILURE, { From 74e33c888def9669478f1748731bbf30004c6e17 Mon Sep 17 00:00:00 2001 From: rosstimothy <39066650+rosstimothy@users.noreply.github.com> Date: Fri, 6 Dec 2024 15:42:02 -0500 Subject: [PATCH 105/111] Attempt to reduce flakiness of integration tests (#49850) (#49894) Closes #47156. All of the tests suffering from issues dialing hosts, and failing with a `failed to dial target host` error were incorrectly waiting for nodes to become visible before establishing connections. The main culprit for most of the failures was `waitForNodesToRegister`, though a few tests had a very similar hand rolled variant, which incorrectly returned when the nodes appeard in Auth. However, since the Proxy is the one performing dialing, they should have waited for the nodes to appear in the Proxy. To resolve, `waitForNodesToRegister` and all hand rolled equivalents have been removed in favor of `(TeleInstance) WaitForNodeCount` which correctly uses the `CachingAccessPoint` of the RemoteSite instead of `GetClient`. Additionally, `helpers.WaitForNodeCount` was updated to validate that the node watcher used for routing in the Proxy also contained the expected number of nodes. --- integration/helpers/helpers.go | 5 +- integration/helpers/instance.go | 50 +++++++++ integration/helpers/trustedclusters.go | 33 ------ integration/integration_test.go | 137 +++++++------------------ integration/proxy/proxy_helpers.go | 2 +- integration/proxy/proxy_test.go | 6 +- 6 files changed, 92 insertions(+), 141 deletions(-) diff --git a/integration/helpers/helpers.go b/integration/helpers/helpers.go index 63525f86b319f..2b40ea3b46762 100644 --- a/integration/helpers/helpers.go +++ b/integration/helpers/helpers.go @@ -129,10 +129,7 @@ func ExternalSSHCommand(o CommandOptions) (*exec.Cmd, error) { } // Create an exec.Command and tell it where to find the SSH agent. - cmd, err := exec.Command(sshpath, execArgs...), nil - if err != nil { - return nil, trace.Wrap(err) - } + cmd := exec.Command(sshpath, execArgs...) cmd.Env = []string{fmt.Sprintf("SSH_AUTH_SOCK=%v", o.SocketPath)} return cmd, nil diff --git a/integration/helpers/instance.go b/integration/helpers/instance.go index 4a28d91b0f560..fb4fdc3947f09 100644 --- a/integration/helpers/instance.go +++ b/integration/helpers/instance.go @@ -46,7 +46,9 @@ import ( "github.com/gravitational/teleport/api/breaker" clientproto "github.com/gravitational/teleport/api/client/proto" + apidefaults "github.com/gravitational/teleport/api/defaults" "github.com/gravitational/teleport/api/types" + "github.com/gravitational/teleport/api/utils/retryutils" "github.com/gravitational/teleport/lib/auth/authclient" "github.com/gravitational/teleport/lib/auth/keygen" "github.com/gravitational/teleport/lib/auth/state" @@ -1737,3 +1739,51 @@ func (i *TeleInstance) StopAll() error { i.Log.Infof("Stopped all teleport services for site %q", i.Secrets.SiteName) return trace.NewAggregate(errors...) } + +// WaitForNodeCount waits for a certain number of nodes in the provided cluster +// to be visible to the Proxy. This should be called prior to any client dialing +// of nodes to be sure that the node is registered and routable. +func (i *TeleInstance) WaitForNodeCount(ctx context.Context, cluster string, count int) error { + const ( + deadline = time.Second * 30 + iterWaitTime = time.Second + ) + + err := retryutils.RetryStaticFor(deadline, iterWaitTime, func() error { + site, err := i.Tunnel.GetSite(cluster) + if err != nil { + return trace.Wrap(err) + } + + // Validate that the site cache contains the expected count. + accessPoint, err := site.CachingAccessPoint() + if err != nil { + return trace.Wrap(err) + } + + nodes, err := accessPoint.GetNodes(ctx, apidefaults.Namespace) + if err != nil { + return trace.Wrap(err) + } + if len(nodes) != count { + return trace.BadParameter("cache contained %v nodes, but wanted to find %v nodes", len(nodes), count) + } + + // Validate that the site watcher contains the expected count. + watcher, err := site.NodeWatcher() + if err != nil { + return trace.Wrap(err) + } + + if watcher.NodeCount() != count { + return trace.BadParameter("node watcher contained %v nodes, but wanted to find %v nodes", watcher.NodeCount(), count) + } + + return nil + }) + if err != nil { + return trace.Wrap(err) + } + + return nil +} diff --git a/integration/helpers/trustedclusters.go b/integration/helpers/trustedclusters.go index a883fb8635a9e..1b3f43b61507c 100644 --- a/integration/helpers/trustedclusters.go +++ b/integration/helpers/trustedclusters.go @@ -30,9 +30,7 @@ import ( "github.com/stretchr/testify/require" "github.com/gravitational/teleport" - "github.com/gravitational/teleport/api/defaults" "github.com/gravitational/teleport/api/types" - "github.com/gravitational/teleport/api/utils/retryutils" "github.com/gravitational/teleport/lib/auth" "github.com/gravitational/teleport/lib/reversetunnelclient" ) @@ -112,37 +110,6 @@ func WaitForClusters(tun reversetunnelclient.Server, expected int) func() bool { } } -// WaitForNodeCount waits for a certain number of nodes to show up in the remote site. -func WaitForNodeCount(ctx context.Context, t *TeleInstance, clusterName string, count int) error { - const ( - deadline = time.Second * 30 - iterWaitTime = time.Second - ) - - err := retryutils.RetryStaticFor(deadline, iterWaitTime, func() error { - remoteSite, err := t.Tunnel.GetSite(clusterName) - if err != nil { - return trace.Wrap(err) - } - accessPoint, err := remoteSite.CachingAccessPoint() - if err != nil { - return trace.Wrap(err) - } - nodes, err := accessPoint.GetNodes(ctx, defaults.Namespace) - if err != nil { - return trace.Wrap(err) - } - if len(nodes) == count { - return nil - } - return trace.BadParameter("found %v nodes, but wanted to find %v nodes", len(nodes), count) - }) - if err != nil { - return trace.Wrap(err) - } - return nil -} - // WaitForActiveTunnelConnections waits for remote cluster to report a minimum number of active connections func WaitForActiveTunnelConnections(t *testing.T, tunnel reversetunnelclient.Server, clusterName string, expectedCount int) { require.EventuallyWithT(t, func(t *assert.CollectT) { diff --git a/integration/integration_test.go b/integration/integration_test.go index a0bbcc3f74bc7..6557cdcf9b1b8 100644 --- a/integration/integration_test.go +++ b/integration/integration_test.go @@ -440,27 +440,9 @@ func testAuditOn(t *testing.T, suite *integrationTestSuite) { ctx := context.Background() - // wait 10 seconds for both nodes to show up, otherwise + // wait for both nodes to show up, otherwise // we'll have trouble connecting to the node below. - waitForNodes := func(site authclient.ClientI, count int) error { - tickCh := time.Tick(500 * time.Millisecond) - stopCh := time.After(10 * time.Second) - for { - select { - case <-tickCh: - nodesInSite, err := site.GetNodes(ctx, defaults.Namespace) - if err != nil && !trace.IsNotFound(err) { - return trace.Wrap(err) - } - if got, want := len(nodesInSite), count; got == want { - return nil - } - case <-stopCh: - return trace.BadParameter("waited 10s, did find %v nodes", count) - } - } - } - err = waitForNodes(site, 2) + err = teleport.WaitForNodeCount(ctx, helpers.Site, 2) require.NoError(t, err) // should have no sessions: @@ -855,8 +837,6 @@ func testUUIDBasedProxy(t *testing.T, suite *integrationTestSuite) { teleportSvr := suite.newTeleport(t, nil, true) defer teleportSvr.StopAll() - site := teleportSvr.GetSiteAPI(helpers.Site) - // addNode adds a node to the teleport instance, returning its uuid. // All nodes added this way have the same hostname. addNode := func() (string, error) { @@ -883,36 +863,11 @@ func testUUIDBasedProxy(t *testing.T, suite *integrationTestSuite) { uuid1, err := addNode() require.NoError(t, err) - uuid2, err := addNode() + _, err = addNode() require.NoError(t, err) - // wait up to 10 seconds for supplied node names to show up. - waitForNodes := func(site authclient.ClientI, nodes ...string) error { - tickCh := time.Tick(500 * time.Millisecond) - stopCh := time.After(10 * time.Second) - Outer: - for _, nodeName := range nodes { - for { - select { - case <-tickCh: - nodesInSite, err := site.GetNodes(ctx, defaults.Namespace) - if err != nil && !trace.IsNotFound(err) { - return trace.Wrap(err) - } - for _, node := range nodesInSite { - if node.GetName() == nodeName { - continue Outer - } - } - case <-stopCh: - return trace.BadParameter("waited 10s, did find node %s", nodeName) - } - } - } - return nil - } - - err = waitForNodes(site, uuid1, uuid2) + // wait for supplied node names to show up. + err = teleportSvr.WaitForNodeCount(ctx, helpers.Site, 3) require.NoError(t, err) // attempting to run a command by hostname should generate NodeIsAmbiguous error. @@ -2266,7 +2221,8 @@ func runDisconnectTest(t *testing.T, suite *integrationTestSuite, tc disconnectT tc.concurrentConns = 1 } - waitForNodesToRegister(t, teleport, helpers.Site) + err = teleport.WaitForNodeCount(ctx, helpers.Site, 1) + require.NoError(t, err) asyncErrors := make(chan error, 1) @@ -2285,7 +2241,11 @@ func runDisconnectTest(t *testing.T, suite *integrationTestSuite, tc disconnectT tc.clientConfigOpts(&cc) } cl, err := teleport.NewClient(cc) - require.NoError(t, err) + if err != nil { + asyncErrors <- err + return + } + cl.Stdout = person cl.Stdin = person @@ -3253,6 +3213,10 @@ func trustedClusters(t *testing.T, suite *integrationTestSuite, test trustedClus cmd := []string{"echo", "hello world"} + // Wait for nodes to be visible before attempting connections + err = main.WaitForNodeCount(ctx, clusterAux, 2) + require.NoError(t, err) + // Try and connect to a node in the Aux cluster from the Main cluster using // direct dialing. creds, err := helpers.GenerateUserCreds(helpers.UserCredsRequest{ @@ -3338,6 +3302,10 @@ func trustedClusters(t *testing.T, suite *integrationTestSuite, test trustedClus require.Eventually(t, helpers.WaitForClusters(main.Tunnel, 1), 10*time.Second, 1*time.Second, "Two clusters do not see each other: tunnels are not working.") + // Wait for nodes to be visible before attempting connections + err = main.WaitForNodeCount(ctx, clusterAux, 2) + require.NoError(t, err) + // connection and client should recover and work again output = &bytes.Buffer{} tc.Stdout = output @@ -3744,7 +3712,7 @@ func testTrustedTunnelNode(t *testing.T, suite *integrationTestSuite) { "Two clusters do not see each other: tunnels are not working.") // Wait for both nodes to show up before attempting to dial to them. - err = helpers.WaitForNodeCount(ctx, main, clusterAux, 2) + err = main.WaitForNodeCount(ctx, clusterAux, 2) require.NoError(t, err) cmd := []string{"echo", "hello world"} @@ -4140,7 +4108,8 @@ func testDiscovery(t *testing.T, suite *integrationTestSuite) { helpers.WaitForActiveTunnelConnections(t, main.Tunnel, "cluster-remote", 1) helpers.WaitForActiveTunnelConnections(t, secondProxy, "cluster-remote", 1) - waitForNodesToRegister(t, main, "cluster-remote") + err = main.WaitForNodeCount(ctx, "cluster-remote", 1) + require.NoError(t, err) // execute the connection via first proxy cfg := helpers.ClientConfig{ @@ -4191,7 +4160,8 @@ func testDiscovery(t *testing.T, suite *integrationTestSuite) { helpers.WaitForActiveTunnelConnections(t, main.Tunnel, "cluster-remote", 1) helpers.WaitForActiveTunnelConnections(t, secondProxy, "cluster-remote", 1) - waitForNodesToRegister(t, main, "cluster-remote") + err = main.WaitForNodeCount(ctx, "cluster-remote", 1) + require.NoError(t, err) // Requests going via main proxy should succeed. output, err = runCommand(t, main, []string{"echo", "hello world"}, cfg, 1) @@ -4971,11 +4941,8 @@ func testProxyHostKeyCheck(t *testing.T, suite *integrationTestSuite) { require.NoError(t, err) // Wait for the node to be visible before continuing. - require.EventuallyWithT(t, func(t *assert.CollectT) { - found, err := clt.GetNodes(context.Background(), defaults.Namespace) - assert.NoError(t, err) - assert.Len(t, found, 2) - }, 10*time.Second, 100*time.Millisecond) + err = instance.WaitForNodeCount(context.Background(), helpers.Site, 2) + require.NoError(t, err) _, err = runCommand(t, instance, []string{"echo hello"}, clientConfig, 1) @@ -6137,27 +6104,9 @@ func testList(t *testing.T, suite *integrationTestSuite) { clt := teleport.GetSiteAPI(helpers.Site) require.NotNil(t, clt) - // Wait 10 seconds for both nodes to show up to make sure they both have + // Wait for both nodes to show up to make sure they both have // registered themselves. - waitForNodes := func(clt authclient.ClientI, count int) error { - tickCh := time.Tick(500 * time.Millisecond) - stopCh := time.After(10 * time.Second) - for { - select { - case <-tickCh: - nodesInCluster, err := clt.GetNodes(ctx, defaults.Namespace) - if err != nil && !trace.IsNotFound(err) { - return trace.Wrap(err) - } - if got, want := len(nodesInCluster), count; got == want { - return nil - } - case <-stopCh: - return trace.BadParameter("waited 10s, did find %v nodes", count) - } - } - } - err = waitForNodes(clt, 2) + err = teleport.WaitForNodeCount(ctx, helpers.Site, 2) require.NoError(t, err) tests := []struct { @@ -6326,22 +6275,6 @@ func testCmdLabels(t *testing.T, suite *integrationTestSuite) { } } -func waitForNodesToRegister(t *testing.T, teleport *helpers.TeleInstance, site string) { - t.Helper() - require.EventuallyWithT(t, func(t *assert.CollectT) { - // once the tunnel is established we need to wait until we have a - // connection to the remote auth - site := teleport.GetSiteAPI(site) - if !assert.NotNil(t, site) { - return - } - // we need to wait until we know about the node because direct dial to - // unregistered servers is no longer supported - _, err := site.GetNode(context.Background(), defaults.Namespace, teleport.Config.HostUUID) - assert.NoError(t, err) - }, time.Second*30, 250*time.Millisecond) -} - // TestDataTransfer makes sure that a "session.data" event is emitted at the // end of a session that matches the amount of data that was transferred. func testDataTransfer(t *testing.T, suite *integrationTestSuite) { @@ -6355,6 +6288,9 @@ func testDataTransfer(t *testing.T, suite *integrationTestSuite) { main := suite.newTeleport(t, nil, true) defer main.StopAll() + err := main.WaitForNodeCount(context.Background(), helpers.Site, 1) + require.NoError(t, err) + // Create a client to the above Teleport cluster. clientConfig := helpers.ClientConfig{ Login: suite.Me.Username, @@ -6363,8 +6299,6 @@ func testDataTransfer(t *testing.T, suite *integrationTestSuite) { Port: helpers.Port(t, main.SSH), } - waitForNodesToRegister(t, main, helpers.Site) - // Write 1 MB to stdout. command := []string{"dd", "if=/dev/zero", "bs=1024", "count=1024"} output, err := runCommand(t, main, command, clientConfig, 1) @@ -7323,6 +7257,7 @@ func (s *integrationTestSuite) defaultServiceConfig() *servicecfg.Config { cfg.Log = s.Log cfg.CircuitBreakerConfig = breaker.NoopBreakerConfig() cfg.InstanceMetadataClient = imds.NewDisabledIMDSClient() + cfg.DebugService.Enabled = false return cfg } @@ -8141,7 +8076,8 @@ func testModeratedSFTP(t *testing.T, suite *integrationTestSuite) { _, err = authServer.CreateUser(ctx, moderatorUser) require.NoError(t, err) - waitForNodesToRegister(t, instance, helpers.Site) + err = instance.WaitForNodeCount(context.Background(), helpers.Site, 1) + require.NoError(t, err) // Start a shell so a moderated session is created peerClient, err := instance.NewClient(helpers.ClientConfig{ @@ -8399,7 +8335,8 @@ func testSFTP(t *testing.T, suite *integrationTestSuite) { teleport.StopAll() }) - waitForNodesToRegister(t, teleport, helpers.Site) + err := teleport.WaitForNodeCount(context.Background(), helpers.Site, 1) + require.NoError(t, err) teleportClient, err := teleport.NewClient(helpers.ClientConfig{ Login: suite.Me.Username, diff --git a/integration/proxy/proxy_helpers.go b/integration/proxy/proxy_helpers.go index 8c028bc62c7c6..a46a4d8ececb0 100644 --- a/integration/proxy/proxy_helpers.go +++ b/integration/proxy/proxy_helpers.go @@ -219,7 +219,7 @@ func (p *Suite) addNodeToLeafCluster(t *testing.T, tunnelNodeHostname string) { "Two clusters do not see each other: tunnels are not working.") // Wait for both nodes to show up before attempting to dial to them. - err = helpers.WaitForNodeCount(context.Background(), p.root, p.leaf.Secrets.SiteName, 2) + err = p.root.WaitForNodeCount(context.Background(), p.leaf.Secrets.SiteName, 2) require.NoError(t, err) } diff --git a/integration/proxy/proxy_test.go b/integration/proxy/proxy_test.go index 77a32c64d0e7e..f39245fbbe9ea 100644 --- a/integration/proxy/proxy_test.go +++ b/integration/proxy/proxy_test.go @@ -1593,7 +1593,7 @@ func TestALPNProxyHTTPProxyNoProxyDial(t *testing.T) { ctx, cancel := context.WithDeadline(context.Background(), time.Now().Add(time.Second*30)) defer cancel() - err = helpers.WaitForNodeCount(ctx, rc, "root.example.com", 1) + err = rc.WaitForNodeCount(ctx, "root.example.com", 1) require.NoError(t, err) require.Zero(t, ph.Count()) @@ -1603,7 +1603,7 @@ func TestALPNProxyHTTPProxyNoProxyDial(t *testing.T) { require.NoError(t, os.Unsetenv("no_proxy")) _, err = rc.StartNode(makeNodeConfig("second-root-node", rcProxyAddr)) require.NoError(t, err) - err = helpers.WaitForNodeCount(ctx, rc, "root.example.com", 2) + err = rc.WaitForNodeCount(ctx, "root.example.com", 2) require.NoError(t, err) require.NotZero(t, ph.Count()) @@ -1702,7 +1702,7 @@ func TestALPNProxyHTTPProxyBasicAuthDial(t *testing.T) { startErrC <- err }() require.NoError(t, <-startErrC) - require.NoError(t, helpers.WaitForNodeCount(context.Background(), rc, rc.Secrets.SiteName, 1)) + require.NoError(t, rc.WaitForNodeCount(context.Background(), rc.Secrets.SiteName, 1)) require.Greater(t, ph.Count(), 0) } From 1578a5ef6ddcca588fb70ee10aef94a9130c3132 Mon Sep 17 00:00:00 2001 From: rosstimothy <39066650+rosstimothy@users.noreply.github.com> Date: Fri, 6 Dec 2024 16:04:14 -0500 Subject: [PATCH 106/111] Prevent races counting missed heartbeats (#49910) Increments the `heartbeatsMissedByAuth` gauge directly instead of keeping a local count and setting the gauge once. This fixes a race caught in https://github.com/gravitational/teleport/actions/runs/11828850190/job/32959672995?pr=48949. ``` ================== WARNING: DATA RACE Write at 0x00c003857da8 by goroutine 48258: github.com/gravitational/teleport/lib/auth.(*Server).runPeriodicOperations.func3.1() /__w/teleport/teleport/lib/auth/auth.go:1471 +0x84 github.com/gravitational/teleport/lib/services.(*UnifiedResourceCache).getRange.func1.1() /__w/teleport/teleport/lib/services/unified_resource.go:239 +0x14d github.com/google/btree.(*node[go.shape.*uint8]).iterate() /go/pkg/mod/github.com/google/btree@v1.1.3/btree_generic.go:522 +0x62c github.com/google/btree.(*BTreeG[go.shape.*uint8]).AscendRange() /go/pkg/mod/github.com/google/btree@v1.1.3/btree_generic.go:752 +0x104 github.com/google/btree.(*BTreeG[*github.com/gravitational/teleport/lib/services.item]).AscendRange-fm() :1 +0x58 github.com/gravitational/teleport/lib/services.(*UnifiedResourceCache).getRange.func1() /__w/teleport/teleport/lib/services/unified_resource.go:230 +0x7a8 github.com/gravitational/teleport/lib/services.(*UnifiedResourceCache).read() /__w/teleport/teleport/lib/services/unified_resource.go:591 +0x2ad github.com/gravitational/teleport/lib/services.(*UnifiedResourceCache).getRange() /__w/teleport/teleport/lib/services/unified_resource.go:215 +0x2d9 github.com/gravitational/teleport/lib/services.(*UnifiedResourceCache).IterateUnifiedResources() /__w/teleport/teleport/lib/services/unified_resource.go:288 +0xe6 github.com/gravitational/teleport/lib/auth.(*Server).runPeriodicOperations.func3() /__w/teleport/teleport/lib/auth/auth.go:1464 +0x237 Previous read at 0x00c003857da8 by goroutine 48219: github.com/gravitational/teleport/lib/auth.(*Server).runPeriodicOperations.func3() /__w/teleport/teleport/lib/auth/auth.go:1489 +0x2d2 Goroutine 48258 (running) created at: github.com/gravitational/teleport/lib/auth.(*Server).runPeriodicOperations() /__w/teleport/teleport/lib/auth/auth.go:1460 +0xf9e github.com/gravitational/teleport/lib/auth.initCluster.gowrap1() /__w/teleport/teleport/lib/auth/init.go:594 +0x33 Goroutine 48219 (finished) created at: github.com/gravitational/teleport/lib/auth.(*Server).runPeriodicOperations() /__w/teleport/teleport/lib/auth/auth.go:1460 +0xf9e github.com/gravitational/teleport/lib/auth.initCluster.gowrap1() /__w/teleport/teleport/lib/auth/init.go:594 +0x33 ================== ``` --- lib/auth/auth.go | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/lib/auth/auth.go b/lib/auth/auth.go index 76cf9729b6b63..a1816d6ca8f67 100644 --- a/lib/auth/auth.go +++ b/lib/auth/auth.go @@ -1266,8 +1266,6 @@ func (a *Server) runPeriodicOperations() { defer ticker.Stop() - missedKeepAliveCount := 0 - // Prevent some periodic operations from running for dashboard tenants. if !services.IsDashboard(*modules.GetModules().Features().ToProto()) { ticker.Push(interval.SubInterval[periodicIntervalKey]{ @@ -1369,7 +1367,7 @@ func (a *Server) runPeriodicOperations() { return false, nil } if services.NodeHasMissedKeepAlives(srv) { - missedKeepAliveCount++ + heartbeatsMissedByAuth.Inc() } return false, nil }, @@ -1385,9 +1383,6 @@ func (a *Server) runPeriodicOperations() { break } } - - // Update prometheus gauge - heartbeatsMissedByAuth.Set(float64(missedKeepAliveCount)) }() case metricsKey: go a.updateAgentMetrics() From 759f35e498730e04481fc472f6d71399db158696 Mon Sep 17 00:00:00 2001 From: Nic Klaassen Date: Mon, 9 Dec 2024 03:48:45 -0800 Subject: [PATCH 107/111] [v15] add missing plurals for tctl resource commands (#49902) This is a partial backport of #49171 that just adds a couple plural resource shortcuts that were missing. --- lib/services/resource.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/services/resource.go b/lib/services/resource.go index 0ef9ae4c9f634..4474170ba8a45 100644 --- a/lib/services/resource.go +++ b/lib/services/resource.go @@ -186,7 +186,7 @@ func ParseShortcut(in string) (string, error) { return types.KindKubeServer, nil case types.KindLock, "locks": return types.KindLock, nil - case types.KindDatabaseServer: + case types.KindDatabaseServer, "db_servers": return types.KindDatabaseServer, nil case types.KindNetworkRestrictions: return types.KindNetworkRestrictions, nil @@ -196,7 +196,7 @@ func ParseShortcut(in string) (string, error) { return types.KindApp, nil case types.KindAppServer, "app_servers": return types.KindAppServer, nil - case types.KindWindowsDesktopService, "windows_service", "win_desktop_service", "win_service": + case types.KindWindowsDesktopService, "windows_service", "win_desktop_service", "win_service", "windows_desktop_services": return types.KindWindowsDesktopService, nil case types.KindWindowsDesktop, "win_desktop": return types.KindWindowsDesktop, nil From 02ae1c1929a2da3ae0965db6c30b3db2ef1f45c9 Mon Sep 17 00:00:00 2001 From: Alan Parra Date: Mon, 9 Dec 2024 11:40:58 -0300 Subject: [PATCH 108/111] fix: Respect the --no-allow-passwordless flag (#49935) --- tool/tsh/common/mfa.go | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/tool/tsh/common/mfa.go b/tool/tsh/common/mfa.go index 1a7f61ca53f2c..3d7b6eab84ee8 100644 --- a/tool/tsh/common/mfa.go +++ b/tool/tsh/common/mfa.go @@ -198,12 +198,14 @@ type mfaAddCommand struct { devName string devType string - // allowPasswordless is initially true if --allow-passwordless is set, false - // if not explicitly requested. - // It can only be set by users if wancli.IsFIDO2Available() is true. + // allowPasswordless and allowPasswordlessSet hold the state of the + // --(no-)allow-passwordless flag. + // + // allowPasswordless can only be set by users if wancli.IsFIDO2Available() is + // true. // Note that Touch ID registrations are always passwordless-capable, // regardless of other settings. - allowPasswordless bool + allowPasswordless, allowPasswordlessSet bool } func newMFAAddCommand(parent *kingpin.CmdClause) *mfaAddCommand { @@ -214,7 +216,9 @@ func newMFAAddCommand(parent *kingpin.CmdClause) *mfaAddCommand { c.Flag("type", fmt.Sprintf("Type of the new MFA device (%s)", strings.Join(defaultDeviceTypes, ", "))). EnumVar(&c.devType, defaultDeviceTypes...) if wancli.IsFIDO2Available() { - c.Flag("allow-passwordless", "Allow passwordless logins").BoolVar(&c.allowPasswordless) + c.Flag("allow-passwordless", "Allow passwordless logins"). + IsSetByUser(&c.allowPasswordlessSet). + BoolVar(&c.allowPasswordless) } return c } @@ -266,9 +270,7 @@ func (c *mfaAddCommand) run(cf *CLIConf) error { switch c.devType { case webauthnDeviceType: // Ask the user? - // c.allowPasswordless=false at this point only means that the flag wasn't - // explicitly set. - if !c.allowPasswordless && wancli.IsFIDO2Available() { + if !c.allowPasswordlessSet && wancli.IsFIDO2Available() { answer, err := prompt.PickOne(ctx, os.Stdout, prompt.Stdin(), "Allow passwordless logins", []string{"YES", "NO"}) if err != nil { return trace.Wrap(err) From af06f5441c8ba5f4f546876105f4cf693b15bfba Mon Sep 17 00:00:00 2001 From: Steven Martin Date: Mon, 9 Dec 2024 13:03:01 -0500 Subject: [PATCH 109/111] update WebSocket logging reference (#49930) --- lib/web/conn_upgrade.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/web/conn_upgrade.go b/lib/web/conn_upgrade.go index df8c4684dcfc7..7a081aa9ea975 100644 --- a/lib/web/conn_upgrade.go +++ b/lib/web/conn_upgrade.go @@ -109,7 +109,7 @@ func (h *Handler) upgradeALPNWebSocket(w http.ResponseWriter, r *http.Request, u } wsConn, err := upgrader.Upgrade(w, r, nil) if err != nil { - h.logger.DebugContext(r.Context(), "Failed to upgrade weboscket.", "error", err) + h.logger.DebugContext(r.Context(), "Failed to upgrade WebSocket.", "error", err) return nil, trace.Wrap(err) } defer wsConn.Close() From 76e843b7556e72e453de49f7749837d2a20fe6e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=C5=82=20Cie=C5=9Blak?= Date: Tue, 10 Dec 2024 12:46:40 +0100 Subject: [PATCH 110/111] Deflake teleport/Welcome/Welcome.test.tsx (#49874) --- web/packages/teleport/src/Welcome/Welcome.test.tsx | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/web/packages/teleport/src/Welcome/Welcome.test.tsx b/web/packages/teleport/src/Welcome/Welcome.test.tsx index a4a468139d46c..cae693c2d3479 100644 --- a/web/packages/teleport/src/Welcome/Welcome.test.tsx +++ b/web/packages/teleport/src/Welcome/Welcome.test.tsx @@ -16,7 +16,6 @@ * along with this program. If not, see . */ -import React from 'react'; import { MemoryRouter, Route, Router } from 'react-router'; import { createMemoryHistory } from 'history'; import { fireEvent, render, screen, waitFor } from 'design/utils/testing'; @@ -89,7 +88,7 @@ describe('teleport/components/Welcome', () => { expect(auth.fetchPasswordToken).toHaveBeenCalled(); }); - expect(screen.getByText(/confirm password/i)).toBeInTheDocument(); + expect(await screen.findByText(/confirm password/i)).toBeInTheDocument(); }); it('should have correct welcome prompt flow for reset', async () => { @@ -123,7 +122,7 @@ describe('teleport/components/Welcome', () => { }); expect(auth.fetchPasswordToken).toHaveBeenCalled(); - expect(screen.getByText(/submit/i)).toBeInTheDocument(); + expect(await screen.findByText(/submit/i)).toBeInTheDocument(); }); it('reset password', async () => { @@ -217,7 +216,7 @@ describe('teleport/components/Welcome', () => { }); // Trigger submit. - await user.click(screen.getByText(/submit/i)); + await user.click(await screen.findByText(/submit/i)); expect(auth.resetPasswordWithWebauthn).toHaveBeenCalledWith( expect.objectContaining({ From 18ddda1bf26faffde09dd774387de9e99fdd697c Mon Sep 17 00:00:00 2001 From: milos-teleport <169848006+milos-teleport@users.noreply.github.com> Date: Tue, 10 Dec 2024 15:39:03 +0000 Subject: [PATCH 111/111] fix: Corrected postStart examples (#50004) --- .../reference/helm-reference/teleport-cluster.mdx | 12 ++++++++---- examples/chart/teleport-cluster/values.yaml | 6 ++++-- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/docs/pages/reference/helm-reference/teleport-cluster.mdx b/docs/pages/reference/helm-reference/teleport-cluster.mdx index 1af346bf07cc8..bd76d4c62112c 100644 --- a/docs/pages/reference/helm-reference/teleport-cluster.mdx +++ b/docs/pages/reference/helm-reference/teleport-cluster.mdx @@ -109,11 +109,13 @@ This is merged with chart-scoped values and takes precedence in case of conflict For example, to override the [`postStart`](#postStart) value only for auth pods: ```yaml # By default all pods postStart command should be "echo starting" -postStart: ["echo", "starting"] +postStart: + command: ["echo", "starting"] auth: # But we override the `postStart` value specifically for auth pods - postStart: ["curl", "http://hook"] + postStart: + command: ["curl", "http://hook"] imagePullPolicy: Always ``` @@ -193,11 +195,13 @@ For example, to override the [`postStart`](#postStart) value only for Teleport P and annotate the Kubernetes Service deployed for the Teleport Proxy Service: ```yaml # By default all pods postStart command should be "echo starting" -postStart: ["echo", "starting"] +postStart: + command: ["echo", "starting"] proxy: # But we override the `postStart` value specifically for proxy pods - postStart: ["curl", "http://hook"] + postStart: + command: ["curl", "http://hook"] imagePullPolicy: Always # We also annotate only the Kubernetes Service sending traffic to Proxy Service pods. diff --git a/examples/chart/teleport-cluster/values.yaml b/examples/chart/teleport-cluster/values.yaml index d961a86c7369d..c517fd1da9a00 100644 --- a/examples/chart/teleport-cluster/values.yaml +++ b/examples/chart/teleport-cluster/values.yaml @@ -61,7 +61,8 @@ teleportVersionOverride: "" # For example: # # auth: -# postStart: ["curl", "http://hook"] +# postStart: +# command: ["curl", "http://hook"] # imagePullPolicy: Always auth: # auth.teleportConfig contains YAML teleport configuration for auth pods @@ -84,7 +85,8 @@ auth: # This is merged with chart-scoped values and takes precedence in case of conflict. # For example: # proxy: -# postStart: ["curl", "http://hook"] +# postStart: +# command: ["curl", "http://hook"] # imagePullPolicy: Always # annotations: # service: