diff --git a/.golangci.yml b/.golangci.yml index 4298cda741594..30bbb975728ff 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -89,6 +89,8 @@ linters-settings: deny: - pkg: io/ioutil desc: 'use "io" or "os" packages instead' + - pkg: math/rand$ + desc: 'use "math/rand/v2" or "crypto/rand" instead' - pkg: github.com/golang/protobuf desc: 'use "google.golang.org/protobuf"' - pkg: github.com/hashicorp/go-uuid diff --git a/api/proto/teleport/legacy/types/types.proto b/api/proto/teleport/legacy/types/types.proto index 84e13ec12c6bd..15f0efedecea6 100644 --- a/api/proto/teleport/legacy/types/types.proto +++ b/api/proto/teleport/legacy/types/types.proto @@ -963,6 +963,26 @@ message CORSPolicy { repeated string exposed_headers = 6 [(gogoproto.jsontag) = "exposed_headers,omitempty"]; } +// IdentityCenterPermissionSet defines a permission set that is available on an +// IdentityCenter account app +message IdentityCenterPermissionSet { + // ARN is the fully-formed ARN of the Permission Set. + string ARN = 1 [(gogoproto.jsontag) = "arn,omitempty"]; + + // Name is the human-readable name of the Permission Set. + string Name = 2 [(gogoproto.jsontag) = "name,omitempty"]; +} + +// AppIdentityCenter encapsulates information about an AWS Identity Center +// account application. +message AppIdentityCenter { + // Account ID is the AWS-assigned ID of the account + string AccountID = 1 [(gogoproto.jsontag) = "account_id,omitempty"]; + + // PermissionSets lists the available permission sets on the given account + repeated IdentityCenterPermissionSet PermissionSets = 2 [(gogoproto.jsontag) = "permission_sets,omitempty"]; +} + // AppSpecV3 is the AppV3 resource spec. message AppSpecV3 { // URI is the web app endpoint. @@ -993,6 +1013,9 @@ message AppSpecV3 { repeated string RequiredAppNames = 10 [(gogoproto.jsontag) = "required_app_names,omitempty"]; // CORSPolicy defines the Cross-Origin Resource Sharing settings for the app. CORSPolicy CORS = 11 [(gogoproto.jsontag) = "cors,omitempty"]; + // IdentityCenter encasulates AWS identity-center specific information. Only + // valid for Identity Center account apps. + AppIdentityCenter IdentityCenter = 12 [(gogoproto.jsontag) = "identity_center,omitempty"]; } // AppServerOrSAMLIdPServiceProviderV1 holds either an AppServerV3 or a SAMLIdPServiceProviderV1 resource (never both). @@ -1321,6 +1344,8 @@ message ProvisionTokenSpecV2 { ProvisionTokenSpecV2TPM TPM = 15 [(gogoproto.jsontag) = "tpm,omitempty"]; // TerraformCloud allows the configuration of options specific to the "terraform_cloud" join method. ProvisionTokenSpecV2TerraformCloud TerraformCloud = 16 [(gogoproto.jsontag) = "terraform_cloud,omitempty"]; + // Bitbucket allows the configuration of options specific to the "bitbucket" join method. + ProvisionTokenSpecV2Bitbucket Bitbucket = 17 [(gogoproto.jsontag) = "bitbucket,omitempty"]; } // ProvisionTokenSpecV2TPM contains the TPM-specific part of the @@ -1666,6 +1691,49 @@ message ProvisionTokenSpecV2TerraformCloud { string Hostname = 3 [(gogoproto.jsontag) = "hostname,omitempty"]; } +message ProvisionTokenSpecV2Bitbucket { + // Rule is a set of properties the Bitbucket-issued token might have to be + // allowed to use this ProvisionToken. + message Rule { + // WorkspaceUUID is the UUID of the workspace for which this token was + // issued. Bitbucket UUIDs must begin and end with braces, e.g. `{...}`. + // This value may be found in the Pipelines -> OpenID Connect section of the + // repository settings. + string WorkspaceUUID = 1 [(gogoproto.jsontag) = "workspace_uuid,omitempty"]; + + // RepositoryUUID is the UUID of the repository for which this token was + // issued. Bitbucket UUIDs must begin and end with braces, e.g. `{...}`. + // This value may be found in the Pipelines -> OpenID Connect section of the + // repository settings. + string RepositoryUUID = 2 [(gogoproto.jsontag) = "repository_uuid,omitempty"]; + + // DeploymentEnvironmentUUID is the UUID of the deployment environment + // targeted by this pipelines run, if any. These values may be found in the + // "Pipelines -> OpenID Connect -> Deployment environments" section of the + // repository settings. + string DeploymentEnvironmentUUID = 3 [(gogoproto.jsontag) = "deployment_environment_uuid,omitempty"]; + + // BranchName is the name of the branch on which this pipeline executed. + string BranchName = 4 [(gogoproto.jsontag) = "branch_name,omitempty"]; + } + + // Allow is a list of Rules, nodes using this token must match one + // allow rule to use this token. + repeated Rule Allow = 1 [(gogoproto.jsontag) = "allow,omitempty"]; + + // Audience is a Bitbucket-specified audience value for this token. It is + // unique to each Bitbucket repository, and must be set to the value as + // written in the Pipelines -> OpenID Connect section of the repository + // settings. + string Audience = 2 [(gogoproto.jsontag) = "audience,omitempty"]; + + // IdentityProviderURL is a Bitbucket-specified issuer URL for incoming OIDC + // tokens. It is unique to each Bitbucket repository, and must be set to the + // value as written in the Pipelines -> OpenID Connect section of the + // repository settings. + string IdentityProviderURL = 3 [(gogoproto.jsontag) = "identity_provider_url,omitempty"]; +} + // StaticTokensV2 implements the StaticTokens interface. message StaticTokensV2 { option (gogoproto.goproto_stringer) = false; @@ -3440,6 +3508,22 @@ message AccessRequestConditions { (gogoproto.nullable) = false, (gogoproto.jsontag) = "kubernetes_resources,omitempty" ]; + + // Reason defines settings for the reason for the access provided by the user. + AccessRequestConditionsReason Reason = 9 [(gogoproto.jsontag) = "reason,omitempty"]; +} + +// AccessRequestConditionsReason defines settings for the reason for the access provided by the +// user. +message AccessRequestConditionsReason { + // Mode can be either "required" or "optional". Empty string is treated as "optional". If a role + // has the request reason mode set to "required", then reason is required for all Access Requests + // requesting roles or resources allowed by this role. It applies only to users who have this + // role assigned. + string Mode = 1 [ + (gogoproto.jsontag) = "mode,omitempty", + (gogoproto.casttype) = "RequestReasonMode" + ]; } // AccessReviewConditions is a matcher for allow/deny restrictions on diff --git a/api/types/access_request.go b/api/types/access_request.go index c682b262e441d..3854e4270e1f7 100644 --- a/api/types/access_request.go +++ b/api/types/access_request.go @@ -642,6 +642,47 @@ func (u *AccessRequestUpdate) Check() error { return nil } +// RequestReasonMode can be either "required" or "optional". Empty-string is treated as "optional". +// If a role has the request reason mode set to "required", then reason is required for all Access +// Requests requesting roles or resources allowed by this role. It applies only to users who have +// this role assigned. +type RequestReasonMode string + +const ( + // RequestReasonModeRequired indicates required mode. See [[RequestReasonMode]] godoc for + // more details. + RequestReasonModeRequired RequestReasonMode = "required" + // RequestReasonModeRequired indicates optional mode. See [[RequestReasonMode]] godoc for + // more details. + RequestReasonModeOptional RequestReasonMode = "optional" +) + +var allRequestReasonModes = []RequestReasonMode{ + RequestReasonModeRequired, + RequestReasonModeOptional, +} + +// Required checks if this mode is "required". Empty mode is treated as "optional". +func (m RequestReasonMode) Required() bool { + switch m { + case RequestReasonModeRequired: + return true + default: + return false + } +} + +// Check validates this mode value. Note that an empty value is considered invalid. +func (m RequestReasonMode) Check() error { + for _, x := range allRequestReasonModes { + if m == x { + return nil + } + } + return trace.BadParameter("unrecognized request reason mode %q, must be one of: %v", + m, allRequestReasonModes) +} + // RequestStrategy is an indicator of how access requests // should be handled for holders of a given role. type RequestStrategy string diff --git a/api/types/derived.gen.go b/api/types/derived.gen.go index 0f96c2afaa430..3466910f675bd 100644 --- a/api/types/derived.gen.go +++ b/api/types/derived.gen.go @@ -194,7 +194,8 @@ func deriveTeleportEqual(this, that *AppSpecV3) bool { deriveTeleportEqual_21(this.UserGroups, that.UserGroups) && this.Integration == that.Integration && deriveTeleportEqual_21(this.RequiredAppNames, that.RequiredAppNames) && - deriveTeleportEqual_22(this.CORS, that.CORS) + deriveTeleportEqual_22(this.CORS, that.CORS) && + deriveTeleportEqual_23(this.IdentityCenter, that.IdentityCenter) } // deriveTeleportEqual_ returns whether this and that are equal. @@ -319,12 +320,12 @@ func deriveTeleportEqual_11(this, that *DatabaseSpecV3) bool { deriveTeleportEqualAWS(&this.AWS, &that.AWS) && deriveTeleportEqualGCPCloudSQL(&this.GCP, &that.GCP) && deriveTeleportEqualAzure(&this.Azure, &that.Azure) && - deriveTeleportEqual_23(&this.TLS, &that.TLS) && - deriveTeleportEqual_24(&this.AD, &that.AD) && - deriveTeleportEqual_25(&this.MySQL, &that.MySQL) && - deriveTeleportEqual_26(this.AdminUser, that.AdminUser) && - deriveTeleportEqual_27(&this.MongoAtlas, &that.MongoAtlas) && - deriveTeleportEqual_28(&this.Oracle, &that.Oracle) + deriveTeleportEqual_24(&this.TLS, &that.TLS) && + deriveTeleportEqual_25(&this.AD, &that.AD) && + deriveTeleportEqual_26(&this.MySQL, &that.MySQL) && + deriveTeleportEqual_27(this.AdminUser, that.AdminUser) && + deriveTeleportEqual_28(&this.MongoAtlas, &that.MongoAtlas) && + deriveTeleportEqual_29(&this.Oracle, &that.Oracle) } // deriveTeleportEqual_12 returns whether this and that are equal. @@ -334,7 +335,7 @@ func deriveTeleportEqual_12(this, that *DynamicWindowsDesktopSpecV1) bool { this.Addr == that.Addr && this.Domain == that.Domain && this.NonAD == that.NonAD && - deriveTeleportEqual_29(this.ScreenSize, that.ScreenSize) + deriveTeleportEqual_30(this.ScreenSize, that.ScreenSize) } // deriveTeleportEqual_13 returns whether this and that are equal. @@ -345,7 +346,7 @@ func deriveTeleportEqual_13(this, that *WindowsDesktopSpecV3) bool { this.Domain == that.Domain && this.HostID == that.HostID && this.NonAD == that.NonAD && - deriveTeleportEqual_29(this.ScreenSize, that.ScreenSize) + deriveTeleportEqual_30(this.ScreenSize, that.ScreenSize) } // deriveTeleportEqual_14 returns whether this and that are equal. @@ -366,7 +367,7 @@ func deriveTeleportEqual_15(this, that *KubernetesServerSpecV3) bool { this.Version == that.Version && this.Hostname == that.Hostname && this.HostID == that.HostID && - deriveTeleportEqual_30(&this.Rotation, &that.Rotation) && + deriveTeleportEqual_31(&this.Rotation, &that.Rotation) && deriveTeleportEqualKubernetesClusterV3(this.Cluster, that.Cluster) && deriveTeleportEqual_21(this.ProxyIDs, that.ProxyIDs) } @@ -376,7 +377,7 @@ func deriveTeleportEqual_16(this, that *OktaAssignmentSpecV1) bool { return (this == nil && that == nil) || this != nil && that != nil && this.User == that.User && - deriveTeleportEqual_31(this.Targets, that.Targets) && + deriveTeleportEqual_32(this.Targets, that.Targets) && this.CleanupTime.Equal(that.CleanupTime) && this.Status == that.Status && this.LastTransition.Equal(that.LastTransition) && @@ -403,7 +404,7 @@ func deriveTeleportEqual_18(this, that map[string]CommandLabelV2) bool { if !ok { return false } - if !(deriveTeleportEqual_32(&v, &thatv)) { + if !(deriveTeleportEqual_33(&v, &thatv)) { return false } } @@ -415,7 +416,7 @@ func deriveTeleportEqual_19(this, that *Rewrite) bool { return (this == nil && that == nil) || this != nil && that != nil && deriveTeleportEqual_21(this.Redirect, that.Redirect) && - deriveTeleportEqual_33(this.Headers, that.Headers) && + deriveTeleportEqual_34(this.Headers, that.Headers) && this.JWTClaims == that.JWTClaims } @@ -455,7 +456,15 @@ func deriveTeleportEqual_22(this, that *CORSPolicy) bool { } // deriveTeleportEqual_23 returns whether this and that are equal. -func deriveTeleportEqual_23(this, that *DatabaseTLS) bool { +func deriveTeleportEqual_23(this, that *AppIdentityCenter) bool { + return (this == nil && that == nil) || + this != nil && that != nil && + this.AccountID == that.AccountID && + deriveTeleportEqual_35(this.PermissionSets, that.PermissionSets) +} + +// deriveTeleportEqual_24 returns whether this and that are equal. +func deriveTeleportEqual_24(this, that *DatabaseTLS) bool { return (this == nil && that == nil) || this != nil && that != nil && this.Mode == that.Mode && @@ -464,8 +473,8 @@ func deriveTeleportEqual_23(this, that *DatabaseTLS) bool { this.TrustSystemCertPool == that.TrustSystemCertPool } -// deriveTeleportEqual_24 returns whether this and that are equal. -func deriveTeleportEqual_24(this, that *AD) bool { +// deriveTeleportEqual_25 returns whether this and that are equal. +func deriveTeleportEqual_25(this, that *AD) bool { return (this == nil && that == nil) || this != nil && that != nil && this.KeytabFile == that.KeytabFile && @@ -476,45 +485,45 @@ func deriveTeleportEqual_24(this, that *AD) bool { this.KDCHostName == that.KDCHostName } -// deriveTeleportEqual_25 returns whether this and that are equal. -func deriveTeleportEqual_25(this, that *MySQLOptions) bool { +// deriveTeleportEqual_26 returns whether this and that are equal. +func deriveTeleportEqual_26(this, that *MySQLOptions) bool { return (this == nil && that == nil) || this != nil && that != nil && this.ServerVersion == that.ServerVersion } -// deriveTeleportEqual_26 returns whether this and that are equal. -func deriveTeleportEqual_26(this, that *DatabaseAdminUser) bool { +// deriveTeleportEqual_27 returns whether this and that are equal. +func deriveTeleportEqual_27(this, that *DatabaseAdminUser) bool { return (this == nil && that == nil) || this != nil && that != nil && this.Name == that.Name && this.DefaultDatabase == that.DefaultDatabase } -// deriveTeleportEqual_27 returns whether this and that are equal. -func deriveTeleportEqual_27(this, that *MongoAtlas) bool { +// deriveTeleportEqual_28 returns whether this and that are equal. +func deriveTeleportEqual_28(this, that *MongoAtlas) bool { return (this == nil && that == nil) || this != nil && that != nil && this.Name == that.Name } -// deriveTeleportEqual_28 returns whether this and that are equal. -func deriveTeleportEqual_28(this, that *OracleOptions) bool { +// deriveTeleportEqual_29 returns whether this and that are equal. +func deriveTeleportEqual_29(this, that *OracleOptions) bool { return (this == nil && that == nil) || this != nil && that != nil && this.AuditUser == that.AuditUser } -// deriveTeleportEqual_29 returns whether this and that are equal. -func deriveTeleportEqual_29(this, that *Resolution) bool { +// deriveTeleportEqual_30 returns whether this and that are equal. +func deriveTeleportEqual_30(this, that *Resolution) bool { return (this == nil && that == nil) || this != nil && that != nil && this.Width == that.Width && this.Height == that.Height } -// deriveTeleportEqual_30 returns whether this and that are equal. -func deriveTeleportEqual_30(this, that *Rotation) bool { +// deriveTeleportEqual_31 returns whether this and that are equal. +func deriveTeleportEqual_31(this, that *Rotation) bool { return (this == nil && that == nil) || this != nil && that != nil && this.State == that.State && @@ -524,11 +533,11 @@ func deriveTeleportEqual_30(this, that *Rotation) bool { this.Started.Equal(that.Started) && this.GracePeriod == that.GracePeriod && this.LastRotated.Equal(that.LastRotated) && - deriveTeleportEqual_34(&this.Schedule, &that.Schedule) + deriveTeleportEqual_36(&this.Schedule, &that.Schedule) } -// deriveTeleportEqual_31 returns whether this and that are equal. -func deriveTeleportEqual_31(this, that []*OktaAssignmentTargetV1) bool { +// deriveTeleportEqual_32 returns whether this and that are equal. +func deriveTeleportEqual_32(this, that []*OktaAssignmentTargetV1) bool { if this == nil || that == nil { return this == nil && that == nil } @@ -536,15 +545,15 @@ func deriveTeleportEqual_31(this, that []*OktaAssignmentTargetV1) bool { return false } for i := 0; i < len(this); i++ { - if !(deriveTeleportEqual_35(this[i], that[i])) { + if !(deriveTeleportEqual_37(this[i], that[i])) { return false } } return true } -// deriveTeleportEqual_32 returns whether this and that are equal. -func deriveTeleportEqual_32(this, that *CommandLabelV2) bool { +// deriveTeleportEqual_33 returns whether this and that are equal. +func deriveTeleportEqual_33(this, that *CommandLabelV2) bool { return (this == nil && that == nil) || this != nil && that != nil && this.Period == that.Period && @@ -552,8 +561,8 @@ func deriveTeleportEqual_32(this, that *CommandLabelV2) bool { this.Result == that.Result } -// deriveTeleportEqual_33 returns whether this and that are equal. -func deriveTeleportEqual_33(this, that []*Header) bool { +// deriveTeleportEqual_34 returns whether this and that are equal. +func deriveTeleportEqual_34(this, that []*Header) bool { if this == nil || that == nil { return this == nil && that == nil } @@ -561,15 +570,31 @@ func deriveTeleportEqual_33(this, that []*Header) bool { return false } for i := 0; i < len(this); i++ { - if !(deriveTeleportEqual_36(this[i], that[i])) { + if !(deriveTeleportEqual_38(this[i], that[i])) { return false } } return true } -// deriveTeleportEqual_34 returns whether this and that are equal. -func deriveTeleportEqual_34(this, that *RotationSchedule) bool { +// deriveTeleportEqual_35 returns whether this and that are equal. +func deriveTeleportEqual_35(this, that []*IdentityCenterPermissionSet) bool { + if this == nil || that == nil { + return this == nil && that == nil + } + if len(this) != len(that) { + return false + } + for i := 0; i < len(this); i++ { + if !(deriveTeleportEqual_39(this[i], that[i])) { + return false + } + } + return true +} + +// deriveTeleportEqual_36 returns whether this and that are equal. +func deriveTeleportEqual_36(this, that *RotationSchedule) bool { return (this == nil && that == nil) || this != nil && that != nil && this.UpdateClients.Equal(that.UpdateClients) && @@ -577,18 +602,26 @@ func deriveTeleportEqual_34(this, that *RotationSchedule) bool { this.Standby.Equal(that.Standby) } -// deriveTeleportEqual_35 returns whether this and that are equal. -func deriveTeleportEqual_35(this, that *OktaAssignmentTargetV1) bool { +// deriveTeleportEqual_37 returns whether this and that are equal. +func deriveTeleportEqual_37(this, that *OktaAssignmentTargetV1) bool { return (this == nil && that == nil) || this != nil && that != nil && this.Type == that.Type && this.Id == that.Id } -// deriveTeleportEqual_36 returns whether this and that are equal. -func deriveTeleportEqual_36(this, that *Header) bool { +// deriveTeleportEqual_38 returns whether this and that are equal. +func deriveTeleportEqual_38(this, that *Header) bool { return (this == nil && that == nil) || this != nil && that != nil && this.Name == that.Name && this.Value == that.Value } + +// deriveTeleportEqual_39 returns whether this and that are equal. +func deriveTeleportEqual_39(this, that *IdentityCenterPermissionSet) bool { + return (this == nil && that == nil) || + this != nil && that != nil && + this.ARN == that.ARN && + this.Name == that.Name +} diff --git a/api/types/provisioning.go b/api/types/provisioning.go index b394b9458a044..ea3d98ef208c2 100644 --- a/api/types/provisioning.go +++ b/api/types/provisioning.go @@ -74,6 +74,9 @@ const ( // JoinMethodTerraformCloud indicates that the node will join using the Terraform // join method. See lib/terraformcloud for more. JoinMethodTerraformCloud JoinMethod = "terraform_cloud" + // JoinMethodBitbucket indicates that the node will join using the Bitbucket + // join method. See lib/bitbucket for more. + JoinMethodBitbucket JoinMethod = "bitbucket" ) var JoinMethods = []JoinMethod{ @@ -363,6 +366,17 @@ func (p *ProvisionTokenV2) CheckAndSetDefaults() error { if err := providerCfg.checkAndSetDefaults(); err != nil { return trace.Wrap(err, "spec.terraform_cloud: failed validation") } + case JoinMethodBitbucket: + providerCfg := p.Spec.Bitbucket + if providerCfg == nil { + return trace.BadParameter( + "spec.bitbucket: must be configured for the join method %q", + JoinMethodBitbucket, + ) + } + if err := providerCfg.checkAndSetDefaults(); err != nil { + return trace.Wrap(err, "spec.bitbucket: failed validation") + } default: return trace.BadParameter("unknown join method %q", p.Spec.JoinMethod) } @@ -862,3 +876,31 @@ func (a *ProvisionTokenSpecV2TerraformCloud) checkAndSetDefaults() error { return nil } + +func (a *ProvisionTokenSpecV2Bitbucket) checkAndSetDefaults() error { + if len(a.Allow) == 0 { + return trace.BadParameter("the %q join method requires at least one token allow rule", JoinMethodBitbucket) + } + + if a.Audience == "" { + return trace.BadParameter("audience: an OpenID Connect Audience value is required") + } + + if a.IdentityProviderURL == "" { + return trace.BadParameter("identity_provider_url: an identity provider URL is required") + } + + for i, rule := range a.Allow { + workspaceSet := rule.WorkspaceUUID != "" + repositorySet := rule.RepositoryUUID != "" + + if !workspaceSet && !repositorySet { + return trace.BadParameter( + "allow[%d]: at least one of ['workspace_uuid', 'repository_uuid'] must be set", + i, + ) + } + } + + return nil +} diff --git a/api/types/provisioning_test.go b/api/types/provisioning_test.go index be43fe756a9a0..d4679432fa334 100644 --- a/api/types/provisioning_test.go +++ b/api/types/provisioning_test.go @@ -1169,6 +1169,114 @@ func TestProvisionTokenV2_CheckAndSetDefaults(t *testing.T) { }, wantErr: true, }, + { + desc: "bitbucket only workspace", + token: &ProvisionTokenV2{ + Metadata: Metadata{ + Name: "test", + }, + Spec: ProvisionTokenSpecV2{ + Roles: []SystemRole{RoleNode}, + JoinMethod: JoinMethodBitbucket, + Bitbucket: &ProvisionTokenSpecV2Bitbucket{ + Audience: "foo", + IdentityProviderURL: "https://example.com", + Allow: []*ProvisionTokenSpecV2Bitbucket_Rule{ + { + WorkspaceUUID: "{foo}", + }, + }, + }, + }, + }, + wantErr: false, + }, + { + desc: "bitbucket only repository", + token: &ProvisionTokenV2{ + Metadata: Metadata{ + Name: "test", + }, + Spec: ProvisionTokenSpecV2{ + Roles: []SystemRole{RoleNode}, + JoinMethod: JoinMethodBitbucket, + Bitbucket: &ProvisionTokenSpecV2Bitbucket{ + Audience: "foo", + IdentityProviderURL: "https://example.com", + Allow: []*ProvisionTokenSpecV2Bitbucket_Rule{ + { + RepositoryUUID: "{foo}", + }, + }, + }, + }, + }, + wantErr: false, + }, + { + desc: "bitbucket missing audience", + token: &ProvisionTokenV2{ + Metadata: Metadata{ + Name: "test", + }, + Spec: ProvisionTokenSpecV2{ + Roles: []SystemRole{RoleNode}, + JoinMethod: JoinMethodBitbucket, + Bitbucket: &ProvisionTokenSpecV2Bitbucket{ + IdentityProviderURL: "https://example.com", + Allow: []*ProvisionTokenSpecV2Bitbucket_Rule{ + { + WorkspaceUUID: "{foo}", + }, + }, + }, + }, + }, + wantErr: true, + }, + { + desc: "bitbucket missing identity provider", + token: &ProvisionTokenV2{ + Metadata: Metadata{ + Name: "test", + }, + Spec: ProvisionTokenSpecV2{ + Roles: []SystemRole{RoleNode}, + JoinMethod: JoinMethodBitbucket, + Bitbucket: &ProvisionTokenSpecV2Bitbucket{ + Audience: "foo", + Allow: []*ProvisionTokenSpecV2Bitbucket_Rule{ + { + WorkspaceUUID: "{foo}", + }, + }, + }, + }, + }, + wantErr: true, + }, + { + desc: "bitbucket missing workspace or repository", + token: &ProvisionTokenV2{ + Metadata: Metadata{ + Name: "test", + }, + Spec: ProvisionTokenSpecV2{ + Roles: []SystemRole{RoleNode}, + JoinMethod: JoinMethodBitbucket, + Bitbucket: &ProvisionTokenSpecV2Bitbucket{ + Audience: "foo", + IdentityProviderURL: "https://example.com", + Allow: []*ProvisionTokenSpecV2Bitbucket_Rule{ + { + DeploymentEnvironmentUUID: "{foo}", + }, + }, + }, + }, + }, + wantErr: true, + }, } for _, tc := range testcases { diff --git a/api/types/role.go b/api/types/role.go index af435f822074d..1529a4c81cc20 100644 --- a/api/types/role.go +++ b/api/types/role.go @@ -92,6 +92,9 @@ type Role interface { // GetRoleConditions gets the RoleConditions for the RoleConditionType. GetRoleConditions(rct RoleConditionType) RoleConditions + // GetRequestReasonMode gets the RequestReasonMode for the RoleConditionType. + GetRequestReasonMode(RoleConditionType) RequestReasonMode + // GetLabelMatchers gets the LabelMatchers that match labels of resources of // type [kind] this role is allowed or denied access to. GetLabelMatchers(rct RoleConditionType, kind string) (LabelMatchers, error) @@ -1715,10 +1718,7 @@ func (r *RoleV6) SetSearchAsRoles(rct RoleConditionType, roles []string) { // purposes of viewing details such as the hostname and labels of requested // resources. func (r *RoleV6) GetPreviewAsRoles(rct RoleConditionType) []string { - roleConditions := &r.Spec.Allow - if rct == Deny { - roleConditions = &r.Spec.Deny - } + roleConditions := r.GetRoleConditions(rct) if roleConditions.ReviewRequests == nil { return nil } @@ -1735,6 +1735,15 @@ func (r *RoleV6) GetRoleConditions(rct RoleConditionType) RoleConditions { return roleConditions } +// GetRoleConditions returns the role conditions for the role. +func (r *RoleV6) GetRequestReasonMode(rct RoleConditionType) RequestReasonMode { + roleConditions := r.GetRoleConditions(rct) + if roleConditions.Request == nil || roleConditions.Request.Reason == nil { + return "" + } + return roleConditions.Request.Reason.Mode +} + // SetPreviewAsRoles sets the list of extra roles which should apply to a // reviewer while they are viewing a Resource Access Request for the // purposes of viewing details such as the hostname and labels of requested diff --git a/api/types/types.pb.go b/api/types/types.pb.go index 8584c4bb8431b..c25226d27298f 100644 --- a/api/types/types.pb.go +++ b/api/types/types.pb.go @@ -1089,7 +1089,7 @@ func (x CertAuthoritySpecV2_SigningAlgType) String() string { } func (CertAuthoritySpecV2_SigningAlgType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{53, 0} + return fileDescriptor_9198ee693835762e, []int{55, 0} } // FIPSEndpointState represents an AWS FIPS endpoint state. @@ -1122,7 +1122,7 @@ func (x ClusterAuditConfigSpecV2_FIPSEndpointState) String() string { } func (ClusterAuditConfigSpecV2_FIPSEndpointState) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{75, 0} + return fileDescriptor_9198ee693835762e, []int{78, 0} } // TraceType is an identification of the checkpoint. @@ -1192,7 +1192,7 @@ func (x ConnectionDiagnosticTrace_TraceType) String() string { } func (ConnectionDiagnosticTrace_TraceType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{252, 0} + return fileDescriptor_9198ee693835762e, []int{256, 0} } // StatusType describes whether this was a success or a failure. @@ -1221,7 +1221,7 @@ func (x ConnectionDiagnosticTrace_StatusType) String() string { } func (ConnectionDiagnosticTrace_StatusType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{252, 1} + return fileDescriptor_9198ee693835762e, []int{256, 1} } // OktaAssignmentStatus represents the status of an Okta assignment. @@ -1261,7 +1261,7 @@ func (x OktaAssignmentSpecV1_OktaAssignmentStatus) String() string { } func (OktaAssignmentSpecV1_OktaAssignmentStatus) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{333, 0} + return fileDescriptor_9198ee693835762e, []int{337, 0} } // OktaAssignmentTargetType is the type of Okta object that an assignment is targeting. @@ -1293,7 +1293,7 @@ func (x OktaAssignmentTargetV1_OktaAssignmentTargetType) String() string { } func (OktaAssignmentTargetV1_OktaAssignmentTargetType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{334, 0} + return fileDescriptor_9198ee693835762e, []int{338, 0} } type KeepAlive struct { @@ -3464,6 +3464,96 @@ func (m *CORSPolicy) XXX_DiscardUnknown() { var xxx_messageInfo_CORSPolicy proto.InternalMessageInfo +// IdentityCenterPermissionSet defines a permission set that is available on an +// IdentityCenter account app +type IdentityCenterPermissionSet struct { + // ARN is the fully-formed ARN of the Permission Set. + ARN string `protobuf:"bytes,1,opt,name=ARN,proto3" json:"arn,omitempty"` + // Name is the human-readable name of the Permission Set. + Name string `protobuf:"bytes,2,opt,name=Name,proto3" json:"name,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *IdentityCenterPermissionSet) Reset() { *m = IdentityCenterPermissionSet{} } +func (m *IdentityCenterPermissionSet) String() string { return proto.CompactTextString(m) } +func (*IdentityCenterPermissionSet) ProtoMessage() {} +func (*IdentityCenterPermissionSet) Descriptor() ([]byte, []int) { + return fileDescriptor_9198ee693835762e, []int{43} +} +func (m *IdentityCenterPermissionSet) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *IdentityCenterPermissionSet) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_IdentityCenterPermissionSet.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *IdentityCenterPermissionSet) XXX_Merge(src proto.Message) { + xxx_messageInfo_IdentityCenterPermissionSet.Merge(m, src) +} +func (m *IdentityCenterPermissionSet) XXX_Size() int { + return m.Size() +} +func (m *IdentityCenterPermissionSet) XXX_DiscardUnknown() { + xxx_messageInfo_IdentityCenterPermissionSet.DiscardUnknown(m) +} + +var xxx_messageInfo_IdentityCenterPermissionSet proto.InternalMessageInfo + +// AppIdentityCenter encapsulates information about an AWS Identity Center +// account application. +type AppIdentityCenter struct { + // Account ID is the AWS-assigned ID of the account + AccountID string `protobuf:"bytes,1,opt,name=AccountID,proto3" json:"account_id,omitempty"` + // PermissionSets lists the available permission sets on the given account + PermissionSets []*IdentityCenterPermissionSet `protobuf:"bytes,2,rep,name=PermissionSets,proto3" json:"permission_sets,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *AppIdentityCenter) Reset() { *m = AppIdentityCenter{} } +func (m *AppIdentityCenter) String() string { return proto.CompactTextString(m) } +func (*AppIdentityCenter) ProtoMessage() {} +func (*AppIdentityCenter) Descriptor() ([]byte, []int) { + return fileDescriptor_9198ee693835762e, []int{44} +} +func (m *AppIdentityCenter) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *AppIdentityCenter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_AppIdentityCenter.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *AppIdentityCenter) XXX_Merge(src proto.Message) { + xxx_messageInfo_AppIdentityCenter.Merge(m, src) +} +func (m *AppIdentityCenter) XXX_Size() int { + return m.Size() +} +func (m *AppIdentityCenter) XXX_DiscardUnknown() { + xxx_messageInfo_AppIdentityCenter.DiscardUnknown(m) +} + +var xxx_messageInfo_AppIdentityCenter proto.InternalMessageInfo + // AppSpecV3 is the AppV3 resource spec. type AppSpecV3 struct { // URI is the web app endpoint. @@ -3490,17 +3580,20 @@ type AppSpecV3 struct { // be part of the authentication redirect flow and authenticate along side this app. RequiredAppNames []string `protobuf:"bytes,10,rep,name=RequiredAppNames,proto3" json:"required_app_names,omitempty"` // CORSPolicy defines the Cross-Origin Resource Sharing settings for the app. - CORS *CORSPolicy `protobuf:"bytes,11,opt,name=CORS,proto3" json:"cors,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + CORS *CORSPolicy `protobuf:"bytes,11,opt,name=CORS,proto3" json:"cors,omitempty"` + // IdentityCenter encasulates AWS identity-center specific information. Only + // valid for Identity Center account apps. + IdentityCenter *AppIdentityCenter `protobuf:"bytes,12,opt,name=IdentityCenter,proto3" json:"identity_center,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *AppSpecV3) Reset() { *m = AppSpecV3{} } func (m *AppSpecV3) String() string { return proto.CompactTextString(m) } func (*AppSpecV3) ProtoMessage() {} func (*AppSpecV3) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{43} + return fileDescriptor_9198ee693835762e, []int{45} } func (m *AppSpecV3) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3552,7 +3645,7 @@ type AppServerOrSAMLIdPServiceProviderV1 struct { func (m *AppServerOrSAMLIdPServiceProviderV1) Reset() { *m = AppServerOrSAMLIdPServiceProviderV1{} } func (*AppServerOrSAMLIdPServiceProviderV1) ProtoMessage() {} func (*AppServerOrSAMLIdPServiceProviderV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{44} + return fileDescriptor_9198ee693835762e, []int{46} } func (m *AppServerOrSAMLIdPServiceProviderV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3647,7 +3740,7 @@ func (m *Rewrite) Reset() { *m = Rewrite{} } func (m *Rewrite) String() string { return proto.CompactTextString(m) } func (*Rewrite) ProtoMessage() {} func (*Rewrite) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{45} + return fileDescriptor_9198ee693835762e, []int{47} } func (m *Rewrite) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3691,7 +3784,7 @@ func (m *Header) Reset() { *m = Header{} } func (m *Header) String() string { return proto.CompactTextString(m) } func (*Header) ProtoMessage() {} func (*Header) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{46} + return fileDescriptor_9198ee693835762e, []int{48} } func (m *Header) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3738,7 +3831,7 @@ func (m *CommandLabelV2) Reset() { *m = CommandLabelV2{} } func (m *CommandLabelV2) String() string { return proto.CompactTextString(m) } func (*CommandLabelV2) ProtoMessage() {} func (*CommandLabelV2) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{47} + return fileDescriptor_9198ee693835762e, []int{49} } func (m *CommandLabelV2) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3780,7 +3873,7 @@ func (m *AppAWS) Reset() { *m = AppAWS{} } func (m *AppAWS) String() string { return proto.CompactTextString(m) } func (*AppAWS) ProtoMessage() {} func (*AppAWS) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{48} + return fileDescriptor_9198ee693835762e, []int{50} } func (m *AppAWS) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3826,7 +3919,7 @@ func (m *SSHKeyPair) Reset() { *m = SSHKeyPair{} } func (m *SSHKeyPair) String() string { return proto.CompactTextString(m) } func (*SSHKeyPair) ProtoMessage() {} func (*SSHKeyPair) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{49} + return fileDescriptor_9198ee693835762e, []int{51} } func (m *SSHKeyPair) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3872,7 +3965,7 @@ func (m *TLSKeyPair) Reset() { *m = TLSKeyPair{} } func (m *TLSKeyPair) String() string { return proto.CompactTextString(m) } func (*TLSKeyPair) ProtoMessage() {} func (*TLSKeyPair) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{50} + return fileDescriptor_9198ee693835762e, []int{52} } func (m *TLSKeyPair) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3918,7 +4011,7 @@ func (m *JWTKeyPair) Reset() { *m = JWTKeyPair{} } func (m *JWTKeyPair) String() string { return proto.CompactTextString(m) } func (*JWTKeyPair) ProtoMessage() {} func (*JWTKeyPair) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{51} + return fileDescriptor_9198ee693835762e, []int{53} } func (m *JWTKeyPair) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3967,7 +4060,7 @@ type CertAuthorityV2 struct { func (m *CertAuthorityV2) Reset() { *m = CertAuthorityV2{} } func (*CertAuthorityV2) ProtoMessage() {} func (*CertAuthorityV2) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{52} + return fileDescriptor_9198ee693835762e, []int{54} } func (m *CertAuthorityV2) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4028,7 +4121,7 @@ func (m *CertAuthoritySpecV2) Reset() { *m = CertAuthoritySpecV2{} } func (m *CertAuthoritySpecV2) String() string { return proto.CompactTextString(m) } func (*CertAuthoritySpecV2) ProtoMessage() {} func (*CertAuthoritySpecV2) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{53} + return fileDescriptor_9198ee693835762e, []int{55} } func (m *CertAuthoritySpecV2) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4074,7 +4167,7 @@ func (m *CAKeySet) Reset() { *m = CAKeySet{} } func (m *CAKeySet) String() string { return proto.CompactTextString(m) } func (*CAKeySet) ProtoMessage() {} func (*CAKeySet) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{54} + return fileDescriptor_9198ee693835762e, []int{56} } func (m *CAKeySet) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4119,7 +4212,7 @@ func (m *RoleMapping) Reset() { *m = RoleMapping{} } func (m *RoleMapping) String() string { return proto.CompactTextString(m) } func (*RoleMapping) ProtoMessage() {} func (*RoleMapping) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{55} + return fileDescriptor_9198ee693835762e, []int{57} } func (m *RoleMapping) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4167,7 +4260,7 @@ type ProvisionTokenV1 struct { func (m *ProvisionTokenV1) Reset() { *m = ProvisionTokenV1{} } func (*ProvisionTokenV1) ProtoMessage() {} func (*ProvisionTokenV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{56} + return fileDescriptor_9198ee693835762e, []int{58} } func (m *ProvisionTokenV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4217,7 +4310,7 @@ type ProvisionTokenV2 struct { func (m *ProvisionTokenV2) Reset() { *m = ProvisionTokenV2{} } func (*ProvisionTokenV2) ProtoMessage() {} func (*ProvisionTokenV2) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{57} + return fileDescriptor_9198ee693835762e, []int{59} } func (m *ProvisionTokenV2) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4259,7 +4352,7 @@ func (m *ProvisionTokenV2List) Reset() { *m = ProvisionTokenV2List{} } func (m *ProvisionTokenV2List) String() string { return proto.CompactTextString(m) } func (*ProvisionTokenV2List) ProtoMessage() {} func (*ProvisionTokenV2List) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{58} + return fileDescriptor_9198ee693835762e, []int{60} } func (m *ProvisionTokenV2List) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4311,7 +4404,7 @@ func (m *TokenRule) Reset() { *m = TokenRule{} } func (m *TokenRule) String() string { return proto.CompactTextString(m) } func (*TokenRule) ProtoMessage() {} func (*TokenRule) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{59} + return fileDescriptor_9198ee693835762e, []int{61} } func (m *TokenRule) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4383,17 +4476,19 @@ type ProvisionTokenSpecV2 struct { // TPM allows the configuration of options specific to the "tpm" join method. TPM *ProvisionTokenSpecV2TPM `protobuf:"bytes,15,opt,name=TPM,proto3" json:"tpm,omitempty"` // TerraformCloud allows the configuration of options specific to the "terraform_cloud" join method. - TerraformCloud *ProvisionTokenSpecV2TerraformCloud `protobuf:"bytes,16,opt,name=TerraformCloud,proto3" json:"terraform_cloud,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + TerraformCloud *ProvisionTokenSpecV2TerraformCloud `protobuf:"bytes,16,opt,name=TerraformCloud,proto3" json:"terraform_cloud,omitempty"` + // Bitbucket allows the configuration of options specific to the "bitbucket" join method. + Bitbucket *ProvisionTokenSpecV2Bitbucket `protobuf:"bytes,17,opt,name=Bitbucket,proto3" json:"bitbucket,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *ProvisionTokenSpecV2) Reset() { *m = ProvisionTokenSpecV2{} } func (m *ProvisionTokenSpecV2) String() string { return proto.CompactTextString(m) } func (*ProvisionTokenSpecV2) ProtoMessage() {} func (*ProvisionTokenSpecV2) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{60} + return fileDescriptor_9198ee693835762e, []int{62} } func (m *ProvisionTokenSpecV2) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4445,7 +4540,7 @@ func (m *ProvisionTokenSpecV2TPM) Reset() { *m = ProvisionTokenSpecV2TPM func (m *ProvisionTokenSpecV2TPM) String() string { return proto.CompactTextString(m) } func (*ProvisionTokenSpecV2TPM) ProtoMessage() {} func (*ProvisionTokenSpecV2TPM) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{61} + return fileDescriptor_9198ee693835762e, []int{63} } func (m *ProvisionTokenSpecV2TPM) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4501,7 +4596,7 @@ func (m *ProvisionTokenSpecV2TPM_Rule) Reset() { *m = ProvisionTokenSpec func (m *ProvisionTokenSpecV2TPM_Rule) String() string { return proto.CompactTextString(m) } func (*ProvisionTokenSpecV2TPM_Rule) ProtoMessage() {} func (*ProvisionTokenSpecV2TPM_Rule) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{61, 0} + return fileDescriptor_9198ee693835762e, []int{63, 0} } func (m *ProvisionTokenSpecV2TPM_Rule) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4570,7 +4665,7 @@ func (m *ProvisionTokenSpecV2GitHub) Reset() { *m = ProvisionTokenSpecV2 func (m *ProvisionTokenSpecV2GitHub) String() string { return proto.CompactTextString(m) } func (*ProvisionTokenSpecV2GitHub) ProtoMessage() {} func (*ProvisionTokenSpecV2GitHub) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{62} + return fileDescriptor_9198ee693835762e, []int{64} } func (m *ProvisionTokenSpecV2GitHub) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4632,7 +4727,7 @@ func (m *ProvisionTokenSpecV2GitHub_Rule) Reset() { *m = ProvisionTokenS func (m *ProvisionTokenSpecV2GitHub_Rule) String() string { return proto.CompactTextString(m) } func (*ProvisionTokenSpecV2GitHub_Rule) ProtoMessage() {} func (*ProvisionTokenSpecV2GitHub_Rule) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{62, 0} + return fileDescriptor_9198ee693835762e, []int{64, 0} } func (m *ProvisionTokenSpecV2GitHub_Rule) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4680,7 +4775,7 @@ func (m *ProvisionTokenSpecV2GitLab) Reset() { *m = ProvisionTokenSpecV2 func (m *ProvisionTokenSpecV2GitLab) String() string { return proto.CompactTextString(m) } func (*ProvisionTokenSpecV2GitLab) ProtoMessage() {} func (*ProvisionTokenSpecV2GitLab) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{63} + return fileDescriptor_9198ee693835762e, []int{65} } func (m *ProvisionTokenSpecV2GitLab) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4782,7 +4877,7 @@ func (m *ProvisionTokenSpecV2GitLab_Rule) Reset() { *m = ProvisionTokenS func (m *ProvisionTokenSpecV2GitLab_Rule) String() string { return proto.CompactTextString(m) } func (*ProvisionTokenSpecV2GitLab_Rule) ProtoMessage() {} func (*ProvisionTokenSpecV2GitLab_Rule) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{63, 0} + return fileDescriptor_9198ee693835762e, []int{65, 0} } func (m *ProvisionTokenSpecV2GitLab_Rule) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4827,7 +4922,7 @@ func (m *ProvisionTokenSpecV2CircleCI) Reset() { *m = ProvisionTokenSpec func (m *ProvisionTokenSpecV2CircleCI) String() string { return proto.CompactTextString(m) } func (*ProvisionTokenSpecV2CircleCI) ProtoMessage() {} func (*ProvisionTokenSpecV2CircleCI) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{64} + return fileDescriptor_9198ee693835762e, []int{66} } func (m *ProvisionTokenSpecV2CircleCI) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4868,7 +4963,7 @@ func (m *ProvisionTokenSpecV2CircleCI_Rule) Reset() { *m = ProvisionToke func (m *ProvisionTokenSpecV2CircleCI_Rule) String() string { return proto.CompactTextString(m) } func (*ProvisionTokenSpecV2CircleCI_Rule) ProtoMessage() {} func (*ProvisionTokenSpecV2CircleCI_Rule) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{64, 0} + return fileDescriptor_9198ee693835762e, []int{66, 0} } func (m *ProvisionTokenSpecV2CircleCI_Rule) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4915,7 +5010,7 @@ func (m *ProvisionTokenSpecV2Spacelift) Reset() { *m = ProvisionTokenSpe func (m *ProvisionTokenSpecV2Spacelift) String() string { return proto.CompactTextString(m) } func (*ProvisionTokenSpecV2Spacelift) ProtoMessage() {} func (*ProvisionTokenSpecV2Spacelift) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{65} + return fileDescriptor_9198ee693835762e, []int{67} } func (m *ProvisionTokenSpecV2Spacelift) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4966,7 +5061,7 @@ func (m *ProvisionTokenSpecV2Spacelift_Rule) Reset() { *m = ProvisionTok func (m *ProvisionTokenSpecV2Spacelift_Rule) String() string { return proto.CompactTextString(m) } func (*ProvisionTokenSpecV2Spacelift_Rule) ProtoMessage() {} func (*ProvisionTokenSpecV2Spacelift_Rule) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{65, 0} + return fileDescriptor_9198ee693835762e, []int{67, 0} } func (m *ProvisionTokenSpecV2Spacelift_Rule) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5018,7 +5113,7 @@ func (m *ProvisionTokenSpecV2Kubernetes) Reset() { *m = ProvisionTokenSp func (m *ProvisionTokenSpecV2Kubernetes) String() string { return proto.CompactTextString(m) } func (*ProvisionTokenSpecV2Kubernetes) ProtoMessage() {} func (*ProvisionTokenSpecV2Kubernetes) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{66} + return fileDescriptor_9198ee693835762e, []int{68} } func (m *ProvisionTokenSpecV2Kubernetes) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5065,7 +5160,7 @@ func (m *ProvisionTokenSpecV2Kubernetes_StaticJWKSConfig) String() string { } func (*ProvisionTokenSpecV2Kubernetes_StaticJWKSConfig) ProtoMessage() {} func (*ProvisionTokenSpecV2Kubernetes_StaticJWKSConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{66, 0} + return fileDescriptor_9198ee693835762e, []int{68, 0} } func (m *ProvisionTokenSpecV2Kubernetes_StaticJWKSConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5109,7 +5204,7 @@ func (m *ProvisionTokenSpecV2Kubernetes_Rule) Reset() { *m = ProvisionTo func (m *ProvisionTokenSpecV2Kubernetes_Rule) String() string { return proto.CompactTextString(m) } func (*ProvisionTokenSpecV2Kubernetes_Rule) ProtoMessage() {} func (*ProvisionTokenSpecV2Kubernetes_Rule) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{66, 1} + return fileDescriptor_9198ee693835762e, []int{68, 1} } func (m *ProvisionTokenSpecV2Kubernetes_Rule) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5153,7 +5248,7 @@ func (m *ProvisionTokenSpecV2Azure) Reset() { *m = ProvisionTokenSpecV2A func (m *ProvisionTokenSpecV2Azure) String() string { return proto.CompactTextString(m) } func (*ProvisionTokenSpecV2Azure) ProtoMessage() {} func (*ProvisionTokenSpecV2Azure) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{67} + return fileDescriptor_9198ee693835762e, []int{69} } func (m *ProvisionTokenSpecV2Azure) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5199,7 +5294,7 @@ func (m *ProvisionTokenSpecV2Azure_Rule) Reset() { *m = ProvisionTokenSp func (m *ProvisionTokenSpecV2Azure_Rule) String() string { return proto.CompactTextString(m) } func (*ProvisionTokenSpecV2Azure_Rule) ProtoMessage() {} func (*ProvisionTokenSpecV2Azure_Rule) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{67, 0} + return fileDescriptor_9198ee693835762e, []int{69, 0} } func (m *ProvisionTokenSpecV2Azure_Rule) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5243,7 +5338,7 @@ func (m *ProvisionTokenSpecV2GCP) Reset() { *m = ProvisionTokenSpecV2GCP func (m *ProvisionTokenSpecV2GCP) String() string { return proto.CompactTextString(m) } func (*ProvisionTokenSpecV2GCP) ProtoMessage() {} func (*ProvisionTokenSpecV2GCP) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{68} + return fileDescriptor_9198ee693835762e, []int{70} } func (m *ProvisionTokenSpecV2GCP) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5292,7 +5387,7 @@ func (m *ProvisionTokenSpecV2GCP_Rule) Reset() { *m = ProvisionTokenSpec func (m *ProvisionTokenSpecV2GCP_Rule) String() string { return proto.CompactTextString(m) } func (*ProvisionTokenSpecV2GCP_Rule) ProtoMessage() {} func (*ProvisionTokenSpecV2GCP_Rule) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{68, 0} + return fileDescriptor_9198ee693835762e, []int{70, 0} } func (m *ProvisionTokenSpecV2GCP_Rule) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5349,7 +5444,7 @@ func (m *ProvisionTokenSpecV2TerraformCloud) Reset() { *m = ProvisionTok func (m *ProvisionTokenSpecV2TerraformCloud) String() string { return proto.CompactTextString(m) } func (*ProvisionTokenSpecV2TerraformCloud) ProtoMessage() {} func (*ProvisionTokenSpecV2TerraformCloud) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{69} + return fileDescriptor_9198ee693835762e, []int{71} } func (m *ProvisionTokenSpecV2TerraformCloud) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5414,7 +5509,7 @@ func (m *ProvisionTokenSpecV2TerraformCloud_Rule) Reset() { func (m *ProvisionTokenSpecV2TerraformCloud_Rule) String() string { return proto.CompactTextString(m) } func (*ProvisionTokenSpecV2TerraformCloud_Rule) ProtoMessage() {} func (*ProvisionTokenSpecV2TerraformCloud_Rule) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{69, 0} + return fileDescriptor_9198ee693835762e, []int{71, 0} } func (m *ProvisionTokenSpecV2TerraformCloud_Rule) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5443,6 +5538,116 @@ func (m *ProvisionTokenSpecV2TerraformCloud_Rule) XXX_DiscardUnknown() { var xxx_messageInfo_ProvisionTokenSpecV2TerraformCloud_Rule proto.InternalMessageInfo +type ProvisionTokenSpecV2Bitbucket struct { + // Allow is a list of Rules, nodes using this token must match one + // allow rule to use this token. + Allow []*ProvisionTokenSpecV2Bitbucket_Rule `protobuf:"bytes,1,rep,name=Allow,proto3" json:"allow,omitempty"` + // Audience is a Bitbucket-specified audience value for this token. It is + // unique to each Bitbucket repository, and must be set to the value as + // written in the Pipelines -> OpenID Connect section of the repository + // settings. + Audience string `protobuf:"bytes,2,opt,name=Audience,proto3" json:"audience,omitempty"` + // IdentityProviderURL is a Bitbucket-specified issuer URL for incoming OIDC + // tokens. It is unique to each Bitbucket repository, and must be set to the + // value as written in the Pipelines -> OpenID Connect section of the + // repository settings. + IdentityProviderURL string `protobuf:"bytes,3,opt,name=IdentityProviderURL,proto3" json:"identity_provider_url,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ProvisionTokenSpecV2Bitbucket) Reset() { *m = ProvisionTokenSpecV2Bitbucket{} } +func (m *ProvisionTokenSpecV2Bitbucket) String() string { return proto.CompactTextString(m) } +func (*ProvisionTokenSpecV2Bitbucket) ProtoMessage() {} +func (*ProvisionTokenSpecV2Bitbucket) Descriptor() ([]byte, []int) { + return fileDescriptor_9198ee693835762e, []int{72} +} +func (m *ProvisionTokenSpecV2Bitbucket) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ProvisionTokenSpecV2Bitbucket) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_ProvisionTokenSpecV2Bitbucket.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *ProvisionTokenSpecV2Bitbucket) XXX_Merge(src proto.Message) { + xxx_messageInfo_ProvisionTokenSpecV2Bitbucket.Merge(m, src) +} +func (m *ProvisionTokenSpecV2Bitbucket) XXX_Size() int { + return m.Size() +} +func (m *ProvisionTokenSpecV2Bitbucket) XXX_DiscardUnknown() { + xxx_messageInfo_ProvisionTokenSpecV2Bitbucket.DiscardUnknown(m) +} + +var xxx_messageInfo_ProvisionTokenSpecV2Bitbucket proto.InternalMessageInfo + +// Rule is a set of properties the Bitbucket-issued token might have to be +// allowed to use this ProvisionToken. +type ProvisionTokenSpecV2Bitbucket_Rule struct { + // WorkspaceUUID is the UUID of the workspace for which this token was + // issued. Bitbucket UUIDs must begin and end with braces, e.g. `{...}`. + // This value may be found in the Pipelines -> OpenID Connect section of the + // repository settings. + WorkspaceUUID string `protobuf:"bytes,1,opt,name=WorkspaceUUID,proto3" json:"workspace_uuid,omitempty"` + // RepositoryUUID is the UUID of the repository for which this token was + // issued. Bitbucket UUIDs must begin and end with braces, e.g. `{...}`. + // This value may be found in the Pipelines -> OpenID Connect section of the + // repository settings. + RepositoryUUID string `protobuf:"bytes,2,opt,name=RepositoryUUID,proto3" json:"repository_uuid,omitempty"` + // DeploymentEnvironmentUUID is the UUID of the deployment environment + // targeted by this pipelines run, if any. These values may be found in the + // "Pipelines -> OpenID Connect -> Deployment environments" section of the + // repository settings. + DeploymentEnvironmentUUID string `protobuf:"bytes,3,opt,name=DeploymentEnvironmentUUID,proto3" json:"deployment_environment_uuid,omitempty"` + // BranchName is the name of the branch on which this pipeline executed. + BranchName string `protobuf:"bytes,4,opt,name=BranchName,proto3" json:"branch_name,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ProvisionTokenSpecV2Bitbucket_Rule) Reset() { *m = ProvisionTokenSpecV2Bitbucket_Rule{} } +func (m *ProvisionTokenSpecV2Bitbucket_Rule) String() string { return proto.CompactTextString(m) } +func (*ProvisionTokenSpecV2Bitbucket_Rule) ProtoMessage() {} +func (*ProvisionTokenSpecV2Bitbucket_Rule) Descriptor() ([]byte, []int) { + return fileDescriptor_9198ee693835762e, []int{72, 0} +} +func (m *ProvisionTokenSpecV2Bitbucket_Rule) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ProvisionTokenSpecV2Bitbucket_Rule) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_ProvisionTokenSpecV2Bitbucket_Rule.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *ProvisionTokenSpecV2Bitbucket_Rule) XXX_Merge(src proto.Message) { + xxx_messageInfo_ProvisionTokenSpecV2Bitbucket_Rule.Merge(m, src) +} +func (m *ProvisionTokenSpecV2Bitbucket_Rule) XXX_Size() int { + return m.Size() +} +func (m *ProvisionTokenSpecV2Bitbucket_Rule) XXX_DiscardUnknown() { + xxx_messageInfo_ProvisionTokenSpecV2Bitbucket_Rule.DiscardUnknown(m) +} + +var xxx_messageInfo_ProvisionTokenSpecV2Bitbucket_Rule proto.InternalMessageInfo + // StaticTokensV2 implements the StaticTokens interface. type StaticTokensV2 struct { // Kind is a resource kind @@ -5463,7 +5668,7 @@ type StaticTokensV2 struct { func (m *StaticTokensV2) Reset() { *m = StaticTokensV2{} } func (*StaticTokensV2) ProtoMessage() {} func (*StaticTokensV2) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{70} + return fileDescriptor_9198ee693835762e, []int{73} } func (m *StaticTokensV2) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5506,7 +5711,7 @@ func (m *StaticTokensSpecV2) Reset() { *m = StaticTokensSpecV2{} } func (m *StaticTokensSpecV2) String() string { return proto.CompactTextString(m) } func (*StaticTokensSpecV2) ProtoMessage() {} func (*StaticTokensSpecV2) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{71} + return fileDescriptor_9198ee693835762e, []int{74} } func (m *StaticTokensSpecV2) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5555,7 +5760,7 @@ type ClusterNameV2 struct { func (m *ClusterNameV2) Reset() { *m = ClusterNameV2{} } func (*ClusterNameV2) ProtoMessage() {} func (*ClusterNameV2) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{72} + return fileDescriptor_9198ee693835762e, []int{75} } func (m *ClusterNameV2) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5601,7 +5806,7 @@ func (m *ClusterNameSpecV2) Reset() { *m = ClusterNameSpecV2{} } func (m *ClusterNameSpecV2) String() string { return proto.CompactTextString(m) } func (*ClusterNameSpecV2) ProtoMessage() {} func (*ClusterNameSpecV2) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{73} + return fileDescriptor_9198ee693835762e, []int{76} } func (m *ClusterNameSpecV2) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5651,7 +5856,7 @@ func (m *ClusterAuditConfigV2) Reset() { *m = ClusterAuditConfigV2{} } func (m *ClusterAuditConfigV2) String() string { return proto.CompactTextString(m) } func (*ClusterAuditConfigV2) ProtoMessage() {} func (*ClusterAuditConfigV2) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{74} + return fileDescriptor_9198ee693835762e, []int{77} } func (m *ClusterAuditConfigV2) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5721,7 +5926,7 @@ func (m *ClusterAuditConfigSpecV2) Reset() { *m = ClusterAuditConfigSpec func (m *ClusterAuditConfigSpecV2) String() string { return proto.CompactTextString(m) } func (*ClusterAuditConfigSpecV2) ProtoMessage() {} func (*ClusterAuditConfigSpecV2) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{75} + return fileDescriptor_9198ee693835762e, []int{78} } func (m *ClusterAuditConfigSpecV2) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5772,7 +5977,7 @@ func (m *ClusterNetworkingConfigV2) Reset() { *m = ClusterNetworkingConf func (m *ClusterNetworkingConfigV2) String() string { return proto.CompactTextString(m) } func (*ClusterNetworkingConfigV2) ProtoMessage() {} func (*ClusterNetworkingConfigV2) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{76} + return fileDescriptor_9198ee693835762e, []int{79} } func (m *ClusterNetworkingConfigV2) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5851,7 +6056,7 @@ func (m *ClusterNetworkingConfigSpecV2) Reset() { *m = ClusterNetworking func (m *ClusterNetworkingConfigSpecV2) String() string { return proto.CompactTextString(m) } func (*ClusterNetworkingConfigSpecV2) ProtoMessage() {} func (*ClusterNetworkingConfigSpecV2) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{77} + return fileDescriptor_9198ee693835762e, []int{80} } func (m *ClusterNetworkingConfigSpecV2) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5896,7 +6101,7 @@ func (m *TunnelStrategyV1) Reset() { *m = TunnelStrategyV1{} } func (m *TunnelStrategyV1) String() string { return proto.CompactTextString(m) } func (*TunnelStrategyV1) ProtoMessage() {} func (*TunnelStrategyV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{78} + return fileDescriptor_9198ee693835762e, []int{81} } func (m *TunnelStrategyV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5981,7 +6186,7 @@ func (m *AgentMeshTunnelStrategy) Reset() { *m = AgentMeshTunnelStrategy func (m *AgentMeshTunnelStrategy) String() string { return proto.CompactTextString(m) } func (*AgentMeshTunnelStrategy) ProtoMessage() {} func (*AgentMeshTunnelStrategy) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{79} + return fileDescriptor_9198ee693835762e, []int{82} } func (m *AgentMeshTunnelStrategy) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6022,7 +6227,7 @@ func (m *ProxyPeeringTunnelStrategy) Reset() { *m = ProxyPeeringTunnelSt func (m *ProxyPeeringTunnelStrategy) String() string { return proto.CompactTextString(m) } func (*ProxyPeeringTunnelStrategy) ProtoMessage() {} func (*ProxyPeeringTunnelStrategy) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{80} + return fileDescriptor_9198ee693835762e, []int{83} } func (m *ProxyPeeringTunnelStrategy) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6073,7 +6278,7 @@ func (m *SessionRecordingConfigV2) Reset() { *m = SessionRecordingConfig func (m *SessionRecordingConfigV2) String() string { return proto.CompactTextString(m) } func (*SessionRecordingConfigV2) ProtoMessage() {} func (*SessionRecordingConfigV2) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{81} + return fileDescriptor_9198ee693835762e, []int{84} } func (m *SessionRecordingConfigV2) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6119,7 +6324,7 @@ func (m *SessionRecordingConfigSpecV2) Reset() { *m = SessionRecordingCo func (m *SessionRecordingConfigSpecV2) String() string { return proto.CompactTextString(m) } func (*SessionRecordingConfigSpecV2) ProtoMessage() {} func (*SessionRecordingConfigSpecV2) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{82} + return fileDescriptor_9198ee693835762e, []int{85} } func (m *SessionRecordingConfigSpecV2) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6169,7 +6374,7 @@ type AuthPreferenceV2 struct { func (m *AuthPreferenceV2) Reset() { *m = AuthPreferenceV2{} } func (*AuthPreferenceV2) ProtoMessage() {} func (*AuthPreferenceV2) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{83} + return fileDescriptor_9198ee693835762e, []int{86} } func (m *AuthPreferenceV2) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6262,7 +6467,7 @@ func (m *AuthPreferenceSpecV2) Reset() { *m = AuthPreferenceSpecV2{} } func (m *AuthPreferenceSpecV2) String() string { return proto.CompactTextString(m) } func (*AuthPreferenceSpecV2) ProtoMessage() {} func (*AuthPreferenceSpecV2) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{84} + return fileDescriptor_9198ee693835762e, []int{87} } func (m *AuthPreferenceSpecV2) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6313,7 +6518,7 @@ func (m *U2F) Reset() { *m = U2F{} } func (m *U2F) String() string { return proto.CompactTextString(m) } func (*U2F) ProtoMessage() {} func (*U2F) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{85} + return fileDescriptor_9198ee693835762e, []int{88} } func (m *U2F) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6381,7 +6586,7 @@ func (m *Webauthn) Reset() { *m = Webauthn{} } func (m *Webauthn) String() string { return proto.CompactTextString(m) } func (*Webauthn) ProtoMessage() {} func (*Webauthn) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{86} + return fileDescriptor_9198ee693835762e, []int{89} } func (m *Webauthn) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6452,7 +6657,7 @@ func (m *DeviceTrust) Reset() { *m = DeviceTrust{} } func (m *DeviceTrust) String() string { return proto.CompactTextString(m) } func (*DeviceTrust) ProtoMessage() {} func (*DeviceTrust) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{87} + return fileDescriptor_9198ee693835762e, []int{90} } func (m *DeviceTrust) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6499,7 +6704,7 @@ func (m *HardwareKey) Reset() { *m = HardwareKey{} } func (m *HardwareKey) String() string { return proto.CompactTextString(m) } func (*HardwareKey) ProtoMessage() {} func (*HardwareKey) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{88} + return fileDescriptor_9198ee693835762e, []int{91} } func (m *HardwareKey) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6546,7 +6751,7 @@ func (m *HardwareKeySerialNumberValidation) Reset() { *m = HardwareKeySe func (m *HardwareKeySerialNumberValidation) String() string { return proto.CompactTextString(m) } func (*HardwareKeySerialNumberValidation) ProtoMessage() {} func (*HardwareKeySerialNumberValidation) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{89} + return fileDescriptor_9198ee693835762e, []int{92} } func (m *HardwareKeySerialNumberValidation) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6596,7 +6801,7 @@ func (m *Namespace) Reset() { *m = Namespace{} } func (m *Namespace) String() string { return proto.CompactTextString(m) } func (*Namespace) ProtoMessage() {} func (*Namespace) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{90} + return fileDescriptor_9198ee693835762e, []int{93} } func (m *Namespace) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6636,7 +6841,7 @@ func (m *NamespaceSpec) Reset() { *m = NamespaceSpec{} } func (m *NamespaceSpec) String() string { return proto.CompactTextString(m) } func (*NamespaceSpec) ProtoMessage() {} func (*NamespaceSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{91} + return fileDescriptor_9198ee693835762e, []int{94} } func (m *NamespaceSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6684,7 +6889,7 @@ type UserTokenV3 struct { func (m *UserTokenV3) Reset() { *m = UserTokenV3{} } func (*UserTokenV3) ProtoMessage() {} func (*UserTokenV3) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{92} + return fileDescriptor_9198ee693835762e, []int{95} } func (m *UserTokenV3) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6731,7 +6936,7 @@ func (m *UserTokenSpecV3) Reset() { *m = UserTokenSpecV3{} } func (m *UserTokenSpecV3) String() string { return proto.CompactTextString(m) } func (*UserTokenSpecV3) ProtoMessage() {} func (*UserTokenSpecV3) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{93} + return fileDescriptor_9198ee693835762e, []int{96} } func (m *UserTokenSpecV3) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6779,7 +6984,7 @@ type UserTokenSecretsV3 struct { func (m *UserTokenSecretsV3) Reset() { *m = UserTokenSecretsV3{} } func (*UserTokenSecretsV3) ProtoMessage() {} func (*UserTokenSecretsV3) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{94} + return fileDescriptor_9198ee693835762e, []int{97} } func (m *UserTokenSecretsV3) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6824,7 +7029,7 @@ func (m *UserTokenSecretsSpecV3) Reset() { *m = UserTokenSecretsSpecV3{} func (m *UserTokenSecretsSpecV3) String() string { return proto.CompactTextString(m) } func (*UserTokenSecretsSpecV3) ProtoMessage() {} func (*UserTokenSecretsSpecV3) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{95} + return fileDescriptor_9198ee693835762e, []int{98} } func (m *UserTokenSecretsSpecV3) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6873,7 +7078,7 @@ type AccessRequestV3 struct { func (m *AccessRequestV3) Reset() { *m = AccessRequestV3{} } func (*AccessRequestV3) ProtoMessage() {} func (*AccessRequestV3) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{96} + return fileDescriptor_9198ee693835762e, []int{99} } func (m *AccessRequestV3) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6925,7 +7130,7 @@ func (m *AccessReviewThreshold) Reset() { *m = AccessReviewThreshold{} } func (m *AccessReviewThreshold) String() string { return proto.CompactTextString(m) } func (*AccessReviewThreshold) ProtoMessage() {} func (*AccessReviewThreshold) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{97} + return fileDescriptor_9198ee693835762e, []int{100} } func (m *AccessReviewThreshold) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6970,7 +7175,7 @@ func (m *PromotedAccessList) Reset() { *m = PromotedAccessList{} } func (m *PromotedAccessList) String() string { return proto.CompactTextString(m) } func (*PromotedAccessList) ProtoMessage() {} func (*PromotedAccessList) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{98} + return fileDescriptor_9198ee693835762e, []int{101} } func (m *PromotedAccessList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7031,7 +7236,7 @@ func (m *AccessReview) Reset() { *m = AccessReview{} } func (m *AccessReview) String() string { return proto.CompactTextString(m) } func (*AccessReview) ProtoMessage() {} func (*AccessReview) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{99} + return fileDescriptor_9198ee693835762e, []int{102} } func (m *AccessReview) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7076,7 +7281,7 @@ func (m *AccessReviewSubmission) Reset() { *m = AccessReviewSubmission{} func (m *AccessReviewSubmission) String() string { return proto.CompactTextString(m) } func (*AccessReviewSubmission) ProtoMessage() {} func (*AccessReviewSubmission) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{100} + return fileDescriptor_9198ee693835762e, []int{103} } func (m *AccessReviewSubmission) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7119,7 +7324,7 @@ func (m *ThresholdIndexSet) Reset() { *m = ThresholdIndexSet{} } func (m *ThresholdIndexSet) String() string { return proto.CompactTextString(m) } func (*ThresholdIndexSet) ProtoMessage() {} func (*ThresholdIndexSet) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{101} + return fileDescriptor_9198ee693835762e, []int{104} } func (m *ThresholdIndexSet) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7162,7 +7367,7 @@ func (m *ThresholdIndexSets) Reset() { *m = ThresholdIndexSets{} } func (m *ThresholdIndexSets) String() string { return proto.CompactTextString(m) } func (*ThresholdIndexSets) ProtoMessage() {} func (*ThresholdIndexSets) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{102} + return fileDescriptor_9198ee693835762e, []int{105} } func (m *ThresholdIndexSets) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7265,7 +7470,7 @@ func (m *AccessRequestSpecV3) Reset() { *m = AccessRequestSpecV3{} } func (m *AccessRequestSpecV3) String() string { return proto.CompactTextString(m) } func (*AccessRequestSpecV3) ProtoMessage() {} func (*AccessRequestSpecV3) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{103} + return fileDescriptor_9198ee693835762e, []int{106} } func (m *AccessRequestSpecV3) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7322,7 +7527,7 @@ func (m *AccessRequestFilter) Reset() { *m = AccessRequestFilter{} } func (m *AccessRequestFilter) String() string { return proto.CompactTextString(m) } func (*AccessRequestFilter) ProtoMessage() {} func (*AccessRequestFilter) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{104} + return fileDescriptor_9198ee693835762e, []int{107} } func (m *AccessRequestFilter) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7378,7 +7583,7 @@ func (m *AccessCapabilities) Reset() { *m = AccessCapabilities{} } func (m *AccessCapabilities) String() string { return proto.CompactTextString(m) } func (*AccessCapabilities) ProtoMessage() {} func (*AccessCapabilities) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{105} + return fileDescriptor_9198ee693835762e, []int{108} } func (m *AccessCapabilities) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7436,7 +7641,7 @@ func (m *AccessCapabilitiesRequest) Reset() { *m = AccessCapabilitiesReq func (m *AccessCapabilitiesRequest) String() string { return proto.CompactTextString(m) } func (*AccessCapabilitiesRequest) ProtoMessage() {} func (*AccessCapabilitiesRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{106} + return fileDescriptor_9198ee693835762e, []int{109} } func (m *AccessCapabilitiesRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7480,7 +7685,7 @@ func (m *RequestKubernetesResource) Reset() { *m = RequestKubernetesReso func (m *RequestKubernetesResource) String() string { return proto.CompactTextString(m) } func (*RequestKubernetesResource) ProtoMessage() {} func (*RequestKubernetesResource) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{107} + return fileDescriptor_9198ee693835762e, []int{110} } func (m *RequestKubernetesResource) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7532,7 +7737,7 @@ func (m *ResourceID) Reset() { *m = ResourceID{} } func (m *ResourceID) String() string { return proto.CompactTextString(m) } func (*ResourceID) ProtoMessage() {} func (*ResourceID) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{108} + return fileDescriptor_9198ee693835762e, []int{111} } func (m *ResourceID) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7581,7 +7786,7 @@ type PluginDataV3 struct { func (m *PluginDataV3) Reset() { *m = PluginDataV3{} } func (*PluginDataV3) ProtoMessage() {} func (*PluginDataV3) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{109} + return fileDescriptor_9198ee693835762e, []int{112} } func (m *PluginDataV3) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7624,7 +7829,7 @@ func (m *PluginDataEntry) Reset() { *m = PluginDataEntry{} } func (m *PluginDataEntry) String() string { return proto.CompactTextString(m) } func (*PluginDataEntry) ProtoMessage() {} func (*PluginDataEntry) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{110} + return fileDescriptor_9198ee693835762e, []int{113} } func (m *PluginDataEntry) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7666,7 +7871,7 @@ func (m *PluginDataSpecV3) Reset() { *m = PluginDataSpecV3{} } func (m *PluginDataSpecV3) String() string { return proto.CompactTextString(m) } func (*PluginDataSpecV3) ProtoMessage() {} func (*PluginDataSpecV3) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{111} + return fileDescriptor_9198ee693835762e, []int{114} } func (m *PluginDataSpecV3) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7713,7 +7918,7 @@ func (m *PluginDataFilter) Reset() { *m = PluginDataFilter{} } func (m *PluginDataFilter) String() string { return proto.CompactTextString(m) } func (*PluginDataFilter) ProtoMessage() {} func (*PluginDataFilter) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{112} + return fileDescriptor_9198ee693835762e, []int{115} } func (m *PluginDataFilter) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7764,7 +7969,7 @@ func (m *PluginDataUpdateParams) Reset() { *m = PluginDataUpdateParams{} func (m *PluginDataUpdateParams) String() string { return proto.CompactTextString(m) } func (*PluginDataUpdateParams) ProtoMessage() {} func (*PluginDataUpdateParams) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{113} + return fileDescriptor_9198ee693835762e, []int{116} } func (m *PluginDataUpdateParams) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7808,7 +8013,7 @@ func (m *RoleFilter) Reset() { *m = RoleFilter{} } func (m *RoleFilter) String() string { return proto.CompactTextString(m) } func (*RoleFilter) ProtoMessage() {} func (*RoleFilter) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{114} + return fileDescriptor_9198ee693835762e, []int{117} } func (m *RoleFilter) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7858,7 +8063,7 @@ type RoleV6 struct { func (m *RoleV6) Reset() { *m = RoleV6{} } func (*RoleV6) ProtoMessage() {} func (*RoleV6) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{115} + return fileDescriptor_9198ee693835762e, []int{118} } func (m *RoleV6) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7905,7 +8110,7 @@ func (m *RoleSpecV6) Reset() { *m = RoleSpecV6{} } func (m *RoleSpecV6) String() string { return proto.CompactTextString(m) } func (*RoleSpecV6) ProtoMessage() {} func (*RoleSpecV6) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{116} + return fileDescriptor_9198ee693835762e, []int{119} } func (m *RoleSpecV6) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -8038,7 +8243,7 @@ func (m *RoleOptions) Reset() { *m = RoleOptions{} } func (m *RoleOptions) String() string { return proto.CompactTextString(m) } func (*RoleOptions) ProtoMessage() {} func (*RoleOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{117} + return fileDescriptor_9198ee693835762e, []int{120} } func (m *RoleOptions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -8084,7 +8289,7 @@ func (m *RecordSession) Reset() { *m = RecordSession{} } func (m *RecordSession) String() string { return proto.CompactTextString(m) } func (*RecordSession) ProtoMessage() {} func (*RecordSession) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{118} + return fileDescriptor_9198ee693835762e, []int{121} } func (m *RecordSession) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -8136,7 +8341,7 @@ func (m *CertExtension) Reset() { *m = CertExtension{} } func (m *CertExtension) String() string { return proto.CompactTextString(m) } func (*CertExtension) ProtoMessage() {} func (*CertExtension) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{119} + return fileDescriptor_9198ee693835762e, []int{122} } func (m *CertExtension) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -8272,7 +8477,7 @@ func (m *RoleConditions) Reset() { *m = RoleConditions{} } func (m *RoleConditions) String() string { return proto.CompactTextString(m) } func (*RoleConditions) ProtoMessage() {} func (*RoleConditions) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{120} + return fileDescriptor_9198ee693835762e, []int{123} } func (m *RoleConditions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -8315,7 +8520,7 @@ func (m *IdentityCenterAccountAssignment) Reset() { *m = IdentityCenterA func (m *IdentityCenterAccountAssignment) String() string { return proto.CompactTextString(m) } func (*IdentityCenterAccountAssignment) ProtoMessage() {} func (*IdentityCenterAccountAssignment) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{121} + return fileDescriptor_9198ee693835762e, []int{124} } func (m *IdentityCenterAccountAssignment) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -8391,7 +8596,7 @@ func (m *SPIFFERoleCondition) Reset() { *m = SPIFFERoleCondition{} } func (m *SPIFFERoleCondition) String() string { return proto.CompactTextString(m) } func (*SPIFFERoleCondition) ProtoMessage() {} func (*SPIFFERoleCondition) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{122} + return fileDescriptor_9198ee693835762e, []int{125} } func (m *SPIFFERoleCondition) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -8435,7 +8640,7 @@ func (m *DatabasePermission) Reset() { *m = DatabasePermission{} } func (m *DatabasePermission) String() string { return proto.CompactTextString(m) } func (*DatabasePermission) ProtoMessage() {} func (*DatabasePermission) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{123} + return fileDescriptor_9198ee693835762e, []int{126} } func (m *DatabasePermission) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -8485,7 +8690,7 @@ func (m *KubernetesResource) Reset() { *m = KubernetesResource{} } func (m *KubernetesResource) String() string { return proto.CompactTextString(m) } func (*KubernetesResource) ProtoMessage() {} func (*KubernetesResource) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{124} + return fileDescriptor_9198ee693835762e, []int{127} } func (m *KubernetesResource) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -8538,7 +8743,7 @@ func (m *SessionRequirePolicy) Reset() { *m = SessionRequirePolicy{} } func (m *SessionRequirePolicy) String() string { return proto.CompactTextString(m) } func (*SessionRequirePolicy) ProtoMessage() {} func (*SessionRequirePolicy) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{125} + return fileDescriptor_9198ee693835762e, []int{128} } func (m *SessionRequirePolicy) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -8586,7 +8791,7 @@ func (m *SessionJoinPolicy) Reset() { *m = SessionJoinPolicy{} } func (m *SessionJoinPolicy) String() string { return proto.CompactTextString(m) } func (*SessionJoinPolicy) ProtoMessage() {} func (*SessionJoinPolicy) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{126} + return fileDescriptor_9198ee693835762e, []int{129} } func (m *SessionJoinPolicy) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -8650,17 +8855,19 @@ type AccessRequestConditions struct { // Eg: Users can make request to either a resource kind "kube_cluster" or any of its // subresources like "namespaces". This field can be defined such that it prevents a user // from requesting "kube_cluster" and enforce requesting any of its subresources. - KubernetesResources []RequestKubernetesResource `protobuf:"bytes,8,rep,name=kubernetes_resources,json=kubernetesResources,proto3" json:"kubernetes_resources,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + KubernetesResources []RequestKubernetesResource `protobuf:"bytes,8,rep,name=kubernetes_resources,json=kubernetesResources,proto3" json:"kubernetes_resources,omitempty"` + // Reason defines settings for the reason for the access provided by the user. + Reason *AccessRequestConditionsReason `protobuf:"bytes,9,opt,name=Reason,proto3" json:"reason,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *AccessRequestConditions) Reset() { *m = AccessRequestConditions{} } func (m *AccessRequestConditions) String() string { return proto.CompactTextString(m) } func (*AccessRequestConditions) ProtoMessage() {} func (*AccessRequestConditions) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{127} + return fileDescriptor_9198ee693835762e, []int{130} } func (m *AccessRequestConditions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -8689,6 +8896,52 @@ func (m *AccessRequestConditions) XXX_DiscardUnknown() { var xxx_messageInfo_AccessRequestConditions proto.InternalMessageInfo +// AccessRequestConditionsReason defines settings for the reason for the access provided by the +// user. +type AccessRequestConditionsReason struct { + // Mode can be either "required" or "optional". Empty string is treated as "optional". If a role + // has the request reason mode set to "required", then reason is required for all Access Requests + // requesting roles or resources allowed by this role. It applies only to users who have this + // role assigned. + Mode RequestReasonMode `protobuf:"bytes,1,opt,name=Mode,proto3,casttype=RequestReasonMode" json:"mode,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *AccessRequestConditionsReason) Reset() { *m = AccessRequestConditionsReason{} } +func (m *AccessRequestConditionsReason) String() string { return proto.CompactTextString(m) } +func (*AccessRequestConditionsReason) ProtoMessage() {} +func (*AccessRequestConditionsReason) Descriptor() ([]byte, []int) { + return fileDescriptor_9198ee693835762e, []int{131} +} +func (m *AccessRequestConditionsReason) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *AccessRequestConditionsReason) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_AccessRequestConditionsReason.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *AccessRequestConditionsReason) XXX_Merge(src proto.Message) { + xxx_messageInfo_AccessRequestConditionsReason.Merge(m, src) +} +func (m *AccessRequestConditionsReason) XXX_Size() int { + return m.Size() +} +func (m *AccessRequestConditionsReason) XXX_DiscardUnknown() { + xxx_messageInfo_AccessRequestConditionsReason.DiscardUnknown(m) +} + +var xxx_messageInfo_AccessRequestConditionsReason proto.InternalMessageInfo + // AccessReviewConditions is a matcher for allow/deny restrictions on // access reviews. // Please remember to update IsEmpty when updating this message. @@ -8713,7 +8966,7 @@ func (m *AccessReviewConditions) Reset() { *m = AccessReviewConditions{} func (m *AccessReviewConditions) String() string { return proto.CompactTextString(m) } func (*AccessReviewConditions) ProtoMessage() {} func (*AccessReviewConditions) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{128} + return fileDescriptor_9198ee693835762e, []int{132} } func (m *AccessReviewConditions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -8755,7 +9008,7 @@ func (m *AccessRequestAllowedPromotion) Reset() { *m = AccessRequestAllo func (m *AccessRequestAllowedPromotion) String() string { return proto.CompactTextString(m) } func (*AccessRequestAllowedPromotion) ProtoMessage() {} func (*AccessRequestAllowedPromotion) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{129} + return fileDescriptor_9198ee693835762e, []int{133} } func (m *AccessRequestAllowedPromotion) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -8798,7 +9051,7 @@ func (m *AccessRequestAllowedPromotions) Reset() { *m = AccessRequestAll func (m *AccessRequestAllowedPromotions) String() string { return proto.CompactTextString(m) } func (*AccessRequestAllowedPromotions) ProtoMessage() {} func (*AccessRequestAllowedPromotions) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{130} + return fileDescriptor_9198ee693835762e, []int{134} } func (m *AccessRequestAllowedPromotions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -8844,7 +9097,7 @@ func (m *ClaimMapping) Reset() { *m = ClaimMapping{} } func (m *ClaimMapping) String() string { return proto.CompactTextString(m) } func (*ClaimMapping) ProtoMessage() {} func (*ClaimMapping) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{131} + return fileDescriptor_9198ee693835762e, []int{135} } func (m *ClaimMapping) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -8890,7 +9143,7 @@ func (m *TraitMapping) Reset() { *m = TraitMapping{} } func (m *TraitMapping) String() string { return proto.CompactTextString(m) } func (*TraitMapping) ProtoMessage() {} func (*TraitMapping) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{132} + return fileDescriptor_9198ee693835762e, []int{136} } func (m *TraitMapping) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -8939,7 +9192,7 @@ func (m *Rule) Reset() { *m = Rule{} } func (m *Rule) String() string { return proto.CompactTextString(m) } func (*Rule) ProtoMessage() {} func (*Rule) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{133} + return fileDescriptor_9198ee693835762e, []int{137} } func (m *Rule) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -8987,7 +9240,7 @@ func (m *ImpersonateConditions) Reset() { *m = ImpersonateConditions{} } func (m *ImpersonateConditions) String() string { return proto.CompactTextString(m) } func (*ImpersonateConditions) ProtoMessage() {} func (*ImpersonateConditions) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{134} + return fileDescriptor_9198ee693835762e, []int{138} } func (m *ImpersonateConditions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -9029,7 +9282,7 @@ func (m *BoolValue) Reset() { *m = BoolValue{} } func (m *BoolValue) String() string { return proto.CompactTextString(m) } func (*BoolValue) ProtoMessage() {} func (*BoolValue) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{135} + return fileDescriptor_9198ee693835762e, []int{139} } func (m *BoolValue) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -9071,7 +9324,7 @@ func (m *UserFilter) Reset() { *m = UserFilter{} } func (m *UserFilter) String() string { return proto.CompactTextString(m) } func (*UserFilter) ProtoMessage() {} func (*UserFilter) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{136} + return fileDescriptor_9198ee693835762e, []int{140} } func (m *UserFilter) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -9122,7 +9375,7 @@ type UserV2 struct { func (m *UserV2) Reset() { *m = UserV2{} } func (*UserV2) ProtoMessage() {} func (*UserV2) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{137} + return fileDescriptor_9198ee693835762e, []int{141} } func (m *UserV2) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -9171,7 +9424,7 @@ func (m *UserStatusV2) Reset() { *m = UserStatusV2{} } func (m *UserStatusV2) String() string { return proto.CompactTextString(m) } func (*UserStatusV2) ProtoMessage() {} func (*UserStatusV2) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{138} + return fileDescriptor_9198ee693835762e, []int{142} } func (m *UserStatusV2) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -9245,7 +9498,7 @@ func (m *UserSpecV2) Reset() { *m = UserSpecV2{} } func (m *UserSpecV2) String() string { return proto.CompactTextString(m) } func (*UserSpecV2) ProtoMessage() {} func (*UserSpecV2) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{139} + return fileDescriptor_9198ee693835762e, []int{143} } func (m *UserSpecV2) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -9292,7 +9545,7 @@ type ExternalIdentity struct { func (m *ExternalIdentity) Reset() { *m = ExternalIdentity{} } func (*ExternalIdentity) ProtoMessage() {} func (*ExternalIdentity) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{140} + return fileDescriptor_9198ee693835762e, []int{144} } func (m *ExternalIdentity) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -9340,7 +9593,7 @@ func (m *LoginStatus) Reset() { *m = LoginStatus{} } func (m *LoginStatus) String() string { return proto.CompactTextString(m) } func (*LoginStatus) ProtoMessage() {} func (*LoginStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{141} + return fileDescriptor_9198ee693835762e, []int{145} } func (m *LoginStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -9385,7 +9638,7 @@ type CreatedBy struct { func (m *CreatedBy) Reset() { *m = CreatedBy{} } func (*CreatedBy) ProtoMessage() {} func (*CreatedBy) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{142} + return fileDescriptor_9198ee693835762e, []int{146} } func (m *CreatedBy) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -9434,7 +9687,7 @@ func (m *LocalAuthSecrets) Reset() { *m = LocalAuthSecrets{} } func (m *LocalAuthSecrets) String() string { return proto.CompactTextString(m) } func (*LocalAuthSecrets) ProtoMessage() {} func (*LocalAuthSecrets) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{143} + return fileDescriptor_9198ee693835762e, []int{147} } func (m *LocalAuthSecrets) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -9491,7 +9744,7 @@ func (m *MFADevice) Reset() { *m = MFADevice{} } func (m *MFADevice) String() string { return proto.CompactTextString(m) } func (*MFADevice) ProtoMessage() {} func (*MFADevice) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{144} + return fileDescriptor_9198ee693835762e, []int{148} } func (m *MFADevice) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -9601,7 +9854,7 @@ func (m *TOTPDevice) Reset() { *m = TOTPDevice{} } func (m *TOTPDevice) String() string { return proto.CompactTextString(m) } func (*TOTPDevice) ProtoMessage() {} func (*TOTPDevice) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{145} + return fileDescriptor_9198ee693835762e, []int{149} } func (m *TOTPDevice) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -9647,7 +9900,7 @@ func (m *U2FDevice) Reset() { *m = U2FDevice{} } func (m *U2FDevice) String() string { return proto.CompactTextString(m) } func (*U2FDevice) ProtoMessage() {} func (*U2FDevice) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{146} + return fileDescriptor_9198ee693835762e, []int{150} } func (m *U2FDevice) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -9729,7 +9982,7 @@ func (m *WebauthnDevice) Reset() { *m = WebauthnDevice{} } func (m *WebauthnDevice) String() string { return proto.CompactTextString(m) } func (*WebauthnDevice) ProtoMessage() {} func (*WebauthnDevice) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{147} + return fileDescriptor_9198ee693835762e, []int{151} } func (m *WebauthnDevice) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -9775,7 +10028,7 @@ func (m *SSOMFADevice) Reset() { *m = SSOMFADevice{} } func (m *SSOMFADevice) String() string { return proto.CompactTextString(m) } func (*SSOMFADevice) ProtoMessage() {} func (*SSOMFADevice) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{148} + return fileDescriptor_9198ee693835762e, []int{152} } func (m *SSOMFADevice) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -9818,7 +10071,7 @@ func (m *WebauthnLocalAuth) Reset() { *m = WebauthnLocalAuth{} } func (m *WebauthnLocalAuth) String() string { return proto.CompactTextString(m) } func (*WebauthnLocalAuth) ProtoMessage() {} func (*WebauthnLocalAuth) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{149} + return fileDescriptor_9198ee693835762e, []int{153} } func (m *WebauthnLocalAuth) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -9864,7 +10117,7 @@ func (m *ConnectorRef) Reset() { *m = ConnectorRef{} } func (m *ConnectorRef) String() string { return proto.CompactTextString(m) } func (*ConnectorRef) ProtoMessage() {} func (*ConnectorRef) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{150} + return fileDescriptor_9198ee693835762e, []int{154} } func (m *ConnectorRef) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -9906,7 +10159,7 @@ func (m *UserRef) Reset() { *m = UserRef{} } func (m *UserRef) String() string { return proto.CompactTextString(m) } func (*UserRef) ProtoMessage() {} func (*UserRef) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{151} + return fileDescriptor_9198ee693835762e, []int{155} } func (m *UserRef) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -9956,7 +10209,7 @@ func (m *ReverseTunnelV2) Reset() { *m = ReverseTunnelV2{} } func (m *ReverseTunnelV2) String() string { return proto.CompactTextString(m) } func (*ReverseTunnelV2) ProtoMessage() {} func (*ReverseTunnelV2) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{152} + return fileDescriptor_9198ee693835762e, []int{156} } func (m *ReverseTunnelV2) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -10003,7 +10256,7 @@ func (m *ReverseTunnelSpecV2) Reset() { *m = ReverseTunnelSpecV2{} } func (m *ReverseTunnelSpecV2) String() string { return proto.CompactTextString(m) } func (*ReverseTunnelSpecV2) ProtoMessage() {} func (*ReverseTunnelSpecV2) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{153} + return fileDescriptor_9198ee693835762e, []int{157} } func (m *ReverseTunnelSpecV2) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -10052,7 +10305,7 @@ type TunnelConnectionV2 struct { func (m *TunnelConnectionV2) Reset() { *m = TunnelConnectionV2{} } func (*TunnelConnectionV2) ProtoMessage() {} func (*TunnelConnectionV2) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{154} + return fileDescriptor_9198ee693835762e, []int{158} } func (m *TunnelConnectionV2) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -10100,7 +10353,7 @@ func (m *TunnelConnectionSpecV2) Reset() { *m = TunnelConnectionSpecV2{} func (m *TunnelConnectionSpecV2) String() string { return proto.CompactTextString(m) } func (*TunnelConnectionSpecV2) ProtoMessage() {} func (*TunnelConnectionSpecV2) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{155} + return fileDescriptor_9198ee693835762e, []int{159} } func (m *TunnelConnectionSpecV2) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -10148,7 +10401,7 @@ func (m *SemaphoreFilter) Reset() { *m = SemaphoreFilter{} } func (m *SemaphoreFilter) String() string { return proto.CompactTextString(m) } func (*SemaphoreFilter) ProtoMessage() {} func (*SemaphoreFilter) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{156} + return fileDescriptor_9198ee693835762e, []int{160} } func (m *SemaphoreFilter) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -10199,7 +10452,7 @@ func (m *AcquireSemaphoreRequest) Reset() { *m = AcquireSemaphoreRequest func (m *AcquireSemaphoreRequest) String() string { return proto.CompactTextString(m) } func (*AcquireSemaphoreRequest) ProtoMessage() {} func (*AcquireSemaphoreRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{157} + return fileDescriptor_9198ee693835762e, []int{161} } func (m *AcquireSemaphoreRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -10247,7 +10500,7 @@ func (m *SemaphoreLease) Reset() { *m = SemaphoreLease{} } func (m *SemaphoreLease) String() string { return proto.CompactTextString(m) } func (*SemaphoreLease) ProtoMessage() {} func (*SemaphoreLease) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{158} + return fileDescriptor_9198ee693835762e, []int{162} } func (m *SemaphoreLease) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -10293,7 +10546,7 @@ func (m *SemaphoreLeaseRef) Reset() { *m = SemaphoreLeaseRef{} } func (m *SemaphoreLeaseRef) String() string { return proto.CompactTextString(m) } func (*SemaphoreLeaseRef) ProtoMessage() {} func (*SemaphoreLeaseRef) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{159} + return fileDescriptor_9198ee693835762e, []int{163} } func (m *SemaphoreLeaseRef) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -10342,7 +10595,7 @@ type SemaphoreV3 struct { func (m *SemaphoreV3) Reset() { *m = SemaphoreV3{} } func (*SemaphoreV3) ProtoMessage() {} func (*SemaphoreV3) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{160} + return fileDescriptor_9198ee693835762e, []int{164} } func (m *SemaphoreV3) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -10384,7 +10637,7 @@ func (m *SemaphoreSpecV3) Reset() { *m = SemaphoreSpecV3{} } func (m *SemaphoreSpecV3) String() string { return proto.CompactTextString(m) } func (*SemaphoreSpecV3) ProtoMessage() {} func (*SemaphoreSpecV3) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{161} + return fileDescriptor_9198ee693835762e, []int{165} } func (m *SemaphoreSpecV3) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -10433,7 +10686,7 @@ type WebSessionV2 struct { func (m *WebSessionV2) Reset() { *m = WebSessionV2{} } func (*WebSessionV2) ProtoMessage() {} func (*WebSessionV2) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{162} + return fileDescriptor_9198ee693835762e, []int{166} } func (m *WebSessionV2) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -10518,7 +10771,7 @@ func (m *WebSessionSpecV2) Reset() { *m = WebSessionSpecV2{} } func (m *WebSessionSpecV2) String() string { return proto.CompactTextString(m) } func (*WebSessionSpecV2) ProtoMessage() {} func (*WebSessionSpecV2) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{163} + return fileDescriptor_9198ee693835762e, []int{167} } func (m *WebSessionSpecV2) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -10563,7 +10816,7 @@ func (m *DeviceWebToken) Reset() { *m = DeviceWebToken{} } func (m *DeviceWebToken) String() string { return proto.CompactTextString(m) } func (*DeviceWebToken) ProtoMessage() {} func (*DeviceWebToken) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{164} + return fileDescriptor_9198ee693835762e, []int{168} } func (m *DeviceWebToken) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -10605,7 +10858,7 @@ func (m *WebSessionFilter) Reset() { *m = WebSessionFilter{} } func (m *WebSessionFilter) String() string { return proto.CompactTextString(m) } func (*WebSessionFilter) ProtoMessage() {} func (*WebSessionFilter) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{165} + return fileDescriptor_9198ee693835762e, []int{169} } func (m *WebSessionFilter) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -10676,7 +10929,7 @@ func (m *SAMLSessionData) Reset() { *m = SAMLSessionData{} } func (m *SAMLSessionData) String() string { return proto.CompactTextString(m) } func (*SAMLSessionData) ProtoMessage() {} func (*SAMLSessionData) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{166} + return fileDescriptor_9198ee693835762e, []int{170} } func (m *SAMLSessionData) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -10725,7 +10978,7 @@ func (m *SAMLAttribute) Reset() { *m = SAMLAttribute{} } func (m *SAMLAttribute) String() string { return proto.CompactTextString(m) } func (*SAMLAttribute) ProtoMessage() {} func (*SAMLAttribute) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{167} + return fileDescriptor_9198ee693835762e, []int{171} } func (m *SAMLAttribute) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -10772,7 +11025,7 @@ func (m *SAMLAttributeValue) Reset() { *m = SAMLAttributeValue{} } func (m *SAMLAttributeValue) String() string { return proto.CompactTextString(m) } func (*SAMLAttributeValue) ProtoMessage() {} func (*SAMLAttributeValue) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{168} + return fileDescriptor_9198ee693835762e, []int{172} } func (m *SAMLAttributeValue) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -10823,7 +11076,7 @@ func (m *SAMLNameID) Reset() { *m = SAMLNameID{} } func (m *SAMLNameID) String() string { return proto.CompactTextString(m) } func (*SAMLNameID) ProtoMessage() {} func (*SAMLNameID) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{169} + return fileDescriptor_9198ee693835762e, []int{173} } func (m *SAMLNameID) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -10872,7 +11125,7 @@ type RemoteClusterV3 struct { func (m *RemoteClusterV3) Reset() { *m = RemoteClusterV3{} } func (*RemoteClusterV3) ProtoMessage() {} func (*RemoteClusterV3) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{170} + return fileDescriptor_9198ee693835762e, []int{174} } func (m *RemoteClusterV3) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -10916,7 +11169,7 @@ func (m *RemoteClusterStatusV3) Reset() { *m = RemoteClusterStatusV3{} } func (m *RemoteClusterStatusV3) String() string { return proto.CompactTextString(m) } func (*RemoteClusterStatusV3) ProtoMessage() {} func (*RemoteClusterStatusV3) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{171} + return fileDescriptor_9198ee693835762e, []int{175} } func (m *RemoteClusterStatusV3) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -10966,7 +11219,7 @@ func (m *KubernetesCluster) Reset() { *m = KubernetesCluster{} } func (m *KubernetesCluster) String() string { return proto.CompactTextString(m) } func (*KubernetesCluster) ProtoMessage() {} func (*KubernetesCluster) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{172} + return fileDescriptor_9198ee693835762e, []int{176} } func (m *KubernetesCluster) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -11015,7 +11268,7 @@ type KubernetesClusterV3 struct { func (m *KubernetesClusterV3) Reset() { *m = KubernetesClusterV3{} } func (*KubernetesClusterV3) ProtoMessage() {} func (*KubernetesClusterV3) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{173} + return fileDescriptor_9198ee693835762e, []int{177} } func (m *KubernetesClusterV3) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -11066,7 +11319,7 @@ func (m *KubernetesClusterSpecV3) Reset() { *m = KubernetesClusterSpecV3 func (m *KubernetesClusterSpecV3) String() string { return proto.CompactTextString(m) } func (*KubernetesClusterSpecV3) ProtoMessage() {} func (*KubernetesClusterSpecV3) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{174} + return fileDescriptor_9198ee693835762e, []int{178} } func (m *KubernetesClusterSpecV3) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -11114,7 +11367,7 @@ func (m *KubeAzure) Reset() { *m = KubeAzure{} } func (m *KubeAzure) String() string { return proto.CompactTextString(m) } func (*KubeAzure) ProtoMessage() {} func (*KubeAzure) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{175} + return fileDescriptor_9198ee693835762e, []int{179} } func (m *KubeAzure) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -11160,7 +11413,7 @@ func (m *KubeAWS) Reset() { *m = KubeAWS{} } func (m *KubeAWS) String() string { return proto.CompactTextString(m) } func (*KubeAWS) ProtoMessage() {} func (*KubeAWS) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{176} + return fileDescriptor_9198ee693835762e, []int{180} } func (m *KubeAWS) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -11206,7 +11459,7 @@ func (m *KubeGCP) Reset() { *m = KubeGCP{} } func (m *KubeGCP) String() string { return proto.CompactTextString(m) } func (*KubeGCP) ProtoMessage() {} func (*KubeGCP) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{177} + return fileDescriptor_9198ee693835762e, []int{181} } func (m *KubeGCP) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -11248,7 +11501,7 @@ func (m *KubernetesClusterV3List) Reset() { *m = KubernetesClusterV3List func (m *KubernetesClusterV3List) String() string { return proto.CompactTextString(m) } func (*KubernetesClusterV3List) ProtoMessage() {} func (*KubernetesClusterV3List) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{178} + return fileDescriptor_9198ee693835762e, []int{182} } func (m *KubernetesClusterV3List) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -11297,7 +11550,7 @@ type KubernetesServerV3 struct { func (m *KubernetesServerV3) Reset() { *m = KubernetesServerV3{} } func (*KubernetesServerV3) ProtoMessage() {} func (*KubernetesServerV3) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{179} + return fileDescriptor_9198ee693835762e, []int{183} } func (m *KubernetesServerV3) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -11349,7 +11602,7 @@ func (m *KubernetesServerSpecV3) Reset() { *m = KubernetesServerSpecV3{} func (m *KubernetesServerSpecV3) String() string { return proto.CompactTextString(m) } func (*KubernetesServerSpecV3) ProtoMessage() {} func (*KubernetesServerSpecV3) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{180} + return fileDescriptor_9198ee693835762e, []int{184} } func (m *KubernetesServerSpecV3) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -11401,7 +11654,7 @@ type WebTokenV3 struct { func (m *WebTokenV3) Reset() { *m = WebTokenV3{} } func (*WebTokenV3) ProtoMessage() {} func (*WebTokenV3) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{181} + return fileDescriptor_9198ee693835762e, []int{185} } func (m *WebTokenV3) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -11445,7 +11698,7 @@ func (m *WebTokenSpecV3) Reset() { *m = WebTokenSpecV3{} } func (m *WebTokenSpecV3) String() string { return proto.CompactTextString(m) } func (*WebTokenSpecV3) ProtoMessage() {} func (*WebTokenSpecV3) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{182} + return fileDescriptor_9198ee693835762e, []int{186} } func (m *WebTokenSpecV3) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -11489,7 +11742,7 @@ func (m *GetWebSessionRequest) Reset() { *m = GetWebSessionRequest{} } func (m *GetWebSessionRequest) String() string { return proto.CompactTextString(m) } func (*GetWebSessionRequest) ProtoMessage() {} func (*GetWebSessionRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{183} + return fileDescriptor_9198ee693835762e, []int{187} } func (m *GetWebSessionRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -11533,7 +11786,7 @@ func (m *DeleteWebSessionRequest) Reset() { *m = DeleteWebSessionRequest func (m *DeleteWebSessionRequest) String() string { return proto.CompactTextString(m) } func (*DeleteWebSessionRequest) ProtoMessage() {} func (*DeleteWebSessionRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{184} + return fileDescriptor_9198ee693835762e, []int{188} } func (m *DeleteWebSessionRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -11577,7 +11830,7 @@ func (m *GetWebTokenRequest) Reset() { *m = GetWebTokenRequest{} } func (m *GetWebTokenRequest) String() string { return proto.CompactTextString(m) } func (*GetWebTokenRequest) ProtoMessage() {} func (*GetWebTokenRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{185} + return fileDescriptor_9198ee693835762e, []int{189} } func (m *GetWebTokenRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -11621,7 +11874,7 @@ func (m *DeleteWebTokenRequest) Reset() { *m = DeleteWebTokenRequest{} } func (m *DeleteWebTokenRequest) String() string { return proto.CompactTextString(m) } func (*DeleteWebTokenRequest) ProtoMessage() {} func (*DeleteWebTokenRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{186} + return fileDescriptor_9198ee693835762e, []int{190} } func (m *DeleteWebTokenRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -11663,7 +11916,7 @@ func (m *ResourceRequest) Reset() { *m = ResourceRequest{} } func (m *ResourceRequest) String() string { return proto.CompactTextString(m) } func (*ResourceRequest) ProtoMessage() {} func (*ResourceRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{187} + return fileDescriptor_9198ee693835762e, []int{191} } func (m *ResourceRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -11707,7 +11960,7 @@ func (m *ResourceWithSecretsRequest) Reset() { *m = ResourceWithSecretsR func (m *ResourceWithSecretsRequest) String() string { return proto.CompactTextString(m) } func (*ResourceWithSecretsRequest) ProtoMessage() {} func (*ResourceWithSecretsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{188} + return fileDescriptor_9198ee693835762e, []int{192} } func (m *ResourceWithSecretsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -11749,7 +12002,7 @@ func (m *ResourcesWithSecretsRequest) Reset() { *m = ResourcesWithSecret func (m *ResourcesWithSecretsRequest) String() string { return proto.CompactTextString(m) } func (*ResourcesWithSecretsRequest) ProtoMessage() {} func (*ResourcesWithSecretsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{189} + return fileDescriptor_9198ee693835762e, []int{193} } func (m *ResourcesWithSecretsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -11793,7 +12046,7 @@ func (m *ResourceInNamespaceRequest) Reset() { *m = ResourceInNamespaceR func (m *ResourceInNamespaceRequest) String() string { return proto.CompactTextString(m) } func (*ResourceInNamespaceRequest) ProtoMessage() {} func (*ResourceInNamespaceRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{190} + return fileDescriptor_9198ee693835762e, []int{194} } func (m *ResourceInNamespaceRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -11835,7 +12088,7 @@ func (m *ResourcesInNamespaceRequest) Reset() { *m = ResourcesInNamespac func (m *ResourcesInNamespaceRequest) String() string { return proto.CompactTextString(m) } func (*ResourcesInNamespaceRequest) ProtoMessage() {} func (*ResourcesInNamespaceRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{191} + return fileDescriptor_9198ee693835762e, []int{195} } func (m *ResourcesInNamespaceRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -11886,7 +12139,7 @@ func (m *OIDCConnectorV3) Reset() { *m = OIDCConnectorV3{} } func (m *OIDCConnectorV3) String() string { return proto.CompactTextString(m) } func (*OIDCConnectorV3) ProtoMessage() {} func (*OIDCConnectorV3) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{192} + return fileDescriptor_9198ee693835762e, []int{196} } func (m *OIDCConnectorV3) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -11928,7 +12181,7 @@ func (m *OIDCConnectorV3List) Reset() { *m = OIDCConnectorV3List{} } func (m *OIDCConnectorV3List) String() string { return proto.CompactTextString(m) } func (*OIDCConnectorV3List) ProtoMessage() {} func (*OIDCConnectorV3List) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{193} + return fileDescriptor_9198ee693835762e, []int{197} } func (m *OIDCConnectorV3List) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -12016,7 +12269,7 @@ func (m *OIDCConnectorSpecV3) Reset() { *m = OIDCConnectorSpecV3{} } func (m *OIDCConnectorSpecV3) String() string { return proto.CompactTextString(m) } func (*OIDCConnectorSpecV3) ProtoMessage() {} func (*OIDCConnectorSpecV3) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{194} + return fileDescriptor_9198ee693835762e, []int{198} } func (m *OIDCConnectorSpecV3) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -12058,7 +12311,7 @@ func (m *MaxAge) Reset() { *m = MaxAge{} } func (m *MaxAge) String() string { return proto.CompactTextString(m) } func (*MaxAge) ProtoMessage() {} func (*MaxAge) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{195} + return fileDescriptor_9198ee693835762e, []int{199} } func (m *MaxAge) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -12103,7 +12356,7 @@ func (m *SSOClientRedirectSettings) Reset() { *m = SSOClientRedirectSett func (m *SSOClientRedirectSettings) String() string { return proto.CompactTextString(m) } func (*SSOClientRedirectSettings) ProtoMessage() {} func (*SSOClientRedirectSettings) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{196} + return fileDescriptor_9198ee693835762e, []int{200} } func (m *SSOClientRedirectSettings) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -12160,7 +12413,7 @@ func (m *OIDCConnectorMFASettings) Reset() { *m = OIDCConnectorMFASettin func (m *OIDCConnectorMFASettings) String() string { return proto.CompactTextString(m) } func (*OIDCConnectorMFASettings) ProtoMessage() {} func (*OIDCConnectorMFASettings) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{197} + return fileDescriptor_9198ee693835762e, []int{201} } func (m *OIDCConnectorMFASettings) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -12262,7 +12515,7 @@ func (m *OIDCAuthRequest) Reset() { *m = OIDCAuthRequest{} } func (m *OIDCAuthRequest) String() string { return proto.CompactTextString(m) } func (*OIDCAuthRequest) ProtoMessage() {} func (*OIDCAuthRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{198} + return fileDescriptor_9198ee693835762e, []int{202} } func (m *OIDCAuthRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -12313,7 +12566,7 @@ func (m *SAMLConnectorV2) Reset() { *m = SAMLConnectorV2{} } func (m *SAMLConnectorV2) String() string { return proto.CompactTextString(m) } func (*SAMLConnectorV2) ProtoMessage() {} func (*SAMLConnectorV2) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{199} + return fileDescriptor_9198ee693835762e, []int{203} } func (m *SAMLConnectorV2) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -12355,7 +12608,7 @@ func (m *SAMLConnectorV2List) Reset() { *m = SAMLConnectorV2List{} } func (m *SAMLConnectorV2List) String() string { return proto.CompactTextString(m) } func (*SAMLConnectorV2List) ProtoMessage() {} func (*SAMLConnectorV2List) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{200} + return fileDescriptor_9198ee693835762e, []int{204} } func (m *SAMLConnectorV2List) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -12437,7 +12690,7 @@ func (m *SAMLConnectorSpecV2) Reset() { *m = SAMLConnectorSpecV2{} } func (m *SAMLConnectorSpecV2) String() string { return proto.CompactTextString(m) } func (*SAMLConnectorSpecV2) ProtoMessage() {} func (*SAMLConnectorSpecV2) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{201} + return fileDescriptor_9198ee693835762e, []int{205} } func (m *SAMLConnectorSpecV2) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -12496,7 +12749,7 @@ func (m *SAMLConnectorMFASettings) Reset() { *m = SAMLConnectorMFASettin func (m *SAMLConnectorMFASettings) String() string { return proto.CompactTextString(m) } func (*SAMLConnectorMFASettings) ProtoMessage() {} func (*SAMLConnectorMFASettings) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{202} + return fileDescriptor_9198ee693835762e, []int{206} } func (m *SAMLConnectorMFASettings) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -12592,7 +12845,7 @@ func (m *SAMLAuthRequest) Reset() { *m = SAMLAuthRequest{} } func (m *SAMLAuthRequest) String() string { return proto.CompactTextString(m) } func (*SAMLAuthRequest) ProtoMessage() {} func (*SAMLAuthRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{203} + return fileDescriptor_9198ee693835762e, []int{207} } func (m *SAMLAuthRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -12638,7 +12891,7 @@ func (m *AttributeMapping) Reset() { *m = AttributeMapping{} } func (m *AttributeMapping) String() string { return proto.CompactTextString(m) } func (*AttributeMapping) ProtoMessage() {} func (*AttributeMapping) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{204} + return fileDescriptor_9198ee693835762e, []int{208} } func (m *AttributeMapping) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -12683,7 +12936,7 @@ func (m *AsymmetricKeyPair) Reset() { *m = AsymmetricKeyPair{} } func (m *AsymmetricKeyPair) String() string { return proto.CompactTextString(m) } func (*AsymmetricKeyPair) ProtoMessage() {} func (*AsymmetricKeyPair) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{205} + return fileDescriptor_9198ee693835762e, []int{209} } func (m *AsymmetricKeyPair) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -12734,7 +12987,7 @@ func (m *GithubConnectorV3) Reset() { *m = GithubConnectorV3{} } func (m *GithubConnectorV3) String() string { return proto.CompactTextString(m) } func (*GithubConnectorV3) ProtoMessage() {} func (*GithubConnectorV3) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{206} + return fileDescriptor_9198ee693835762e, []int{210} } func (m *GithubConnectorV3) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -12776,7 +13029,7 @@ func (m *GithubConnectorV3List) Reset() { *m = GithubConnectorV3List{} } func (m *GithubConnectorV3List) String() string { return proto.CompactTextString(m) } func (*GithubConnectorV3List) ProtoMessage() {} func (*GithubConnectorV3List) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{207} + return fileDescriptor_9198ee693835762e, []int{211} } func (m *GithubConnectorV3List) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -12839,7 +13092,7 @@ func (m *GithubConnectorSpecV3) Reset() { *m = GithubConnectorSpecV3{} } func (m *GithubConnectorSpecV3) String() string { return proto.CompactTextString(m) } func (*GithubConnectorSpecV3) ProtoMessage() {} func (*GithubConnectorSpecV3) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{208} + return fileDescriptor_9198ee693835762e, []int{212} } func (m *GithubConnectorSpecV3) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -12932,7 +13185,7 @@ func (m *GithubAuthRequest) Reset() { *m = GithubAuthRequest{} } func (m *GithubAuthRequest) String() string { return proto.CompactTextString(m) } func (*GithubAuthRequest) ProtoMessage() {} func (*GithubAuthRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{209} + return fileDescriptor_9198ee693835762e, []int{213} } func (m *GithubAuthRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -12976,7 +13229,7 @@ func (m *SSOWarnings) Reset() { *m = SSOWarnings{} } func (m *SSOWarnings) String() string { return proto.CompactTextString(m) } func (*SSOWarnings) ProtoMessage() {} func (*SSOWarnings) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{210} + return fileDescriptor_9198ee693835762e, []int{214} } func (m *SSOWarnings) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13032,7 +13285,7 @@ func (m *CreateUserParams) Reset() { *m = CreateUserParams{} } func (m *CreateUserParams) String() string { return proto.CompactTextString(m) } func (*CreateUserParams) ProtoMessage() {} func (*CreateUserParams) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{211} + return fileDescriptor_9198ee693835762e, []int{215} } func (m *CreateUserParams) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13117,7 +13370,7 @@ func (m *SSODiagnosticInfo) Reset() { *m = SSODiagnosticInfo{} } func (m *SSODiagnosticInfo) String() string { return proto.CompactTextString(m) } func (*SSODiagnosticInfo) ProtoMessage() {} func (*SSODiagnosticInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{212} + return fileDescriptor_9198ee693835762e, []int{216} } func (m *SSODiagnosticInfo) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13161,7 +13414,7 @@ func (m *GithubTokenInfo) Reset() { *m = GithubTokenInfo{} } func (m *GithubTokenInfo) String() string { return proto.CompactTextString(m) } func (*GithubTokenInfo) ProtoMessage() {} func (*GithubTokenInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{213} + return fileDescriptor_9198ee693835762e, []int{217} } func (m *GithubTokenInfo) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13207,7 +13460,7 @@ func (m *GithubClaims) Reset() { *m = GithubClaims{} } func (m *GithubClaims) String() string { return proto.CompactTextString(m) } func (*GithubClaims) ProtoMessage() {} func (*GithubClaims) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{214} + return fileDescriptor_9198ee693835762e, []int{218} } func (m *GithubClaims) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13259,7 +13512,7 @@ func (m *TeamMapping) Reset() { *m = TeamMapping{} } func (m *TeamMapping) String() string { return proto.CompactTextString(m) } func (*TeamMapping) ProtoMessage() {} func (*TeamMapping) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{215} + return fileDescriptor_9198ee693835762e, []int{219} } func (m *TeamMapping) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13305,7 +13558,7 @@ func (m *TeamRolesMapping) Reset() { *m = TeamRolesMapping{} } func (m *TeamRolesMapping) String() string { return proto.CompactTextString(m) } func (*TeamRolesMapping) ProtoMessage() {} func (*TeamRolesMapping) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{216} + return fileDescriptor_9198ee693835762e, []int{220} } func (m *TeamRolesMapping) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13355,7 +13608,7 @@ type TrustedClusterV2 struct { func (m *TrustedClusterV2) Reset() { *m = TrustedClusterV2{} } func (*TrustedClusterV2) ProtoMessage() {} func (*TrustedClusterV2) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{217} + return fileDescriptor_9198ee693835762e, []int{221} } func (m *TrustedClusterV2) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13397,7 +13650,7 @@ func (m *TrustedClusterV2List) Reset() { *m = TrustedClusterV2List{} } func (m *TrustedClusterV2List) String() string { return proto.CompactTextString(m) } func (*TrustedClusterV2List) ProtoMessage() {} func (*TrustedClusterV2List) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{218} + return fileDescriptor_9198ee693835762e, []int{222} } func (m *TrustedClusterV2List) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13453,7 +13706,7 @@ func (m *TrustedClusterSpecV2) Reset() { *m = TrustedClusterSpecV2{} } func (m *TrustedClusterSpecV2) String() string { return proto.CompactTextString(m) } func (*TrustedClusterSpecV2) ProtoMessage() {} func (*TrustedClusterSpecV2) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{219} + return fileDescriptor_9198ee693835762e, []int{223} } func (m *TrustedClusterSpecV2) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13507,7 +13760,7 @@ func (m *LockV2) Reset() { *m = LockV2{} } func (m *LockV2) String() string { return proto.CompactTextString(m) } func (*LockV2) ProtoMessage() {} func (*LockV2) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{220} + return fileDescriptor_9198ee693835762e, []int{224} } func (m *LockV2) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13557,7 +13810,7 @@ func (m *LockSpecV2) Reset() { *m = LockSpecV2{} } func (m *LockSpecV2) String() string { return proto.CompactTextString(m) } func (*LockSpecV2) ProtoMessage() {} func (*LockSpecV2) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{221} + return fileDescriptor_9198ee693835762e, []int{225} } func (m *LockSpecV2) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13618,7 +13871,7 @@ type LockTarget struct { func (m *LockTarget) Reset() { *m = LockTarget{} } func (*LockTarget) ProtoMessage() {} func (*LockTarget) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{222} + return fileDescriptor_9198ee693835762e, []int{226} } func (m *LockTarget) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13662,7 +13915,7 @@ func (m *AddressCondition) Reset() { *m = AddressCondition{} } func (m *AddressCondition) String() string { return proto.CompactTextString(m) } func (*AddressCondition) ProtoMessage() {} func (*AddressCondition) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{223} + return fileDescriptor_9198ee693835762e, []int{227} } func (m *AddressCondition) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13705,7 +13958,7 @@ func (m *NetworkRestrictionsSpecV4) Reset() { *m = NetworkRestrictionsSp func (m *NetworkRestrictionsSpecV4) String() string { return proto.CompactTextString(m) } func (*NetworkRestrictionsSpecV4) ProtoMessage() {} func (*NetworkRestrictionsSpecV4) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{224} + return fileDescriptor_9198ee693835762e, []int{228} } func (m *NetworkRestrictionsSpecV4) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13758,7 +14011,7 @@ func (m *NetworkRestrictionsV4) Reset() { *m = NetworkRestrictionsV4{} } func (m *NetworkRestrictionsV4) String() string { return proto.CompactTextString(m) } func (*NetworkRestrictionsV4) ProtoMessage() {} func (*NetworkRestrictionsV4) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{225} + return fileDescriptor_9198ee693835762e, []int{229} } func (m *NetworkRestrictionsV4) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13802,7 +14055,7 @@ func (m *WindowsDesktopServiceV3) Reset() { *m = WindowsDesktopServiceV3 func (m *WindowsDesktopServiceV3) String() string { return proto.CompactTextString(m) } func (*WindowsDesktopServiceV3) ProtoMessage() {} func (*WindowsDesktopServiceV3) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{226} + return fileDescriptor_9198ee693835762e, []int{230} } func (m *WindowsDesktopServiceV3) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13850,7 +14103,7 @@ func (m *WindowsDesktopServiceSpecV3) Reset() { *m = WindowsDesktopServi func (m *WindowsDesktopServiceSpecV3) String() string { return proto.CompactTextString(m) } func (*WindowsDesktopServiceSpecV3) ProtoMessage() {} func (*WindowsDesktopServiceSpecV3) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{227} + return fileDescriptor_9198ee693835762e, []int{231} } func (m *WindowsDesktopServiceSpecV3) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13894,7 +14147,7 @@ func (m *WindowsDesktopFilter) Reset() { *m = WindowsDesktopFilter{} } func (m *WindowsDesktopFilter) String() string { return proto.CompactTextString(m) } func (*WindowsDesktopFilter) ProtoMessage() {} func (*WindowsDesktopFilter) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{228} + return fileDescriptor_9198ee693835762e, []int{232} } func (m *WindowsDesktopFilter) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13938,7 +14191,7 @@ func (m *WindowsDesktopV3) Reset() { *m = WindowsDesktopV3{} } func (m *WindowsDesktopV3) String() string { return proto.CompactTextString(m) } func (*WindowsDesktopV3) ProtoMessage() {} func (*WindowsDesktopV3) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{229} + return fileDescriptor_9198ee693835762e, []int{233} } func (m *WindowsDesktopV3) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13991,7 +14244,7 @@ func (m *WindowsDesktopSpecV3) Reset() { *m = WindowsDesktopSpecV3{} } func (m *WindowsDesktopSpecV3) String() string { return proto.CompactTextString(m) } func (*WindowsDesktopSpecV3) ProtoMessage() {} func (*WindowsDesktopSpecV3) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{230} + return fileDescriptor_9198ee693835762e, []int{234} } func (m *WindowsDesktopSpecV3) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -14035,7 +14288,7 @@ func (m *DynamicWindowsDesktopV1) Reset() { *m = DynamicWindowsDesktopV1 func (m *DynamicWindowsDesktopV1) String() string { return proto.CompactTextString(m) } func (*DynamicWindowsDesktopV1) ProtoMessage() {} func (*DynamicWindowsDesktopV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{231} + return fileDescriptor_9198ee693835762e, []int{235} } func (m *DynamicWindowsDesktopV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -14086,7 +14339,7 @@ func (m *DynamicWindowsDesktopSpecV1) Reset() { *m = DynamicWindowsDeskt func (m *DynamicWindowsDesktopSpecV1) String() string { return proto.CompactTextString(m) } func (*DynamicWindowsDesktopSpecV1) ProtoMessage() {} func (*DynamicWindowsDesktopSpecV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{232} + return fileDescriptor_9198ee693835762e, []int{236} } func (m *DynamicWindowsDesktopSpecV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -14127,7 +14380,7 @@ func (m *Resolution) Reset() { *m = Resolution{} } func (m *Resolution) String() string { return proto.CompactTextString(m) } func (*Resolution) ProtoMessage() {} func (*Resolution) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{233} + return fileDescriptor_9198ee693835762e, []int{237} } func (m *Resolution) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -14210,7 +14463,7 @@ func (m *RegisterUsingTokenRequest) Reset() { *m = RegisterUsingTokenReq func (m *RegisterUsingTokenRequest) String() string { return proto.CompactTextString(m) } func (*RegisterUsingTokenRequest) ProtoMessage() {} func (*RegisterUsingTokenRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{234} + return fileDescriptor_9198ee693835762e, []int{238} } func (m *RegisterUsingTokenRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -14264,7 +14517,7 @@ func (m *RecoveryCodesV1) Reset() { *m = RecoveryCodesV1{} } func (m *RecoveryCodesV1) String() string { return proto.CompactTextString(m) } func (*RecoveryCodesV1) ProtoMessage() {} func (*RecoveryCodesV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{235} + return fileDescriptor_9198ee693835762e, []int{239} } func (m *RecoveryCodesV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -14309,7 +14562,7 @@ func (m *RecoveryCodesSpecV1) Reset() { *m = RecoveryCodesSpecV1{} } func (m *RecoveryCodesSpecV1) String() string { return proto.CompactTextString(m) } func (*RecoveryCodesSpecV1) ProtoMessage() {} func (*RecoveryCodesSpecV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{236} + return fileDescriptor_9198ee693835762e, []int{240} } func (m *RecoveryCodesSpecV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -14353,7 +14606,7 @@ func (m *RecoveryCode) Reset() { *m = RecoveryCode{} } func (m *RecoveryCode) String() string { return proto.CompactTextString(m) } func (*RecoveryCode) ProtoMessage() {} func (*RecoveryCode) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{237} + return fileDescriptor_9198ee693835762e, []int{241} } func (m *RecoveryCode) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -14393,7 +14646,7 @@ func (m *NullableSessionState) Reset() { *m = NullableSessionState{} } func (m *NullableSessionState) String() string { return proto.CompactTextString(m) } func (*NullableSessionState) ProtoMessage() {} func (*NullableSessionState) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{238} + return fileDescriptor_9198ee693835762e, []int{242} } func (m *NullableSessionState) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -14439,7 +14692,7 @@ func (m *SessionTrackerFilter) Reset() { *m = SessionTrackerFilter{} } func (m *SessionTrackerFilter) String() string { return proto.CompactTextString(m) } func (*SessionTrackerFilter) ProtoMessage() {} func (*SessionTrackerFilter) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{239} + return fileDescriptor_9198ee693835762e, []int{243} } func (m *SessionTrackerFilter) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -14483,7 +14736,7 @@ func (m *SessionTrackerV1) Reset() { *m = SessionTrackerV1{} } func (m *SessionTrackerV1) String() string { return proto.CompactTextString(m) } func (*SessionTrackerV1) ProtoMessage() {} func (*SessionTrackerV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{240} + return fileDescriptor_9198ee693835762e, []int{244} } func (m *SessionTrackerV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -14581,7 +14834,7 @@ func (m *SessionTrackerSpecV1) Reset() { *m = SessionTrackerSpecV1{} } func (m *SessionTrackerSpecV1) String() string { return proto.CompactTextString(m) } func (*SessionTrackerSpecV1) ProtoMessage() {} func (*SessionTrackerSpecV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{241} + return fileDescriptor_9198ee693835762e, []int{245} } func (m *SessionTrackerSpecV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -14628,7 +14881,7 @@ func (m *SessionTrackerPolicySet) Reset() { *m = SessionTrackerPolicySet func (m *SessionTrackerPolicySet) String() string { return proto.CompactTextString(m) } func (*SessionTrackerPolicySet) ProtoMessage() {} func (*SessionTrackerPolicySet) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{242} + return fileDescriptor_9198ee693835762e, []int{246} } func (m *SessionTrackerPolicySet) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -14676,7 +14929,7 @@ func (m *Participant) Reset() { *m = Participant{} } func (m *Participant) String() string { return proto.CompactTextString(m) } func (*Participant) ProtoMessage() {} func (*Participant) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{243} + return fileDescriptor_9198ee693835762e, []int{247} } func (m *Participant) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -14720,7 +14973,7 @@ func (m *UIConfigV1) Reset() { *m = UIConfigV1{} } func (m *UIConfigV1) String() string { return proto.CompactTextString(m) } func (*UIConfigV1) ProtoMessage() {} func (*UIConfigV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{244} + return fileDescriptor_9198ee693835762e, []int{248} } func (m *UIConfigV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -14766,7 +15019,7 @@ func (m *UIConfigSpecV1) Reset() { *m = UIConfigSpecV1{} } func (m *UIConfigSpecV1) String() string { return proto.CompactTextString(m) } func (*UIConfigSpecV1) ProtoMessage() {} func (*UIConfigSpecV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{245} + return fileDescriptor_9198ee693835762e, []int{249} } func (m *UIConfigSpecV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -14817,7 +15070,7 @@ func (m *InstallerV1) Reset() { *m = InstallerV1{} } func (m *InstallerV1) String() string { return proto.CompactTextString(m) } func (*InstallerV1) ProtoMessage() {} func (*InstallerV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{246} + return fileDescriptor_9198ee693835762e, []int{250} } func (m *InstallerV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -14859,7 +15112,7 @@ func (m *InstallerSpecV1) Reset() { *m = InstallerSpecV1{} } func (m *InstallerSpecV1) String() string { return proto.CompactTextString(m) } func (*InstallerSpecV1) ProtoMessage() {} func (*InstallerSpecV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{247} + return fileDescriptor_9198ee693835762e, []int{251} } func (m *InstallerSpecV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -14901,7 +15154,7 @@ func (m *InstallerV1List) Reset() { *m = InstallerV1List{} } func (m *InstallerV1List) String() string { return proto.CompactTextString(m) } func (*InstallerV1List) ProtoMessage() {} func (*InstallerV1List) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{248} + return fileDescriptor_9198ee693835762e, []int{252} } func (m *InstallerV1List) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -14945,7 +15198,7 @@ func (m *SortBy) Reset() { *m = SortBy{} } func (m *SortBy) String() string { return proto.CompactTextString(m) } func (*SortBy) ProtoMessage() {} func (*SortBy) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{249} + return fileDescriptor_9198ee693835762e, []int{253} } func (m *SortBy) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -14991,7 +15244,7 @@ func (m *ConnectionDiagnosticV1) Reset() { *m = ConnectionDiagnosticV1{} func (m *ConnectionDiagnosticV1) String() string { return proto.CompactTextString(m) } func (*ConnectionDiagnosticV1) ProtoMessage() {} func (*ConnectionDiagnosticV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{250} + return fileDescriptor_9198ee693835762e, []int{254} } func (m *ConnectionDiagnosticV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -15041,7 +15294,7 @@ func (m *ConnectionDiagnosticSpecV1) Reset() { *m = ConnectionDiagnostic func (m *ConnectionDiagnosticSpecV1) String() string { return proto.CompactTextString(m) } func (*ConnectionDiagnosticSpecV1) ProtoMessage() {} func (*ConnectionDiagnosticSpecV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{251} + return fileDescriptor_9198ee693835762e, []int{255} } func (m *ConnectionDiagnosticSpecV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -15087,7 +15340,7 @@ func (m *ConnectionDiagnosticTrace) Reset() { *m = ConnectionDiagnosticT func (m *ConnectionDiagnosticTrace) String() string { return proto.CompactTextString(m) } func (*ConnectionDiagnosticTrace) ProtoMessage() {} func (*ConnectionDiagnosticTrace) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{252} + return fileDescriptor_9198ee693835762e, []int{256} } func (m *ConnectionDiagnosticTrace) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -15130,7 +15383,7 @@ func (m *DatabaseServiceV1) Reset() { *m = DatabaseServiceV1{} } func (m *DatabaseServiceV1) String() string { return proto.CompactTextString(m) } func (*DatabaseServiceV1) ProtoMessage() {} func (*DatabaseServiceV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{253} + return fileDescriptor_9198ee693835762e, []int{257} } func (m *DatabaseServiceV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -15174,7 +15427,7 @@ func (m *DatabaseServiceSpecV1) Reset() { *m = DatabaseServiceSpecV1{} } func (m *DatabaseServiceSpecV1) String() string { return proto.CompactTextString(m) } func (*DatabaseServiceSpecV1) ProtoMessage() {} func (*DatabaseServiceSpecV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{254} + return fileDescriptor_9198ee693835762e, []int{258} } func (m *DatabaseServiceSpecV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -15216,7 +15469,7 @@ func (m *DatabaseResourceMatcher) Reset() { *m = DatabaseResourceMatcher func (m *DatabaseResourceMatcher) String() string { return proto.CompactTextString(m) } func (*DatabaseResourceMatcher) ProtoMessage() {} func (*DatabaseResourceMatcher) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{255} + return fileDescriptor_9198ee693835762e, []int{259} } func (m *DatabaseResourceMatcher) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -15260,7 +15513,7 @@ func (m *ResourceMatcherAWS) Reset() { *m = ResourceMatcherAWS{} } func (m *ResourceMatcherAWS) String() string { return proto.CompactTextString(m) } func (*ResourceMatcherAWS) ProtoMessage() {} func (*ResourceMatcherAWS) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{256} + return fileDescriptor_9198ee693835762e, []int{260} } func (m *ResourceMatcherAWS) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -15302,7 +15555,7 @@ func (m *ClusterAlert) Reset() { *m = ClusterAlert{} } func (m *ClusterAlert) String() string { return proto.CompactTextString(m) } func (*ClusterAlert) ProtoMessage() {} func (*ClusterAlert) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{257} + return fileDescriptor_9198ee693835762e, []int{261} } func (m *ClusterAlert) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -15348,7 +15601,7 @@ func (m *ClusterAlertSpec) Reset() { *m = ClusterAlertSpec{} } func (m *ClusterAlertSpec) String() string { return proto.CompactTextString(m) } func (*ClusterAlertSpec) ProtoMessage() {} func (*ClusterAlertSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{258} + return fileDescriptor_9198ee693835762e, []int{262} } func (m *ClusterAlertSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -15401,7 +15654,7 @@ func (m *GetClusterAlertsRequest) Reset() { *m = GetClusterAlertsRequest func (m *GetClusterAlertsRequest) String() string { return proto.CompactTextString(m) } func (*GetClusterAlertsRequest) ProtoMessage() {} func (*GetClusterAlertsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{259} + return fileDescriptor_9198ee693835762e, []int{263} } func (m *GetClusterAlertsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -15451,7 +15704,7 @@ func (m *AlertAcknowledgement) Reset() { *m = AlertAcknowledgement{} } func (m *AlertAcknowledgement) String() string { return proto.CompactTextString(m) } func (*AlertAcknowledgement) ProtoMessage() {} func (*AlertAcknowledgement) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{260} + return fileDescriptor_9198ee693835762e, []int{264} } func (m *AlertAcknowledgement) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -15503,7 +15756,7 @@ func (m *Release) Reset() { *m = Release{} } func (m *Release) String() string { return proto.CompactTextString(m) } func (*Release) ProtoMessage() {} func (*Release) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{261} + return fileDescriptor_9198ee693835762e, []int{265} } func (m *Release) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -15561,7 +15814,7 @@ func (m *Asset) Reset() { *m = Asset{} } func (m *Asset) String() string { return proto.CompactTextString(m) } func (*Asset) ProtoMessage() {} func (*Asset) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{262} + return fileDescriptor_9198ee693835762e, []int{266} } func (m *Asset) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -15614,7 +15867,7 @@ func (m *PluginV1) Reset() { *m = PluginV1{} } func (m *PluginV1) String() string { return proto.CompactTextString(m) } func (*PluginV1) ProtoMessage() {} func (*PluginV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{263} + return fileDescriptor_9198ee693835762e, []int{267} } func (m *PluginV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -15681,7 +15934,7 @@ func (m *PluginSpecV1) Reset() { *m = PluginSpecV1{} } func (m *PluginSpecV1) String() string { return proto.CompactTextString(m) } func (*PluginSpecV1) ProtoMessage() {} func (*PluginSpecV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{264} + return fileDescriptor_9198ee693835762e, []int{268} } func (m *PluginSpecV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -15947,7 +16200,7 @@ func (m *PluginSlackAccessSettings) Reset() { *m = PluginSlackAccessSett func (m *PluginSlackAccessSettings) String() string { return proto.CompactTextString(m) } func (*PluginSlackAccessSettings) ProtoMessage() {} func (*PluginSlackAccessSettings) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{265} + return fileDescriptor_9198ee693835762e, []int{269} } func (m *PluginSlackAccessSettings) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -15988,7 +16241,7 @@ func (m *PluginGitlabSettings) Reset() { *m = PluginGitlabSettings{} } func (m *PluginGitlabSettings) String() string { return proto.CompactTextString(m) } func (*PluginGitlabSettings) ProtoMessage() {} func (*PluginGitlabSettings) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{266} + return fileDescriptor_9198ee693835762e, []int{270} } func (m *PluginGitlabSettings) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -16035,7 +16288,7 @@ func (m *PluginOpsgenieAccessSettings) Reset() { *m = PluginOpsgenieAcce func (m *PluginOpsgenieAccessSettings) String() string { return proto.CompactTextString(m) } func (*PluginOpsgenieAccessSettings) ProtoMessage() {} func (*PluginOpsgenieAccessSettings) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{267} + return fileDescriptor_9198ee693835762e, []int{271} } func (m *PluginOpsgenieAccessSettings) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -16083,7 +16336,7 @@ func (m *PluginServiceNowSettings) Reset() { *m = PluginServiceNowSettin func (m *PluginServiceNowSettings) String() string { return proto.CompactTextString(m) } func (*PluginServiceNowSettings) ProtoMessage() {} func (*PluginServiceNowSettings) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{268} + return fileDescriptor_9198ee693835762e, []int{272} } func (m *PluginServiceNowSettings) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -16129,7 +16382,7 @@ func (m *PluginPagerDutySettings) Reset() { *m = PluginPagerDutySettings func (m *PluginPagerDutySettings) String() string { return proto.CompactTextString(m) } func (*PluginPagerDutySettings) ProtoMessage() {} func (*PluginPagerDutySettings) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{269} + return fileDescriptor_9198ee693835762e, []int{273} } func (m *PluginPagerDutySettings) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -16175,7 +16428,7 @@ func (m *PluginJiraSettings) Reset() { *m = PluginJiraSettings{} } func (m *PluginJiraSettings) String() string { return proto.CompactTextString(m) } func (*PluginJiraSettings) ProtoMessage() {} func (*PluginJiraSettings) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{270} + return fileDescriptor_9198ee693835762e, []int{274} } func (m *PluginJiraSettings) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -16215,7 +16468,7 @@ func (m *PluginOpenAISettings) Reset() { *m = PluginOpenAISettings{} } func (m *PluginOpenAISettings) String() string { return proto.CompactTextString(m) } func (*PluginOpenAISettings) ProtoMessage() {} func (*PluginOpenAISettings) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{271} + return fileDescriptor_9198ee693835762e, []int{275} } func (m *PluginOpenAISettings) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -16266,7 +16519,7 @@ func (m *PluginMattermostSettings) Reset() { *m = PluginMattermostSettin func (m *PluginMattermostSettings) String() string { return proto.CompactTextString(m) } func (*PluginMattermostSettings) ProtoMessage() {} func (*PluginMattermostSettings) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{272} + return fileDescriptor_9198ee693835762e, []int{276} } func (m *PluginMattermostSettings) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -16308,7 +16561,7 @@ func (m *PluginJamfSettings) Reset() { *m = PluginJamfSettings{} } func (m *PluginJamfSettings) String() string { return proto.CompactTextString(m) } func (*PluginJamfSettings) ProtoMessage() {} func (*PluginJamfSettings) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{273} + return fileDescriptor_9198ee693835762e, []int{277} } func (m *PluginJamfSettings) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -16360,7 +16613,7 @@ func (m *PluginOktaSettings) Reset() { *m = PluginOktaSettings{} } func (m *PluginOktaSettings) String() string { return proto.CompactTextString(m) } func (*PluginOktaSettings) ProtoMessage() {} func (*PluginOktaSettings) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{274} + return fileDescriptor_9198ee693835762e, []int{278} } func (m *PluginOktaSettings) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -16407,7 +16660,7 @@ func (m *PluginOktaCredentialsInfo) Reset() { *m = PluginOktaCredentials func (m *PluginOktaCredentialsInfo) String() string { return proto.CompactTextString(m) } func (*PluginOktaCredentialsInfo) ProtoMessage() {} func (*PluginOktaCredentialsInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{275} + return fileDescriptor_9198ee693835762e, []int{279} } func (m *PluginOktaCredentialsInfo) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -16491,7 +16744,7 @@ func (m *PluginOktaSyncSettings) Reset() { *m = PluginOktaSyncSettings{} func (m *PluginOktaSyncSettings) String() string { return proto.CompactTextString(m) } func (*PluginOktaSyncSettings) ProtoMessage() {} func (*PluginOktaSyncSettings) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{276} + return fileDescriptor_9198ee693835762e, []int{280} } func (m *PluginOktaSyncSettings) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -16532,7 +16785,7 @@ func (m *DiscordChannels) Reset() { *m = DiscordChannels{} } func (m *DiscordChannels) String() string { return proto.CompactTextString(m) } func (*DiscordChannels) ProtoMessage() {} func (*DiscordChannels) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{277} + return fileDescriptor_9198ee693835762e, []int{281} } func (m *DiscordChannels) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -16576,7 +16829,7 @@ func (m *PluginDiscordSettings) Reset() { *m = PluginDiscordSettings{} } func (m *PluginDiscordSettings) String() string { return proto.CompactTextString(m) } func (*PluginDiscordSettings) ProtoMessage() {} func (*PluginDiscordSettings) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{278} + return fileDescriptor_9198ee693835762e, []int{282} } func (m *PluginDiscordSettings) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -16621,7 +16874,7 @@ func (m *PluginEntraIDSettings) Reset() { *m = PluginEntraIDSettings{} } func (m *PluginEntraIDSettings) String() string { return proto.CompactTextString(m) } func (*PluginEntraIDSettings) ProtoMessage() {} func (*PluginEntraIDSettings) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{279} + return fileDescriptor_9198ee693835762e, []int{283} } func (m *PluginEntraIDSettings) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -16675,7 +16928,7 @@ func (m *PluginEntraIDSyncSettings) Reset() { *m = PluginEntraIDSyncSett func (m *PluginEntraIDSyncSettings) String() string { return proto.CompactTextString(m) } func (*PluginEntraIDSyncSettings) ProtoMessage() {} func (*PluginEntraIDSyncSettings) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{280} + return fileDescriptor_9198ee693835762e, []int{284} } func (m *PluginEntraIDSyncSettings) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -16720,7 +16973,7 @@ func (m *PluginEntraIDAccessGraphSettings) Reset() { *m = PluginEntraIDA func (m *PluginEntraIDAccessGraphSettings) String() string { return proto.CompactTextString(m) } func (*PluginEntraIDAccessGraphSettings) ProtoMessage() {} func (*PluginEntraIDAccessGraphSettings) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{281} + return fileDescriptor_9198ee693835762e, []int{285} } func (m *PluginEntraIDAccessGraphSettings) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -16766,7 +17019,7 @@ func (m *PluginEntraIDAppSSOSettings) Reset() { *m = PluginEntraIDAppSSO func (m *PluginEntraIDAppSSOSettings) String() string { return proto.CompactTextString(m) } func (*PluginEntraIDAppSSOSettings) ProtoMessage() {} func (*PluginEntraIDAppSSOSettings) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{282} + return fileDescriptor_9198ee693835762e, []int{286} } func (m *PluginEntraIDAppSSOSettings) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -16812,7 +17065,7 @@ func (m *PluginSCIMSettings) Reset() { *m = PluginSCIMSettings{} } func (m *PluginSCIMSettings) String() string { return proto.CompactTextString(m) } func (*PluginSCIMSettings) ProtoMessage() {} func (*PluginSCIMSettings) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{283} + return fileDescriptor_9198ee693835762e, []int{287} } func (m *PluginSCIMSettings) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -16856,7 +17109,7 @@ func (m *PluginDatadogAccessSettings) Reset() { *m = PluginDatadogAccess func (m *PluginDatadogAccessSettings) String() string { return proto.CompactTextString(m) } func (*PluginDatadogAccessSettings) ProtoMessage() {} func (*PluginDatadogAccessSettings) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{284} + return fileDescriptor_9198ee693835762e, []int{288} } func (m *PluginDatadogAccessSettings) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -16911,7 +17164,7 @@ func (m *PluginAWSICSettings) Reset() { *m = PluginAWSICSettings{} } func (m *PluginAWSICSettings) String() string { return proto.CompactTextString(m) } func (*PluginAWSICSettings) ProtoMessage() {} func (*PluginAWSICSettings) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{285} + return fileDescriptor_9198ee693835762e, []int{289} } func (m *PluginAWSICSettings) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -16958,7 +17211,7 @@ func (m *AWSICProvisioningSpec) Reset() { *m = AWSICProvisioningSpec{} } func (m *AWSICProvisioningSpec) String() string { return proto.CompactTextString(m) } func (*AWSICProvisioningSpec) ProtoMessage() {} func (*AWSICProvisioningSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{286} + return fileDescriptor_9198ee693835762e, []int{290} } func (m *AWSICProvisioningSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -17000,7 +17253,7 @@ func (m *PluginAWSICStatusV1) Reset() { *m = PluginAWSICStatusV1{} } func (m *PluginAWSICStatusV1) String() string { return proto.CompactTextString(m) } func (*PluginAWSICStatusV1) ProtoMessage() {} func (*PluginAWSICStatusV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{287} + return fileDescriptor_9198ee693835762e, []int{291} } func (m *PluginAWSICStatusV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -17045,7 +17298,7 @@ func (m *AWSICGroupImportStatus) Reset() { *m = AWSICGroupImportStatus{} func (m *AWSICGroupImportStatus) String() string { return proto.CompactTextString(m) } func (*AWSICGroupImportStatus) ProtoMessage() {} func (*AWSICGroupImportStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{288} + return fileDescriptor_9198ee693835762e, []int{292} } func (m *AWSICGroupImportStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -17096,7 +17349,7 @@ func (m *PluginEmailSettings) Reset() { *m = PluginEmailSettings{} } func (m *PluginEmailSettings) String() string { return proto.CompactTextString(m) } func (*PluginEmailSettings) ProtoMessage() {} func (*PluginEmailSettings) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{289} + return fileDescriptor_9198ee693835762e, []int{293} } func (m *PluginEmailSettings) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -17184,7 +17437,7 @@ func (m *MailgunSpec) Reset() { *m = MailgunSpec{} } func (m *MailgunSpec) String() string { return proto.CompactTextString(m) } func (*MailgunSpec) ProtoMessage() {} func (*MailgunSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{290} + return fileDescriptor_9198ee693835762e, []int{294} } func (m *MailgunSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -17231,7 +17484,7 @@ func (m *SMTPSpec) Reset() { *m = SMTPSpec{} } func (m *SMTPSpec) String() string { return proto.CompactTextString(m) } func (*SMTPSpec) ProtoMessage() {} func (*SMTPSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{291} + return fileDescriptor_9198ee693835762e, []int{295} } func (m *SMTPSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -17281,7 +17534,7 @@ func (m *PluginMSTeamsSettings) Reset() { *m = PluginMSTeamsSettings{} } func (m *PluginMSTeamsSettings) String() string { return proto.CompactTextString(m) } func (*PluginMSTeamsSettings) ProtoMessage() {} func (*PluginMSTeamsSettings) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{292} + return fileDescriptor_9198ee693835762e, []int{296} } func (m *PluginMSTeamsSettings) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -17326,7 +17579,7 @@ func (m *PluginBootstrapCredentialsV1) Reset() { *m = PluginBootstrapCre func (m *PluginBootstrapCredentialsV1) String() string { return proto.CompactTextString(m) } func (*PluginBootstrapCredentialsV1) ProtoMessage() {} func (*PluginBootstrapCredentialsV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{293} + return fileDescriptor_9198ee693835762e, []int{297} } func (m *PluginBootstrapCredentialsV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -17426,7 +17679,7 @@ func (m *PluginIdSecretCredential) Reset() { *m = PluginIdSecretCredenti func (m *PluginIdSecretCredential) String() string { return proto.CompactTextString(m) } func (*PluginIdSecretCredential) ProtoMessage() {} func (*PluginIdSecretCredential) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{294} + return fileDescriptor_9198ee693835762e, []int{298} } func (m *PluginIdSecretCredential) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -17469,7 +17722,7 @@ func (m *PluginOAuth2AuthorizationCodeCredentials) Reset() { func (m *PluginOAuth2AuthorizationCodeCredentials) String() string { return proto.CompactTextString(m) } func (*PluginOAuth2AuthorizationCodeCredentials) ProtoMessage() {} func (*PluginOAuth2AuthorizationCodeCredentials) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{295} + return fileDescriptor_9198ee693835762e, []int{299} } func (m *PluginOAuth2AuthorizationCodeCredentials) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -17528,7 +17781,7 @@ func (m *PluginStatusV1) Reset() { *m = PluginStatusV1{} } func (m *PluginStatusV1) String() string { return proto.CompactTextString(m) } func (*PluginStatusV1) ProtoMessage() {} func (*PluginStatusV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{296} + return fileDescriptor_9198ee693835762e, []int{300} } func (m *PluginStatusV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -17643,7 +17896,7 @@ func (m *PluginGitlabStatusV1) Reset() { *m = PluginGitlabStatusV1{} } func (m *PluginGitlabStatusV1) String() string { return proto.CompactTextString(m) } func (*PluginGitlabStatusV1) ProtoMessage() {} func (*PluginGitlabStatusV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{297} + return fileDescriptor_9198ee693835762e, []int{301} } func (m *PluginGitlabStatusV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -17687,7 +17940,7 @@ func (m *PluginEntraIDStatusV1) Reset() { *m = PluginEntraIDStatusV1{} } func (m *PluginEntraIDStatusV1) String() string { return proto.CompactTextString(m) } func (*PluginEntraIDStatusV1) ProtoMessage() {} func (*PluginEntraIDStatusV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{298} + return fileDescriptor_9198ee693835762e, []int{302} } func (m *PluginEntraIDStatusV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -17741,7 +17994,7 @@ func (m *PluginOktaStatusV1) Reset() { *m = PluginOktaStatusV1{} } func (m *PluginOktaStatusV1) String() string { return proto.CompactTextString(m) } func (*PluginOktaStatusV1) ProtoMessage() {} func (*PluginOktaStatusV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{299} + return fileDescriptor_9198ee693835762e, []int{303} } func (m *PluginOktaStatusV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -17789,7 +18042,7 @@ func (m *PluginOktaStatusDetailsSSO) Reset() { *m = PluginOktaStatusDeta func (m *PluginOktaStatusDetailsSSO) String() string { return proto.CompactTextString(m) } func (*PluginOktaStatusDetailsSSO) ProtoMessage() {} func (*PluginOktaStatusDetailsSSO) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{300} + return fileDescriptor_9198ee693835762e, []int{304} } func (m *PluginOktaStatusDetailsSSO) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -17846,7 +18099,7 @@ func (m *PluginOktaStatusDetailsAppGroupSync) Reset() { *m = PluginOktaS func (m *PluginOktaStatusDetailsAppGroupSync) String() string { return proto.CompactTextString(m) } func (*PluginOktaStatusDetailsAppGroupSync) ProtoMessage() {} func (*PluginOktaStatusDetailsAppGroupSync) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{301} + return fileDescriptor_9198ee693835762e, []int{305} } func (m *PluginOktaStatusDetailsAppGroupSync) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -17900,7 +18153,7 @@ func (m *PluginOktaStatusDetailsUsersSync) Reset() { *m = PluginOktaStat func (m *PluginOktaStatusDetailsUsersSync) String() string { return proto.CompactTextString(m) } func (*PluginOktaStatusDetailsUsersSync) ProtoMessage() {} func (*PluginOktaStatusDetailsUsersSync) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{302} + return fileDescriptor_9198ee693835762e, []int{306} } func (m *PluginOktaStatusDetailsUsersSync) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -17943,7 +18196,7 @@ func (m *PluginOktaStatusDetailsSCIM) Reset() { *m = PluginOktaStatusDet func (m *PluginOktaStatusDetailsSCIM) String() string { return proto.CompactTextString(m) } func (*PluginOktaStatusDetailsSCIM) ProtoMessage() {} func (*PluginOktaStatusDetailsSCIM) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{303} + return fileDescriptor_9198ee693835762e, []int{307} } func (m *PluginOktaStatusDetailsSCIM) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -18005,7 +18258,7 @@ func (m *PluginOktaStatusDetailsAccessListsSync) Reset() { func (m *PluginOktaStatusDetailsAccessListsSync) String() string { return proto.CompactTextString(m) } func (*PluginOktaStatusDetailsAccessListsSync) ProtoMessage() {} func (*PluginOktaStatusDetailsAccessListsSync) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{304} + return fileDescriptor_9198ee693835762e, []int{308} } func (m *PluginOktaStatusDetailsAccessListsSync) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -18053,7 +18306,7 @@ func (m *PluginCredentialsV1) Reset() { *m = PluginCredentialsV1{} } func (m *PluginCredentialsV1) String() string { return proto.CompactTextString(m) } func (*PluginCredentialsV1) ProtoMessage() {} func (*PluginCredentialsV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{305} + return fileDescriptor_9198ee693835762e, []int{309} } func (m *PluginCredentialsV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -18164,7 +18417,7 @@ func (m *PluginOAuth2AccessTokenCredentials) Reset() { *m = PluginOAuth2 func (m *PluginOAuth2AccessTokenCredentials) String() string { return proto.CompactTextString(m) } func (*PluginOAuth2AccessTokenCredentials) ProtoMessage() {} func (*PluginOAuth2AccessTokenCredentials) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{306} + return fileDescriptor_9198ee693835762e, []int{310} } func (m *PluginOAuth2AccessTokenCredentials) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -18205,7 +18458,7 @@ func (m *PluginBearerTokenCredentials) Reset() { *m = PluginBearerTokenC func (m *PluginBearerTokenCredentials) String() string { return proto.CompactTextString(m) } func (*PluginBearerTokenCredentials) ProtoMessage() {} func (*PluginBearerTokenCredentials) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{307} + return fileDescriptor_9198ee693835762e, []int{311} } func (m *PluginBearerTokenCredentials) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -18247,7 +18500,7 @@ func (m *PluginStaticCredentialsRef) Reset() { *m = PluginStaticCredenti func (m *PluginStaticCredentialsRef) String() string { return proto.CompactTextString(m) } func (*PluginStaticCredentialsRef) ProtoMessage() {} func (*PluginStaticCredentialsRef) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{308} + return fileDescriptor_9198ee693835762e, []int{312} } func (m *PluginStaticCredentialsRef) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -18289,7 +18542,7 @@ func (m *PluginListV1) Reset() { *m = PluginListV1{} } func (m *PluginListV1) String() string { return proto.CompactTextString(m) } func (*PluginListV1) ProtoMessage() {} func (*PluginListV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{309} + return fileDescriptor_9198ee693835762e, []int{313} } func (m *PluginListV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -18332,7 +18585,7 @@ type PluginStaticCredentialsV1 struct { func (m *PluginStaticCredentialsV1) Reset() { *m = PluginStaticCredentialsV1{} } func (*PluginStaticCredentialsV1) ProtoMessage() {} func (*PluginStaticCredentialsV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{310} + return fileDescriptor_9198ee693835762e, []int{314} } func (m *PluginStaticCredentialsV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -18378,7 +18631,7 @@ func (m *PluginStaticCredentialsSpecV1) Reset() { *m = PluginStaticCrede func (m *PluginStaticCredentialsSpecV1) String() string { return proto.CompactTextString(m) } func (*PluginStaticCredentialsSpecV1) ProtoMessage() {} func (*PluginStaticCredentialsSpecV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{311} + return fileDescriptor_9198ee693835762e, []int{315} } func (m *PluginStaticCredentialsSpecV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -18480,7 +18733,7 @@ func (m *PluginStaticCredentialsBasicAuth) Reset() { *m = PluginStaticCr func (m *PluginStaticCredentialsBasicAuth) String() string { return proto.CompactTextString(m) } func (*PluginStaticCredentialsBasicAuth) ProtoMessage() {} func (*PluginStaticCredentialsBasicAuth) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{312} + return fileDescriptor_9198ee693835762e, []int{316} } func (m *PluginStaticCredentialsBasicAuth) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -18526,7 +18779,7 @@ func (m *PluginStaticCredentialsOAuthClientSecret) Reset() { func (m *PluginStaticCredentialsOAuthClientSecret) String() string { return proto.CompactTextString(m) } func (*PluginStaticCredentialsOAuthClientSecret) ProtoMessage() {} func (*PluginStaticCredentialsOAuthClientSecret) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{313} + return fileDescriptor_9198ee693835762e, []int{317} } func (m *PluginStaticCredentialsOAuthClientSecret) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -18569,7 +18822,7 @@ type SAMLIdPServiceProviderV1 struct { func (m *SAMLIdPServiceProviderV1) Reset() { *m = SAMLIdPServiceProviderV1{} } func (*SAMLIdPServiceProviderV1) ProtoMessage() {} func (*SAMLIdPServiceProviderV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{314} + return fileDescriptor_9198ee693835762e, []int{318} } func (m *SAMLIdPServiceProviderV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -18640,7 +18893,7 @@ func (m *SAMLIdPServiceProviderSpecV1) Reset() { *m = SAMLIdPServiceProv func (m *SAMLIdPServiceProviderSpecV1) String() string { return proto.CompactTextString(m) } func (*SAMLIdPServiceProviderSpecV1) ProtoMessage() {} func (*SAMLIdPServiceProviderSpecV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{315} + return fileDescriptor_9198ee693835762e, []int{319} } func (m *SAMLIdPServiceProviderSpecV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -18687,7 +18940,7 @@ func (m *SAMLAttributeMapping) Reset() { *m = SAMLAttributeMapping{} } func (m *SAMLAttributeMapping) String() string { return proto.CompactTextString(m) } func (*SAMLAttributeMapping) ProtoMessage() {} func (*SAMLAttributeMapping) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{316} + return fileDescriptor_9198ee693835762e, []int{320} } func (m *SAMLAttributeMapping) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -18729,7 +18982,7 @@ func (m *IdPOptions) Reset() { *m = IdPOptions{} } func (m *IdPOptions) String() string { return proto.CompactTextString(m) } func (*IdPOptions) ProtoMessage() {} func (*IdPOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{317} + return fileDescriptor_9198ee693835762e, []int{321} } func (m *IdPOptions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -18771,7 +19024,7 @@ func (m *IdPSAMLOptions) Reset() { *m = IdPSAMLOptions{} } func (m *IdPSAMLOptions) String() string { return proto.CompactTextString(m) } func (*IdPSAMLOptions) ProtoMessage() {} func (*IdPSAMLOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{318} + return fileDescriptor_9198ee693835762e, []int{322} } func (m *IdPSAMLOptions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -18821,7 +19074,7 @@ func (m *KubernetesResourceV1) Reset() { *m = KubernetesResourceV1{} } func (m *KubernetesResourceV1) String() string { return proto.CompactTextString(m) } func (*KubernetesResourceV1) ProtoMessage() {} func (*KubernetesResourceV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{319} + return fileDescriptor_9198ee693835762e, []int{323} } func (m *KubernetesResourceV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -18863,7 +19116,7 @@ func (m *KubernetesResourceSpecV1) Reset() { *m = KubernetesResourceSpec func (m *KubernetesResourceSpecV1) String() string { return proto.CompactTextString(m) } func (*KubernetesResourceSpecV1) ProtoMessage() {} func (*KubernetesResourceSpecV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{320} + return fileDescriptor_9198ee693835762e, []int{324} } func (m *KubernetesResourceSpecV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -18909,7 +19162,7 @@ func (m *ClusterMaintenanceConfigV1) Reset() { *m = ClusterMaintenanceCo func (m *ClusterMaintenanceConfigV1) String() string { return proto.CompactTextString(m) } func (*ClusterMaintenanceConfigV1) ProtoMessage() {} func (*ClusterMaintenanceConfigV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{321} + return fileDescriptor_9198ee693835762e, []int{325} } func (m *ClusterMaintenanceConfigV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -18951,7 +19204,7 @@ func (m *ClusterMaintenanceConfigSpecV1) Reset() { *m = ClusterMaintenan func (m *ClusterMaintenanceConfigSpecV1) String() string { return proto.CompactTextString(m) } func (*ClusterMaintenanceConfigSpecV1) ProtoMessage() {} func (*ClusterMaintenanceConfigSpecV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{322} + return fileDescriptor_9198ee693835762e, []int{326} } func (m *ClusterMaintenanceConfigSpecV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -18997,7 +19250,7 @@ func (m *AgentUpgradeWindow) Reset() { *m = AgentUpgradeWindow{} } func (m *AgentUpgradeWindow) String() string { return proto.CompactTextString(m) } func (*AgentUpgradeWindow) ProtoMessage() {} func (*AgentUpgradeWindow) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{323} + return fileDescriptor_9198ee693835762e, []int{327} } func (m *AgentUpgradeWindow) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -19044,7 +19297,7 @@ func (m *ScheduledAgentUpgradeWindow) Reset() { *m = ScheduledAgentUpgra func (m *ScheduledAgentUpgradeWindow) String() string { return proto.CompactTextString(m) } func (*ScheduledAgentUpgradeWindow) ProtoMessage() {} func (*ScheduledAgentUpgradeWindow) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{324} + return fileDescriptor_9198ee693835762e, []int{328} } func (m *ScheduledAgentUpgradeWindow) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -19087,7 +19340,7 @@ func (m *AgentUpgradeSchedule) Reset() { *m = AgentUpgradeSchedule{} } func (m *AgentUpgradeSchedule) String() string { return proto.CompactTextString(m) } func (*AgentUpgradeSchedule) ProtoMessage() {} func (*AgentUpgradeSchedule) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{325} + return fileDescriptor_9198ee693835762e, []int{329} } func (m *AgentUpgradeSchedule) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -19130,7 +19383,7 @@ type UserGroupV1 struct { func (m *UserGroupV1) Reset() { *m = UserGroupV1{} } func (*UserGroupV1) ProtoMessage() {} func (*UserGroupV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{326} + return fileDescriptor_9198ee693835762e, []int{330} } func (m *UserGroupV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -19172,7 +19425,7 @@ func (m *UserGroupSpecV1) Reset() { *m = UserGroupSpecV1{} } func (m *UserGroupSpecV1) String() string { return proto.CompactTextString(m) } func (*UserGroupSpecV1) ProtoMessage() {} func (*UserGroupSpecV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{327} + return fileDescriptor_9198ee693835762e, []int{331} } func (m *UserGroupSpecV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -19216,7 +19469,7 @@ func (m *OktaImportRuleSpecV1) Reset() { *m = OktaImportRuleSpecV1{} } func (m *OktaImportRuleSpecV1) String() string { return proto.CompactTextString(m) } func (*OktaImportRuleSpecV1) ProtoMessage() {} func (*OktaImportRuleSpecV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{328} + return fileDescriptor_9198ee693835762e, []int{332} } func (m *OktaImportRuleSpecV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -19260,7 +19513,7 @@ func (m *OktaImportRuleMappingV1) Reset() { *m = OktaImportRuleMappingV1 func (m *OktaImportRuleMappingV1) String() string { return proto.CompactTextString(m) } func (*OktaImportRuleMappingV1) ProtoMessage() {} func (*OktaImportRuleMappingV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{329} + return fileDescriptor_9198ee693835762e, []int{333} } func (m *OktaImportRuleMappingV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -19303,7 +19556,7 @@ type OktaImportRuleV1 struct { func (m *OktaImportRuleV1) Reset() { *m = OktaImportRuleV1{} } func (*OktaImportRuleV1) ProtoMessage() {} func (*OktaImportRuleV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{330} + return fileDescriptor_9198ee693835762e, []int{334} } func (m *OktaImportRuleV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -19351,7 +19604,7 @@ func (m *OktaImportRuleMatchV1) Reset() { *m = OktaImportRuleMatchV1{} } func (m *OktaImportRuleMatchV1) String() string { return proto.CompactTextString(m) } func (*OktaImportRuleMatchV1) ProtoMessage() {} func (*OktaImportRuleMatchV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{331} + return fileDescriptor_9198ee693835762e, []int{335} } func (m *OktaImportRuleMatchV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -19394,7 +19647,7 @@ type OktaAssignmentV1 struct { func (m *OktaAssignmentV1) Reset() { *m = OktaAssignmentV1{} } func (*OktaAssignmentV1) ProtoMessage() {} func (*OktaAssignmentV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{332} + return fileDescriptor_9198ee693835762e, []int{336} } func (m *OktaAssignmentV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -19448,7 +19701,7 @@ func (m *OktaAssignmentSpecV1) Reset() { *m = OktaAssignmentSpecV1{} } func (m *OktaAssignmentSpecV1) String() string { return proto.CompactTextString(m) } func (*OktaAssignmentSpecV1) ProtoMessage() {} func (*OktaAssignmentSpecV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{333} + return fileDescriptor_9198ee693835762e, []int{337} } func (m *OktaAssignmentSpecV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -19492,7 +19745,7 @@ func (m *OktaAssignmentTargetV1) Reset() { *m = OktaAssignmentTargetV1{} func (m *OktaAssignmentTargetV1) String() string { return proto.CompactTextString(m) } func (*OktaAssignmentTargetV1) ProtoMessage() {} func (*OktaAssignmentTargetV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{334} + return fileDescriptor_9198ee693835762e, []int{338} } func (m *OktaAssignmentTargetV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -19537,7 +19790,7 @@ type IntegrationV1 struct { func (m *IntegrationV1) Reset() { *m = IntegrationV1{} } func (*IntegrationV1) ProtoMessage() {} func (*IntegrationV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{335} + return fileDescriptor_9198ee693835762e, []int{339} } func (m *IntegrationV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -19582,7 +19835,7 @@ func (m *IntegrationSpecV1) Reset() { *m = IntegrationSpecV1{} } func (m *IntegrationSpecV1) String() string { return proto.CompactTextString(m) } func (*IntegrationSpecV1) ProtoMessage() {} func (*IntegrationSpecV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{336} + return fileDescriptor_9198ee693835762e, []int{340} } func (m *IntegrationSpecV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -19689,7 +19942,7 @@ func (m *AWSOIDCIntegrationSpecV1) Reset() { *m = AWSOIDCIntegrationSpec func (m *AWSOIDCIntegrationSpecV1) String() string { return proto.CompactTextString(m) } func (*AWSOIDCIntegrationSpecV1) ProtoMessage() {} func (*AWSOIDCIntegrationSpecV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{337} + return fileDescriptor_9198ee693835762e, []int{341} } func (m *AWSOIDCIntegrationSpecV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -19735,7 +19988,7 @@ func (m *AzureOIDCIntegrationSpecV1) Reset() { *m = AzureOIDCIntegration func (m *AzureOIDCIntegrationSpecV1) String() string { return proto.CompactTextString(m) } func (*AzureOIDCIntegrationSpecV1) ProtoMessage() {} func (*AzureOIDCIntegrationSpecV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{338} + return fileDescriptor_9198ee693835762e, []int{342} } func (m *AzureOIDCIntegrationSpecV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -19796,7 +20049,7 @@ func (m *HeadlessAuthentication) Reset() { *m = HeadlessAuthentication{} func (m *HeadlessAuthentication) String() string { return proto.CompactTextString(m) } func (*HeadlessAuthentication) ProtoMessage() {} func (*HeadlessAuthentication) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{339} + return fileDescriptor_9198ee693835762e, []int{343} } func (m *HeadlessAuthentication) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -19853,7 +20106,7 @@ func (m *WatchKind) Reset() { *m = WatchKind{} } func (m *WatchKind) String() string { return proto.CompactTextString(m) } func (*WatchKind) ProtoMessage() {} func (*WatchKind) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{340} + return fileDescriptor_9198ee693835762e, []int{344} } func (m *WatchKind) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -19903,7 +20156,7 @@ func (m *WatchStatusV1) Reset() { *m = WatchStatusV1{} } func (m *WatchStatusV1) String() string { return proto.CompactTextString(m) } func (*WatchStatusV1) ProtoMessage() {} func (*WatchStatusV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{341} + return fileDescriptor_9198ee693835762e, []int{345} } func (m *WatchStatusV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -19944,7 +20197,7 @@ func (m *WatchStatusSpecV1) Reset() { *m = WatchStatusSpecV1{} } func (m *WatchStatusSpecV1) String() string { return proto.CompactTextString(m) } func (*WatchStatusSpecV1) ProtoMessage() {} func (*WatchStatusSpecV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{342} + return fileDescriptor_9198ee693835762e, []int{346} } func (m *WatchStatusSpecV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -19994,7 +20247,7 @@ func (m *ServerInfoV1) Reset() { *m = ServerInfoV1{} } func (m *ServerInfoV1) String() string { return proto.CompactTextString(m) } func (*ServerInfoV1) ProtoMessage() {} func (*ServerInfoV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{343} + return fileDescriptor_9198ee693835762e, []int{347} } func (m *ServerInfoV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -20036,7 +20289,7 @@ func (m *ServerInfoSpecV1) Reset() { *m = ServerInfoSpecV1{} } func (m *ServerInfoSpecV1) String() string { return proto.CompactTextString(m) } func (*ServerInfoSpecV1) ProtoMessage() {} func (*ServerInfoSpecV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{344} + return fileDescriptor_9198ee693835762e, []int{348} } func (m *ServerInfoSpecV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -20093,7 +20346,7 @@ func (m *JamfSpecV1) Reset() { *m = JamfSpecV1{} } func (m *JamfSpecV1) String() string { return proto.CompactTextString(m) } func (*JamfSpecV1) ProtoMessage() {} func (*JamfSpecV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{345} + return fileDescriptor_9198ee693835762e, []int{349} } func (m *JamfSpecV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -20158,7 +20411,7 @@ func (m *JamfInventoryEntry) Reset() { *m = JamfInventoryEntry{} } func (m *JamfInventoryEntry) String() string { return proto.CompactTextString(m) } func (*JamfInventoryEntry) ProtoMessage() {} func (*JamfInventoryEntry) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{346} + return fileDescriptor_9198ee693835762e, []int{350} } func (m *JamfInventoryEntry) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -20215,7 +20468,7 @@ type MessageWithHeader struct { func (m *MessageWithHeader) Reset() { *m = MessageWithHeader{} } func (*MessageWithHeader) ProtoMessage() {} func (*MessageWithHeader) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{347} + return fileDescriptor_9198ee693835762e, []int{351} } func (m *MessageWithHeader) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -20279,7 +20532,7 @@ func (m *AWSMatcher) Reset() { *m = AWSMatcher{} } func (m *AWSMatcher) String() string { return proto.CompactTextString(m) } func (*AWSMatcher) ProtoMessage() {} func (*AWSMatcher) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{348} + return fileDescriptor_9198ee693835762e, []int{352} } func (m *AWSMatcher) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -20324,7 +20577,7 @@ func (m *AssumeRole) Reset() { *m = AssumeRole{} } func (m *AssumeRole) String() string { return proto.CompactTextString(m) } func (*AssumeRole) ProtoMessage() {} func (*AssumeRole) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{349} + return fileDescriptor_9198ee693835762e, []int{353} } func (m *AssumeRole) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -20386,7 +20639,7 @@ func (m *InstallerParams) Reset() { *m = InstallerParams{} } func (m *InstallerParams) String() string { return proto.CompactTextString(m) } func (*InstallerParams) ProtoMessage() {} func (*InstallerParams) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{350} + return fileDescriptor_9198ee693835762e, []int{354} } func (m *InstallerParams) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -20429,7 +20682,7 @@ func (m *AWSSSM) Reset() { *m = AWSSSM{} } func (m *AWSSSM) String() string { return proto.CompactTextString(m) } func (*AWSSSM) ProtoMessage() {} func (*AWSSSM) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{351} + return fileDescriptor_9198ee693835762e, []int{355} } func (m *AWSSSM) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -20472,7 +20725,7 @@ func (m *AzureInstallerParams) Reset() { *m = AzureInstallerParams{} } func (m *AzureInstallerParams) String() string { return proto.CompactTextString(m) } func (*AzureInstallerParams) ProtoMessage() {} func (*AzureInstallerParams) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{352} + return fileDescriptor_9198ee693835762e, []int{356} } func (m *AzureInstallerParams) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -20526,7 +20779,7 @@ func (m *AzureMatcher) Reset() { *m = AzureMatcher{} } func (m *AzureMatcher) String() string { return proto.CompactTextString(m) } func (*AzureMatcher) ProtoMessage() {} func (*AzureMatcher) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{353} + return fileDescriptor_9198ee693835762e, []int{357} } func (m *AzureMatcher) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -20581,7 +20834,7 @@ func (m *GCPMatcher) Reset() { *m = GCPMatcher{} } func (m *GCPMatcher) String() string { return proto.CompactTextString(m) } func (*GCPMatcher) ProtoMessage() {} func (*GCPMatcher) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{354} + return fileDescriptor_9198ee693835762e, []int{358} } func (m *GCPMatcher) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -20627,7 +20880,7 @@ func (m *KubernetesMatcher) Reset() { *m = KubernetesMatcher{} } func (m *KubernetesMatcher) String() string { return proto.CompactTextString(m) } func (*KubernetesMatcher) ProtoMessage() {} func (*KubernetesMatcher) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{355} + return fileDescriptor_9198ee693835762e, []int{359} } func (m *KubernetesMatcher) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -20669,7 +20922,7 @@ func (m *OktaOptions) Reset() { *m = OktaOptions{} } func (m *OktaOptions) String() string { return proto.CompactTextString(m) } func (*OktaOptions) ProtoMessage() {} func (*OktaOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{356} + return fileDescriptor_9198ee693835762e, []int{360} } func (m *OktaOptions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -20713,7 +20966,7 @@ func (m *AccessGraphSync) Reset() { *m = AccessGraphSync{} } func (m *AccessGraphSync) String() string { return proto.CompactTextString(m) } func (*AccessGraphSync) ProtoMessage() {} func (*AccessGraphSync) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{357} + return fileDescriptor_9198ee693835762e, []int{361} } func (m *AccessGraphSync) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -20759,7 +21012,7 @@ func (m *AccessGraphAWSSync) Reset() { *m = AccessGraphAWSSync{} } func (m *AccessGraphAWSSync) String() string { return proto.CompactTextString(m) } func (*AccessGraphAWSSync) ProtoMessage() {} func (*AccessGraphAWSSync) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{358} + return fileDescriptor_9198ee693835762e, []int{362} } func (m *AccessGraphAWSSync) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -20871,6 +21124,8 @@ func init() { proto.RegisterType((*AppV3List)(nil), "types.AppV3List") proto.RegisterType((*AppV3)(nil), "types.AppV3") proto.RegisterType((*CORSPolicy)(nil), "types.CORSPolicy") + proto.RegisterType((*IdentityCenterPermissionSet)(nil), "types.IdentityCenterPermissionSet") + proto.RegisterType((*AppIdentityCenter)(nil), "types.AppIdentityCenter") proto.RegisterType((*AppSpecV3)(nil), "types.AppSpecV3") proto.RegisterMapType((map[string]CommandLabelV2)(nil), "types.AppSpecV3.DynamicLabelsEntry") proto.RegisterType((*AppServerOrSAMLIdPServiceProviderV1)(nil), "types.AppServerOrSAMLIdPServiceProviderV1") @@ -20909,6 +21164,8 @@ func init() { proto.RegisterType((*ProvisionTokenSpecV2GCP_Rule)(nil), "types.ProvisionTokenSpecV2GCP.Rule") proto.RegisterType((*ProvisionTokenSpecV2TerraformCloud)(nil), "types.ProvisionTokenSpecV2TerraformCloud") proto.RegisterType((*ProvisionTokenSpecV2TerraformCloud_Rule)(nil), "types.ProvisionTokenSpecV2TerraformCloud.Rule") + proto.RegisterType((*ProvisionTokenSpecV2Bitbucket)(nil), "types.ProvisionTokenSpecV2Bitbucket") + proto.RegisterType((*ProvisionTokenSpecV2Bitbucket_Rule)(nil), "types.ProvisionTokenSpecV2Bitbucket.Rule") proto.RegisterType((*StaticTokensV2)(nil), "types.StaticTokensV2") proto.RegisterType((*StaticTokensSpecV2)(nil), "types.StaticTokensSpecV2") proto.RegisterType((*ClusterNameV2)(nil), "types.ClusterNameV2") @@ -20972,6 +21229,7 @@ func init() { proto.RegisterType((*SessionRequirePolicy)(nil), "types.SessionRequirePolicy") proto.RegisterType((*SessionJoinPolicy)(nil), "types.SessionJoinPolicy") proto.RegisterType((*AccessRequestConditions)(nil), "types.AccessRequestConditions") + proto.RegisterType((*AccessRequestConditionsReason)(nil), "types.AccessRequestConditionsReason") proto.RegisterType((*AccessReviewConditions)(nil), "types.AccessReviewConditions") proto.RegisterType((*AccessRequestAllowedPromotion)(nil), "types.AccessRequestAllowedPromotion") proto.RegisterType((*AccessRequestAllowedPromotions)(nil), "types.AccessRequestAllowedPromotions") @@ -21217,1849 +21475,1868 @@ func init() { func init() { proto.RegisterFile("teleport/legacy/types/types.proto", fileDescriptor_9198ee693835762e) } var fileDescriptor_9198ee693835762e = []byte{ - // 29457 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0xbd, 0x6b, 0x70, 0x1c, 0x49, - 0x7a, 0x20, 0x36, 0xdd, 0x8d, 0x47, 0xe3, 0xc3, 0xab, 0x91, 0x00, 0x49, 0x90, 0x33, 0x9c, 0xe6, - 0xd4, 0xcc, 0x70, 0x38, 0xb3, 0x33, 0xe4, 0x12, 0xdc, 0xe1, 0xee, 0xec, 0xbc, 0xb6, 0xd1, 0x00, - 0xc9, 0x26, 0x41, 0x12, 0x5b, 0x0d, 0x92, 0x3b, 0xda, 0x47, 0x6d, 0xa1, 0x3b, 0x01, 0xd4, 0xa0, - 0xbb, 0xab, 0xb7, 0xaa, 0x9a, 0x24, 0x76, 0x4f, 0x3e, 0x3d, 0x4f, 0x56, 0xc8, 0x7a, 0x9d, 0xa5, - 0xd3, 0x9e, 0x43, 0x27, 0x2b, 0x64, 0x9f, 0xad, 0x38, 0xc7, 0x29, 0x6c, 0xc9, 0x17, 0x7e, 0x28, - 0xac, 0x93, 0x2e, 0x14, 0xb2, 0x42, 0xe1, 0x38, 0x29, 0x6c, 0xf9, 0xb5, 0x56, 0x40, 0x96, 0xe5, - 0x1f, 0x36, 0x22, 0x1c, 0x21, 0xf9, 0xc2, 0x76, 0x78, 0x2f, 0x74, 0x77, 0x91, 0x5f, 0x7e, 0x59, - 0x95, 0x59, 0x5d, 0x0d, 0x34, 0x66, 0xb8, 0x3a, 0x71, 0x43, 0x7f, 0x48, 0xf4, 0x97, 0xdf, 0xf7, - 0x65, 0x56, 0x3e, 0xbf, 0xfc, 0xf2, 0x7b, 0xc0, 0x0b, 0x11, 0x6f, 0xf1, 0xae, 0x1f, 0x44, 0x97, - 0x5a, 0x7c, 0xdb, 0x6d, 0xec, 0x5d, 0x8a, 0xf6, 0xba, 0x3c, 0x94, 0xff, 0x5e, 0xec, 0x06, 0x7e, - 0xe4, 0xb3, 0x51, 0xfc, 0x71, 0x66, 0x61, 0xdb, 0xdf, 0xf6, 0x11, 0x72, 0x49, 0xfc, 0x25, 0x0b, - 0xcf, 0x3c, 0xbf, 0xed, 0xfb, 0xdb, 0x2d, 0x7e, 0x09, 0x7f, 0x6d, 0xf6, 0xb6, 0x2e, 0x35, 0x7b, - 0x81, 0x1b, 0x79, 0x7e, 0x87, 0xca, 0xcb, 0xe9, 0xf2, 0xc8, 0x6b, 0xf3, 0x30, 0x72, 0xdb, 0xdd, - 0x41, 0x0c, 0x1e, 0x05, 0x6e, 0xb7, 0xcb, 0x03, 0xaa, 0xfd, 0xcc, 0xab, 0x71, 0x03, 0xdd, 0x28, - 0x12, 0x94, 0x82, 0xf9, 0xa5, 0x87, 0x97, 0xf5, 0x9f, 0x84, 0xfa, 0x46, 0xf6, 0xb7, 0x28, 0x86, - 0x29, 0xce, 0xd6, 0x2f, 0x14, 0x60, 0xe2, 0x16, 0xe7, 0xdd, 0x4a, 0xcb, 0x7b, 0xc8, 0xd9, 0x8b, - 0x30, 0x72, 0xc7, 0x6d, 0xf3, 0xc5, 0xdc, 0xb9, 0xdc, 0x85, 0x89, 0xe5, 0xd9, 0x83, 0xfd, 0xf2, - 0x64, 0xc8, 0x83, 0x87, 0x3c, 0x70, 0x3a, 0x6e, 0x9b, 0xdb, 0x58, 0xc8, 0x3e, 0x01, 0x13, 0xe2, - 0xff, 0xb0, 0xeb, 0x36, 0xf8, 0x62, 0x1e, 0x31, 0xa7, 0x0f, 0xf6, 0xcb, 0x13, 0x1d, 0x05, 0xb4, - 0x93, 0x72, 0x56, 0x83, 0xf1, 0xd5, 0xc7, 0x5d, 0x2f, 0xe0, 0xe1, 0xe2, 0xc8, 0xb9, 0xdc, 0x85, - 0xc9, 0xa5, 0x33, 0x17, 0xe5, 0xb7, 0x5e, 0x54, 0xdf, 0x7a, 0x71, 0x43, 0x75, 0xc6, 0xf2, 0xfc, - 0xef, 0xee, 0x97, 0x9f, 0x39, 0xd8, 0x2f, 0x8f, 0x73, 0x49, 0xf2, 0x53, 0x7f, 0x5c, 0xce, 0xd9, - 0x8a, 0x9e, 0xbd, 0x03, 0x23, 0x1b, 0x7b, 0x5d, 0xbe, 0x38, 0x71, 0x2e, 0x77, 0x61, 0x66, 0xe9, - 0xf9, 0x8b, 0x72, 0x78, 0xe2, 0xc6, 0x27, 0x7f, 0x09, 0xac, 0xe5, 0xe2, 0xc1, 0x7e, 0x79, 0x44, - 0xa0, 0xd8, 0x48, 0xc5, 0xde, 0x80, 0xb1, 0x1b, 0x7e, 0x18, 0xd5, 0x56, 0x16, 0x01, 0x9b, 0x7c, - 0xe2, 0x60, 0xbf, 0x3c, 0xb7, 0xe3, 0x87, 0x91, 0xe3, 0x35, 0x5f, 0xf7, 0xdb, 0x5e, 0xc4, 0xdb, - 0xdd, 0x68, 0xcf, 0x26, 0x24, 0xeb, 0x31, 0x4c, 0x1b, 0xfc, 0xd8, 0x24, 0x8c, 0xdf, 0xbb, 0x73, - 0xeb, 0xce, 0xdd, 0x07, 0x77, 0x4a, 0xcf, 0xb0, 0x22, 0x8c, 0xdc, 0xb9, 0xbb, 0xb2, 0x5a, 0xca, - 0xb1, 0x71, 0x28, 0x54, 0xd6, 0xd7, 0x4b, 0x79, 0x36, 0x05, 0xc5, 0x95, 0xca, 0x46, 0x65, 0xb9, - 0x52, 0x5f, 0x2d, 0x15, 0xd8, 0x3c, 0xcc, 0x3e, 0xa8, 0xdd, 0x59, 0xb9, 0xfb, 0xa0, 0xee, 0xac, - 0xac, 0xd6, 0x6f, 0x6d, 0xdc, 0x5d, 0x2f, 0x8d, 0xb0, 0x19, 0x80, 0x5b, 0xf7, 0x96, 0x57, 0xed, - 0x3b, 0xab, 0x1b, 0xab, 0xf5, 0xd2, 0x28, 0x5b, 0x80, 0x92, 0x22, 0x71, 0xea, 0xab, 0xf6, 0xfd, - 0x5a, 0x75, 0xb5, 0x34, 0x76, 0x73, 0xa4, 0x58, 0x28, 0x8d, 0xd8, 0xe3, 0x6b, 0xdc, 0x0d, 0x79, - 0x6d, 0xc5, 0xfa, 0xf7, 0x0a, 0x50, 0xbc, 0xcd, 0x23, 0xb7, 0xe9, 0x46, 0x2e, 0x7b, 0xce, 0x18, - 0x1f, 0xfc, 0x44, 0x6d, 0x60, 0x5e, 0xec, 0x1f, 0x98, 0xd1, 0x83, 0xfd, 0x72, 0xee, 0x0d, 0x7d, - 0x40, 0xde, 0x86, 0xc9, 0x15, 0x1e, 0x36, 0x02, 0xaf, 0x2b, 0x26, 0xcd, 0x62, 0x01, 0xd1, 0x4e, - 0x1f, 0xec, 0x97, 0x4f, 0x34, 0x13, 0xb0, 0xd6, 0x21, 0x3a, 0x36, 0xab, 0xc1, 0xd8, 0x9a, 0xbb, - 0xc9, 0x5b, 0xe1, 0xe2, 0xe8, 0xb9, 0xc2, 0x85, 0xc9, 0xa5, 0x67, 0x69, 0x10, 0x54, 0x03, 0x2f, - 0xca, 0xd2, 0xd5, 0x4e, 0x14, 0xec, 0x2d, 0x2f, 0x1c, 0xec, 0x97, 0x4b, 0x2d, 0x04, 0xe8, 0x1d, - 0x2c, 0x51, 0x58, 0x3d, 0x99, 0x18, 0x63, 0x47, 0x4e, 0x8c, 0xb3, 0xbf, 0xbb, 0x5f, 0xce, 0x89, - 0x01, 0xa3, 0x89, 0x91, 0xf0, 0x33, 0xa7, 0xc8, 0x12, 0x14, 0x6d, 0xfe, 0xd0, 0x0b, 0xc5, 0x97, - 0x15, 0xf1, 0xcb, 0x4e, 0x1e, 0xec, 0x97, 0x59, 0x40, 0x30, 0xad, 0x19, 0x31, 0xde, 0x99, 0xb7, - 0x60, 0x52, 0x6b, 0x35, 0x2b, 0x41, 0x61, 0x97, 0xef, 0xc9, 0x1e, 0xb6, 0xc5, 0x9f, 0x6c, 0x01, - 0x46, 0x1f, 0xba, 0xad, 0x1e, 0x75, 0xa9, 0x2d, 0x7f, 0x7c, 0x36, 0xff, 0x99, 0xdc, 0xcd, 0x91, - 0xe2, 0x78, 0xa9, 0x68, 0xe7, 0x6b, 0x2b, 0xd6, 0xdf, 0x1e, 0x81, 0xa2, 0xed, 0xcb, 0x85, 0xc8, - 0x5e, 0x85, 0xd1, 0x7a, 0xe4, 0x46, 0x6a, 0x98, 0xe6, 0x0f, 0xf6, 0xcb, 0xb3, 0x62, 0x91, 0x72, - 0xad, 0x7e, 0x89, 0x21, 0x50, 0xd7, 0x77, 0xdc, 0x50, 0x0d, 0x17, 0xa2, 0x76, 0x05, 0x40, 0x47, - 0x45, 0x0c, 0x76, 0x1e, 0x46, 0x6e, 0xfb, 0x4d, 0x4e, 0x23, 0xc6, 0x0e, 0xf6, 0xcb, 0x33, 0x6d, - 0xbf, 0xa9, 0x23, 0x62, 0x39, 0x7b, 0x1d, 0x26, 0xaa, 0xbd, 0x20, 0xe0, 0x1d, 0x31, 0xd7, 0x47, - 0x10, 0x79, 0xe6, 0x60, 0xbf, 0x0c, 0x0d, 0x09, 0x74, 0xbc, 0xa6, 0x9d, 0x20, 0x88, 0x61, 0xa8, - 0x47, 0x6e, 0x10, 0xf1, 0xe6, 0xe2, 0xe8, 0x50, 0xc3, 0x20, 0xd6, 0xe7, 0x5c, 0x28, 0x49, 0xd2, - 0xc3, 0x40, 0x9c, 0xd8, 0x0d, 0x98, 0xbc, 0x1e, 0xb8, 0x0d, 0xbe, 0xce, 0x03, 0xcf, 0x6f, 0xe2, - 0xf8, 0x16, 0x96, 0xcf, 0x1f, 0xec, 0x97, 0x4f, 0x6e, 0x0b, 0xb0, 0xd3, 0x45, 0x78, 0x42, 0xfd, - 0xed, 0xfd, 0x72, 0x71, 0x85, 0xb6, 0x4c, 0x5b, 0x27, 0x65, 0x5f, 0x15, 0x83, 0x13, 0x46, 0xd8, - 0xb5, 0xbc, 0xb9, 0x38, 0x7e, 0x64, 0x13, 0x2d, 0x6a, 0xe2, 0xc9, 0x96, 0x1b, 0x46, 0x4e, 0x20, - 0xe9, 0x52, 0xed, 0xd4, 0x59, 0xb2, 0xbb, 0x50, 0xac, 0x37, 0x76, 0x78, 0xb3, 0xd7, 0xe2, 0x38, - 0x65, 0x26, 0x97, 0x4e, 0xd1, 0xa4, 0x56, 0xe3, 0xa9, 0x8a, 0x97, 0xcf, 0x10, 0x6f, 0x16, 0x12, - 0x44, 0x9f, 0x4f, 0x0a, 0xeb, 0xb3, 0xc5, 0x6f, 0xfe, 0x62, 0xf9, 0x99, 0xef, 0xfb, 0xa3, 0x73, - 0xcf, 0x58, 0xff, 0x59, 0x1e, 0x4a, 0x69, 0x26, 0x6c, 0x0b, 0xa6, 0xef, 0x75, 0x9b, 0x6e, 0xc4, - 0xab, 0x2d, 0x8f, 0x77, 0xa2, 0x10, 0x27, 0xc9, 0xe1, 0xdf, 0xf4, 0x12, 0xd5, 0xbb, 0xd8, 0x43, - 0x42, 0xa7, 0x21, 0x29, 0x53, 0x5f, 0x65, 0xb2, 0x4d, 0xea, 0xa9, 0xe3, 0x06, 0x1e, 0xe2, 0x0c, - 0x3b, 0x5e, 0x3d, 0x72, 0xeb, 0x1f, 0x50, 0x0f, 0xb1, 0xa5, 0x09, 0xd4, 0x69, 0x6e, 0xee, 0xe1, - 0xcc, 0x1c, 0x7e, 0x02, 0x09, 0x92, 0x8c, 0x09, 0x24, 0xc0, 0xd6, 0xff, 0x9e, 0x83, 0x19, 0x9b, - 0x87, 0x7e, 0x2f, 0x68, 0xf0, 0x1b, 0xdc, 0x6d, 0xf2, 0x40, 0x4c, 0xff, 0x5b, 0x5e, 0xa7, 0x49, - 0x6b, 0x0a, 0xa7, 0xff, 0xae, 0xd7, 0xd1, 0xb7, 0x6e, 0x2c, 0x67, 0x9f, 0x84, 0xf1, 0x7a, 0x6f, - 0x13, 0x51, 0xf3, 0xc9, 0x0e, 0x10, 0xf6, 0x36, 0x9d, 0x14, 0xba, 0x42, 0x63, 0x97, 0x60, 0xfc, - 0x3e, 0x0f, 0xc2, 0x64, 0x37, 0xc4, 0xa3, 0xe1, 0xa1, 0x04, 0xe9, 0x04, 0x84, 0xc5, 0xae, 0x27, - 0x3b, 0x32, 0x1d, 0x6a, 0xb3, 0xa9, 0x7d, 0x30, 0x99, 0x2a, 0x6d, 0x82, 0xe8, 0x53, 0x45, 0x61, - 0x59, 0x3f, 0x9d, 0x87, 0xd2, 0x8a, 0x1b, 0xb9, 0x9b, 0x6e, 0x48, 0xfd, 0x79, 0xff, 0x8a, 0xd8, - 0xe3, 0xb5, 0x0f, 0xc5, 0x3d, 0x5e, 0xb4, 0xfc, 0x23, 0x7f, 0xde, 0xcb, 0xe9, 0xcf, 0x9b, 0x14, - 0x27, 0x2c, 0x7d, 0x5e, 0xf2, 0x51, 0xef, 0x1e, 0xfd, 0x51, 0x25, 0xfa, 0xa8, 0xa2, 0xfa, 0xa8, - 0xe4, 0x53, 0xd8, 0xbb, 0x30, 0x52, 0xef, 0xf2, 0x06, 0x6d, 0x22, 0xea, 0x5c, 0x30, 0x3f, 0x4e, - 0x20, 0xdc, 0xbf, 0xb2, 0x3c, 0x45, 0x6c, 0x46, 0xc2, 0x2e, 0x6f, 0xd8, 0x48, 0xa6, 0x2d, 0x9a, - 0xff, 0xbc, 0x00, 0x0b, 0x59, 0x64, 0xfa, 0x77, 0x8c, 0x1d, 0xf2, 0x1d, 0x17, 0xa0, 0x28, 0x8e, - 0x70, 0x71, 0x2c, 0xe2, 0x76, 0x31, 0xb1, 0x3c, 0x25, 0x9a, 0xbc, 0x43, 0x30, 0x3b, 0x2e, 0x65, - 0x2f, 0xc6, 0x12, 0x41, 0x31, 0xe1, 0x47, 0x12, 0x81, 0x92, 0x03, 0xc4, 0x58, 0xab, 0x25, 0x8c, - 0x82, 0x43, 0xd2, 0x2d, 0x0a, 0x9c, 0x8c, 0x75, 0x40, 0x10, 0xe3, 0x98, 0x51, 0x87, 0xc2, 0x2a, - 0x14, 0xd5, 0x67, 0x2d, 0x4e, 0x21, 0xa3, 0xb9, 0x54, 0x27, 0xdd, 0xbf, 0x22, 0x07, 0xb3, 0x49, - 0xbf, 0x75, 0x36, 0x0a, 0x87, 0x5d, 0x81, 0xe2, 0x7a, 0xe0, 0x3f, 0xde, 0xab, 0xad, 0x84, 0x8b, - 0xd3, 0xe7, 0x0a, 0x17, 0x26, 0x96, 0x4f, 0x1d, 0xec, 0x97, 0xe7, 0xbb, 0x02, 0xe6, 0x78, 0x4d, - 0xfd, 0xa4, 0x8d, 0x11, 0x6f, 0x8e, 0x14, 0x73, 0xa5, 0xfc, 0xcd, 0x91, 0x62, 0xbe, 0x54, 0x90, - 0xe2, 0xc5, 0xcd, 0x91, 0xe2, 0x48, 0x69, 0xf4, 0xe6, 0x48, 0x71, 0x14, 0x05, 0x8e, 0x89, 0x12, - 0xdc, 0x1c, 0x29, 0x4e, 0x96, 0xa6, 0x8c, 0xd3, 0x1e, 0x19, 0x44, 0x7e, 0xc3, 0x6f, 0xd9, 0x85, - 0x7b, 0x76, 0xcd, 0x1e, 0xab, 0x56, 0xaa, 0x3c, 0x88, 0xec, 0x42, 0xe5, 0x41, 0xdd, 0x9e, 0x5e, - 0xd9, 0xeb, 0xb8, 0x6d, 0xaf, 0x21, 0x8f, 0x4e, 0xbb, 0x70, 0xbd, 0xba, 0x6e, 0x55, 0x60, 0x26, - 0xf9, 0x96, 0x35, 0x2f, 0x8c, 0xd8, 0x25, 0x98, 0x50, 0x10, 0xb1, 0xd1, 0x15, 0x32, 0xbf, 0xda, - 0x4e, 0x70, 0xac, 0xdf, 0xc9, 0x03, 0x24, 0x25, 0x4f, 0xe9, 0x5a, 0xf8, 0xb4, 0xb1, 0x16, 0x4e, - 0xa4, 0xd7, 0xc2, 0xc0, 0x55, 0xc0, 0xde, 0x87, 0x31, 0x21, 0x16, 0xf4, 0x94, 0x48, 0x74, 0x2a, - 0x4d, 0x8a, 0x85, 0xf7, 0xaf, 0x2c, 0xcf, 0x10, 0xf1, 0x58, 0x88, 0x10, 0x9b, 0xc8, 0xb4, 0x65, - 0xf4, 0x0b, 0xe3, 0xc9, 0x60, 0xd0, 0x02, 0xba, 0x00, 0xf1, 0x80, 0x52, 0x87, 0xe2, 0xca, 0xe8, - 0xaa, 0x41, 0x8e, 0x4b, 0xd9, 0x69, 0x10, 0x03, 0x4e, 0x9d, 0x3a, 0x7e, 0xb0, 0x5f, 0x2e, 0xf4, - 0x02, 0x0f, 0x27, 0x01, 0xbb, 0x04, 0x34, 0x0d, 0xa8, 0x03, 0xc5, 0xec, 0x9b, 0x6b, 0xb8, 0x4e, - 0x83, 0x07, 0x51, 0xd2, 0xe3, 0x8b, 0x39, 0x35, 0x5b, 0x58, 0x17, 0xcc, 0xa9, 0xb2, 0x38, 0x82, - 0xd3, 0xe0, 0x42, 0x66, 0xaf, 0x5c, 0x34, 0x50, 0xa5, 0x18, 0x79, 0x4e, 0x9d, 0x4a, 0x4d, 0x59, - 0xe6, 0xf4, 0x89, 0x94, 0x66, 0x05, 0xec, 0x0a, 0x88, 0x19, 0x4a, 0xbd, 0x0f, 0x54, 0x4f, 0xe5, - 0x41, 0x7d, 0xf9, 0x04, 0x71, 0x9a, 0x76, 0x1f, 0xe9, 0xe4, 0x02, 0x9b, 0xbd, 0x0d, 0x62, 0x0a, - 0x53, 0xbf, 0x33, 0x22, 0xba, 0x5e, 0x5d, 0xaf, 0xb6, 0xfc, 0x5e, 0xb3, 0xfe, 0xf9, 0xb5, 0x84, - 0x78, 0xbb, 0xd1, 0xd5, 0x89, 0xaf, 0x57, 0xd7, 0xd9, 0xdb, 0x30, 0x5a, 0xf9, 0x7a, 0x2f, 0xe0, - 0x24, 0x9f, 0x4c, 0xa9, 0x3a, 0x05, 0x6c, 0xf9, 0x14, 0x11, 0xce, 0xba, 0xe2, 0xa7, 0x2e, 0xd7, - 0x61, 0xb9, 0xa8, 0x79, 0x63, 0xad, 0x4e, 0xb2, 0x07, 0x4b, 0x75, 0xcb, 0xc6, 0x9a, 0xd6, 0xec, - 0xc8, 0xf8, 0x6a, 0x41, 0xc5, 0x2e, 0x41, 0xbe, 0xb2, 0x82, 0x37, 0xa2, 0xc9, 0xa5, 0x09, 0x55, - 0xed, 0xca, 0xf2, 0x02, 0x91, 0x4c, 0xb9, 0xfa, 0x32, 0xc8, 0x57, 0x56, 0xd8, 0x32, 0x8c, 0xde, - 0xde, 0xab, 0x7f, 0x7e, 0x8d, 0x36, 0xb3, 0x79, 0x35, 0xaf, 0x05, 0xec, 0x2e, 0x2e, 0xfb, 0x30, - 0x69, 0x71, 0x7b, 0x2f, 0xfc, 0x5a, 0x4b, 0x6f, 0x31, 0xa2, 0xb1, 0x75, 0x98, 0xa8, 0x34, 0xdb, - 0x5e, 0xe7, 0x5e, 0xc8, 0x83, 0xc5, 0x49, 0xe4, 0xb3, 0x98, 0x6a, 0x77, 0x5c, 0xbe, 0xbc, 0x78, - 0xb0, 0x5f, 0x5e, 0x70, 0xc5, 0x4f, 0xa7, 0x17, 0xf2, 0x40, 0xe3, 0x96, 0x30, 0x61, 0xeb, 0x00, - 0xb7, 0xfd, 0xce, 0xb6, 0x5f, 0x89, 0x5a, 0x6e, 0x98, 0xda, 0x1e, 0x93, 0x82, 0x58, 0x7c, 0x38, - 0xd1, 0x16, 0x30, 0xc7, 0x15, 0x40, 0x8d, 0xa1, 0xc6, 0x83, 0x5d, 0x83, 0xb1, 0xbb, 0x81, 0xdb, - 0x68, 0xf1, 0xc5, 0x69, 0xe4, 0xb6, 0x40, 0xdc, 0x24, 0x50, 0x7d, 0xe9, 0x22, 0x31, 0x2c, 0xf9, - 0x08, 0xd6, 0xaf, 0x29, 0x12, 0xf1, 0xcc, 0x03, 0x60, 0xfd, 0x73, 0x32, 0xe3, 0x92, 0xf0, 0x09, - 0xfd, 0x92, 0x90, 0x2c, 0xfa, 0xaa, 0xdf, 0x6e, 0xbb, 0x9d, 0x26, 0xd2, 0xde, 0x5f, 0xd2, 0xee, - 0x0e, 0xd6, 0xd7, 0x60, 0xae, 0xaf, 0xb3, 0x8e, 0xb8, 0xdf, 0xbd, 0x07, 0xb3, 0x2b, 0x7c, 0xcb, - 0xed, 0xb5, 0xa2, 0xf8, 0x24, 0x91, 0x4b, 0x14, 0x6f, 0x5a, 0x4d, 0x59, 0xe4, 0xa8, 0xe3, 0xc3, - 0x4e, 0x23, 0x5b, 0xef, 0xc2, 0xb4, 0xf1, 0xf9, 0xe2, 0xaa, 0x50, 0xe9, 0x35, 0xbd, 0x08, 0x07, - 0x32, 0x97, 0x5c, 0x15, 0x5c, 0x01, 0xc4, 0xe1, 0xb2, 0x13, 0x04, 0xeb, 0xdf, 0xd7, 0xa5, 0x15, - 0xda, 0x89, 0xc4, 0xb5, 0x9a, 0xf6, 0x83, 0x5c, 0x22, 0x3b, 0xf5, 0xed, 0x07, 0xf1, 0x6e, 0xf0, - 0xaa, 0x5c, 0x9b, 0xf9, 0xbe, 0xb5, 0x39, 0x49, 0x23, 0x51, 0x70, 0x1f, 0x85, 0x72, 0x45, 0xc6, - 0x33, 0xb5, 0xf0, 0xd1, 0x67, 0xea, 0xfb, 0x30, 0x75, 0xdb, 0xed, 0xb8, 0xdb, 0xbc, 0x29, 0xbe, - 0x40, 0xee, 0x3d, 0x13, 0xcb, 0xcf, 0x1e, 0xec, 0x97, 0x4f, 0xb5, 0x25, 0x1c, 0xbf, 0x52, 0x9f, - 0x44, 0x06, 0x01, 0xbb, 0xac, 0x56, 0xf6, 0x68, 0xc6, 0xca, 0x9e, 0xa6, 0xda, 0x47, 0x71, 0x65, - 0xd3, 0x7a, 0xb6, 0x7e, 0x73, 0x02, 0xbf, 0x91, 0xbd, 0x0e, 0x63, 0x36, 0xdf, 0x16, 0x47, 0x4d, - 0x2e, 0x19, 0xa4, 0x00, 0x21, 0x7a, 0xc7, 0x48, 0x1c, 0x94, 0x33, 0x78, 0x33, 0xdc, 0xf1, 0xb6, - 0x22, 0xea, 0x9d, 0x58, 0xce, 0x20, 0xb0, 0x26, 0x67, 0x10, 0xc4, 0xbc, 0xce, 0x4a, 0x98, 0xd8, - 0xfd, 0xec, 0x95, 0x3a, 0x75, 0x9a, 0xea, 0x61, 0x7b, 0x45, 0xdb, 0x46, 0x02, 0x43, 0x4a, 0x10, - 0xd8, 0xec, 0x2a, 0x4c, 0x54, 0x1a, 0x0d, 0xbf, 0xa7, 0xdd, 0x19, 0xe5, 0xba, 0x95, 0x40, 0x53, - 0x45, 0x92, 0xa0, 0xb2, 0x3a, 0x4c, 0xae, 0x8a, 0x8b, 0x96, 0x57, 0x75, 0x1b, 0x3b, 0xaa, 0x93, - 0xd4, 0x1e, 0xa6, 0x95, 0x24, 0x2b, 0x97, 0x23, 0xb0, 0x21, 0x80, 0xba, 0x92, 0x41, 0xc3, 0x65, - 0x1b, 0x30, 0x59, 0xe7, 0x8d, 0x80, 0x47, 0xf5, 0xc8, 0x0f, 0x78, 0x6a, 0x4b, 0xd6, 0x4a, 0x96, - 0x9f, 0x57, 0x77, 0xbd, 0x10, 0x81, 0x4e, 0x28, 0xa0, 0x3a, 0x57, 0x0d, 0x59, 0x0a, 0xed, 0x6d, - 0x3f, 0xd8, 0x5b, 0x59, 0xa6, 0x6d, 0x3a, 0x39, 0xd3, 0x25, 0x58, 0x17, 0xda, 0x05, 0xa4, 0xb9, - 0x69, 0x0a, 0xed, 0x12, 0x0b, 0x47, 0x6a, 0xa5, 0x8e, 0xb2, 0x15, 0x6d, 0xda, 0xb3, 0x49, 0x2f, - 0x23, 0x58, 0x1b, 0xa9, 0x66, 0x88, 0x92, 0x99, 0x31, 0x52, 0x84, 0xc5, 0xba, 0xc0, 0xd4, 0xa8, - 0x49, 0x41, 0xb7, 0xc5, 0xc3, 0x90, 0xf6, 0xf2, 0xd3, 0xa9, 0xc1, 0x4f, 0x10, 0x96, 0x5f, 0x26, - 0xe6, 0x67, 0xd5, 0x34, 0xa0, 0x7b, 0x9a, 0x28, 0xd4, 0xea, 0xc9, 0xe0, 0xcd, 0xde, 0x02, 0x58, - 0x7d, 0x1c, 0xf1, 0xa0, 0xe3, 0xb6, 0x62, 0x3d, 0x18, 0xaa, 0x7e, 0x38, 0x41, 0xcd, 0x81, 0xd6, - 0x90, 0x59, 0x15, 0xa6, 0x2b, 0x61, 0xd8, 0x6b, 0x73, 0xdb, 0x6f, 0xf1, 0x8a, 0x7d, 0x07, 0xf7, - 0xfd, 0x89, 0xe5, 0xb3, 0x07, 0xfb, 0xe5, 0xd3, 0x2e, 0x16, 0x38, 0x81, 0xdf, 0xe2, 0x8e, 0x1b, - 0xe8, 0xb3, 0xdb, 0xa4, 0x61, 0x77, 0x01, 0xee, 0x76, 0x79, 0xa7, 0xce, 0xdd, 0xa0, 0xb1, 0x93, - 0xda, 0xe6, 0x93, 0x82, 0xe5, 0xe7, 0xe8, 0x0b, 0x17, 0xfc, 0x2e, 0xef, 0x84, 0x08, 0xd3, 0x5b, - 0x95, 0x60, 0xb2, 0x07, 0x30, 0x5b, 0xab, 0xdc, 0x5e, 0xf7, 0x5b, 0x5e, 0x63, 0x8f, 0x24, 0xa7, - 0x19, 0xd4, 0x0e, 0x9e, 0x24, 0xae, 0xa9, 0x52, 0xb9, 0x3d, 0x79, 0x6e, 0xdb, 0xe9, 0x22, 0xd4, - 0x21, 0xf9, 0x29, 0xcd, 0x85, 0x7d, 0x20, 0xe6, 0x60, 0x28, 0x84, 0xc1, 0x0d, 0x77, 0x3b, 0x5c, - 0x9c, 0x35, 0xb4, 0x5d, 0x95, 0x07, 0xf5, 0x8b, 0x5a, 0xa9, 0x14, 0x53, 0xce, 0xc8, 0x89, 0x88, - 0x50, 0x27, 0x72, 0xb7, 0x43, 0x73, 0x22, 0xc6, 0xd8, 0xec, 0x26, 0xc0, 0x8a, 0xdf, 0xe8, 0xb5, - 0x79, 0x27, 0x5a, 0x59, 0x5e, 0x2c, 0x99, 0x57, 0x81, 0xb8, 0x20, 0xd9, 0xda, 0x9a, 0x7e, 0xc3, - 0x98, 0x89, 0x1a, 0xf5, 0x99, 0xf7, 0xa0, 0x94, 0x6e, 0xc8, 0x31, 0x15, 0x58, 0xd3, 0xa5, 0x19, - 0xed, 0xeb, 0x57, 0x1f, 0x7b, 0x61, 0x14, 0x5a, 0xdf, 0x30, 0x56, 0xa0, 0xd8, 0x1d, 0x6e, 0xf1, - 0xbd, 0xf5, 0x80, 0x6f, 0x79, 0x8f, 0x69, 0x33, 0xc3, 0xdd, 0x61, 0x97, 0xef, 0x39, 0x5d, 0x84, - 0xea, 0xbb, 0x43, 0x8c, 0xca, 0x3e, 0x05, 0xc5, 0x5b, 0xb7, 0xeb, 0xb7, 0xf8, 0x5e, 0x6d, 0x85, - 0x0e, 0x2a, 0x49, 0xd6, 0x0e, 0x1d, 0x41, 0x6a, 0xcc, 0xb5, 0x18, 0xd3, 0x5a, 0x4e, 0x76, 0x42, - 0x51, 0x73, 0xb5, 0xd5, 0x0b, 0x23, 0x1e, 0xd4, 0x56, 0xf4, 0x9a, 0x1b, 0x12, 0x98, 0xda, 0x97, - 0x62, 0x54, 0xeb, 0x5f, 0xe6, 0x71, 0x17, 0x14, 0x13, 0xbe, 0xd6, 0x09, 0x23, 0xb7, 0xd3, 0xe0, - 0x31, 0x03, 0x9c, 0xf0, 0x1e, 0x41, 0x53, 0x13, 0x3e, 0x41, 0x36, 0xab, 0xce, 0x0f, 0x5d, 0xb5, - 0xa8, 0x52, 0x69, 0x2e, 0x6a, 0x2b, 0xba, 0x7a, 0x35, 0x20, 0x68, 0xaa, 0xca, 0x04, 0x99, 0x9d, - 0x87, 0xf1, 0x5a, 0xe5, 0x76, 0xa5, 0x17, 0xed, 0xe0, 0x1e, 0x5c, 0x94, 0xf2, 0xb9, 0x98, 0xad, - 0x6e, 0x2f, 0xda, 0xb1, 0x55, 0x21, 0xbb, 0x84, 0xf7, 0x9e, 0x0e, 0x8f, 0xa4, 0x1a, 0x96, 0x0e, - 0xdd, 0x50, 0x82, 0x52, 0xd7, 0x1e, 0x01, 0x62, 0xaf, 0xc1, 0xe8, 0xfd, 0xf5, 0x6a, 0x6d, 0x85, - 0x2e, 0xce, 0x78, 0x12, 0x3d, 0xec, 0x36, 0xcc, 0x96, 0x48, 0x14, 0xb6, 0x0a, 0x33, 0x75, 0xde, - 0xe8, 0x05, 0x5e, 0xb4, 0x77, 0x3d, 0xf0, 0x7b, 0xdd, 0x70, 0x71, 0x1c, 0xeb, 0xc0, 0x95, 0x1e, - 0x52, 0x89, 0xb3, 0x8d, 0x45, 0x1a, 0x75, 0x8a, 0xc8, 0xfa, 0xad, 0x5c, 0xb2, 0x4d, 0xb2, 0xf3, - 0x86, 0x58, 0x83, 0xba, 0x1b, 0x21, 0xd6, 0xe8, 0xba, 0x1b, 0x14, 0x70, 0x6c, 0x60, 0xd5, 0x5e, - 0x18, 0xf9, 0xed, 0xd5, 0x4e, 0xb3, 0xeb, 0x7b, 0x9d, 0x08, 0xa9, 0x64, 0xe7, 0x5b, 0x07, 0xfb, - 0xe5, 0xe7, 0x1b, 0x58, 0xea, 0x70, 0x2a, 0x76, 0x52, 0x5c, 0x32, 0xa8, 0x3f, 0xc6, 0x78, 0x58, - 0xbf, 0x97, 0x37, 0x8e, 0x37, 0xd1, 0x3c, 0x9b, 0x77, 0x5b, 0x5e, 0x03, 0x6f, 0xf4, 0xf8, 0xa1, - 0xf1, 0xac, 0xc2, 0xe6, 0x05, 0x49, 0xa9, 0xec, 0x21, 0x93, 0x77, 0x06, 0x35, 0xfb, 0x1c, 0x4c, - 0x09, 0x49, 0x83, 0x7e, 0x86, 0x8b, 0x79, 0xec, 0xec, 0xe7, 0x50, 0x0b, 0x17, 0xf2, 0x20, 0x66, - 0x63, 0x88, 0x28, 0x3a, 0x05, 0x6b, 0xc2, 0xe2, 0x46, 0xe0, 0x76, 0x42, 0x2f, 0x5a, 0xed, 0x34, - 0x82, 0x3d, 0x94, 0x8c, 0x56, 0x3b, 0xee, 0x66, 0x8b, 0x37, 0xf1, 0x73, 0x8b, 0xcb, 0x17, 0x0e, - 0xf6, 0xcb, 0x2f, 0x45, 0x12, 0xc7, 0xe1, 0x31, 0x92, 0xc3, 0x25, 0x96, 0xc6, 0x79, 0x20, 0x27, - 0x21, 0x49, 0xa9, 0x6e, 0xc5, 0x47, 0x18, 0x29, 0x24, 0xa0, 0x24, 0x15, 0x8f, 0x86, 0xd8, 0xc3, - 0xf4, 0x66, 0xea, 0x04, 0xd6, 0xff, 0x9b, 0x4b, 0x0e, 0x60, 0xf6, 0x0e, 0x4c, 0xd2, 0x8a, 0xd1, - 0xe6, 0x05, 0xee, 0xa0, 0x6a, 0x79, 0xa5, 0x46, 0x56, 0x47, 0x17, 0xf7, 0xfe, 0x4a, 0x75, 0x4d, - 0x9b, 0x1b, 0x78, 0xef, 0x77, 0x1b, 0xad, 0x34, 0x95, 0x42, 0x13, 0x93, 0x60, 0x63, 0xad, 0x6e, - 0xf6, 0x0a, 0x4e, 0x82, 0xa8, 0x15, 0x66, 0x74, 0x83, 0x86, 0xfc, 0xf1, 0x3f, 0xfc, 0x7f, 0xcc, - 0x65, 0x9d, 0xf3, 0x6c, 0x19, 0xa6, 0x1f, 0xf8, 0xc1, 0x2e, 0x8e, 0xaf, 0xd6, 0x09, 0x38, 0xf2, - 0x8f, 0x54, 0x41, 0xfa, 0x83, 0x4c, 0x12, 0xbd, 0x6d, 0x5a, 0x6f, 0x98, 0x6d, 0x4b, 0x71, 0x30, - 0x08, 0xc4, 0x38, 0xc4, 0x1c, 0xe3, 0xd5, 0x81, 0xe3, 0x90, 0x34, 0xc1, 0x98, 0xc2, 0x3a, 0xba, - 0xf5, 0x5f, 0xe5, 0xf4, 0xf3, 0x5c, 0x74, 0xf2, 0x8a, 0xdf, 0x76, 0xbd, 0x8e, 0xf6, 0x39, 0xf2, - 0x61, 0x09, 0xa1, 0xe9, 0x96, 0x68, 0xc8, 0xec, 0x0a, 0x14, 0xe5, 0xaf, 0x78, 0xaf, 0x45, 0xad, - 0x16, 0x11, 0x9a, 0x07, 0x85, 0x42, 0xec, 0x1b, 0x99, 0xc2, 0x71, 0x47, 0xe6, 0x37, 0x73, 0xfa, - 0x51, 0xfc, 0x51, 0x0f, 0x9b, 0xd4, 0x21, 0x93, 0x3f, 0xce, 0x21, 0xf3, 0xb1, 0x3f, 0xe1, 0xfb, - 0x72, 0x30, 0xa9, 0x69, 0x29, 0xc4, 0x37, 0xac, 0x07, 0xfe, 0x87, 0xbc, 0x11, 0x99, 0xdf, 0xd0, - 0x95, 0xc0, 0xd4, 0x37, 0xc4, 0xa8, 0x1f, 0xe3, 0x1b, 0xac, 0x3f, 0xcf, 0xd1, 0x1d, 0x69, 0xe8, - 0x6d, 0xde, 0xdc, 0x92, 0xf3, 0xc7, 0x39, 0x22, 0x3f, 0x07, 0xa3, 0x36, 0x6f, 0x7a, 0x21, 0xdd, - 0x6f, 0xe6, 0xf4, 0xfb, 0x18, 0x16, 0x24, 0x72, 0x53, 0x20, 0x7e, 0xea, 0xe7, 0x1b, 0x96, 0x0b, - 0x41, 0xb6, 0x16, 0x5e, 0x6b, 0xf1, 0xc7, 0x9e, 0x5c, 0x8c, 0x74, 0xd4, 0xe2, 0xf1, 0xe6, 0x85, - 0xce, 0x96, 0x28, 0x21, 0x89, 0x5a, 0x5f, 0x78, 0x06, 0x8d, 0xf5, 0x01, 0x40, 0x52, 0x25, 0xbb, - 0x05, 0x25, 0x9a, 0x0d, 0x5e, 0x67, 0x5b, 0x0a, 0x52, 0xd4, 0x07, 0xe5, 0x83, 0xfd, 0xf2, 0xb3, - 0x8d, 0xb8, 0x8c, 0xa4, 0x4e, 0x8d, 0x6f, 0x1f, 0xa1, 0xf5, 0x1f, 0xe6, 0x21, 0x5f, 0xc1, 0x01, - 0xb9, 0xc5, 0xf7, 0x22, 0x77, 0xf3, 0x9a, 0xd7, 0x32, 0x16, 0xd3, 0x2e, 0x42, 0x9d, 0x2d, 0xcf, - 0x50, 0x57, 0x68, 0xc8, 0x62, 0x31, 0xdd, 0x0a, 0x36, 0xdf, 0x44, 0x42, 0x6d, 0x31, 0xed, 0x06, - 0x9b, 0x6f, 0xa6, 0xc9, 0x62, 0x44, 0x66, 0xc1, 0x98, 0x5c, 0x58, 0x34, 0x07, 0xe1, 0x60, 0xbf, - 0x3c, 0x26, 0xd7, 0x9f, 0x4d, 0x25, 0xec, 0x34, 0x14, 0xea, 0xeb, 0x77, 0x68, 0x07, 0x44, 0xb5, - 0x60, 0xd8, 0xed, 0xd8, 0x02, 0x26, 0xea, 0x5c, 0x5b, 0xa9, 0xac, 0xa3, 0x22, 0x60, 0x34, 0xa9, - 0xb3, 0xd5, 0x74, 0xbb, 0x69, 0x55, 0x40, 0x8c, 0xc8, 0xde, 0x85, 0xc9, 0x5b, 0x2b, 0xd5, 0x1b, - 0x7e, 0x28, 0x77, 0xaf, 0xb1, 0x64, 0xf2, 0xef, 0x36, 0x1b, 0x0e, 0x6a, 0xe2, 0xd3, 0xc7, 0x80, - 0x86, 0x6f, 0xfd, 0x70, 0x1e, 0x26, 0x35, 0x3d, 0x19, 0xfb, 0x14, 0x3d, 0x90, 0xe6, 0x8c, 0x1b, - 0x80, 0x86, 0x21, 0x4a, 0xa5, 0x52, 0xa5, 0xed, 0x37, 0x39, 0x3d, 0x97, 0x26, 0x0a, 0x8c, 0xfc, - 0x30, 0x0a, 0x8c, 0xb7, 0x00, 0xe4, 0x1c, 0xc0, 0x26, 0x6b, 0xe2, 0x84, 0x66, 0x27, 0xa1, 0x8f, - 0x4b, 0x82, 0xcc, 0xee, 0xc3, 0xfc, 0x46, 0xd0, 0x0b, 0xa3, 0xfa, 0x5e, 0x18, 0xf1, 0xb6, 0xe0, - 0xb6, 0xee, 0xfb, 0x2d, 0x9a, 0x7f, 0x2f, 0x1d, 0xec, 0x97, 0xcf, 0x45, 0xa2, 0xd8, 0x09, 0xb1, - 0x1c, 0x1b, 0xe0, 0x74, 0x7d, 0x5f, 0x57, 0x6b, 0x64, 0x31, 0xb0, 0x6c, 0x98, 0xd2, 0x95, 0x22, - 0xe2, 0x64, 0xa1, 0xc7, 0x24, 0x52, 0x75, 0x6b, 0x27, 0x0b, 0xb5, 0xb2, 0xff, 0x71, 0xcb, 0x24, - 0xb1, 0x3e, 0xa5, 0x2b, 0xe4, 0x86, 0x5d, 0xd8, 0xd6, 0x0f, 0xe4, 0x92, 0x6d, 0xe4, 0xfe, 0x65, - 0xf6, 0x36, 0x8c, 0xc9, 0xc7, 0x3b, 0x7a, 0xe3, 0x3c, 0x11, 0x5f, 0x6a, 0xf5, 0x97, 0x3d, 0xa9, - 0x09, 0xff, 0x03, 0xf9, 0xc0, 0xff, 0x8c, 0x4d, 0x24, 0xb1, 0x12, 0xdd, 0xd4, 0xa7, 0x29, 0xee, - 0xa8, 0x2e, 0xbe, 0x9c, 0xa5, 0x44, 0xb7, 0x7e, 0x7b, 0x04, 0x66, 0x4c, 0x34, 0xfd, 0x85, 0x2f, - 0x37, 0xd4, 0x0b, 0xdf, 0xe7, 0xa0, 0x28, 0xfa, 0xc3, 0x6b, 0x70, 0x25, 0x91, 0xbd, 0x84, 0x4f, - 0x0b, 0x04, 0x33, 0x5e, 0xae, 0x41, 0x0e, 0x87, 0xb8, 0xe3, 0xda, 0x31, 0x15, 0x5b, 0xd2, 0x9e, - 0xa1, 0x0a, 0x89, 0x90, 0xa2, 0x9e, 0xa1, 0xf4, 0xf5, 0x10, 0x3f, 0x48, 0xbd, 0x01, 0x63, 0x42, - 0xbe, 0x8f, 0x55, 0x30, 0xd8, 0x4a, 0x21, 0xfa, 0xa7, 0x4c, 0x54, 0x24, 0x12, 0x7b, 0x00, 0xc5, - 0x35, 0x37, 0x8c, 0xea, 0x9c, 0x77, 0x86, 0x78, 0xbb, 0x2f, 0x53, 0x57, 0xcd, 0xe3, 0xc3, 0x78, - 0xc8, 0x79, 0x27, 0xf5, 0xf8, 0x1a, 0x33, 0x63, 0x5f, 0x06, 0xa8, 0xfa, 0x9d, 0x28, 0xf0, 0x5b, - 0x6b, 0xfe, 0xf6, 0xe2, 0x18, 0xde, 0x7d, 0x9f, 0x4f, 0x0d, 0x40, 0x82, 0x20, 0xaf, 0xbf, 0xb1, - 0x82, 0xa7, 0x21, 0x0b, 0x9c, 0x96, 0xbf, 0xad, 0xaf, 0x83, 0x04, 0x9f, 0x5d, 0x83, 0x92, 0x52, - 0x2c, 0xdc, 0xeb, 0x6e, 0x07, 0x38, 0x41, 0xc6, 0x13, 0xc9, 0x83, 0x3f, 0x8e, 0x9c, 0x1e, 0xc1, - 0xf5, 0x9d, 0x32, 0x4d, 0xc3, 0xbe, 0x04, 0xa7, 0xd2, 0x30, 0x35, 0xca, 0xc5, 0x44, 0x26, 0xd7, - 0xd9, 0x65, 0xcc, 0xfb, 0x41, 0x2c, 0xac, 0x6f, 0xe7, 0xe1, 0xd4, 0x80, 0x8f, 0x15, 0xeb, 0x01, - 0x8f, 0x6b, 0x6d, 0x3d, 0xa4, 0x4e, 0x69, 0x69, 0x73, 0x74, 0x0e, 0xf2, 0x74, 0xc0, 0x8d, 0x2c, - 0x97, 0x0e, 0xf6, 0xcb, 0x53, 0xc6, 0x38, 0xe6, 0x6b, 0x2b, 0xec, 0x26, 0x8c, 0x88, 0x21, 0x1a, - 0xe2, 0xe9, 0x5c, 0xe9, 0x94, 0x66, 0x22, 0x4f, 0x9f, 0x3e, 0x38, 0x74, 0xc8, 0x83, 0x7d, 0x0a, - 0x0a, 0x1b, 0x1b, 0x6b, 0x38, 0x77, 0x0a, 0xf8, 0xed, 0xd3, 0x51, 0xd4, 0x32, 0xa6, 0xea, 0xb4, - 0xa0, 0xbd, 0x18, 0x5b, 0x5a, 0x08, 0x74, 0xf6, 0x85, 0x94, 0x49, 0xcf, 0x6b, 0x87, 0x0f, 0xf4, - 0xf0, 0x16, 0x3e, 0x1f, 0xc3, 0xb0, 0xc6, 0xfa, 0xf9, 0x7c, 0xb2, 0x86, 0xaf, 0x79, 0xad, 0x88, - 0x07, 0xec, 0x8c, 0x5c, 0x92, 0x89, 0x70, 0x66, 0xc7, 0xbf, 0xd9, 0x62, 0xb2, 0xbe, 0x25, 0xab, - 0x78, 0x21, 0xbf, 0xa6, 0x2d, 0xe4, 0x02, 0x2e, 0xe4, 0x99, 0x81, 0x4b, 0xf6, 0xb5, 0x8c, 0x79, - 0x89, 0x0b, 0x31, 0x63, 0xee, 0xbd, 0x04, 0xd3, 0x77, 0xfc, 0xd5, 0xc7, 0x51, 0x8c, 0x28, 0x16, - 0x60, 0xd1, 0x36, 0x81, 0x82, 0xe3, 0xdd, 0x56, 0x93, 0x07, 0x1b, 0x3b, 0x6e, 0xc7, 0x78, 0xbb, - 0xb6, 0xfb, 0xe0, 0x02, 0xf7, 0x0e, 0x7f, 0x64, 0xe2, 0x8e, 0x4b, 0xdc, 0x34, 0xdc, 0xfa, 0xfe, - 0xbc, 0xea, 0x8c, 0xfb, 0x4b, 0x4f, 0xe9, 0x1b, 0xe9, 0x9b, 0xc6, 0x1b, 0xe9, 0x7c, 0xac, 0xdd, - 0x8d, 0x1f, 0xfc, 0x97, 0x8e, 0xb0, 0x13, 0xf8, 0x9f, 0x46, 0x61, 0x4a, 0x47, 0x17, 0xfd, 0x50, - 0x69, 0x36, 0x03, 0xbd, 0x1f, 0xdc, 0x66, 0x33, 0xb0, 0x11, 0x6a, 0x98, 0x05, 0x14, 0x0e, 0x35, - 0x0b, 0xf8, 0x0a, 0x4c, 0x54, 0xdb, 0x4d, 0xe3, 0xb1, 0xd2, 0xca, 0x68, 0xde, 0xc5, 0x18, 0x49, - 0xae, 0x85, 0x58, 0x69, 0xd9, 0x68, 0x37, 0xfb, 0x9f, 0x28, 0x13, 0x96, 0x86, 0x45, 0xc1, 0xe8, - 0xc7, 0xb1, 0x28, 0xb8, 0x0a, 0x13, 0xf7, 0x42, 0xbe, 0xd1, 0xeb, 0x74, 0x78, 0x0b, 0xa7, 0x55, - 0x51, 0xca, 0xfa, 0xbd, 0x90, 0x3b, 0x11, 0x42, 0xf5, 0x06, 0xc4, 0xa8, 0xfa, 0x00, 0x8f, 0x1f, - 0x32, 0xc0, 0x57, 0xa0, 0xb8, 0xce, 0x79, 0x80, 0x7d, 0x3a, 0x99, 0x88, 0x74, 0x5d, 0xce, 0x03, - 0x47, 0x74, 0xac, 0x61, 0x69, 0x40, 0x88, 0x86, 0x79, 0xc2, 0xd4, 0x90, 0xe6, 0x09, 0xec, 0x05, - 0x98, 0xea, 0xf6, 0x36, 0x5b, 0x5e, 0x03, 0xf9, 0x92, 0x5d, 0x83, 0x3d, 0x29, 0x61, 0x82, 0x6d, - 0xc8, 0xbe, 0x00, 0xd3, 0x78, 0xc7, 0x89, 0xa7, 0xdc, 0x8c, 0xf1, 0xaa, 0x67, 0x94, 0x49, 0x49, - 0xa7, 0x21, 0x40, 0x4e, 0x86, 0xf9, 0x8d, 0xc9, 0xe8, 0x4c, 0x1d, 0x66, 0xcc, 0x91, 0x7c, 0x02, - 0x8f, 0x7b, 0xb1, 0xa9, 0x45, 0xb1, 0x34, 0x71, 0x73, 0xa4, 0x08, 0xa5, 0x49, 0x69, 0x64, 0x61, - 0xc3, 0x7a, 0xfc, 0x4d, 0x36, 0xbb, 0xd5, 0xdb, 0xe4, 0x41, 0x87, 0x47, 0x3c, 0xa4, 0x4b, 0x40, - 0x68, 0x8f, 0x54, 0xba, 0xdd, 0xd0, 0xfa, 0x4f, 0xf3, 0x30, 0x5e, 0x79, 0x50, 0xaf, 0x75, 0xb6, - 0x7c, 0x7c, 0xa2, 0x8b, 0x5f, 0x66, 0xf4, 0x27, 0xba, 0xf8, 0x65, 0x46, 0x7f, 0x8f, 0xb9, 0x94, - 0x71, 0x8d, 0x43, 0x2b, 0x5e, 0xed, 0x1a, 0x67, 0x5c, 0x40, 0x93, 0x47, 0xaa, 0xc2, 0x10, 0x8f, - 0x54, 0xb1, 0x1e, 0x71, 0xe4, 0x68, 0x3d, 0xe2, 0xdb, 0x30, 0x59, 0xeb, 0x44, 0x7c, 0x3b, 0x48, - 0x66, 0x7a, 0x7c, 0xa5, 0x8c, 0xc1, 0xba, 0x68, 0xaf, 0x61, 0x8b, 0x69, 0x24, 0x75, 0x97, 0xb1, - 0xce, 0x12, 0xa7, 0x91, 0x54, 0x71, 0xa6, 0xf4, 0x01, 0x0a, 0xd1, 0x5a, 0x49, 0xcd, 0x11, 0x65, - 0x08, 0x20, 0x85, 0xcf, 0x99, 0x44, 0x79, 0x2f, 0x3a, 0x76, 0x79, 0x2e, 0xdb, 0x10, 0xc0, 0xfa, - 0x91, 0x3c, 0x4c, 0x56, 0xba, 0xdd, 0xa7, 0xdc, 0x1c, 0xeb, 0x33, 0xc6, 0xf6, 0xaa, 0xee, 0x42, - 0xf1, 0x77, 0x0d, 0x65, 0x89, 0xf5, 0x2b, 0x79, 0x98, 0x4d, 0x51, 0xe8, 0xad, 0xcf, 0x0d, 0x69, - 0x84, 0x95, 0x1f, 0xd2, 0x08, 0xab, 0x30, 0x9c, 0x11, 0xd6, 0xc8, 0xc7, 0xd9, 0x32, 0x5f, 0x81, - 0x42, 0xa5, 0xdb, 0x4d, 0x3f, 0xe6, 0x76, 0xbb, 0xf7, 0xaf, 0xc8, 0xfb, 0xac, 0xdb, 0xed, 0xda, - 0x02, 0xc3, 0xd8, 0xc7, 0xc6, 0x86, 0xdc, 0xc7, 0xac, 0x37, 0x60, 0x02, 0x79, 0xa1, 0xe9, 0xd3, - 0x39, 0xc0, 0xc5, 0x4c, 0x56, 0x4f, 0x46, 0x5d, 0xb4, 0xcc, 0xff, 0x79, 0x0e, 0x46, 0xf1, 0xf7, - 0x53, 0x3a, 0xc7, 0x96, 0x8c, 0x39, 0x56, 0xd2, 0xe6, 0xd8, 0x30, 0xb3, 0xeb, 0x1f, 0x14, 0x00, - 0xaa, 0x77, 0xed, 0xba, 0x54, 0x7b, 0xb0, 0x6b, 0x30, 0xeb, 0xb6, 0x5a, 0xfe, 0x23, 0xde, 0x74, - 0xfc, 0xc0, 0xdb, 0xf6, 0x3a, 0xb2, 0xe7, 0xd4, 0x0b, 0xa3, 0x59, 0xa4, 0xbf, 0x3b, 0x50, 0xd1, - 0x5d, 0x59, 0xa2, 0xf3, 0x69, 0xf3, 0x68, 0xc7, 0x6f, 0xaa, 0x0b, 0x9c, 0xc1, 0x87, 0x8a, 0x32, - 0xf8, 0xdc, 0x96, 0x25, 0x3a, 0x9f, 0x1d, 0xbc, 0x90, 0x2a, 0xf9, 0xd1, 0xe0, 0x43, 0x45, 0x19, - 0x7c, 0xe4, 0x2d, 0x36, 0x64, 0x6b, 0x30, 0x87, 0x10, 0xa7, 0x11, 0xf0, 0x26, 0xef, 0x44, 0x9e, - 0xdb, 0x0a, 0xe9, 0xca, 0x8f, 0xca, 0xa1, 0xbe, 0x42, 0xfd, 0xca, 0x83, 0x85, 0xd5, 0xa4, 0x8c, - 0x5d, 0x84, 0xf1, 0xb6, 0xfb, 0xd8, 0x71, 0xb7, 0xe5, 0x5b, 0xfb, 0xb4, 0xbc, 0x22, 0x12, 0x48, - 0xdf, 0xb0, 0xdb, 0xee, 0xe3, 0xca, 0x36, 0x17, 0x5f, 0xc1, 0x1f, 0x77, 0xfd, 0x50, 0xfb, 0x8a, - 0xb1, 0xe4, 0x2b, 0x52, 0x45, 0xfa, 0x57, 0x50, 0x11, 0x7d, 0x85, 0xf5, 0xff, 0x8d, 0xe2, 0xd4, - 0xa6, 0x4d, 0x80, 0xcc, 0xc3, 0x72, 0x19, 0xe6, 0x61, 0x6f, 0x81, 0x76, 0xc4, 0xe9, 0xaa, 0x3d, - 0xed, 0x80, 0xd7, 0xaf, 0x85, 0x09, 0x32, 0xdb, 0x4d, 0x1b, 0x8a, 0x15, 0x70, 0xe5, 0xbc, 0x98, - 0x9e, 0x57, 0x4f, 0xc4, 0x46, 0xec, 0x06, 0xb0, 0x5a, 0x07, 0x5f, 0xb3, 0x78, 0x7d, 0xd7, 0xeb, - 0xde, 0xe7, 0x81, 0xb7, 0xb5, 0x47, 0xe3, 0x82, 0x42, 0x94, 0x47, 0xa5, 0x4e, 0xb8, 0xeb, 0x75, - 0xc5, 0xbd, 0xd1, 0xdb, 0xda, 0xb3, 0x33, 0x68, 0xd8, 0xfb, 0x30, 0x6e, 0xf3, 0x47, 0x81, 0x17, - 0x29, 0xf3, 0x87, 0x99, 0x58, 0xcb, 0x81, 0x50, 0x39, 0x44, 0x81, 0xfc, 0xa1, 0x2f, 0x56, 0x2a, - 0x67, 0x4b, 0xf2, 0x94, 0x92, 0x66, 0x0e, 0xd3, 0xc9, 0xd7, 0x56, 0x1e, 0xd4, 0x07, 0x1d, 0x52, - 0xec, 0x55, 0x18, 0xc5, 0xa3, 0x8e, 0x04, 0x38, 0x74, 0x1b, 0x40, 0x81, 0x47, 0x3f, 0x87, 0x11, - 0x83, 0x3d, 0x0f, 0x10, 0x3f, 0x17, 0x85, 0x8b, 0x45, 0x14, 0xad, 0x34, 0x48, 0xfa, 0x9c, 0x9e, - 0x38, 0xd6, 0x39, 0xbd, 0x06, 0x25, 0x9b, 0x7f, 0xad, 0xe7, 0x05, 0xbc, 0x59, 0xe9, 0xe2, 0x9b, - 0x44, 0xb8, 0x08, 0x38, 0xc1, 0xce, 0x1d, 0xec, 0x97, 0x9f, 0x0b, 0xa8, 0xcc, 0x71, 0xbb, 0xf2, - 0x29, 0xc3, 0x98, 0xdd, 0x69, 0x4a, 0xf6, 0x16, 0x8c, 0x88, 0x1d, 0x81, 0x4c, 0xca, 0x94, 0x6e, - 0x37, 0xd9, 0x24, 0xe4, 0x4d, 0xbb, 0xe1, 0x1b, 0x53, 0x15, 0x49, 0xbe, 0x73, 0x66, 0x5a, 0xbf, - 0x92, 0x87, 0x17, 0xe3, 0x43, 0xf0, 0x6e, 0x50, 0xaf, 0xdc, 0x5e, 0xab, 0x35, 0xd7, 0xe9, 0xce, - 0xb8, 0x1e, 0xf8, 0x0f, 0xbd, 0x26, 0x0f, 0xee, 0x5f, 0x3e, 0x62, 0x0b, 0x5f, 0x93, 0xcb, 0x47, - 0x2a, 0x9c, 0xf3, 0x86, 0x41, 0x8b, 0x26, 0x6b, 0x90, 0xcd, 0x4d, 0xb7, 0xdb, 0xa7, 0x7f, 0xbe, - 0xf1, 0x8c, 0x9d, 0x30, 0x60, 0x3f, 0x90, 0x83, 0x93, 0xd9, 0x0d, 0x21, 0x3d, 0x42, 0x59, 0xdd, - 0x57, 0x06, 0xb4, 0x76, 0xf9, 0x95, 0x83, 0xfd, 0xf2, 0x8b, 0xa1, 0xdb, 0x6e, 0x39, 0x5e, 0x53, - 0xd6, 0xe6, 0x35, 0xb8, 0xd3, 0x25, 0x04, 0xa3, 0xde, 0x01, 0x35, 0x7d, 0x16, 0xd4, 0x4e, 0xbe, - 0x98, 0x5b, 0x06, 0x28, 0x2a, 0x9d, 0x9e, 0xf5, 0x8f, 0x72, 0xa0, 0x4d, 0xed, 0xa2, 0xcd, 0x9b, - 0x5e, 0xc0, 0x1b, 0x11, 0xed, 0xe6, 0xe4, 0x8e, 0x23, 0x61, 0x29, 0xfb, 0x25, 0x84, 0xb1, 0xf7, - 0x60, 0x9c, 0x76, 0x1d, 0xdc, 0xb8, 0x93, 0x25, 0x41, 0xda, 0x42, 0xe9, 0xb7, 0xd5, 0xb7, 0x63, - 0x29, 0x22, 0x71, 0x2b, 0xba, 0xf9, 0x60, 0xa3, 0xda, 0x72, 0xbd, 0x76, 0x48, 0xa7, 0x1f, 0x76, - 0xeb, 0x87, 0x8f, 0x22, 0xa7, 0x81, 0x50, 0xfd, 0x56, 0x14, 0xa3, 0x5a, 0xd7, 0x95, 0xb2, 0xf2, - 0x08, 0x23, 0xbc, 0x32, 0x8c, 0xde, 0x4f, 0x94, 0x16, 0xcb, 0x13, 0x07, 0xfb, 0x65, 0x39, 0x5d, - 0x6c, 0x09, 0xb7, 0x7e, 0x2c, 0x07, 0x33, 0xe6, 0x7c, 0x62, 0x17, 0x61, 0x8c, 0x5c, 0x61, 0x72, - 0xa8, 0x9c, 0x11, 0xbd, 0x30, 0x26, 0x9d, 0x60, 0x0c, 0xd7, 0x17, 0xc2, 0x12, 0xe7, 0x37, 0x71, - 0xa0, 0xc3, 0x0b, 0xcf, 0xef, 0x86, 0x04, 0xd9, 0xaa, 0x8c, 0x59, 0x42, 0x78, 0x0f, 0x7b, 0xad, - 0x48, 0xd7, 0xd9, 0x07, 0x08, 0xb1, 0xa9, 0xc4, 0xaa, 0xc2, 0x98, 0xdc, 0x4b, 0x52, 0xc6, 0x3f, - 0xb9, 0x63, 0x18, 0xff, 0x58, 0xfb, 0x39, 0x80, 0x7a, 0xfd, 0xc6, 0x2d, 0xbe, 0xb7, 0xee, 0x7a, - 0x01, 0x3e, 0x32, 0xe1, 0xbe, 0x7d, 0x8b, 0x16, 0xd7, 0x14, 0x3d, 0x32, 0xc9, 0x3d, 0x7e, 0x97, - 0xef, 0x19, 0x8f, 0x4c, 0x0a, 0x15, 0x0f, 0x87, 0xc0, 0x7b, 0xe8, 0x46, 0x5c, 0x10, 0xe6, 0x91, - 0x50, 0x1e, 0x0e, 0x12, 0x9a, 0xa2, 0xd4, 0x90, 0xd9, 0x97, 0x61, 0x26, 0xf9, 0x15, 0x3f, 0x95, - 0xcd, 0xc4, 0x0b, 0xd8, 0x2c, 0x5c, 0x7e, 0xfe, 0x60, 0xbf, 0x7c, 0x46, 0xe3, 0x9a, 0x7e, 0x44, - 0x4b, 0x31, 0xb3, 0x7e, 0x29, 0x87, 0x0f, 0xc4, 0xea, 0x03, 0xcf, 0xc3, 0x48, 0x6c, 0xd2, 0x38, - 0x45, 0xbb, 0x8e, 0xf9, 0x1c, 0x80, 0xe5, 0xec, 0x45, 0x28, 0x24, 0x5f, 0x82, 0x7b, 0xb5, 0xf9, - 0x05, 0xa2, 0x94, 0x5d, 0x87, 0xf1, 0xa1, 0xda, 0x8c, 0x4b, 0x23, 0xa3, 0xad, 0x8a, 0x1a, 0x47, - 0xe1, 0xe6, 0x83, 0x8d, 0xef, 0xde, 0x51, 0xf8, 0xc9, 0x3c, 0xcc, 0x8a, 0x7e, 0xad, 0xf4, 0xa2, - 0x1d, 0x3f, 0xf0, 0xa2, 0xbd, 0xa7, 0x56, 0xbb, 0xf5, 0x8e, 0x21, 0x1a, 0x9f, 0x51, 0xa7, 0x8c, - 0xfe, 0x6d, 0x43, 0x29, 0xb9, 0xfe, 0x9b, 0x51, 0x98, 0xcf, 0xa0, 0x62, 0xaf, 0x1b, 0x0a, 0xe8, - 0x45, 0xe5, 0xea, 0xfa, 0xed, 0xfd, 0xf2, 0x94, 0x42, 0xdf, 0x48, 0x5c, 0x5f, 0x97, 0x4c, 0x6b, - 0x0b, 0xd9, 0x53, 0xa8, 0x8f, 0xd6, 0xad, 0x2d, 0x4c, 0x1b, 0x8b, 0x57, 0x61, 0xd4, 0xf6, 0x5b, - 0x5c, 0x59, 0x18, 0xa1, 0x84, 0x11, 0x08, 0x80, 0xf1, 0xa2, 0x2a, 0x00, 0xec, 0x06, 0x8c, 0x8b, - 0x3f, 0x6e, 0xbb, 0x5d, 0x7a, 0x2b, 0x60, 0xf1, 0xe5, 0x0c, 0xa1, 0x5d, 0xaf, 0xb3, 0xad, 0xdf, - 0xcf, 0x5a, 0xdc, 0x69, 0xbb, 0x5d, 0x43, 0x14, 0x92, 0x88, 0xc6, 0x3d, 0xaf, 0x38, 0xf8, 0x9e, - 0x97, 0x3b, 0xf2, 0x9e, 0xb7, 0x05, 0x50, 0xf7, 0xb6, 0x3b, 0x5e, 0x67, 0xbb, 0xd2, 0xda, 0x26, - 0x87, 0xe1, 0x57, 0x07, 0x8f, 0xc2, 0xc5, 0x04, 0x19, 0x27, 0xee, 0xb3, 0xf8, 0xa0, 0x27, 0x61, - 0x8e, 0xdb, 0xda, 0x36, 0x1c, 0x1b, 0x34, 0xce, 0xec, 0x0e, 0x40, 0xa5, 0x11, 0x79, 0x0f, 0xc5, - 0x14, 0x0e, 0x49, 0x6e, 0x51, 0x4d, 0xae, 0x56, 0x6e, 0xf1, 0xbd, 0x3a, 0x8f, 0x92, 0xa7, 0x11, - 0x17, 0x51, 0xc5, 0x4a, 0x30, 0xac, 0xd6, 0x13, 0x0e, 0xac, 0x0b, 0x27, 0x2a, 0xcd, 0xa6, 0x27, - 0xbe, 0xc1, 0x6d, 0xe1, 0x5b, 0x1f, 0x6f, 0x22, 0xeb, 0xa9, 0x6c, 0xd6, 0xaf, 0x12, 0xeb, 0x17, - 0xdc, 0x98, 0xca, 0x89, 0x24, 0x59, 0xba, 0x9a, 0x6c, 0xc6, 0x56, 0x1d, 0x66, 0xcc, 0x8f, 0x37, - 0x1d, 0x9d, 0xa7, 0xa0, 0x68, 0xd7, 0x2b, 0x4e, 0xfd, 0x46, 0xe5, 0x72, 0x29, 0xc7, 0x4a, 0x30, - 0x45, 0xbf, 0x96, 0x9c, 0xa5, 0x37, 0xaf, 0x96, 0xf2, 0x06, 0xe4, 0xcd, 0xcb, 0x4b, 0xa5, 0xc2, - 0x99, 0xfc, 0x62, 0x2e, 0xe5, 0x63, 0x34, 0x5e, 0x2a, 0x4a, 0x25, 0x98, 0xf5, 0xab, 0x39, 0x28, - 0xaa, 0xb6, 0xb3, 0xab, 0x50, 0xa8, 0xd7, 0x6f, 0xa4, 0xbc, 0x82, 0x92, 0x53, 0x46, 0xee, 0xa7, - 0x61, 0xa8, 0x9b, 0x7e, 0x0a, 0x02, 0x41, 0xb7, 0xb1, 0x56, 0x27, 0xe1, 0x40, 0xd1, 0x25, 0x9b, - 0xb7, 0xa4, 0xcb, 0x70, 0x95, 0xb8, 0x0a, 0x85, 0x9b, 0x0f, 0x36, 0xe8, 0x56, 0xa1, 0xe8, 0x92, - 0xfd, 0x54, 0xd2, 0x7d, 0xf8, 0x48, 0xdf, 0xe5, 0x05, 0x81, 0x65, 0xc3, 0xa4, 0x36, 0x91, 0xe5, - 0xa1, 0xdb, 0xf6, 0x63, 0xef, 0x5e, 0x3a, 0x74, 0x05, 0xc4, 0xa6, 0x12, 0x21, 0x23, 0xac, 0xf9, - 0x0d, 0xb7, 0x45, 0xa7, 0x37, 0xca, 0x08, 0x2d, 0x01, 0xb0, 0x25, 0xdc, 0xfa, 0xad, 0x1c, 0x94, - 0x50, 0x92, 0x42, 0xd3, 0x4d, 0x7f, 0x97, 0x77, 0xee, 0x5f, 0x66, 0x6f, 0xa8, 0x25, 0x97, 0x8b, - 0x15, 0x0e, 0xa3, 0xb8, 0xe4, 0x52, 0x2f, 0x16, 0xb4, 0xec, 0x34, 0x07, 0xea, 0xfc, 0xf0, 0x8e, - 0x97, 0x47, 0x38, 0x50, 0x97, 0x61, 0x14, 0x9b, 0x43, 0x9b, 0x23, 0xb6, 0x3c, 0x12, 0x00, 0x5b, - 0xc2, 0xb5, 0xbd, 0xe9, 0xa7, 0xf3, 0x7d, 0xdf, 0xb0, 0xf4, 0x5d, 0xe5, 0xbc, 0x68, 0x7e, 0xdc, - 0x50, 0xfb, 0xf5, 0x07, 0xb0, 0x90, 0xee, 0x12, 0x54, 0x06, 0x55, 0x60, 0xd6, 0x84, 0x2b, 0xbd, - 0xd0, 0xa9, 0xcc, 0xba, 0xee, 0x2f, 0xd9, 0x69, 0x7c, 0xeb, 0x7f, 0xcb, 0xc1, 0x04, 0xfe, 0x69, - 0xf7, 0x5a, 0x68, 0x42, 0x53, 0x79, 0x50, 0x27, 0xc5, 0xaf, 0x2e, 0xcc, 0xb9, 0x8f, 0x42, 0x87, - 0x74, 0xc3, 0xc6, 0x1e, 0x13, 0x23, 0x13, 0xa9, 0xd4, 0xe8, 0x2a, 0xe5, 0x48, 0x4c, 0x2a, 0x55, - 0xbf, 0x61, 0x8a, 0x94, 0x90, 0xd1, 0xf0, 0xee, 0x41, 0x5d, 0x4c, 0x3f, 0xfd, 0x4d, 0x1b, 0xe9, - 0xfc, 0x96, 0x69, 0x78, 0x27, 0xd1, 0xf0, 0x49, 0xfb, 0x41, 0xbd, 0x62, 0xdf, 0x31, 0x9e, 0xb4, - 0x45, 0x1b, 0x0d, 0x3b, 0x71, 0x42, 0xb2, 0xfe, 0x31, 0xa4, 0x3b, 0x90, 0x0e, 0xbc, 0x63, 0xae, - 0x8d, 0xb7, 0x61, 0xb4, 0xd2, 0x6a, 0xf9, 0x8f, 0x68, 0x97, 0x50, 0xba, 0xa9, 0xb8, 0xff, 0xe4, - 0x79, 0x86, 0xea, 0x15, 0xc3, 0x21, 0x4b, 0x00, 0x58, 0x15, 0x26, 0x2a, 0x0f, 0xea, 0xb5, 0xda, - 0xca, 0xc6, 0x86, 0x74, 0x3e, 0x29, 0x2c, 0xbf, 0xac, 0xfa, 0xc7, 0xf3, 0x9a, 0x4e, 0xfa, 0x55, - 0x35, 0x91, 0xdf, 0x13, 0x3a, 0xf6, 0x2e, 0xc0, 0x4d, 0xdf, 0xeb, 0x48, 0x75, 0x12, 0x7d, 0xfc, - 0xd9, 0x83, 0xfd, 0xf2, 0xe4, 0x87, 0xbe, 0xd7, 0x21, 0xfd, 0x93, 0x68, 0x7b, 0x82, 0x64, 0x6b, - 0x7f, 0x8b, 0x9e, 0x5e, 0xf6, 0xa5, 0x59, 0xcc, 0x68, 0xd2, 0xd3, 0x9b, 0x7e, 0x9f, 0x45, 0x8c, - 0x42, 0x63, 0x6d, 0x98, 0xad, 0xf7, 0xb6, 0xb7, 0xb9, 0xd8, 0xd9, 0x49, 0x81, 0x32, 0x46, 0x77, - 0xdc, 0x38, 0xe4, 0x87, 0xbc, 0x8f, 0x88, 0x5b, 0x4a, 0xb8, 0xfc, 0xba, 0x98, 0xc8, 0xdf, 0xda, - 0x2f, 0xd3, 0x6b, 0xad, 0x10, 0xd5, 0x42, 0x45, 0xdf, 0xaf, 0x3e, 0x49, 0xf3, 0x66, 0x77, 0x61, - 0xec, 0xba, 0x17, 0xdd, 0xe8, 0x6d, 0x92, 0x33, 0xc5, 0x0b, 0x87, 0x2c, 0x1a, 0x89, 0x28, 0x9f, - 0x0b, 0xb6, 0xbd, 0x68, 0xa7, 0xa7, 0x9b, 0xb3, 0x13, 0x1b, 0xf6, 0x00, 0x8a, 0x55, 0x2f, 0x68, - 0xb4, 0x78, 0xb5, 0x46, 0x67, 0xff, 0x8b, 0x87, 0xb0, 0x54, 0xa8, 0xb2, 0x5f, 0x1a, 0xf8, 0xab, - 0xe1, 0xe9, 0xb2, 0x80, 0xc2, 0x60, 0xff, 0x76, 0x0e, 0x9e, 0x8d, 0x5b, 0x5f, 0xd9, 0xe6, 0x9d, - 0xe8, 0xb6, 0x1b, 0x35, 0x76, 0x78, 0x40, 0xbd, 0x34, 0x71, 0x58, 0x2f, 0x7d, 0xb6, 0xaf, 0x97, - 0x2e, 0x24, 0xbd, 0xe4, 0x0a, 0x66, 0x4e, 0x5b, 0x72, 0xeb, 0xef, 0xb3, 0xc3, 0x6a, 0x65, 0x0e, - 0x40, 0xf2, 0xfe, 0x43, 0xce, 0x78, 0x2f, 0x1f, 0xf2, 0xc1, 0x09, 0x32, 0x19, 0xd1, 0xc7, 0xbf, - 0x0d, 0x2b, 0xb0, 0x18, 0xca, 0x6e, 0x29, 0xcf, 0x25, 0x29, 0x95, 0x9c, 0x3b, 0x84, 0xb7, 0xf4, - 0x66, 0x9a, 0x3f, 0xc4, 0x47, 0x51, 0x8e, 0xf6, 0x9a, 0xbb, 0x49, 0x82, 0xc8, 0x11, 0xa3, 0xbd, - 0xe6, 0x26, 0xa3, 0xdd, 0x72, 0xd3, 0xa3, 0xbd, 0xe6, 0x6e, 0xb2, 0xaa, 0x74, 0xb7, 0x94, 0xbe, - 0x79, 0xcf, 0x1f, 0xc6, 0xad, 0xba, 0x2e, 0x4f, 0xe6, 0x0c, 0xb7, 0xcb, 0x2f, 0xc2, 0x44, 0xbd, - 0xeb, 0x36, 0x78, 0xcb, 0xdb, 0x8a, 0xe8, 0x41, 0xf0, 0xa5, 0x43, 0x58, 0xc5, 0xb8, 0xf4, 0x98, - 0xa4, 0x7e, 0xea, 0xd7, 0xa4, 0x18, 0x47, 0xb4, 0x70, 0x63, 0xfd, 0xf6, 0xe2, 0xec, 0x91, 0x2d, - 0xdc, 0x58, 0xbf, 0x4d, 0x32, 0x47, 0xb7, 0x6d, 0xc8, 0x1c, 0xeb, 0xb7, 0x59, 0x17, 0x66, 0x36, - 0x78, 0x10, 0xb8, 0x5b, 0x7e, 0xd0, 0x96, 0x0a, 0x3b, 0xe9, 0xef, 0xf1, 0xea, 0x61, 0xfc, 0x0c, - 0x02, 0xa9, 0xa9, 0x8d, 0x14, 0xcc, 0x49, 0x6b, 0xf9, 0x52, 0xfc, 0xad, 0x5f, 0x2f, 0xc0, 0xa9, - 0x01, 0xad, 0x64, 0x77, 0xd4, 0xae, 0x98, 0x33, 0x34, 0xab, 0x03, 0xd0, 0x2f, 0x1e, 0xb9, 0x51, - 0xae, 0x41, 0x69, 0xf5, 0x16, 0x8a, 0xd3, 0x52, 0xe7, 0x5d, 0xad, 0xa8, 0xf3, 0x04, 0xb5, 0x7f, - 0x7c, 0x17, 0x4d, 0xd8, 0x94, 0xae, 0xbc, 0x61, 0xf8, 0x6a, 0xf6, 0x51, 0x9e, 0xf9, 0xfe, 0x3c, - 0x8c, 0xe0, 0xd9, 0x96, 0x8a, 0x50, 0x93, 0x3b, 0x56, 0x84, 0x9a, 0xcf, 0xc1, 0xd4, 0xea, 0x2d, - 0x79, 0xd9, 0xbd, 0xe1, 0x86, 0x3b, 0xb4, 0xf3, 0xe2, 0x8b, 0x30, 0xdf, 0x75, 0xe8, 0x6e, 0xbc, - 0xe3, 0x1a, 0x62, 0xa5, 0x41, 0xc1, 0xee, 0xc1, 0xbc, 0x6c, 0x9b, 0xb7, 0xe5, 0x35, 0x64, 0xa0, - 0x0b, 0xcf, 0x6d, 0xd1, 0x36, 0xfc, 0xe2, 0xc1, 0x7e, 0xb9, 0xcc, 0x77, 0xd1, 0x38, 0x8f, 0xca, - 0x9d, 0x10, 0x11, 0x74, 0x2b, 0xbd, 0x0c, 0x7a, 0xdd, 0xfb, 0xde, 0x9e, 0xc0, 0x0a, 0x45, 0x6d, - 0xa2, 0x6e, 0x81, 0x2b, 0x91, 0xac, 0x3f, 0x1b, 0x85, 0x33, 0x83, 0x77, 0x50, 0xf6, 0x79, 0x73, - 0x00, 0xcf, 0x1f, 0xb9, 0xe7, 0x1e, 0x3d, 0x86, 0x5f, 0x80, 0x85, 0xd5, 0x4e, 0xc4, 0x83, 0x6e, - 0xe0, 0xa9, 0x78, 0x0b, 0x37, 0xfc, 0x50, 0x19, 0x43, 0xa2, 0x55, 0x22, 0x8f, 0xcb, 0x49, 0x2f, - 0x89, 0xa6, 0x99, 0x1a, 0xab, 0x4c, 0x0e, 0x6c, 0x15, 0x66, 0x34, 0x78, 0xab, 0xb7, 0x4d, 0x32, - 0x83, 0x7c, 0x7a, 0xd0, 0x78, 0xb6, 0x7a, 0xba, 0xa5, 0x58, 0x8a, 0x08, 0x0d, 0x2e, 0xc5, 0xad, - 0xae, 0x71, 0xf3, 0xc1, 0xad, 0x3a, 0x0d, 0xa7, 0x34, 0xb8, 0x44, 0xa8, 0xf3, 0xe1, 0xa3, 0x5d, - 0x63, 0x0b, 0x4c, 0x90, 0xcf, 0xfc, 0x52, 0x81, 0x66, 0xd4, 0x8b, 0x50, 0xa8, 0xf7, 0x36, 0x69, - 0x26, 0xc9, 0x7b, 0x85, 0x71, 0x06, 0x89, 0x52, 0xf6, 0x19, 0x00, 0x9b, 0x77, 0xfd, 0xd0, 0x8b, - 0xfc, 0x60, 0x4f, 0xf7, 0xf8, 0x09, 0x62, 0xa8, 0x69, 0x94, 0xac, 0xa0, 0xec, 0x06, 0xcc, 0x26, - 0xbf, 0xee, 0x3e, 0xea, 0x90, 0x1e, 0x76, 0x42, 0x2a, 0x40, 0x12, 0x72, 0xc7, 0x17, 0x65, 0xfa, - 0xa9, 0x9a, 0x22, 0x63, 0x4b, 0x50, 0x7c, 0xe0, 0x07, 0xbb, 0x5b, 0x62, 0x8c, 0x47, 0x92, 0x73, - 0xff, 0x11, 0xc1, 0xf4, 0xf3, 0x4d, 0xe1, 0x89, 0xe5, 0xb2, 0xda, 0x79, 0xe8, 0x05, 0x7e, 0xa7, - 0xcd, 0x3b, 0x91, 0xfe, 0xd0, 0xce, 0x13, 0xb0, 0xe1, 0x6b, 0x99, 0x80, 0xc5, 0x35, 0xbf, 0xd2, - 0x88, 0xfc, 0x80, 0x5e, 0xd9, 0xe5, 0x4c, 0x11, 0x00, 0x63, 0xa6, 0x08, 0x80, 0xe8, 0x44, 0x9b, - 0x6f, 0xd1, 0x8b, 0x03, 0x76, 0x62, 0xc0, 0xb7, 0x0c, 0x47, 0x52, 0xbe, 0x25, 0xe4, 0x16, 0x9b, - 0x6f, 0xa1, 0x6e, 0xc2, 0x88, 0xbf, 0xb4, 0xd5, 0xa7, 0xd5, 0x22, 0x34, 0xeb, 0x77, 0x27, 0x06, - 0x4e, 0x79, 0x71, 0x50, 0x1c, 0x6f, 0xca, 0xaf, 0xb9, 0x43, 0x4c, 0xf9, 0xd7, 0x63, 0x53, 0x67, - 0xdd, 0x7b, 0x1a, 0x21, 0xfa, 0x49, 0x25, 0x71, 0xce, 0xfc, 0x72, 0xf1, 0x38, 0x93, 0x88, 0x3a, - 0x29, 0x3f, 0x6c, 0x27, 0x15, 0x86, 0xea, 0x24, 0xb6, 0x0c, 0xd3, 0x71, 0x04, 0xaf, 0x75, 0x37, - 0x32, 0xb6, 0xb5, 0x38, 0xec, 0x9a, 0xd3, 0x75, 0x23, 0x7d, 0x5b, 0x33, 0x49, 0xd8, 0x3b, 0x30, - 0x49, 0xf6, 0xfe, 0xc8, 0x61, 0x34, 0xb1, 0xb8, 0x54, 0xce, 0x01, 0x29, 0x7a, 0x1d, 0x5d, 0xac, - 0xe6, 0x75, 0xaf, 0xcb, 0x5b, 0x5e, 0x87, 0xd7, 0x51, 0xd1, 0x4f, 0x33, 0x06, 0x57, 0x73, 0x97, - 0x4a, 0x1c, 0xf9, 0x06, 0x60, 0xa8, 0xf8, 0x0c, 0xa2, 0xf4, 0x64, 0x1d, 0x3f, 0xd6, 0x64, 0x95, - 0x06, 0x4f, 0xc1, 0x9a, 0xbf, 0xed, 0x29, 0x13, 0x4f, 0x65, 0xf0, 0x14, 0x38, 0x2d, 0x01, 0x4d, - 0x19, 0x3c, 0x49, 0x54, 0x71, 0x09, 0x11, 0x3f, 0x6a, 0x2b, 0xf4, 0xba, 0x85, 0x97, 0x10, 0x24, - 0x32, 0xed, 0x6a, 0x25, 0x92, 0xaa, 0x66, 0xb5, 0xed, 0x7a, 0x2d, 0x72, 0x92, 0x4d, 0xaa, 0xe1, - 0x02, 0x9a, 0xae, 0x06, 0x51, 0x59, 0x03, 0xa6, 0x6c, 0xbe, 0xb5, 0x1e, 0xf8, 0x11, 0x6f, 0x44, - 0xbc, 0x49, 0x82, 0x97, 0xba, 0x7b, 0x2c, 0xfb, 0xbe, 0x14, 0x2a, 0x97, 0xdf, 0xf8, 0xdd, 0xfd, - 0x72, 0xee, 0x5b, 0xfb, 0x65, 0x10, 0x20, 0x69, 0xb4, 0x7d, 0xb0, 0x5f, 0x3e, 0x25, 0xc6, 0xbf, - 0xab, 0x88, 0xf5, 0xd3, 0x49, 0x67, 0xca, 0xbe, 0x21, 0xf6, 0xeb, 0xb8, 0x4b, 0x92, 0xca, 0xa6, - 0x06, 0x54, 0xf6, 0x66, 0x66, 0x65, 0x65, 0xad, 0xb7, 0x33, 0x2b, 0xcd, 0xac, 0x84, 0xbd, 0x0b, - 0x93, 0xd5, 0x5a, 0xd5, 0xef, 0x6c, 0x79, 0xdb, 0xf5, 0x1b, 0x15, 0x94, 0xde, 0xc8, 0x60, 0xbf, - 0xe1, 0x39, 0x0d, 0x84, 0x3b, 0xe1, 0x8e, 0x6b, 0xf8, 0x6d, 0x25, 0xf8, 0xec, 0x3a, 0xcc, 0xa8, - 0x9f, 0x36, 0xdf, 0xba, 0x67, 0xd7, 0x50, 0x68, 0x53, 0x5e, 0x12, 0x31, 0x07, 0xd1, 0x11, 0xbd, - 0x40, 0x17, 0xe6, 0x53, 0x64, 0x62, 0x32, 0xae, 0xf0, 0x6e, 0xcb, 0xdf, 0x13, 0xcd, 0xdb, 0xf0, - 0x78, 0x80, 0x62, 0x1a, 0x4d, 0xc6, 0x66, 0x5c, 0xe2, 0x44, 0x9e, 0xb1, 0xdd, 0xa6, 0x88, 0xd8, - 0x1d, 0x98, 0xa3, 0x29, 0x7e, 0xdf, 0x0b, 0xbd, 0x4d, 0xaf, 0xe5, 0x45, 0x7b, 0x28, 0xa0, 0x91, - 0x00, 0xa3, 0xd6, 0xc5, 0xc3, 0xb8, 0x54, 0x63, 0xd6, 0x4f, 0x6a, 0xfd, 0x6a, 0x1e, 0x9e, 0x3b, - 0xec, 0xb2, 0xc2, 0xea, 0xe6, 0x66, 0x76, 0x61, 0x88, 0x0b, 0xce, 0xd1, 0xdb, 0xd9, 0x2a, 0xcc, - 0xdc, 0x0d, 0xb6, 0xdd, 0x8e, 0xf7, 0x75, 0xbc, 0x84, 0xc6, 0x76, 0x5f, 0xd8, 0x19, 0xbe, 0x56, - 0x62, 0xce, 0xf6, 0x14, 0xd1, 0x99, 0x87, 0xb4, 0xcd, 0x7d, 0x54, 0x0f, 0xa2, 0xab, 0x30, 0x51, - 0xf5, 0x3b, 0x11, 0x7f, 0x1c, 0xa5, 0xfc, 0x65, 0x25, 0x30, 0xed, 0x3d, 0xa5, 0x50, 0xad, 0x7f, - 0x99, 0x87, 0xb3, 0x87, 0x4a, 0xeb, 0x6c, 0xc3, 0xec, 0xb5, 0x57, 0x87, 0x11, 0xf1, 0x8f, 0xee, - 0xb6, 0xa5, 0x3e, 0x13, 0xa5, 0x23, 0x0d, 0xf4, 0xcf, 0xfc, 0x77, 0x39, 0xea, 0xa4, 0x4f, 0xc2, - 0x38, 0x56, 0x15, 0x77, 0x91, 0x54, 0x64, 0xe1, 0x2e, 0xec, 0x99, 0x8a, 0x2c, 0x89, 0xc6, 0xae, - 0x40, 0xb1, 0xea, 0xb6, 0x5a, 0x9a, 0x37, 0x31, 0x5e, 0x42, 0x1a, 0x08, 0x4b, 0x59, 0xb4, 0x29, - 0x44, 0x21, 0xfb, 0xc8, 0xbf, 0xb5, 0xb3, 0x02, 0x37, 0x4b, 0x22, 0x4b, 0x1d, 0x17, 0x1a, 0x32, - 0xc6, 0x20, 0x6c, 0xf8, 0xb1, 0xbf, 0xa2, 0x8c, 0x41, 0x28, 0x00, 0x46, 0x0c, 0x42, 0x01, 0xb0, - 0x7e, 0xad, 0x00, 0xcf, 0x1f, 0x7e, 0xe5, 0x64, 0xf7, 0xcc, 0x21, 0x78, 0x6d, 0xa8, 0x8b, 0xea, - 0xd1, 0x63, 0xa0, 0x22, 0x7a, 0xca, 0x0e, 0xb9, 0xd0, 0x6f, 0x47, 0xff, 0xed, 0xfd, 0xb2, 0x66, - 0x26, 0x79, 0xd3, 0xf7, 0x3a, 0xda, 0xb3, 0xc6, 0xd7, 0x0c, 0xc9, 0x50, 0xbe, 0x7c, 0x5f, 0x1d, - 0xae, 0x65, 0x09, 0x9d, 0xdc, 0x57, 0x86, 0x95, 0x28, 0x3f, 0x0b, 0xa5, 0x34, 0x29, 0x3b, 0x0f, - 0x23, 0xd8, 0x00, 0xcd, 0x19, 0x20, 0xc5, 0x01, 0xcb, 0xcf, 0xdc, 0xa6, 0xb9, 0x83, 0x0e, 0xd6, - 0xf8, 0x96, 0x6e, 0xaa, 0xef, 0xc8, 0xc1, 0x5a, 0x3e, 0xc5, 0xf7, 0xab, 0xf0, 0x52, 0x44, 0xd6, - 0x5f, 0xe4, 0xe0, 0xf4, 0xc0, 0xcb, 0x3c, 0x5b, 0x37, 0x07, 0xec, 0xe5, 0xa3, 0x6e, 0xff, 0x47, - 0x8e, 0xd5, 0x99, 0x1f, 0x57, 0x73, 0xff, 0x3d, 0x98, 0xaa, 0xf7, 0x36, 0xd3, 0xf7, 0x33, 0x19, - 0xfe, 0x40, 0x83, 0xeb, 0x27, 0x98, 0x8e, 0x2f, 0xbe, 0x5f, 0x19, 0x0b, 0x90, 0x51, 0x8a, 0x66, - 0xa0, 0x15, 0x7b, 0x00, 0xf6, 0x3b, 0x98, 0x9b, 0x44, 0xd6, 0xaf, 0xe4, 0xb3, 0x2f, 0xba, 0xd7, - 0xab, 0xeb, 0xc7, 0xb9, 0xe8, 0x5e, 0xaf, 0xae, 0x1f, 0xfd, 0xed, 0xff, 0x44, 0x7d, 0x3b, 0xbe, - 0x9d, 0xd2, 0x8e, 0xa7, 0x74, 0x91, 0xf4, 0x76, 0xaa, 0x76, 0xc7, 0xd0, 0x7c, 0x3b, 0x55, 0xc8, - 0xec, 0x4d, 0x98, 0x58, 0xf3, 0xa5, 0xef, 0xb7, 0xfa, 0x62, 0xe9, 0x22, 0xa7, 0x80, 0xfa, 0xf6, - 0x18, 0x63, 0x8a, 0xbb, 0x85, 0x39, 0xf0, 0xca, 0x0e, 0x0d, 0xef, 0x16, 0xa9, 0xe9, 0x62, 0x6a, - 0xec, 0x4c, 0x32, 0xeb, 0x3f, 0x19, 0x05, 0xeb, 0x68, 0x7d, 0x03, 0xfb, 0xc0, 0xec, 0xbb, 0x8b, - 0x43, 0x6b, 0x2a, 0x86, 0xda, 0x72, 0x2b, 0xbd, 0xa6, 0xc7, 0x3b, 0x0d, 0xd3, 0x71, 0x9b, 0x60, - 0xfa, 0x16, 0xa8, 0xf0, 0x3e, 0x8a, 0x1f, 0xd5, 0x99, 0xff, 0xba, 0x90, 0x2c, 0xb5, 0xd4, 0xd1, - 0x98, 0xfb, 0x08, 0x47, 0x23, 0xbb, 0x05, 0x25, 0x1d, 0xa2, 0x3d, 0xa2, 0xa2, 0xe4, 0x62, 0x30, - 0x4a, 0x35, 0xaa, 0x8f, 0xd0, 0x3c, 0x5f, 0x0b, 0xc3, 0x9f, 0xaf, 0x89, 0xf8, 0x8e, 0xf5, 0x8f, - 0xf4, 0x8b, 0xef, 0x69, 0x5f, 0x49, 0x0d, 0x5d, 0x39, 0x7a, 0x87, 0x74, 0x68, 0x8d, 0x9a, 0x8e, - 0xde, 0x19, 0x07, 0x97, 0x8e, 0xae, 0x7c, 0xd5, 0xf1, 0xa7, 0xe6, 0xaa, 0x19, 0xfb, 0xaa, 0x4b, - 0xfa, 0x2c, 0x5f, 0xf5, 0x98, 0x44, 0x1c, 0x80, 0x76, 0xaf, 0x23, 0x83, 0xdd, 0x8e, 0x27, 0x07, - 0x60, 0xd0, 0xeb, 0x38, 0xe9, 0x80, 0xb7, 0x31, 0xa2, 0xf5, 0xe3, 0x79, 0x98, 0x91, 0x1b, 0xae, - 0x7c, 0x05, 0x79, 0x6a, 0x5f, 0x98, 0xde, 0x36, 0x5e, 0x98, 0x54, 0x74, 0x1f, 0xfd, 0xd3, 0x86, - 0x7a, 0x5f, 0xda, 0x01, 0xd6, 0x4f, 0xc3, 0x6c, 0x98, 0xd2, 0xa1, 0x87, 0x3f, 0x2d, 0x5d, 0x4e, - 0x02, 0x41, 0xd1, 0x79, 0x87, 0xef, 0x7b, 0xa1, 0x6d, 0xf0, 0xb0, 0x7e, 0x2c, 0x0f, 0xd3, 0x9a, - 0x3d, 0xc0, 0x53, 0xdb, 0xf1, 0x9f, 0x35, 0x3a, 0x7e, 0x31, 0xf6, 0x17, 0x89, 0xbf, 0x6c, 0xa8, - 0x7e, 0xef, 0xc1, 0x5c, 0x1f, 0x49, 0xda, 0xac, 0x22, 0x37, 0x8c, 0x59, 0xc5, 0xeb, 0xfd, 0x51, - 0x65, 0x64, 0x70, 0xe6, 0x38, 0xc6, 0x80, 0x1e, 0xc6, 0xe6, 0x27, 0xf3, 0xb0, 0x40, 0xbf, 0x30, - 0x0c, 0x9b, 0x94, 0x38, 0x9e, 0xda, 0xb1, 0xa8, 0x18, 0x63, 0x51, 0x36, 0xc7, 0x42, 0xfb, 0xc0, - 0xc1, 0x43, 0x62, 0xfd, 0x10, 0xc0, 0xe2, 0x20, 0x82, 0xa1, 0xdd, 0x32, 0x13, 0xa7, 0x97, 0xfc, - 0x10, 0x4e, 0x2f, 0x6b, 0x50, 0xc2, 0xaa, 0x28, 0xd0, 0x52, 0x28, 0xee, 0xad, 0x85, 0xe4, 0x92, - 0x28, 0x63, 0xe5, 0x51, 0xe0, 0xa7, 0x30, 0x75, 0x71, 0xed, 0xa3, 0x64, 0xbf, 0x94, 0x83, 0x19, - 0x04, 0xae, 0x3e, 0xe4, 0x9d, 0x08, 0x99, 0x8d, 0x90, 0x8f, 0x46, 0xfc, 0x00, 0x55, 0x8f, 0x02, - 0xaf, 0xb3, 0x4d, 0x2f, 0x50, 0x9b, 0xf4, 0x02, 0xf5, 0x8e, 0x7c, 0x39, 0xbb, 0xd8, 0xf0, 0xdb, - 0x97, 0xb6, 0x03, 0xf7, 0xa1, 0x27, 0x4d, 0x5d, 0xdc, 0xd6, 0xa5, 0x24, 0x37, 0x40, 0xd7, 0x4b, - 0x45, 0xfb, 0x27, 0x56, 0xf8, 0xba, 0x27, 0x1b, 0xca, 0xb1, 0xda, 0xf4, 0xfd, 0xda, 0x6c, 0x11, - 0xfb, 0x1e, 0x38, 0x25, 0xc3, 0x9f, 0x88, 0x6b, 0x9a, 0xd7, 0xe9, 0xf9, 0xbd, 0x70, 0xd9, 0x6d, - 0xec, 0x0a, 0x59, 0x4d, 0xfa, 0x99, 0xe1, 0x97, 0x37, 0xe2, 0x42, 0x67, 0x53, 0x96, 0x1a, 0x7e, - 0xb5, 0xd9, 0x0c, 0xd8, 0x0d, 0x98, 0x93, 0x45, 0x95, 0x5e, 0xe4, 0xd7, 0x1b, 0x6e, 0xcb, 0xeb, - 0x6c, 0xe3, 0x81, 0x50, 0x94, 0xe7, 0x91, 0xdb, 0x8b, 0x7c, 0x27, 0x94, 0x70, 0xfd, 0xba, 0xdd, - 0x47, 0xc4, 0x6a, 0x30, 0x6b, 0x73, 0xb7, 0x79, 0xdb, 0x7d, 0x5c, 0x75, 0xbb, 0x6e, 0x43, 0x5c, - 0xde, 0x8b, 0xf8, 0x5a, 0x8b, 0xa7, 0x72, 0xc0, 0xdd, 0xa6, 0xd3, 0x76, 0x1f, 0x3b, 0x0d, 0x2a, - 0x34, 0xf5, 0xae, 0x06, 0x5d, 0xcc, 0xca, 0xeb, 0xc4, 0xac, 0x26, 0xd2, 0xac, 0xbc, 0xce, 0x60, - 0x56, 0x09, 0x9d, 0x62, 0xb5, 0xe1, 0x06, 0xdb, 0x3c, 0x92, 0x96, 0xa2, 0x70, 0x2e, 0x77, 0x21, - 0xa7, 0xb1, 0x8a, 0xb0, 0xcc, 0x41, 0xab, 0xd1, 0x34, 0x2b, 0x8d, 0x4e, 0xcc, 0xbc, 0x07, 0x81, - 0x17, 0x71, 0xfd, 0x0b, 0x27, 0xb1, 0x59, 0xd8, 0xff, 0x68, 0x63, 0x3b, 0xe8, 0x13, 0xfb, 0x28, - 0x13, 0x6e, 0xda, 0x47, 0x4e, 0xf5, 0x71, 0xcb, 0xfe, 0xca, 0x3e, 0xca, 0x98, 0x9b, 0xfe, 0x9d, - 0xd3, 0xf8, 0x9d, 0x1a, 0xb7, 0x01, 0x1f, 0xda, 0x47, 0xc9, 0xee, 0x88, 0x4e, 0x8b, 0x78, 0x47, - 0xcc, 0x68, 0xb2, 0x94, 0x9d, 0xc1, 0xa6, 0xbd, 0x44, 0xe6, 0x5e, 0xa5, 0x40, 0x15, 0x3b, 0x19, - 0x76, 0xb3, 0x69, 0x62, 0xf6, 0x37, 0x60, 0xf6, 0x5e, 0xc8, 0xaf, 0xd5, 0xd6, 0xeb, 0x2a, 0x5a, - 0x0a, 0x6a, 0x88, 0x66, 0x96, 0x2e, 0x1f, 0xb1, 0xe9, 0x5c, 0xd4, 0x69, 0x30, 0x44, 0xbf, 0x1c, - 0xb7, 0x5e, 0xc8, 0x9d, 0x2d, 0xaf, 0x1b, 0xc6, 0xa1, 0xa7, 0xf4, 0x71, 0x4b, 0x55, 0x65, 0xdd, - 0x80, 0xb9, 0x3e, 0x36, 0x6c, 0x06, 0x40, 0x00, 0x9d, 0x7b, 0x77, 0xea, 0xab, 0x1b, 0xa5, 0x67, - 0x58, 0x09, 0xa6, 0xf0, 0xf7, 0xea, 0x9d, 0xca, 0xf2, 0xda, 0xea, 0x4a, 0x29, 0xc7, 0xe6, 0x60, - 0x1a, 0x21, 0x2b, 0xb5, 0xba, 0x04, 0xe5, 0x65, 0x80, 0x66, 0xbb, 0x24, 0x97, 0x6e, 0x24, 0x16, - 0x00, 0x9e, 0x29, 0xd6, 0xdf, 0xcd, 0xc3, 0x69, 0x75, 0xac, 0xf0, 0x48, 0x88, 0x60, 0x5e, 0x67, - 0xfb, 0x29, 0x3f, 0x1d, 0xae, 0x19, 0xa7, 0xc3, 0x4b, 0xa9, 0x93, 0x3a, 0xf5, 0x95, 0x87, 0x1c, - 0x11, 0xbf, 0x39, 0x01, 0x67, 0x0f, 0xa5, 0x62, 0x9f, 0x17, 0xa7, 0xb9, 0xc7, 0x3b, 0x51, 0xad, - 0xd9, 0xe2, 0x1b, 0x5e, 0x9b, 0xfb, 0xbd, 0x88, 0x2c, 0xb3, 0x5f, 0x44, 0xa5, 0x0c, 0x16, 0x3a, - 0x5e, 0xb3, 0xc5, 0x9d, 0x48, 0x16, 0x1b, 0xd3, 0xad, 0x9f, 0x5a, 0xb0, 0x8c, 0xd3, 0x85, 0xd4, - 0x3a, 0x11, 0x0f, 0x1e, 0xa2, 0xf5, 0x57, 0xcc, 0x72, 0x97, 0xf3, 0xae, 0xe3, 0x8a, 0x52, 0xc7, - 0xa3, 0x62, 0x93, 0x65, 0x1f, 0x35, 0xbb, 0xa6, 0xb1, 0xac, 0x8a, 0x2b, 0xdc, 0x6d, 0xf7, 0x31, - 0x99, 0xa3, 0x50, 0xf4, 0xbd, 0x98, 0xa5, 0x74, 0x05, 0x6d, 0xbb, 0x8f, 0xed, 0x7e, 0x12, 0xf6, - 0x65, 0x38, 0x41, 0x07, 0x10, 0xb9, 0xf2, 0xab, 0x2f, 0x96, 0x81, 0x02, 0x5e, 0x39, 0xd8, 0x2f, - 0x9f, 0x52, 0x71, 0x0b, 0x55, 0xf0, 0x86, 0xac, 0xaf, 0xce, 0xe6, 0xc2, 0x36, 0xc4, 0x81, 0x9c, - 0xea, 0x8e, 0xdb, 0x3c, 0x0c, 0x95, 0x8f, 0x12, 0x5d, 0x6f, 0xf4, 0xce, 0x74, 0xda, 0xb2, 0xdc, - 0x1e, 0x48, 0xc9, 0x6e, 0xc0, 0xcc, 0x03, 0xbe, 0xa9, 0x8f, 0xcf, 0x58, 0xbc, 0x55, 0x95, 0x1e, - 0xf1, 0xcd, 0xc1, 0x83, 0x93, 0xa2, 0x63, 0x1e, 0x2a, 0x79, 0x1f, 0xef, 0xad, 0x79, 0x61, 0xc4, - 0x3b, 0x3c, 0xc0, 0x10, 0x31, 0xe3, 0xb8, 0x19, 0x2c, 0x26, 0x12, 0xb2, 0x59, 0xbe, 0xfc, 0xc2, - 0xc1, 0x7e, 0xf9, 0xac, 0x74, 0xf6, 0x6b, 0x11, 0xdc, 0x49, 0x25, 0xdb, 0xe8, 0xe7, 0xca, 0xbe, - 0x0a, 0xb3, 0xb6, 0xdf, 0x8b, 0xbc, 0xce, 0x76, 0x3d, 0x0a, 0xdc, 0x88, 0x6f, 0xcb, 0x03, 0x29, - 0x89, 0x45, 0x93, 0x2a, 0xa5, 0xf7, 0x41, 0x09, 0x74, 0x42, 0x82, 0x1a, 0x27, 0x82, 0x49, 0xc0, - 0xbe, 0x02, 0x33, 0xd2, 0x89, 0x3b, 0xae, 0x60, 0xc2, 0x08, 0x14, 0x6e, 0x16, 0xde, 0xbf, 0x4c, - 0xd6, 0x03, 0x08, 0xcd, 0xaa, 0x20, 0xc5, 0x8d, 0x7d, 0x91, 0x3a, 0x6b, 0xdd, 0xeb, 0x6c, 0xc7, - 0xd3, 0x18, 0xb0, 0xe7, 0xdf, 0x48, 0xba, 0xa4, 0x2b, 0x9a, 0xab, 0xa6, 0xf1, 0x00, 0x53, 0xa8, - 0x7e, 0x3e, 0x2c, 0x82, 0xb3, 0x95, 0x30, 0xf4, 0xc2, 0x88, 0xfc, 0x17, 0x56, 0x1f, 0xf3, 0x46, - 0x4f, 0x20, 0x8b, 0x8b, 0x22, 0x0f, 0xa4, 0xfd, 0xec, 0xe8, 0xf2, 0xc5, 0x83, 0xfd, 0xf2, 0x6b, - 0x2e, 0x22, 0x3a, 0xe4, 0xf2, 0xe0, 0x70, 0x85, 0xea, 0x3c, 0x92, 0xb8, 0xda, 0x37, 0x1c, 0xce, - 0x94, 0x7d, 0x05, 0x4e, 0x56, 0xdd, 0x90, 0xd7, 0x3a, 0x21, 0xef, 0x84, 0x5e, 0xe4, 0x3d, 0xe4, - 0xd4, 0xa9, 0x78, 0xf8, 0x15, 0x31, 0x2d, 0x89, 0xd5, 0x70, 0x43, 0xb1, 0x30, 0x63, 0x14, 0x87, - 0x06, 0x45, 0xab, 0x66, 0x00, 0x17, 0x66, 0xc3, 0x4c, 0xbd, 0x7e, 0x63, 0xc5, 0x73, 0xe3, 0x75, - 0x35, 0x8d, 0xfd, 0xf5, 0x1a, 0xea, 0x67, 0xc2, 0x1d, 0xa7, 0xe9, 0xb9, 0xf1, 0x82, 0x1a, 0xd0, - 0x59, 0x29, 0x0e, 0xd6, 0x7e, 0x0e, 0x4a, 0xe9, 0xa1, 0x64, 0x5f, 0x80, 0x09, 0x69, 0x47, 0xc4, - 0xc3, 0x1d, 0xf2, 0x69, 0x56, 0x66, 0x29, 0x31, 0xdc, 0x24, 0x22, 0x7f, 0x22, 0x69, 0xa5, 0xc4, - 0x75, 0x93, 0x07, 0xf4, 0x27, 0x52, 0x44, 0xac, 0x09, 0x53, 0x72, 0xb4, 0x38, 0x06, 0xa2, 0x22, - 0x73, 0xd2, 0x17, 0xf4, 0xd5, 0x41, 0x45, 0x29, 0xfe, 0xf8, 0xf4, 0x43, 0x73, 0x42, 0x22, 0x18, - 0x55, 0x18, 0x5c, 0x97, 0x01, 0x8a, 0x8a, 0xd0, 0x3a, 0x0d, 0xa7, 0x06, 0xb4, 0xd9, 0x7a, 0x88, - 0xcf, 0xc1, 0x03, 0x6a, 0x64, 0x5f, 0x80, 0x05, 0x24, 0xac, 0xfa, 0x9d, 0x0e, 0x6f, 0x44, 0xb8, - 0x1d, 0x29, 0x15, 0x6a, 0x41, 0x9a, 0x2b, 0xc8, 0xef, 0x6d, 0xc4, 0x08, 0x4e, 0x5a, 0x93, 0x9a, - 0xc9, 0xc1, 0xfa, 0xb9, 0x3c, 0x2c, 0xd2, 0x0e, 0x67, 0xf3, 0x86, 0x1f, 0x34, 0x9f, 0xfe, 0x13, - 0x75, 0xd5, 0x38, 0x51, 0x5f, 0x8c, 0x83, 0x58, 0x64, 0x7d, 0xe4, 0x21, 0x07, 0xea, 0xaf, 0xe4, - 0xe0, 0xb9, 0xc3, 0x88, 0x44, 0xef, 0xc4, 0x81, 0xb7, 0x26, 0xfa, 0x02, 0x6c, 0x75, 0x61, 0x1e, - 0x07, 0xb4, 0xba, 0xc3, 0x1b, 0xbb, 0xe1, 0x0d, 0x3f, 0x8c, 0xd0, 0xa2, 0x3d, 0x3f, 0xe0, 0xc1, - 0xf2, 0xf5, 0xcc, 0x07, 0xcb, 0x93, 0x72, 0x96, 0x35, 0x90, 0x87, 0x0c, 0x0d, 0xb6, 0xcb, 0xf7, - 0x42, 0x3b, 0x8b, 0x35, 0x5a, 0x26, 0x57, 0x7a, 0xd1, 0xce, 0x7a, 0xc0, 0xb7, 0x78, 0xc0, 0x3b, - 0x0d, 0xfe, 0x5d, 0x66, 0x99, 0x6c, 0x7e, 0xdc, 0x50, 0x1a, 0x8c, 0x7f, 0x32, 0x0d, 0x0b, 0x59, - 0x64, 0xa2, 0x5f, 0xb4, 0x4b, 0x73, 0x3a, 0x6b, 0xda, 0x0f, 0xe6, 0x60, 0xaa, 0xce, 0x1b, 0x7e, - 0xa7, 0x79, 0x0d, 0xcd, 0x42, 0xa8, 0x77, 0x1c, 0x29, 0x34, 0x08, 0xb8, 0xb3, 0x95, 0xb2, 0x17, - 0xf9, 0xf6, 0x7e, 0xf9, 0x73, 0xc3, 0xdd, 0x55, 0x1b, 0x3e, 0x06, 0xa2, 0x88, 0x30, 0xaa, 0x77, - 0x5c, 0x05, 0xbe, 0xf0, 0x18, 0x95, 0xb2, 0x65, 0x98, 0xa6, 0xe5, 0xea, 0xeb, 0x71, 0xd7, 0x64, - 0x9c, 0x0f, 0x55, 0xd0, 0xa7, 0x7f, 0x34, 0x48, 0xd8, 0x15, 0x28, 0xdc, 0x5b, 0xba, 0x46, 0x63, - 0xa0, 0xe2, 0xa2, 0xdf, 0x5b, 0xba, 0x86, 0xea, 0x30, 0x71, 0xc5, 0x98, 0xee, 0x2d, 0x19, 0x96, - 0x1a, 0xf7, 0x96, 0xae, 0xb1, 0xbf, 0x09, 0x27, 0x56, 0xbc, 0x90, 0xaa, 0x90, 0x36, 0xf2, 0x4d, - 0xf4, 0x0c, 0x1b, 0x1b, 0x30, 0x7b, 0x3f, 0x9d, 0x39, 0x7b, 0x5f, 0x68, 0xc6, 0x4c, 0x1c, 0x69, - 0x80, 0xdf, 0x4c, 0xc7, 0x97, 0xcb, 0xae, 0x87, 0x7d, 0x08, 0x33, 0xa8, 0x3b, 0x47, 0xb7, 0x01, - 0x8c, 0x0c, 0x3c, 0x3e, 0xa0, 0xe6, 0x4f, 0x66, 0xd6, 0x7c, 0x46, 0xfa, 0x97, 0xa3, 0xf3, 0x01, - 0x46, 0x11, 0x36, 0x6e, 0xfd, 0x06, 0x67, 0x76, 0x13, 0x66, 0x49, 0xfc, 0xba, 0xbb, 0xb5, 0xb1, - 0xc3, 0x57, 0xdc, 0x3d, 0x32, 0xb2, 0xc0, 0x1b, 0x1d, 0xc9, 0x6c, 0x8e, 0xbf, 0xe5, 0x44, 0x3b, - 0xdc, 0x69, 0xba, 0x86, 0xa0, 0x92, 0x22, 0x64, 0xdf, 0x80, 0xc9, 0x35, 0xbf, 0x21, 0x24, 0x6f, - 0xdc, 0x19, 0xa4, 0xdd, 0xc5, 0x07, 0x98, 0x97, 0x4b, 0x82, 0x53, 0xe2, 0xd4, 0xb7, 0xf7, 0xcb, - 0x6f, 0x1f, 0x77, 0xd2, 0x68, 0x15, 0xd8, 0x7a, 0x6d, 0xac, 0x0a, 0xc5, 0x07, 0x7c, 0x53, 0x7c, - 0x6d, 0x3a, 0x67, 0x8f, 0x02, 0x93, 0x59, 0x15, 0xfd, 0x32, 0xcc, 0xaa, 0x08, 0xc6, 0x02, 0x98, - 0xc3, 0xfe, 0x59, 0x77, 0xc3, 0xf0, 0x91, 0x1f, 0x34, 0x31, 0x38, 0xfb, 0x20, 0x93, 0x8e, 0xa5, - 0xcc, 0xce, 0x7f, 0x4e, 0x76, 0x7e, 0x57, 0xe3, 0xa0, 0x0b, 0x90, 0x7d, 0xec, 0xd9, 0x57, 0x61, - 0x86, 0x9c, 0xa2, 0x6f, 0x5f, 0xab, 0xe0, 0xaa, 0x9c, 0x32, 0xfc, 0xeb, 0xcc, 0x42, 0x29, 0xa5, - 0x92, 0x8f, 0xb5, 0xd2, 0x40, 0x39, 0xed, 0x2d, 0xd7, 0x7c, 0x35, 0xd3, 0x49, 0xd8, 0x3a, 0x4c, - 0xae, 0xf0, 0x87, 0x5e, 0x83, 0xa3, 0x0f, 0x10, 0xd9, 0xdf, 0xc6, 0x49, 0x47, 0x92, 0x12, 0xa9, - 0x8b, 0x69, 0x22, 0x40, 0x7a, 0x14, 0x99, 0x06, 0x97, 0x31, 0x22, 0xbb, 0x0a, 0x85, 0xda, 0xca, - 0x3a, 0x99, 0xdf, 0x2a, 0xb7, 0x9a, 0x5a, 0x73, 0x5d, 0xa5, 0x68, 0x40, 0x23, 0x28, 0xaf, 0x69, - 0x18, 0xef, 0xd6, 0x56, 0xd6, 0xd9, 0x16, 0x4c, 0x63, 0x07, 0xdc, 0xe0, 0xae, 0xec, 0xdb, 0xd9, - 0x01, 0x7d, 0x7b, 0x31, 0xb3, 0x6f, 0x17, 0x65, 0xdf, 0xee, 0x10, 0xb5, 0x11, 0x73, 0x5e, 0x67, - 0x2b, 0x44, 0x5a, 0xca, 0x83, 0xa1, 0x22, 0xa5, 0x6f, 0xac, 0xa1, 0x91, 0x07, 0x89, 0xb4, 0x2a, - 0x6d, 0x46, 0x1c, 0xba, 0x7d, 0xa0, 0x75, 0x7f, 0x3f, 0x1f, 0xf6, 0x59, 0x18, 0xb9, 0xbb, 0x1b, - 0xb9, 0x8b, 0x73, 0x46, 0x3f, 0x0a, 0x90, 0xfa, 0x7c, 0xd4, 0x42, 0xfa, 0xbb, 0x46, 0x04, 0x22, - 0xa4, 0x11, 0x43, 0x71, 0xc3, 0x0d, 0x9a, 0x8f, 0xdc, 0x00, 0x1d, 0x31, 0xe7, 0x0d, 0x16, 0x5a, - 0x89, 0x1c, 0x8a, 0x1d, 0x02, 0xa4, 0xbc, 0x33, 0x75, 0x16, 0xec, 0x7b, 0xe0, 0x74, 0xe8, 0x6d, - 0x77, 0xdc, 0xa8, 0x17, 0x70, 0xc7, 0x6d, 0x6d, 0xfb, 0x81, 0x17, 0xed, 0xb4, 0x9d, 0xb0, 0xe7, - 0x45, 0x7c, 0x71, 0xc1, 0xc8, 0x9a, 0x59, 0x57, 0x78, 0x15, 0x85, 0x56, 0x17, 0x58, 0xf6, 0xa9, - 0x30, 0xbb, 0x80, 0x7d, 0x11, 0xa6, 0xf5, 0x2d, 0x39, 0x5c, 0x3c, 0x71, 0xae, 0x70, 0x61, 0x26, - 0xbe, 0x78, 0xa4, 0x37, 0x70, 0x15, 0x6d, 0x52, 0x3b, 0x21, 0x42, 0x33, 0xda, 0xa4, 0xc6, 0x2b, - 0xce, 0x43, 0xc5, 0x4a, 0xf3, 0xf6, 0x1c, 0xcd, 0x58, 0xea, 0xe5, 0xdb, 0xd7, 0x2a, 0xf6, 0xf8, - 0x7a, 0xed, 0x7e, 0xbd, 0xe5, 0x47, 0xd6, 0x7f, 0x91, 0xc3, 0x4d, 0x9c, 0xbd, 0x86, 0x81, 0x53, - 0xe2, 0xe7, 0x3c, 0xd4, 0xdf, 0xba, 0xdd, 0x54, 0xa8, 0x62, 0x89, 0xc2, 0x5e, 0x87, 0xb1, 0x6b, - 0x6e, 0x83, 0x47, 0xea, 0xd1, 0x15, 0x91, 0xb7, 0x10, 0xa2, 0x2b, 0x7b, 0x25, 0x8e, 0x90, 0x2f, - 0xe5, 0xe4, 0xae, 0x24, 0x89, 0x55, 0xab, 0x15, 0xf5, 0xe6, 0x8a, 0xf2, 0x25, 0x2d, 0x0a, 0x2d, - 0xf3, 0x6a, 0xca, 0xb4, 0x39, 0x93, 0x83, 0xf5, 0x67, 0xb9, 0x64, 0x57, 0x62, 0xaf, 0xc0, 0x88, - 0xbd, 0x1e, 0xb7, 0x5f, 0x3a, 0x57, 0xa6, 0x9a, 0x8f, 0x08, 0xec, 0x8b, 0x70, 0x42, 0xe3, 0xd3, - 0x67, 0x67, 0xfd, 0x32, 0xfa, 0xfe, 0x69, 0x2d, 0xc9, 0x36, 0xb6, 0xce, 0xe6, 0x81, 0xc2, 0x74, - 0x52, 0xb0, 0xc2, 0x3b, 0x9e, 0xe4, 0xad, 0x7d, 0xac, 0xce, 0xbb, 0x89, 0x08, 0xe9, 0x8f, 0xcd, - 0xe2, 0x20, 0x5d, 0xff, 0xac, 0xdf, 0xc8, 0x19, 0xbb, 0x4d, 0x9c, 0xc1, 0x32, 0x77, 0x44, 0x06, - 0xcb, 0xb7, 0x00, 0x2a, 0xbd, 0xc8, 0x5f, 0xed, 0x04, 0x7e, 0x4b, 0x6a, 0x51, 0x28, 0x5a, 0x37, - 0xea, 0x86, 0x39, 0x82, 0x0d, 0x0f, 0xa5, 0x18, 0x39, 0xd3, 0x24, 0xbd, 0xf0, 0x51, 0x4d, 0xd2, - 0xad, 0xdf, 0xcb, 0x19, 0x6b, 0x54, 0x48, 0x89, 0x34, 0x15, 0x75, 0xb3, 0x9f, 0xae, 0xf7, 0xd0, - 0x09, 0x5b, 0xbe, 0xbe, 0x43, 0x2a, 0x34, 0xf6, 0x6f, 0xe6, 0xe0, 0xa4, 0xb4, 0xed, 0xbe, 0xd3, - 0x6b, 0x6f, 0xf2, 0xe0, 0xbe, 0xdb, 0xf2, 0x9a, 0xd2, 0xc1, 0x55, 0x0a, 0xc0, 0x17, 0xfa, 0x17, - 0x7c, 0x36, 0xbe, 0xbc, 0xa8, 0x4a, 0x5b, 0x73, 0xa7, 0x83, 0x85, 0xce, 0xc3, 0xb8, 0x54, 0xbf, - 0xa8, 0x66, 0xd3, 0x5b, 0xbf, 0x9a, 0x83, 0x17, 0x8e, 0xac, 0x85, 0x5d, 0x82, 0x71, 0x15, 0x26, - 0x3d, 0x87, 0x1d, 0x8f, 0xc6, 0x92, 0xfd, 0x21, 0xd2, 0x15, 0x16, 0xfb, 0x12, 0x9c, 0xd0, 0x59, - 0x6d, 0x04, 0xae, 0xa7, 0x07, 0x23, 0xcf, 0x68, 0x75, 0x24, 0x50, 0xd2, 0xd2, 0x5a, 0x36, 0x13, - 0xeb, 0xff, 0xcf, 0x69, 0x39, 0x6d, 0x9f, 0x52, 0x19, 0xfe, 0xaa, 0x21, 0xc3, 0xab, 0x90, 0x75, - 0xf1, 0x57, 0x89, 0xb2, 0xcc, 0x7b, 0xd7, 0xac, 0x66, 0xf4, 0x8b, 0x80, 0x1f, 0xc9, 0xc3, 0xe4, - 0xbd, 0x90, 0x07, 0xf2, 0x21, 0xf7, 0xbb, 0x2b, 0x34, 0x59, 0xfc, 0x5d, 0x43, 0x05, 0x8f, 0xfa, - 0x93, 0x1c, 0x2a, 0xf8, 0x75, 0x0a, 0xd1, 0x1b, 0x5a, 0x1e, 0x2b, 0xec, 0x0d, 0xcc, 0x60, 0x85, - 0x50, 0x19, 0xb3, 0x68, 0xcd, 0x4c, 0x69, 0x87, 0x79, 0x0d, 0xd7, 0xd8, 0xe7, 0x60, 0xf4, 0x1e, - 0xaa, 0x2b, 0xcd, 0x60, 0x06, 0x31, 0x7f, 0x2c, 0x94, 0x9b, 0x74, 0x2f, 0x34, 0xe3, 0x2c, 0x49, - 0x42, 0x56, 0x87, 0xf1, 0x6a, 0xc0, 0x31, 0x43, 0xed, 0xc8, 0xf0, 0xae, 0xb8, 0x0d, 0x49, 0x92, - 0x76, 0xc5, 0x25, 0x4e, 0xd6, 0xcf, 0xe6, 0x81, 0x25, 0xdf, 0x88, 0xe9, 0x58, 0xc2, 0xa7, 0x76, - 0xd0, 0xdf, 0x37, 0x06, 0xfd, 0x6c, 0xdf, 0xa0, 0xcb, 0xcf, 0x1b, 0x6a, 0xec, 0x7f, 0x2b, 0x07, - 0x27, 0xb3, 0x09, 0xd9, 0x8b, 0x30, 0x76, 0x77, 0x63, 0x5d, 0xc5, 0xc3, 0xa0, 0x4f, 0xf1, 0xbb, - 0xa8, 0x2b, 0xb0, 0xa9, 0x88, 0xbd, 0x01, 0x63, 0x9f, 0xb7, 0xab, 0xe2, 0x1c, 0xd2, 0x02, 0x7e, - 0x7f, 0x2d, 0x70, 0x1a, 0xe6, 0x51, 0x44, 0x48, 0xfa, 0xd8, 0x16, 0x9e, 0xd8, 0xd8, 0xfe, 0x64, - 0x1e, 0x66, 0x2b, 0x8d, 0x06, 0x0f, 0x43, 0x21, 0xed, 0xf0, 0x30, 0x7a, 0x6a, 0x07, 0x36, 0x3b, - 0xd2, 0x85, 0xf1, 0x6d, 0x43, 0x8d, 0xea, 0xef, 0xe4, 0xe0, 0x84, 0xa2, 0x7a, 0xe8, 0xf1, 0x47, - 0x1b, 0x3b, 0x01, 0x0f, 0x77, 0xfc, 0x56, 0x73, 0xe8, 0xac, 0x02, 0x42, 0xd0, 0xc3, 0x50, 0xc1, - 0xfa, 0xab, 0xfe, 0x16, 0x42, 0x0c, 0x41, 0x4f, 0x86, 0x13, 0xbe, 0x04, 0xe3, 0x95, 0x6e, 0x37, - 0xf0, 0x1f, 0xca, 0x65, 0x4f, 0x91, 0xd4, 0x5c, 0x09, 0x32, 0x3c, 0x99, 0x25, 0x48, 0x34, 0x63, - 0x85, 0x77, 0x64, 0x8c, 0xb0, 0x69, 0xd9, 0x8c, 0x26, 0xef, 0xe8, 0xb2, 0x38, 0x96, 0x5b, 0x75, - 0x60, 0xeb, 0x81, 0xdf, 0xf6, 0x23, 0xde, 0x94, 0xdf, 0x83, 0x0e, 0xe0, 0x47, 0xc6, 0x14, 0xda, - 0xf0, 0xa2, 0x96, 0x11, 0x53, 0x28, 0x12, 0x00, 0x5b, 0xc2, 0xad, 0xff, 0x7b, 0x14, 0xa6, 0xf4, - 0xde, 0x61, 0x96, 0x0c, 0x15, 0xee, 0x07, 0x7a, 0x14, 0x02, 0x17, 0x21, 0x36, 0x95, 0x24, 0x21, - 0x3c, 0xf2, 0x47, 0x86, 0xf0, 0x78, 0x00, 0xd3, 0xeb, 0x81, 0x8f, 0x21, 0xdf, 0x64, 0xe6, 0x72, - 0xb9, 0x15, 0xce, 0x6b, 0xf7, 0x4e, 0x31, 0x90, 0xf8, 0x1e, 0x8a, 0x92, 0x7d, 0x97, 0xb0, 0x9d, - 0x74, 0x5e, 0x73, 0x93, 0x8f, 0x34, 0xb5, 0x70, 0x43, 0x8a, 0xdb, 0x18, 0x9b, 0x5a, 0x08, 0x88, - 0x69, 0x6a, 0x21, 0x20, 0xfa, 0x5a, 0x1b, 0x7d, 0x52, 0x6b, 0x8d, 0xfd, 0x6c, 0x0e, 0x26, 0x2b, - 0x9d, 0x0e, 0x85, 0x06, 0x39, 0xc2, 0x2b, 0xfa, 0x4b, 0x64, 0x6d, 0xf1, 0xf6, 0x47, 0xb2, 0xb6, - 0x40, 0xb9, 0x25, 0x44, 0x49, 0x35, 0xa9, 0x50, 0xbf, 0xad, 0x69, 0xed, 0x60, 0x6f, 0x43, 0x29, - 0x9e, 0xe4, 0xb5, 0x4e, 0x93, 0x3f, 0xe6, 0x32, 0xd5, 0xd2, 0x34, 0x45, 0x6c, 0xd5, 0x25, 0xd3, - 0x34, 0x22, 0xdb, 0x00, 0x70, 0xe3, 0xd9, 0x95, 0xca, 0x19, 0xd7, 0x3f, 0xfd, 0x48, 0x7a, 0xc6, - 0xdf, 0xf8, 0xa0, 0xa5, 0x4b, 0xcf, 0x09, 0x1f, 0xd6, 0x86, 0x59, 0x99, 0xb0, 0x0d, 0x13, 0xb9, - 0x63, 0x60, 0x72, 0x38, 0x72, 0x1c, 0x5e, 0x21, 0xfd, 0xd9, 0xb3, 0x94, 0x06, 0x0e, 0x73, 0xc3, - 0x3b, 0x19, 0x51, 0xca, 0xd3, 0xbc, 0x65, 0x7c, 0x5c, 0xfb, 0x54, 0x7f, 0x7b, 0xe5, 0xa4, 0xff, - 0xc9, 0x1c, 0x9c, 0xd4, 0x27, 0x7d, 0xbd, 0xb7, 0xd9, 0xf6, 0xf0, 0x52, 0xc8, 0x2e, 0xc2, 0x04, - 0xcd, 0xc9, 0xf8, 0x12, 0xd5, 0x1f, 0x5f, 0x3d, 0x41, 0x61, 0xab, 0x62, 0x1a, 0x0a, 0x1e, 0x24, - 0x75, 0xcf, 0xa7, 0xf6, 0x29, 0x51, 0x94, 0x24, 0x03, 0x0d, 0xf0, 0xb7, 0x39, 0x3f, 0x05, 0xc4, - 0x7a, 0x0f, 0xe6, 0xcc, 0x91, 0xa8, 0xf3, 0x88, 0xbd, 0x0a, 0xe3, 0x6a, 0xf8, 0x72, 0xd9, 0xc3, - 0xa7, 0xca, 0xad, 0x07, 0xc0, 0xfa, 0xe8, 0x43, 0x34, 0x8b, 0xe2, 0x91, 0x32, 0xdb, 0x53, 0x8f, - 0x92, 0x7d, 0x88, 0xcb, 0xf3, 0xd4, 0xbe, 0x49, 0xc3, 0xb6, 0x5c, 0x90, 0x5a, 0x7f, 0x36, 0x03, - 0xf3, 0x19, 0x7b, 0xee, 0x11, 0x32, 0x51, 0xd9, 0xdc, 0x20, 0x26, 0xe2, 0xa0, 0x0a, 0x6a, 0x5b, - 0x78, 0x0f, 0x46, 0x8f, 0xdc, 0x0e, 0xa4, 0x67, 0x41, 0x6a, 0x17, 0x90, 0x64, 0xdf, 0x11, 0xb9, - 0x48, 0x8f, 0x7b, 0x32, 0xfa, 0xc4, 0xe2, 0x9e, 0x2c, 0xc3, 0x34, 0x7d, 0x15, 0x6d, 0x57, 0x9a, - 0x85, 0x6b, 0x20, 0x0b, 0x9c, 0xbe, 0x6d, 0xcb, 0x24, 0x91, 0x3c, 0x42, 0xbf, 0xf5, 0x90, 0x13, - 0x8f, 0x71, 0x9d, 0x07, 0x16, 0x64, 0xf2, 0xd0, 0x48, 0xd8, 0x7f, 0x84, 0xc9, 0xa2, 0x10, 0xa2, - 0xef, 0x59, 0xc5, 0xc3, 0xf6, 0xac, 0xe6, 0x93, 0xd9, 0xb3, 0xce, 0xaa, 0x36, 0x66, 0xef, 0x5d, - 0x19, 0xcd, 0x62, 0xbf, 0x9c, 0x83, 0x39, 0x19, 0x7c, 0x43, 0x6f, 0xec, 0xa1, 0x01, 0x15, 0x1a, - 0x4f, 0xa6, 0xb1, 0xcf, 0x51, 0x92, 0x94, 0xec, 0xb6, 0xf6, 0x37, 0x8a, 0x7d, 0x0f, 0x40, 0xbc, - 0xa2, 0x64, 0x8c, 0xca, 0xc9, 0xa5, 0xe7, 0x32, 0x76, 0x81, 0x18, 0x29, 0x09, 0xe8, 0x1e, 0xc5, - 0x74, 0x46, 0x8a, 0xb0, 0x18, 0xca, 0xfe, 0x26, 0x2c, 0x88, 0xf5, 0x12, 0x43, 0x28, 0x54, 0xd0, - 0xe2, 0x24, 0xd6, 0xf2, 0xa9, 0xc1, 0x32, 0xd1, 0xc5, 0x2c, 0x32, 0x19, 0xd1, 0x34, 0xc9, 0xd6, - 0x1a, 0xe9, 0x51, 0x05, 0x32, 0x2b, 0xc2, 0x08, 0x5c, 0xd8, 0x7a, 0x19, 0x74, 0x7d, 0xc0, 0xfe, - 0x76, 0x5a, 0xad, 0x05, 0xb9, 0xbf, 0x85, 0xa6, 0xa3, 0x29, 0x82, 0xd8, 0xe7, 0x81, 0xc5, 0x51, - 0x2b, 0x24, 0x8c, 0xab, 0x80, 0xec, 0x52, 0xdd, 0x9c, 0x44, 0xbf, 0x08, 0x54, 0xb1, 0x3e, 0x49, - 0xfa, 0x89, 0x19, 0x87, 0x05, 0xfa, 0x68, 0x01, 0x55, 0x99, 0x9c, 0xc2, 0xc5, 0x19, 0x23, 0x10, - 0x53, 0x52, 0x92, 0xa4, 0x75, 0xd5, 0xd2, 0x41, 0x19, 0x2a, 0xa7, 0x2c, 0x76, 0xec, 0x2a, 0x4c, - 0xa0, 0xb7, 0xe7, 0x0d, 0x65, 0xec, 0x45, 0x86, 0x27, 0xe8, 0x17, 0xea, 0xec, 0x98, 0x26, 0x5b, - 0x09, 0xaa, 0xb8, 0x0e, 0xac, 0x04, 0x7b, 0x76, 0xaf, 0x83, 0x4a, 0x61, 0xd2, 0x77, 0x34, 0x83, - 0x3d, 0x27, 0xe8, 0x99, 0xee, 0xc0, 0x88, 0xc4, 0xbe, 0x0a, 0x93, 0xb7, 0xdd, 0xc7, 0x4a, 0x27, - 0x4c, 0x8a, 0xdf, 0xc3, 0x76, 0x20, 0x4b, 0x7d, 0x4d, 0xdb, 0x7d, 0xec, 0x34, 0x7b, 0xe9, 0x78, - 0xaa, 0xb8, 0x0d, 0xe9, 0x2c, 0xd9, 0x97, 0x01, 0x34, 0x4d, 0x35, 0x3b, 0xb2, 0x82, 0x17, 0x54, - 0x78, 0xb1, 0x4c, 0x0d, 0x36, 0xf2, 0xd7, 0x18, 0xa6, 0x24, 0x87, 0x85, 0xef, 0x9c, 0xe4, 0x70, - 0xe2, 0x3b, 0x27, 0x39, 0x9c, 0xd9, 0x84, 0xd3, 0x03, 0x97, 0x4e, 0x46, 0xd4, 0xd7, 0x4b, 0x66, - 0xd4, 0xd7, 0xd3, 0x83, 0x8e, 0xd8, 0xd0, 0x8c, 0xe1, 0x3f, 0x5f, 0x5a, 0x18, 0x2c, 0x9d, 0x7c, - 0x2b, 0x9f, 0x3a, 0x72, 0xe9, 0x62, 0x21, 0x73, 0xbe, 0x0c, 0x92, 0x49, 0xf2, 0x98, 0xe6, 0x53, - 0x1e, 0xca, 0xf9, 0xe4, 0x42, 0x93, 0xca, 0x8c, 0x2e, 0x8f, 0xe7, 0x8f, 0x7b, 0xfa, 0xbe, 0x03, - 0x33, 0x32, 0x33, 0xdf, 0x2d, 0xbe, 0xf7, 0xc8, 0x0f, 0x9a, 0x2a, 0xfd, 0x35, 0xca, 0xe0, 0x7d, - 0x69, 0x75, 0x53, 0xb8, 0x6c, 0x45, 0x39, 0x10, 0x8e, 0x62, 0xed, 0xa7, 0x33, 0x77, 0x31, 0x81, - 0x70, 0x98, 0x6f, 0x21, 0x7b, 0x33, 0x16, 0xd4, 0x78, 0xa0, 0x47, 0xf2, 0x0f, 0x14, 0x30, 0x43, - 0x5e, 0xe3, 0x81, 0xf5, 0x47, 0x05, 0x60, 0xb2, 0xa6, 0xaa, 0xdb, 0x75, 0xd1, 0xbd, 0xd6, 0xc3, - 0x98, 0x36, 0x25, 0xc2, 0x71, 0x37, 0x5b, 0x5c, 0x0f, 0x08, 0x45, 0xc6, 0xb5, 0x71, 0x99, 0x93, - 0xbe, 0xe8, 0xf4, 0x11, 0x0e, 0xd8, 0xea, 0xf2, 0x1f, 0x67, 0xab, 0xfb, 0x2a, 0x3c, 0x5b, 0xe9, - 0x62, 0x8a, 0x4f, 0x55, 0xcb, 0x35, 0x3f, 0x50, 0x9b, 0x94, 0xe1, 0xb8, 0xe5, 0xc6, 0x68, 0x7d, - 0x2d, 0x3d, 0x8c, 0x85, 0x26, 0xa7, 0x88, 0x79, 0xd9, 0x8d, 0xf4, 0x40, 0x00, 0x4a, 0x4e, 0xe9, - 0x62, 0x49, 0x86, 0x9c, 0x22, 0x49, 0x14, 0x0f, 0x2f, 0x50, 0x72, 0x0a, 0xe6, 0xae, 0x49, 0x78, - 0x78, 0x01, 0x1f, 0x20, 0xeb, 0xc4, 0x24, 0xec, 0x1d, 0x98, 0xac, 0xf4, 0x22, 0x9f, 0x18, 0x93, - 0x55, 0x78, 0x62, 0xbf, 0x4d, 0x4d, 0x31, 0xae, 0x3e, 0x09, 0xba, 0xf5, 0xa7, 0x05, 0x38, 0xdd, - 0x3f, 0xbc, 0x54, 0x1a, 0xaf, 0x8f, 0xdc, 0x11, 0xeb, 0x23, 0x6b, 0x36, 0xe4, 0x93, 0xc8, 0xea, - 0x4f, 0x62, 0x36, 0xc8, 0x4c, 0xa1, 0x1f, 0x71, 0x36, 0xd4, 0x61, 0x52, 0x3f, 0xef, 0x46, 0x3e, - 0xea, 0x79, 0xa7, 0x73, 0x11, 0x97, 0x7a, 0x19, 0xff, 0x60, 0x34, 0x79, 0x3a, 0x4a, 0x87, 0x3e, - 0x90, 0x18, 0xec, 0xdf, 0x80, 0x73, 0x72, 0x4f, 0x4a, 0x7f, 0xec, 0xf2, 0x9e, 0xe2, 0x48, 0x03, - 0xb7, 0x74, 0xb0, 0x5f, 0xbe, 0x28, 0x55, 0x25, 0x4e, 0x5f, 0xb7, 0x39, 0x9b, 0x7b, 0x8e, 0x6a, - 0x99, 0x56, 0xc9, 0x91, 0xbc, 0xad, 0x2a, 0x9c, 0xa6, 0xd2, 0xc4, 0xf3, 0x56, 0x15, 0x8a, 0x41, - 0xde, 0x4d, 0xb4, 0x5d, 0x38, 0xc8, 0x29, 0x45, 0x16, 0x96, 0x63, 0x8e, 0x51, 0x2d, 0xff, 0xe3, - 0x1b, 0x59, 0x3e, 0x37, 0x32, 0x3a, 0xb2, 0x04, 0x9b, 0xee, 0x36, 0x4a, 0xa7, 0x96, 0xcf, 0xd4, - 0xa9, 0x29, 0xa5, 0x4c, 0x21, 0x53, 0x29, 0xb3, 0x02, 0xb3, 0xf5, 0xde, 0xa6, 0xaa, 0x3b, 0xed, - 0x74, 0x17, 0xf6, 0x36, 0xb3, 0x7a, 0x25, 0x4d, 0x62, 0xfd, 0x68, 0x1e, 0xa6, 0xd6, 0x5b, 0xbd, - 0x6d, 0xaf, 0xb3, 0xe2, 0x46, 0xee, 0x53, 0xab, 0xe6, 0x7b, 0xcb, 0x50, 0xf3, 0xc5, 0xae, 0x65, - 0xf1, 0x87, 0x0d, 0xa5, 0xe3, 0xfb, 0x99, 0x1c, 0xcc, 0x26, 0x24, 0xf2, 0xb0, 0xbe, 0x01, 0x23, - 0xe2, 0x07, 0x5d, 0x7e, 0xcf, 0xf5, 0x31, 0x96, 0x49, 0xc7, 0xe2, 0xbf, 0x48, 0xf1, 0x66, 0x66, - 0xf4, 0x41, 0x0e, 0x67, 0x3e, 0x0d, 0x13, 0x09, 0xdb, 0xe3, 0x24, 0x1b, 0xfb, 0xb5, 0x1c, 0x94, - 0xd2, 0x5f, 0xc2, 0x6e, 0xc1, 0xb8, 0xe0, 0xe4, 0x71, 0x75, 0x2f, 0x7f, 0x69, 0xc0, 0x37, 0x5f, - 0x24, 0x34, 0xd9, 0x3c, 0xec, 0x7c, 0x2e, 0x21, 0xb6, 0xe2, 0x70, 0xc6, 0x86, 0x29, 0x1d, 0x2b, - 0xa3, 0x75, 0xaf, 0x9b, 0x12, 0xca, 0xc9, 0xec, 0x7e, 0x30, 0x52, 0xa4, 0x19, 0xad, 0x26, 0xe1, - 0xe3, 0xbc, 0x31, 0xb9, 0x32, 0x57, 0x15, 0x4e, 0x9a, 0xa5, 0x24, 0x60, 0xbb, 0x3e, 0xcf, 0x32, - 0x26, 0x74, 0x8c, 0xc7, 0x5e, 0x87, 0x31, 0x59, 0x9f, 0x9e, 0x2a, 0xa8, 0x8b, 0x10, 0x5d, 0x4e, - 0x96, 0x38, 0xd6, 0xdf, 0x2b, 0xc0, 0xc9, 0xa4, 0x79, 0xf7, 0xba, 0x4d, 0x37, 0xe2, 0xeb, 0x6e, - 0xe0, 0xb6, 0xc3, 0x23, 0x56, 0xc0, 0x85, 0xbe, 0xa6, 0x61, 0xea, 0x18, 0xd5, 0x34, 0xad, 0x41, - 0x56, 0xaa, 0x41, 0xa8, 0x03, 0x95, 0x0d, 0x52, 0xcd, 0x60, 0xb7, 0xa0, 0x50, 0xe7, 0x11, 0xed, - 0xbd, 0xe7, 0xfb, 0x7a, 0x55, 0x6f, 0xd7, 0xc5, 0x3a, 0x8f, 0xe4, 0x20, 0xca, 0xe0, 0x3e, 0xdc, - 0x88, 0x04, 0x5b, 0xe7, 0x11, 0x7b, 0x00, 0x63, 0xab, 0x8f, 0xbb, 0xbc, 0x11, 0x51, 0xaa, 0xbc, - 0x57, 0x0f, 0xe7, 0x27, 0x71, 0xb5, 0x4c, 0x79, 0x1c, 0x01, 0x7a, 0x67, 0x49, 0x94, 0x33, 0x57, - 0xa1, 0xa8, 0x2a, 0x3f, 0xce, 0xcc, 0x3d, 0xf3, 0x16, 0x4c, 0x6a, 0x95, 0x1c, 0x6b, 0xd2, 0xff, - 0x82, 0xd8, 0x57, 0xfd, 0x96, 0xca, 0xae, 0xb7, 0xda, 0x27, 0x2b, 0xe6, 0xf4, 0xac, 0xef, 0xa2, - 0xc4, 0xd9, 0xa5, 0xa2, 0x43, 0x84, 0xc6, 0x1a, 0xcc, 0xd6, 0x77, 0xbd, 0x6e, 0x12, 0x90, 0xd3, - 0x38, 0x91, 0x31, 0x95, 0x06, 0x5d, 0xdc, 0xd3, 0x27, 0x72, 0x9a, 0xce, 0xfa, 0x8b, 0x1c, 0x8c, - 0x89, 0xbf, 0xee, 0x5f, 0x7d, 0x4a, 0xb7, 0xcc, 0x2b, 0xc6, 0x96, 0x39, 0xa7, 0xc5, 0xc4, 0xc6, - 0x8d, 0xe3, 0xea, 0x11, 0x9b, 0xe5, 0x3e, 0x0d, 0x90, 0x44, 0x66, 0xd7, 0x61, 0x9c, 0x4c, 0x8a, - 0xc8, 0xf6, 0x5b, 0x0f, 0xb2, 0xad, 0x8c, 0x8d, 0xe2, 0x1b, 0xbe, 0xdf, 0x4d, 0xab, 0x44, 0x14, - 0xb5, 0x90, 0xeb, 0x55, 0x68, 0x54, 0x23, 0x27, 0xab, 0x8f, 0xce, 0x7a, 0x32, 0x44, 0xb4, 0x96, - 0x45, 0x79, 0x80, 0x2b, 0x7f, 0x85, 0x5e, 0x43, 0x0a, 0x87, 0x31, 0x39, 0xa9, 0x52, 0x56, 0x66, - 0x3e, 0x94, 0xfc, 0xe1, 0x09, 0x19, 0x58, 0x59, 0x35, 0xec, 0x5d, 0x98, 0xba, 0xe6, 0x07, 0x8f, - 0xdc, 0x40, 0x86, 0xcb, 0x24, 0xf3, 0x03, 0x71, 0xff, 0x9c, 0xde, 0x92, 0x70, 0x19, 0x70, 0xf3, - 0xdb, 0xfb, 0xe5, 0x91, 0x65, 0xdf, 0x6f, 0xd9, 0x06, 0x3a, 0xbb, 0x0b, 0xd3, 0xb7, 0xdd, 0xc7, - 0xda, 0xcd, 0x59, 0x7a, 0xdf, 0xbc, 0x2a, 0x26, 0xb0, 0xb8, 0x7a, 0x1f, 0x6d, 0xdf, 0x65, 0xd2, - 0x33, 0x0f, 0x66, 0xd6, 0xfd, 0x20, 0xa2, 0x4a, 0xbc, 0xce, 0x36, 0x7d, 0x6c, 0xbf, 0x85, 0xda, - 0xa5, 0x4c, 0x0b, 0xb5, 0xd3, 0x5d, 0x3f, 0x88, 0x9c, 0xad, 0x98, 0xdc, 0x88, 0x8a, 0x65, 0x30, - 0x66, 0xef, 0xc2, 0x9c, 0x16, 0x30, 0xf0, 0x9a, 0x1f, 0xb4, 0x5d, 0x25, 0xd9, 0xa3, 0x32, 0x19, - 0x8d, 0x56, 0xb6, 0x10, 0x6c, 0xf7, 0x63, 0xb2, 0x2f, 0x66, 0xf9, 0x33, 0x8d, 0x26, 0x26, 0x6e, - 0x19, 0xfe, 0x4c, 0x83, 0x4c, 0xdc, 0xfa, 0x3d, 0x9b, 0xb6, 0x0f, 0x33, 0x81, 0x2d, 0x2e, 0x5f, - 0xa6, 0x3b, 0xfc, 0xd1, 0x26, 0xae, 0xf1, 0xb8, 0x0d, 0x30, 0x75, 0x5d, 0x82, 0xc2, 0xf2, 0xfa, - 0x35, 0x7c, 0x02, 0x51, 0xd6, 0x3a, 0x9d, 0x1d, 0xb7, 0xd3, 0x40, 0x89, 0x9b, 0xcc, 0xce, 0xf5, - 0x1d, 0x79, 0x79, 0xfd, 0x1a, 0x73, 0x61, 0x7e, 0x9d, 0x07, 0x6d, 0x2f, 0xfa, 0xc2, 0xe5, 0xcb, - 0xda, 0x40, 0x15, 0xb1, 0x69, 0x97, 0xa8, 0x69, 0xe5, 0x2e, 0xa2, 0x38, 0x8f, 0x2f, 0x5f, 0xce, - 0x1c, 0x8e, 0xb8, 0x61, 0x59, 0xbc, 0xc4, 0xce, 0x78, 0xdb, 0x7d, 0x9c, 0x78, 0x0b, 0x84, 0xe4, - 0x19, 0x7a, 0x56, 0x4d, 0xac, 0xc4, 0xd3, 0xc0, 0xd8, 0x19, 0x4d, 0x22, 0x71, 0x61, 0x4a, 0xa6, - 0x57, 0x48, 0x3e, 0x35, 0x67, 0x94, 0x5e, 0x48, 0xb9, 0x0f, 0xeb, 0x52, 0xbf, 0x86, 0xce, 0xee, - 0xc5, 0xd7, 0x3e, 0x79, 0x6d, 0xa2, 0x84, 0x8c, 0x97, 0xf4, 0x6b, 0x9f, 0xd4, 0xc6, 0x18, 0x9f, - 0x35, 0x1b, 0xeb, 0x0a, 0xa4, 0xfb, 0x84, 0x6d, 0x72, 0xe9, 0xbf, 0x4d, 0x4e, 0x1d, 0xff, 0x36, - 0xc9, 0x61, 0x64, 0xcd, 0x6f, 0xec, 0x52, 0x28, 0xaf, 0xcf, 0x8b, 0xe5, 0xde, 0xf2, 0x1b, 0xbb, - 0x4f, 0xce, 0xb4, 0x17, 0xd9, 0xb3, 0x3b, 0xa2, 0xa9, 0x62, 0x16, 0x50, 0x9f, 0x90, 0xb9, 0xe8, - 0x42, 0x7c, 0x9d, 0xd2, 0xca, 0xa4, 0xe0, 0x23, 0x27, 0x8d, 0xea, 0x5a, 0xdb, 0x24, 0x67, 0x1c, - 0x4a, 0x2b, 0x3c, 0xdc, 0x8d, 0xfc, 0x6e, 0xb5, 0xe5, 0x75, 0x37, 0x7d, 0x37, 0x50, 0xb1, 0x59, - 0xfb, 0xd7, 0xf7, 0x2b, 0x99, 0xeb, 0x7b, 0xae, 0x29, 0xe9, 0x9d, 0x86, 0x62, 0x60, 0xf7, 0xb1, - 0x64, 0x5f, 0x84, 0x19, 0x31, 0xb9, 0x57, 0x1f, 0x47, 0xbc, 0x23, 0x47, 0x7e, 0x0e, 0x45, 0x87, - 0x05, 0x2d, 0x19, 0x41, 0x5c, 0x28, 0xe7, 0x14, 0x2e, 0x76, 0x1e, 0x13, 0x18, 0x61, 0xd0, 0x0c, - 0x56, 0xac, 0x09, 0x8b, 0xb7, 0xdd, 0xc7, 0x5a, 0x1a, 0x49, 0x6d, 0x92, 0x32, 0x9c, 0x60, 0x17, - 0x0e, 0xf6, 0xcb, 0x2f, 0x89, 0x09, 0x96, 0x84, 0x0b, 0x1e, 0x30, 0x5f, 0x07, 0x72, 0x62, 0xdf, - 0x80, 0x53, 0xf4, 0x59, 0x2b, 0x98, 0xa1, 0xc7, 0x0f, 0xf6, 0xea, 0x3b, 0x2e, 0x3a, 0x0a, 0xcd, - 0x1f, 0x6f, 0x43, 0x54, 0x1d, 0xd6, 0x54, 0x7c, 0x9c, 0x50, 0x32, 0xb2, 0x07, 0xd5, 0xc0, 0x3e, - 0x84, 0x19, 0xf9, 0xee, 0x73, 0xc3, 0x0f, 0x23, 0xd4, 0x0a, 0x2c, 0x1c, 0xcf, 0xfe, 0x5d, 0x3e, - 0x26, 0x49, 0x8f, 0x91, 0x94, 0x16, 0x21, 0xc5, 0x99, 0xbd, 0x0d, 0x93, 0xeb, 0x5e, 0x47, 0x06, - 0x2a, 0xac, 0xad, 0xa3, 0xfe, 0x92, 0xce, 0x9f, 0xae, 0xd7, 0x71, 0xd4, 0xd5, 0xbc, 0x1b, 0x6f, - 0x17, 0x3a, 0x36, 0x7b, 0x00, 0x93, 0xf5, 0xfa, 0x8d, 0x6b, 0x9e, 0x38, 0x00, 0xbb, 0x7b, 0x8b, - 0x27, 0x07, 0xb4, 0xf2, 0xc5, 0xcc, 0x56, 0x4e, 0x87, 0xe1, 0x0e, 0xa6, 0xe6, 0x77, 0x1a, 0x7e, - 0x77, 0xcf, 0xd6, 0x39, 0x65, 0xd8, 0x84, 0x9f, 0x7a, 0xc2, 0x36, 0xe1, 0x35, 0x98, 0xd5, 0xac, - 0x34, 0xd1, 0x42, 0x73, 0x31, 0x89, 0x6e, 0xa3, 0xdb, 0x80, 0xa7, 0x7d, 0x20, 0xd3, 0x74, 0xca, - 0x18, 0xfc, 0xf4, 0x71, 0x8d, 0xc1, 0x3d, 0x98, 0x93, 0x83, 0x41, 0xf3, 0x00, 0x47, 0xfa, 0xcc, - 0x80, 0x3e, 0x7c, 0x35, 0xb3, 0x0f, 0xe7, 0x69, 0xa4, 0xd5, 0x24, 0xc3, 0x77, 0xce, 0x7e, 0xae, - 0x6c, 0x0b, 0x18, 0x01, 0xdd, 0xc8, 0xdd, 0x74, 0x43, 0x8e, 0x75, 0x3d, 0x3b, 0xa0, 0xae, 0x97, - 0x32, 0xeb, 0x9a, 0x51, 0x75, 0x6d, 0xca, 0x6a, 0x32, 0x38, 0xb2, 0x8e, 0xaa, 0x47, 0xcd, 0x2f, - 0xec, 0xd8, 0xe7, 0x0c, 0x65, 0x6a, 0x3f, 0x82, 0x0c, 0x30, 0x9c, 0x9e, 0xb4, 0xe9, 0x7e, 0xcf, - 0xe0, 0xcc, 0x1e, 0xc3, 0xc9, 0xfe, 0x56, 0x60, 0x9d, 0x67, 0xb1, 0xce, 0xb3, 0x46, 0x9d, 0x69, - 0x24, 0x39, 0x6f, 0xcc, 0xcf, 0x4a, 0xd7, 0x3a, 0x80, 0x3f, 0xfb, 0xa1, 0x1c, 0x9c, 0xba, 0x7d, - 0xad, 0x82, 0xf9, 0xf0, 0x3c, 0x19, 0xb7, 0x2a, 0xf6, 0x1d, 0x7d, 0x9e, 0x14, 0xee, 0xe9, 0x47, - 0x00, 0x25, 0x71, 0xe0, 0x56, 0x21, 0x64, 0xc4, 0x17, 0xdb, 0x5b, 0xae, 0x4c, 0xb3, 0x47, 0x2c, - 0x32, 0x1c, 0x4c, 0xbf, 0xf9, 0xc7, 0xe5, 0x9c, 0x3d, 0xa8, 0x2a, 0xd6, 0x82, 0x33, 0x66, 0xb7, - 0x28, 0x73, 0xfd, 0x1d, 0xde, 0x6a, 0x2d, 0x96, 0x71, 0x46, 0xbf, 0x7e, 0xb0, 0x5f, 0xbe, 0xd0, - 0xd7, 0xbb, 0xb1, 0x0b, 0x80, 0xc0, 0xd4, 0x3e, 0xf8, 0x10, 0x7e, 0x37, 0x47, 0x8a, 0xd3, 0xa5, - 0x99, 0x0c, 0x63, 0x75, 0xeb, 0x37, 0xf3, 0xa9, 0x93, 0x8a, 0xd5, 0x60, 0x9c, 0x26, 0x20, 0x89, - 0xee, 0xfd, 0xd3, 0xec, 0x6c, 0xe6, 0x34, 0x1b, 0xa7, 0xb9, 0x6c, 0x2b, 0x7a, 0xf6, 0x48, 0xb0, - 0xc2, 0x56, 0xd0, 0x5d, 0xe7, 0xcb, 0xf2, 0x20, 0x42, 0x90, 0x71, 0xe4, 0xae, 0x1c, 0xdf, 0x05, - 0xcb, 0xf4, 0xf0, 0xc3, 0xb3, 0x57, 0xd5, 0xc6, 0x76, 0x65, 0xb2, 0x96, 0x42, 0xec, 0xc7, 0x63, - 0x66, 0x66, 0x79, 0x62, 0x15, 0x8a, 0x5a, 0xac, 0xdf, 0xc8, 0xc1, 0xb4, 0x71, 0xd4, 0xb1, 0xab, - 0x9a, 0x93, 0x5a, 0xe2, 0xb7, 0x6d, 0xe0, 0xe0, 0xee, 0x97, 0x76, 0x5f, 0xbb, 0x4a, 0x16, 0xe7, - 0xf9, 0xc1, 0x74, 0x38, 0xfb, 0xd3, 0x3e, 0x8b, 0x87, 0x6b, 0x06, 0xe3, 0x14, 0x70, 0x23, 0x03, - 0x52, 0xc0, 0xfd, 0xda, 0x73, 0x30, 0x63, 0xde, 0x85, 0xd8, 0xeb, 0x30, 0x86, 0x5a, 0x59, 0x75, - 0xb1, 0x96, 0xa9, 0xf3, 0xfd, 0x54, 0x36, 0x53, 0xc2, 0x61, 0x2f, 0x03, 0xc4, 0xa6, 0xbf, 0xea, - 0x4d, 0x62, 0xf4, 0x60, 0xbf, 0x9c, 0x7b, 0xc3, 0xd6, 0x0a, 0xd8, 0x57, 0x00, 0xee, 0xf8, 0x4d, - 0x1e, 0xe7, 0xcb, 0x3c, 0xe4, 0xdd, 0xfd, 0x95, 0xbe, 0x44, 0x06, 0x27, 0x3a, 0x7e, 0x93, 0xf7, - 0x67, 0x2d, 0xd0, 0x38, 0xb2, 0xcf, 0xc2, 0xa8, 0xdd, 0x13, 0x97, 0x78, 0xa9, 0x3f, 0x99, 0x54, - 0x47, 0x4e, 0xaf, 0xc5, 0x93, 0x1b, 0x62, 0xd0, 0x4b, 0x9b, 0x94, 0x09, 0x00, 0x7b, 0x5f, 0x26, - 0x38, 0xa0, 0x10, 0x7f, 0xa3, 0xc9, 0x2b, 0x8d, 0x26, 0x8a, 0xf4, 0x05, 0xf9, 0xd3, 0x48, 0xd8, - 0x5d, 0x18, 0xd7, 0x9f, 0x17, 0x34, 0x6f, 0x67, 0xfd, 0x09, 0x4a, 0xbb, 0x6e, 0x52, 0xa2, 0xcd, - 0xf4, 0xcb, 0x83, 0xe2, 0xc2, 0xde, 0x81, 0x09, 0xc1, 0x5e, 0x2c, 0xe5, 0x90, 0xae, 0x19, 0xf8, - 0x16, 0xa3, 0x35, 0x48, 0x6c, 0x07, 0x46, 0x20, 0xbe, 0x98, 0x80, 0x7d, 0x11, 0x53, 0x38, 0x52, - 0x57, 0x1f, 0x6a, 0x8f, 0x71, 0xbe, 0xaf, 0xab, 0x31, 0xa7, 0x63, 0x7f, 0x4e, 0xf8, 0x98, 0x1f, - 0xdb, 0x8e, 0x83, 0x6d, 0x0d, 0x93, 0x94, 0xe2, 0xb5, 0xbe, 0x0a, 0x16, 0x55, 0xfc, 0xa8, 0xfe, - 0xbc, 0xa7, 0x06, 0x5f, 0xd6, 0x85, 0x52, 0x22, 0xe5, 0x51, 0x5d, 0x70, 0x58, 0x5d, 0x6f, 0xf4, - 0xd5, 0xa5, 0x0f, 0x60, 0x5f, 0x75, 0x7d, 0xdc, 0x59, 0x13, 0x66, 0xd4, 0x89, 0x41, 0xf5, 0x4d, - 0x1e, 0x56, 0xdf, 0xcb, 0x7d, 0xf5, 0xcd, 0x37, 0x37, 0xfb, 0xeb, 0x49, 0xf1, 0x64, 0xef, 0xc0, - 0xb4, 0x82, 0xc8, 0x2c, 0xa4, 0x53, 0x49, 0xba, 0xc9, 0xe6, 0x66, 0x5f, 0xee, 0x51, 0x13, 0x59, - 0xa7, 0x96, 0xb3, 0x63, 0xda, 0xa0, 0x4e, 0xcf, 0x0a, 0x13, 0x99, 0x7d, 0x00, 0x93, 0xb5, 0xb6, - 0xf8, 0x10, 0xbf, 0xe3, 0x46, 0x9c, 0x3c, 0xe1, 0x94, 0x6d, 0x89, 0x56, 0xa2, 0x4d, 0x55, 0x99, - 0x5f, 0x35, 0x29, 0x32, 0xf2, 0xab, 0x26, 0x60, 0xd1, 0x79, 0xf2, 0x3d, 0x89, 0xe6, 0xb0, 0xf2, - 0x92, 0x3b, 0x9b, 0x61, 0xdf, 0xa1, 0xb1, 0xa7, 0x50, 0x9a, 0x02, 0xaa, 0xde, 0x73, 0x52, 0xa1, - 0x34, 0x75, 0x9e, 0xec, 0x5d, 0x98, 0xa4, 0x7c, 0x3d, 0x15, 0xfb, 0x4e, 0xb8, 0x58, 0xc2, 0x8f, - 0x47, 0xdf, 0x7e, 0x95, 0xda, 0xc7, 0x71, 0x83, 0x94, 0x21, 0x63, 0x82, 0xcf, 0xbe, 0x00, 0x0b, - 0x0f, 0xbc, 0x4e, 0xd3, 0x7f, 0x14, 0xd2, 0x31, 0x45, 0x1b, 0xdd, 0x5c, 0xe2, 0x46, 0xf4, 0x48, - 0x96, 0xc7, 0xc2, 0x59, 0xdf, 0xc6, 0x97, 0xc9, 0x81, 0x7d, 0x6f, 0x1f, 0x67, 0x39, 0x83, 0xd8, - 0x61, 0x33, 0x68, 0xa9, 0x6f, 0x06, 0xf5, 0x57, 0x9f, 0x9e, 0x4e, 0x99, 0xd5, 0x30, 0x1f, 0x98, - 0x79, 0xbe, 0xdf, 0xf4, 0xbd, 0xce, 0xe2, 0x3c, 0xee, 0x85, 0xcf, 0xa6, 0xbd, 0xe9, 0x11, 0x8f, - 0xf2, 0xd4, 0x5a, 0x07, 0xfb, 0xe5, 0xe7, 0xd3, 0x42, 0xf8, 0x87, 0xbe, 0xa1, 0x28, 0xcf, 0x60, - 0xcd, 0x3e, 0x80, 0x29, 0xf1, 0x7f, 0xac, 0x25, 0x58, 0x30, 0x2c, 0x02, 0x35, 0x4c, 0xaa, 0x07, - 0xc7, 0x08, 0x13, 0x0a, 0x65, 0x28, 0x10, 0x0c, 0x56, 0xec, 0x2d, 0x00, 0x21, 0xc7, 0xd0, 0x76, - 0x7c, 0x22, 0x89, 0x5c, 0x8a, 0x62, 0x50, 0xff, 0x46, 0x9c, 0x20, 0xb3, 0x77, 0x60, 0x52, 0xfc, - 0xaa, 0xf7, 0x9a, 0xbe, 0x58, 0x1b, 0x27, 0x91, 0x56, 0x3a, 0x25, 0x0a, 0xda, 0x50, 0xc2, 0x0d, - 0xa7, 0xc4, 0x04, 0x9d, 0xdd, 0x80, 0x59, 0x8c, 0x30, 0x5b, 0xc3, 0x24, 0xd6, 0x91, 0xc7, 0xc3, - 0xc5, 0x53, 0xda, 0x3b, 0xb8, 0x28, 0x72, 0xbc, 0xb8, 0x4c, 0xbf, 0x5c, 0xa4, 0xc8, 0x58, 0x08, - 0xf3, 0xfd, 0x0f, 0x89, 0xe1, 0xe2, 0x22, 0x76, 0x92, 0x12, 0xa9, 0xfb, 0x31, 0xe4, 0x7e, 0x2c, - 0x46, 0x44, 0xdb, 0xb8, 0xd4, 0x73, 0x82, 0x5e, 0x61, 0x16, 0x77, 0x66, 0x03, 0xbb, 0x5e, 0x5d, - 0x4f, 0x87, 0x60, 0x3d, 0x8d, 0x5f, 0x80, 0xc3, 0xbc, 0xdd, 0x48, 0x12, 0xe8, 0x66, 0x84, 0x61, - 0xcd, 0xa0, 0x66, 0x5f, 0x87, 0x13, 0x6a, 0x07, 0xa1, 0x22, 0x9a, 0xd7, 0x67, 0x8e, 0xb9, 0x13, - 0x37, 0x37, 0xe3, 0xaa, 0xfb, 0xa6, 0x74, 0x76, 0x15, 0xcc, 0x85, 0x49, 0x1c, 0x56, 0xaa, 0xf1, - 0xd9, 0xc3, 0x6a, 0xbc, 0xd0, 0x57, 0xe3, 0x49, 0x9c, 0x28, 0xfd, 0x95, 0xe9, 0x3c, 0xd9, 0x32, - 0x4c, 0xd3, 0x3a, 0xa2, 0xd9, 0xf6, 0x1c, 0xf6, 0x16, 0x6a, 0x95, 0xd4, 0x0a, 0xec, 0x9b, 0x70, - 0x26, 0x89, 0xbe, 0x23, 0xcb, 0x67, 0x84, 0xb3, 0xc6, 0x8e, 0x9c, 0x7e, 0x3d, 0x30, 0x91, 0xc5, - 0x8e, 0x94, 0x48, 0x31, 0xab, 0x8f, 0xbb, 0x01, 0xe9, 0x8c, 0x9e, 0x4f, 0x92, 0x9a, 0x68, 0xc2, - 0x8f, 0xc3, 0x63, 0x0c, 0x7d, 0x4b, 0xc8, 0xe2, 0xc0, 0xee, 0xc1, 0x7c, 0x7c, 0x6a, 0x6b, 0x8c, - 0xcb, 0x49, 0x72, 0x98, 0xe4, 0xa8, 0xcf, 0xe6, 0x9b, 0x45, 0xcf, 0x5c, 0x38, 0x65, 0x9c, 0xd3, - 0x1a, 0xeb, 0x73, 0xc8, 0x1a, 0x13, 0x36, 0x9b, 0x87, 0x7c, 0x36, 0xfb, 0x41, 0x7c, 0xd8, 0x87, - 0x70, 0x26, 0x7d, 0x36, 0x6b, 0xb5, 0xbc, 0x80, 0xb5, 0xbc, 0x76, 0xb0, 0x5f, 0x3e, 0xdf, 0x77, - 0xbc, 0x67, 0x57, 0x74, 0x08, 0x37, 0xf6, 0x15, 0x58, 0x34, 0xcf, 0x67, 0xad, 0x26, 0x0b, 0x6b, - 0xc2, 0xa5, 0x13, 0x1f, 0xec, 0xd9, 0x35, 0x0c, 0xe4, 0xc1, 0x22, 0x28, 0x67, 0xce, 0x6e, 0xad, - 0x9a, 0x17, 0x93, 0x0f, 0xea, 0x5b, 0x25, 0xd9, 0xd5, 0x1d, 0xc5, 0x92, 0x3d, 0x82, 0xe7, 0xb3, - 0x8e, 0x09, 0xad, 0xd2, 0x97, 0x62, 0xad, 0xec, 0x27, 0xb2, 0x8f, 0x9c, 0xec, 0x9a, 0x8f, 0x60, - 0xcb, 0xbe, 0x08, 0x27, 0xb4, 0xf5, 0xa5, 0xd5, 0xf7, 0x32, 0xd6, 0x87, 0x4e, 0xc0, 0xfa, 0xc2, - 0xcc, 0xae, 0x25, 0x9b, 0x07, 0x6b, 0xc3, 0xbc, 0xfa, 0x70, 0x54, 0x7f, 0xd3, 0xd1, 0x73, 0xde, - 0xd8, 0x55, 0xfb, 0x31, 0xb4, 0x94, 0xfb, 0x9b, 0x4e, 0x37, 0x21, 0xd4, 0x67, 0x7a, 0x06, 0x5f, - 0x76, 0x03, 0xc6, 0xea, 0xeb, 0xb5, 0x6b, 0xd7, 0x56, 0x17, 0x5f, 0xc1, 0x1a, 0x94, 0xc7, 0x90, - 0x04, 0x1a, 0x97, 0x26, 0x32, 0x54, 0xeb, 0x7a, 0x5b, 0x5b, 0x86, 0x63, 0x96, 0x44, 0x65, 0xdf, - 0x8b, 0x26, 0x62, 0x62, 0x47, 0xad, 0x84, 0xa1, 0xb7, 0x8d, 0xa9, 0x2a, 0xc2, 0xc5, 0xd7, 0x8c, - 0x97, 0x5e, 0x3a, 0x3d, 0xf6, 0xaa, 0x98, 0x6f, 0xa8, 0x0f, 0x5d, 0x4a, 0x9b, 0x07, 0xfb, 0xe5, - 0xb3, 0xb4, 0x73, 0x3b, 0x6e, 0xc2, 0x4a, 0xdf, 0xc4, 0xfb, 0x2b, 0xba, 0x39, 0x52, 0xbc, 0x50, - 0x7a, 0xf5, 0xe6, 0x48, 0xf1, 0xd5, 0xd2, 0x6b, 0xf6, 0x73, 0xd9, 0x39, 0xd2, 0x65, 0x5f, 0xdb, - 0xe7, 0x0f, 0x2b, 0x4d, 0x46, 0xc2, 0xfa, 0x3b, 0x39, 0x28, 0x1f, 0xd1, 0x60, 0xb1, 0xb7, 0x26, - 0xbd, 0x59, 0xe7, 0xca, 0x0f, 0x59, 0xfa, 0xe4, 0xc4, 0x05, 0x8e, 0xf9, 0x78, 0x6d, 0x92, 0xa0, - 0xeb, 0x13, 0x45, 0x9e, 0xd7, 0x3c, 0xe0, 0xfa, 0x23, 0xce, 0x2b, 0x2c, 0xeb, 0x17, 0x72, 0x30, - 0x9f, 0x31, 0x3e, 0xec, 0x3c, 0x8c, 0x60, 0x2a, 0x19, 0xcd, 0xda, 0x20, 0x95, 0x42, 0x06, 0xcb, - 0xd9, 0x27, 0x61, 0x7c, 0xe5, 0x4e, 0xbd, 0x5e, 0xb9, 0xa3, 0xae, 0xb2, 0x72, 0x1b, 0xef, 0x84, - 0x4e, 0xe8, 0x9a, 0x8f, 0x94, 0x84, 0xc6, 0xde, 0x80, 0xb1, 0xda, 0x3a, 0x12, 0x48, 0x9b, 0x39, - 0x6c, 0xa1, 0xd7, 0x4d, 0xe3, 0x13, 0x92, 0xf5, 0xe3, 0x39, 0x60, 0xfd, 0x93, 0x8d, 0x5d, 0x86, - 0x49, 0x7d, 0x4a, 0xcb, 0x8b, 0x37, 0x3e, 0xa8, 0x69, 0x13, 0xd6, 0xd6, 0x71, 0xd8, 0x0a, 0x8c, - 0x62, 0x9e, 0xbe, 0xf8, 0x75, 0x34, 0xf3, 0x60, 0x3c, 0xd5, 0x77, 0x30, 0x8e, 0x62, 0x16, 0x40, - 0x5b, 0x12, 0x5b, 0xbf, 0x93, 0x03, 0x96, 0x6d, 0xf3, 0x34, 0x94, 0x75, 0xc6, 0x9b, 0x9a, 0xcf, - 0xb3, 0x9e, 0x2c, 0x22, 0xce, 0xf4, 0xa3, 0x5f, 0x22, 0x13, 0xef, 0xe8, 0xf3, 0x86, 0xd2, 0x62, - 0xb0, 0xa3, 0xdc, 0xab, 0x30, 0x7a, 0x9f, 0x07, 0x9b, 0xca, 0x1c, 0x14, 0x4d, 0xc8, 0x1e, 0x0a, - 0x80, 0x7e, 0x89, 0x47, 0x0c, 0xeb, 0x4f, 0x73, 0xb0, 0x90, 0x25, 0xe1, 0x1e, 0xe1, 0xcf, 0x66, - 0xa5, 0x5c, 0xf1, 0xd0, 0x32, 0x43, 0xda, 0x97, 0xc5, 0x0e, 0x78, 0x65, 0x18, 0x15, 0x1f, 0xab, - 0x46, 0x18, 0x95, 0x28, 0xa2, 0x37, 0x42, 0x5b, 0xc2, 0x05, 0x82, 0x8c, 0xed, 0x35, 0x82, 0x61, - 0xe1, 0x10, 0x01, 0xe7, 0xa3, 0x2d, 0xe1, 0x02, 0xe1, 0xb6, 0xdf, 0x8c, 0x53, 0x54, 0x23, 0x42, - 0x5b, 0x00, 0x6c, 0x09, 0x67, 0xe7, 0x61, 0xfc, 0x6e, 0x67, 0x8d, 0xbb, 0x0f, 0x55, 0xc0, 0x72, - 0xb4, 0x24, 0xf1, 0x3b, 0x4e, 0x4b, 0xc0, 0x6c, 0x55, 0x68, 0xfd, 0x4c, 0x0e, 0xe6, 0xfa, 0x84, - 0xeb, 0xa3, 0x5d, 0xf6, 0x0e, 0xf7, 0x9d, 0x19, 0xe6, 0xfb, 0x64, 0xf3, 0x47, 0xb2, 0x9b, 0x6f, - 0xfd, 0x3f, 0xa3, 0x70, 0x6a, 0x80, 0xae, 0x23, 0xf1, 0xed, 0xcb, 0x1d, 0xe9, 0xdb, 0xf7, 0x25, - 0x98, 0xae, 0xb6, 0x5c, 0xaf, 0x1d, 0x6e, 0xf8, 0x49, 0x8b, 0x13, 0x17, 0x01, 0x2c, 0x53, 0x59, - 0xba, 0x95, 0x2d, 0xf9, 0xe9, 0x06, 0x52, 0x38, 0x91, 0xdf, 0x2f, 0x6a, 0x19, 0xcc, 0xfa, 0xbc, - 0xeb, 0x0a, 0x7f, 0x45, 0xbc, 0xeb, 0x4c, 0x7f, 0x8f, 0x91, 0x27, 0xea, 0xef, 0x91, 0x6d, 0x2b, - 0x3a, 0xfa, 0x71, 0x2c, 0x87, 0xab, 0x30, 0x2d, 0x4d, 0x69, 0x2a, 0xa1, 0x1c, 0xa4, 0xb1, 0x3e, - 0xf3, 0x1b, 0x37, 0xec, 0x1f, 0x0b, 0x83, 0x86, 0xdd, 0x30, 0x7d, 0x13, 0xc6, 0xf1, 0x09, 0xf0, - 0xfc, 0x60, 0xdf, 0x03, 0xe3, 0xe9, 0xdf, 0xf0, 0x41, 0xf8, 0x06, 0x2c, 0x64, 0x5d, 0x96, 0x16, - 0x8b, 0x86, 0x95, 0xde, 0x40, 0xeb, 0xce, 0xe1, 0xaf, 0x5c, 0xbb, 0xfd, 0x57, 0x2e, 0xeb, 0x67, - 0xf2, 0xa6, 0xdf, 0xdf, 0x5f, 0xc5, 0x69, 0xff, 0x2a, 0x8c, 0x3e, 0xd8, 0xe1, 0x81, 0xda, 0x6c, - 0xb1, 0x21, 0x8f, 0x04, 0x40, 0x6f, 0x08, 0x62, 0xb0, 0x6b, 0x30, 0xb3, 0x2e, 0xa7, 0x81, 0x1a, - 0xdb, 0x91, 0xe4, 0xfe, 0xdb, 0x25, 0x2d, 0x4d, 0xc6, 0xe0, 0xa6, 0xa8, 0xac, 0xeb, 0x70, 0xd6, - 0xd8, 0x0d, 0x28, 0x4e, 0x89, 0xf4, 0x4f, 0x90, 0xc7, 0xf1, 0x4c, 0xe2, 0x91, 0x91, 0x6c, 0x5d, - 0x76, 0x0a, 0x6a, 0x6d, 0xc1, 0xf3, 0x87, 0x32, 0x12, 0xa7, 0x20, 0x74, 0xe3, 0x5f, 0x29, 0xfb, - 0xc7, 0x43, 0x49, 0x6d, 0x8d, 0xce, 0xfa, 0x06, 0x4c, 0xe9, 0xbd, 0x8c, 0x1b, 0xba, 0xf8, 0x4d, - 0x3b, 0xaa, 0xdc, 0xd0, 0x05, 0xc0, 0x96, 0xf0, 0x44, 0xaf, 0x9e, 0xcf, 0xd6, 0xab, 0x27, 0xc3, - 0x5f, 0x38, 0x6a, 0xf8, 0x45, 0xe5, 0xb8, 0x5f, 0x68, 0x95, 0xe3, 0x6f, 0xbd, 0x72, 0x0c, 0x44, - 0x62, 0x4b, 0xf8, 0x13, 0xad, 0xfc, 0xb7, 0x55, 0xbe, 0x18, 0x74, 0x7f, 0x50, 0x8b, 0x27, 0x49, - 0x5d, 0x3d, 0x9f, 0xb5, 0x16, 0x12, 0xcc, 0xe4, 0x84, 0xce, 0x1f, 0x75, 0x42, 0x1f, 0x67, 0x22, - 0xa2, 0xdc, 0x27, 0x87, 0x74, 0x24, 0x91, 0xaa, 0xdc, 0x3e, 0x53, 0x00, 0x85, 0x65, 0x7d, 0x33, - 0x07, 0x27, 0x32, 0xf5, 0x97, 0xa2, 0x56, 0xa9, 0x28, 0xd5, 0xd6, 0x61, 0x5a, 0x4b, 0x2a, 0x31, - 0x8e, 0xe3, 0x85, 0x3e, 0xfc, 0xb7, 0x58, 0x2f, 0xc0, 0x44, 0xfc, 0x7a, 0xc6, 0x16, 0xd4, 0xd0, - 0xa1, 0xc9, 0x98, 0x7a, 0x84, 0xa9, 0x03, 0x88, 0x16, 0x3c, 0x51, 0x03, 0x47, 0xeb, 0xb7, 0xf3, - 0x32, 0x97, 0xe0, 0x53, 0x1b, 0x50, 0x32, 0xdb, 0x2a, 0x51, 0x7c, 0xd2, 0xe0, 0x30, 0x92, 0x6c, - 0x15, 0xc6, 0xea, 0x91, 0x1b, 0xf5, 0x94, 0xf3, 0xfc, 0xbc, 0x4e, 0x86, 0x05, 0xf7, 0x97, 0x12, - 0xf7, 0xe9, 0x10, 0x21, 0xc6, 0x8d, 0x0d, 0x21, 0x9a, 0x71, 0xe3, 0xef, 0xe7, 0x60, 0x4a, 0x27, - 0x66, 0x1f, 0xc0, 0x8c, 0x0a, 0x93, 0x27, 0x43, 0x0a, 0xd0, 0x53, 0x9f, 0xb2, 0x93, 0x51, 0x61, - 0xf2, 0xf4, 0x10, 0x04, 0x06, 0xbe, 0xbe, 0x55, 0x77, 0x75, 0x64, 0xd6, 0x04, 0xd6, 0xde, 0x72, - 0x9d, 0x47, 0xdc, 0xdd, 0xe5, 0x61, 0xe4, 0x48, 0x7b, 0x06, 0x7a, 0x11, 0x54, 0xec, 0x6f, 0x5f, - 0xab, 0x48, 0x53, 0x06, 0x31, 0x12, 0x14, 0xef, 0xb0, 0x8f, 0x46, 0x7f, 0xe6, 0x68, 0x6f, 0xb9, - 0x0f, 0x64, 0xa1, 0xa4, 0xb3, 0xfe, 0x6c, 0x4c, 0x4e, 0x37, 0x8a, 0xaa, 0xb9, 0x09, 0x33, 0x77, - 0x6b, 0x2b, 0x55, 0x4d, 0xe9, 0x69, 0x26, 0x65, 0x59, 0x7d, 0x1c, 0xf1, 0xa0, 0xe3, 0xb6, 0xd4, - 0x7d, 0x2f, 0x39, 0x82, 0x7c, 0xaf, 0xd9, 0xc8, 0x56, 0x88, 0xa6, 0x38, 0x8a, 0x3a, 0xe4, 0xcd, - 0x32, 0xae, 0x23, 0x3f, 0x64, 0x1d, 0xa1, 0xdb, 0x6e, 0x0d, 0xa8, 0xc3, 0xe4, 0xc8, 0x76, 0xa0, - 0x74, 0x1d, 0x65, 0x35, 0xad, 0x96, 0xc2, 0xe1, 0xb5, 0xbc, 0x48, 0xb5, 0x3c, 0x2b, 0x85, 0xbc, - 0xec, 0x7a, 0xfa, 0xb8, 0x26, 0xfb, 0xc4, 0xc8, 0x91, 0xfb, 0xc4, 0xdf, 0xca, 0xc1, 0x98, 0x14, - 0x06, 0x69, 0x1a, 0x0f, 0x10, 0x37, 0x1f, 0x3c, 0x19, 0x71, 0xb3, 0x84, 0xe7, 0x84, 0x31, 0xa1, - 0x65, 0x19, 0x5b, 0x49, 0xad, 0x0b, 0x65, 0x93, 0x8b, 0xcf, 0x17, 0xb2, 0xe4, 0xe8, 0x65, 0xc1, - 0x6a, 0x89, 0x43, 0xfb, 0xf8, 0x91, 0x3e, 0x93, 0x2a, 0x08, 0xc0, 0x38, 0x39, 0xb4, 0x9b, 0x6e, - 0xec, 0x6b, 0x30, 0x41, 0x6e, 0xf2, 0xcb, 0x7b, 0xf4, 0x48, 0x59, 0x32, 0xec, 0x3e, 0x9a, 0xcb, - 0x7b, 0x89, 0xa0, 0x4b, 0x8e, 0xf6, 0xce, 0xe6, 0x9e, 0x91, 0x9a, 0x51, 0x21, 0xb2, 0xbb, 0x32, - 0x65, 0x99, 0x8c, 0x3b, 0x6a, 0x06, 0x1a, 0x8f, 0xe1, 0x14, 0x80, 0x47, 0xf9, 0xda, 0x66, 0x84, - 0x19, 0x4d, 0x78, 0xb0, 0x35, 0x28, 0xa1, 0xad, 0x10, 0x6f, 0xca, 0x55, 0x53, 0x5b, 0x91, 0xae, - 0xd8, 0x64, 0xef, 0x19, 0xc9, 0x32, 0x5a, 0x6e, 0x29, 0x2f, 0xa8, 0x3e, 0x4a, 0x71, 0x39, 0x2d, - 0xa5, 0x67, 0x1f, 0x7b, 0x07, 0x26, 0xe3, 0xb8, 0xaf, 0xb1, 0x1f, 0x26, 0x3e, 0x56, 0x24, 0x81, - 0x62, 0xcd, 0x44, 0x57, 0x1a, 0x3a, 0x5b, 0x82, 0xa2, 0x58, 0xc4, 0xe9, 0xa4, 0x90, 0x3d, 0x82, - 0xe9, 0x7e, 0x11, 0x0a, 0x8f, 0xd5, 0x61, 0x5e, 0x2c, 0x9a, 0xba, 0xd7, 0xd9, 0x6e, 0xf1, 0x35, - 0x7f, 0xdb, 0xef, 0x45, 0xf7, 0xec, 0x35, 0xda, 0xc3, 0xe5, 0x75, 0xc0, 0x6d, 0xb7, 0x8c, 0xe2, - 0xc0, 0xc8, 0x16, 0x9e, 0x41, 0xad, 0x6d, 0x95, 0x7f, 0x9c, 0x87, 0x49, 0x6d, 0x3e, 0xb1, 0x57, - 0xa1, 0x58, 0x0b, 0xd7, 0xfc, 0xc6, 0x6e, 0x1c, 0xa1, 0x6d, 0xfa, 0x60, 0xbf, 0x3c, 0xe1, 0x85, - 0x4e, 0x0b, 0x81, 0x76, 0x5c, 0xcc, 0x96, 0x61, 0x5a, 0xfe, 0xa5, 0xe2, 0xf1, 0xe7, 0x13, 0x65, - 0x91, 0x44, 0x56, 0x91, 0xf8, 0xf5, 0xdd, 0xd3, 0x20, 0x61, 0x5f, 0x06, 0x90, 0x00, 0xf4, 0xe9, - 0x2d, 0x0c, 0xef, 0x8d, 0x4c, 0x15, 0x64, 0x78, 0xf3, 0x6a, 0x0c, 0xd9, 0x57, 0x65, 0x9c, 0x58, - 0x35, 0xff, 0x47, 0x86, 0x77, 0xa7, 0x16, 0xfc, 0x9d, 0xec, 0xa8, 0x0e, 0x3a, 0x4b, 0x4a, 0xa1, - 0x71, 0xc6, 0xe6, 0x0d, 0xff, 0x21, 0x0f, 0xf6, 0x2a, 0x11, 0x22, 0x6a, 0x18, 0xd6, 0xff, 0x9c, - 0xd3, 0x56, 0x0d, 0xbb, 0x83, 0x79, 0x4c, 0xe5, 0x8c, 0x20, 0x7b, 0x9d, 0xf8, 0xce, 0xa0, 0xe0, - 0x36, 0xdf, 0x5a, 0x7e, 0x96, 0xac, 0x8b, 0xe7, 0xe3, 0x79, 0x95, 0xca, 0x6f, 0x2a, 0x81, 0xec, - 0x73, 0x30, 0x82, 0x5d, 0x97, 0x3f, 0xf2, 0xd3, 0xd4, 0xb1, 0x3d, 0x22, 0xfa, 0x0c, 0x3f, 0x04, - 0x29, 0xd9, 0x27, 0xc9, 0x1f, 0x52, 0x76, 0xfe, 0x8c, 0x76, 0xf6, 0x8a, 0x76, 0xc4, 0xe7, 0x75, - 0x12, 0xd8, 0x43, 0x9b, 0x3d, 0x7f, 0x27, 0x0f, 0xa5, 0xf4, 0x5a, 0x65, 0xef, 0xc3, 0x94, 0x3a, - 0x4f, 0x31, 0x47, 0xbe, 0xf8, 0xca, 0x29, 0x0a, 0xe6, 0xae, 0x0e, 0xd5, 0x74, 0x8a, 0x7c, 0x9d, - 0x40, 0x08, 0x37, 0x1b, 0x14, 0x68, 0x4b, 0x5b, 0x25, 0x91, 0x1f, 0x75, 0x53, 0xe1, 0x49, 0x15, - 0x1a, 0x7b, 0x13, 0x0a, 0xb7, 0xaf, 0x55, 0xc8, 0x6f, 0xa6, 0x94, 0x3e, 0x75, 0xa5, 0x5d, 0xa0, - 0x69, 0xa5, 0x28, 0xf0, 0xd9, 0x9a, 0x16, 0xc9, 0x77, 0xcc, 0xc8, 0xe0, 0xa5, 0xc0, 0xf1, 0xc7, - 0x1d, 0x1d, 0xd2, 0x57, 0x26, 0xdf, 0xa7, 0xd8, 0x94, 0xff, 0x6d, 0x01, 0x26, 0xe2, 0xfa, 0x19, - 0xd3, 0xbd, 0x11, 0xa5, 0xe7, 0x21, 0x3b, 0x0d, 0x45, 0x25, 0xae, 0x91, 0xfb, 0xcc, 0x78, 0x48, - 0xa2, 0xda, 0x22, 0x28, 0xb9, 0x4c, 0x2e, 0x73, 0x5b, 0xfd, 0x64, 0x97, 0x21, 0x16, 0xba, 0x06, - 0x49, 0x67, 0x23, 0x62, 0xc0, 0xec, 0x18, 0x8d, 0xcd, 0x40, 0xde, 0x93, 0xf1, 0x8e, 0x26, 0xec, - 0xbc, 0xd7, 0x64, 0xef, 0x43, 0xd1, 0x6d, 0x36, 0x79, 0xd3, 0x71, 0x95, 0xe1, 0xcb, 0x61, 0x93, - 0xa6, 0x28, 0xb8, 0xc9, 0x43, 0x00, 0xa9, 0x2a, 0x11, 0xab, 0xc0, 0x44, 0xcb, 0x95, 0xb6, 0x6d, - 0xcd, 0x21, 0x4e, 0x94, 0x84, 0x43, 0x51, 0x90, 0xdd, 0x0b, 0x79, 0x93, 0xbd, 0x02, 0x23, 0x62, - 0x34, 0xe9, 0x08, 0x51, 0x52, 0xa2, 0x18, 0x4c, 0xd9, 0x61, 0x37, 0x9e, 0xb1, 0x11, 0x81, 0xbd, - 0x04, 0x85, 0xde, 0xd2, 0x16, 0x1d, 0x0e, 0xa5, 0x24, 0xaa, 0x76, 0x8c, 0x26, 0x8a, 0xd9, 0x15, - 0x28, 0x3e, 0x32, 0x03, 0x32, 0x9f, 0x48, 0x0d, 0x63, 0x8c, 0x1f, 0x23, 0xb2, 0x57, 0xa0, 0x10, - 0x86, 0x3e, 0x59, 0x8b, 0xa8, 0x25, 0x58, 0xaf, 0xdf, 0x8d, 0x47, 0x4d, 0x70, 0x0f, 0x43, 0x7f, - 0xb9, 0x08, 0x63, 0xf2, 0xc4, 0xb0, 0x9e, 0x07, 0x48, 0xda, 0xd8, 0xef, 0x0e, 0x65, 0x7d, 0x19, - 0x26, 0xe2, 0xb6, 0xb1, 0xb3, 0x00, 0xbb, 0x7c, 0xcf, 0xd9, 0x71, 0x3b, 0xcd, 0x96, 0x14, 0x37, - 0xa7, 0xec, 0x89, 0x5d, 0xbe, 0x77, 0x03, 0x01, 0xec, 0x14, 0x8c, 0x77, 0xc5, 0xf0, 0xd3, 0x1c, - 0x9f, 0xb2, 0xc7, 0xba, 0xbd, 0x4d, 0x31, 0x95, 0x17, 0x61, 0x1c, 0xd5, 0x90, 0xb4, 0x22, 0xa7, - 0x6d, 0xf5, 0xd3, 0xfa, 0xf3, 0x02, 0x66, 0x2d, 0xd1, 0x3e, 0x88, 0xbd, 0x08, 0xd3, 0x8d, 0x80, - 0xe3, 0xe1, 0xe4, 0x0a, 0x91, 0x8b, 0xea, 0x99, 0x4a, 0x80, 0xb5, 0x26, 0x3b, 0x0f, 0xb3, 0xdd, - 0xde, 0x66, 0xcb, 0x6b, 0x88, 0xda, 0x9c, 0xc6, 0x26, 0x85, 0x59, 0x9f, 0xb2, 0xa7, 0x25, 0xf8, - 0x16, 0xdf, 0xab, 0x6e, 0x62, 0x40, 0xaf, 0x92, 0x1e, 0x8f, 0x35, 0x8a, 0x93, 0x02, 0xdb, 0xb3, - 0x1a, 0x1c, 0x0d, 0xdf, 0x4e, 0xc2, 0x98, 0xeb, 0x6e, 0xf7, 0x3c, 0x19, 0x78, 0x67, 0xca, 0xa6, - 0x5f, 0xec, 0x13, 0x30, 0x97, 0x84, 0x08, 0x56, 0x9f, 0x31, 0x8a, 0x9f, 0x51, 0x8a, 0x0b, 0xaa, - 0x12, 0xce, 0xde, 0x00, 0xa6, 0xd7, 0xe7, 0x6f, 0x7e, 0xc8, 0x1b, 0x72, 0x4e, 0x4e, 0xd9, 0x73, - 0x5a, 0xc9, 0x5d, 0x2c, 0x60, 0x2f, 0xc0, 0x54, 0xc0, 0x43, 0x14, 0xf7, 0xb0, 0xdb, 0x30, 0xa9, - 0x97, 0x3d, 0xa9, 0x60, 0xa2, 0xef, 0x2e, 0x40, 0x49, 0xeb, 0x0e, 0x0c, 0x79, 0x2b, 0x63, 0x8c, - 0xdb, 0x33, 0x09, 0xdc, 0xee, 0xd6, 0x9a, 0xec, 0x0b, 0x70, 0x46, 0xc3, 0x94, 0xf9, 0xc5, 0x1c, - 0xde, 0xf2, 0xb6, 0xbd, 0xcd, 0x16, 0xa7, 0xf9, 0xd6, 0x3f, 0xab, 0xe3, 0x3b, 0xa1, 0xbd, 0x98, - 0x50, 0xcb, 0xcc, 0x63, 0xab, 0x44, 0xcb, 0xd6, 0x60, 0x21, 0xc5, 0x99, 0x37, 0x9d, 0x5e, 0x77, - 0x60, 0xa4, 0xab, 0x84, 0x27, 0x33, 0x79, 0xf2, 0xe6, 0xbd, 0xae, 0xf5, 0x0d, 0x98, 0xd2, 0xe7, - 0xa4, 0xe8, 0x04, 0x5d, 0xd0, 0xa0, 0xd9, 0x37, 0x19, 0xc3, 0x6a, 0xe2, 0xa2, 0x37, 0x93, 0xa0, - 0x44, 0x71, 0xfe, 0x63, 0x7b, 0x3a, 0x86, 0xe2, 0x10, 0xbe, 0x00, 0x53, 0x4d, 0x2f, 0xec, 0xb6, - 0xdc, 0x3d, 0x27, 0xc9, 0x7e, 0x6a, 0x4f, 0x12, 0x0c, 0x35, 0x39, 0xcb, 0x30, 0xd7, 0xb7, 0x0f, - 0x6a, 0xd9, 0xee, 0xe5, 0xbe, 0x7e, 0x78, 0xb6, 0x7b, 0xab, 0x03, 0x53, 0xfa, 0xb9, 0x76, 0x44, - 0x3e, 0x80, 0x93, 0x18, 0xdd, 0x42, 0x6e, 0xfa, 0x63, 0x07, 0xfb, 0xe5, 0xbc, 0xd7, 0xc4, 0x98, - 0x16, 0x17, 0xa0, 0xa8, 0x44, 0x30, 0x92, 0x7c, 0x50, 0xd7, 0x4e, 0xb2, 0xff, 0x9e, 0x1d, 0x97, - 0x5a, 0xaf, 0xc0, 0x38, 0x1d, 0x5d, 0x87, 0x6b, 0xd8, 0xad, 0x1f, 0xce, 0xc3, 0xac, 0xcd, 0xc5, - 0xc6, 0xca, 0x65, 0x12, 0x90, 0xa7, 0xf6, 0xce, 0x9d, 0x1d, 0x23, 0xd1, 0xf8, 0xb6, 0x43, 0xd2, - 0x6f, 0xfc, 0xc3, 0x1c, 0xcc, 0x67, 0xe0, 0x7e, 0xa4, 0xf4, 0x93, 0x57, 0x61, 0x62, 0xc5, 0x73, - 0x5b, 0x95, 0x66, 0x33, 0x0e, 0x75, 0x81, 0x82, 0x3b, 0xe6, 0xa8, 0x71, 0x05, 0x54, 0x17, 0x62, - 0x62, 0x54, 0xf6, 0x1a, 0x4d, 0x8a, 0x24, 0x03, 0x2f, 0x4e, 0x8a, 0x6f, 0xef, 0x97, 0x41, 0xb6, - 0x29, 0x49, 0xcb, 0x8d, 0x71, 0x4b, 0x25, 0x30, 0xf1, 0x22, 0x79, 0x6a, 0x87, 0x2e, 0x3b, 0x6e, - 0x69, 0xfa, 0xf3, 0x86, 0xca, 0xc0, 0xf1, 0x13, 0x79, 0x38, 0x99, 0x4d, 0xf8, 0x51, 0x33, 0x89, - 0x62, 0xee, 0x13, 0x2d, 0xd6, 0x32, 0x66, 0x12, 0x95, 0x89, 0x52, 0x10, 0x3f, 0x41, 0x60, 0x5b, - 0x30, 0xbd, 0xe6, 0x86, 0xd1, 0x0d, 0xee, 0x06, 0xd1, 0x26, 0x77, 0xa3, 0x21, 0x24, 0xf9, 0x97, - 0xd4, 0x03, 0x3f, 0x0a, 0x13, 0x3b, 0x8a, 0x32, 0x25, 0x6b, 0x9b, 0x6c, 0xe3, 0x89, 0x32, 0x32, - 0xc4, 0x44, 0xf9, 0x1a, 0xcc, 0xd6, 0x79, 0xdb, 0xed, 0xee, 0xf8, 0x81, 0x72, 0x43, 0xbe, 0x08, - 0xd3, 0x31, 0x28, 0x73, 0xb6, 0x98, 0xc5, 0x06, 0xbe, 0xd6, 0x11, 0xc9, 0x56, 0x62, 0x16, 0x5b, - 0x7f, 0x37, 0x0f, 0xa7, 0x2a, 0x0d, 0xb2, 0xbb, 0xa3, 0x02, 0x65, 0x1e, 0xfc, 0x1d, 0xae, 0x9b, - 0x5d, 0x82, 0x89, 0xdb, 0xee, 0xe3, 0x35, 0xee, 0x86, 0x3c, 0xa4, 0x3c, 0x6e, 0x52, 0xec, 0x75, - 0x1f, 0x27, 0x6f, 0x23, 0x76, 0x82, 0xa3, 0xeb, 0x05, 0x46, 0x3e, 0xa6, 0x5e, 0xc0, 0x82, 0xb1, - 0x1b, 0x7e, 0xab, 0x49, 0x67, 0x3d, 0x3d, 0xc8, 0xee, 0x20, 0xc4, 0xa6, 0x12, 0x71, 0x9d, 0x9e, - 0x89, 0x5b, 0x8c, 0x4d, 0xf8, 0x8e, 0x77, 0xc9, 0x79, 0x18, 0xc7, 0x8a, 0xe2, 0x4c, 0xd8, 0x78, - 0x68, 0xb4, 0x38, 0x66, 0xe3, 0x6a, 0xda, 0xaa, 0x50, 0xef, 0x89, 0xd1, 0x8f, 0xd7, 0x13, 0xd6, - 0x3f, 0xc0, 0xb7, 0x5e, 0xfd, 0x2b, 0xc5, 0x49, 0xa4, 0x35, 0x24, 0x37, 0x64, 0x43, 0xf2, 0x4f, - 0x6c, 0x48, 0x0a, 0x03, 0x87, 0xe4, 0x47, 0xf2, 0x30, 0x19, 0x37, 0xf6, 0xbb, 0x2c, 0xe0, 0x77, - 0xfc, 0x5d, 0x43, 0x85, 0x0e, 0xa9, 0x6b, 0x7b, 0x05, 0x45, 0xe8, 0xf8, 0x1c, 0x8c, 0xd1, 0x62, - 0xca, 0xa5, 0xcc, 0x64, 0x53, 0xa3, 0xbb, 0x3c, 0x43, 0xac, 0xc7, 0x70, 0x40, 0x43, 0x9b, 0xe8, - 0x30, 0x36, 0xcb, 0x03, 0xbe, 0x49, 0x4f, 0xff, 0x4f, 0xed, 0x19, 0x95, 0x1d, 0x9b, 0x25, 0xf9, - 0xb0, 0xa1, 0x4e, 0xa7, 0x7f, 0x5a, 0x84, 0x52, 0x9a, 0xe4, 0xe8, 0x90, 0xea, 0xeb, 0xbd, 0x4d, - 0x79, 0x55, 0x91, 0x21, 0xd5, 0xbb, 0xbd, 0x4d, 0x5b, 0xc0, 0xd0, 0x32, 0x28, 0xf0, 0x1e, 0xe2, - 0x57, 0x4f, 0x91, 0x65, 0x50, 0xe0, 0x3d, 0x34, 0x2c, 0x83, 0x02, 0xef, 0x21, 0x2a, 0x12, 0xd6, - 0xea, 0xe8, 0x4e, 0x8e, 0xf7, 0x14, 0x52, 0x24, 0xb4, 0xc2, 0x74, 0x7a, 0x24, 0x85, 0x26, 0x8e, - 0xca, 0x65, 0xee, 0x06, 0x14, 0xfe, 0x9b, 0xb6, 0x33, 0x3c, 0x2a, 0x37, 0x11, 0x2c, 0xb3, 0x99, - 0xdb, 0x3a, 0x12, 0x6b, 0x01, 0xd3, 0x7e, 0xaa, 0x05, 0x7c, 0xf4, 0xdd, 0x5a, 0x99, 0xb8, 0x2d, - 0xe8, 0xac, 0x1d, 0x7d, 0x35, 0x67, 0xf0, 0x7d, 0x92, 0xea, 0xdc, 0x75, 0x8a, 0x69, 0x88, 0x0a, - 0xa4, 0xe2, 0x91, 0xcc, 0x54, 0xbc, 0x05, 0x90, 0x31, 0x0f, 0x63, 0x35, 0x52, 0xc2, 0x84, 0xbd, - 0x07, 0x93, 0x7a, 0x90, 0x00, 0xe9, 0xca, 0xfe, 0x9c, 0x0c, 0x53, 0x37, 0x20, 0xa1, 0xa6, 0x4e, - 0xc0, 0x36, 0xe1, 0x54, 0xd5, 0xef, 0x84, 0xbd, 0xb6, 0x0a, 0x88, 0x97, 0x84, 0xe1, 0x05, 0x1c, - 0x0a, 0xf4, 0x38, 0x6e, 0x10, 0x0a, 0xf9, 0xa4, 0x2b, 0x1f, 0x04, 0xf3, 0x02, 0x32, 0x88, 0x11, - 0xdb, 0x80, 0x49, 0x54, 0x89, 0x92, 0x91, 0xe3, 0xa4, 0xb9, 0x6d, 0x24, 0x25, 0x2b, 0x62, 0x61, - 0xc8, 0x60, 0x4c, 0x6e, 0xbb, 0xa5, 0x4c, 0xe0, 0x75, 0xd5, 0xae, 0x86, 0xcc, 0xbe, 0x0c, 0x33, - 0xf2, 0x8a, 0xf6, 0x80, 0x6f, 0xca, 0xb9, 0x33, 0x65, 0x68, 0x22, 0xcc, 0x42, 0xf9, 0x3a, 0x4f, - 0x8a, 0xe8, 0x47, 0x7c, 0x53, 0x8e, 0xbd, 0xe1, 0x80, 0x62, 0xe0, 0xb3, 0x7b, 0x30, 0x7f, 0xc3, - 0x0d, 0x25, 0x50, 0xf3, 0xf6, 0x9e, 0x46, 0x0d, 0x2d, 0x1a, 0x06, 0xef, 0xb8, 0xa1, 0xd2, 0x6c, - 0x67, 0x7a, 0x77, 0x67, 0xd1, 0xb3, 0x1f, 0xce, 0xc1, 0xa2, 0xa1, 0xf8, 0x26, 0x33, 0xac, 0x36, - 0xef, 0x44, 0xe8, 0x69, 0x32, 0x13, 0xe7, 0x51, 0x1f, 0x84, 0x26, 0x87, 0x24, 0xa5, 0x5b, 0x0f, - 0x92, 0x72, 0xdd, 0xe2, 0x76, 0x10, 0x0f, 0x5a, 0xa8, 0xb8, 0xa6, 0x67, 0xcd, 0x85, 0x9a, 0x5a, - 0xd7, 0x0a, 0xcd, 0xba, 0x9a, 0xee, 0x6f, 0x52, 0x74, 0xe5, 0x62, 0x45, 0xd7, 0x02, 0x8c, 0x62, - 0xaf, 0xaa, 0xe0, 0x34, 0xf8, 0xc3, 0xfa, 0xa4, 0xbe, 0x0f, 0x91, 0x58, 0x78, 0xe8, 0x3e, 0x64, - 0xfd, 0xf7, 0x63, 0x30, 0x9b, 0x9a, 0x16, 0x74, 0x4f, 0xcd, 0xf5, 0xdd, 0x53, 0xeb, 0x00, 0x52, - 0xd5, 0x3b, 0xa4, 0x4e, 0x56, 0x79, 0xb9, 0x4d, 0x92, 0xd3, 0x68, 0xbc, 0xa6, 0x34, 0x36, 0x82, - 0xa9, 0x5c, 0xb1, 0x43, 0xea, 0xc8, 0x63, 0xa6, 0x72, 0xd1, 0x6b, 0x4c, 0x13, 0x36, 0xac, 0x0c, - 0xa3, 0x18, 0x96, 0x52, 0x77, 0x32, 0xf4, 0x04, 0xc0, 0x96, 0x70, 0xf6, 0x22, 0x8c, 0x09, 0x21, - 0xaa, 0xb6, 0x42, 0x9b, 0x20, 0x9e, 0x2d, 0x42, 0xca, 0x12, 0x12, 0x0b, 0x15, 0xb1, 0xab, 0x30, - 0x25, 0xff, 0xa2, 0xa0, 0x22, 0x63, 0xa6, 0x6d, 0xa0, 0xe3, 0x35, 0x55, 0x5c, 0x11, 0x03, 0x4f, - 0xdc, 0x2e, 0xea, 0x3d, 0x54, 0xeb, 0xd4, 0x56, 0x28, 0x8e, 0x31, 0xde, 0x2e, 0x42, 0x09, 0x14, - 0x55, 0x24, 0x08, 0x42, 0x96, 0x21, 0x53, 0xff, 0x22, 0xde, 0x29, 0x51, 0x96, 0x91, 0x26, 0xfe, - 0x36, 0x95, 0xb0, 0x57, 0xe5, 0xd3, 0x0a, 0x8a, 0x85, 0x32, 0x1d, 0x1c, 0xbe, 0x5b, 0xa0, 0x62, - 0x02, 0x65, 0xc3, 0xb8, 0x58, 0x54, 0x2e, 0xfe, 0x5e, 0x6d, 0xbb, 0x5e, 0x8b, 0xb6, 0x15, 0xac, - 0x1c, 0x71, 0xb9, 0x80, 0xda, 0x09, 0x02, 0x7b, 0x07, 0x66, 0xc4, 0x8f, 0xaa, 0xdf, 0x6e, 0xfb, - 0x1d, 0x64, 0x3f, 0x99, 0xc4, 0xa7, 0x42, 0x92, 0x06, 0x16, 0xc9, 0x5a, 0x52, 0xb8, 0xe2, 0x3c, - 0xc1, 0x67, 0xdb, 0x9e, 0x7c, 0xf4, 0x99, 0x4a, 0xce, 0x13, 0x24, 0x0d, 0x25, 0xdc, 0xd6, 0x91, - 0xd8, 0x5b, 0x30, 0x2d, 0x7e, 0x5e, 0xf7, 0x1e, 0x72, 0x59, 0xe1, 0x74, 0x62, 0xaf, 0x80, 0x54, - 0xdb, 0xa2, 0x44, 0xd6, 0x67, 0x62, 0xb2, 0xcf, 0xc3, 0x09, 0xe4, 0xd4, 0xf0, 0xbb, 0xbc, 0x59, - 0xd9, 0xda, 0xf2, 0x5a, 0x9e, 0x34, 0xd6, 0x92, 0xe1, 0x33, 0x50, 0x07, 0x2f, 0x2b, 0x46, 0x0c, - 0xc7, 0x4d, 0x50, 0xec, 0x6c, 0x4a, 0xf6, 0x00, 0x4a, 0xd5, 0x5e, 0x18, 0xf9, 0xed, 0x4a, 0x14, - 0x05, 0xde, 0x66, 0x2f, 0xe2, 0xe1, 0xe2, 0xac, 0x11, 0x64, 0x42, 0x2c, 0x8e, 0xb8, 0x50, 0xea, - 0x83, 0x1a, 0x48, 0xe1, 0xb8, 0x31, 0x89, 0xdd, 0xc7, 0xc4, 0xfa, 0xc3, 0x1c, 0x4c, 0x1b, 0xa4, - 0xec, 0x4d, 0x98, 0xba, 0x16, 0x78, 0xbc, 0xd3, 0x6c, 0xed, 0x69, 0x17, 0x55, 0xbc, 0xc5, 0x6c, - 0x11, 0x5c, 0x7e, 0xb5, 0x81, 0x16, 0xeb, 0x79, 0xf2, 0x99, 0x96, 0x94, 0x97, 0xa4, 0xaf, 0x2b, - 0x4d, 0xd0, 0x42, 0x12, 0xf5, 0x06, 0x27, 0x28, 0xcd, 0x4e, 0x0d, 0x85, 0xbd, 0x0b, 0x63, 0xf2, - 0x81, 0x97, 0xcc, 0xfa, 0x4e, 0x67, 0x7d, 0xa6, 0xf4, 0xab, 0xc6, 0x89, 0x88, 0x56, 0x3c, 0xa1, - 0x4d, 0x44, 0xd6, 0xcf, 0xe6, 0x80, 0xf5, 0xa3, 0x1e, 0xa1, 0xf7, 0x3a, 0xd2, 0x3a, 0xe8, 0x73, - 0xf1, 0x6a, 0x2c, 0x18, 0x3a, 0x73, 0x51, 0x93, 0x2c, 0x90, 0x1d, 0x4f, 0xab, 0x4e, 0x57, 0xc4, - 0xc9, 0x62, 0xeb, 0x87, 0xf2, 0x00, 0x09, 0x36, 0xfb, 0x8c, 0xcc, 0xfe, 0xf3, 0xf9, 0x9e, 0xdb, - 0xf2, 0xb6, 0x3c, 0x33, 0x1c, 0x26, 0x32, 0xf9, 0x9a, 0x2a, 0xb1, 0x4d, 0x44, 0xf6, 0x3e, 0xcc, - 0xd6, 0xd7, 0x4d, 0x5a, 0xcd, 0xce, 0x3b, 0xec, 0x3a, 0x29, 0xf2, 0x34, 0x36, 0x9a, 0xef, 0xea, - 0xa3, 0x21, 0xcd, 0x77, 0xe5, 0x40, 0x50, 0x89, 0xd8, 0x58, 0xea, 0xeb, 0x64, 0xca, 0xde, 0xac, - 0xad, 0xd0, 0x2e, 0x85, 0xad, 0x0b, 0xbb, 0x4e, 0x97, 0x6c, 0xdc, 0xc5, 0x3e, 0x61, 0xe0, 0x25, - 0x1d, 0x39, 0x3a, 0xc0, 0x77, 0xfa, 0xe7, 0x50, 0xed, 0xd7, 0xf6, 0x23, 0x4e, 0xda, 0x8e, 0xa7, - 0xf6, 0xde, 0x93, 0x58, 0x07, 0x8c, 0x1a, 0x2e, 0xa1, 0xc6, 0xd7, 0x91, 0x05, 0xcc, 0x95, 0xe4, - 0x92, 0x22, 0xed, 0x04, 0x32, 0x8c, 0x66, 0xfe, 0x7e, 0x0e, 0x4e, 0x64, 0xd2, 0xb2, 0x8b, 0x00, - 0x89, 0x4e, 0x89, 0x7a, 0x09, 0x77, 0xcc, 0x24, 0xd6, 0x8b, 0xad, 0x61, 0xb0, 0x2f, 0xa5, 0xb5, - 0x41, 0x47, 0x1f, 0x84, 0x67, 0x54, 0x2c, 0x2f, 0x53, 0x1b, 0x94, 0xa1, 0x03, 0xb2, 0xfe, 0x61, - 0x01, 0xe6, 0xb4, 0x50, 0x32, 0xb2, 0xad, 0x47, 0x98, 0x53, 0xef, 0xc2, 0x94, 0xf8, 0x1a, 0xaf, - 0x41, 0x7e, 0x69, 0xd2, 0x92, 0xe5, 0xb5, 0x3e, 0xa7, 0x3e, 0xe2, 0x76, 0x51, 0x47, 0x96, 0x11, - 0xf6, 0x70, 0xeb, 0xc4, 0x07, 0x89, 0x46, 0xbf, 0x7f, 0x9a, 0xc1, 0x9c, 0x85, 0x30, 0xbd, 0xb2, - 0xd7, 0x71, 0xdb, 0x71, 0x6d, 0xd2, 0xa2, 0xe5, 0x13, 0x03, 0x6b, 0x33, 0xb0, 0x65, 0x75, 0x89, - 0xfb, 0x8b, 0x2c, 0xcb, 0xf0, 0xbc, 0x36, 0xa8, 0xce, 0xbc, 0x0f, 0x73, 0x7d, 0x8d, 0x3e, 0x56, - 0xb0, 0xbf, 0x07, 0xc0, 0xfa, 0xdb, 0x91, 0xc1, 0xe1, 0x13, 0x66, 0x28, 0xc9, 0x13, 0xf1, 0xe3, - 0x35, 0xe6, 0x47, 0x97, 0xf6, 0x31, 0x4b, 0x7a, 0x28, 0xc0, 0x9f, 0xcb, 0xeb, 0x8e, 0x95, 0x4f, - 0xfb, 0xaa, 0xfb, 0x9c, 0x71, 0x1b, 0x7e, 0x7e, 0xd0, 0x98, 0x0e, 0xa5, 0x75, 0xf8, 0x56, 0x01, - 0x4e, 0x0d, 0xa0, 0x64, 0x7b, 0xe9, 0x49, 0x24, 0xb5, 0x10, 0x97, 0x0f, 0xaf, 0xf0, 0x49, 0x4c, - 0x25, 0xf6, 0x19, 0x19, 0x5a, 0xa1, 0x81, 0x39, 0xb8, 0xe9, 0xfe, 0x8d, 0x6a, 0xfc, 0xdd, 0x18, - 0x9a, 0x8e, 0xa9, 0x20, 0xa1, 0xec, 0x7d, 0x18, 0x45, 0xaf, 0xda, 0x54, 0x28, 0x3b, 0x81, 0x81, - 0x70, 0x2d, 0xee, 0x9f, 0xf8, 0x69, 0xc4, 0xfd, 0x13, 0x00, 0xf6, 0x69, 0x28, 0x54, 0x1e, 0xd4, - 0x69, 0x5c, 0x66, 0x74, 0xf2, 0x07, 0xf5, 0x24, 0x67, 0x81, 0x6b, 0x24, 0x17, 0x10, 0x14, 0x82, - 0xf0, 0x7a, 0x75, 0x9d, 0x46, 0x45, 0x27, 0xbc, 0x5e, 0x5d, 0x4f, 0x08, 0xb7, 0x1b, 0x46, 0x68, - 0xa0, 0xeb, 0xd5, 0xf5, 0xef, 0xdc, 0xb4, 0xff, 0xb7, 0xf2, 0x32, 0x1e, 0x84, 0xfc, 0xb0, 0xf7, - 0x61, 0xca, 0x08, 0xf5, 0x9b, 0x4b, 0xe4, 0xb1, 0x38, 0x2c, 0x73, 0xca, 0x04, 0xc8, 0x20, 0x50, - 0xd9, 0x3f, 0xc4, 0x6f, 0x94, 0x78, 0x75, 0x63, 0x9b, 0x98, 0x03, 0xca, 0xc4, 0xe9, 0xec, 0x1f, - 0x31, 0x09, 0xbb, 0x02, 0xc5, 0x0d, 0xde, 0x71, 0x3b, 0x51, 0xac, 0x10, 0x45, 0x6b, 0xe1, 0x08, - 0x61, 0xa6, 0xd4, 0x10, 0x23, 0xa2, 0x65, 0x6b, 0x6f, 0x33, 0x6c, 0x04, 0x1e, 0xc6, 0x8d, 0x89, - 0xcf, 0x62, 0x69, 0xd9, 0xaa, 0x95, 0x98, 0x0c, 0x52, 0x44, 0xd6, 0xcf, 0xe5, 0x60, 0x9c, 0x06, - 0x52, 0x66, 0x6d, 0xda, 0x4e, 0xce, 0x12, 0xca, 0xda, 0xb4, 0xed, 0xa5, 0xb3, 0x36, 0x6d, 0xcb, - 0xe0, 0x2c, 0x13, 0xe4, 0x29, 0x16, 0x3f, 0x0d, 0xe2, 0x6c, 0x54, 0x3e, 0x75, 0x66, 0x52, 0x9e, - 0x18, 0x75, 0x58, 0x7f, 0x25, 0xeb, 0xef, 0x51, 0xcb, 0xae, 0x57, 0xd7, 0xd9, 0x12, 0x14, 0xd7, - 0x7c, 0x19, 0xf8, 0x47, 0x4f, 0xc1, 0xd9, 0x22, 0x98, 0xde, 0x41, 0x0a, 0x4f, 0xb4, 0x6f, 0x3d, - 0xf0, 0xe9, 0x2e, 0xa3, 0xb5, 0xaf, 0x2b, 0x81, 0xa9, 0xf6, 0xc5, 0xa8, 0x43, 0xb7, 0x8f, 0x67, - 0x6c, 0x12, 0xf7, 0xaf, 0x60, 0x5a, 0x84, 0x9b, 0xba, 0x1f, 0x18, 0x15, 0xa9, 0x9d, 0xe2, 0xcc, - 0xa0, 0x9d, 0xe2, 0xfe, 0x15, 0x3b, 0x83, 0x0a, 0xdf, 0xd5, 0x12, 0x70, 0x9d, 0x07, 0x0f, 0x9f, - 0xe2, 0x5d, 0x3a, 0xfb, 0x5d, 0x2d, 0xfd, 0x79, 0x43, 0x6d, 0xd2, 0xbf, 0x9f, 0x87, 0x93, 0xd9, - 0x84, 0xfa, 0xb7, 0xe4, 0x0e, 0xf9, 0x96, 0x0b, 0x50, 0xbc, 0xe1, 0x87, 0x91, 0x66, 0xf5, 0x87, - 0xea, 0xff, 0x1d, 0x82, 0xd9, 0x71, 0xa9, 0xb8, 0x73, 0x8b, 0xbf, 0xe3, 0xe5, 0x89, 0xfc, 0x30, - 0x0a, 0x82, 0xb8, 0x73, 0xcb, 0x22, 0x76, 0x1d, 0x8a, 0x36, 0xf9, 0x21, 0xa5, 0xba, 0x46, 0x81, - 0x63, 0x69, 0x8a, 0x05, 0x04, 0x31, 0x22, 0x2e, 0x13, 0x8c, 0x55, 0x60, 0x9c, 0x46, 0x3f, 0xf5, - 0x74, 0x9c, 0x31, 0x65, 0xcc, 0x20, 0xe8, 0x8a, 0x4e, 0xec, 0x28, 0xf8, 0x08, 0x58, 0x5b, 0x51, - 0x2e, 0x45, 0xb8, 0xa3, 0xc8, 0x47, 0x42, 0xd3, 0xc0, 0x32, 0x46, 0xb4, 0x7e, 0x38, 0x0f, 0xa0, - 0xb4, 0x36, 0x4f, 0xed, 0x0c, 0xfb, 0xb4, 0x31, 0xc3, 0x34, 0x7b, 0xa3, 0xe1, 0xb3, 0x8c, 0xde, - 0x45, 0x73, 0x9e, 0xe1, 0x73, 0x8c, 0x96, 0x61, 0x74, 0x23, 0x51, 0x68, 0x91, 0x8f, 0x09, 0xaa, - 0xa3, 0x25, 0xdc, 0xda, 0x84, 0x85, 0xeb, 0x3c, 0x4a, 0xd4, 0x5b, 0xea, 0xe9, 0xf1, 0x70, 0xb6, - 0xaf, 0xc3, 0x04, 0xe1, 0xc7, 0xfb, 0x97, 0xd4, 0xc5, 0x50, 0x60, 0x11, 0xd4, 0xc5, 0x28, 0x04, - 0xb1, 0x1b, 0xad, 0xf0, 0x16, 0x8f, 0xf8, 0x77, 0xb6, 0x9a, 0x3a, 0x30, 0xf9, 0x29, 0xf8, 0x65, - 0xc3, 0xd5, 0x70, 0x64, 0xff, 0xdc, 0x87, 0x13, 0x71, 0xdb, 0x9f, 0x24, 0xdf, 0x4b, 0xe2, 0x4a, - 0x49, 0xf1, 0xc3, 0x13, 0x8e, 0x87, 0xd8, 0x9e, 0x3c, 0x86, 0x33, 0x8a, 0xe0, 0x81, 0x17, 0x1b, - 0x4e, 0x0e, 0x45, 0xcb, 0xde, 0x81, 0x49, 0x8d, 0x86, 0xe2, 0x5f, 0xa3, 0x9a, 0xfa, 0x91, 0x17, - 0xed, 0x38, 0xa1, 0x84, 0xeb, 0x6a, 0x6a, 0x0d, 0xdd, 0xfa, 0x22, 0x3c, 0x1b, 0xfb, 0x01, 0x65, - 0x54, 0x9d, 0x62, 0x9e, 0x3b, 0x1e, 0xf3, 0x3b, 0xc9, 0x67, 0xd5, 0x3a, 0xb1, 0xe3, 0xb0, 0xe2, - 0xcd, 0xf4, 0xcf, 0xa2, 0x8f, 0x79, 0xae, 0xcf, 0x15, 0x59, 0xf3, 0x38, 0xb6, 0xde, 0xd6, 0x1a, - 0x9b, 0xc1, 0xd0, 0x20, 0xce, 0xa5, 0x89, 0x7f, 0x38, 0x0f, 0xb3, 0x77, 0x6b, 0x2b, 0xd5, 0xd8, - 0xfa, 0xe8, 0xbb, 0x2c, 0x07, 0xaa, 0xf1, 0x6d, 0x83, 0xf7, 0x1b, 0xeb, 0x1e, 0xcc, 0xa7, 0xba, - 0x01, 0x45, 0x87, 0xf7, 0xa4, 0x07, 0x49, 0x0c, 0x56, 0x62, 0xc3, 0xc9, 0x2c, 0xf6, 0xf7, 0xaf, - 0xd8, 0x29, 0x6c, 0xeb, 0xbf, 0x84, 0x14, 0x5f, 0xda, 0xc2, 0x5e, 0x87, 0x89, 0x5a, 0x18, 0xf6, - 0x78, 0x70, 0xcf, 0x5e, 0xd3, 0x55, 0x05, 0x1e, 0x02, 0x9d, 0x5e, 0xd0, 0xb2, 0x13, 0x04, 0xf6, - 0x2a, 0x14, 0x29, 0x24, 0xb4, 0xda, 0x13, 0x50, 0x6b, 0x1b, 0x47, 0x94, 0xb6, 0xe3, 0x62, 0xf6, - 0x26, 0x4c, 0xc9, 0xbf, 0xe5, 0x6c, 0xa3, 0x0e, 0x47, 0xe5, 0x20, 0xa1, 0xcb, 0xd9, 0x69, 0x1b, - 0x68, 0xec, 0x35, 0x28, 0x54, 0xaa, 0x36, 0xa9, 0x83, 0x48, 0x6e, 0xc4, 0xcc, 0xe6, 0x3d, 0x6e, - 0x5e, 0x22, 0xaa, 0xb6, 0x90, 0xfe, 0x54, 0xf4, 0x04, 0xd2, 0x64, 0xcb, 0x04, 0xec, 0x04, 0x4b, - 0x1d, 0x66, 0x08, 0x63, 0x97, 0x60, 0x7c, 0x45, 0x9a, 0xcc, 0x91, 0x1e, 0x5b, 0x26, 0xf8, 0x92, - 0x20, 0x23, 0xf6, 0x80, 0x04, 0xb1, 0x57, 0x55, 0xe2, 0xa3, 0x62, 0xe2, 0x88, 0x32, 0x20, 0xbb, - 0xd1, 0xeb, 0x30, 0x46, 0x81, 0x93, 0x27, 0xb4, 0x94, 0x08, 0xe9, 0x80, 0xc9, 0x84, 0xd3, 0xef, - 0x91, 0x0a, 0x4f, 0xd2, 0x23, 0x75, 0x13, 0x4e, 0x5d, 0x47, 0xed, 0x8d, 0x19, 0x6d, 0xe8, 0x9e, - 0x5d, 0x23, 0x7d, 0x38, 0x3e, 0x03, 0x49, 0x05, 0x4f, 0x3a, 0x60, 0x91, 0xd3, 0x0b, 0xf4, 0x7c, - 0x95, 0x83, 0x18, 0xb1, 0x2f, 0xc0, 0x42, 0x56, 0x11, 0x69, 0xcd, 0x31, 0xae, 0x4e, 0x76, 0x05, - 0x7a, 0x5c, 0x9d, 0x2c, 0x0e, 0x6c, 0x0d, 0x4a, 0x12, 0x5e, 0x69, 0xb6, 0xbd, 0x8e, 0xd4, 0xfc, - 0x4b, 0xad, 0x3a, 0x7a, 0x86, 0x10, 0x57, 0x57, 0x14, 0xca, 0x17, 0x00, 0xc3, 0x97, 0x28, 0x45, - 0xc9, 0x7e, 0x2a, 0x27, 0x6e, 0x73, 0x32, 0xcc, 0xf0, 0x3d, 0x7b, 0x2d, 0xa4, 0x98, 0x6c, 0x27, - 0x13, 0x37, 0xa1, 0x7a, 0x14, 0x78, 0x9d, 0x6d, 0xf2, 0x13, 0xda, 0x20, 0x3f, 0xa1, 0x77, 0x3e, - 0x92, 0x9f, 0x90, 0x64, 0x15, 0x1e, 0xec, 0x97, 0xa7, 0x02, 0xaa, 0x13, 0x57, 0x91, 0xd1, 0x02, - 0xd1, 0x75, 0xe8, 0x2c, 0x7b, 0xaf, 0x23, 0x83, 0x9c, 0xf2, 0xa6, 0xfc, 0xc8, 0x59, 0xdc, 0xc1, - 0xb1, 0xeb, 0x30, 0xd4, 0xbe, 0xd3, 0x8b, 0x11, 0xfa, 0x3e, 0x34, 0x93, 0x83, 0xb8, 0x78, 0x2a, - 0x5f, 0x14, 0xe9, 0x5e, 0x5b, 0x4a, 0x2e, 0x9e, 0xca, 0x71, 0xc5, 0xc1, 0x69, 0xa4, 0x4f, 0x1e, - 0x83, 0x84, 0x5d, 0x82, 0xb1, 0xdb, 0xee, 0xe3, 0xca, 0x36, 0xa7, 0x84, 0x76, 0xd3, 0x6a, 0xfb, - 0x43, 0xe0, 0x72, 0xf1, 0x0f, 0xa4, 0xaf, 0xc3, 0x33, 0x36, 0xa1, 0xb1, 0xef, 0xcb, 0xc1, 0x49, - 0xb9, 0x8c, 0xd5, 0x57, 0xd6, 0x79, 0x14, 0x89, 0x7e, 0xa0, 0xe0, 0x6c, 0xe7, 0x12, 0x83, 0xed, - 0x6c, 0x3c, 0x74, 0x4c, 0xb7, 0x68, 0x67, 0x88, 0x3b, 0x2e, 0xa4, 0x52, 0x23, 0xec, 0x6c, 0x26, - 0x3d, 0xdb, 0x80, 0xc9, 0xdb, 0xd7, 0x2a, 0x71, 0xb5, 0x32, 0x16, 0x75, 0x39, 0x6b, 0x77, 0xd4, - 0xd0, 0xb2, 0x3c, 0x0d, 0x74, 0x36, 0xe4, 0x1d, 0xf0, 0x69, 0xd5, 0x1f, 0xec, 0x0d, 0xdd, 0xb7, - 0xb4, 0x80, 0xd2, 0xf3, 0x78, 0xdb, 0x7d, 0xec, 0xb8, 0xdb, 0xdc, 0x78, 0x25, 0x27, 0xed, 0xf5, - 0xcf, 0xe4, 0xe0, 0xf4, 0xc0, 0x4f, 0x66, 0x57, 0xe1, 0x94, 0x2b, 0x3d, 0xa6, 0x9d, 0x9d, 0x28, - 0xea, 0x86, 0x8e, 0xba, 0x62, 0x90, 0x37, 0xaa, 0x7d, 0x82, 0x8a, 0x6f, 0x88, 0x52, 0x75, 0xeb, - 0x08, 0xd9, 0xfb, 0xf0, 0x9c, 0xd7, 0x09, 0x79, 0xa3, 0x17, 0x70, 0x47, 0x31, 0x68, 0x78, 0xcd, - 0xc0, 0x09, 0xdc, 0xce, 0xb6, 0x72, 0xad, 0xb5, 0x4f, 0x2b, 0x1c, 0xf2, 0xca, 0xae, 0x7a, 0xcd, - 0xc0, 0x46, 0x04, 0xeb, 0x0f, 0x73, 0xb0, 0x38, 0xa8, 0x4b, 0xd8, 0x22, 0x8c, 0xf3, 0x8e, 0xbb, - 0xd9, 0x52, 0x0e, 0x45, 0xb6, 0xfa, 0xc9, 0x9e, 0x85, 0x64, 0xa7, 0xa7, 0xd3, 0xbf, 0xd8, 0xa0, - 0x0c, 0x01, 0x68, 0xda, 0xae, 0xef, 0xeb, 0x64, 0xa0, 0x3c, 0xd5, 0xd0, 0x77, 0xf7, 0xb3, 0x00, - 0xc9, 0x76, 0x2e, 0x15, 0x13, 0xf6, 0x84, 0xdb, 0x08, 0xe4, 0xca, 0x63, 0x27, 0x61, 0x4c, 0x6e, - 0x97, 0xe4, 0xff, 0x40, 0xbf, 0xc4, 0xb9, 0x4d, 0x9d, 0x8c, 0xfb, 0x7c, 0x61, 0x79, 0xca, 0xe8, - 0xec, 0xb1, 0x36, 0x0e, 0x8e, 0xf5, 0xd3, 0xd3, 0x52, 0x84, 0xa8, 0xf4, 0xa2, 0x1d, 0x25, 0x74, - 0x2c, 0x65, 0x39, 0x80, 0x49, 0x5b, 0x4a, 0xcd, 0x2e, 0xdb, 0x74, 0xfb, 0x52, 0x6f, 0x3f, 0xf9, - 0xcc, 0xb7, 0x9f, 0xd7, 0x61, 0xa2, 0xba, 0xc3, 0x1b, 0xbb, 0xb1, 0x13, 0x4e, 0x91, 0x94, 0xeb, - 0x02, 0x28, 0x03, 0x40, 0x27, 0x08, 0xec, 0x12, 0x00, 0xfa, 0x9d, 0x4a, 0x89, 0x54, 0x4b, 0xe2, - 0x80, 0x6e, 0xaa, 0x64, 0x9e, 0xa2, 0xa1, 0x20, 0xfb, 0xba, 0x7d, 0x4d, 0xb7, 0x67, 0x91, 0xec, - 0xc3, 0x60, 0x8b, 0xd0, 0x13, 0x04, 0xf1, 0x79, 0xda, 0xbe, 0x42, 0xa7, 0x60, 0xa9, 0x6f, 0xf3, - 0xd1, 0x91, 0xd8, 0x45, 0x98, 0x58, 0x57, 0x8e, 0x04, 0x78, 0x08, 0x4e, 0x21, 0x05, 0x24, 0x4e, - 0x07, 0x8b, 0x39, 0x3b, 0x41, 0x61, 0x9f, 0x86, 0xf1, 0x2a, 0x0f, 0xa2, 0x8d, 0x8d, 0x35, 0x34, - 0x3a, 0x91, 0xb9, 0x0e, 0x8a, 0x18, 0x97, 0x3e, 0x8a, 0x5a, 0xdf, 0xde, 0x2f, 0x4f, 0x47, 0x5e, - 0x9b, 0xc7, 0x31, 0x9c, 0x6d, 0x85, 0xcd, 0x96, 0xa1, 0x24, 0x9f, 0xc5, 0x93, 0xbb, 0x07, 0x9e, - 0x8c, 0x45, 0x79, 0x4e, 0xd3, 0x1b, 0xfa, 0x23, 0xbe, 0x19, 0x47, 0xe5, 0xef, 0xc3, 0x67, 0xab, - 0x2a, 0x99, 0x85, 0xfe, 0x99, 0x90, 0x28, 0xc3, 0xd2, 0x3b, 0x86, 0xf8, 0xda, 0x7e, 0x0a, 0x56, - 0x81, 0xe9, 0xaa, 0xdf, 0xee, 0xba, 0x91, 0x87, 0xe9, 0xe5, 0xf6, 0xe8, 0x10, 0x44, 0x85, 0x5e, - 0x43, 0x2f, 0x30, 0x4e, 0x54, 0xbd, 0x80, 0x5d, 0x83, 0x19, 0xdb, 0xef, 0x89, 0x61, 0x52, 0xb7, - 0x70, 0x79, 0xce, 0xa1, 0x69, 0x48, 0x20, 0x4a, 0xc4, 0xb1, 0x4c, 0x57, 0x6e, 0x23, 0xbc, 0xa6, - 0x41, 0xc5, 0xee, 0x64, 0x3c, 0x87, 0xe8, 0x87, 0x9b, 0x1e, 0x9b, 0xbf, 0x8f, 0x59, 0xc6, 0x4b, - 0xca, 0x15, 0x98, 0xac, 0xd7, 0xef, 0x6e, 0xf0, 0x30, 0xba, 0xd6, 0xf2, 0x1f, 0xe1, 0xd9, 0x56, - 0xa4, 0x9c, 0x45, 0xa1, 0xef, 0x44, 0x3c, 0x8c, 0x9c, 0xad, 0x96, 0xff, 0xc8, 0xd6, 0xb1, 0xd8, - 0x57, 0x44, 0x7f, 0x68, 0x92, 0x20, 0x05, 0x12, 0x3d, 0x4c, 0x58, 0xc5, 0x13, 0x24, 0x59, 0x34, - 0x42, 0x64, 0x35, 0x3b, 0x4b, 0x43, 0x47, 0x9f, 0xb2, 0xc0, 0x7f, 0xbc, 0x57, 0x69, 0x36, 0x03, - 0x1e, 0x86, 0x74, 0x08, 0x49, 0x9f, 0x32, 0x54, 0x36, 0xb8, 0xb2, 0xc0, 0xf0, 0x29, 0xd3, 0x08, - 0xd8, 0x8f, 0xe6, 0xe0, 0x84, 0xee, 0x6d, 0x82, 0xcb, 0x05, 0xcd, 0x5c, 0xe4, 0x91, 0xf4, 0xc6, - 0x45, 0x75, 0x08, 0x5f, 0xd4, 0xd0, 0x2e, 0x3e, 0xbc, 0x7c, 0xb1, 0x92, 0xfc, 0xac, 0x2b, 0x22, - 0x0c, 0x8a, 0x56, 0xce, 0xe4, 0x97, 0xb4, 0x60, 0x31, 0x67, 0x2f, 0xb8, 0x19, 0xc4, 0xac, 0x2a, - 0x24, 0x35, 0x31, 0xa3, 0xd0, 0x70, 0xaa, 0xb6, 0x8e, 0x67, 0x1a, 0x69, 0x54, 0x69, 0xfe, 0x49, - 0x13, 0x2b, 0xaf, 0x6b, 0x0a, 0x64, 0x1a, 0x0d, 0xab, 0xc1, 0xac, 0x04, 0x88, 0x6d, 0x41, 0xa6, - 0xb4, 0x99, 0x4f, 0xc2, 0xea, 0x13, 0x1b, 0x7c, 0xeb, 0xc7, 0xb4, 0x36, 0x7a, 0xe4, 0xcb, 0x14, - 0x1d, 0x7b, 0x1f, 0x66, 0xc2, 0x70, 0xc7, 0xd1, 0xd6, 0xeb, 0x02, 0xae, 0x62, 0x0c, 0xe0, 0x49, - 0x25, 0x29, 0xcf, 0xbb, 0xa9, 0x30, 0xdc, 0x49, 0x56, 0xf4, 0xfb, 0x30, 0x83, 0xb6, 0x3a, 0x09, - 0x83, 0x13, 0x09, 0x03, 0x2a, 0x49, 0x33, 0x88, 0x5a, 0x61, 0xc2, 0xe0, 0x6f, 0xe7, 0xe0, 0xb4, - 0xa8, 0x28, 0x7b, 0x84, 0x4e, 0x7e, 0x94, 0x11, 0xc2, 0x90, 0x86, 0x03, 0x79, 0xea, 0xe2, 0x68, - 0x18, 0xee, 0x64, 0x71, 0xc0, 0x46, 0x89, 0xc6, 0x67, 0x37, 0xea, 0xd4, 0x47, 0x6e, 0xd4, 0x40, - 0x9e, 0x7a, 0xa3, 0xa2, 0x56, 0x98, 0xc5, 0x01, 0xaf, 0xb5, 0xf5, 0xca, 0xed, 0xb5, 0xe4, 0x6e, - 0xf6, 0xdd, 0xe5, 0xb6, 0x62, 0x7c, 0xdb, 0x21, 0x6e, 0x2b, 0xf7, 0xa4, 0x5b, 0xb4, 0xd6, 0x0d, - 0xea, 0x5a, 0x6b, 0x80, 0xd3, 0xd7, 0xda, 0x14, 0x8d, 0x9d, 0xc2, 0xb6, 0x7e, 0x09, 0x52, 0x7c, - 0xc9, 0x54, 0xd5, 0x82, 0x31, 0x79, 0x6b, 0xa5, 0x4e, 0x46, 0x9b, 0x05, 0x79, 0xa7, 0xb5, 0xa9, - 0x84, 0x9d, 0x86, 0x42, 0xbd, 0x7e, 0x97, 0x3a, 0x19, 0x0d, 0x56, 0xc3, 0xd0, 0xb7, 0x05, 0x4c, - 0x8c, 0x10, 0x5a, 0xa1, 0x6a, 0x01, 0xdf, 0xc5, 0x79, 0x67, 0x23, 0x54, 0xf4, 0xb7, 0xba, 0x43, - 0x8e, 0x24, 0xfd, 0x4d, 0x77, 0xc8, 0xe4, 0xe6, 0x58, 0x85, 0xc5, 0x4a, 0x18, 0xf2, 0x40, 0x4c, - 0x08, 0x32, 0x6e, 0x0c, 0xe8, 0x9e, 0x43, 0x07, 0x3b, 0x56, 0xea, 0x36, 0x42, 0x7b, 0x20, 0x22, - 0xbb, 0x00, 0xc5, 0x4a, 0xaf, 0xe9, 0xf1, 0x4e, 0xc3, 0x88, 0x5a, 0xe6, 0x12, 0xcc, 0x8e, 0x4b, - 0xd9, 0xe7, 0xe1, 0x44, 0x2a, 0xa4, 0x20, 0xf5, 0xc0, 0x78, 0xb2, 0xf7, 0xaa, 0x7b, 0x58, 0x62, - 0x90, 0x21, 0xbb, 0x24, 0x9b, 0x92, 0x55, 0xa0, 0xb4, 0x8a, 0x6e, 0x5a, 0x2b, 0x5c, 0xbe, 0x0d, - 0xf9, 0x81, 0xf4, 0xcf, 0x93, 0xb7, 0x66, 0xe9, 0xc2, 0xe5, 0x34, 0xe3, 0x42, 0xbb, 0x0f, 0x9d, - 0xdd, 0x82, 0xf9, 0x34, 0x4c, 0x9c, 0xe0, 0xf2, 0x82, 0x8c, 0xfb, 0x4d, 0x1f, 0x17, 0x3c, 0xc3, - 0xb3, 0xa8, 0xd8, 0x26, 0xcc, 0x25, 0x06, 0x49, 0xe6, 0xb5, 0x59, 0xd9, 0x39, 0xc7, 0xe5, 0xea, - 0xea, 0xfc, 0x2c, 0x4d, 0xc6, 0xf9, 0xc4, 0xb8, 0x29, 0xbe, 0x3e, 0xdb, 0xfd, 0xec, 0x58, 0x13, - 0x66, 0xea, 0xde, 0x76, 0xc7, 0xeb, 0x6c, 0xdf, 0xe2, 0x7b, 0xeb, 0xae, 0x17, 0x90, 0xc5, 0xa9, - 0xb2, 0x27, 0xaf, 0x84, 0x7b, 0xed, 0x36, 0x8f, 0x02, 0xdc, 0x08, 0x45, 0x39, 0xfa, 0xa0, 0x8b, - 0xeb, 0xd0, 0x99, 0x50, 0xd2, 0xa1, 0xdb, 0x66, 0xd7, 0xf5, 0x0c, 0x21, 0xc0, 0xe4, 0x69, 0xa8, - 0x2e, 0xa6, 0x86, 0x54, 0x5d, 0xb4, 0x60, 0x6e, 0xb5, 0xd3, 0x08, 0xf6, 0xf0, 0x89, 0x4e, 0x35, - 0x6e, 0xfa, 0x88, 0xc6, 0xbd, 0x44, 0x8d, 0x7b, 0xce, 0x55, 0x33, 0x2c, 0xab, 0x79, 0xfd, 0x8c, - 0x59, 0x1d, 0xe6, 0xf0, 0xe2, 0x50, 0x5b, 0x59, 0xaf, 0x75, 0xbc, 0xc8, 0x73, 0x23, 0xde, 0x24, - 0xe1, 0xe2, 0x65, 0xe2, 0x79, 0x56, 0x5e, 0x51, 0xbd, 0x66, 0xd7, 0xf1, 0x14, 0x8a, 0xce, 0xb4, - 0x8f, 0xfe, 0xb0, 0x7b, 0xe2, 0xec, 0x5f, 0xd2, 0x3d, 0xb1, 0x06, 0xb3, 0xe9, 0xd8, 0x0c, 0xa5, - 0xe4, 0x1c, 0x0e, 0xb1, 0x48, 0x1c, 0xe7, 0x7e, 0x0f, 0x85, 0x49, 0x23, 0x27, 0xa1, 0x49, 0x97, - 0xbe, 0x72, 0xce, 0x19, 0x57, 0x4e, 0x63, 0x57, 0x3a, 0xc6, 0x95, 0x93, 0xad, 0x03, 0x5c, 0xf3, - 0x83, 0x06, 0xaf, 0xa0, 0x7f, 0x34, 0x33, 0xb2, 0xfb, 0x08, 0xa6, 0x49, 0xa1, 0x5c, 0x3f, 0x5b, - 0xe2, 0xb7, 0x93, 0x76, 0x73, 0xd7, 0x78, 0x58, 0x3f, 0x96, 0x87, 0xc5, 0x41, 0xcd, 0x39, 0xe4, - 0xba, 0xf7, 0x09, 0xe8, 0x5f, 0xe1, 0x74, 0xed, 0x2b, 0xf1, 0xf4, 0x3a, 0x5f, 0x82, 0xec, 0x85, - 0x4c, 0xd7, 0xc0, 0xf9, 0x34, 0xc1, 0xbd, 0xa0, 0xc5, 0xae, 0xc2, 0xa4, 0xd6, 0x78, 0xdc, 0x4b, - 0x07, 0x7d, 0xaa, 0x0d, 0x5b, 0xf1, 0xdf, 0xe2, 0x9a, 0x28, 0xf7, 0x2d, 0x75, 0x4d, 0x94, 0xbf, - 0x58, 0x49, 0xba, 0x88, 0x8f, 0x49, 0x2b, 0x80, 0x30, 0xf4, 0x19, 0x03, 0xdc, 0xb7, 0xe5, 0x16, - 0x68, 0xe3, 0xdf, 0xd6, 0x3f, 0x9a, 0x92, 0x27, 0xb2, 0x7e, 0x4b, 0x1c, 0x64, 0x1f, 0x9c, 0xba, - 0x3d, 0xe6, 0x8f, 0x73, 0x7b, 0x2c, 0x1c, 0x7d, 0x7b, 0x1c, 0x39, 0xea, 0xf6, 0x98, 0xba, 0xde, - 0x8d, 0x1e, 0xfb, 0x7a, 0x37, 0x76, 0xac, 0xeb, 0xdd, 0xf8, 0xb1, 0xae, 0x77, 0xc6, 0x4d, 0xb5, - 0x78, 0xd4, 0x4d, 0xf5, 0xaf, 0x2f, 0x83, 0x4f, 0xeb, 0x65, 0x30, 0x4b, 0xc4, 0x3b, 0xd6, 0x65, - 0xf0, 0x47, 0x06, 0xde, 0xe5, 0x4a, 0x1f, 0x45, 0x28, 0x7f, 0x71, 0x88, 0xbb, 0xdc, 0xb0, 0x37, - 0xb9, 0xb9, 0x27, 0x73, 0x93, 0x63, 0x4f, 0xec, 0x26, 0x37, 0xff, 0x71, 0x6f, 0x72, 0x0b, 0x4f, - 0xf2, 0x26, 0x77, 0xe2, 0xaf, 0xe2, 0x4d, 0xee, 0xe4, 0xbf, 0x9e, 0x9b, 0xdc, 0xdf, 0x80, 0x52, - 0x5a, 0xb8, 0x3c, 0x3a, 0x28, 0xf0, 0x13, 0x8b, 0x21, 0x29, 0x44, 0xdf, 0xb4, 0x70, 0xc7, 0x2e, - 0x01, 0xac, 0x07, 0xde, 0x43, 0x37, 0xe2, 0xb7, 0x94, 0xf5, 0x1b, 0x05, 0xb4, 0x96, 0x50, 0x31, - 0xf2, 0xb6, 0x86, 0x12, 0xdf, 0x6b, 0xf2, 0x59, 0xf7, 0x1a, 0xeb, 0x47, 0xf3, 0x30, 0x27, 0x03, - 0xb1, 0x3d, 0xfd, 0x8f, 0xb0, 0xef, 0x19, 0xb7, 0x55, 0x65, 0x6b, 0x9d, 0xfa, 0xba, 0x43, 0x9e, - 0x61, 0xbf, 0x0c, 0x27, 0xfa, 0xba, 0x02, 0x6f, 0xac, 0x2b, 0x2a, 0x04, 0x5e, 0xdf, 0x9d, 0x75, - 0x31, 0xbb, 0x92, 0xfb, 0x57, 0xec, 0x3e, 0x0a, 0xeb, 0xcf, 0x47, 0xfa, 0xf8, 0xd3, 0x83, 0xac, - 0xfe, 0xc4, 0x9a, 0x3b, 0xde, 0x13, 0x6b, 0x7e, 0xb8, 0x27, 0xd6, 0x94, 0x50, 0x51, 0x18, 0x46, - 0xa8, 0xf8, 0x3c, 0x4c, 0x6f, 0x70, 0xb7, 0x1d, 0x6e, 0xf8, 0x94, 0xcd, 0x47, 0xfa, 0x5a, 0xa8, - 0x08, 0x77, 0xa2, 0x4c, 0x5d, 0xb8, 0x62, 0x9b, 0xd1, 0x48, 0x10, 0x88, 0x63, 0x50, 0xa6, 0xf7, - 0xb1, 0x4d, 0x0e, 0xfa, 0x2d, 0x7a, 0xf4, 0x90, 0x5b, 0x74, 0x1d, 0xa6, 0x88, 0x2e, 0x89, 0x84, - 0x9c, 0x5c, 0xf7, 0x44, 0x11, 0xc2, 0x55, 0xed, 0x71, 0x92, 0xe9, 0xb8, 0x76, 0x79, 0xd3, 0x33, - 0x98, 0x88, 0x2e, 0x58, 0xed, 0x34, 0xbb, 0xbe, 0xd7, 0xc1, 0x2e, 0x18, 0x4f, 0xba, 0x80, 0x13, - 0x58, 0x76, 0x81, 0x86, 0xc4, 0xde, 0x81, 0x99, 0xca, 0x7a, 0x4d, 0x27, 0x2b, 0x26, 0xaf, 0xbc, - 0x6e, 0xd7, 0x73, 0x0c, 0xd2, 0x14, 0xee, 0x61, 0x37, 0x9f, 0x89, 0xbf, 0x9c, 0x9b, 0x8f, 0xf5, - 0xcf, 0xa7, 0xd4, 0xf2, 0xfe, 0xce, 0x3e, 0x90, 0x98, 0x4f, 0x1e, 0x85, 0x63, 0x3e, 0x79, 0x8c, - 0x1c, 0x25, 0x48, 0x1a, 0xf2, 0xed, 0xe8, 0xb1, 0xe4, 0xdb, 0xb1, 0x8f, 0xfd, 0x7c, 0x31, 0x7e, - 0x4c, 0x89, 0x35, 0xb5, 0xd6, 0x8a, 0xc3, 0xac, 0xb5, 0x4c, 0x29, 0x77, 0xe2, 0xe3, 0x4b, 0xb9, - 0x70, 0x6c, 0x29, 0xb7, 0x9e, 0xf8, 0x2e, 0x4f, 0x1e, 0xe9, 0x12, 0x72, 0x96, 0xb4, 0x02, 0x73, - 0xd9, 0x51, 0xf8, 0x62, 0x2f, 0xe6, 0xef, 0x2a, 0xd1, 0xf9, 0xab, 0xd9, 0xa2, 0xf3, 0xe1, 0xe7, - 0xcd, 0xb1, 0x84, 0xe7, 0x1f, 0x7d, 0xb2, 0xc2, 0xf3, 0x93, 0x7d, 0x08, 0xf9, 0x6b, 0xf1, 0xf9, - 0xaf, 0xc5, 0xe7, 0x21, 0xc5, 0xe7, 0x00, 0x97, 0xd7, 0x03, 0x37, 0xe8, 0xa0, 0xda, 0xe9, 0x12, - 0x8c, 0xab, 0x30, 0xa4, 0xb9, 0x44, 0xa3, 0xdc, 0x1f, 0x7f, 0x54, 0x61, 0xb1, 0x25, 0x28, 0x2a, - 0x62, 0x3d, 0x6d, 0xcc, 0x23, 0x82, 0x19, 0x11, 0x1e, 0x09, 0x66, 0xfd, 0x07, 0x23, 0x6a, 0x0b, - 0x17, 0x73, 0x66, 0xdd, 0x0d, 0xdc, 0x36, 0xe6, 0x23, 0x8b, 0x57, 0x98, 0x26, 0xbc, 0xa7, 0x16, - 0x65, 0xca, 0xb4, 0xdf, 0x24, 0xf9, 0x48, 0x81, 0x61, 0x93, 0x94, 0xaf, 0x85, 0x21, 0x52, 0xbe, - 0xbe, 0x65, 0xe4, 0x4b, 0x1d, 0x49, 0x12, 0xf4, 0x89, 0x6d, 0xed, 0xf0, 0x4c, 0xa9, 0x57, 0xf5, - 0xc4, 0xa6, 0xa3, 0x49, 0x54, 0x2f, 0xa4, 0x3c, 0x24, 0xa5, 0x69, 0x7c, 0x1b, 0x19, 0x3b, 0x4e, - 0xc8, 0xe5, 0xf1, 0x7f, 0xad, 0x21, 0x97, 0x57, 0x01, 0xe8, 0xa8, 0x4d, 0xcc, 0x13, 0x5e, 0xc6, - 0xd5, 0x4f, 0x66, 0xca, 0x51, 0xd4, 0x1a, 0x90, 0xe1, 0x42, 0x23, 0xb4, 0x7e, 0x8f, 0xc1, 0x5c, - 0xbd, 0x7e, 0x77, 0xc5, 0x73, 0xb7, 0x3b, 0x7e, 0x18, 0x79, 0x8d, 0x5a, 0x67, 0xcb, 0x17, 0xa2, - 0x78, 0x7c, 0x1c, 0x68, 0xb1, 0x75, 0x93, 0xa3, 0x20, 0x2e, 0x16, 0x57, 0xbd, 0xd5, 0x20, 0x50, - 0xfa, 0x51, 0x79, 0xd5, 0xe3, 0x02, 0x60, 0x4b, 0xb8, 0x90, 0x76, 0xeb, 0x3d, 0x8c, 0x6c, 0x41, - 0x36, 0x23, 0x28, 0xed, 0x86, 0x12, 0x64, 0xab, 0x32, 0xc6, 0xfb, 0x27, 0x2c, 0xdd, 0x7e, 0x4e, - 0x19, 0x81, 0x9b, 0x93, 0x62, 0x79, 0xd8, 0x91, 0x30, 0x82, 0xdb, 0x66, 0x17, 0xe1, 0xba, 0x45, - 0x5c, 0xdf, 0x1a, 0xd8, 0x83, 0x13, 0x86, 0xcf, 0xf3, 0xb0, 0x8f, 0x29, 0xaf, 0x91, 0x74, 0x6d, - 0x61, 0x88, 0x8d, 0x8c, 0x17, 0x15, 0x3d, 0xc1, 0x58, 0x66, 0x0d, 0xe2, 0x3c, 0x3b, 0x9b, 0x59, - 0x12, 0xaf, 0xee, 0x49, 0x23, 0x78, 0xb6, 0xb6, 0x69, 0xc8, 0x54, 0x6a, 0x83, 0xaa, 0x76, 0x32, - 0xb6, 0x82, 0xc3, 0x6b, 0x62, 0xbf, 0x9e, 0x83, 0x53, 0x06, 0x46, 0xbc, 0x5d, 0x85, 0x71, 0x38, - 0x90, 0xcc, 0x79, 0xfd, 0xe1, 0x93, 0x99, 0xd7, 0x2f, 0x9a, 0xdf, 0x92, 0x6c, 0xa8, 0xfa, 0x37, - 0x0c, 0x6a, 0x21, 0x7b, 0x08, 0x73, 0x58, 0xa4, 0x1e, 0x76, 0xc4, 0x9c, 0xa5, 0xf7, 0xa0, 0x85, - 0xa4, 0xd9, 0xd2, 0x8f, 0x1f, 0xd3, 0x61, 0x2f, 0x7d, 0x6b, 0xbf, 0x3c, 0x6d, 0xa0, 0xab, 0x70, - 0xd4, 0x4e, 0xf2, 0x3a, 0xe4, 0x75, 0xb6, 0x7c, 0x5d, 0x50, 0xea, 0xab, 0x82, 0xfd, 0xe3, 0x9c, - 0x7c, 0x4e, 0x90, 0x9f, 0x71, 0x2d, 0xf0, 0xdb, 0x71, 0xb9, 0x32, 0xad, 0x1c, 0xd0, 0x6d, 0xad, - 0x27, 0xd3, 0x6d, 0x2f, 0x63, 0x93, 0xe5, 0x9e, 0xe0, 0x6c, 0x05, 0x7e, 0x3b, 0x69, 0xbe, 0xde, - 0x71, 0x03, 0x1b, 0xc9, 0xbe, 0x3f, 0x07, 0xa7, 0x0d, 0xad, 0xa6, 0x9e, 0x1b, 0x84, 0xa2, 0x25, - 0xcc, 0xc7, 0x71, 0x54, 0x92, 0xa2, 0xe5, 0x8b, 0x34, 0xff, 0xcf, 0x63, 0x0b, 0xb4, 0xb0, 0x9d, - 0x02, 0xc9, 0x69, 0x4b, 0x2c, 0xad, 0x09, 0x83, 0x6b, 0x61, 0x1e, 0xcc, 0xa1, 0x95, 0x8d, 0x61, - 0x02, 0xbc, 0x30, 0xd8, 0x04, 0x38, 0xce, 0xa1, 0x83, 0x19, 0x01, 0x06, 0xdb, 0x01, 0xf7, 0x73, - 0x65, 0xdf, 0x0b, 0xa7, 0xfb, 0x80, 0xf1, 0x6a, 0x3b, 0x31, 0x70, 0xb5, 0x7d, 0xe2, 0x60, 0xbf, - 0xfc, 0x4a, 0x56, 0x6d, 0x59, 0x2b, 0x6d, 0x70, 0x0d, 0xcc, 0x05, 0x48, 0x0a, 0x49, 0xfc, 0xc8, - 0x9e, 0xa0, 0x9f, 0xa0, 0xf9, 0xa1, 0xe1, 0x8b, 0xbd, 0x5c, 0x6b, 0x83, 0x7e, 0xe4, 0x25, 0x48, - 0x8c, 0xc3, 0x94, 0x96, 0x0d, 0x61, 0x8f, 0x8c, 0x3d, 0x06, 0x54, 0xf2, 0xad, 0xfd, 0xb2, 0x81, - 0x2d, 0x2e, 0x44, 0x7a, 0x9a, 0x05, 0x43, 0xda, 0xd3, 0x11, 0xd9, 0xaf, 0xe5, 0x60, 0x41, 0x00, - 0x92, 0x49, 0x45, 0x1f, 0xb5, 0x78, 0xd8, 0xac, 0xdf, 0x79, 0x32, 0xb3, 0xfe, 0x05, 0x6c, 0xa3, - 0x3e, 0xeb, 0xfb, 0xba, 0x24, 0xb3, 0x71, 0x38, 0xdb, 0x0d, 0x83, 0x2e, 0x63, 0xb6, 0x9f, 0x1e, - 0x62, 0xb6, 0xcb, 0x01, 0x38, 0x7a, 0xb6, 0x0f, 0xac, 0x85, 0x6d, 0xc0, 0x14, 0xdd, 0x85, 0x64, - 0x87, 0x3d, 0x6f, 0x84, 0x71, 0xd6, 0x8b, 0xe4, 0x05, 0x95, 0x92, 0x45, 0xf4, 0x7d, 0xa1, 0xc1, - 0x85, 0x75, 0x60, 0x5e, 0xfe, 0x36, 0x75, 0x53, 0xe5, 0x81, 0xba, 0xa9, 0x0b, 0xf4, 0x45, 0xe7, - 0x88, 0x7f, 0x4a, 0x45, 0xa5, 0x87, 0x5f, 0xca, 0x60, 0xcc, 0xba, 0xc0, 0x0c, 0xb0, 0x5c, 0xb4, - 0xe7, 0x0e, 0xd7, 0x48, 0xbd, 0x42, 0x75, 0x96, 0xd3, 0x75, 0xa6, 0x57, 0x6e, 0x06, 0x6f, 0xe6, - 0xc2, 0x2c, 0x41, 0xfd, 0x5d, 0x2e, 0x77, 0xf8, 0x17, 0x8c, 0x00, 0x58, 0xa9, 0x52, 0x79, 0x89, - 0x52, 0x35, 0x61, 0x80, 0xb2, 0xd4, 0x86, 0x9e, 0xe6, 0xc7, 0xee, 0xc2, 0x5c, 0xa5, 0xdb, 0x6d, - 0x79, 0xbc, 0x89, 0x5f, 0x29, 0x33, 0xfc, 0x5b, 0x49, 0xf6, 0x32, 0x57, 0x16, 0xd2, 0xcd, 0x2e, - 0x9d, 0xde, 0xbf, 0x9f, 0xd6, 0xfa, 0x91, 0x5c, 0x5f, 0xa3, 0xd9, 0xeb, 0x30, 0x81, 0x3f, 0xb4, - 0x98, 0x2a, 0xa8, 0xe2, 0x91, 0x4d, 0x44, 0xe5, 0x51, 0x82, 0x20, 0x84, 0x25, 0x3d, 0xae, 0x62, - 0x41, 0x0a, 0x4b, 0xa4, 0x57, 0x48, 0x34, 0x09, 0x65, 0xe5, 0x9a, 0x51, 0x48, 0x84, 0x2e, 0x74, - 0xcd, 0x20, 0x87, 0x0c, 0xeb, 0xfb, 0xf3, 0xe6, 0xb4, 0x63, 0x17, 0x34, 0xb9, 0x5d, 0x8b, 0xec, - 0xa8, 0xe4, 0x76, 0x4d, 0x5a, 0xff, 0xfb, 0x39, 0x98, 0xbf, 0x1b, 0x6c, 0xbb, 0x1d, 0xef, 0xeb, - 0x32, 0x8c, 0xb6, 0x8f, 0xe3, 0x72, 0x78, 0x22, 0xc8, 0x27, 0x95, 0xd0, 0xce, 0xd7, 0x2a, 0x16, - 0x33, 0x05, 0xa7, 0x8c, 0x9d, 0xd5, 0x1e, 0x74, 0x76, 0xc3, 0x86, 0x69, 0x79, 0x05, 0x25, 0xba, - 0x84, 0x5b, 0x3f, 0x91, 0x87, 0x49, 0x6d, 0x09, 0xb0, 0x4f, 0xc1, 0x94, 0xce, 0x47, 0x57, 0xf8, - 0xe9, 0xd5, 0xda, 0x06, 0x16, 0x6a, 0xfc, 0xb8, 0xdb, 0x36, 0x34, 0x7e, 0x62, 0xa2, 0x23, 0xf4, - 0x98, 0x57, 0x9b, 0xf7, 0x33, 0xae, 0x36, 0x38, 0x6d, 0x35, 0x8d, 0xcd, 0xa1, 0x17, 0x9c, 0x77, - 0xfa, 0x2f, 0x38, 0xa8, 0x3c, 0xd2, 0xe8, 0x07, 0x5f, 0x73, 0xac, 0x9f, 0xce, 0x41, 0x29, 0xbd, - 0x48, 0xbf, 0x23, 0xbd, 0x72, 0x8c, 0xd7, 0x9d, 0x1f, 0xcf, 0xc7, 0xa9, 0x50, 0x94, 0x0b, 0xef, - 0xd3, 0x6a, 0x26, 0xf8, 0xae, 0xf1, 0xf0, 0xf2, 0xac, 0x19, 0x8d, 0x4e, 0x0f, 0x7e, 0x91, 0x1d, - 0x82, 0x72, 0xe4, 0x9b, 0xbf, 0x58, 0x7e, 0xc6, 0xfa, 0x00, 0x16, 0xd2, 0xdd, 0x81, 0x8f, 0x2f, - 0x15, 0x98, 0x35, 0xe1, 0xe9, 0x44, 0x4a, 0x69, 0x2a, 0x3b, 0x8d, 0x6f, 0xfd, 0x41, 0x3e, 0xcd, - 0x9b, 0x4c, 0x06, 0xc5, 0xa6, 0xa3, 0x1b, 0xc2, 0xd0, 0xa6, 0x23, 0x41, 0xb6, 0x2a, 0x3b, 0x4e, - 0x02, 0xb3, 0xd8, 0x11, 0xb5, 0x90, 0xed, 0x88, 0xca, 0xae, 0xa6, 0xac, 0xa4, 0xb5, 0xa8, 0x49, - 0x8f, 0xf8, 0xa6, 0x93, 0x58, 0x4a, 0xa7, 0x8c, 0xa3, 0xab, 0xb0, 0x60, 0x84, 0x00, 0x57, 0xf4, - 0xa3, 0x89, 0xae, 0x3d, 0xc2, 0x02, 0x49, 0x9c, 0x89, 0xcc, 0x6e, 0xc0, 0xb8, 0x68, 0xe6, 0x6d, - 0xb7, 0x4b, 0x6f, 0x2a, 0x2c, 0x76, 0x4b, 0x6f, 0xc5, 0x17, 0x3e, 0xcd, 0x33, 0xbd, 0xc5, 0xc5, - 0x91, 0xaf, 0x4f, 0x2c, 0x42, 0xb4, 0xfe, 0x59, 0x4e, 0xac, 0xff, 0xc6, 0xee, 0x77, 0x59, 0x16, - 0x34, 0xf1, 0x49, 0x87, 0x58, 0xb4, 0xfe, 0x49, 0x5e, 0xe6, 0xc2, 0xa1, 0xe9, 0xf3, 0x16, 0x8c, - 0x6d, 0xb8, 0xc1, 0x36, 0xe5, 0x60, 0x36, 0xb9, 0xc8, 0x82, 0x24, 0xa6, 0x53, 0x84, 0xbf, 0x6d, - 0x22, 0xd0, 0x75, 0x61, 0xf9, 0xa1, 0x74, 0x61, 0x9a, 0x5e, 0xbe, 0xf0, 0xc4, 0xf4, 0xf2, 0xdf, - 0x13, 0xa7, 0xbd, 0xa9, 0x44, 0x43, 0x44, 0x98, 0x3e, 0x97, 0x4e, 0x1b, 0xd5, 0x17, 0x0b, 0x3c, - 0x61, 0xc7, 0xae, 0xea, 0x89, 0xa8, 0x34, 0xdf, 0xce, 0x23, 0x52, 0x4e, 0x59, 0x7f, 0x52, 0x90, - 0x7d, 0x4c, 0x1d, 0x75, 0xde, 0xf0, 0xfb, 0xc6, 0x75, 0x22, 0x36, 0x7a, 0x3d, 0x04, 0x07, 0x9a, - 0x4d, 0x9d, 0x87, 0x11, 0x31, 0x37, 0xa9, 0x37, 0x11, 0x4f, 0xcc, 0x5f, 0x1d, 0x4f, 0x94, 0x8b, - 0xb5, 0x8c, 0x67, 0x92, 0x9e, 0x61, 0x10, 0x8f, 0x2d, 0x7d, 0x2d, 0x23, 0x06, 0xbb, 0x00, 0x23, - 0x77, 0xfc, 0xa6, 0x8a, 0x64, 0xbe, 0x80, 0xd1, 0x3f, 0xfc, 0x26, 0x37, 0x94, 0xe6, 0x88, 0x21, - 0xbe, 0x35, 0xce, 0xff, 0xa0, 0x7f, 0x6b, 0x7b, 0xcb, 0xed, 0xcf, 0x1c, 0xa7, 0x25, 0x9d, 0x59, - 0x85, 0x19, 0x33, 0xf1, 0x3b, 0xd9, 0xfb, 0xa2, 0x76, 0x3d, 0x95, 0x3f, 0x5e, 0x7f, 0x16, 0x31, - 0x89, 0xd8, 0x32, 0x4c, 0x1b, 0x11, 0x54, 0xe9, 0x71, 0x13, 0xd5, 0x9b, 0x66, 0xfc, 0x55, 0x5d, - 0xbd, 0x69, 0x90, 0x88, 0xf3, 0x9c, 0xda, 0xaf, 0x3d, 0x71, 0xf6, 0xb5, 0x9d, 0x70, 0xd8, 0x15, - 0x28, 0xca, 0x30, 0x1b, 0xb5, 0x15, 0xfd, 0x99, 0x2a, 0x44, 0x58, 0x2a, 0x4c, 0x8d, 0x42, 0xd4, - 0xc2, 0x2a, 0x7c, 0x12, 0x4a, 0xb4, 0x25, 0x25, 0xa9, 0xc4, 0x9f, 0x83, 0x91, 0x6a, 0x6d, 0xc5, - 0xd6, 0xb7, 0x91, 0x86, 0xd7, 0x0c, 0x6c, 0x84, 0xa2, 0x57, 0xdd, 0x1d, 0x1e, 0x3d, 0xf2, 0x83, - 0x5d, 0x9b, 0x87, 0x51, 0xe0, 0xc9, 0x04, 0x95, 0xb8, 0x10, 0x3f, 0xc5, 0xde, 0x81, 0x51, 0x34, - 0x3c, 0x4d, 0x9d, 0x0c, 0xe9, 0x3a, 0x96, 0xa7, 0x69, 0x02, 0x8f, 0xa2, 0x15, 0xab, 0x2d, 0x89, - 0xd8, 0x5b, 0x30, 0xb2, 0xc2, 0x3b, 0x7b, 0xa9, 0xdc, 0x79, 0x7d, 0xc4, 0xf1, 0x86, 0xd0, 0xe4, - 0x9d, 0x3d, 0x1b, 0x49, 0xac, 0x9f, 0xce, 0xc3, 0x89, 0x8c, 0x66, 0xdd, 0xff, 0xd4, 0x53, 0xba, - 0x2b, 0x2e, 0x1b, 0xbb, 0xa2, 0x7a, 0x9f, 0x1e, 0xd8, 0xf1, 0x99, 0x9b, 0xe4, 0xcf, 0xe7, 0xe0, - 0x94, 0x39, 0x41, 0xc9, 0xd2, 0xfc, 0xfe, 0x15, 0xf6, 0x36, 0x8c, 0xdd, 0xe0, 0x6e, 0x93, 0xab, - 0xbc, 0x5a, 0x27, 0xe2, 0x80, 0x78, 0x32, 0x86, 0x80, 0x2c, 0x94, 0x6c, 0x13, 0x8f, 0x53, 0x09, - 0x65, 0x2b, 0xd4, 0x38, 0x29, 0x8f, 0x5b, 0x2a, 0x9e, 0x47, 0x56, 0x55, 0x87, 0x58, 0x79, 0x7c, - 0x2b, 0x07, 0xcf, 0x1e, 0x42, 0x23, 0x06, 0x4e, 0x0c, 0xbd, 0x3e, 0x70, 0x78, 0xa2, 0x22, 0x94, - 0xbd, 0x07, 0xb3, 0x1b, 0x24, 0xcf, 0xab, 0xe1, 0xc8, 0x27, 0xeb, 0x45, 0x89, 0xfa, 0x8e, 0x1a, - 0x97, 0x34, 0xb2, 0x11, 0x68, 0xa6, 0x70, 0x68, 0xa0, 0x19, 0x3d, 0x6e, 0xcb, 0xc8, 0xb0, 0x71, - 0x5b, 0x3e, 0x80, 0x05, 0xf3, 0xdb, 0x28, 0x7c, 0x6e, 0x12, 0xb5, 0x26, 0x37, 0x38, 0x6a, 0xcd, - 0xa1, 0x41, 0x3a, 0xad, 0x9f, 0xc8, 0x41, 0xc9, 0xe4, 0xfd, 0x71, 0xc7, 0xf3, 0x5d, 0x63, 0x3c, - 0x9f, 0xcd, 0x1e, 0xcf, 0xc1, 0x03, 0xf9, 0x7f, 0xe5, 0xd2, 0x1f, 0x3b, 0xd4, 0x08, 0x5a, 0x30, - 0xb6, 0xe2, 0xb7, 0x5d, 0xaf, 0xa3, 0x67, 0xa6, 0x6f, 0x22, 0xc4, 0xa6, 0x92, 0xe1, 0x82, 0xfc, - 0x9c, 0x83, 0xd1, 0x3b, 0x7e, 0xa7, 0xb2, 0x42, 0x26, 0xbd, 0xc8, 0xa7, 0xe3, 0x77, 0x1c, 0xb7, - 0x69, 0xcb, 0x02, 0xb6, 0x06, 0x50, 0x6f, 0x04, 0x9c, 0x77, 0xea, 0xde, 0xd7, 0x79, 0x4a, 0xd2, - 0x10, 0x3d, 0xd4, 0xea, 0xe1, 0xc6, 0x22, 0x9f, 0x2e, 0x11, 0xd1, 0x09, 0xbd, 0xaf, 0xeb, 0xfb, - 0xad, 0x46, 0x8f, 0xeb, 0x8a, 0xe2, 0xa0, 0xa5, 0xc6, 0xe1, 0xf2, 0x77, 0x62, 0x5d, 0x65, 0x56, - 0x85, 0x3d, 0x7c, 0x39, 0x73, 0x38, 0x7e, 0x3f, 0x07, 0xcf, 0x1e, 0x42, 0xf3, 0x04, 0x46, 0xe5, - 0x2f, 0xbb, 0xc3, 0x39, 0x40, 0x42, 0x84, 0xa9, 0x89, 0xbd, 0x66, 0x24, 0x73, 0xe5, 0x4d, 0x53, - 0x6a, 0x62, 0x01, 0x30, 0x52, 0x13, 0x0b, 0x80, 0x38, 0x4b, 0x6f, 0x70, 0x6f, 0x7b, 0x47, 0x9a, - 0x67, 0x4d, 0xcb, 0xbd, 0x61, 0x07, 0x21, 0xfa, 0x59, 0x2a, 0x71, 0xac, 0x7f, 0x31, 0x0a, 0xa7, - 0x6d, 0xbe, 0xed, 0x89, 0x7b, 0xc9, 0xbd, 0xd0, 0xeb, 0x6c, 0x1b, 0x71, 0x6f, 0xac, 0xd4, 0xca, - 0xa5, 0x24, 0x11, 0x02, 0x12, 0xcf, 0xc4, 0x57, 0xa1, 0x28, 0xc4, 0x10, 0x6d, 0xf1, 0xe2, 0xa3, - 0x95, 0x10, 0x56, 0x28, 0xb0, 0xb2, 0x2a, 0x66, 0xaf, 0x91, 0x98, 0xa4, 0xa5, 0xf1, 0x11, 0x62, - 0xd2, 0xb7, 0xf7, 0xcb, 0x50, 0xdf, 0x0b, 0x23, 0x8e, 0x57, 0x64, 0x12, 0x95, 0xe2, 0xbb, 0xcc, - 0xc8, 0x80, 0xbb, 0xcc, 0x6d, 0x58, 0xa8, 0x34, 0xe5, 0xe9, 0xe8, 0xb6, 0xd6, 0x03, 0xaf, 0xd3, - 0xf0, 0xba, 0x6e, 0x4b, 0xdd, 0xcf, 0xb1, 0x97, 0xdd, 0xb8, 0xdc, 0xe9, 0xc6, 0x08, 0x76, 0x26, - 0x99, 0xf8, 0x8c, 0x95, 0x3b, 0x75, 0x0c, 0x0f, 0x43, 0xef, 0x91, 0xf8, 0x19, 0xcd, 0x4e, 0x88, - 0x5f, 0x11, 0xda, 0x71, 0x31, 0xde, 0xa2, 0xf0, 0x41, 0x7e, 0x63, 0xad, 0x9e, 0xb8, 0x34, 0xcb, - 0x2c, 0x03, 0xf2, 0x61, 0x3f, 0x6a, 0x85, 0x68, 0x0a, 0x69, 0xe0, 0x25, 0x74, 0xf5, 0xfa, 0x0d, - 0x41, 0x57, 0xec, 0xa3, 0x0b, 0xc3, 0x1d, 0x9d, 0x4e, 0xe2, 0xb1, 0x4b, 0x62, 0x2a, 0xb4, 0xfd, - 0x88, 0xe3, 0x14, 0x9e, 0x48, 0xee, 0x5c, 0x01, 0x42, 0xe5, 0x9d, 0x4b, 0x43, 0x61, 0xef, 0xc0, - 0xfc, 0x6a, 0x75, 0x49, 0x69, 0x91, 0x57, 0xfc, 0x46, 0x0f, 0x1f, 0xe2, 0x01, 0xeb, 0xc3, 0x31, - 0xe4, 0x8d, 0x25, 0xb1, 0x9b, 0x64, 0xa1, 0xb1, 0xf3, 0x30, 0x5e, 0x5b, 0x91, 0x7d, 0x3f, 0xa9, - 0xa7, 0xd2, 0x22, 0xcb, 0x28, 0x55, 0xc8, 0xee, 0x26, 0x97, 0x82, 0xa9, 0x23, 0xa5, 0xf7, 0xd3, - 0x43, 0x5c, 0x08, 0xde, 0x82, 0xe9, 0x65, 0x3f, 0xaa, 0x75, 0xc2, 0xc8, 0xed, 0x34, 0x78, 0x6d, - 0x45, 0x8f, 0x6b, 0xbd, 0xe9, 0x47, 0x8e, 0x47, 0x25, 0xa2, 0xe5, 0x26, 0x26, 0xfb, 0x0c, 0x92, - 0x5e, 0xe7, 0x1d, 0x1e, 0x24, 0xf1, 0xac, 0x47, 0x65, 0xdf, 0x0a, 0xd2, 0xed, 0xb8, 0xc4, 0x36, - 0x11, 0x29, 0xcd, 0x97, 0x4c, 0xce, 0x59, 0xf5, 0x9b, 0x3c, 0x94, 0xbb, 0xc5, 0x77, 0x51, 0x9a, - 0x2f, 0xed, 0xdb, 0x0e, 0xd9, 0x41, 0xff, 0x1d, 0x4c, 0xf3, 0xd5, 0x87, 0xcb, 0x3e, 0x03, 0xa3, - 0xf8, 0x93, 0xa4, 0xdb, 0xf9, 0x0c, 0xb6, 0x89, 0x64, 0xdb, 0x10, 0x98, 0xb6, 0x24, 0x60, 0x35, - 0x18, 0xa7, 0x8b, 0xd5, 0x71, 0x92, 0xd5, 0xd0, 0x0d, 0x4d, 0xce, 0x0c, 0xa2, 0xb7, 0x9a, 0x30, - 0xa5, 0x57, 0x28, 0x56, 0xc4, 0x0d, 0x37, 0xdc, 0xe1, 0x4d, 0xf1, 0x8b, 0xf2, 0xcc, 0xe1, 0x8a, - 0xd8, 0x41, 0xa8, 0x23, 0xda, 0x61, 0x6b, 0x28, 0xe2, 0x4c, 0xad, 0x85, 0xf7, 0x42, 0x6a, 0x0a, - 0xa9, 0x5a, 0x3c, 0x54, 0xdb, 0x35, 0x6d, 0x2a, 0xb2, 0xbe, 0x07, 0x16, 0xee, 0xf4, 0x5a, 0x2d, - 0x77, 0xb3, 0xc5, 0x55, 0x1e, 0x12, 0xcc, 0xe0, 0xbd, 0x0c, 0xa3, 0x75, 0x2d, 0x27, 0x78, 0x9c, - 0x0b, 0x52, 0xc3, 0x41, 0x23, 0xd4, 0x1c, 0x86, 0xea, 0x49, 0x65, 0x03, 0x97, 0xa4, 0xd6, 0xef, - 0xe6, 0x60, 0x41, 0xbd, 0xff, 0x07, 0x6e, 0x63, 0x37, 0x4e, 0x0c, 0x7f, 0xde, 0x98, 0x6b, 0x38, - 0x61, 0x53, 0xd3, 0x48, 0xce, 0xba, 0x9b, 0xaa, 0x11, 0xa6, 0xc0, 0x92, 0xd5, 0xe0, 0xa3, 0x1a, - 0xc3, 0xde, 0x81, 0x49, 0x3a, 0x1e, 0xb5, 0x00, 0x93, 0x18, 0xc5, 0x8b, 0xae, 0x7b, 0x69, 0x6b, - 0x14, 0x1d, 0x1d, 0x65, 0x31, 0xf3, 0x53, 0x3e, 0xae, 0x0c, 0x90, 0x2d, 0x8b, 0x99, 0x75, 0x1c, - 0x32, 0x75, 0x7f, 0x73, 0x32, 0xdd, 0xb7, 0x34, 0x77, 0xaf, 0xea, 0x21, 0xe5, 0x72, 0xc9, 0xcd, - 0x38, 0x09, 0x29, 0xa7, 0xdf, 0x8c, 0x63, 0xd4, 0x78, 0x4c, 0xf2, 0x47, 0x8c, 0xc9, 0x7b, 0x6a, - 0x4c, 0x0a, 0x83, 0x27, 0xc6, 0xfc, 0x21, 0xe3, 0x50, 0x4f, 0x56, 0xc8, 0xc8, 0x50, 0x6a, 0x95, - 0x67, 0x30, 0x76, 0xbe, 0x24, 0x49, 0xef, 0xa2, 0xc4, 0x49, 0xd7, 0xd5, 0x8c, 0x0e, 0xcf, 0xf4, - 0x88, 0xad, 0xf9, 0xb3, 0x30, 0x55, 0x89, 0x22, 0xb7, 0xb1, 0xc3, 0x9b, 0x2b, 0x62, 0x7b, 0xd2, - 0xa2, 0x5f, 0xb9, 0x04, 0xd7, 0x1f, 0xcd, 0x74, 0x5c, 0x19, 0xcd, 0xd5, 0x0d, 0xc9, 0x98, 0x35, - 0x8e, 0xe6, 0x2a, 0x20, 0x66, 0x34, 0x57, 0x01, 0x61, 0x97, 0x60, 0xbc, 0xd6, 0x79, 0xe8, 0x89, - 0x3e, 0x91, 0x01, 0xb0, 0x50, 0x37, 0xe5, 0x49, 0x90, 0xbe, 0xb9, 0x12, 0x16, 0x7b, 0x4b, 0xbb, - 0xd4, 0x4c, 0x24, 0x0a, 0x0c, 0xa9, 0xf2, 0x8a, 0x23, 0xdc, 0xe8, 0x17, 0x96, 0xf8, 0x96, 0x73, - 0x15, 0xc6, 0x95, 0x26, 0x13, 0x12, 0xa5, 0x05, 0x51, 0xf6, 0x07, 0x8c, 0x50, 0xc8, 0x98, 0xe4, - 0x5b, 0xcb, 0x97, 0x37, 0xa9, 0x25, 0xf9, 0xd6, 0xf2, 0xe5, 0x19, 0x49, 0xbe, 0xb5, 0xcc, 0x79, - 0xb1, 0x12, 0x68, 0xea, 0x48, 0x25, 0xd0, 0x7d, 0x98, 0x5a, 0x77, 0x83, 0xc8, 0x13, 0x32, 0x4a, - 0x27, 0x0a, 0x17, 0xa7, 0x0d, 0xbd, 0xa9, 0x56, 0xb4, 0xfc, 0xbc, 0xca, 0x4b, 0xdd, 0xd5, 0xf0, - 0xcd, 0x04, 0xca, 0x09, 0x3c, 0xdb, 0x94, 0x75, 0xe6, 0xe3, 0x98, 0xb2, 0x62, 0xa7, 0xa2, 0xae, - 0x6c, 0x36, 0xd1, 0xc8, 0xe0, 0xa5, 0x25, 0xa5, 0x30, 0x8b, 0x11, 0xd9, 0x97, 0x60, 0x4a, 0xfc, - 0xbd, 0xee, 0xb7, 0xbc, 0x86, 0xc7, 0xc3, 0xc5, 0x12, 0x7e, 0xdc, 0xf3, 0x99, 0xab, 0x1f, 0x91, - 0xf6, 0xea, 0x3c, 0x92, 0x0b, 0x18, 0x19, 0xa7, 0x95, 0xe0, 0x06, 0x37, 0xf6, 0x3e, 0x4c, 0x89, - 0xd9, 0xb7, 0xe9, 0x86, 0x52, 0x34, 0x9d, 0x4b, 0x8c, 0x91, 0x9b, 0x04, 0xef, 0x0b, 0xa8, 0xac, - 0x13, 0x88, 0x63, 0xbe, 0xd2, 0x95, 0x1b, 0x24, 0xd3, 0x66, 0x7b, 0xb7, 0x6f, 0x73, 0x54, 0x68, - 0xec, 0x73, 0x30, 0x55, 0xe9, 0x76, 0x93, 0x1d, 0x67, 0x5e, 0x53, 0x84, 0x75, 0xbb, 0x4e, 0xe6, - 0xae, 0x63, 0x50, 0xa4, 0x37, 0xe6, 0x85, 0x63, 0x6d, 0xcc, 0xec, 0x8d, 0x58, 0x5a, 0x3f, 0x91, - 0x68, 0x75, 0xe9, 0xe2, 0x68, 0x88, 0xfe, 0x52, 0x70, 0xaf, 0xc2, 0xb4, 0x54, 0x73, 0x2a, 0x69, - 0xe6, 0x64, 0xdf, 0xea, 0xc9, 0x10, 0x6a, 0x4c, 0x1a, 0xb6, 0x0a, 0x33, 0xd2, 0xdb, 0xba, 0x45, - 0x91, 0xae, 0x17, 0x4f, 0xe1, 0xaa, 0x45, 0x2e, 0xd2, 0x49, 0xbb, 0x85, 0x09, 0x50, 0x5c, 0x83, - 0x4b, 0x8a, 0xc8, 0xfa, 0xd3, 0x1c, 0x9c, 0x1a, 0x30, 0xe2, 0x71, 0x1c, 0xe4, 0xdc, 0xe1, 0x71, - 0x90, 0xc5, 0xce, 0x61, 0x6a, 0x45, 0xf0, 0xfb, 0x49, 0xca, 0xd2, 0xc7, 0x4b, 0xc9, 0x5b, 0x3e, - 0x30, 0xca, 0x31, 0x44, 0x55, 0xdf, 0xf4, 0x51, 0x35, 0x5b, 0xe8, 0x3f, 0x84, 0x08, 0x4f, 0x36, - 0x6a, 0xd9, 0x3a, 0xd8, 0x2f, 0x3f, 0x4f, 0x29, 0x8c, 0xe2, 0x61, 0xfd, 0xd0, 0x37, 0x56, 0x70, - 0x06, 0x6b, 0x6b, 0x3f, 0x07, 0x93, 0xda, 0x3a, 0x64, 0xe7, 0x34, 0x2f, 0xe0, 0x92, 0x4c, 0x82, - 0xa5, 0x71, 0xc8, 0xcb, 0x93, 0x08, 0x17, 0x55, 0xfe, 0x68, 0x05, 0xf4, 0x6d, 0x21, 0x0a, 0x69, - 0xb1, 0xa2, 0xdb, 0x86, 0xb6, 0xd8, 0xc6, 0x72, 0x4c, 0xa7, 0xef, 0x86, 0x51, 0xa5, 0x11, 0x79, - 0x0f, 0xf9, 0x10, 0x87, 0x4e, 0x92, 0x4e, 0xdf, 0x0d, 0x23, 0xc7, 0x45, 0xb2, 0xbe, 0x74, 0xfa, - 0x31, 0x43, 0xeb, 0x07, 0x72, 0x00, 0xf7, 0x6a, 0x55, 0x0c, 0xf6, 0xfe, 0x71, 0x85, 0x82, 0xec, - 0x00, 0xba, 0x8a, 0xfb, 0x21, 0xe2, 0xc0, 0xff, 0x90, 0x83, 0x19, 0x13, 0x8d, 0xbd, 0x07, 0xb3, - 0xf5, 0x46, 0xe0, 0xb7, 0x5a, 0x9b, 0x6e, 0x63, 0x77, 0xcd, 0xeb, 0x70, 0x19, 0xba, 0x74, 0x54, - 0x9e, 0x45, 0x61, 0x5c, 0xe4, 0xb4, 0x44, 0x99, 0x9d, 0x46, 0x66, 0x3f, 0x98, 0x83, 0xe9, 0xfa, - 0x8e, 0xff, 0x28, 0x8e, 0x36, 0x4a, 0x03, 0xf2, 0x65, 0xb1, 0xb6, 0xc3, 0x1d, 0xff, 0x51, 0x92, - 0x41, 0xd3, 0x30, 0xfe, 0x7c, 0x77, 0xb8, 0x77, 0xf9, 0x86, 0x8f, 0x37, 0x99, 0x28, 0xbc, 0x68, - 0x54, 0x62, 0x9b, 0x75, 0x5a, 0x7f, 0x91, 0x83, 0x49, 0xbc, 0xf3, 0xb4, 0x5a, 0x28, 0x73, 0x7d, - 0x37, 0xa5, 0x63, 0x8c, 0xbf, 0xeb, 0x90, 0x81, 0x7d, 0x13, 0x66, 0x53, 0x68, 0xcc, 0x82, 0xb1, - 0x3a, 0x3a, 0xf8, 0xeb, 0x0a, 0x0a, 0xe9, 0xf2, 0x6f, 0x53, 0x89, 0xb5, 0xaa, 0x91, 0xdd, 0xbf, - 0x8c, 0xcf, 0xba, 0x4b, 0x00, 0x9e, 0x02, 0xa9, 0x9b, 0x0d, 0x4b, 0xb7, 0xe4, 0xfe, 0x65, 0x5b, - 0xc3, 0xb2, 0xee, 0xc0, 0x58, 0xdd, 0x0f, 0xa2, 0xe5, 0x3d, 0x79, 0x99, 0x58, 0xe1, 0x61, 0x43, - 0x7f, 0xb7, 0xf5, 0xf0, 0xad, 0xa4, 0x61, 0x53, 0x11, 0x2b, 0xc3, 0xe8, 0x35, 0x8f, 0xb7, 0x9a, - 0xba, 0x81, 0xee, 0x96, 0x00, 0xd8, 0x12, 0x2e, 0x2e, 0x5c, 0x27, 0x93, 0x9c, 0x28, 0x89, 0x25, - 0xf0, 0xc7, 0x5d, 0x37, 0x55, 0xa3, 0x7f, 0x5f, 0x88, 0xf3, 0x10, 0xf4, 0xd7, 0x74, 0x48, 0x57, - 0xff, 0xc7, 0x39, 0x38, 0x33, 0x98, 0x44, 0x37, 0x2e, 0xce, 0x1d, 0x62, 0x5c, 0xfc, 0x72, 0xfa, - 0x9d, 0x11, 0xd1, 0xe8, 0x9d, 0x31, 0x79, 0x5d, 0x5c, 0x41, 0xdb, 0xee, 0x06, 0x57, 0x89, 0x50, - 0xce, 0x1d, 0xd2, 0x66, 0x44, 0x94, 0xc3, 0x1c, 0x21, 0x8d, 0x4d, 0xb4, 0xd6, 0x6f, 0x8c, 0xc0, - 0xe9, 0x81, 0x14, 0xec, 0x86, 0x96, 0x5e, 0x69, 0x26, 0x4e, 0xec, 0x32, 0x10, 0xff, 0x22, 0xfe, - 0x8b, 0xe6, 0x7b, 0x69, 0x6f, 0xb3, 0xbb, 0x71, 0x5a, 0x9d, 0x3c, 0xf2, 0xfa, 0xc4, 0x91, 0xbc, - 0x24, 0x3a, 0x32, 0x83, 0xfe, 0x0c, 0x3b, 0xe8, 0x97, 0xc8, 0x23, 0xd7, 0x6b, 0x85, 0xfa, 0xb2, - 0x6b, 0x4a, 0x90, 0xad, 0xca, 0x12, 0x8b, 0xef, 0x91, 0x6c, 0x8b, 0x6f, 0xeb, 0x5f, 0xe4, 0x60, - 0x22, 0x6e, 0x36, 0x3b, 0x03, 0x27, 0x37, 0xec, 0x4a, 0x75, 0xd5, 0xd9, 0xf8, 0x60, 0x7d, 0xd5, - 0xb9, 0x77, 0xa7, 0xbe, 0xbe, 0x5a, 0xad, 0x5d, 0xab, 0xad, 0xae, 0x94, 0x9e, 0x61, 0x73, 0x30, - 0x7d, 0xef, 0xce, 0xad, 0x3b, 0x77, 0x1f, 0xdc, 0x71, 0x56, 0x6d, 0xfb, 0xae, 0x5d, 0xca, 0xb1, - 0x69, 0x98, 0xb0, 0x97, 0x2b, 0x55, 0xe7, 0xce, 0xdd, 0x95, 0xd5, 0x52, 0x9e, 0x95, 0x60, 0xaa, - 0x7a, 0xf7, 0xce, 0x9d, 0xd5, 0xea, 0x46, 0xed, 0x7e, 0x6d, 0xe3, 0x83, 0x52, 0x81, 0x31, 0x98, - 0x41, 0x84, 0x75, 0xbb, 0x76, 0xa7, 0x5a, 0x5b, 0xaf, 0xac, 0x95, 0x46, 0x04, 0x4c, 0xe0, 0x6b, - 0xb0, 0xd1, 0x98, 0xd1, 0xad, 0x7b, 0xcb, 0xab, 0xa5, 0x31, 0x81, 0x22, 0xfe, 0xd2, 0x50, 0xc6, - 0x45, 0xf5, 0x88, 0xb2, 0x52, 0xd9, 0xa8, 0x2c, 0x57, 0xea, 0xab, 0xa5, 0x22, 0x3b, 0x05, 0xf3, - 0x06, 0xc8, 0x59, 0xbb, 0x7b, 0xbd, 0x76, 0xa7, 0x34, 0xc1, 0x16, 0xa0, 0x14, 0xc3, 0x56, 0x96, - 0x9d, 0x7b, 0xf5, 0x55, 0xbb, 0x04, 0x69, 0xe8, 0x9d, 0xca, 0xed, 0xd5, 0xd2, 0xa4, 0xf5, 0xae, - 0xf4, 0x03, 0x94, 0x5d, 0xcd, 0x4e, 0x02, 0xab, 0x6f, 0x54, 0x36, 0xee, 0xd5, 0x53, 0x1f, 0x3f, - 0x09, 0xe3, 0xf5, 0x7b, 0xd5, 0xea, 0x6a, 0xbd, 0x5e, 0xca, 0x31, 0x80, 0xb1, 0x6b, 0x95, 0xda, - 0xda, 0xea, 0x4a, 0x29, 0x6f, 0xfd, 0x54, 0x0e, 0xe6, 0x94, 0x04, 0xa8, 0x1e, 0x8d, 0x3e, 0xe6, - 0x5a, 0x7c, 0xcf, 0xb8, 0xd8, 0x2a, 0x27, 0xad, 0x54, 0x25, 0x87, 0x2c, 0xc3, 0x9f, 0xcf, 0xc1, - 0x89, 0x4c, 0x6c, 0xf6, 0x01, 0x94, 0x54, 0x0b, 0x6e, 0xbb, 0x51, 0x63, 0x27, 0xd9, 0xc7, 0x9e, - 0x4f, 0xd5, 0x92, 0x42, 0x93, 0x6a, 0xcd, 0x24, 0xe1, 0x73, 0x1f, 0x9b, 0xe1, 0xd3, 0x11, 0x58, - 0xdf, 0xcc, 0xc1, 0xa9, 0x01, 0xd5, 0xb0, 0x2a, 0x8c, 0xc5, 0x89, 0x69, 0x0e, 0xb1, 0x60, 0x5b, - 0xf8, 0xd6, 0x7e, 0x99, 0x10, 0x31, 0x43, 0x2e, 0xfe, 0x65, 0x8f, 0xc5, 0x99, 0x66, 0x30, 0xdd, - 0x8b, 0xec, 0xbe, 0xd3, 0xa9, 0x9e, 0xa7, 0x9a, 0x2a, 0x0f, 0xea, 0xcb, 0x93, 0xd4, 0x77, 0x05, - 0xf7, 0x51, 0x88, 0xf9, 0x5e, 0xac, 0x9f, 0xc9, 0x09, 0xe1, 0x2e, 0x8d, 0x28, 0x64, 0xde, 0x4a, - 0x18, 0xf6, 0xda, 0xdc, 0xf6, 0x5b, 0xbc, 0x62, 0xdf, 0xa1, 0x63, 0x03, 0xa5, 0x55, 0x17, 0x0b, - 0xf0, 0x5a, 0xe1, 0xb8, 0x41, 0xc7, 0x78, 0xad, 0xd6, 0x69, 0xd8, 0x5b, 0x00, 0xab, 0x8f, 0x23, - 0x1e, 0x74, 0xdc, 0x56, 0x1c, 0xa3, 0x45, 0x46, 0x96, 0x22, 0xa8, 0x29, 0x6f, 0x6b, 0xc8, 0xd6, - 0xdf, 0xca, 0xc1, 0x14, 0x5d, 0x9a, 0x2a, 0x2d, 0x1e, 0x44, 0x1f, 0x6f, 0x7a, 0xbd, 0x65, 0x4c, - 0xaf, 0xd8, 0x61, 0x43, 0xe3, 0x2f, 0x8a, 0x33, 0x67, 0xd6, 0x3f, 0xcd, 0x41, 0x29, 0x8d, 0xc8, - 0xde, 0x83, 0x62, 0x9d, 0x3f, 0xe4, 0x81, 0x17, 0xed, 0xd1, 0x46, 0xa9, 0x52, 0xf8, 0x49, 0x1c, - 0x2a, 0x93, 0xf3, 0x21, 0xa4, 0x5f, 0x76, 0x4c, 0x33, 0xec, 0x7e, 0xaf, 0xa9, 0x3d, 0x0a, 0x4f, - 0x4a, 0xed, 0x61, 0xfd, 0xaf, 0x79, 0x38, 0x75, 0x9d, 0x47, 0xfa, 0x37, 0xc5, 0xe6, 0x05, 0x9f, - 0x1c, 0xee, 0xbb, 0xb4, 0x2f, 0x59, 0x84, 0x71, 0x2c, 0x52, 0xe3, 0x6b, 0xab, 0x9f, 0x6c, 0x39, - 0x9e, 0xd7, 0x05, 0x23, 0x47, 0xd8, 0x80, 0xba, 0x2f, 0x6a, 0x59, 0x83, 0xe2, 0x69, 0x7d, 0x1e, - 0x66, 0x30, 0x2c, 0x7e, 0x4f, 0x2c, 0x07, 0xde, 0x24, 0xf5, 0x4f, 0xd1, 0x4e, 0x41, 0xd9, 0x6b, - 0x50, 0x12, 0x90, 0x4a, 0x63, 0xb7, 0xe3, 0x3f, 0x6a, 0xf1, 0xe6, 0x36, 0x6f, 0xe2, 0xb1, 0x5e, - 0xb4, 0xfb, 0xe0, 0x8a, 0xe7, 0xbd, 0x8e, 0xbc, 0xba, 0xf1, 0x26, 0xea, 0x68, 0x88, 0x67, 0x02, - 0x3d, 0xf3, 0x16, 0x4c, 0x7e, 0xc4, 0x0c, 0x60, 0xd6, 0xff, 0x92, 0x83, 0x05, 0xfc, 0x38, 0xad, - 0x62, 0x95, 0x9d, 0x55, 0xf5, 0x96, 0x96, 0x14, 0xc7, 0x15, 0x20, 0x73, 0x29, 0xc4, 0xbd, 0x98, - 0xe8, 0x84, 0xf2, 0x43, 0xe8, 0x84, 0xea, 0xc7, 0xc9, 0x44, 0x3f, 0xa4, 0x4a, 0xeb, 0xe6, 0x48, - 0xb1, 0x50, 0x1a, 0x49, 0x86, 0xdc, 0xfa, 0xc1, 0x3c, 0x8c, 0xdb, 0x1c, 0x53, 0x74, 0xb3, 0xf3, - 0x30, 0x7e, 0xc7, 0x8f, 0x78, 0x78, 0xdb, 0xc8, 0xc7, 0xde, 0x11, 0x20, 0xa7, 0xdd, 0xb4, 0x55, - 0xa1, 0x98, 0xf0, 0xeb, 0x81, 0xdf, 0xec, 0x35, 0x22, 0x7d, 0xc2, 0x77, 0x25, 0xc8, 0x56, 0x65, - 0xec, 0x75, 0x98, 0x20, 0xce, 0xf1, 0xa3, 0x2e, 0x1a, 0x23, 0x07, 0x3c, 0x4e, 0xf1, 0x9e, 0x20, - 0xa0, 0x4c, 0x2b, 0x05, 0x8c, 0x11, 0x4d, 0xa6, 0xed, 0x93, 0x19, 0x94, 0xa8, 0x3e, 0x7a, 0x88, - 0xa8, 0xfe, 0x49, 0x18, 0xab, 0x84, 0x21, 0x8f, 0x54, 0x14, 0x83, 0xa9, 0x38, 0x6c, 0x5b, 0xc8, - 0x23, 0xc9, 0xd8, 0xc5, 0x72, 0x9b, 0xf0, 0xac, 0x7f, 0x96, 0x87, 0x51, 0xfc, 0x13, 0x9f, 0x4c, - 0x83, 0xc6, 0x8e, 0xf1, 0x64, 0x1a, 0x34, 0x76, 0x6c, 0x84, 0xb2, 0xcb, 0xa8, 0xa9, 0x50, 0xf9, - 0x9b, 0xe8, 0xeb, 0x51, 0x05, 0xdf, 0x4c, 0xc0, 0xb6, 0x8e, 0x13, 0xbf, 0xf0, 0x17, 0x32, 0x63, - 0x97, 0x9c, 0x84, 0xfc, 0xdd, 0x3a, 0x7d, 0x31, 0x46, 0xc4, 0xf2, 0x43, 0x3b, 0x7f, 0xb7, 0x8e, - 0xbd, 0x71, 0xa3, 0xb2, 0xf4, 0xe6, 0x55, 0xfa, 0x50, 0xd9, 0x1b, 0x3b, 0xee, 0xd2, 0x9b, 0x57, - 0x6d, 0x2a, 0x11, 0xfd, 0x8b, 0x6d, 0xc6, 0x87, 0x57, 0xe9, 0x73, 0x8f, 0xfd, 0x8b, 0xdf, 0x86, - 0x8f, 0xac, 0x76, 0x82, 0xc0, 0x96, 0x60, 0x92, 0x62, 0x3d, 0x20, 0xbe, 0x16, 0x8b, 0x81, 0x62, - 0x41, 0x48, 0x0a, 0x1d, 0x49, 0x3e, 0xc1, 0xd1, 0x00, 0xa9, 0x2c, 0xb3, 0xf4, 0x04, 0xa7, 0x86, - 0x30, 0xb4, 0x35, 0x14, 0xd1, 0x24, 0xf9, 0x86, 0x97, 0xf8, 0xd2, 0xcf, 0x68, 0x41, 0x03, 0x30, - 0xcd, 0x41, 0x8c, 0x60, 0xfd, 0x72, 0x1e, 0x8a, 0xeb, 0xad, 0xde, 0xb6, 0xd7, 0xb9, 0x7f, 0x99, - 0x31, 0xc0, 0x6b, 0x9c, 0xca, 0x83, 0x21, 0xfe, 0x66, 0xa7, 0xa1, 0xa8, 0x6e, 0x6e, 0x6a, 0x43, - 0x0a, 0xe9, 0xd6, 0xb6, 0x08, 0x6a, 0xdc, 0x29, 0xf4, 0x99, 0xfa, 0xc9, 0x2e, 0x43, 0x7c, 0xff, - 0x1a, 0x74, 0x51, 0x1b, 0x11, 0x8b, 0xc5, 0x8e, 0xd1, 0xd8, 0x1b, 0x80, 0x87, 0x04, 0x5d, 0x1e, - 0x94, 0x42, 0x5b, 0x36, 0x8d, 0xe4, 0x14, 0x49, 0x82, 0x68, 0xec, 0x0a, 0xd0, 0xc4, 0xa4, 0x6c, - 0xe6, 0x27, 0x4c, 0x02, 0x99, 0x1f, 0x52, 0x91, 0x10, 0x2a, 0x7b, 0x07, 0x26, 0x1b, 0x01, 0xc7, - 0x57, 0x47, 0xb7, 0x95, 0x24, 0x29, 0xd7, 0x29, 0xab, 0x49, 0xf9, 0xfd, 0xcb, 0xb6, 0x8e, 0x6e, - 0xfd, 0x72, 0x11, 0xa6, 0xf4, 0xf6, 0x30, 0x1b, 0xe6, 0xc3, 0x96, 0xb8, 0xbb, 0x93, 0xb1, 0x59, - 0x17, 0x0b, 0xe9, 0x38, 0x3d, 0x67, 0x36, 0x48, 0xe0, 0x49, 0xcb, 0x33, 0x15, 0xa4, 0xe2, 0xc6, - 0x33, 0xf6, 0x5c, 0x98, 0x80, 0x25, 0x1e, 0xab, 0x40, 0xd1, 0xef, 0x86, 0xdb, 0xbc, 0xe3, 0xa9, - 0xf7, 0x96, 0x17, 0x0d, 0x46, 0x77, 0xa9, 0xb0, 0x8f, 0x57, 0x4c, 0xc6, 0xde, 0x84, 0x31, 0xbf, - 0xcb, 0x3b, 0xae, 0x47, 0x67, 0xdc, 0xb3, 0x29, 0x06, 0xbc, 0x53, 0xa9, 0x69, 0x84, 0x84, 0xcc, - 0x2e, 0xc1, 0x88, 0xbf, 0x1b, 0x8f, 0xd7, 0x69, 0x93, 0x68, 0x37, 0x72, 0x35, 0x12, 0x44, 0x14, - 0x04, 0x1f, 0xba, 0xed, 0x2d, 0x1a, 0x31, 0x93, 0xe0, 0xa6, 0xdb, 0xde, 0xd2, 0x09, 0x04, 0x22, - 0x7b, 0x1f, 0xa0, 0xeb, 0x6e, 0xf3, 0xc0, 0x69, 0xf6, 0xa2, 0x3d, 0x1a, 0xb7, 0xe7, 0x0d, 0xb2, - 0x75, 0x51, 0xbc, 0xd2, 0x8b, 0xf6, 0x34, 0xda, 0x89, 0xae, 0x02, 0xb2, 0x0a, 0x40, 0xdb, 0x8d, - 0x22, 0x1e, 0xb4, 0x7d, 0xb2, 0xf6, 0x4b, 0x82, 0x10, 0x4a, 0x06, 0xb7, 0xe3, 0x62, 0x8d, 0x83, - 0x46, 0x84, 0x8d, 0xf6, 0x02, 0x97, 0x72, 0xca, 0xa7, 0x1a, 0xed, 0x05, 0xc6, 0x57, 0x0a, 0x44, - 0xf6, 0x19, 0x18, 0x6f, 0x7a, 0x61, 0xc3, 0x0f, 0x9a, 0x14, 0xbd, 0xe4, 0x39, 0x83, 0x66, 0x45, - 0x96, 0x69, 0x64, 0x0a, 0x5d, 0xb4, 0x96, 0x82, 0x90, 0xde, 0xf1, 0x1f, 0xa1, 0x9a, 0x3f, 0xdd, - 0xda, 0x7a, 0x5c, 0xac, 0xb7, 0x36, 0x21, 0x12, 0x43, 0xb9, 0xed, 0x45, 0x2d, 0x77, 0x93, 0xde, - 0xb9, 0xcd, 0xa1, 0xbc, 0x8e, 0x45, 0xfa, 0x50, 0x4a, 0x64, 0xf6, 0x16, 0x14, 0x79, 0x27, 0x0a, - 0x5c, 0xc7, 0x6b, 0x92, 0x97, 0xa4, 0xd9, 0x68, 0x71, 0x00, 0xbb, 0xb5, 0x15, 0xbd, 0xd1, 0x88, - 0x5f, 0x6b, 0x8a, 0xfe, 0x09, 0x1b, 0x5e, 0x9b, 0x9c, 0x1b, 0xcd, 0xfe, 0xa9, 0x57, 0x6b, 0xb7, - 0xf5, 0xfe, 0x11, 0x88, 0xec, 0x3d, 0x18, 0x17, 0xeb, 0xb7, 0xe9, 0x6f, 0x53, 0x40, 0x08, 0xcb, - 0xec, 0x1f, 0x59, 0xd6, 0x37, 0x5d, 0x15, 0x91, 0x58, 0xc8, 0xee, 0xa3, 0xd0, 0xf1, 0x1a, 0x14, - 0xe4, 0xc1, 0x5c, 0x8e, 0x95, 0x07, 0xf5, 0x5a, 0x55, 0x23, 0x1b, 0x75, 0x1f, 0x85, 0xb5, 0x06, - 0x5b, 0x82, 0x51, 0x4c, 0x11, 0x41, 0x81, 0x28, 0x4d, 0x1a, 0x4c, 0x0e, 0xa1, 0xd3, 0x20, 0xaa, - 0x18, 0xc8, 0x76, 0x88, 0xfe, 0x22, 0x94, 0xa8, 0xc1, 0xec, 0x93, 0xdb, 0x75, 0x74, 0x22, 0xd1, - 0x9b, 0x48, 0xe8, 0xec, 0x79, 0x80, 0xe4, 0x15, 0x5f, 0xbe, 0xb9, 0xd8, 0x1a, 0xe4, 0xb3, 0x23, - 0xff, 0xc7, 0x2f, 0x96, 0x73, 0xcb, 0x00, 0x45, 0x15, 0xa1, 0xc6, 0x5a, 0x83, 0xd3, 0x03, 0xd7, - 0x3d, 0x7b, 0x15, 0x4a, 0x5b, 0x2e, 0x69, 0xfd, 0x1a, 0x3b, 0x6e, 0xa7, 0xc3, 0x5b, 0xb4, 0xe3, - 0xce, 0x2a, 0x78, 0x55, 0x82, 0x25, 0x67, 0xeb, 0x7d, 0x58, 0xc8, 0x1a, 0x70, 0xf6, 0x02, 0x4c, - 0xe9, 0xc1, 0x78, 0x88, 0xc9, 0xa4, 0xdb, 0xf5, 0x54, 0x38, 0x1e, 0x62, 0xf0, 0xeb, 0x39, 0x78, - 0xee, 0xb0, 0xed, 0x83, 0x9d, 0x81, 0x62, 0x37, 0xf0, 0x7c, 0x14, 0x53, 0x29, 0xdb, 0x81, 0xfa, - 0x8d, 0x89, 0x0c, 0x50, 0x9e, 0x8a, 0xdc, 0x6d, 0x72, 0xf0, 0xb0, 0x27, 0x10, 0xb2, 0xe1, 0x6e, - 0x87, 0xec, 0x13, 0x30, 0xd7, 0xe4, 0x5b, 0x6e, 0xaf, 0x15, 0x39, 0x61, 0x63, 0x87, 0x37, 0xd1, - 0xa7, 0x0a, 0x0d, 0xf7, 0xec, 0x12, 0x15, 0xd4, 0x15, 0xbc, 0xaf, 0xc5, 0xa3, 0x03, 0x5a, 0x7c, - 0x73, 0xa4, 0x98, 0x2b, 0xe5, 0x6d, 0xb4, 0x94, 0xb2, 0xbe, 0x2f, 0x0f, 0x8b, 0x83, 0xd6, 0x0b, - 0x7b, 0x37, 0xab, 0x0f, 0xe4, 0xc3, 0x85, 0x0e, 0xd7, 0x1f, 0x2e, 0xb4, 0xda, 0xd8, 0x12, 0xc4, - 0x1e, 0x51, 0x47, 0x45, 0x37, 0x50, 0x30, 0x41, 0xd3, 0x75, 0xc3, 0xf0, 0x91, 0xd8, 0x12, 0x0a, - 0x5a, 0x40, 0x5b, 0x82, 0xe9, 0x34, 0x0a, 0xc6, 0x3e, 0x0d, 0xd0, 0x68, 0xf9, 0x21, 0x47, 0xfb, - 0x00, 0x92, 0x35, 0xa4, 0x59, 0x78, 0x0c, 0xd5, 0x1f, 0x84, 0x11, 0x5a, 0xf5, 0x9b, 0x9c, 0x06, - 0xd0, 0x85, 0x53, 0x03, 0x36, 0x48, 0x31, 0x3c, 0x49, 0x76, 0x78, 0x95, 0x6b, 0xaa, 0x17, 0xe7, - 0x88, 0x4f, 0xf7, 0x78, 0x7e, 0xd0, 0x1c, 0xd9, 0x03, 0xd6, 0xbf, 0x0b, 0x0a, 0xee, 0x64, 0xdc, - 0xdc, 0x0b, 0x62, 0xee, 0x12, 0x72, 0x2f, 0x68, 0xb1, 0x32, 0x4c, 0xaa, 0x5c, 0x92, 0x42, 0x96, - 0x97, 0xcc, 0x81, 0x40, 0xb7, 0x38, 0x4e, 0x1e, 0x8c, 0x58, 0x8a, 0x7e, 0x6f, 0x24, 0x25, 0x4c, - 0x20, 0x64, 0x63, 0xaf, 0xab, 0xbe, 0xee, 0x39, 0x35, 0xbf, 0xcd, 0xb3, 0x89, 0x4a, 0x7f, 0x36, - 0xa7, 0x86, 0xbf, 0x7f, 0x73, 0x3f, 0xaa, 0x7d, 0x0c, 0xd0, 0x4b, 0x89, 0x1a, 0x86, 0x7f, 0x0b, - 0xa9, 0x45, 0xad, 0x3a, 0x92, 0x5a, 0xe8, 0x27, 0x3b, 0x0f, 0xb3, 0x81, 0xb4, 0x63, 0x8d, 0x7c, - 0xea, 0x4f, 0x99, 0xb7, 0x63, 0x5a, 0x82, 0x37, 0x7c, 0xec, 0x53, 0x6a, 0xd7, 0xcd, 0xb8, 0xc3, - 0xb4, 0xb3, 0x8e, 0x5d, 0x84, 0x09, 0x71, 0xd6, 0x61, 0xa4, 0x9b, 0x94, 0x7b, 0x04, 0xe2, 0xa1, - 0xe4, 0x60, 0x17, 0x3f, 0xa4, 0xbf, 0x89, 0xd7, 0x37, 0xf3, 0x8a, 0x99, 0x7e, 0xd2, 0xb2, 0x53, - 0x30, 0xee, 0x07, 0xdb, 0xda, 0xa7, 0x8d, 0xf9, 0xc1, 0xb6, 0xf8, 0xae, 0x0b, 0x50, 0x92, 0xde, - 0x3a, 0x32, 0x0c, 0x42, 0xb8, 0xd7, 0x91, 0x57, 0xf1, 0xa2, 0x3d, 0x23, 0xe1, 0x98, 0x30, 0x7f, - 0xaf, 0xd3, 0x10, 0x98, 0x61, 0xe8, 0x3b, 0x7a, 0x80, 0x2b, 0xfa, 0xec, 0x99, 0x30, 0xf4, 0x93, - 0x48, 0x57, 0x4d, 0xb6, 0x0c, 0xd3, 0x82, 0x4f, 0x1c, 0x66, 0x8b, 0x04, 0x81, 0xb3, 0xfd, 0x82, - 0xc0, 0x5e, 0xa7, 0xa1, 0x9a, 0x68, 0x4f, 0x85, 0xda, 0x2f, 0x76, 0x0b, 0x4a, 0x9a, 0xc4, 0x84, - 0xfe, 0x98, 0x29, 0x9b, 0xea, 0x84, 0x8d, 0x26, 0x69, 0xd5, 0x3a, 0x5b, 0xbe, 0x3d, 0xdb, 0x30, - 0x01, 0xd4, 0x35, 0xff, 0x6e, 0x4e, 0xed, 0xa5, 0x19, 0x44, 0xcc, 0x82, 0xe9, 0x1d, 0x37, 0x74, - 0xc2, 0xb0, 0x2d, 0x6d, 0xc4, 0x28, 0xb0, 0xef, 0xe4, 0x8e, 0x1b, 0xd6, 0xc3, 0xb6, 0x4a, 0x1c, - 0x72, 0x42, 0xe0, 0xf8, 0x6e, 0x2f, 0xda, 0x71, 0x74, 0xf9, 0x4f, 0xf6, 0xd8, 0xfc, 0x8e, 0x1b, - 0xde, 0x15, 0x65, 0x1a, 0x6f, 0xf6, 0x12, 0xcc, 0x20, 0xdf, 0x86, 0xa7, 0x18, 0x63, 0x28, 0x0b, - 0x7b, 0x4a, 0x30, 0x6e, 0x78, 0x92, 0x33, 0xb5, 0xf0, 0xff, 0xcc, 0xc3, 0xc9, 0xec, 0xde, 0xc1, - 0xe9, 0x29, 0xfa, 0x14, 0x7d, 0xf4, 0xa8, 0x6d, 0x13, 0x02, 0x22, 0xc3, 0x90, 0x64, 0x0d, 0x4e, - 0x3e, 0x73, 0x70, 0x5e, 0x83, 0x39, 0x64, 0x44, 0x92, 0x66, 0xcb, 0x0b, 0x23, 0x8a, 0xae, 0x61, - 0xcf, 0x8a, 0x02, 0xb9, 0x9f, 0xaf, 0x09, 0x30, 0x7b, 0x19, 0x66, 0xd4, 0x8e, 0xec, 0x3f, 0xea, - 0x88, 0x8a, 0xe5, 0x76, 0x3c, 0x4d, 0xd0, 0xbb, 0x08, 0x64, 0x27, 0x60, 0xcc, 0xed, 0x76, 0x45, - 0x95, 0x72, 0x17, 0x1e, 0x75, 0xbb, 0x5d, 0x99, 0xdc, 0x06, 0x3d, 0x12, 0x9d, 0x2d, 0xb4, 0x12, - 0x22, 0x93, 0x44, 0x7b, 0x0a, 0x81, 0xd2, 0x72, 0x28, 0x14, 0xeb, 0x5e, 0xd0, 0x2a, 0x94, 0x71, - 0x44, 0x01, 0xb7, 0x1b, 0x23, 0x9c, 0x86, 0xa2, 0x7a, 0xaf, 0x96, 0x8e, 0x15, 0xf6, 0xb8, 0x4b, - 0x6f, 0xd5, 0x6f, 0xc2, 0xa9, 0xa6, 0x17, 0xe2, 0xe4, 0x95, 0x9f, 0xd4, 0xed, 0x92, 0x0f, 0xa4, - 0x0c, 0x92, 0x6b, 0x2f, 0x50, 0xb1, 0xe8, 0xc9, 0x4a, 0xb7, 0x2b, 0x3d, 0x21, 0xa9, 0xaf, 0x3f, - 0x03, 0xb3, 0x24, 0x71, 0xd1, 0x11, 0x89, 0x6d, 0xa1, 0x05, 0x2c, 0xae, 0x42, 0x94, 0x4e, 0x08, - 0x08, 0x54, 0x6b, 0x2a, 0xca, 0x3f, 0xca, 0xc1, 0x89, 0x4c, 0x91, 0x8d, 0x7d, 0x15, 0xa4, 0xcb, - 0x57, 0xe4, 0x3b, 0x01, 0x6f, 0x78, 0x5d, 0x0f, 0x83, 0x62, 0x48, 0x95, 0xe6, 0xd2, 0x61, 0xc2, - 0x1e, 0xba, 0x8f, 0x6d, 0xf8, 0x76, 0x4c, 0x24, 0x75, 0x2d, 0xa5, 0x20, 0x05, 0x3e, 0xf3, 0x45, - 0x38, 0x91, 0x89, 0x9a, 0xa1, 0x03, 0x79, 0xdd, 0x4c, 0xe6, 0xac, 0x1e, 0xa9, 0x52, 0x1f, 0xad, - 0xe9, 0x46, 0xe8, 0xf3, 0x7e, 0x2b, 0xfe, 0xbc, 0x94, 0x70, 0xc7, 0x56, 0xd3, 0xeb, 0x3a, 0xeb, - 0x7e, 0xa2, 0x88, 0x06, 0x2f, 0xed, 0x2f, 0xc2, 0x09, 0x9a, 0x7c, 0xdb, 0x81, 0xdb, 0xdd, 0x49, - 0xd8, 0xc9, 0x86, 0xbe, 0xf2, 0xaf, 0xd8, 0xbb, 0x9a, 0x18, 0x37, 0x92, 0xeb, 0x3c, 0x4d, 0x72, - 0x66, 0x38, 0x8f, 0xf3, 0xd3, 0x53, 0xd2, 0x4a, 0xb3, 0x33, 0xfa, 0x6d, 0xfd, 0x58, 0xa2, 0xbc, - 0x6b, 0x4b, 0x1b, 0x7b, 0x57, 0xeb, 0xac, 0xd7, 0x3d, 0x64, 0x73, 0xa6, 0x25, 0xfe, 0xb9, 0x9b, - 0x9c, 0xb1, 0x76, 0x6d, 0x77, 0x28, 0xb2, 0x67, 0x86, 0x31, 0x87, 0xa4, 0xd9, 0xa4, 0x64, 0x2d, - 0x02, 0x24, 0x46, 0x00, 0x1b, 0xc8, 0x9f, 0x13, 0x27, 0x40, 0x16, 0x41, 0x80, 0x1c, 0xb2, 0x08, - 0x72, 0xc8, 0x35, 0x48, 0x90, 0xe4, 0xe2, 0xdb, 0x02, 0x86, 0x01, 0x03, 0xc9, 0x29, 0x01, 0x16, - 0xc9, 0x02, 0xc9, 0x21, 0xc9, 0x2d, 0x88, 0x0f, 0x3e, 0x05, 0xf5, 0xaa, 0xaa, 0xbb, 0xfa, 0x87, - 0xd4, 0x68, 0xb5, 0x9b, 0xc4, 0x80, 0x4f, 0x64, 0xbf, 0x7a, 0x55, 0x5d, 0x5d, 0xbf, 0xef, 0xbd, - 0xaa, 0xf7, 0xbd, 0xa4, 0xe2, 0xd8, 0xa8, 0xdc, 0xa1, 0xfc, 0x7e, 0xa9, 0xa7, 0x5a, 0x71, 0x22, - 0xff, 0x86, 0x6f, 0xa7, 0xc4, 0x54, 0x4f, 0xa8, 0x4e, 0xc2, 0xb0, 0x56, 0x92, 0x86, 0xf5, 0xc9, - 0xe7, 0x54, 0x15, 0x88, 0xbc, 0x58, 0x31, 0xab, 0x27, 0xbf, 0x50, 0x25, 0xe4, 0x74, 0x5e, 0x11, - 0x69, 0x69, 0xb0, 0x59, 0x30, 0xcd, 0xf5, 0x76, 0x94, 0x44, 0xb6, 0x60, 0xc9, 0x8f, 0x57, 0xcd, - 0x37, 0x8e, 0x2c, 0x23, 0x98, 0x1d, 0x72, 0x09, 0x96, 0x99, 0x48, 0x1e, 0x9a, 0x73, 0x80, 0x34, - 0x9d, 0x4e, 0x3c, 0xd1, 0x06, 0x0a, 0x5c, 0x7a, 0x5a, 0x1b, 0x92, 0x7d, 0x38, 0x83, 0xd7, 0x3a, - 0xbc, 0x81, 0xdf, 0x0d, 0x4e, 0xbb, 0xd5, 0x3e, 0x72, 0xf9, 0xa8, 0xd5, 0x12, 0x3b, 0x63, 0x38, - 0xb4, 0xed, 0x9a, 0xd4, 0x0f, 0xc3, 0xa1, 0xed, 0x0d, 0xc4, 0x73, 0x81, 0x66, 0xe7, 0x75, 0xe8, - 0xc0, 0xd6, 0x8c, 0x9c, 0xd2, 0xc2, 0xa1, 0xc8, 0x0b, 0xc7, 0x0d, 0x50, 0x0f, 0xdc, 0x0e, 0x95, - 0x89, 0xdd, 0x0e, 0x56, 0xed, 0xd1, 0x1d, 0x16, 0xa1, 0xdd, 0x5a, 0xf5, 0xe9, 0xb6, 0x37, 0xd8, - 0xbb, 0xc3, 0xdf, 0x72, 0x2c, 0xb6, 0x3c, 0x59, 0xad, 0x20, 0x2f, 0xc3, 0xa9, 0x08, 0xe0, 0x48, - 0xe0, 0xc1, 0x6e, 0xad, 0xd3, 0xa4, 0x30, 0x3c, 0xd5, 0x65, 0x58, 0x16, 0xa3, 0x62, 0xe4, 0xfb, - 0xc1, 0x59, 0x39, 0x4e, 0xa3, 0xb3, 0x8e, 0xbf, 0x6e, 0x22, 0x3e, 0x2a, 0x51, 0x23, 0x39, 0x81, - 0x2c, 0x4d, 0x5e, 0x02, 0xe2, 0xcb, 0xed, 0xfe, 0x42, 0xc1, 0x5f, 0xb8, 0x2e, 0x52, 0xfc, 0x19, - 0xce, 0x5f, 0xfb, 0x77, 0x29, 0x38, 0x95, 0xa0, 0xca, 0x50, 0x25, 0xa0, 0xdb, 0x1f, 0xbb, 0x87, - 0x4c, 0x85, 0x90, 0x3f, 0x72, 0x4d, 0xa2, 0x73, 0xfb, 0xd4, 0x02, 0x8b, 0x40, 0xce, 0xdf, 0xc5, - 0x9f, 0xe8, 0xe2, 0xd1, 0x1a, 0x09, 0xd3, 0x0b, 0xfd, 0x4b, 0x4c, 0x58, 0xc7, 0xb0, 0x0a, 0x5e, - 0x77, 0x80, 0xd1, 0x19, 0x50, 0x08, 0xc9, 0x84, 0x94, 0x1d, 0xac, 0x45, 0x5d, 0x62, 0xa2, 0x52, - 0x88, 0xa5, 0x0e, 0x23, 0x14, 0xf2, 0x05, 0xd8, 0x94, 0xf6, 0x1a, 0x27, 0x32, 0xf3, 0xf0, 0xa6, - 0xbb, 0x75, 0xb6, 0xe5, 0xef, 0x3a, 0xc5, 0xd0, 0x1c, 0xdc, 0x86, 0x0b, 0xd8, 0x89, 0xdd, 0xce, - 0xd0, 0x89, 0xc5, 0xe1, 0xc0, 0x4f, 0x65, 0xc0, 0xf5, 0x9b, 0x94, 0xcb, 0xec, 0x0c, 0x23, 0x21, - 0x39, 0xe8, 0x57, 0xf3, 0xe6, 0x7b, 0x1b, 0x5e, 0x48, 0xac, 0x31, 0xdd, 0x60, 0xf0, 0x22, 0x55, - 0x20, 0x1b, 0x2d, 0xd2, 0x67, 0x2a, 0x1c, 0x5d, 0x86, 0xe5, 0x87, 0x6e, 0x6b, 0xe4, 0x8e, 0xf8, - 0xce, 0xcd, 0x87, 0x04, 0xa3, 0xc9, 0x1b, 0x77, 0x27, 0xdc, 0x35, 0xdc, 0x66, 0x44, 0x2a, 0x70, - 0x8a, 0xed, 0x80, 0xdd, 0x63, 0x14, 0x06, 0xb9, 0x9d, 0x49, 0x09, 0x89, 0x43, 0x98, 0x05, 0xb7, - 0x26, 0x13, 0xb9, 0x58, 0x6e, 0x6b, 0xfd, 0x30, 0x4a, 0xa2, 0x33, 0xfa, 0x4c, 0x32, 0x37, 0xd9, - 0x86, 0x1c, 0x2b, 0x9c, 0xa9, 0x05, 0xec, 0x80, 0xe0, 0xf2, 0xcc, 0x37, 0x14, 0xf0, 0x7e, 0xb1, - 0xe7, 0xff, 0xa7, 0xfb, 0x35, 0x9e, 0xc5, 0x3a, 0xc7, 0xf2, 0xf9, 0x87, 0xb5, 0x8c, 0x44, 0x7e, - 0xee, 0xa1, 0xfd, 0xbd, 0x22, 0x3e, 0x35, 0xa4, 0x1c, 0xd3, 0xa1, 0xe5, 0xb9, 0x7d, 0x71, 0x06, - 0xb4, 0x64, 0xf1, 0xa7, 0x67, 0x1c, 0xea, 0xe4, 0x55, 0x58, 0xa6, 0xc5, 0x1e, 0x4e, 0xfa, 0x6c, - 0xc8, 0xa5, 0x43, 0x40, 0x3b, 0x15, 0x96, 0x44, 0xbb, 0x6d, 0x77, 0xce, 0xca, 0x1d, 0x07, 0x8f, - 0x54, 0x5a, 0xf6, 0x8e, 0xc7, 0x43, 0x79, 0xa0, 0x0a, 0x43, 0xa1, 0x5d, 0x69, 0xd4, 0x79, 0x96, - 0x2c, 0xe5, 0x09, 0xa4, 0xe5, 0xed, 0x05, 0x66, 0x2a, 0xd4, 0x6e, 0x41, 0x4e, 0x2a, 0x9b, 0x7e, - 0x0c, 0xf3, 0x9c, 0x11, 0x1f, 0xc3, 0x9e, 0x78, 0x67, 0x3f, 0x84, 0xac, 0x28, 0x92, 0xaa, 0x05, - 0x47, 0x03, 0x4f, 0x4c, 0x72, 0xfc, 0x4f, 0x69, 0xb4, 0x95, 0xf1, 0x23, 0xe7, 0x2d, 0xfc, 0x8f, - 0x7b, 0xc9, 0xb8, 0x45, 0xf5, 0x81, 0x9e, 0xe7, 0x0c, 0xf1, 0x06, 0x96, 0x2f, 0x3c, 0x53, 0x7a, - 0xa3, 0xe7, 0xb1, 0x7b, 0x59, 0xfc, 0x1d, 0x7f, 0xed, 0x6f, 0xc2, 0x11, 0x6b, 0xc2, 0xb4, 0x35, - 0x33, 0xb4, 0x65, 0xa4, 0xe2, 0x5b, 0x06, 0x03, 0x50, 0xe1, 0x39, 0xd9, 0x9b, 0x01, 0x69, 0xb8, - 0x65, 0x48, 0x2b, 0x43, 0x26, 0xb4, 0x32, 0x48, 0x3a, 0x79, 0xd0, 0x7b, 0x6c, 0xc7, 0x11, 0x3a, - 0x79, 0x74, 0x9d, 0xfa, 0xb3, 0x94, 0x30, 0x11, 0x6c, 0x0f, 0x06, 0x63, 0x6f, 0x3c, 0x6a, 0x0d, - 0x43, 0xa6, 0x50, 0x72, 0x0c, 0x2f, 0xa2, 0x04, 0x7d, 0x07, 0x43, 0x58, 0x0c, 0x46, 0x02, 0xb3, - 0xc3, 0x1f, 0xb9, 0xb9, 0x3b, 0x9f, 0x09, 0xcb, 0xf8, 0x3a, 0xe5, 0xd6, 0x65, 0x66, 0x3a, 0x60, - 0xa5, 0x52, 0x77, 0xe7, 0xac, 0xb3, 0xac, 0xcc, 0x18, 0x17, 0xd9, 0x4d, 0x98, 0xc4, 0x51, 0x5b, - 0xe8, 0x76, 0x30, 0xa3, 0xc3, 0xa5, 0xca, 0x73, 0x9d, 0x7c, 0x11, 0x96, 0xba, 0x1d, 0x39, 0x52, - 0x63, 0xd4, 0x0a, 0x67, 0x76, 0x18, 0x5a, 0x74, 0x50, 0x06, 0x1d, 0x73, 0x5d, 0x4e, 0xdd, 0x5e, - 0x09, 0x19, 0x8d, 0xb5, 0x6d, 0xa1, 0x8d, 0xc6, 0xb3, 0x91, 0x55, 0x48, 0xf9, 0x3d, 0x9c, 0xea, - 0x76, 0xd8, 0xf4, 0x0a, 0xf0, 0xaa, 0x2d, 0xfe, 0xa4, 0xfd, 0x0a, 0xdc, 0x38, 0x69, 0x1b, 0xd1, - 0xa9, 0x38, 0xa5, 0xc1, 0x97, 0xac, 0xf5, 0x56, 0xac, 0xdd, 0x2e, 0x83, 0x0c, 0xb7, 0xdb, 0x15, - 0x8b, 0x9f, 0xa0, 0x35, 0x47, 0x5d, 0xed, 0xaf, 0xd2, 0xb0, 0x1a, 0x36, 0x93, 0x93, 0x5b, 0x90, - 0x91, 0x56, 0xa0, 0xb3, 0x09, 0xb6, 0x74, 0x5c, 0x77, 0x90, 0xe9, 0x44, 0x2b, 0x0e, 0xb9, 0x07, - 0xab, 0x78, 0x71, 0x0f, 0x45, 0xcf, 0x71, 0x97, 0x1f, 0xbe, 0xcc, 0x3e, 0x3f, 0xcb, 0xbe, 0xff, - 0xc1, 0xc5, 0x39, 0x3c, 0x2a, 0x5b, 0xa6, 0x79, 0xa9, 0xf4, 0x47, 0x13, 0x25, 0x2b, 0x68, 0x66, - 0xba, 0x15, 0x94, 0x7f, 0xca, 0x14, 0x2b, 0xe8, 0xfc, 0x0c, 0x2b, 0x68, 0x90, 0x53, 0xb6, 0x82, - 0xa2, 0x2d, 0x7c, 0x71, 0x9a, 0x2d, 0x3c, 0xc8, 0xc3, 0x6c, 0xe1, 0x81, 0x15, 0x33, 0x3b, 0xd5, - 0x8a, 0x19, 0xe4, 0xe1, 0x56, 0xcc, 0xab, 0xbc, 0x8d, 0x46, 0xad, 0xc7, 0x0e, 0x36, 0x1e, 0xdf, - 0x16, 0xf1, 0xeb, 0xad, 0xd6, 0x63, 0xbc, 0x5c, 0xb3, 0xbd, 0x04, 0xe2, 0x46, 0x8e, 0xf6, 0xfb, - 0x4a, 0xc4, 0x12, 0x28, 0xfa, 0xef, 0x1a, 0xac, 0xb2, 0xcd, 0xca, 0xed, 0x48, 0xba, 0xe6, 0x8a, - 0xb5, 0x22, 0xa8, 0x4c, 0xdf, 0xfc, 0x14, 0xac, 0xf9, 0x6c, 0x5c, 0xe5, 0x42, 0x4f, 0x3d, 0xcb, - 0xcf, 0xcd, 0x61, 0x67, 0x6e, 0xc1, 0xba, 0xcf, 0xc8, 0xad, 0x39, 0x4c, 0xdd, 0x5c, 0xb1, 0x54, - 0x91, 0x50, 0xe7, 0x74, 0xed, 0x30, 0xaa, 0x79, 0x7c, 0x42, 0xb5, 0xd2, 0x7e, 0x90, 0x0e, 0x59, - 0x49, 0xc4, 0x6b, 0xe8, 0x2e, 0xea, 0x0d, 0x1c, 0xde, 0x48, 0x7c, 0x2d, 0xba, 0x3c, 0xa5, 0xcf, - 0xf8, 0x9d, 0x26, 0xdb, 0xae, 0x59, 0xe0, 0x79, 0x03, 0x71, 0xc5, 0xc9, 0x61, 0x12, 0x35, 0xdb, - 0xf7, 0x71, 0xcc, 0x8a, 0xe2, 0xd8, 0xc2, 0x93, 0x9f, 0x5d, 0x9c, 0x50, 0x53, 0xe9, 0x90, 0x45, - 0xc9, 0xda, 0x7f, 0x12, 0x2f, 0x68, 0x02, 0x1a, 0x15, 0xbd, 0x70, 0xe1, 0xe9, 0x04, 0xdd, 0x29, - 0x56, 0x38, 0xb6, 0x12, 0x96, 0xac, 0x4e, 0xc4, 0x5f, 0x51, 0xac, 0x01, 0xcb, 0x68, 0xa3, 0x10, - 0x05, 0x66, 0x12, 0x4c, 0xf0, 0xf1, 0x8f, 0x2f, 0x98, 0x15, 0x2b, 0x47, 0xf3, 0x89, 0x62, 0x8e, - 0xe0, 0x45, 0xd9, 0xb2, 0x10, 0xae, 0xe4, 0xbc, 0x40, 0xd1, 0x9d, 0xd9, 0x02, 0x81, 0x01, 0x02, - 0xab, 0x7a, 0xa6, 0x15, 0x26, 0x70, 0x36, 0xed, 0x08, 0x36, 0xa7, 0x77, 0xc9, 0x8c, 0x08, 0x4d, - 0xc1, 0x06, 0x9a, 0x92, 0x37, 0x50, 0xd9, 0xce, 0x90, 0x0e, 0xd9, 0x19, 0xb4, 0x3f, 0x4d, 0xc3, - 0x95, 0x13, 0x74, 0xd7, 0x8c, 0x77, 0x7e, 0x29, 0x2c, 0x9e, 0xa5, 0x42, 0x9a, 0x21, 0x2d, 0x94, - 0x2f, 0x90, 0x54, 0x4b, 0x4d, 0x16, 0xce, 0x7e, 0x09, 0xd6, 0xd8, 0x2a, 0xc8, 0xae, 0x25, 0x1e, - 0x4c, 0x7a, 0x27, 0x58, 0x06, 0xb7, 0x84, 0x0f, 0x55, 0x24, 0x2b, 0xae, 0x8c, 0xb8, 0x62, 0xd8, - 0x3e, 0x8d, 0x34, 0x20, 0x87, 0x6c, 0x07, 0xad, 0x6e, 0xef, 0x44, 0xce, 0x3c, 0xc2, 0x43, 0x4b, - 0xce, 0xc6, 0x6e, 0x53, 0x53, 0x42, 0x09, 0x9f, 0xc9, 0x75, 0x58, 0xeb, 0x4f, 0x8e, 0xa9, 0xe0, - 0xc1, 0xc6, 0x02, 0xbf, 0xfd, 0x31, 0x6f, 0xad, 0xf4, 0x27, 0xc7, 0xfa, 0x70, 0x88, 0x5d, 0x8a, - 0xd7, 0x44, 0xd6, 0x29, 0x1f, 0x9b, 0xb5, 0x82, 0x73, 0x01, 0x39, 0x69, 0x01, 0x6c, 0xde, 0x72, - 0xde, 0xd3, 0xc0, 0x2e, 0x0d, 0xf2, 0x08, 0x55, 0xec, 0x41, 0xfb, 0x49, 0x4a, 0xe8, 0xbb, 0xd3, - 0xc7, 0xfd, 0xcf, 0xbb, 0x28, 0xa1, 0x8b, 0x6e, 0x80, 0x4a, 0x9b, 0x3e, 0x58, 0x54, 0xfc, 0x3e, - 0x5a, 0xed, 0x4f, 0x8e, 0xfd, 0xb6, 0x93, 0x1b, 0x7e, 0x41, 0x6e, 0xf8, 0x57, 0x85, 0x3e, 0x9c, - 0xb8, 0x3c, 0x4c, 0x6f, 0x72, 0xed, 0x3f, 0xd3, 0x70, 0xfd, 0x64, 0x8b, 0xc0, 0xcf, 0xfb, 0x2d, - 0xa1, 0xdf, 0x22, 0xa6, 0xd3, 0xf9, 0x98, 0xe9, 0x34, 0x61, 0xee, 0x2d, 0x24, 0xcd, 0xbd, 0x98, - 0xa1, 0x76, 0x31, 0xc1, 0x50, 0x9b, 0x38, 0x41, 0xb3, 0x4f, 0x99, 0xa0, 0x4b, 0xf2, 0x38, 0xf9, - 0x37, 0xdf, 0x80, 0x11, 0xd6, 0x07, 0xde, 0x86, 0x53, 0x42, 0x1f, 0x60, 0x3b, 0x47, 0x60, 0x7f, - 0xcf, 0xdd, 0xb9, 0x99, 0xa4, 0x09, 0x20, 0x5b, 0x82, 0xb4, 0xbe, 0xce, 0x75, 0x80, 0x20, 0xfd, - 0xff, 0x8f, 0xf4, 0x4f, 0x1e, 0xc0, 0x19, 0xc4, 0x77, 0x6f, 0xcb, 0x27, 0x07, 0xce, 0xc8, 0x3d, - 0xe0, 0xe3, 0xe1, 0x72, 0x4c, 0x56, 0xee, 0xb6, 0xa5, 0xea, 0x58, 0xee, 0xc1, 0xee, 0x9c, 0x75, - 0xda, 0x4b, 0xa0, 0x47, 0x15, 0x8b, 0xbf, 0x50, 0x40, 0x7b, 0x7a, 0x7b, 0xa1, 0xa1, 0x2a, 0xda, - 0xe0, 0x4b, 0x56, 0xae, 0x25, 0xb5, 0xde, 0x15, 0x58, 0x19, 0xb9, 0x07, 0x23, 0xd7, 0x3b, 0x0a, - 0x59, 0x40, 0x96, 0x39, 0x51, 0x34, 0x8c, 0x40, 0x99, 0x7c, 0x26, 0xc9, 0x5c, 0x64, 0xd2, 0x4a, - 0xbe, 0xbe, 0x98, 0xd8, 0x0f, 0x74, 0x34, 0xc9, 0x15, 0x64, 0x0f, 0xf7, 0x32, 0xd9, 0x94, 0x9a, - 0xb6, 0x38, 0x16, 0xe6, 0x41, 0xb7, 0xe7, 0x6a, 0x7f, 0xa3, 0x08, 0x89, 0x20, 0xa9, 0xf1, 0xc8, - 0xdb, 0xd2, 0x65, 0xde, 0x74, 0x4c, 0x0c, 0x49, 0xca, 0x22, 0xdf, 0x7b, 0xe4, 0xf0, 0x8c, 0x48, - 0x08, 0xc1, 0x33, 0x22, 0xe5, 0x39, 0x6e, 0x24, 0x72, 0xad, 0xf9, 0xae, 0xb8, 0x11, 0x44, 0xd7, - 0xbc, 0xbd, 0xdb, 0xe4, 0x26, 0x2c, 0xb2, 0x4b, 0x40, 0xa2, 0xba, 0x6b, 0xa1, 0xea, 0xee, 0xdd, - 0xb6, 0x44, 0xba, 0xf6, 0xae, 0x7f, 0xae, 0x15, 0xfb, 0x88, 0xbd, 0xdb, 0xe4, 0xd5, 0x93, 0x5d, - 0xce, 0xcd, 0x8a, 0xcb, 0xb9, 0xfe, 0xc5, 0xdc, 0xd7, 0x42, 0x17, 0x73, 0xaf, 0xce, 0x6e, 0x2d, - 0x7e, 0x1a, 0xc9, 0xe0, 0x08, 0x03, 0x98, 0xaa, 0x9f, 0x28, 0x70, 0x7e, 0x66, 0x0e, 0x72, 0x0e, - 0xb2, 0x7a, 0xdd, 0x6c, 0x04, 0xfd, 0x4b, 0xe7, 0x8c, 0xa0, 0x90, 0x1d, 0x58, 0xda, 0x6e, 0x79, - 0xdd, 0x36, 0x1d, 0xc6, 0x89, 0xc7, 0x03, 0xb1, 0x62, 0x7d, 0xf6, 0xdd, 0x39, 0x2b, 0xc8, 0x4b, - 0x1c, 0x58, 0xc7, 0xb9, 0x10, 0x0a, 0xfd, 0x94, 0x4e, 0xb0, 0x35, 0xc4, 0x0a, 0x8c, 0x65, 0xa3, - 0xeb, 0x4c, 0x8c, 0x18, 0x9d, 0x82, 0x8f, 0x84, 0x2c, 0x32, 0xbd, 0x82, 0xcf, 0x80, 0xab, 0x7a, - 0x03, 0xb2, 0x75, 0x71, 0x4f, 0x40, 0xba, 0xcd, 0x2e, 0xee, 0x04, 0x58, 0x7e, 0xaa, 0xf6, 0x5b, - 0x8a, 0x30, 0x08, 0x3c, 0xfd, 0x43, 0xa4, 0xa8, 0x59, 0x9d, 0xd9, 0x51, 0xb3, 0x3a, 0x1f, 0x31, - 0x6a, 0x96, 0xf6, 0xe7, 0x1c, 0xf5, 0xdc, 0xec, 0xd4, 0x23, 0x96, 0xd9, 0xe7, 0xf5, 0x4a, 0x30, - 0x42, 0xa3, 0xf3, 0x8a, 0x14, 0x75, 0x31, 0xfe, 0xae, 0xe9, 0xce, 0x09, 0xd2, 0x50, 0xfd, 0xc3, - 0x34, 0x9c, 0x9b, 0x95, 0x3d, 0x31, 0xae, 0xb3, 0xf2, 0x6c, 0x71, 0x9d, 0x6f, 0x42, 0x96, 0xd1, - 0xfc, 0x2b, 0xf7, 0xd8, 0xe0, 0x3c, 0x2b, 0x6d, 0x70, 0x91, 0x4c, 0xae, 0xc0, 0x82, 0x5e, 0xb0, - 0x83, 0x50, 0x63, 0x78, 0x37, 0xb6, 0xd5, 0xf6, 0xf0, 0xd6, 0x25, 0x4f, 0x22, 0x5f, 0x8f, 0x47, - 0xd7, 0xe3, 0x31, 0xc6, 0xb6, 0xa4, 0x06, 0x89, 0x05, 0x24, 0xc0, 0xfa, 0x06, 0x00, 0xfa, 0x1c, - 0x93, 0xda, 0x8a, 0x47, 0xea, 0xd3, 0x60, 0xa1, 0x3e, 0x72, 0x3d, 0x77, 0x2c, 0xdf, 0x5b, 0x1d, - 0x22, 0xc5, 0xe2, 0x29, 0xfc, 0x56, 0x69, 0xeb, 0x09, 0x03, 0x11, 0x58, 0x90, 0x81, 0x5d, 0xf0, - 0x1a, 0x2a, 0x25, 0x5b, 0x12, 0x0b, 0xcd, 0x50, 0x6e, 0x4d, 0xfa, 0xed, 0xa3, 0xa6, 0x55, 0xe6, - 0xa2, 0x06, 0xcb, 0xd0, 0x43, 0x2a, 0xfd, 0x40, 0xcf, 0x92, 0x58, 0xb4, 0xef, 0x2a, 0x70, 0x3a, - 0xe9, 0x3b, 0xc8, 0x39, 0xc8, 0xf4, 0x13, 0x03, 0x09, 0xf6, 0x99, 0xef, 0x73, 0x8e, 0xfe, 0x3a, - 0x07, 0x83, 0xd1, 0x71, 0x6b, 0x2c, 0xdf, 0xee, 0x95, 0xc8, 0x16, 0xd0, 0x87, 0x12, 0xfe, 0x27, - 0x17, 0xc5, 0x1a, 0x9d, 0x8e, 0x85, 0x1e, 0xc4, 0x1f, 0x4d, 0x07, 0x30, 0x3b, 0xf5, 0xda, 0x90, - 0x01, 0xe2, 0xbf, 0x02, 0x19, 0x5a, 0xad, 0xc8, 0xe8, 0xa5, 0xe3, 0x47, 0xaf, 0x94, 0x39, 0x13, - 0xab, 0x95, 0xd7, 0x3a, 0xee, 0x59, 0xc8, 0xac, 0xed, 0xc3, 0x6a, 0x98, 0x83, 0x18, 0x61, 0x08, - 0xd5, 0xdc, 0x1d, 0x95, 0x97, 0xb4, 0x3d, 0x18, 0x30, 0x0f, 0x93, 0xed, 0x17, 0xff, 0xf1, 0x83, - 0x8b, 0x40, 0x1f, 0x59, 0x9e, 0x24, 0x88, 0x55, 0xed, 0x7b, 0x29, 0x38, 0x1d, 0x38, 0xb5, 0x8b, - 0x39, 0xf4, 0x33, 0xeb, 0x61, 0xa9, 0x87, 0x3c, 0x00, 0x85, 0xa0, 0x15, 0xff, 0xc0, 0x19, 0x8e, - 0x47, 0x3b, 0xb0, 0x31, 0x8d, 0x9f, 0xdc, 0x82, 0x25, 0xc4, 0x41, 0x1a, 0xb6, 0xda, 0xae, 0xbc, - 0xf6, 0xf5, 0x05, 0xd1, 0x0a, 0xd2, 0xb5, 0x1f, 0x29, 0xb0, 0xc9, 0xfd, 0x22, 0x2a, 0xad, 0x6e, - 0x1f, 0xcd, 0xea, 0x6d, 0xf7, 0xe3, 0xf1, 0x10, 0xde, 0x09, 0xad, 0x63, 0xd7, 0xc2, 0xee, 0x2f, - 0xb1, 0xb7, 0x4d, 0xff, 0x5a, 0x72, 0x13, 0xb1, 0xbd, 0xf8, 0xb1, 0x73, 0x86, 0x21, 0x32, 0xf4, - 0x29, 0x41, 0x46, 0x64, 0x40, 0x0e, 0xed, 0x57, 0xe1, 0xc2, 0xec, 0x17, 0x90, 0xaf, 0xc1, 0x0a, - 0x06, 0x8b, 0x6a, 0x0e, 0x0f, 0x47, 0xad, 0x8e, 0x2b, 0x4c, 0x61, 0xc2, 0x7c, 0x29, 0xa7, 0x31, - 0xa8, 0x32, 0x8e, 0x10, 0x70, 0x88, 0x61, 0xa8, 0x78, 0xa6, 0x90, 0xf3, 0x91, 0x5c, 0x9a, 0xf6, - 0x6b, 0x0a, 0x90, 0x78, 0x19, 0xe4, 0xf3, 0xb0, 0xdc, 0x6c, 0x14, 0xec, 0x71, 0x6b, 0x34, 0xde, - 0x1d, 0x4c, 0x46, 0x1c, 0x27, 0x8c, 0x39, 0x8c, 0x8f, 0xdb, 0x0e, 0x3b, 0x40, 0x39, 0x1a, 0x4c, - 0x46, 0x56, 0x88, 0x0f, 0xa3, 0x1c, 0xb9, 0xee, 0x37, 0x3a, 0xad, 0x27, 0xe1, 0x28, 0x47, 0x9c, - 0x16, 0x8a, 0x72, 0xc4, 0x69, 0xda, 0x7b, 0x0a, 0x6c, 0x89, 0xdb, 0x84, 0x9d, 0x84, 0xba, 0x14, - 0x10, 0x16, 0x65, 0x24, 0x80, 0x69, 0x67, 0x89, 0xb4, 0xeb, 0x02, 0x39, 0x08, 0x2b, 0x88, 0xb2, - 0x2d, 0xcb, 0x4b, 0xbe, 0x04, 0x19, 0x7b, 0x3c, 0x18, 0x9e, 0x00, 0x3a, 0x48, 0xf5, 0x7b, 0x74, - 0x3c, 0x18, 0x62, 0x11, 0x98, 0x53, 0x73, 0xe1, 0xb4, 0x5c, 0x39, 0x51, 0x63, 0x52, 0x81, 0x45, - 0x8e, 0x11, 0x17, 0x39, 0xa8, 0x9f, 0xf1, 0x4d, 0xdb, 0x6b, 0x02, 0x9f, 0x88, 0x03, 0xa3, 0x5a, - 0xa2, 0x0c, 0xed, 0x77, 0x14, 0xc8, 0x51, 0x69, 0x03, 0xb5, 0xb8, 0xe7, 0x1d, 0xd2, 0x61, 0xc1, - 0x51, 0xdc, 0x3b, 0xf1, 0x8b, 0x3f, 0xd1, 0x6e, 0xfc, 0x39, 0x58, 0x8b, 0x64, 0x20, 0x1a, 0x22, - 0x53, 0xf4, 0xba, 0xed, 0x16, 0x0b, 0x9a, 0xc2, 0xee, 0x6c, 0x84, 0x68, 0xda, 0x6f, 0x28, 0x70, - 0x9a, 0xea, 0xfc, 0xec, 0x9c, 0xd3, 0x9a, 0xf4, 0xc4, 0x7c, 0xa7, 0x12, 0x94, 0xb8, 0x96, 0xca, - 0xbc, 0xe6, 0x99, 0x04, 0xc5, 0x69, 0x96, 0x9f, 0x4a, 0x76, 0x21, 0xcb, 0xf7, 0x17, 0x8f, 0xe3, - 0x99, 0x5e, 0x90, 0x8c, 0x09, 0x41, 0xc1, 0x9c, 0x89, 0x7e, 0x09, 0x2e, 0x61, 0x3c, 0x8f, 0xe5, - 0xe7, 0xd6, 0xfe, 0x4b, 0x81, 0xb3, 0x53, 0xf2, 0x90, 0x37, 0x60, 0x1e, 0x3d, 0xfa, 0x78, 0xef, - 0x9d, 0x9b, 0xf2, 0x8a, 0x71, 0xfb, 0x68, 0xef, 0x36, 0xdb, 0x88, 0x8e, 0xe9, 0x83, 0xc5, 0x72, - 0x91, 0xb7, 0x61, 0x49, 0xef, 0x74, 0xb8, 0x3a, 0x93, 0x0a, 0xa9, 0x33, 0x53, 0xde, 0xf8, 0xb2, - 0xcf, 0xcf, 0xd4, 0x19, 0xe6, 0x5b, 0xd2, 0xe9, 0x38, 0xdc, 0x5b, 0x31, 0x28, 0x6f, 0xf3, 0x17, - 0x61, 0x35, 0xcc, 0xfc, 0x4c, 0x0e, 0x56, 0xef, 0x2a, 0xa0, 0x86, 0xeb, 0xf0, 0xc9, 0x20, 0x2b, - 0x25, 0x75, 0xf3, 0x53, 0x06, 0xd5, 0xef, 0xa5, 0xe0, 0x85, 0xc4, 0x16, 0x26, 0x2f, 0xc1, 0x82, - 0x3e, 0x1c, 0x9a, 0x45, 0x3e, 0xaa, 0xb8, 0x84, 0x84, 0x56, 0xe2, 0x90, 0xb6, 0xc7, 0x98, 0xc8, - 0x2b, 0x90, 0x65, 0xc7, 0xe9, 0x45, 0xb1, 0xe0, 0x20, 0x54, 0x0c, 0x3f, 0xeb, 0x0f, 0x23, 0x8b, - 0x0a, 0x46, 0x52, 0x82, 0x55, 0x0e, 0xb2, 0x62, 0xb9, 0x87, 0xee, 0xb7, 0x7c, 0x88, 0x7b, 0x44, - 0xe1, 0x17, 0xa6, 0x67, 0x67, 0xc4, 0xd2, 0x64, 0x98, 0x91, 0x70, 0x2e, 0x52, 0x06, 0x15, 0xcb, - 0x94, 0x4b, 0x62, 0xf0, 0xa6, 0x08, 0x7b, 0xc3, 0x2a, 0x31, 0xa5, 0xac, 0x58, 0x4e, 0xbf, 0xbb, - 0x74, 0xcf, 0xeb, 0x1e, 0xf6, 0x8f, 0xdd, 0xfe, 0xf8, 0x93, 0xeb, 0xae, 0xe0, 0x1d, 0x27, 0xea, - 0xae, 0x3f, 0xc8, 0xb0, 0xc9, 0x1c, 0xcd, 0x46, 0x25, 0x1a, 0x09, 0xd1, 0x1a, 0x25, 0x1a, 0xaa, - 0x34, 0x71, 0x18, 0x91, 0x22, 0x2c, 0x32, 0x78, 0x17, 0x31, 0x33, 0xce, 0x27, 0x56, 0x81, 0xf1, - 0xec, 0xdd, 0x66, 0xe2, 0x0b, 0x73, 0x2d, 0xf4, 0x2c, 0x91, 0x95, 0xec, 0x41, 0xae, 0xd0, 0x73, - 0x5b, 0xfd, 0xc9, 0xb0, 0x71, 0xb2, 0x23, 0xc7, 0x0d, 0xfe, 0x2d, 0xcb, 0x6d, 0x96, 0x0d, 0x8f, - 0x2a, 0x71, 0x25, 0x97, 0x0b, 0x22, 0x0d, 0xdf, 0xdb, 0x28, 0x83, 0x96, 0xca, 0xcf, 0xce, 0x68, - 0x9f, 0x28, 0x11, 0xf3, 0x85, 0x5d, 0xe9, 0xb8, 0x3b, 0x92, 0x03, 0xab, 0xe5, 0x96, 0x37, 0x6e, - 0x8c, 0x5a, 0x7d, 0x0f, 0x61, 0x21, 0x4f, 0x00, 0x9b, 0xb5, 0x25, 0x42, 0x0e, 0xa3, 0x8d, 0x71, - 0xec, 0x67, 0x65, 0x16, 0xcc, 0x70, 0x71, 0x54, 0x5e, 0x2a, 0x75, 0xfb, 0xad, 0x5e, 0xf7, 0x1d, - 0xe1, 0x94, 0xc9, 0xe4, 0xa5, 0x03, 0x41, 0xb4, 0x82, 0x74, 0xed, 0xab, 0xb1, 0x7e, 0x63, 0xb5, - 0xcc, 0xc1, 0x22, 0x77, 0xd9, 0x67, 0x2e, 0xec, 0x75, 0xa3, 0x5a, 0x34, 0xab, 0x3b, 0xaa, 0x42, - 0x56, 0x01, 0xea, 0x56, 0xad, 0x60, 0xd8, 0x36, 0x7d, 0x4e, 0xd1, 0x67, 0xee, 0xdf, 0x5e, 0x6a, - 0x96, 0xd5, 0xb4, 0xe4, 0xe2, 0x9e, 0xd1, 0x7e, 0xa8, 0xc0, 0x99, 0xe4, 0xae, 0x24, 0x0d, 0x40, - 0x90, 0x03, 0x7e, 0xf8, 0xfc, 0xf9, 0x99, 0xfd, 0x9e, 0x48, 0x8e, 0x82, 0x25, 0x8c, 0x99, 0x13, - 0x7e, 0x4a, 0x1c, 0x16, 0x31, 0xaf, 0xbe, 0x6e, 0xc7, 0x4a, 0x75, 0x3b, 0x5a, 0x01, 0x36, 0xa6, - 0x95, 0x11, 0xfe, 0xd4, 0x35, 0xc8, 0xe9, 0xf5, 0x7a, 0xd9, 0x2c, 0xe8, 0x0d, 0xb3, 0x56, 0x55, - 0x15, 0xb2, 0x04, 0xf3, 0x3b, 0x56, 0xad, 0x59, 0x57, 0x53, 0xda, 0xf7, 0x15, 0x58, 0x31, 0x83, - 0x6b, 0x5a, 0xcf, 0x3b, 0xf9, 0x5e, 0x0f, 0x4d, 0xbe, 0x0d, 0x1f, 0x0e, 0xc4, 0x7f, 0xc1, 0x89, - 0x66, 0xde, 0x3f, 0x28, 0xb0, 0x1e, 0xcb, 0x43, 0x6c, 0x58, 0xd4, 0xf7, 0xed, 0x9a, 0x59, 0x2c, - 0xf0, 0x9a, 0x5d, 0x0c, 0xee, 0x17, 0x61, 0xc4, 0xa7, 0xd8, 0x5b, 0x98, 0x0b, 0xed, 0x63, 0xcf, - 0x19, 0x74, 0x3b, 0x52, 0xb4, 0xd6, 0xdd, 0x39, 0x4b, 0x94, 0x84, 0x3b, 0xd9, 0x3b, 0x93, 0x91, - 0x8b, 0xc5, 0xa6, 0x42, 0x86, 0x50, 0x9f, 0x1e, 0x2f, 0x18, 0x1d, 0x1e, 0x5a, 0x34, 0x3d, 0x5e, - 0x74, 0x50, 0xde, 0xf6, 0x0a, 0xe4, 0xb8, 0xd6, 0x82, 0x0a, 0xc1, 0x0f, 0x14, 0xd8, 0x98, 0x56, - 0x57, 0xaa, 0x08, 0x85, 0xfd, 0xe9, 0xcf, 0xf8, 0x11, 0x1c, 0xc2, 0x8e, 0xf4, 0x82, 0x8d, 0xbc, - 0x09, 0x39, 0xd3, 0xf3, 0x26, 0xee, 0xc8, 0x7e, 0xa5, 0x69, 0x99, 0x7c, 0x80, 0x9c, 0xff, 0xf7, - 0x0f, 0x2e, 0x9e, 0x45, 0xb7, 0x84, 0x91, 0xe3, 0xbd, 0xe2, 0x4c, 0x46, 0xdd, 0x10, 0xda, 0xbd, - 0x9c, 0x83, 0xca, 0xad, 0xad, 0x49, 0xa7, 0xeb, 0x0a, 0xa9, 0x5d, 0xf8, 0x1c, 0x73, 0x9a, 0xbc, - 0x8b, 0x08, 0x9a, 0xf6, 0x1d, 0x05, 0x36, 0xa7, 0x37, 0x0c, 0xdd, 0x99, 0x1a, 0xec, 0xd6, 0x8f, - 0xf0, 0xfa, 0xc5, 0x9d, 0xc9, 0xbf, 0x1a, 0x24, 0x97, 0x29, 0x18, 0x69, 0x26, 0x3f, 0x7a, 0x7a, - 0x2a, 0x16, 0x32, 0x39, 0x9c, 0x49, 0x30, 0x6a, 0xff, 0x91, 0x82, 0x33, 0x74, 0xd0, 0xf5, 0x5c, - 0xcf, 0xd3, 0x27, 0xe3, 0x23, 0xb7, 0x3f, 0xe6, 0x62, 0x18, 0x79, 0x15, 0x16, 0x8e, 0x9e, 0xcd, - 0xe4, 0xc8, 0xd8, 0x09, 0x01, 0x5c, 0xc8, 0x85, 0x93, 0x05, 0xfd, 0x4f, 0x2e, 0x83, 0x1c, 0xa4, - 0x3a, 0x8d, 0x30, 0x99, 0xa9, 0x0d, 0xc5, 0x5a, 0x1a, 0xfa, 0xf1, 0x64, 0x5f, 0x83, 0x79, 0x34, - 0x33, 0xf0, 0x25, 0x55, 0x88, 0xc2, 0xc9, 0xb5, 0x43, 0x23, 0x84, 0xc5, 0x32, 0x90, 0xcf, 0x00, - 0x04, 0x11, 0x06, 0xf8, 0x9a, 0x29, 0xd4, 0x6f, 0x3f, 0xc8, 0x80, 0xb5, 0x74, 0x7c, 0xd0, 0xe2, - 0xb0, 0xfd, 0x79, 0x58, 0x17, 0xcd, 0x32, 0x14, 0xe8, 0x7a, 0xfc, 0x34, 0x6c, 0x8d, 0x25, 0x98, - 0x43, 0x81, 0xb0, 0x77, 0x35, 0x16, 0x68, 0x17, 0x41, 0x76, 0x23, 0xd1, 0x74, 0xaf, 0xc6, 0xa2, - 0xe9, 0x66, 0x19, 0x97, 0x1c, 0x32, 0x57, 0xfb, 0xd7, 0x14, 0x2c, 0xed, 0x53, 0x61, 0x05, 0x55, - 0xf0, 0xd9, 0x2a, 0xfd, 0x1d, 0xc8, 0x95, 0x07, 0x2d, 0x7e, 0xec, 0xc0, 0x7d, 0x13, 0x98, 0x6f, - 0x70, 0x6f, 0xd0, 0x12, 0x27, 0x18, 0x9e, 0x25, 0x33, 0x3d, 0xc5, 0xaf, 0xf9, 0x1e, 0x2c, 0xb0, - 0x63, 0x20, 0x6e, 0x5d, 0x12, 0xe2, 0xaa, 0x5f, 0xa3, 0x97, 0x59, 0xb2, 0x64, 0x29, 0x67, 0x47, - 0x49, 0xb2, 0xec, 0xc4, 0xb1, 0x42, 0x25, 0x83, 0xc3, 0xfc, 0xc9, 0x0c, 0x0e, 0x12, 0x26, 0xda, - 0xc2, 0x49, 0x30, 0xd1, 0x36, 0xef, 0x42, 0x4e, 0xaa, 0xcf, 0x33, 0x49, 0xaf, 0xdf, 0x4e, 0xc1, - 0x0a, 0x7e, 0x95, 0x7f, 0x27, 0xe4, 0x67, 0xd3, 0x7c, 0xf2, 0x7a, 0xc8, 0x7c, 0xb2, 0x21, 0xf7, - 0x17, 0xfb, 0xb2, 0x19, 0x76, 0x93, 0x7b, 0xb0, 0x1e, 0x63, 0x24, 0x9f, 0x83, 0x79, 0x5a, 0x7d, - 0xa1, 0x6e, 0xaa, 0xd1, 0x11, 0x10, 0xe0, 0xe7, 0xd2, 0x0f, 0xf7, 0x2c, 0xc6, 0xad, 0xfd, 0xb7, - 0x02, 0xcb, 0x3c, 0x7c, 0x45, 0xff, 0x60, 0xf0, 0xd4, 0xe6, 0xbc, 0x1e, 0x6d, 0x4e, 0x86, 0xd2, - 0xc1, 0x9b, 0xf3, 0x7f, 0xbb, 0x11, 0xef, 0x86, 0x1a, 0xf1, 0xac, 0x8f, 0xa6, 0x27, 0x3e, 0x67, - 0x46, 0x1b, 0xfe, 0x2d, 0xe2, 0xcb, 0x86, 0x19, 0xc9, 0xd7, 0x61, 0xa9, 0xea, 0x3e, 0x0e, 0x69, - 0x6d, 0xd7, 0xa7, 0x14, 0xfa, 0xb2, 0xcf, 0xc8, 0xe6, 0x14, 0x6e, 0x78, 0x7d, 0xf7, 0xb1, 0x13, - 0x3b, 0x81, 0x0a, 0x8a, 0xa4, 0x8a, 0x5b, 0x38, 0xdb, 0xb3, 0x0c, 0x7d, 0xee, 0x28, 0x89, 0xc0, - 0x33, 0xdf, 0x4d, 0x03, 0x04, 0x3e, 0x66, 0x74, 0x02, 0x86, 0x0e, 0xdf, 0x85, 0xc1, 0x1b, 0x49, - 0xf2, 0x18, 0x17, 0x67, 0xf2, 0xd7, 0xb9, 0x61, 0x36, 0x35, 0x1d, 0xed, 0x10, 0x4d, 0xb4, 0x05, - 0xee, 0xd4, 0xd4, 0x71, 0x7b, 0x2d, 0xb6, 0xb6, 0xa7, 0xb7, 0xaf, 0x22, 0xb8, 0xad, 0x4f, 0x9d, - 0x12, 0x87, 0x18, 0x5d, 0x9f, 0x8a, 0x94, 0x21, 0xe6, 0xb7, 0x99, 0x79, 0x36, 0xbf, 0xcd, 0x3a, - 0x2c, 0x75, 0xfb, 0x8f, 0xdc, 0xfe, 0x78, 0x30, 0x7a, 0x82, 0xd6, 0xe8, 0xc0, 0xcc, 0x45, 0x9b, - 0xc0, 0x14, 0x69, 0xac, 0x1f, 0x70, 0x63, 0xf4, 0xf9, 0xe5, 0x6e, 0xf0, 0x89, 0xbe, 0xdf, 0xe9, - 0xbc, 0xba, 0x70, 0x2f, 0x93, 0x5d, 0x50, 0x17, 0xef, 0x65, 0xb2, 0x59, 0x75, 0xe9, 0x5e, 0x26, - 0xbb, 0xa4, 0x82, 0x25, 0x9d, 0xef, 0xf8, 0xe7, 0x37, 0xd2, 0x91, 0x4b, 0xf8, 0x38, 0x45, 0xfb, - 0x69, 0x0a, 0x48, 0xbc, 0x1a, 0xe4, 0x75, 0xc8, 0xb1, 0x05, 0xd6, 0x19, 0x79, 0xdf, 0xe4, 0xd7, - 0xd6, 0x19, 0x7c, 0x8f, 0x44, 0x96, 0xe1, 0x7b, 0x18, 0xd9, 0xf2, 0xbe, 0xd9, 0x23, 0x5f, 0x83, - 0x53, 0xd8, 0xbc, 0x43, 0x77, 0xd4, 0x1d, 0x74, 0x1c, 0xc4, 0x5a, 0x6d, 0xf5, 0x78, 0xcc, 0xc0, - 0x97, 0x30, 0xb8, 0x6d, 0x3c, 0x79, 0x4a, 0x37, 0xa0, 0x2b, 0x59, 0x1d, 0x39, 0xeb, 0x8c, 0x91, - 0x34, 0x40, 0x95, 0xf3, 0x1f, 0x4c, 0x7a, 0x3d, 0xde, 0xb3, 0x79, 0xaa, 0xe8, 0x46, 0xd3, 0xa6, - 0x14, 0xbc, 0x1a, 0x14, 0x5c, 0x9a, 0xf4, 0x7a, 0xe4, 0x55, 0x80, 0x41, 0xdf, 0x39, 0xee, 0x7a, - 0x1e, 0x3b, 0xe3, 0xf0, 0xbd, 0x5e, 0x03, 0xaa, 0xdc, 0x19, 0x83, 0x7e, 0x85, 0x11, 0xc9, 0x2f, - 0x00, 0x7a, 0xfd, 0x23, 0x1c, 0x06, 0xbb, 0xd5, 0xc2, 0xa3, 0x80, 0x08, 0x62, 0xd8, 0xc9, 0xf6, - 0xd0, 0xb5, 0xbb, 0xef, 0x08, 0x97, 0x81, 0xb7, 0x60, 0x9d, 0x5f, 0x42, 0xdd, 0xef, 0x8e, 0x8f, - 0xb8, 0x84, 0xfd, 0x3c, 0xe2, 0xb9, 0x24, 0x62, 0xff, 0x53, 0x06, 0x40, 0xdf, 0xb7, 0x05, 0xd2, - 0xd4, 0x4d, 0x98, 0xa7, 0x7a, 0x83, 0xb0, 0x3f, 0xa0, 0xf5, 0x16, 0xcb, 0x95, 0xad, 0xb7, 0xc8, - 0x41, 0x67, 0xa3, 0x85, 0x97, 0xb3, 0x85, 0xed, 0x01, 0x67, 0x23, 0xbb, 0xaf, 0x1d, 0x42, 0xfa, - 0xe5, 0x5c, 0xa4, 0x0c, 0x10, 0x60, 0x3f, 0x71, 0x4d, 0x76, 0x3d, 0x00, 0x51, 0xe1, 0x09, 0x3c, - 0xda, 0x40, 0x80, 0x1f, 0x25, 0x0f, 0x9f, 0x80, 0x8d, 0xdc, 0x87, 0x4c, 0xa3, 0xe5, 0xfb, 0x74, - 0x4e, 0x41, 0xc4, 0xba, 0xc4, 0x63, 0x3a, 0x06, 0xa8, 0x58, 0xab, 0xe3, 0x56, 0x28, 0xf4, 0x2d, - 0x16, 0x42, 0x0c, 0x58, 0xe0, 0xf1, 0xba, 0xa7, 0x20, 0x29, 0xf2, 0x70, 0xdd, 0x1c, 0x3f, 0x19, - 0x89, 0xb2, 0x4c, 0xc1, 0x23, 0x73, 0xdf, 0x81, 0xb4, 0x6d, 0x57, 0x38, 0x0e, 0xc4, 0x4a, 0xa0, - 0x95, 0xd8, 0x76, 0x85, 0x9d, 0x51, 0x7a, 0xde, 0xb1, 0x94, 0x8d, 0x32, 0x93, 0x2f, 0x40, 0x4e, - 0x12, 0x9f, 0x39, 0x82, 0x0a, 0xb6, 0x81, 0xe4, 0x35, 0x23, 0x2f, 0x1a, 0x12, 0x37, 0x29, 0x83, - 0x7a, 0x7f, 0xf2, 0xd0, 0xd5, 0x87, 0x43, 0x74, 0xa7, 0x7b, 0xe4, 0x8e, 0x98, 0xd8, 0x96, 0x0d, - 0xa0, 0x87, 0xf1, 0xae, 0x7d, 0x47, 0xa4, 0xca, 0x36, 0x98, 0x68, 0x4e, 0x52, 0x87, 0x75, 0xdb, - 0x1d, 0x4f, 0x86, 0xec, 0x9e, 0x46, 0x69, 0x30, 0xa2, 0x4a, 0x08, 0xc3, 0x5b, 0x41, 0x94, 0x56, - 0x8f, 0x26, 0x8a, 0xcb, 0x31, 0x07, 0x83, 0x51, 0x44, 0x21, 0x89, 0x67, 0xd6, 0x5c, 0xb9, 0xcb, - 0xe9, 0xae, 0x1a, 0x56, 0x6d, 0x70, 0x57, 0x15, 0xaa, 0x4d, 0xa0, 0xd0, 0x7c, 0x26, 0x01, 0x13, - 0x0c, 0x0f, 0xcc, 0x24, 0x4c, 0xb0, 0x10, 0x12, 0xd8, 0x7b, 0x19, 0x09, 0x96, 0x92, 0xf7, 0xc5, - 0x1b, 0x00, 0xf7, 0x06, 0xdd, 0x7e, 0xc5, 0x1d, 0x1f, 0x0d, 0x3a, 0x12, 0x34, 0x59, 0xee, 0x97, - 0x07, 0xdd, 0xbe, 0x73, 0x8c, 0xe4, 0x9f, 0x7e, 0x70, 0x51, 0x62, 0xb2, 0xa4, 0xff, 0xe4, 0xd3, - 0xb0, 0x44, 0x9f, 0x1a, 0xc1, 0x6d, 0x13, 0x66, 0xaa, 0xc4, 0xdc, 0x2c, 0x78, 0x43, 0xc0, 0x40, - 0xee, 0x62, 0xb8, 0x92, 0xee, 0x70, 0x2c, 0x09, 0xaf, 0x22, 0x36, 0x49, 0x77, 0x38, 0x8e, 0x22, - 0x0d, 0x4b, 0xcc, 0x64, 0xd7, 0xaf, 0xba, 0x88, 0x30, 0xc4, 0xa3, 0xa2, 0xa0, 0x3d, 0x8e, 0x8f, - 0x35, 0x47, 0x40, 0x9c, 0xca, 0xb1, 0x60, 0x23, 0xd9, 0xb0, 0x12, 0xf6, 0x6e, 0x91, 0x1d, 0xa0, - 0x70, 0xa1, 0x96, 0x55, 0xc2, 0x3b, 0xea, 0x38, 0x6d, 0x24, 0x87, 0x2a, 0xe1, 0x33, 0x93, 0x6d, - 0x58, 0x63, 0x32, 0xbe, 0x1f, 0xa9, 0x90, 0x8b, 0xb8, 0xb8, 0xb6, 0x05, 0xa1, 0x0c, 0xe5, 0xd7, - 0x47, 0x32, 0x90, 0x12, 0xcc, 0xa3, 0x42, 0xc8, 0xaf, 0x98, 0x6f, 0xc9, 0xda, 0x73, 0x74, 0x1e, - 0xe1, 0xba, 0x82, 0x7a, 0xb3, 0xbc, 0xae, 0x20, 0x2b, 0xf9, 0x0a, 0x80, 0xd1, 0x1f, 0x0d, 0x7a, - 0x3d, 0x04, 0xe1, 0xcd, 0xa2, 0x2a, 0x75, 0x3e, 0x3c, 0x1f, 0xb1, 0x94, 0x80, 0x89, 0x03, 0xc6, - 0xe1, 0xb3, 0x13, 0x81, 0xea, 0x95, 0xca, 0xd2, 0x4c, 0x58, 0x60, 0x93, 0x11, 0x01, 0xad, 0x79, - 0x88, 0x0e, 0x09, 0x0e, 0x99, 0x01, 0x5a, 0x73, 0x7a, 0x1c, 0xd0, 0x5a, 0xca, 0xa0, 0xdd, 0x87, - 0xd3, 0x49, 0x1f, 0x16, 0x52, 0x61, 0x95, 0x93, 0xaa, 0xb0, 0x7f, 0x92, 0x86, 0x65, 0x2c, 0x4d, - 0xac, 0xc2, 0x3a, 0xac, 0xd8, 0x93, 0x87, 0x3e, 0xda, 0x93, 0x58, 0x8d, 0xb1, 0x7e, 0x9e, 0x9c, - 0x20, 0x1f, 0x6d, 0x85, 0x72, 0x10, 0x03, 0x56, 0xc5, 0x4e, 0xb0, 0x23, 0x6e, 0xa0, 0xfb, 0x58, - 0xd2, 0x02, 0xb1, 0x30, 0x1e, 0xa9, 0x35, 0x92, 0x29, 0xd8, 0x0f, 0xd2, 0xcf, 0xb2, 0x1f, 0x64, - 0x4e, 0xb4, 0x1f, 0xbc, 0x0d, 0xcb, 0xe2, 0x6d, 0xb8, 0x92, 0xcf, 0x3f, 0xdf, 0x4a, 0x1e, 0x2a, - 0x8c, 0x94, 0xfd, 0x15, 0x7d, 0x61, 0xe6, 0x8a, 0x8e, 0xe7, 0x85, 0x62, 0x96, 0x0d, 0x91, 0x16, - 0x5f, 0xd8, 0x31, 0x94, 0xe1, 0x4e, 0xa1, 0xfe, 0x11, 0x76, 0xc9, 0xcf, 0xc1, 0x52, 0x79, 0x20, - 0x8e, 0x8a, 0x24, 0x1b, 0x7d, 0x4f, 0x10, 0x65, 0x71, 0xc1, 0xe7, 0xf4, 0x77, 0xb7, 0xf4, 0xc7, - 0xb1, 0xbb, 0xdd, 0x05, 0xe0, 0xae, 0x0d, 0x41, 0x08, 0x32, 0x9c, 0x32, 0x02, 0xe9, 0x22, 0x7c, - 0x54, 0x20, 0x31, 0xd3, 0xd5, 0x89, 0xdf, 0x42, 0xd1, 0xdb, 0xed, 0xc1, 0xa4, 0x3f, 0x0e, 0xc5, - 0xec, 0x15, 0x9e, 0x90, 0x2d, 0x9e, 0x26, 0x2f, 0x0f, 0x91, 0x6c, 0x1f, 0x6f, 0x87, 0x90, 0x2f, - 0xfb, 0x97, 0xe8, 0x16, 0x67, 0xb5, 0x90, 0x16, 0x6b, 0xa1, 0xa9, 0x57, 0xe7, 0xb4, 0x1f, 0x2a, - 0x32, 0x90, 0xff, 0x47, 0xe8, 0xea, 0xd7, 0x00, 0xfc, 0xb3, 0x7a, 0xd1, 0xd7, 0x4c, 0x5f, 0xf2, - 0xa9, 0x72, 0x2b, 0x07, 0xbc, 0xd2, 0xd7, 0xa4, 0x3f, 0xae, 0xaf, 0x69, 0x40, 0xae, 0xf6, 0x8d, - 0x71, 0x2b, 0xb8, 0xdc, 0x01, 0xb6, 0x2f, 0xc9, 0xe2, 0xca, 0x94, 0xde, 0xbe, 0x86, 0x7b, 0x43, - 0x20, 0x07, 0x4f, 0x11, 0x81, 0xa5, 0x8c, 0xda, 0x5f, 0x2a, 0xb0, 0x26, 0xbb, 0x6f, 0x3f, 0xe9, - 0xb7, 0xc9, 0x17, 0x19, 0xae, 0xa8, 0x12, 0x52, 0x59, 0x24, 0x26, 0xba, 0xe4, 0x3e, 0xe9, 0xb7, - 0x99, 0x00, 0xd4, 0x7a, 0x2c, 0x57, 0x96, 0x66, 0x24, 0x0f, 0x61, 0xb9, 0x3e, 0xe8, 0xf5, 0xa8, - 0x58, 0x33, 0x7a, 0xc4, 0x15, 0x00, 0x5a, 0x50, 0xf4, 0xc4, 0x40, 0x54, 0x68, 0xfb, 0x0a, 0xd7, - 0x73, 0xcf, 0x0e, 0xe9, 0x7a, 0xdf, 0xe5, 0xf9, 0x82, 0x62, 0xdf, 0x45, 0x7f, 0x2b, 0xb9, 0x4c, - 0xed, 0xc7, 0x0a, 0x90, 0x78, 0x95, 0xe4, 0x25, 0x4b, 0xf9, 0x3f, 0x10, 0x61, 0x23, 0xa2, 0x5f, - 0xe6, 0x59, 0x44, 0xbf, 0xfc, 0xef, 0x2a, 0xb0, 0x66, 0xea, 0x15, 0x0e, 0xed, 0xcf, 0x0e, 0x36, - 0x2e, 0xc3, 0x79, 0x53, 0xaf, 0x38, 0xf5, 0x5a, 0xd9, 0x2c, 0x3c, 0x70, 0x12, 0x11, 0x7b, 0xcf, - 0xc3, 0x8b, 0x71, 0x96, 0xe0, 0x00, 0xe4, 0x1c, 0x6c, 0xc4, 0x93, 0x05, 0xaa, 0x6f, 0x72, 0x66, - 0x01, 0x00, 0x9c, 0xce, 0xbf, 0x09, 0x6b, 0x02, 0xc1, 0xb6, 0x51, 0xb6, 0x11, 0x23, 0x7f, 0x0d, - 0x72, 0x7b, 0x86, 0x65, 0x96, 0x1e, 0x38, 0xa5, 0x66, 0xb9, 0xac, 0xce, 0x91, 0x15, 0x58, 0xe2, - 0x84, 0x82, 0xae, 0x2a, 0x64, 0x19, 0xb2, 0x66, 0xd5, 0x36, 0x0a, 0x4d, 0xcb, 0x50, 0x53, 0xf9, - 0x37, 0x61, 0xb5, 0x3e, 0xea, 0x3e, 0x6a, 0x8d, 0xdd, 0xfb, 0xee, 0x13, 0x3c, 0xbf, 0x58, 0x84, - 0xb4, 0xa5, 0xef, 0xab, 0x73, 0x04, 0x60, 0xa1, 0x7e, 0xbf, 0x60, 0xdf, 0xbe, 0xad, 0x2a, 0x24, - 0x07, 0x8b, 0x3b, 0x85, 0xba, 0x73, 0xbf, 0x62, 0xab, 0x29, 0xfa, 0xa0, 0xef, 0xdb, 0xf8, 0x90, - 0xce, 0x7f, 0x16, 0xd6, 0x51, 0x20, 0x29, 0x77, 0xbd, 0xb1, 0xdb, 0x77, 0x47, 0x58, 0x87, 0x65, - 0xc8, 0xda, 0x2e, 0x5d, 0x49, 0xc6, 0x2e, 0xab, 0x40, 0x65, 0xd2, 0x1b, 0x77, 0x87, 0x3d, 0xf7, - 0x5b, 0xaa, 0x92, 0xbf, 0x0b, 0x6b, 0xd6, 0x60, 0x32, 0xee, 0xf6, 0x0f, 0xed, 0x31, 0xe5, 0x38, - 0x7c, 0x42, 0x5e, 0x80, 0xf5, 0x66, 0x55, 0xaf, 0x6c, 0x9b, 0x3b, 0xcd, 0x5a, 0xd3, 0x76, 0x2a, - 0x7a, 0xa3, 0xb0, 0xcb, 0x4e, 0x4f, 0x2a, 0x35, 0xbb, 0xe1, 0x58, 0x46, 0xc1, 0xa8, 0x36, 0x54, - 0x25, 0xff, 0x3d, 0xb4, 0xad, 0xb4, 0x07, 0xfd, 0x4e, 0xa9, 0xd5, 0x1e, 0x0f, 0x46, 0x58, 0x61, - 0x0d, 0x2e, 0xd8, 0x46, 0xa1, 0x56, 0x2d, 0x3a, 0x25, 0xbd, 0xd0, 0xa8, 0x59, 0x49, 0x90, 0xd1, - 0x9b, 0x70, 0x26, 0x81, 0xa7, 0xd6, 0xa8, 0xab, 0x0a, 0xb9, 0x08, 0x5b, 0x09, 0x69, 0xfb, 0xc6, - 0xb6, 0xde, 0x6c, 0xec, 0x56, 0xd5, 0xd4, 0x94, 0xcc, 0xb6, 0x5d, 0x53, 0xd3, 0xf9, 0xdf, 0x54, - 0x60, 0xb5, 0xe9, 0xf1, 0xab, 0xcb, 0x4d, 0xf4, 0x5a, 0xbc, 0x04, 0xe7, 0x9a, 0xb6, 0x61, 0x39, - 0x8d, 0xda, 0x7d, 0xa3, 0xea, 0x34, 0x6d, 0x7d, 0x27, 0x5a, 0x9b, 0x8b, 0xb0, 0x25, 0x71, 0x58, - 0x46, 0xa1, 0xb6, 0x67, 0x58, 0x4e, 0x5d, 0xb7, 0xed, 0xfd, 0x9a, 0x55, 0x54, 0x15, 0xfa, 0xc6, - 0x04, 0x86, 0x4a, 0x49, 0x67, 0xb5, 0x09, 0xa5, 0x55, 0x8d, 0x7d, 0xbd, 0xec, 0x6c, 0xd7, 0x1a, - 0x6a, 0x3a, 0x5f, 0xa1, 0xfb, 0x3b, 0x02, 0xb7, 0xb2, 0x0b, 0x77, 0x59, 0xc8, 0x54, 0x6b, 0x55, - 0x23, 0x7a, 0xe6, 0xb6, 0x0c, 0x59, 0xbd, 0x5e, 0xb7, 0x6a, 0x7b, 0x38, 0xc4, 0x00, 0x16, 0x8a, - 0x46, 0x95, 0xd6, 0x2c, 0x4d, 0x53, 0xea, 0x56, 0xad, 0x52, 0x6b, 0x18, 0x45, 0x35, 0x93, 0xb7, - 0xc4, 0x14, 0x16, 0x85, 0xb6, 0x07, 0xec, 0x80, 0xab, 0x68, 0x94, 0xf4, 0x66, 0xb9, 0xc1, 0xbb, - 0xe8, 0x81, 0x63, 0x19, 0x5f, 0x6e, 0x1a, 0x76, 0xc3, 0x56, 0x15, 0xa2, 0xc2, 0x72, 0xd5, 0x30, - 0x8a, 0xb6, 0x63, 0x19, 0x7b, 0xa6, 0xb1, 0xaf, 0xa6, 0x68, 0x99, 0xec, 0x3f, 0x7d, 0x43, 0xfe, - 0x3d, 0x05, 0x08, 0x03, 0xbd, 0x15, 0x91, 0x54, 0x70, 0xc4, 0x5c, 0x80, 0xcd, 0x5d, 0xda, 0xd5, - 0xf8, 0x69, 0x95, 0x5a, 0x31, 0xda, 0x64, 0x67, 0x80, 0x44, 0xd2, 0x6b, 0xa5, 0x92, 0xaa, 0x90, - 0x2d, 0x38, 0x15, 0xa1, 0x17, 0xad, 0x5a, 0x5d, 0x4d, 0x6d, 0xa6, 0xb2, 0x0a, 0x39, 0x1b, 0x4b, - 0xbc, 0x6f, 0x18, 0x75, 0x35, 0x4d, 0xbb, 0x28, 0x92, 0x20, 0xa6, 0x04, 0xcb, 0x9e, 0xc9, 0x7f, - 0x47, 0x81, 0x33, 0xac, 0x9a, 0x62, 0x7e, 0xf9, 0x55, 0x3d, 0x07, 0x1b, 0x1c, 0xca, 0x3b, 0xa9, - 0xa2, 0xa7, 0x41, 0x0d, 0xa5, 0xb2, 0x6a, 0xbe, 0x00, 0xeb, 0x21, 0x2a, 0xd6, 0x23, 0x45, 0x57, - 0x8f, 0x10, 0x79, 0xdb, 0xb0, 0x1b, 0x8e, 0x51, 0x2a, 0xd5, 0xac, 0x06, 0xab, 0x48, 0x3a, 0xaf, - 0xc1, 0x7a, 0xc1, 0x1d, 0x8d, 0xa9, 0xea, 0xd5, 0xf7, 0xba, 0x83, 0x3e, 0x56, 0x61, 0x05, 0x96, - 0x8c, 0xaf, 0x34, 0x8c, 0xaa, 0x6d, 0xd6, 0xaa, 0xea, 0x5c, 0xfe, 0x5c, 0x84, 0x47, 0xcc, 0x63, - 0xdb, 0xde, 0x55, 0xe7, 0xf2, 0x2d, 0x58, 0x11, 0x97, 0x84, 0xd9, 0xa8, 0xb8, 0x00, 0x9b, 0x62, - 0xac, 0xe1, 0x8a, 0x12, 0xfd, 0x84, 0x0d, 0x38, 0x1d, 0x4f, 0x37, 0x1a, 0xaa, 0x42, 0x7b, 0x21, - 0x92, 0x42, 0xe9, 0xa9, 0xfc, 0xaf, 0x2b, 0xb0, 0xe2, 0x1f, 0x9a, 0xa0, 0x99, 0xf6, 0x22, 0x6c, - 0x55, 0x4a, 0xba, 0x53, 0x34, 0xf6, 0xcc, 0x82, 0xe1, 0xdc, 0x37, 0xab, 0xc5, 0xc8, 0x4b, 0x5e, - 0x84, 0x17, 0x12, 0x18, 0xf0, 0x2d, 0x1b, 0x70, 0x3a, 0x9a, 0xd4, 0xa0, 0x53, 0x35, 0x45, 0x9b, - 0x3e, 0x9a, 0xe2, 0xcf, 0xd3, 0x74, 0xfe, 0x8f, 0x15, 0xd8, 0xe0, 0xa1, 0xea, 0xf9, 0xf1, 0x0d, - 0x8b, 0x61, 0x82, 0x20, 0xbf, 0x79, 0xb8, 0xde, 0xb0, 0x9a, 0x76, 0xc3, 0x28, 0x8a, 0xec, 0x74, - 0xd0, 0x9a, 0x96, 0x51, 0x31, 0xaa, 0x8d, 0x48, 0xdd, 0x6e, 0xc1, 0xa7, 0x66, 0xf0, 0x56, 0x6b, - 0x0d, 0xf1, 0x4c, 0xe7, 0xea, 0xa7, 0xe0, 0xca, 0x0c, 0x66, 0x9f, 0x31, 0x95, 0xdf, 0x83, 0x55, - 0x5b, 0xaf, 0x94, 0x4b, 0x83, 0x51, 0xdb, 0xd5, 0x27, 0xe3, 0xa3, 0x3e, 0xd9, 0x82, 0xb3, 0xa5, - 0x9a, 0x55, 0x30, 0x1c, 0xfc, 0x82, 0x48, 0x25, 0x4e, 0xc1, 0x9a, 0x9c, 0xf8, 0xc0, 0xa0, 0xb3, - 0x8b, 0xc0, 0xaa, 0x4c, 0xac, 0xd6, 0xd4, 0x54, 0xfe, 0xab, 0xb0, 0x1c, 0x8a, 0xf7, 0x76, 0x16, - 0x4e, 0xc9, 0xcf, 0x75, 0xb7, 0xdf, 0xe9, 0xf6, 0x0f, 0xd5, 0xb9, 0x68, 0x82, 0x35, 0xe9, 0xf7, - 0x69, 0x02, 0x2e, 0x37, 0x72, 0x42, 0xc3, 0x1d, 0x1d, 0x77, 0xfb, 0xad, 0xb1, 0xdb, 0x51, 0x53, - 0xf9, 0x97, 0x61, 0x25, 0x84, 0x32, 0x4d, 0xc7, 0x55, 0xb9, 0xc6, 0xf7, 0x87, 0x8a, 0x51, 0x34, - 0x9b, 0x15, 0x75, 0x9e, 0x2e, 0x34, 0xbb, 0xe6, 0xce, 0xae, 0x0a, 0xf9, 0xef, 0x2b, 0x54, 0x0d, - 0xc2, 0x76, 0xaf, 0x94, 0x74, 0x31, 0x12, 0xe9, 0x2c, 0x60, 0xd8, 0xf5, 0x86, 0x6d, 0xb3, 0x93, - 0xf0, 0x73, 0xb0, 0xc1, 0x1f, 0x1c, 0xbd, 0x5a, 0x74, 0x76, 0x75, 0xab, 0xb8, 0xaf, 0x5b, 0x74, - 0x6a, 0x3c, 0x50, 0x53, 0x38, 0xdf, 0x25, 0x8a, 0xd3, 0xa8, 0x35, 0x0b, 0xbb, 0x6a, 0x9a, 0x4e, - 0xaf, 0x10, 0xbd, 0x6e, 0x56, 0xd5, 0x0c, 0xae, 0x1e, 0x31, 0x6e, 0x2c, 0x96, 0xa6, 0xcf, 0xe7, - 0x3f, 0x54, 0xe0, 0xac, 0xdd, 0x3d, 0xec, 0xb7, 0xc6, 0x93, 0x91, 0xab, 0xf7, 0x0e, 0x07, 0xa3, - 0xee, 0xf8, 0xe8, 0xd8, 0x9e, 0x74, 0xc7, 0x2e, 0xb9, 0x09, 0xd7, 0x6c, 0x73, 0xa7, 0xaa, 0x37, - 0xe8, 0xec, 0xd7, 0xcb, 0x3b, 0x35, 0xcb, 0x6c, 0xec, 0x56, 0x1c, 0xbb, 0x69, 0xc6, 0x26, 0xc6, - 0x55, 0xb8, 0x34, 0x9d, 0xb5, 0x6c, 0xec, 0xe8, 0x85, 0x07, 0xaa, 0x32, 0xbb, 0xc0, 0x6d, 0xbd, - 0xac, 0x57, 0x0b, 0x46, 0xd1, 0xd9, 0xbb, 0xad, 0xa6, 0xc8, 0x35, 0xb8, 0x3c, 0x9d, 0xb5, 0x64, - 0xd6, 0x6d, 0xca, 0x96, 0x9e, 0xfd, 0xde, 0x5d, 0xbb, 0x42, 0xb9, 0x32, 0xf9, 0x3f, 0x52, 0x60, - 0x63, 0x1a, 0xd4, 0x10, 0xb9, 0x0e, 0x9a, 0x51, 0x6d, 0x58, 0xba, 0x59, 0x74, 0x0a, 0x96, 0x51, - 0x34, 0xaa, 0x0d, 0x53, 0x2f, 0xdb, 0x8e, 0x5d, 0x6b, 0xd2, 0xd1, 0x14, 0x5c, 0x58, 0xb8, 0x02, - 0x17, 0x67, 0xf0, 0xd5, 0xcc, 0x62, 0x41, 0x55, 0xc8, 0x6d, 0x78, 0x69, 0x06, 0x93, 0xfd, 0xc0, - 0x6e, 0x18, 0x15, 0x39, 0x45, 0x4d, 0xe5, 0x0b, 0xb0, 0x39, 0x1d, 0x8b, 0x84, 0xee, 0x22, 0xe1, - 0x96, 0xce, 0x42, 0xa6, 0x48, 0x37, 0xae, 0x50, 0x88, 0x83, 0x7c, 0x17, 0xd4, 0x28, 0x9c, 0x40, - 0xec, 0x66, 0x89, 0xd5, 0xac, 0x56, 0xd9, 0x2e, 0xb7, 0x06, 0xb9, 0x5a, 0x63, 0xd7, 0xb0, 0x78, - 0x90, 0x08, 0x8c, 0x0a, 0xd1, 0xac, 0xd2, 0x89, 0x53, 0xb3, 0xcc, 0xb7, 0x70, 0xbb, 0xdb, 0x80, - 0xd3, 0x76, 0x59, 0x2f, 0xdc, 0xc7, 0x39, 0x6d, 0x56, 0x9d, 0xc2, 0xae, 0x5e, 0xad, 0x1a, 0x65, - 0x15, 0xb0, 0x31, 0xa7, 0xb9, 0x10, 0x92, 0x4f, 0xc3, 0x8d, 0xda, 0xfd, 0x86, 0xee, 0xd4, 0xcb, - 0xcd, 0x1d, 0xb3, 0xea, 0xd8, 0x0f, 0xaa, 0x05, 0x21, 0x9a, 0x15, 0xe2, 0x3b, 0xc2, 0x0d, 0xb8, - 0x3a, 0x93, 0x3b, 0x08, 0xe7, 0x70, 0x1d, 0xb4, 0x99, 0x9c, 0xfc, 0x43, 0xf2, 0x3f, 0x52, 0x60, - 0x6b, 0xc6, 0x11, 0x37, 0x79, 0x09, 0x6e, 0xee, 0x1a, 0x7a, 0xb1, 0x6c, 0xd8, 0x36, 0x2e, 0x14, - 0xb4, 0x1b, 0xd8, 0x0d, 0x94, 0xc4, 0xf5, 0xfe, 0x26, 0x5c, 0x9b, 0xcd, 0x1e, 0x48, 0x0e, 0x37, - 0xe0, 0xea, 0x6c, 0x56, 0x2e, 0x49, 0xa4, 0xe8, 0x7a, 0x3b, 0x9b, 0xd3, 0x97, 0x40, 0xd2, 0xf9, - 0xdf, 0x56, 0xe0, 0x4c, 0xb2, 0x9d, 0x89, 0xd6, 0xcd, 0xac, 0xda, 0x0d, 0xbd, 0x5c, 0x76, 0xea, - 0xba, 0xa5, 0x57, 0x1c, 0xa3, 0x6a, 0xd5, 0xca, 0xe5, 0xa4, 0x9d, 0xf7, 0x2a, 0x5c, 0x9a, 0xce, - 0x6a, 0x17, 0x2c, 0xb3, 0x4e, 0x37, 0x17, 0x0d, 0x2e, 0x4c, 0xe7, 0x32, 0xcc, 0x82, 0xa1, 0xa6, - 0xb6, 0xdf, 0x78, 0xff, 0x5f, 0x2e, 0xcc, 0xbd, 0xff, 0xe1, 0x05, 0xe5, 0xc7, 0x1f, 0x5e, 0x50, - 0xfe, 0xf9, 0xc3, 0x0b, 0xca, 0x5b, 0xb7, 0x4e, 0x16, 0x09, 0x09, 0xd5, 0x92, 0x87, 0x0b, 0xa8, - 0x40, 0xbd, 0xf2, 0x3f, 0x01, 0x00, 0x00, 0xff, 0xff, 0xa0, 0x10, 0x93, 0x8e, 0x18, 0xb1, 0x01, - 0x00, + // 29765 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0xbd, 0x6d, 0x70, 0x1c, 0x49, + 0x76, 0x20, 0x36, 0xdd, 0x8d, 0x8f, 0xc6, 0xc3, 0x57, 0x23, 0x01, 0x92, 0x20, 0x66, 0xc8, 0xe6, + 0xd4, 0xcc, 0x70, 0xc8, 0xd9, 0x19, 0x72, 0x09, 0xee, 0x70, 0x77, 0x76, 0xbe, 0xb6, 0xd1, 0x0d, + 0x12, 0x4d, 0x82, 0x20, 0xb6, 0x1a, 0x20, 0x76, 0xb4, 0x1f, 0xb5, 0x85, 0xee, 0x04, 0x50, 0x83, + 0xee, 0xae, 0xde, 0xaa, 0x6a, 0x82, 0xd8, 0x3d, 0xf9, 0xf4, 0x79, 0xb2, 0x42, 0xd6, 0xd7, 0x59, + 0x3a, 0xed, 0x39, 0x74, 0xb2, 0x42, 0xf6, 0xd9, 0x8a, 0x73, 0x9c, 0xc2, 0x96, 0x2c, 0xfb, 0x6c, + 0x85, 0x65, 0xe9, 0x42, 0x21, 0xcb, 0x0a, 0xc7, 0x49, 0x61, 0xcb, 0xf6, 0x79, 0x7d, 0x01, 0x59, + 0x96, 0x7f, 0x38, 0x10, 0xe1, 0x08, 0xc9, 0x17, 0xe1, 0x08, 0xef, 0x85, 0xee, 0x2e, 0xf2, 0x65, + 0x66, 0x55, 0x66, 0x55, 0x75, 0xa3, 0x31, 0xe4, 0xe8, 0xc4, 0x09, 0xfd, 0x21, 0xd1, 0x2f, 0xdf, + 0x7b, 0x59, 0xf9, 0xfd, 0xf2, 0xe5, 0xfb, 0x80, 0x17, 0x03, 0xda, 0xa4, 0x1d, 0xd7, 0x0b, 0xae, + 0x37, 0xe9, 0xae, 0x5d, 0x3f, 0xbc, 0x1e, 0x1c, 0x76, 0xa8, 0xcf, 0xff, 0xbd, 0xd6, 0xf1, 0xdc, + 0xc0, 0x25, 0xc3, 0xf8, 0x63, 0x61, 0x6e, 0xd7, 0xdd, 0x75, 0x11, 0x72, 0x9d, 0xfd, 0xc5, 0x0b, + 0x17, 0x2e, 0xee, 0xba, 0xee, 0x6e, 0x93, 0x5e, 0xc7, 0x5f, 0xdb, 0xdd, 0x9d, 0xeb, 0x8d, 0xae, + 0x67, 0x07, 0x8e, 0xdb, 0x16, 0xe5, 0xc5, 0x78, 0x79, 0xe0, 0xb4, 0xa8, 0x1f, 0xd8, 0xad, 0x4e, + 0x2f, 0x06, 0x07, 0x9e, 0xdd, 0xe9, 0x50, 0x4f, 0xd4, 0xbe, 0x70, 0x35, 0xfc, 0x40, 0x3b, 0x08, + 0x18, 0x25, 0x63, 0x7e, 0xfd, 0xd1, 0x0d, 0xf5, 0xa7, 0x40, 0x7d, 0x23, 0xbd, 0x2d, 0x92, 0x61, + 0x8c, 0xb3, 0xf1, 0x0b, 0x39, 0x18, 0xbb, 0x47, 0x69, 0xa7, 0xd4, 0x74, 0x1e, 0x51, 0xf2, 0x12, + 0x0c, 0xad, 0xd9, 0x2d, 0x3a, 0x9f, 0xb9, 0x94, 0xb9, 0x32, 0xb6, 0x34, 0x7d, 0x7c, 0x54, 0x1c, + 0xf7, 0xa9, 0xf7, 0x88, 0x7a, 0x56, 0xdb, 0x6e, 0x51, 0x13, 0x0b, 0xc9, 0xa7, 0x60, 0x8c, 0xfd, + 0xef, 0x77, 0xec, 0x3a, 0x9d, 0xcf, 0x22, 0xe6, 0xe4, 0xf1, 0x51, 0x71, 0xac, 0x2d, 0x81, 0x66, + 0x54, 0x4e, 0xaa, 0x30, 0xba, 0xfc, 0xb8, 0xe3, 0x78, 0xd4, 0x9f, 0x1f, 0xba, 0x94, 0xb9, 0x32, + 0xbe, 0xb8, 0x70, 0x8d, 0xb7, 0xf5, 0x9a, 0x6c, 0xeb, 0xb5, 0x0d, 0xd9, 0x19, 0x4b, 0xb3, 0xbf, + 0x77, 0x54, 0x7c, 0xee, 0xf8, 0xa8, 0x38, 0x4a, 0x39, 0xc9, 0x4f, 0xfd, 0x71, 0x31, 0x63, 0x4a, + 0x7a, 0xf2, 0x0e, 0x0c, 0x6d, 0x1c, 0x76, 0xe8, 0xfc, 0xd8, 0xa5, 0xcc, 0x95, 0xa9, 0xc5, 0x8b, + 0xd7, 0xf8, 0xf0, 0x84, 0x1f, 0x1f, 0xfd, 0xc5, 0xb0, 0x96, 0xf2, 0xc7, 0x47, 0xc5, 0x21, 0x86, + 0x62, 0x22, 0x15, 0x79, 0x03, 0x46, 0x56, 0x5c, 0x3f, 0xa8, 0x56, 0xe6, 0x01, 0x3f, 0xf9, 0xcc, + 0xf1, 0x51, 0x71, 0x66, 0xcf, 0xf5, 0x03, 0xcb, 0x69, 0xbc, 0xee, 0xb6, 0x9c, 0x80, 0xb6, 0x3a, + 0xc1, 0xa1, 0x29, 0x90, 0x8c, 0xc7, 0x30, 0xa9, 0xf1, 0x23, 0xe3, 0x30, 0xba, 0xb9, 0x76, 0x6f, + 0xed, 0xc1, 0xd6, 0x5a, 0xe1, 0x39, 0x92, 0x87, 0xa1, 0xb5, 0x07, 0x95, 0xe5, 0x42, 0x86, 0x8c, + 0x42, 0xae, 0xb4, 0xbe, 0x5e, 0xc8, 0x92, 0x09, 0xc8, 0x57, 0x4a, 0x1b, 0xa5, 0xa5, 0x52, 0x6d, + 0xb9, 0x90, 0x23, 0xb3, 0x30, 0xbd, 0x55, 0x5d, 0xab, 0x3c, 0xd8, 0xaa, 0x59, 0x95, 0xe5, 0xda, + 0xbd, 0x8d, 0x07, 0xeb, 0x85, 0x21, 0x32, 0x05, 0x70, 0x6f, 0x73, 0x69, 0xd9, 0x5c, 0x5b, 0xde, + 0x58, 0xae, 0x15, 0x86, 0xc9, 0x1c, 0x14, 0x24, 0x89, 0x55, 0x5b, 0x36, 0x1f, 0x56, 0xcb, 0xcb, + 0x85, 0x91, 0xbb, 0x43, 0xf9, 0x5c, 0x61, 0xc8, 0x1c, 0x5d, 0xa5, 0xb6, 0x4f, 0xab, 0x15, 0xe3, + 0x3f, 0xc8, 0x41, 0xfe, 0x3e, 0x0d, 0xec, 0x86, 0x1d, 0xd8, 0xe4, 0x05, 0x6d, 0x7c, 0xb0, 0x89, + 0xca, 0xc0, 0xbc, 0x94, 0x1c, 0x98, 0xe1, 0xe3, 0xa3, 0x62, 0xe6, 0x0d, 0x75, 0x40, 0xde, 0x86, + 0xf1, 0x0a, 0xf5, 0xeb, 0x9e, 0xd3, 0x61, 0x93, 0x66, 0x3e, 0x87, 0x68, 0xe7, 0x8f, 0x8f, 0x8a, + 0x67, 0x1a, 0x11, 0x58, 0xe9, 0x10, 0x15, 0x9b, 0x54, 0x61, 0x64, 0xd5, 0xde, 0xa6, 0x4d, 0x7f, + 0x7e, 0xf8, 0x52, 0xee, 0xca, 0xf8, 0xe2, 0xf3, 0x62, 0x10, 0xe4, 0x07, 0x5e, 0xe3, 0xa5, 0xcb, + 0xed, 0xc0, 0x3b, 0x5c, 0x9a, 0x3b, 0x3e, 0x2a, 0x16, 0x9a, 0x08, 0x50, 0x3b, 0x98, 0xa3, 0x90, + 0x5a, 0x34, 0x31, 0x46, 0x4e, 0x9c, 0x18, 0x17, 0x7e, 0xef, 0xa8, 0x98, 0x61, 0x03, 0x26, 0x26, + 0x46, 0xc4, 0x4f, 0x9f, 0x22, 0x8b, 0x90, 0x37, 0xe9, 0x23, 0xc7, 0x67, 0x2d, 0xcb, 0x63, 0xcb, + 0xce, 0x1e, 0x1f, 0x15, 0x89, 0x27, 0x60, 0xca, 0x67, 0x84, 0x78, 0x0b, 0x6f, 0xc1, 0xb8, 0xf2, + 0xd5, 0xa4, 0x00, 0xb9, 0x7d, 0x7a, 0xc8, 0x7b, 0xd8, 0x64, 0x7f, 0x92, 0x39, 0x18, 0x7e, 0x64, + 0x37, 0xbb, 0xa2, 0x4b, 0x4d, 0xfe, 0xe3, 0xf3, 0xd9, 0xcf, 0x65, 0xee, 0x0e, 0xe5, 0x47, 0x0b, + 0x79, 0x33, 0x5b, 0xad, 0x18, 0x7f, 0x7b, 0x08, 0xf2, 0xa6, 0xcb, 0x17, 0x22, 0xb9, 0x0a, 0xc3, + 0xb5, 0xc0, 0x0e, 0xe4, 0x30, 0xcd, 0x1e, 0x1f, 0x15, 0xa7, 0xd9, 0x22, 0xa5, 0x4a, 0xfd, 0x1c, + 0x83, 0xa1, 0xae, 0xef, 0xd9, 0xbe, 0x1c, 0x2e, 0x44, 0xed, 0x30, 0x80, 0x8a, 0x8a, 0x18, 0xe4, + 0x32, 0x0c, 0xdd, 0x77, 0x1b, 0x54, 0x8c, 0x18, 0x39, 0x3e, 0x2a, 0x4e, 0xb5, 0xdc, 0x86, 0x8a, + 0x88, 0xe5, 0xe4, 0x75, 0x18, 0x2b, 0x77, 0x3d, 0x8f, 0xb6, 0xd9, 0x5c, 0x1f, 0x42, 0xe4, 0xa9, + 0xe3, 0xa3, 0x22, 0xd4, 0x39, 0xd0, 0x72, 0x1a, 0x66, 0x84, 0xc0, 0x86, 0xa1, 0x16, 0xd8, 0x5e, + 0x40, 0x1b, 0xf3, 0xc3, 0x03, 0x0d, 0x03, 0x5b, 0x9f, 0x33, 0x3e, 0x27, 0x89, 0x0f, 0x83, 0xe0, + 0x44, 0x56, 0x60, 0xfc, 0x8e, 0x67, 0xd7, 0xe9, 0x3a, 0xf5, 0x1c, 0xb7, 0x81, 0xe3, 0x9b, 0x5b, + 0xba, 0x7c, 0x7c, 0x54, 0x3c, 0xbb, 0xcb, 0xc0, 0x56, 0x07, 0xe1, 0x11, 0xf5, 0x77, 0x8f, 0x8a, + 0xf9, 0x8a, 0xd8, 0x32, 0x4d, 0x95, 0x94, 0x7c, 0x9d, 0x0d, 0x8e, 0x1f, 0x60, 0xd7, 0xd2, 0xc6, + 0xfc, 0xe8, 0x89, 0x9f, 0x68, 0x88, 0x4f, 0x3c, 0xdb, 0xb4, 0xfd, 0xc0, 0xf2, 0x38, 0x5d, 0xec, + 0x3b, 0x55, 0x96, 0xe4, 0x01, 0xe4, 0x6b, 0xf5, 0x3d, 0xda, 0xe8, 0x36, 0x29, 0x4e, 0x99, 0xf1, + 0xc5, 0x73, 0x62, 0x52, 0xcb, 0xf1, 0x94, 0xc5, 0x4b, 0x0b, 0x82, 0x37, 0xf1, 0x05, 0x44, 0x9d, + 0x4f, 0x12, 0xeb, 0xf3, 0xf9, 0x6f, 0xff, 0x62, 0xf1, 0xb9, 0xef, 0xfb, 0x67, 0x97, 0x9e, 0x33, + 0xfe, 0xcb, 0x2c, 0x14, 0xe2, 0x4c, 0xc8, 0x0e, 0x4c, 0x6e, 0x76, 0x1a, 0x76, 0x40, 0xcb, 0x4d, + 0x87, 0xb6, 0x03, 0x1f, 0x27, 0x49, 0xff, 0x36, 0xbd, 0x2c, 0xea, 0x9d, 0xef, 0x22, 0xa1, 0x55, + 0xe7, 0x94, 0xb1, 0x56, 0xe9, 0x6c, 0xa3, 0x7a, 0x6a, 0xb8, 0x81, 0xfb, 0x38, 0xc3, 0x4e, 0x57, + 0x0f, 0xdf, 0xfa, 0x7b, 0xd4, 0x23, 0xd8, 0x8a, 0x09, 0xd4, 0x6e, 0x6c, 0x1f, 0xe2, 0xcc, 0x1c, + 0x7c, 0x02, 0x31, 0x92, 0x94, 0x09, 0xc4, 0xc0, 0xc6, 0xff, 0x95, 0x81, 0x29, 0x93, 0xfa, 0x6e, + 0xd7, 0xab, 0xd3, 0x15, 0x6a, 0x37, 0xa8, 0xc7, 0xa6, 0xff, 0x3d, 0xa7, 0xdd, 0x10, 0x6b, 0x0a, + 0xa7, 0xff, 0xbe, 0xd3, 0x56, 0xb7, 0x6e, 0x2c, 0x27, 0x9f, 0x86, 0xd1, 0x5a, 0x77, 0x1b, 0x51, + 0xb3, 0xd1, 0x0e, 0xe0, 0x77, 0xb7, 0xad, 0x18, 0xba, 0x44, 0x23, 0xd7, 0x61, 0xf4, 0x21, 0xf5, + 0xfc, 0x68, 0x37, 0xc4, 0xa3, 0xe1, 0x11, 0x07, 0xa9, 0x04, 0x02, 0x8b, 0xdc, 0x89, 0x76, 0x64, + 0x71, 0xa8, 0x4d, 0xc7, 0xf6, 0xc1, 0x68, 0xaa, 0xb4, 0x04, 0x44, 0x9d, 0x2a, 0x12, 0xcb, 0xf8, + 0xe9, 0x2c, 0x14, 0x2a, 0x76, 0x60, 0x6f, 0xdb, 0xbe, 0xe8, 0xcf, 0x87, 0x37, 0xd9, 0x1e, 0xaf, + 0x34, 0x14, 0xf7, 0x78, 0xf6, 0xe5, 0x1f, 0xb9, 0x79, 0xaf, 0xc4, 0x9b, 0x37, 0xce, 0x4e, 0x58, + 0xd1, 0xbc, 0xa8, 0x51, 0xef, 0x9e, 0xdc, 0xa8, 0x82, 0x68, 0x54, 0x5e, 0x36, 0x2a, 0x6a, 0x0a, + 0x79, 0x17, 0x86, 0x6a, 0x1d, 0x5a, 0x17, 0x9b, 0x88, 0x3c, 0x17, 0xf4, 0xc6, 0x31, 0x84, 0x87, + 0x37, 0x97, 0x26, 0x04, 0x9b, 0x21, 0xbf, 0x43, 0xeb, 0x26, 0x92, 0x29, 0x8b, 0xe6, 0x1f, 0xe5, + 0x60, 0x2e, 0x8d, 0x4c, 0x6d, 0xc7, 0x48, 0x9f, 0x76, 0x5c, 0x81, 0x3c, 0x3b, 0xc2, 0xd9, 0xb1, + 0x88, 0xdb, 0xc5, 0xd8, 0xd2, 0x04, 0xfb, 0xe4, 0x3d, 0x01, 0x33, 0xc3, 0x52, 0xf2, 0x52, 0x28, + 0x11, 0xe4, 0x23, 0x7e, 0x42, 0x22, 0x90, 0x72, 0x00, 0x1b, 0x6b, 0xb9, 0x84, 0x51, 0x70, 0x88, + 0xba, 0x45, 0x82, 0xa3, 0xb1, 0xf6, 0x04, 0x44, 0x3b, 0x66, 0xe4, 0xa1, 0xb0, 0x0c, 0x79, 0xd9, + 0xac, 0xf9, 0x09, 0x64, 0x34, 0x13, 0xeb, 0xa4, 0x87, 0x37, 0xf9, 0x60, 0x36, 0xc4, 0x6f, 0x95, + 0x8d, 0xc4, 0x21, 0x37, 0x21, 0xbf, 0xee, 0xb9, 0x8f, 0x0f, 0xab, 0x15, 0x7f, 0x7e, 0xf2, 0x52, + 0xee, 0xca, 0xd8, 0xd2, 0xb9, 0xe3, 0xa3, 0xe2, 0x6c, 0x87, 0xc1, 0x2c, 0xa7, 0xa1, 0x9e, 0xb4, + 0x21, 0xe2, 0xdd, 0xa1, 0x7c, 0xa6, 0x90, 0xbd, 0x3b, 0x94, 0xcf, 0x16, 0x72, 0x5c, 0xbc, 0xb8, + 0x3b, 0x94, 0x1f, 0x2a, 0x0c, 0xdf, 0x1d, 0xca, 0x0f, 0xa3, 0xc0, 0x31, 0x56, 0x80, 0xbb, 0x43, + 0xf9, 0xf1, 0xc2, 0x84, 0x76, 0xda, 0x23, 0x83, 0xc0, 0xad, 0xbb, 0x4d, 0x33, 0xb7, 0x69, 0x56, + 0xcd, 0x91, 0x72, 0xa9, 0x4c, 0xbd, 0xc0, 0xcc, 0x95, 0xb6, 0x6a, 0xe6, 0x64, 0xe5, 0xb0, 0x6d, + 0xb7, 0x9c, 0x3a, 0x3f, 0x3a, 0xcd, 0xdc, 0x9d, 0xf2, 0xba, 0x51, 0x82, 0xa9, 0xa8, 0x2d, 0xab, + 0x8e, 0x1f, 0x90, 0xeb, 0x30, 0x26, 0x21, 0x6c, 0xa3, 0xcb, 0xa5, 0xb6, 0xda, 0x8c, 0x70, 0x8c, + 0xdf, 0xcd, 0x02, 0x44, 0x25, 0xcf, 0xe8, 0x5a, 0xf8, 0xac, 0xb6, 0x16, 0xce, 0xc4, 0xd7, 0x42, + 0xcf, 0x55, 0x40, 0xde, 0x87, 0x11, 0x26, 0x16, 0x74, 0xa5, 0x48, 0x74, 0x2e, 0x4e, 0x8a, 0x85, + 0x0f, 0x6f, 0x2e, 0x4d, 0x09, 0xe2, 0x11, 0x1f, 0x21, 0xa6, 0x20, 0x53, 0x96, 0xd1, 0x2f, 0x8c, + 0x46, 0x83, 0x21, 0x16, 0xd0, 0x15, 0x08, 0x07, 0x54, 0x74, 0x28, 0xae, 0x8c, 0x8e, 0x1c, 0xe4, + 0xb0, 0x94, 0x9c, 0x07, 0x36, 0xe0, 0xa2, 0x53, 0x47, 0x8f, 0x8f, 0x8a, 0xb9, 0xae, 0xe7, 0xe0, + 0x24, 0x20, 0xd7, 0x41, 0x4c, 0x03, 0xd1, 0x81, 0x6c, 0xf6, 0xcd, 0xd4, 0x6d, 0xab, 0x4e, 0xbd, + 0x20, 0xea, 0xf1, 0xf9, 0x8c, 0x9c, 0x2d, 0xa4, 0x03, 0xfa, 0x54, 0x99, 0x1f, 0xc2, 0x69, 0x70, + 0x25, 0xb5, 0x57, 0xae, 0x69, 0xa8, 0x5c, 0x8c, 0xbc, 0x24, 0x4f, 0xa5, 0x06, 0x2f, 0xb3, 0x12, + 0x22, 0xa5, 0x5e, 0x01, 0xb9, 0x09, 0x6c, 0x86, 0x8a, 0xde, 0x07, 0x51, 0x4f, 0x69, 0xab, 0xb6, + 0x74, 0x46, 0x70, 0x9a, 0xb4, 0x0f, 0x54, 0x72, 0x86, 0x4d, 0xde, 0x06, 0x36, 0x85, 0x45, 0xbf, + 0x13, 0x41, 0x74, 0xa7, 0xbc, 0x5e, 0x6e, 0xba, 0xdd, 0x46, 0xed, 0x8b, 0xab, 0x11, 0xf1, 0x6e, + 0xbd, 0xa3, 0x12, 0xdf, 0x29, 0xaf, 0x93, 0xb7, 0x61, 0xb8, 0xf4, 0xcd, 0xae, 0x47, 0x85, 0x7c, + 0x32, 0x21, 0xeb, 0x64, 0xb0, 0xa5, 0x73, 0x82, 0x70, 0xda, 0x66, 0x3f, 0x55, 0xb9, 0x0e, 0xcb, + 0x59, 0xcd, 0x1b, 0xab, 0x35, 0x21, 0x7b, 0x90, 0x58, 0xb7, 0x6c, 0xac, 0x2a, 0x9f, 0x1d, 0x68, + 0xad, 0x66, 0x54, 0xe4, 0x3a, 0x64, 0x4b, 0x15, 0xbc, 0x11, 0x8d, 0x2f, 0x8e, 0xc9, 0x6a, 0x2b, + 0x4b, 0x73, 0x82, 0x64, 0xc2, 0x56, 0x97, 0x41, 0xb6, 0x54, 0x21, 0x4b, 0x30, 0x7c, 0xff, 0xb0, + 0xf6, 0xc5, 0x55, 0xb1, 0x99, 0xcd, 0xca, 0x79, 0xcd, 0x60, 0x0f, 0x70, 0xd9, 0xfb, 0xd1, 0x17, + 0xb7, 0x0e, 0xfd, 0x6f, 0x34, 0xd5, 0x2f, 0x46, 0x34, 0xb2, 0x0e, 0x63, 0xa5, 0x46, 0xcb, 0x69, + 0x6f, 0xfa, 0xd4, 0x9b, 0x1f, 0x47, 0x3e, 0xf3, 0xb1, 0xef, 0x0e, 0xcb, 0x97, 0xe6, 0x8f, 0x8f, + 0x8a, 0x73, 0x36, 0xfb, 0x69, 0x75, 0x7d, 0xea, 0x29, 0xdc, 0x22, 0x26, 0x64, 0x1d, 0xe0, 0xbe, + 0xdb, 0xde, 0x75, 0x4b, 0x41, 0xd3, 0xf6, 0x63, 0xdb, 0x63, 0x54, 0x10, 0x8a, 0x0f, 0x67, 0x5a, + 0x0c, 0x66, 0xd9, 0x0c, 0xa8, 0x30, 0x54, 0x78, 0x90, 0xdb, 0x30, 0xf2, 0xc0, 0xb3, 0xeb, 0x4d, + 0x3a, 0x3f, 0x89, 0xdc, 0xe6, 0x04, 0x37, 0x0e, 0x94, 0x2d, 0x9d, 0x17, 0x0c, 0x0b, 0x2e, 0x82, + 0xd5, 0x6b, 0x0a, 0x47, 0x5c, 0xd8, 0x02, 0x92, 0x9c, 0x93, 0x29, 0x97, 0x84, 0x4f, 0xa9, 0x97, + 0x84, 0x68, 0xd1, 0x97, 0xdd, 0x56, 0xcb, 0x6e, 0x37, 0x90, 0xf6, 0xe1, 0xa2, 0x72, 0x77, 0x30, + 0xbe, 0x01, 0x33, 0x89, 0xce, 0x3a, 0xe1, 0x7e, 0xf7, 0x1e, 0x4c, 0x57, 0xe8, 0x8e, 0xdd, 0x6d, + 0x06, 0xe1, 0x49, 0xc2, 0x97, 0x28, 0xde, 0xb4, 0x1a, 0xbc, 0xc8, 0x92, 0xc7, 0x87, 0x19, 0x47, + 0x36, 0xde, 0x85, 0x49, 0xad, 0xf9, 0xec, 0xaa, 0x50, 0xea, 0x36, 0x9c, 0x00, 0x07, 0x32, 0x13, + 0x5d, 0x15, 0x6c, 0x06, 0xc4, 0xe1, 0x32, 0x23, 0x04, 0xe3, 0x3f, 0x54, 0xa5, 0x15, 0xb1, 0x13, + 0xb1, 0x6b, 0xb5, 0xd8, 0x0f, 0x32, 0x91, 0xec, 0x94, 0xd8, 0x0f, 0xc2, 0xdd, 0xe0, 0x2a, 0x5f, + 0x9b, 0xd9, 0xc4, 0xda, 0x1c, 0x17, 0x23, 0x91, 0xb3, 0x0f, 0x7c, 0xbe, 0x22, 0xc3, 0x99, 0x9a, + 0xfb, 0xe8, 0x33, 0xf5, 0x7d, 0x98, 0xb8, 0x6f, 0xb7, 0xed, 0x5d, 0xda, 0x60, 0x2d, 0xe0, 0x7b, + 0xcf, 0xd8, 0xd2, 0xf3, 0xc7, 0x47, 0xc5, 0x73, 0x2d, 0x0e, 0xc7, 0x56, 0xaa, 0x93, 0x48, 0x23, + 0x20, 0x37, 0xe4, 0xca, 0x1e, 0x4e, 0x59, 0xd9, 0x93, 0xa2, 0xf6, 0x61, 0x5c, 0xd9, 0x62, 0x3d, + 0x1b, 0xbf, 0x35, 0x86, 0x6d, 0x24, 0xaf, 0xc3, 0x88, 0x49, 0x77, 0xd9, 0x51, 0x93, 0x89, 0x06, + 0xc9, 0x43, 0x88, 0xda, 0x31, 0x1c, 0x07, 0xe5, 0x0c, 0xda, 0xf0, 0xf7, 0x9c, 0x9d, 0x40, 0xf4, + 0x4e, 0x28, 0x67, 0x08, 0xb0, 0x22, 0x67, 0x08, 0x88, 0x7e, 0x9d, 0xe5, 0x30, 0xb6, 0xfb, 0x99, + 0x95, 0x9a, 0xe8, 0x34, 0xd9, 0xc3, 0x66, 0x45, 0xd9, 0x46, 0x3c, 0x4d, 0x4a, 0x60, 0xd8, 0xe4, + 0x16, 0x8c, 0x95, 0xea, 0x75, 0xb7, 0xab, 0xdc, 0x19, 0xf9, 0xba, 0xe5, 0x40, 0x5d, 0x45, 0x12, + 0xa1, 0x92, 0x1a, 0x8c, 0x2f, 0xb3, 0x8b, 0x96, 0x53, 0xb6, 0xeb, 0x7b, 0xb2, 0x93, 0xe4, 0x1e, + 0xa6, 0x94, 0x44, 0x2b, 0x97, 0x22, 0xb0, 0xce, 0x80, 0xaa, 0x92, 0x41, 0xc1, 0x25, 0x1b, 0x30, + 0x5e, 0xa3, 0x75, 0x8f, 0x06, 0xb5, 0xc0, 0xf5, 0x68, 0x6c, 0x4b, 0x56, 0x4a, 0x96, 0x2e, 0xca, + 0xbb, 0x9e, 0x8f, 0x40, 0xcb, 0x67, 0x50, 0x95, 0xab, 0x82, 0xcc, 0x85, 0xf6, 0x96, 0xeb, 0x1d, + 0x56, 0x96, 0xc4, 0x36, 0x1d, 0x9d, 0xe9, 0x1c, 0xac, 0x0a, 0xed, 0x0c, 0xd2, 0xd8, 0xd6, 0x85, + 0x76, 0x8e, 0x85, 0x23, 0x55, 0xa9, 0xa1, 0x6c, 0x25, 0x36, 0xed, 0xe9, 0xa8, 0x97, 0x11, 0xac, + 0x8c, 0x54, 0xc3, 0x47, 0xc9, 0x4c, 0x1b, 0x29, 0x81, 0x45, 0x3a, 0x40, 0xe4, 0xa8, 0x71, 0x41, + 0xb7, 0x49, 0x7d, 0x5f, 0xec, 0xe5, 0xe7, 0x63, 0x83, 0x1f, 0x21, 0x2c, 0xbd, 0x22, 0x98, 0x5f, + 0x90, 0xd3, 0x40, 0xdc, 0xd3, 0x58, 0xa1, 0x52, 0x4f, 0x0a, 0x6f, 0xf2, 0x16, 0xc0, 0xf2, 0xe3, + 0x80, 0x7a, 0x6d, 0xbb, 0x19, 0xea, 0xc1, 0x50, 0xf5, 0x43, 0x05, 0x54, 0x1f, 0x68, 0x05, 0x99, + 0x94, 0x61, 0xb2, 0xe4, 0xfb, 0xdd, 0x16, 0x35, 0xdd, 0x26, 0x2d, 0x99, 0x6b, 0xb8, 0xef, 0x8f, + 0x2d, 0x5d, 0x38, 0x3e, 0x2a, 0x9e, 0xb7, 0xb1, 0xc0, 0xf2, 0xdc, 0x26, 0xb5, 0x6c, 0x4f, 0x9d, + 0xdd, 0x3a, 0x0d, 0x79, 0x00, 0xf0, 0xa0, 0x43, 0xdb, 0x35, 0x6a, 0x7b, 0xf5, 0xbd, 0xd8, 0x36, + 0x1f, 0x15, 0x2c, 0xbd, 0x20, 0x5a, 0x38, 0xe7, 0x76, 0x68, 0xdb, 0x47, 0x98, 0xfa, 0x55, 0x11, + 0x26, 0xd9, 0x82, 0xe9, 0x6a, 0xe9, 0xfe, 0xba, 0xdb, 0x74, 0xea, 0x87, 0x42, 0x72, 0x9a, 0x42, + 0xed, 0xe0, 0x59, 0xc1, 0x35, 0x56, 0xca, 0xb7, 0x27, 0xc7, 0x6e, 0x59, 0x1d, 0x84, 0x5a, 0x42, + 0x7e, 0x8a, 0x73, 0x21, 0x1f, 0xb0, 0x39, 0xe8, 0x33, 0x61, 0x70, 0xc3, 0xde, 0xf5, 0xe7, 0xa7, + 0x35, 0x6d, 0x57, 0x69, 0xab, 0x76, 0x4d, 0x29, 0xe5, 0x62, 0xca, 0x02, 0x9f, 0x88, 0x08, 0xb5, + 0x02, 0x7b, 0xd7, 0xd7, 0x27, 0x62, 0x88, 0x4d, 0xee, 0x02, 0x54, 0xdc, 0x7a, 0xb7, 0x45, 0xdb, + 0x41, 0x65, 0x69, 0xbe, 0xa0, 0x5f, 0x05, 0xc2, 0x82, 0x68, 0x6b, 0x6b, 0xb8, 0x75, 0x6d, 0x26, + 0x2a, 0xd4, 0x0b, 0xef, 0x41, 0x21, 0xfe, 0x21, 0xa7, 0x54, 0x60, 0x4d, 0x16, 0xa6, 0x94, 0xd6, + 0x2f, 0x3f, 0x76, 0xfc, 0xc0, 0x37, 0xbe, 0xa5, 0xad, 0x40, 0xb6, 0x3b, 0xdc, 0xa3, 0x87, 0xeb, + 0x1e, 0xdd, 0x71, 0x1e, 0x8b, 0xcd, 0x0c, 0x77, 0x87, 0x7d, 0x7a, 0x68, 0x75, 0x10, 0xaa, 0xee, + 0x0e, 0x21, 0x2a, 0xf9, 0x0c, 0xe4, 0xef, 0xdd, 0xaf, 0xdd, 0xa3, 0x87, 0xd5, 0x8a, 0x38, 0xa8, + 0x38, 0x59, 0xcb, 0xb7, 0x18, 0xa9, 0x36, 0xd7, 0x42, 0x4c, 0x63, 0x29, 0xda, 0x09, 0x59, 0xcd, + 0xe5, 0x66, 0xd7, 0x0f, 0xa8, 0x57, 0xad, 0xa8, 0x35, 0xd7, 0x39, 0x30, 0xb6, 0x2f, 0x85, 0xa8, + 0xc6, 0xbf, 0xca, 0xe2, 0x2e, 0xc8, 0x26, 0x7c, 0xb5, 0xed, 0x07, 0x76, 0xbb, 0x4e, 0x43, 0x06, + 0x38, 0xe1, 0x1d, 0x01, 0x8d, 0x4d, 0xf8, 0x08, 0x59, 0xaf, 0x3a, 0x3b, 0x70, 0xd5, 0xac, 0x4a, + 0xa9, 0xb9, 0xa8, 0x56, 0x54, 0xf5, 0xaa, 0x27, 0xa0, 0xb1, 0x2a, 0x23, 0x64, 0x72, 0x19, 0x46, + 0xab, 0xa5, 0xfb, 0xa5, 0x6e, 0xb0, 0x87, 0x7b, 0x70, 0x9e, 0xcb, 0xe7, 0x6c, 0xb6, 0xda, 0xdd, + 0x60, 0xcf, 0x94, 0x85, 0xe4, 0x3a, 0xde, 0x7b, 0xda, 0x34, 0xe0, 0x6a, 0x58, 0x71, 0xe8, 0xfa, + 0x1c, 0x14, 0xbb, 0xf6, 0x30, 0x10, 0x79, 0x0d, 0x86, 0x1f, 0xae, 0x97, 0xab, 0x15, 0x71, 0x71, + 0xc6, 0x93, 0xe8, 0x51, 0xa7, 0xae, 0x7f, 0x09, 0x47, 0x21, 0xcb, 0x30, 0x55, 0xa3, 0xf5, 0xae, + 0xe7, 0x04, 0x87, 0x77, 0x3c, 0xb7, 0xdb, 0xf1, 0xe7, 0x47, 0xb1, 0x0e, 0x5c, 0xe9, 0xbe, 0x28, + 0xb1, 0x76, 0xb1, 0x48, 0xa1, 0x8e, 0x11, 0x19, 0xbf, 0x9d, 0x89, 0xb6, 0x49, 0x72, 0x59, 0x13, + 0x6b, 0x50, 0x77, 0xc3, 0xc4, 0x1a, 0x55, 0x77, 0x83, 0x02, 0x8e, 0x09, 0xa4, 0xdc, 0xf5, 0x03, + 0xb7, 0xb5, 0xdc, 0x6e, 0x74, 0x5c, 0xa7, 0x1d, 0x20, 0x15, 0xef, 0x7c, 0xe3, 0xf8, 0xa8, 0x78, + 0xb1, 0x8e, 0xa5, 0x16, 0x15, 0xc5, 0x56, 0x8c, 0x4b, 0x0a, 0xf5, 0x13, 0x8c, 0x87, 0xf1, 0xfb, + 0x59, 0xed, 0x78, 0x63, 0x9f, 0x67, 0xd2, 0x4e, 0xd3, 0xa9, 0xe3, 0x8d, 0x1e, 0x1b, 0x1a, 0xce, + 0x2a, 0xfc, 0x3c, 0x2f, 0x2a, 0xe5, 0x3d, 0xa4, 0xf3, 0x4e, 0xa1, 0x26, 0x5f, 0x80, 0x09, 0x26, + 0x69, 0x88, 0x9f, 0xfe, 0x7c, 0x16, 0x3b, 0xfb, 0x05, 0xd4, 0xc2, 0xf9, 0xd4, 0x0b, 0xd9, 0x68, + 0x22, 0x8a, 0x4a, 0x41, 0x1a, 0x30, 0xbf, 0xe1, 0xd9, 0x6d, 0xdf, 0x09, 0x96, 0xdb, 0x75, 0xef, + 0x10, 0x25, 0xa3, 0xe5, 0xb6, 0xbd, 0xdd, 0xa4, 0x0d, 0x6c, 0x6e, 0x7e, 0xe9, 0xca, 0xf1, 0x51, + 0xf1, 0xe5, 0x80, 0xe3, 0x58, 0x34, 0x44, 0xb2, 0x28, 0xc7, 0x52, 0x38, 0xf7, 0xe4, 0xc4, 0x24, + 0x29, 0xd9, 0xad, 0xf8, 0x08, 0xc3, 0x85, 0x04, 0x94, 0xa4, 0xc2, 0xd1, 0x60, 0x7b, 0x98, 0xfa, + 0x99, 0x2a, 0x81, 0xf1, 0xff, 0x65, 0xa2, 0x03, 0x98, 0xbc, 0x03, 0xe3, 0x62, 0xc5, 0x28, 0xf3, + 0x02, 0x77, 0x50, 0xb9, 0xbc, 0x62, 0x23, 0xab, 0xa2, 0xb3, 0x7b, 0x7f, 0xa9, 0xbc, 0xaa, 0xcc, + 0x0d, 0xbc, 0xf7, 0xdb, 0xf5, 0x66, 0x9c, 0x4a, 0xa2, 0xb1, 0x49, 0xb0, 0xb1, 0x5a, 0xd3, 0x7b, + 0x05, 0x27, 0x41, 0xd0, 0xf4, 0x53, 0xba, 0x41, 0x41, 0x7e, 0xf2, 0x86, 0xff, 0xaf, 0x99, 0xb4, + 0x73, 0x9e, 0x2c, 0xc1, 0xe4, 0x96, 0xeb, 0xed, 0xe3, 0xf8, 0x2a, 0x9d, 0x80, 0x23, 0x7f, 0x20, + 0x0b, 0xe2, 0x0d, 0xd2, 0x49, 0xd4, 0x6f, 0x53, 0x7a, 0x43, 0xff, 0xb6, 0x18, 0x07, 0x8d, 0x80, + 0x8d, 0x43, 0xc8, 0x31, 0x5c, 0x1d, 0x38, 0x0e, 0xd1, 0x27, 0x68, 0x53, 0x58, 0x45, 0x37, 0xfe, + 0x9b, 0x8c, 0x7a, 0x9e, 0xb3, 0x4e, 0xae, 0xb8, 0x2d, 0xdb, 0x69, 0x2b, 0xcd, 0xe1, 0x0f, 0x4b, + 0x08, 0x8d, 0x7f, 0x89, 0x82, 0x4c, 0x6e, 0x42, 0x9e, 0xff, 0x0a, 0xf7, 0x5a, 0xd4, 0x6a, 0x09, + 0x42, 0xfd, 0xa0, 0x90, 0x88, 0x89, 0x91, 0xc9, 0x9d, 0x76, 0x64, 0x7e, 0x2b, 0xa3, 0x1e, 0xc5, + 0x1f, 0xf5, 0xb0, 0x89, 0x1d, 0x32, 0xd9, 0xd3, 0x1c, 0x32, 0x4f, 0xdc, 0x84, 0xef, 0xcb, 0xc0, + 0xb8, 0xa2, 0xa5, 0x60, 0x6d, 0x58, 0xf7, 0xdc, 0x0f, 0x69, 0x3d, 0xd0, 0xdb, 0xd0, 0xe1, 0xc0, + 0x58, 0x1b, 0x42, 0xd4, 0x27, 0x68, 0x83, 0xf1, 0xe7, 0x19, 0x71, 0x47, 0x1a, 0x78, 0x9b, 0xd7, + 0xb7, 0xe4, 0xec, 0x69, 0x8e, 0xc8, 0x2f, 0xc0, 0xb0, 0x49, 0x1b, 0x8e, 0x2f, 0xee, 0x37, 0x33, + 0xea, 0x7d, 0x0c, 0x0b, 0x22, 0xb9, 0xc9, 0x63, 0x3f, 0xd5, 0xf3, 0x0d, 0xcb, 0x99, 0x20, 0x5b, + 0xf5, 0x6f, 0x37, 0xe9, 0x63, 0x87, 0x2f, 0x46, 0x71, 0xd4, 0xe2, 0xf1, 0xe6, 0xf8, 0xd6, 0x0e, + 0x2b, 0x11, 0x12, 0xb5, 0xba, 0xf0, 0x34, 0x1a, 0xe3, 0x03, 0x80, 0xa8, 0x4a, 0x72, 0x0f, 0x0a, + 0x62, 0x36, 0x38, 0xed, 0x5d, 0x2e, 0x48, 0x89, 0x3e, 0x28, 0x1e, 0x1f, 0x15, 0x9f, 0xaf, 0x87, + 0x65, 0x42, 0xea, 0x54, 0xf8, 0x26, 0x08, 0x8d, 0xff, 0x38, 0x0b, 0xd9, 0x12, 0x0e, 0xc8, 0x3d, + 0x7a, 0x18, 0xd8, 0xdb, 0xb7, 0x9d, 0xa6, 0xb6, 0x98, 0xf6, 0x11, 0x6a, 0xed, 0x38, 0x9a, 0xba, + 0x42, 0x41, 0x66, 0x8b, 0xe9, 0x9e, 0xb7, 0xfd, 0x26, 0x12, 0x2a, 0x8b, 0x69, 0xdf, 0xdb, 0x7e, + 0x33, 0x4e, 0x16, 0x22, 0x12, 0x03, 0x46, 0xf8, 0xc2, 0x12, 0x73, 0x10, 0x8e, 0x8f, 0x8a, 0x23, + 0x7c, 0xfd, 0x99, 0xa2, 0x84, 0x9c, 0x87, 0x5c, 0x6d, 0x7d, 0x4d, 0xec, 0x80, 0xa8, 0x16, 0xf4, + 0x3b, 0x6d, 0x93, 0xc1, 0x58, 0x9d, 0xab, 0x95, 0xd2, 0x3a, 0x2a, 0x02, 0x86, 0xa3, 0x3a, 0x9b, + 0x0d, 0xbb, 0x13, 0x57, 0x05, 0x84, 0x88, 0xe4, 0x5d, 0x18, 0xbf, 0x57, 0x29, 0xaf, 0xb8, 0x3e, + 0xdf, 0xbd, 0x46, 0xa2, 0xc9, 0xbf, 0xdf, 0xa8, 0x5b, 0xa8, 0x89, 0x8f, 0x1f, 0x03, 0x0a, 0xbe, + 0xf1, 0xc3, 0x59, 0x18, 0x57, 0xf4, 0x64, 0xe4, 0x33, 0xe2, 0x81, 0x34, 0xa3, 0xdd, 0x00, 0x14, + 0x0c, 0x56, 0xca, 0x95, 0x2a, 0x2d, 0xb7, 0x41, 0xc5, 0x73, 0x69, 0xa4, 0xc0, 0xc8, 0x0e, 0xa2, + 0xc0, 0x78, 0x0b, 0x80, 0xcf, 0x01, 0xfc, 0x64, 0x45, 0x9c, 0x50, 0xec, 0x24, 0xd4, 0x71, 0x89, + 0x90, 0xc9, 0x43, 0x98, 0xdd, 0xf0, 0xba, 0x7e, 0x50, 0x3b, 0xf4, 0x03, 0xda, 0x62, 0xdc, 0xd6, + 0x5d, 0xb7, 0x29, 0xe6, 0xdf, 0xcb, 0xc7, 0x47, 0xc5, 0x4b, 0x01, 0x2b, 0xb6, 0x7c, 0x2c, 0xc7, + 0x0f, 0xb0, 0x3a, 0xae, 0xab, 0xaa, 0x35, 0xd2, 0x18, 0x18, 0x26, 0x4c, 0xa8, 0x4a, 0x11, 0x76, + 0xb2, 0x88, 0xc7, 0x24, 0xa1, 0xea, 0x56, 0x4e, 0x16, 0xf1, 0x95, 0xc9, 0xc7, 0x2d, 0x9d, 0xc4, + 0xf8, 0x8c, 0xaa, 0x90, 0x1b, 0x74, 0x61, 0x1b, 0x3f, 0x90, 0x89, 0xb6, 0x91, 0x87, 0x37, 0xc8, + 0xdb, 0x30, 0xc2, 0x1f, 0xef, 0xc4, 0x1b, 0xe7, 0x99, 0xf0, 0x52, 0xab, 0xbe, 0xec, 0x71, 0x4d, + 0xf8, 0x1f, 0xf2, 0x07, 0xfe, 0xe7, 0x4c, 0x41, 0x12, 0x2a, 0xd1, 0x75, 0x7d, 0x9a, 0xe4, 0x8e, + 0xea, 0xe2, 0x1b, 0x69, 0x4a, 0x74, 0xe3, 0x77, 0x86, 0x60, 0x4a, 0x47, 0x53, 0x5f, 0xf8, 0x32, + 0x03, 0xbd, 0xf0, 0x7d, 0x01, 0xf2, 0xac, 0x3f, 0x9c, 0x3a, 0x95, 0x12, 0xd9, 0xcb, 0xf8, 0xb4, + 0x20, 0x60, 0xda, 0xcb, 0x35, 0xf0, 0xe1, 0x60, 0x77, 0x5c, 0x33, 0xa4, 0x22, 0x8b, 0xca, 0x33, + 0x54, 0x2e, 0x12, 0x52, 0xe4, 0x33, 0x94, 0xba, 0x1e, 0xc2, 0x07, 0xa9, 0x37, 0x60, 0x84, 0xc9, + 0xf7, 0xa1, 0x0a, 0x06, 0xbf, 0x92, 0x89, 0xfe, 0x31, 0x13, 0x15, 0x8e, 0x44, 0xb6, 0x20, 0xbf, + 0x6a, 0xfb, 0x41, 0x8d, 0xd2, 0xf6, 0x00, 0x6f, 0xf7, 0x45, 0xd1, 0x55, 0xb3, 0xf8, 0x30, 0xee, + 0x53, 0xda, 0x8e, 0x3d, 0xbe, 0x86, 0xcc, 0xc8, 0x57, 0x01, 0xca, 0x6e, 0x3b, 0xf0, 0xdc, 0xe6, + 0xaa, 0xbb, 0x3b, 0x3f, 0x82, 0x77, 0xdf, 0x8b, 0xb1, 0x01, 0x88, 0x10, 0xf8, 0xf5, 0x37, 0x54, + 0xf0, 0xd4, 0x79, 0x81, 0xd5, 0x74, 0x77, 0xd5, 0x75, 0x10, 0xe1, 0x93, 0xdb, 0x50, 0x90, 0x8a, + 0x85, 0xcd, 0xce, 0xae, 0x87, 0x13, 0x64, 0x34, 0x92, 0x3c, 0xe8, 0xe3, 0xc0, 0xea, 0x0a, 0xb8, + 0xba, 0x53, 0xc6, 0x69, 0xc8, 0x57, 0xe0, 0x5c, 0x1c, 0x26, 0x47, 0x39, 0x1f, 0xc9, 0xe4, 0x2a, + 0xbb, 0x94, 0x79, 0xdf, 0x8b, 0x85, 0xf1, 0xdd, 0x2c, 0x9c, 0xeb, 0xd1, 0x58, 0xb6, 0x1e, 0xf0, + 0xb8, 0x56, 0xd6, 0x43, 0xec, 0x94, 0xe6, 0x36, 0x47, 0x97, 0x20, 0x2b, 0x0e, 0xb8, 0xa1, 0xa5, + 0xc2, 0xf1, 0x51, 0x71, 0x42, 0x1b, 0xc7, 0x6c, 0xb5, 0x42, 0xee, 0xc2, 0x10, 0x1b, 0xa2, 0x01, + 0x9e, 0xce, 0xa5, 0x4e, 0x69, 0x2a, 0x70, 0xd4, 0xe9, 0x83, 0x43, 0x87, 0x3c, 0xc8, 0x67, 0x20, + 0xb7, 0xb1, 0xb1, 0x8a, 0x73, 0x27, 0x87, 0x6d, 0x9f, 0x0c, 0x82, 0xa6, 0x36, 0x55, 0x27, 0x19, + 0xed, 0xb5, 0xd0, 0xd2, 0x82, 0xa1, 0x93, 0x2f, 0xc5, 0x4c, 0x7a, 0x5e, 0xeb, 0x3f, 0xd0, 0x83, + 0x5b, 0xf8, 0x3c, 0x81, 0x61, 0x8d, 0xf1, 0xf3, 0xd9, 0x68, 0x0d, 0xdf, 0x76, 0x9a, 0x01, 0xf5, + 0xc8, 0x02, 0x5f, 0x92, 0x91, 0x70, 0x66, 0x86, 0xbf, 0xc9, 0x7c, 0xb4, 0xbe, 0x39, 0xab, 0x70, + 0x21, 0xbf, 0xa6, 0x2c, 0xe4, 0x1c, 0x2e, 0xe4, 0xa9, 0x9e, 0x4b, 0xf6, 0xb5, 0x94, 0x79, 0x89, + 0x0b, 0x31, 0x65, 0xee, 0xbd, 0x0c, 0x93, 0x6b, 0xee, 0xf2, 0xe3, 0x20, 0x44, 0x64, 0x0b, 0x30, + 0x6f, 0xea, 0x40, 0xc6, 0xf1, 0x41, 0xb3, 0x41, 0xbd, 0x8d, 0x3d, 0xbb, 0xad, 0xbd, 0x5d, 0x9b, + 0x09, 0x38, 0xc3, 0x5d, 0xa3, 0x07, 0x3a, 0xee, 0x28, 0xc7, 0x8d, 0xc3, 0x8d, 0xef, 0xcf, 0xca, + 0xce, 0x78, 0xb8, 0xf8, 0x8c, 0xbe, 0x91, 0xbe, 0xa9, 0xbd, 0x91, 0xce, 0x86, 0xda, 0xdd, 0xf0, + 0xc1, 0x7f, 0xf1, 0x04, 0x3b, 0x81, 0x7f, 0x3a, 0x0c, 0x13, 0x2a, 0x3a, 0xeb, 0x87, 0x52, 0xa3, + 0xe1, 0xa9, 0xfd, 0x60, 0x37, 0x1a, 0x9e, 0x89, 0x50, 0xcd, 0x2c, 0x20, 0xd7, 0xd7, 0x2c, 0xe0, + 0x6b, 0x30, 0x56, 0x6e, 0x35, 0xb4, 0xc7, 0x4a, 0x23, 0xe5, 0xf3, 0xae, 0x85, 0x48, 0x7c, 0x2d, + 0x84, 0x4a, 0xcb, 0x7a, 0xab, 0x91, 0x7c, 0xa2, 0x8c, 0x58, 0x6a, 0x16, 0x05, 0xc3, 0x4f, 0x62, + 0x51, 0x70, 0x0b, 0xc6, 0x36, 0x7d, 0xba, 0xd1, 0x6d, 0xb7, 0x69, 0x13, 0xa7, 0x55, 0x9e, 0xcb, + 0xfa, 0x5d, 0x9f, 0x5a, 0x01, 0x42, 0xd5, 0x0f, 0x08, 0x51, 0xd5, 0x01, 0x1e, 0xed, 0x33, 0xc0, + 0x37, 0x21, 0xbf, 0x4e, 0xa9, 0x87, 0x7d, 0x3a, 0x1e, 0x89, 0x74, 0x1d, 0x4a, 0x3d, 0x8b, 0x75, + 0xac, 0x66, 0x69, 0x20, 0x10, 0x35, 0xf3, 0x84, 0x89, 0x01, 0xcd, 0x13, 0xc8, 0x8b, 0x30, 0xd1, + 0xe9, 0x6e, 0x37, 0x9d, 0x3a, 0xf2, 0x15, 0x76, 0x0d, 0xe6, 0x38, 0x87, 0x31, 0xb6, 0x3e, 0xf9, + 0x12, 0x4c, 0xe2, 0x1d, 0x27, 0x9c, 0x72, 0x53, 0xda, 0xab, 0x9e, 0x56, 0xc6, 0x25, 0x9d, 0x3a, + 0x03, 0x59, 0x29, 0xe6, 0x37, 0x3a, 0xa3, 0x85, 0x1a, 0x4c, 0xe9, 0x23, 0xf9, 0x14, 0x1e, 0xf7, + 0x42, 0x53, 0x8b, 0x7c, 0x61, 0xec, 0xee, 0x50, 0x1e, 0x0a, 0xe3, 0xdc, 0xc8, 0xc2, 0x84, 0xf5, + 0xb0, 0x4d, 0x26, 0xb9, 0xd7, 0xdd, 0xa6, 0x5e, 0x9b, 0x06, 0xd4, 0x17, 0x97, 0x00, 0xdf, 0x1c, + 0x2a, 0x75, 0x3a, 0xbe, 0xf1, 0x9f, 0x67, 0x61, 0xb4, 0xb4, 0x55, 0xab, 0xb6, 0x77, 0x5c, 0x7c, + 0xa2, 0x0b, 0x5f, 0x66, 0xd4, 0x27, 0xba, 0xf0, 0x65, 0x46, 0x7d, 0x8f, 0xb9, 0x9e, 0x72, 0x8d, + 0x43, 0x2b, 0x5e, 0xe5, 0x1a, 0xa7, 0x5d, 0x40, 0xa3, 0x47, 0xaa, 0xdc, 0x00, 0x8f, 0x54, 0xa1, + 0x1e, 0x71, 0xe8, 0x64, 0x3d, 0xe2, 0xdb, 0x30, 0x5e, 0x6d, 0x07, 0x74, 0xd7, 0x8b, 0x66, 0x7a, + 0x78, 0xa5, 0x0c, 0xc1, 0xaa, 0x68, 0xaf, 0x60, 0xb3, 0x69, 0xc4, 0x75, 0x97, 0xa1, 0xce, 0x12, + 0xa7, 0x11, 0x57, 0x71, 0xc6, 0xf4, 0x01, 0x12, 0xd1, 0xa8, 0xc4, 0xe6, 0x88, 0x34, 0x04, 0xe0, + 0xc2, 0xe7, 0x54, 0xa4, 0xbc, 0x67, 0x1d, 0xbb, 0x34, 0x93, 0x6e, 0x08, 0x60, 0xfc, 0x48, 0x16, + 0xc6, 0x4b, 0x9d, 0xce, 0x33, 0x6e, 0x8e, 0xf5, 0x39, 0x6d, 0x7b, 0x95, 0x77, 0xa1, 0xb0, 0x5d, + 0x03, 0x59, 0x62, 0xfd, 0x4a, 0x16, 0xa6, 0x63, 0x14, 0xea, 0xd7, 0x67, 0x06, 0x34, 0xc2, 0xca, + 0x0e, 0x68, 0x84, 0x95, 0x1b, 0xcc, 0x08, 0x6b, 0xe8, 0x49, 0xb6, 0xcc, 0x57, 0x21, 0x57, 0xea, + 0x74, 0xe2, 0x8f, 0xb9, 0x9d, 0xce, 0xc3, 0x9b, 0xfc, 0x3e, 0x6b, 0x77, 0x3a, 0x26, 0xc3, 0xd0, + 0xf6, 0xb1, 0x91, 0x01, 0xf7, 0x31, 0xe3, 0x0d, 0x18, 0x43, 0x5e, 0x68, 0xfa, 0x74, 0x09, 0x70, + 0x31, 0x0b, 0xab, 0x27, 0xad, 0x2e, 0xb1, 0xcc, 0xff, 0x45, 0x06, 0x86, 0xf1, 0xf7, 0x33, 0x3a, + 0xc7, 0x16, 0xb5, 0x39, 0x56, 0x50, 0xe6, 0xd8, 0x20, 0xb3, 0xeb, 0x1f, 0xe4, 0x00, 0xca, 0x0f, + 0xcc, 0x1a, 0x57, 0x7b, 0x90, 0xdb, 0x30, 0x6d, 0x37, 0x9b, 0xee, 0x01, 0x6d, 0x58, 0xae, 0xe7, + 0xec, 0x3a, 0x6d, 0xde, 0x73, 0xf2, 0x85, 0x51, 0x2f, 0x52, 0xdf, 0x1d, 0x44, 0xd1, 0x03, 0x5e, + 0xa2, 0xf2, 0x69, 0xd1, 0x60, 0xcf, 0x6d, 0xc8, 0x0b, 0x9c, 0xc6, 0x47, 0x14, 0xa5, 0xf0, 0xb9, + 0xcf, 0x4b, 0x54, 0x3e, 0x7b, 0x78, 0x21, 0x95, 0xf2, 0xa3, 0xc6, 0x47, 0x14, 0xa5, 0xf0, 0xe1, + 0xb7, 0x58, 0x9f, 0xac, 0xc2, 0x0c, 0x42, 0xac, 0xba, 0x47, 0x1b, 0xb4, 0x1d, 0x38, 0x76, 0xd3, + 0x17, 0x57, 0x7e, 0x54, 0x0e, 0x25, 0x0a, 0xd5, 0x2b, 0x0f, 0x16, 0x96, 0xa3, 0x32, 0x72, 0x0d, + 0x46, 0x5b, 0xf6, 0x63, 0xcb, 0xde, 0xe5, 0x6f, 0xed, 0x93, 0xfc, 0x8a, 0x28, 0x40, 0xea, 0x86, + 0xdd, 0xb2, 0x1f, 0x97, 0x76, 0x29, 0x6b, 0x05, 0x7d, 0xdc, 0x71, 0x7d, 0xa5, 0x15, 0x23, 0x51, + 0x2b, 0x62, 0x45, 0x6a, 0x2b, 0x44, 0x91, 0x68, 0x85, 0xf1, 0x21, 0x3c, 0x5f, 0xc5, 0x8f, 0x08, + 0x0e, 0xcb, 0xb4, 0x1d, 0x50, 0x6f, 0x9d, 0x7a, 0x2d, 0x07, 0x1f, 0x1e, 0x6b, 0x34, 0x20, 0x2f, + 0x41, 0xae, 0x64, 0xae, 0x89, 0xe9, 0xcb, 0x37, 0x56, 0xed, 0x19, 0x98, 0x95, 0x86, 0x4a, 0x84, + 0xec, 0x09, 0x4a, 0x84, 0xff, 0x22, 0x03, 0x33, 0xa5, 0x4e, 0x47, 0xaf, 0x4f, 0xb7, 0x50, 0xc8, + 0x0c, 0x6e, 0xa1, 0xe0, 0xc0, 0x94, 0xf6, 0xad, 0x7c, 0x3a, 0x44, 0x22, 0x5d, 0x9f, 0x66, 0xf1, + 0x4e, 0xea, 0x84, 0x20, 0xcb, 0xd7, 0x9f, 0xd7, 0x62, 0x8c, 0x8d, 0x7f, 0x3a, 0x82, 0xeb, 0x5f, + 0xec, 0x94, 0xc2, 0x86, 0x2e, 0x93, 0x62, 0x43, 0xf7, 0x16, 0x28, 0x72, 0x80, 0xaa, 0xff, 0x54, + 0xa4, 0x20, 0xf5, 0xee, 0x1c, 0x21, 0x93, 0xfd, 0xb8, 0x35, 0x5d, 0x0e, 0x5b, 0xf3, 0x52, 0x7c, + 0xf1, 0x3d, 0x15, 0x43, 0xba, 0x15, 0x20, 0xd5, 0x36, 0x3e, 0xf9, 0xd1, 0xda, 0xbe, 0xd3, 0x79, + 0x48, 0x3d, 0x67, 0xe7, 0x50, 0x4c, 0x5e, 0xec, 0x7c, 0x47, 0x94, 0x5a, 0xfe, 0xbe, 0xd3, 0x61, + 0x97, 0x6b, 0x67, 0xe7, 0xd0, 0x4c, 0xa1, 0x21, 0xef, 0xc3, 0xa8, 0x49, 0x0f, 0x3c, 0x27, 0x90, + 0x36, 0x22, 0x53, 0xa1, 0x2a, 0x08, 0xa1, 0x7c, 0x1e, 0x7b, 0xfc, 0x87, 0xba, 0xa3, 0x89, 0x72, + 0xb2, 0xc8, 0x8f, 0x72, 0x6e, 0x0b, 0x32, 0x19, 0xb5, 0xb6, 0xb4, 0x55, 0xeb, 0x75, 0x92, 0x93, + 0xab, 0x30, 0x8c, 0xf2, 0x80, 0x90, 0x72, 0xd1, 0xb7, 0x02, 0xa5, 0x42, 0x55, 0x58, 0x41, 0x0c, + 0x72, 0x11, 0x20, 0x7c, 0x53, 0xf3, 0xe7, 0xf3, 0x28, 0x7f, 0x2a, 0x90, 0xb8, 0x30, 0x33, 0x76, + 0x2a, 0x61, 0x66, 0x15, 0x0a, 0x26, 0xfd, 0x46, 0xd7, 0xf1, 0x68, 0xa3, 0xd4, 0xc1, 0x87, 0x1b, + 0x7f, 0x1e, 0x70, 0x15, 0x5e, 0x3a, 0x3e, 0x2a, 0xbe, 0xe0, 0x89, 0x32, 0xcb, 0xee, 0xf0, 0xf7, + 0x1e, 0x6d, 0x0b, 0x88, 0x53, 0x92, 0xb7, 0x60, 0x88, 0x6d, 0x9b, 0xc2, 0xee, 0x4e, 0x2a, 0xc0, + 0xa3, 0x9d, 0x94, 0xaf, 0xac, 0xba, 0xab, 0xad, 0x67, 0x24, 0x21, 0x16, 0x4c, 0xe9, 0xd3, 0x5d, + 0x98, 0x60, 0xcc, 0x47, 0xfd, 0xa9, 0x97, 0x0b, 0xad, 0xb8, 0x80, 0x59, 0x75, 0x04, 0xaa, 0x2b, + 0x40, 0x47, 0xff, 0xf8, 0x8c, 0xe5, 0x7e, 0x25, 0x0b, 0x2f, 0x85, 0xa2, 0xc8, 0x03, 0xaf, 0x56, + 0xba, 0xbf, 0x5a, 0x6d, 0xac, 0x8b, 0x9b, 0xfb, 0xba, 0xe7, 0x3e, 0x72, 0x1a, 0xd4, 0x7b, 0x78, + 0xe3, 0x84, 0x83, 0x74, 0x95, 0xaf, 0x4f, 0xae, 0xf6, 0xcf, 0x6a, 0x66, 0x45, 0x8a, 0xc4, 0x27, + 0xf6, 0x95, 0x4e, 0x27, 0xf1, 0x0a, 0xb0, 0xf2, 0x9c, 0x19, 0x31, 0x20, 0x3f, 0x90, 0x81, 0xb3, + 0xe9, 0x1f, 0x22, 0xb4, 0x39, 0x45, 0x79, 0x6b, 0xec, 0xf1, 0xb5, 0x4b, 0xaf, 0x1e, 0x1f, 0x15, + 0x5f, 0xf2, 0xed, 0x56, 0xd3, 0x72, 0x1a, 0xbc, 0x36, 0xa7, 0x4e, 0xad, 0x8e, 0x40, 0xd0, 0xea, + 0xed, 0x51, 0xd3, 0xe7, 0x41, 0x9e, 0xa7, 0xf3, 0x99, 0x25, 0x80, 0xbc, 0xd4, 0xac, 0x1a, 0xbf, + 0x9e, 0x01, 0x65, 0xed, 0xe4, 0x4d, 0xda, 0x70, 0x3c, 0x5a, 0x0f, 0xc4, 0x99, 0x2a, 0x9c, 0xa2, + 0x38, 0x2c, 0x66, 0x45, 0x86, 0x30, 0xf2, 0x1e, 0x8c, 0x8a, 0xbd, 0x5f, 0xec, 0x97, 0x72, 0xcd, + 0x09, 0x9d, 0x2d, 0xf7, 0x9e, 0x4b, 0x9c, 0x1b, 0x92, 0x88, 0x6d, 0xd7, 0x77, 0xb7, 0x36, 0xca, + 0x4d, 0xdb, 0x69, 0xf9, 0x42, 0x06, 0xc1, 0x6e, 0xfd, 0xf0, 0x20, 0xb0, 0xea, 0x08, 0x55, 0xb7, + 0xeb, 0x10, 0xd5, 0xb8, 0x23, 0x55, 0xc6, 0x27, 0x98, 0x42, 0x16, 0x61, 0xf8, 0x61, 0xa4, 0x3a, + 0x5a, 0x1a, 0x3b, 0x3e, 0x2a, 0xf2, 0xe9, 0x62, 0x72, 0xb8, 0xf1, 0x63, 0x19, 0x98, 0xd2, 0xe7, + 0x13, 0xb9, 0x06, 0x23, 0xc2, 0x21, 0x29, 0x83, 0x2a, 0x32, 0xd6, 0x0b, 0x23, 0xdc, 0x15, 0x49, + 0x73, 0x40, 0x12, 0x58, 0x4c, 0x8a, 0x12, 0x1c, 0x84, 0x08, 0x81, 0x52, 0x54, 0x9d, 0x83, 0x4c, + 0x59, 0x46, 0x0c, 0x76, 0x85, 0xf2, 0xbb, 0xcd, 0x40, 0x7d, 0x39, 0xf1, 0x10, 0x62, 0x8a, 0x12, + 0xa3, 0x0c, 0x23, 0x7c, 0xb3, 0x8a, 0x99, 0x60, 0x65, 0x4e, 0x61, 0x82, 0x65, 0x1c, 0x65, 0x00, + 0x6a, 0xb5, 0x95, 0x7b, 0xf4, 0x70, 0xdd, 0x76, 0xf0, 0x44, 0xe4, 0x07, 0xc3, 0x3d, 0xb1, 0xb8, + 0x26, 0xc4, 0x53, 0x1f, 0x3f, 0x44, 0xf6, 0xe9, 0xa1, 0xf6, 0xd4, 0x27, 0x51, 0xf1, 0xf4, 0xf1, + 0x9c, 0x47, 0x76, 0x40, 0x19, 0x61, 0x16, 0x09, 0xf9, 0xe9, 0xc3, 0xa1, 0x31, 0x4a, 0x05, 0x99, + 0x7c, 0x15, 0xa6, 0xa2, 0x5f, 0xe1, 0x83, 0xe5, 0x54, 0xb8, 0x80, 0xf5, 0xc2, 0xa5, 0x8b, 0xc7, + 0x47, 0xc5, 0x05, 0x85, 0x6b, 0xfc, 0x29, 0x33, 0xc6, 0xcc, 0xf8, 0xa5, 0x0c, 0x3e, 0xd3, 0xcb, + 0x06, 0x5e, 0x86, 0xa1, 0xd0, 0xb0, 0x74, 0x42, 0x6c, 0x6b, 0xfa, 0xa3, 0x0c, 0x96, 0x33, 0xe9, + 0x23, 0x6a, 0x09, 0x1e, 0x06, 0x7a, 0x0b, 0x58, 0x29, 0xb9, 0x03, 0xa3, 0x03, 0x7d, 0x33, 0x2e, + 0x8d, 0x94, 0x6f, 0x95, 0xd4, 0x38, 0x0a, 0x77, 0xb7, 0x36, 0x3e, 0xb9, 0xa3, 0xf0, 0x93, 0x59, + 0x98, 0x66, 0xfd, 0x5a, 0xea, 0x06, 0x7b, 0xae, 0xe7, 0x04, 0x87, 0xcf, 0xac, 0x8e, 0xf1, 0x1d, + 0xed, 0x82, 0xb2, 0x20, 0x4f, 0x19, 0xb5, 0x6d, 0x03, 0xa9, 0x1a, 0xff, 0x87, 0x61, 0x98, 0x4d, + 0xa1, 0x22, 0xaf, 0x6b, 0xcf, 0x00, 0xf3, 0xd2, 0xe1, 0xf8, 0xbb, 0x47, 0xc5, 0x09, 0x89, 0xbe, + 0x11, 0x39, 0x20, 0x2f, 0xea, 0x36, 0x2f, 0xbc, 0xa7, 0xf0, 0x55, 0x40, 0xb5, 0x79, 0xd1, 0x2d, + 0x5d, 0xae, 0xc2, 0xb0, 0xe9, 0x36, 0xa9, 0xb4, 0xf3, 0x42, 0x11, 0xc6, 0x63, 0x00, 0xed, 0x5d, + 0x9b, 0x01, 0xc8, 0x0a, 0x8c, 0xb2, 0x3f, 0xee, 0xdb, 0x1d, 0xf1, 0x62, 0x43, 0xc2, 0x2b, 0x32, + 0x42, 0x3b, 0x4e, 0x7b, 0x57, 0xbd, 0x25, 0x37, 0xa9, 0xd5, 0xb2, 0x3b, 0x9a, 0xac, 0xc5, 0x11, + 0xb5, 0xdb, 0x76, 0xbe, 0xf7, 0x6d, 0x3b, 0x73, 0xe2, 0x6d, 0x7b, 0x07, 0xa0, 0xe6, 0xec, 0xb6, + 0x9d, 0xf6, 0x6e, 0xa9, 0xb9, 0x2b, 0xdc, 0xb6, 0xaf, 0xf6, 0x1e, 0x85, 0x6b, 0x11, 0x32, 0x4e, + 0xdc, 0xe7, 0xf1, 0x59, 0x95, 0xc3, 0x2c, 0xbb, 0xb9, 0xab, 0xb9, 0x97, 0x28, 0x9c, 0xc9, 0x1a, + 0x40, 0xa9, 0x1e, 0x38, 0x8f, 0xd8, 0x14, 0xf6, 0x85, 0x60, 0x24, 0x3f, 0xb9, 0x5c, 0xba, 0x47, + 0x0f, 0x51, 0x98, 0x97, 0x0f, 0x54, 0x36, 0xa2, 0xb2, 0x95, 0xa0, 0xf9, 0x0e, 0x44, 0x1c, 0x48, + 0x07, 0xce, 0x94, 0x1a, 0x0d, 0x87, 0xb5, 0xc1, 0x6e, 0xe2, 0x8b, 0x2b, 0x6d, 0x20, 0xeb, 0x89, + 0x74, 0xd6, 0x57, 0x05, 0xeb, 0x17, 0xed, 0x90, 0xca, 0x0a, 0x38, 0x59, 0xbc, 0x9a, 0x74, 0xc6, + 0x46, 0x0d, 0xa6, 0xf4, 0xc6, 0xeb, 0xee, 0xe6, 0x13, 0x90, 0x37, 0x6b, 0x25, 0xab, 0xb6, 0x52, + 0xba, 0x51, 0xc8, 0x90, 0x02, 0x4c, 0x88, 0x5f, 0x8b, 0xd6, 0xe2, 0x9b, 0xb7, 0x0a, 0x59, 0x0d, + 0xf2, 0xe6, 0x8d, 0xc5, 0x42, 0x6e, 0x21, 0x3b, 0x9f, 0x89, 0x79, 0x7a, 0x8d, 0x16, 0xf2, 0x5c, + 0x15, 0x69, 0xfc, 0x6a, 0x06, 0xf2, 0xf2, 0xdb, 0xc9, 0x2d, 0xc8, 0xd5, 0x6a, 0x2b, 0x31, 0xdf, + 0xac, 0xe8, 0x94, 0xe1, 0xfb, 0xa9, 0xef, 0xab, 0x06, 0xb8, 0x8c, 0x80, 0xd1, 0x6d, 0xac, 0xd6, + 0x84, 0x70, 0x20, 0xe9, 0xa2, 0xcd, 0x9b, 0xd3, 0xa5, 0x38, 0xac, 0xdc, 0x82, 0xdc, 0xdd, 0xad, + 0x0d, 0x71, 0x6d, 0x91, 0x74, 0xd1, 0x7e, 0xca, 0xe9, 0x3e, 0x3c, 0x50, 0x77, 0x79, 0x46, 0x60, + 0x98, 0x30, 0xae, 0x4c, 0x64, 0x7e, 0xe8, 0xb6, 0xdc, 0xd0, 0xc7, 0x5a, 0x1c, 0xba, 0x0c, 0x62, + 0x8a, 0x12, 0x26, 0x23, 0xac, 0xba, 0x75, 0xbb, 0x29, 0x4e, 0x6f, 0x94, 0x11, 0x9a, 0x0c, 0x60, + 0x72, 0xb8, 0xf1, 0xdb, 0x19, 0x28, 0xa0, 0x24, 0x85, 0x06, 0xb4, 0xee, 0x3e, 0x6d, 0x3f, 0xbc, + 0x41, 0xde, 0x90, 0x4b, 0x2e, 0x13, 0xaa, 0x7d, 0x86, 0x71, 0xc9, 0xc5, 0xde, 0x8d, 0xc4, 0xb2, + 0x53, 0xdc, 0xd8, 0xb3, 0x83, 0xbb, 0xbf, 0x9e, 0xe0, 0xc6, 0x5e, 0x84, 0x61, 0xfc, 0x1c, 0xb1, + 0x39, 0xe2, 0x97, 0x07, 0x0c, 0x60, 0x72, 0xb8, 0xb2, 0x37, 0xfd, 0x74, 0x36, 0xd1, 0x86, 0xc5, + 0x4f, 0x94, 0x0b, 0xa9, 0xde, 0xb8, 0x81, 0xf6, 0xeb, 0x0f, 0x60, 0x2e, 0xde, 0x25, 0xa8, 0x92, + 0x2b, 0xc1, 0xb4, 0x0e, 0x97, 0xda, 0xb9, 0x73, 0xa9, 0x75, 0x3d, 0x5c, 0x34, 0xe3, 0xf8, 0xc6, + 0xff, 0x99, 0x81, 0x31, 0xfc, 0xd3, 0xec, 0x36, 0xd1, 0x90, 0xa9, 0xb4, 0x55, 0x13, 0xca, 0x06, + 0x55, 0x98, 0xb3, 0x0f, 0x7c, 0x4b, 0x68, 0x26, 0xb4, 0x3d, 0x26, 0x44, 0x16, 0xa4, 0x5c, 0xaf, + 0x2e, 0x55, 0x54, 0x21, 0x29, 0x57, 0xc0, 0xfb, 0x31, 0x52, 0x81, 0x8c, 0xe6, 0x8f, 0x5b, 0x35, + 0x36, 0xfd, 0x54, 0xcb, 0x02, 0xa4, 0x73, 0x9b, 0xba, 0xf9, 0x23, 0x47, 0x43, 0xc3, 0x82, 0xad, + 0x5a, 0xc9, 0x5c, 0xd3, 0x0c, 0x0b, 0xd8, 0x37, 0x6a, 0x6a, 0x1a, 0x81, 0x64, 0xfc, 0xfc, 0x78, + 0xbc, 0x03, 0xc5, 0x81, 0x77, 0xca, 0xb5, 0xf1, 0x36, 0x0c, 0x97, 0x9a, 0x4d, 0xf7, 0x40, 0xec, + 0x12, 0x52, 0x43, 0x18, 0xf6, 0x1f, 0x3f, 0xcf, 0x50, 0xc9, 0xa5, 0xb9, 0xc5, 0x31, 0x00, 0x29, + 0xc3, 0x58, 0x69, 0xab, 0x56, 0xad, 0x56, 0x36, 0x36, 0xb8, 0x0b, 0x50, 0x6e, 0xe9, 0x15, 0xd9, + 0x3f, 0x8e, 0xd3, 0xb0, 0xe2, 0x6f, 0xdb, 0x91, 0xfc, 0x1e, 0xd1, 0x91, 0x77, 0x01, 0xee, 0xba, + 0x4e, 0x9b, 0x2b, 0xf5, 0x44, 0xe3, 0xd9, 0x9d, 0x76, 0xfc, 0x43, 0xd7, 0x69, 0x0b, 0x2d, 0x20, + 0xfb, 0xf6, 0x08, 0xc9, 0x54, 0xfe, 0x66, 0x3d, 0xbd, 0xe4, 0x72, 0xe3, 0xa4, 0xe1, 0xa8, 0xa7, + 0xb7, 0xdd, 0x84, 0x5d, 0x92, 0x44, 0x23, 0x2d, 0x98, 0xae, 0x75, 0x77, 0x77, 0x29, 0xdb, 0xd9, + 0x85, 0x86, 0x66, 0x44, 0xdc, 0x71, 0xc3, 0xc0, 0x2b, 0xfc, 0x3e, 0xc2, 0x6e, 0x29, 0xfe, 0xd2, + 0xeb, 0x6c, 0x22, 0x7f, 0xe7, 0xa8, 0x28, 0xde, 0xcc, 0x99, 0xa8, 0xe6, 0x4b, 0xfa, 0xa4, 0x7e, + 0x26, 0xce, 0x9b, 0x3c, 0x80, 0x91, 0x3b, 0x4e, 0xb0, 0xd2, 0xdd, 0x16, 0x2e, 0x2d, 0x2f, 0xf6, + 0x59, 0x34, 0x1c, 0x91, 0x3f, 0xda, 0xec, 0x3a, 0xc1, 0x5e, 0x57, 0x75, 0x2a, 0x10, 0x6c, 0xc8, + 0x16, 0xe4, 0xcb, 0x8e, 0x57, 0x6f, 0xd2, 0x72, 0x55, 0x9c, 0xfd, 0x2f, 0xf5, 0x61, 0x29, 0x51, + 0x79, 0xbf, 0xd4, 0xf1, 0x57, 0xdd, 0x51, 0x65, 0x01, 0x89, 0x41, 0xfe, 0xdd, 0x0c, 0x3c, 0x1f, + 0x7e, 0x7d, 0x69, 0x97, 0xb6, 0x83, 0xfb, 0x76, 0x50, 0xdf, 0xa3, 0x9e, 0xe8, 0xa5, 0xb1, 0x7e, + 0xbd, 0xf4, 0xf9, 0x44, 0x2f, 0x5d, 0x89, 0x7a, 0xc9, 0x66, 0xcc, 0xac, 0x16, 0xe7, 0x96, 0xec, + 0xb3, 0x7e, 0xb5, 0x12, 0x0b, 0x20, 0x7a, 0x85, 0x13, 0x2e, 0x91, 0xaf, 0xf4, 0x69, 0x70, 0x84, + 0x2c, 0x5c, 0x19, 0xc2, 0xdf, 0x9a, 0x2d, 0x5e, 0x08, 0x25, 0xf7, 0xa4, 0xff, 0x18, 0x97, 0x4a, + 0x2e, 0xf5, 0xe1, 0xcd, 0x7d, 0xca, 0x66, 0xfb, 0x78, 0x8a, 0xf2, 0xd1, 0x5e, 0xb5, 0xb7, 0x85, + 0x20, 0x72, 0xc2, 0x68, 0xaf, 0xda, 0xd1, 0x68, 0x37, 0xed, 0xf8, 0x68, 0xaf, 0xda, 0xdb, 0xa4, + 0xcc, 0x9d, 0x5e, 0xb9, 0x87, 0xe4, 0xc5, 0x7e, 0xdc, 0xca, 0xeb, 0xfc, 0x64, 0x4e, 0x71, 0x7e, + 0xfd, 0x32, 0x8c, 0xd5, 0x3a, 0x76, 0x9d, 0x36, 0x9d, 0x9d, 0x40, 0x3c, 0xcb, 0xbe, 0xdc, 0x87, + 0x55, 0x88, 0x2b, 0x9e, 0xf4, 0xe4, 0x4f, 0xf5, 0x9a, 0x14, 0xe2, 0xb0, 0x2f, 0xdc, 0x58, 0xbf, + 0x3f, 0x3f, 0x7d, 0xe2, 0x17, 0x6e, 0xac, 0xdf, 0x17, 0x32, 0x47, 0xa7, 0xa5, 0xc9, 0x1c, 0xeb, + 0xf7, 0x49, 0x07, 0xa6, 0x36, 0xa8, 0xe7, 0xd9, 0x3b, 0xae, 0xd7, 0xe2, 0x1a, 0x41, 0xee, 0x75, + 0x73, 0xb5, 0x1f, 0x3f, 0x8d, 0x80, 0x2b, 0xc2, 0x02, 0x09, 0xb3, 0xe2, 0x6a, 0xc4, 0x18, 0x7f, + 0xd6, 0x27, 0x4b, 0x4e, 0xb0, 0xdd, 0xad, 0xef, 0xd3, 0x60, 0x7e, 0xe6, 0xc4, 0x3e, 0x09, 0x71, + 0x79, 0x9f, 0x6c, 0xcb, 0x9f, 0x6a, 0x9f, 0x84, 0x38, 0xc6, 0x6f, 0xe4, 0xe0, 0x5c, 0x8f, 0x2e, + 0x20, 0x6b, 0x72, 0xcb, 0xcd, 0x68, 0x7a, 0xe1, 0x1e, 0xe8, 0xd7, 0x4e, 0xdc, 0x85, 0x57, 0xa1, + 0xb0, 0x7c, 0x0f, 0x65, 0x75, 0xfe, 0xac, 0x51, 0x2e, 0xc9, 0xc3, 0x0a, 0x75, 0x97, 0x74, 0x1f, + 0xad, 0x14, 0xe5, 0x73, 0x48, 0x5d, 0x73, 0xc7, 0x4d, 0x50, 0x2e, 0x7c, 0x7f, 0x16, 0x86, 0xf0, + 0xe0, 0x8c, 0x05, 0x21, 0xca, 0x9c, 0x2a, 0x08, 0xd1, 0x17, 0x60, 0x62, 0xf9, 0x1e, 0xbf, 0x49, + 0xaf, 0xd8, 0xfe, 0x9e, 0xd8, 0xd6, 0xf1, 0xd1, 0x9f, 0xee, 0x5b, 0xe2, 0xe2, 0xbd, 0x67, 0x6b, + 0x32, 0xab, 0x46, 0x41, 0x36, 0x61, 0x96, 0x7f, 0x9b, 0xb3, 0xe3, 0xd4, 0x79, 0x2c, 0x13, 0xc7, + 0x6e, 0x8a, 0x3d, 0xfe, 0xa5, 0xe3, 0xa3, 0x62, 0x91, 0xee, 0xa3, 0xfd, 0xa5, 0x28, 0xb7, 0x7c, + 0x44, 0x50, 0x0d, 0x31, 0x53, 0xe8, 0xd5, 0x00, 0x0b, 0xe6, 0x18, 0x56, 0xc8, 0x6a, 0x63, 0x75, + 0x33, 0x5c, 0x8e, 0x64, 0xfc, 0xd9, 0x30, 0x2c, 0xf4, 0xde, 0x9e, 0xc9, 0x17, 0xf5, 0x01, 0xbc, + 0x7c, 0xe2, 0x86, 0x7e, 0xf2, 0x18, 0x7e, 0x09, 0xe6, 0x96, 0xdb, 0x01, 0xf5, 0x3a, 0x9e, 0x23, + 0x43, 0x6a, 0xac, 0xb8, 0xbe, 0xb4, 0x77, 0x45, 0xc3, 0x53, 0x1a, 0x96, 0x0b, 0xa5, 0x27, 0x5a, + 0xdf, 0x2a, 0xac, 0x52, 0x39, 0x90, 0x65, 0x98, 0x52, 0xe0, 0xcd, 0xee, 0xae, 0x10, 0x48, 0xf8, + 0xeb, 0x92, 0xc2, 0xb3, 0xd9, 0x55, 0x8d, 0x01, 0x63, 0x44, 0x68, 0x53, 0xcb, 0xae, 0x8c, 0xf5, + 0xbb, 0x5b, 0xf7, 0x6a, 0x62, 0x38, 0xb9, 0x4d, 0x2d, 0x42, 0xad, 0x0f, 0x0f, 0xf6, 0xb5, 0xfd, + 0x35, 0x42, 0x5e, 0xf8, 0xa5, 0x9c, 0x98, 0x51, 0x2f, 0x41, 0xae, 0xd6, 0xdd, 0x56, 0x9f, 0xa0, + 0x7c, 0xed, 0x80, 0x63, 0xa5, 0xe4, 0x73, 0x00, 0x26, 0xed, 0xb8, 0xbe, 0x13, 0xb8, 0xde, 0xa1, + 0xea, 0xd4, 0xe5, 0x85, 0x50, 0xdd, 0xee, 0x5c, 0x42, 0xc9, 0x0a, 0x4c, 0x47, 0xbf, 0x1e, 0x1c, + 0xb4, 0x85, 0x92, 0x77, 0x8c, 0x6b, 0x57, 0x22, 0x72, 0xcb, 0x65, 0x65, 0xea, 0x91, 0x1d, 0x23, + 0x23, 0x8b, 0x90, 0xdf, 0x72, 0xbd, 0xfd, 0x1d, 0x36, 0xc6, 0x43, 0x91, 0x50, 0x71, 0x20, 0x60, + 0xea, 0xe1, 0x29, 0xf1, 0xd8, 0x72, 0x59, 0x6e, 0x3f, 0x72, 0x3c, 0xb7, 0xdd, 0xa2, 0xed, 0x40, + 0xb5, 0xa5, 0xa0, 0x11, 0x58, 0x73, 0xa7, 0x8d, 0xc0, 0xe4, 0x2a, 0x0c, 0x97, 0xea, 0x81, 0xeb, + 0x09, 0x43, 0x0a, 0x3e, 0x53, 0x18, 0x40, 0x9b, 0x29, 0x0c, 0xc0, 0x3a, 0xd1, 0xa4, 0x3b, 0xe2, + 0xbd, 0x04, 0x3b, 0xd1, 0xa3, 0x3b, 0x9a, 0xaf, 0x30, 0xdd, 0x61, 0x42, 0x91, 0x49, 0x77, 0x50, + 0xf1, 0xa1, 0x85, 0xd8, 0xda, 0x49, 0xa8, 0xcc, 0x04, 0x9a, 0xf1, 0x7b, 0x63, 0x3d, 0xa7, 0x3c, + 0x3b, 0x85, 0x4e, 0x37, 0xe5, 0x57, 0xed, 0x01, 0xa6, 0xfc, 0xeb, 0xa1, 0x35, 0xbb, 0xea, 0x20, + 0x8f, 0x10, 0xf5, 0x18, 0xe4, 0x38, 0x0b, 0xbf, 0x9c, 0x3f, 0xcd, 0x24, 0x12, 0x9d, 0x94, 0x1d, + 0xb4, 0x93, 0x72, 0x03, 0x75, 0x12, 0x59, 0x82, 0xc9, 0x30, 0x48, 0xdb, 0xba, 0x1d, 0x68, 0xdb, + 0x5a, 0x18, 0x59, 0xcf, 0xea, 0xd8, 0x81, 0xba, 0xad, 0xe9, 0x24, 0xe4, 0x1d, 0x18, 0x17, 0x2e, + 0x1d, 0xc8, 0x61, 0x38, 0x32, 0xaa, 0x95, 0xfe, 0x1f, 0x31, 0x7a, 0x15, 0x9d, 0xad, 0xe6, 0x75, + 0xa7, 0x43, 0x9b, 0x4e, 0x9b, 0xd6, 0xf0, 0x15, 0x41, 0xcc, 0x18, 0xfe, 0x0c, 0x2a, 0x4a, 0x2c, + 0xfe, 0xc0, 0xa0, 0xe9, 0x0f, 0x35, 0xa2, 0xf8, 0x64, 0x1d, 0x3d, 0xd5, 0x64, 0xe5, 0x36, 0x6d, + 0xde, 0xaa, 0xbb, 0xeb, 0x48, 0x2b, 0x5e, 0x69, 0xd3, 0xe6, 0x59, 0x4d, 0x06, 0x8d, 0xd9, 0xb4, + 0x71, 0x54, 0x76, 0xc3, 0x61, 0x3f, 0xaa, 0x15, 0xf1, 0x36, 0x87, 0x37, 0x1c, 0x24, 0xd2, 0x4d, + 0xa7, 0x39, 0x92, 0xac, 0x66, 0xb9, 0x65, 0x3b, 0x4d, 0xe1, 0x07, 0x1d, 0x55, 0x43, 0x19, 0x34, + 0x5e, 0x0d, 0xa2, 0x92, 0x3a, 0x4c, 0x98, 0x74, 0x67, 0xdd, 0x73, 0x03, 0x5a, 0x0f, 0x68, 0x43, + 0x48, 0x75, 0xf2, 0x62, 0xb3, 0xe4, 0xba, 0x5c, 0x62, 0x5d, 0x7a, 0xe3, 0xf7, 0x8e, 0x8a, 0x99, + 0xef, 0x1c, 0x15, 0x81, 0x81, 0xb8, 0x5d, 0xfe, 0xf1, 0x51, 0xf1, 0x1c, 0x1b, 0xff, 0x8e, 0x24, + 0x56, 0x4f, 0x27, 0x95, 0x29, 0xf9, 0x16, 0xdb, 0xaf, 0xc3, 0x2e, 0x89, 0x2a, 0x9b, 0xe8, 0x51, + 0xd9, 0x9b, 0xa9, 0x95, 0x15, 0x95, 0xde, 0x4e, 0xad, 0x34, 0xb5, 0x12, 0xf2, 0x2e, 0x8c, 0x97, + 0xab, 0x65, 0xb7, 0xbd, 0xe3, 0xec, 0xd6, 0x56, 0x4a, 0x28, 0x1a, 0x0a, 0x9f, 0x8c, 0xba, 0x63, + 0xd5, 0x11, 0x6e, 0xf9, 0x7b, 0xb6, 0xe6, 0x9a, 0x17, 0xe1, 0x93, 0x3b, 0x30, 0x25, 0x7f, 0x9a, + 0x74, 0x67, 0xd3, 0xac, 0xa2, 0x44, 0x28, 0x1d, 0x61, 0x42, 0x0e, 0xac, 0x23, 0xba, 0x9e, 0x7a, + 0x53, 0x88, 0x91, 0xb1, 0xc9, 0x58, 0xa1, 0x9d, 0xa6, 0x7b, 0xc8, 0x3e, 0x6f, 0xc3, 0xa1, 0x1e, + 0xca, 0x80, 0x62, 0x32, 0x36, 0xc2, 0x12, 0x2b, 0x70, 0xf4, 0x17, 0x49, 0x9d, 0x88, 0xac, 0xc1, + 0x8c, 0x98, 0xe2, 0x0f, 0x1d, 0xdf, 0xd9, 0x76, 0x9a, 0x4e, 0x70, 0x88, 0xd2, 0x9f, 0x10, 0x60, + 0xe4, 0xba, 0x78, 0x14, 0x96, 0x2a, 0xcc, 0x92, 0xa4, 0xc6, 0xaf, 0x66, 0xe1, 0x85, 0x7e, 0x37, + 0x21, 0x52, 0xd3, 0x37, 0xb3, 0x2b, 0x03, 0xdc, 0x9e, 0x4e, 0xde, 0xce, 0x96, 0x61, 0xea, 0x81, + 0xb7, 0x6b, 0xb7, 0x9d, 0x6f, 0xe2, 0x0d, 0x37, 0x34, 0xed, 0xc3, 0xce, 0x70, 0x95, 0x12, 0x7d, + 0xb6, 0xc7, 0x88, 0x16, 0x1e, 0x89, 0x6d, 0xee, 0xa3, 0x3a, 0x89, 0xdd, 0x82, 0xb1, 0xb2, 0xdb, + 0x0e, 0xe8, 0xe3, 0x20, 0xe6, 0x12, 0xcd, 0x81, 0x71, 0x07, 0x39, 0x89, 0x6a, 0xfc, 0xab, 0x2c, + 0x5c, 0xe8, 0x7b, 0x15, 0x20, 0x1b, 0x7a, 0xaf, 0x5d, 0x1d, 0xe4, 0xfe, 0x70, 0x72, 0xb7, 0x2d, + 0x26, 0xac, 0xd0, 0x4e, 0xf4, 0xc1, 0x58, 0xf8, 0x9f, 0x32, 0xa2, 0x93, 0x3e, 0x0d, 0xa3, 0x58, + 0x55, 0xd8, 0x45, 0x5c, 0x4b, 0x86, 0xbb, 0xb0, 0xa3, 0x6b, 0xc9, 0x38, 0x1a, 0xb9, 0x09, 0xf9, + 0xb2, 0xdd, 0x6c, 0x2a, 0x0e, 0xe3, 0x28, 0xcd, 0xd7, 0x11, 0x16, 0x33, 0x5a, 0x94, 0x88, 0x4c, + 0xf6, 0xe1, 0x7f, 0x2b, 0x67, 0x05, 0x6e, 0x96, 0x82, 0x2c, 0x76, 0x5c, 0x28, 0xc8, 0x18, 0x66, + 0xb2, 0xee, 0x86, 0x2e, 0xa9, 0x3c, 0xcc, 0x24, 0x03, 0x68, 0x61, 0x26, 0x19, 0xc0, 0xf8, 0xb5, + 0x1c, 0x5c, 0xec, 0x7f, 0x9f, 0x25, 0x9b, 0xfa, 0x10, 0xbc, 0x36, 0xd0, 0x2d, 0xf8, 0xe4, 0x31, + 0x90, 0x41, 0x5b, 0x79, 0x87, 0x5c, 0x49, 0xba, 0x4a, 0x7c, 0xf7, 0xa8, 0xa8, 0x58, 0xc2, 0xde, + 0x75, 0x9d, 0xb6, 0xf2, 0x66, 0xf2, 0x0d, 0x4d, 0x32, 0xe4, 0xcf, 0xea, 0xb7, 0x06, 0xfb, 0xb2, + 0x88, 0x8e, 0xef, 0x2b, 0x83, 0x4a, 0x94, 0x9f, 0x87, 0x42, 0x9c, 0x94, 0x5c, 0x86, 0x21, 0xfc, + 0x00, 0xc5, 0xdf, 0x23, 0xc6, 0x01, 0xcb, 0x17, 0xee, 0x8b, 0xb9, 0x83, 0x3e, 0xf4, 0xf8, 0x50, + 0xaf, 0xeb, 0x06, 0x85, 0x0f, 0x3d, 0x7f, 0xe7, 0x4f, 0xea, 0x07, 0x63, 0x44, 0xc6, 0x5f, 0x64, + 0xe0, 0x7c, 0x4f, 0x4d, 0x01, 0x59, 0xd7, 0x07, 0xec, 0x95, 0x93, 0x54, 0x0b, 0x27, 0x8e, 0xd5, + 0xc2, 0x8f, 0xcb, 0xb9, 0xff, 0x1e, 0x4c, 0xd4, 0xba, 0xdb, 0xf1, 0xfb, 0x19, 0x8f, 0x70, 0xa1, + 0xc0, 0xd5, 0x13, 0x4c, 0xc5, 0x67, 0xed, 0x97, 0x96, 0x08, 0xc2, 0xa4, 0x46, 0xb1, 0xc1, 0x0b, + 0x9d, 0x3c, 0x93, 0x31, 0x04, 0x74, 0x22, 0xe3, 0x57, 0xb2, 0xe9, 0x17, 0xdd, 0x3b, 0xe5, 0xf5, + 0xd3, 0x5c, 0x74, 0xef, 0x94, 0xd7, 0x4f, 0x6e, 0xfb, 0x3f, 0x96, 0x6d, 0xc7, 0x87, 0x59, 0xb1, + 0xe3, 0x49, 0x45, 0xa7, 0x78, 0x98, 0x95, 0xbb, 0xa3, 0xaf, 0x3f, 0xcc, 0x4a, 0x64, 0xf2, 0x26, + 0x8c, 0xad, 0xba, 0xdc, 0xbd, 0x5f, 0xb6, 0x98, 0x7b, 0x41, 0x4a, 0xa0, 0xba, 0x3d, 0x86, 0x98, + 0xec, 0x6e, 0xa1, 0x0f, 0xbc, 0x34, 0x35, 0xc4, 0xbb, 0x45, 0x6c, 0xba, 0xe8, 0xea, 0x40, 0x9d, + 0xcc, 0xf8, 0xcf, 0x86, 0xc1, 0x38, 0x59, 0x99, 0x41, 0x3e, 0xd0, 0xfb, 0xee, 0xda, 0xc0, 0x6a, + 0x90, 0x81, 0xb6, 0xdc, 0x52, 0xb7, 0xe1, 0xd0, 0x76, 0x5d, 0xf7, 0xcd, 0x17, 0x30, 0x75, 0x0b, + 0x94, 0x78, 0x1f, 0xc5, 0x55, 0x6e, 0xe1, 0xbf, 0xcb, 0x45, 0x4b, 0x2d, 0x76, 0x34, 0x66, 0x3e, + 0xc2, 0xd1, 0x48, 0xee, 0x41, 0x41, 0x85, 0x28, 0x2f, 0xb4, 0x28, 0xb9, 0x68, 0x8c, 0x62, 0x1f, + 0x95, 0x20, 0xd4, 0xcf, 0xd7, 0xdc, 0xe0, 0xe7, 0x6b, 0x24, 0xbe, 0x63, 0xfd, 0x43, 0x49, 0xf1, + 0x3d, 0xee, 0x0e, 0xab, 0xa0, 0x4b, 0x5f, 0x7e, 0x5f, 0x1c, 0x5a, 0xc3, 0xba, 0x2f, 0x7f, 0xca, + 0xc1, 0xa5, 0xa2, 0xcb, 0x70, 0x04, 0xf8, 0x53, 0xf1, 0xc6, 0x0d, 0xc3, 0x11, 0x70, 0xfa, 0xb4, + 0x70, 0x04, 0x21, 0x09, 0x3b, 0x00, 0xcd, 0x6e, 0x9b, 0xc7, 0x33, 0x1e, 0x8d, 0x0e, 0x40, 0xaf, + 0xdb, 0xb6, 0xe2, 0x31, 0x8d, 0x43, 0x44, 0xe3, 0x1f, 0x0d, 0xa5, 0x0b, 0x07, 0xa1, 0xbe, 0xeb, + 0x34, 0xc2, 0x41, 0x48, 0xf4, 0xf1, 0xcc, 0xd4, 0x4d, 0x98, 0x95, 0x16, 0x6f, 0xd2, 0x02, 0x6b, + 0xd3, 0x5c, 0x15, 0x43, 0x8c, 0x7a, 0xa3, 0xd0, 0x56, 0x4e, 0x5a, 0x71, 0x59, 0x5d, 0x4f, 0xd3, + 0x1b, 0xa5, 0xd0, 0x2f, 0xfc, 0xba, 0x54, 0x8b, 0xa9, 0x83, 0xb0, 0xb9, 0x19, 0xce, 0xe5, 0xd8, + 0x20, 0x74, 0xbb, 0xda, 0x30, 0xea, 0x24, 0x7c, 0xef, 0x95, 0x2a, 0x07, 0x64, 0xa2, 0xc8, 0x8a, + 0x8a, 0xa2, 0x22, 0xc6, 0x25, 0x46, 0x44, 0x76, 0xe1, 0x7c, 0x24, 0x4a, 0x2b, 0x37, 0x05, 0xe4, + 0xc8, 0x1b, 0x7c, 0xf5, 0xf8, 0xa8, 0xf8, 0x8a, 0x22, 0x8a, 0xab, 0x17, 0x8e, 0x18, 0xf7, 0xde, + 0xbc, 0xd8, 0x7e, 0xbb, 0xe4, 0xd9, 0xed, 0xfa, 0x9e, 0x32, 0xe7, 0x71, 0xbf, 0xdd, 0x46, 0x68, + 0xc2, 0xa1, 0x3a, 0x42, 0x36, 0x7e, 0x3c, 0x0b, 0x53, 0xfc, 0xac, 0xe6, 0xaf, 0x73, 0xcf, 0xec, + 0xcb, 0xe7, 0xdb, 0xda, 0xcb, 0xa7, 0x8c, 0xfd, 0xa5, 0x36, 0x6d, 0xa0, 0x77, 0xcf, 0x3d, 0x20, + 0x49, 0x1a, 0x62, 0xc2, 0x84, 0x0a, 0xed, 0xff, 0xe4, 0x79, 0x23, 0x0a, 0x13, 0x27, 0x44, 0x25, + 0x7c, 0x77, 0xf6, 0x4d, 0x8d, 0x87, 0xf1, 0x63, 0x59, 0x98, 0x54, 0xec, 0x54, 0x9e, 0xd9, 0x8e, + 0xff, 0xbc, 0xd6, 0xf1, 0xf3, 0xa1, 0x37, 0x59, 0xd8, 0xb2, 0x81, 0xfa, 0xbd, 0x0b, 0x33, 0x09, + 0x92, 0xb8, 0xb9, 0x4f, 0x66, 0x10, 0x73, 0x9f, 0xd7, 0x93, 0x31, 0xa7, 0x78, 0xe8, 0xf6, 0x30, + 0x02, 0x89, 0x1a, 0xe4, 0xea, 0x27, 0xb3, 0x30, 0x27, 0x7e, 0x61, 0x90, 0x46, 0x2e, 0xac, 0x3e, + 0xb3, 0x63, 0x51, 0xd2, 0xc6, 0xa2, 0xa8, 0x8f, 0x85, 0xd2, 0xc0, 0xde, 0x43, 0x62, 0xfc, 0x10, + 0xc0, 0x7c, 0x2f, 0x82, 0x81, 0x9d, 0xb6, 0x23, 0x97, 0xb8, 0xec, 0x00, 0x2e, 0x71, 0xab, 0x50, + 0xc0, 0xaa, 0x44, 0x18, 0x36, 0x7f, 0xd3, 0xac, 0x8a, 0x4e, 0x42, 0xfd, 0x02, 0x8f, 0xa4, 0x29, + 0xc2, 0xc2, 0xf9, 0x31, 0x9d, 0x47, 0x82, 0x92, 0xfc, 0x52, 0x06, 0xa6, 0x10, 0xb8, 0xfc, 0x88, + 0xb6, 0x03, 0x64, 0x36, 0x24, 0x3c, 0xb8, 0xc2, 0x87, 0xd1, 0x5a, 0xe0, 0x39, 0xed, 0x5d, 0xf1, + 0x32, 0xba, 0x2d, 0x5e, 0x46, 0xdf, 0xe1, 0x2f, 0xba, 0xd7, 0xea, 0x6e, 0xeb, 0xfa, 0xae, 0x67, + 0x3f, 0x72, 0xb8, 0x09, 0x96, 0xdd, 0xbc, 0x1e, 0x65, 0x0e, 0xe9, 0x38, 0xb1, 0x5c, 0x20, 0x82, + 0x15, 0xbe, 0x3a, 0xf3, 0x0f, 0xa5, 0x58, 0x6d, 0x5c, 0x35, 0xa3, 0x7f, 0x11, 0xf9, 0x1e, 0x38, + 0xc7, 0x83, 0x23, 0xb1, 0x1b, 0xbe, 0xd3, 0xee, 0xba, 0x5d, 0x7f, 0xc9, 0xae, 0xef, 0x33, 0x31, + 0x9f, 0x7b, 0xa1, 0x62, 0xcb, 0xeb, 0x61, 0xa1, 0xb5, 0xcd, 0x4b, 0x35, 0xaf, 0xfb, 0x74, 0x06, + 0x64, 0x05, 0x66, 0x78, 0x51, 0xa9, 0x1b, 0xb8, 0xb5, 0xba, 0xdd, 0x74, 0xda, 0xbb, 0x28, 0x4b, + 0xe4, 0xb9, 0x28, 0x63, 0x77, 0x03, 0xd7, 0xf2, 0x39, 0x5c, 0xd5, 0xd4, 0x24, 0x88, 0x48, 0x15, + 0xa6, 0x4d, 0x6a, 0x37, 0xee, 0xdb, 0x8f, 0xcb, 0x76, 0xc7, 0xae, 0x3b, 0x01, 0x8f, 0xd6, 0x98, + 0xe3, 0x02, 0x9d, 0x47, 0xed, 0x86, 0xd5, 0xb2, 0x1f, 0x5b, 0x75, 0x51, 0xa8, 0xab, 0xec, 0x35, + 0xba, 0x90, 0x95, 0xd3, 0x0e, 0x59, 0x8d, 0xc5, 0x59, 0x39, 0xed, 0xde, 0xac, 0x22, 0x3a, 0xc9, + 0x6a, 0xc3, 0xf6, 0x76, 0x69, 0xc0, 0x2d, 0x98, 0xe1, 0x52, 0xe6, 0x4a, 0x46, 0x61, 0x15, 0x60, + 0x99, 0x85, 0xd6, 0xcc, 0x71, 0x56, 0x0a, 0x1d, 0x9b, 0x79, 0x5b, 0x9e, 0x13, 0x50, 0xb5, 0x85, + 0xe3, 0xf8, 0x59, 0xd8, 0xff, 0x68, 0xfb, 0xdd, 0xab, 0x89, 0x09, 0xca, 0x88, 0x9b, 0xd2, 0xc8, + 0x89, 0x04, 0xb7, 0xf4, 0x56, 0x26, 0x28, 0x43, 0x6e, 0x6a, 0x3b, 0x27, 0xb1, 0x9d, 0x0a, 0xb7, + 0x1e, 0x0d, 0x4d, 0x50, 0x92, 0x35, 0xd6, 0x69, 0x01, 0x93, 0x9b, 0xdc, 0xb6, 0xb0, 0xe0, 0x9e, + 0xc2, 0x4f, 0x7b, 0x59, 0x98, 0x21, 0x16, 0x3c, 0x59, 0x6c, 0xa5, 0xd8, 0x73, 0xc7, 0x89, 0xc9, + 0xdf, 0x80, 0xe9, 0x4d, 0x9f, 0xde, 0xae, 0xae, 0xd7, 0x64, 0x2c, 0x25, 0x54, 0x2e, 0x4e, 0x2d, + 0xde, 0x38, 0x61, 0xd3, 0xb9, 0xa6, 0xd2, 0x60, 0x02, 0x0f, 0x3e, 0x6e, 0x5d, 0x9f, 0x5a, 0x3b, + 0x4e, 0xc7, 0x0f, 0x03, 0xd3, 0xa9, 0xe3, 0x16, 0xab, 0xca, 0x58, 0x81, 0x99, 0x04, 0x1b, 0x32, + 0x05, 0xc0, 0x80, 0xd6, 0xe6, 0x5a, 0x6d, 0x79, 0xa3, 0xf0, 0x1c, 0x29, 0xc0, 0x04, 0xfe, 0x5e, + 0x5e, 0x2b, 0x2d, 0xad, 0x2e, 0x57, 0x0a, 0x19, 0x32, 0x03, 0x93, 0x08, 0xa9, 0x54, 0x6b, 0x1c, + 0x94, 0xe5, 0xe1, 0xdb, 0xcd, 0x02, 0x5f, 0xba, 0x01, 0x5b, 0x00, 0x78, 0xa6, 0x18, 0x7f, 0x37, + 0x0b, 0xe7, 0xe5, 0xb1, 0x42, 0x03, 0x26, 0x38, 0x3a, 0xed, 0xdd, 0x67, 0xfc, 0x74, 0xb8, 0xad, + 0x9d, 0x0e, 0x2f, 0xc7, 0x4e, 0xea, 0x58, 0x2b, 0xfb, 0x1c, 0x11, 0xbf, 0x35, 0x06, 0x17, 0xfa, + 0x52, 0x91, 0x2f, 0xb2, 0xd3, 0xdc, 0xa1, 0xed, 0xa0, 0xda, 0x68, 0xd2, 0x0d, 0xa7, 0x45, 0xdd, + 0x6e, 0x20, 0x3c, 0x06, 0x5e, 0x42, 0x7d, 0x1e, 0x16, 0x5a, 0x4e, 0xa3, 0x49, 0xad, 0x80, 0x17, + 0x6b, 0xd3, 0x2d, 0x49, 0xcd, 0x58, 0x86, 0xc9, 0x84, 0xaa, 0xed, 0x80, 0x7a, 0x8f, 0xd0, 0x2a, + 0x31, 0x64, 0xb9, 0x4f, 0x69, 0xc7, 0xb2, 0x59, 0xa9, 0xe5, 0x88, 0x62, 0x9d, 0x65, 0x82, 0x9a, + 0xdc, 0x56, 0x58, 0x96, 0xd9, 0xed, 0xff, 0xbe, 0xfd, 0x58, 0x98, 0x49, 0x89, 0xd8, 0x9c, 0x21, + 0x4b, 0xee, 0x20, 0xd7, 0xb2, 0x1f, 0x9b, 0x49, 0x12, 0xf2, 0x55, 0x38, 0x23, 0x0e, 0x20, 0x11, + 0xe8, 0x43, 0xb6, 0x98, 0x87, 0x11, 0x79, 0xf5, 0xf8, 0xa8, 0x78, 0x4e, 0x46, 0x35, 0x95, 0xa1, + 0x5d, 0xd2, 0x5a, 0x9d, 0xce, 0x85, 0x6c, 0xb0, 0x03, 0x39, 0xd6, 0x1d, 0xf7, 0xa9, 0xef, 0x4b, + 0x0f, 0x46, 0x71, 0x33, 0x56, 0x3b, 0xd3, 0x6a, 0xf1, 0x72, 0xb3, 0x27, 0x25, 0x59, 0x81, 0xa9, + 0x2d, 0xba, 0xad, 0x8e, 0xcf, 0x48, 0xb8, 0x55, 0x15, 0x0e, 0xe8, 0x76, 0xef, 0xc1, 0x89, 0xd1, + 0x11, 0x07, 0xdf, 0x07, 0x1e, 0x1f, 0xae, 0x3a, 0x7e, 0x40, 0xdb, 0xd4, 0xc3, 0x00, 0x52, 0xa3, + 0xb8, 0x19, 0xcc, 0x47, 0x12, 0xb2, 0x5e, 0xbe, 0xf4, 0xe2, 0xf1, 0x51, 0xf1, 0x02, 0x77, 0x05, + 0x6e, 0x0a, 0xb8, 0x15, 0x4b, 0xc5, 0x93, 0xe4, 0x4a, 0xbe, 0x0e, 0xd3, 0xa6, 0xdb, 0x0d, 0x9c, + 0xf6, 0x6e, 0x2d, 0xf0, 0xec, 0x80, 0xee, 0xf2, 0x03, 0x29, 0x8a, 0x54, 0x15, 0x2b, 0x15, 0x4f, + 0xcb, 0x1c, 0x68, 0xf9, 0x02, 0xaa, 0x9d, 0x08, 0x3a, 0x01, 0xf9, 0x1a, 0x4c, 0xf1, 0x10, 0x0f, + 0x61, 0x05, 0x63, 0x5a, 0x1a, 0x01, 0xbd, 0xf0, 0xe1, 0x0d, 0x61, 0xd5, 0x82, 0xd0, 0xb4, 0x0a, + 0x62, 0xdc, 0xc8, 0x97, 0x45, 0x67, 0xad, 0x3b, 0xed, 0xdd, 0x70, 0x1a, 0x03, 0xf6, 0xfc, 0x1b, + 0x51, 0x97, 0x74, 0xd8, 0xe7, 0xca, 0x69, 0xdc, 0xc3, 0x44, 0x2f, 0xc9, 0x87, 0x04, 0x70, 0xa1, + 0xe4, 0xfb, 0x8e, 0x1f, 0x08, 0xbf, 0x9a, 0xe5, 0xc7, 0xb4, 0xde, 0x65, 0xc8, 0xec, 0x7a, 0x4b, + 0x3d, 0x6e, 0xd7, 0x3d, 0xbc, 0x74, 0xed, 0xf8, 0xa8, 0xf8, 0x9a, 0x8d, 0x88, 0x96, 0x70, 0xc5, + 0xb1, 0xa8, 0x44, 0xb5, 0x0e, 0x38, 0xae, 0xd2, 0x86, 0xfe, 0x4c, 0xc9, 0xd7, 0xe0, 0x6c, 0xd9, + 0xf6, 0x69, 0xb5, 0xed, 0xd3, 0xb6, 0xef, 0x04, 0xce, 0x23, 0x2a, 0x3a, 0x15, 0x0f, 0xbf, 0x3c, + 0x26, 0x2d, 0x32, 0xea, 0xb6, 0xcf, 0x16, 0x66, 0x88, 0x62, 0x89, 0x41, 0x51, 0xaa, 0xe9, 0xc1, + 0x85, 0x98, 0x30, 0x55, 0xab, 0xad, 0x54, 0x1c, 0x3b, 0x5c, 0x57, 0x93, 0xd8, 0x5f, 0xaf, 0xa1, + 0x6a, 0xcf, 0xdf, 0xb3, 0x1a, 0x8e, 0x1d, 0x2e, 0xa8, 0x1e, 0x9d, 0x15, 0xe3, 0x60, 0x1c, 0x65, + 0xa0, 0x10, 0x1f, 0x4a, 0xf2, 0x25, 0x18, 0xe3, 0xf6, 0x6d, 0xd4, 0xdf, 0x13, 0x11, 0x0f, 0xa4, + 0xb9, 0x54, 0x08, 0xd7, 0x89, 0x84, 0x9f, 0x1b, 0xb7, 0x9e, 0xa3, 0xaa, 0xb5, 0x0c, 0xfa, 0xb9, + 0x49, 0x22, 0xd2, 0x80, 0x09, 0x3e, 0x5a, 0x14, 0xc3, 0xd4, 0x09, 0x33, 0xe7, 0x17, 0xd5, 0xd5, + 0x21, 0x8a, 0x62, 0xfc, 0xf1, 0xd5, 0x50, 0xcc, 0x09, 0x8e, 0xa0, 0x55, 0xa1, 0x71, 0x5d, 0x02, + 0xc8, 0x4b, 0x42, 0xe3, 0x3c, 0x9c, 0xeb, 0xf1, 0xcd, 0xc6, 0x23, 0xb4, 0x24, 0xe8, 0x51, 0x23, + 0xf9, 0x12, 0xcc, 0x21, 0x61, 0xd9, 0x6d, 0xb7, 0x69, 0x3d, 0xc0, 0xed, 0x48, 0x6a, 0xdf, 0x73, + 0xdc, 0xd2, 0x85, 0xb7, 0xb7, 0x1e, 0x22, 0x58, 0x71, 0x25, 0x7c, 0x2a, 0x07, 0xe3, 0xe7, 0xb2, + 0x30, 0x2f, 0x76, 0x38, 0x93, 0xd6, 0x5d, 0xaf, 0xf1, 0xec, 0x9f, 0xa8, 0xcb, 0xda, 0x89, 0xfa, + 0x52, 0x18, 0xe2, 0x26, 0xad, 0x91, 0x7d, 0x0e, 0xd4, 0x5f, 0xc9, 0xc0, 0x0b, 0xfd, 0x88, 0x58, + 0xef, 0x84, 0x61, 0xf9, 0xc6, 0x12, 0xe1, 0xf7, 0x3a, 0x30, 0x8b, 0x03, 0x5a, 0xde, 0xa3, 0xf5, + 0x7d, 0x7f, 0xc5, 0xf5, 0x03, 0xf4, 0xb4, 0xc8, 0xf6, 0x78, 0xeb, 0x7e, 0x3d, 0xf5, 0xad, 0xfb, + 0x2c, 0x9f, 0x65, 0x75, 0xe4, 0xc1, 0x03, 0x07, 0xee, 0xd3, 0x43, 0xdf, 0x4c, 0x63, 0x8d, 0x16, + 0xf3, 0xa5, 0x6e, 0xb0, 0xb7, 0xee, 0xd1, 0x1d, 0xea, 0xd1, 0x76, 0x9d, 0x7e, 0xc2, 0x2c, 0xe6, + 0xf5, 0xc6, 0x0d, 0xa4, 0xc1, 0xf8, 0xc7, 0x93, 0x30, 0x97, 0x46, 0xc6, 0xfa, 0x45, 0xb9, 0x34, + 0xc7, 0x73, 0x2a, 0xfe, 0x60, 0x06, 0x26, 0x6a, 0xb4, 0xee, 0xb6, 0x1b, 0xb7, 0xd1, 0xa2, 0x48, + 0xf4, 0x8e, 0xc5, 0x85, 0x06, 0x06, 0xb7, 0x76, 0x62, 0xa6, 0x46, 0xdf, 0x3d, 0x2a, 0x7e, 0x61, + 0xb0, 0xbb, 0x6a, 0xdd, 0xc5, 0x30, 0x35, 0x01, 0xc6, 0xfc, 0x0f, 0xab, 0xc0, 0xc7, 0x41, 0xad, + 0x52, 0xb2, 0x04, 0x93, 0x62, 0xb9, 0xba, 0x6a, 0x54, 0x46, 0x1e, 0x05, 0x48, 0x16, 0x24, 0x54, + 0xd7, 0x1a, 0x09, 0xb9, 0x09, 0xb9, 0xcd, 0xc5, 0xdb, 0x62, 0x0c, 0x64, 0xd6, 0x84, 0xcd, 0xc5, + 0xdb, 0xa8, 0x0e, 0x63, 0x57, 0x8c, 0xc9, 0xee, 0xa2, 0x66, 0xe4, 0xb3, 0xb9, 0x78, 0x9b, 0xfc, + 0x4d, 0x38, 0x53, 0x71, 0x7c, 0x51, 0x05, 0xf7, 0xdd, 0x68, 0xa0, 0xc7, 0xe2, 0x48, 0x8f, 0xd9, + 0xfb, 0xd9, 0xd4, 0xd9, 0xfb, 0x62, 0x23, 0x64, 0x62, 0x71, 0xc7, 0x90, 0x46, 0x3c, 0xfa, 0x64, + 0x7a, 0x3d, 0xe4, 0x43, 0x98, 0x42, 0x65, 0x36, 0xba, 0xb3, 0x60, 0xdc, 0xf0, 0xd1, 0x1e, 0x35, + 0x7f, 0x3a, 0xb5, 0xe6, 0x05, 0x1e, 0x7d, 0x02, 0x9d, 0x62, 0x30, 0xc6, 0xb8, 0x76, 0xeb, 0xd7, + 0x38, 0x93, 0xbb, 0x30, 0x2d, 0xc4, 0xaf, 0x07, 0x3b, 0x1b, 0x7b, 0xb4, 0x62, 0x1f, 0x0a, 0xfb, + 0x1c, 0xbc, 0xd1, 0x09, 0x99, 0xcd, 0x72, 0x77, 0xac, 0x60, 0x8f, 0x5a, 0x0d, 0x5b, 0x13, 0x54, + 0x62, 0x84, 0xe4, 0x5b, 0x30, 0xbe, 0xea, 0xd6, 0x99, 0xe4, 0x8d, 0x3b, 0x03, 0x37, 0xd9, 0xf9, + 0x00, 0xb3, 0xf6, 0x71, 0x70, 0x4c, 0x9c, 0xfa, 0xee, 0x51, 0xf1, 0xed, 0xd3, 0x4e, 0x1a, 0xa5, + 0x02, 0x53, 0xad, 0x8d, 0x94, 0x21, 0xbf, 0x45, 0xb7, 0x59, 0x6b, 0xe3, 0x19, 0xbd, 0x24, 0x58, + 0x58, 0xe4, 0x89, 0x5f, 0x9a, 0x45, 0x9e, 0x80, 0x11, 0x0f, 0x66, 0xb0, 0x7f, 0xd6, 0x6d, 0xdf, + 0x3f, 0x70, 0xbd, 0x06, 0xa6, 0x6e, 0xe8, 0x65, 0x0d, 0xb4, 0x98, 0xda, 0xf9, 0x2f, 0xf0, 0xce, + 0xef, 0x28, 0x1c, 0x54, 0x01, 0x32, 0xc1, 0x9e, 0x7c, 0x1d, 0xa6, 0x44, 0x34, 0x80, 0xfb, 0xb7, + 0x4b, 0xb8, 0x2a, 0x27, 0x34, 0xbf, 0x4f, 0xbd, 0x90, 0x4b, 0xa9, 0x22, 0xb8, 0x80, 0xd4, 0x40, + 0x59, 0xad, 0x1d, 0x5b, 0x57, 0xfa, 0xab, 0x24, 0x64, 0x1d, 0xc6, 0x2b, 0xf4, 0x91, 0x53, 0xa7, + 0xe8, 0x9b, 0x26, 0xec, 0xc2, 0xc3, 0x94, 0x44, 0x51, 0x09, 0xd7, 0xc5, 0x34, 0x10, 0xc0, 0x3d, + 0xdd, 0x74, 0x5b, 0xdd, 0x10, 0x91, 0xdc, 0x82, 0x5c, 0xb5, 0xb2, 0x2e, 0xcc, 0xc2, 0x67, 0xc2, + 0x98, 0x1b, 0xeb, 0x32, 0x81, 0x0b, 0xda, 0xcf, 0x39, 0x0d, 0xcd, 0xa8, 0xbc, 0x5a, 0x59, 0x27, + 0x3b, 0x30, 0x89, 0x1d, 0xb0, 0x42, 0x6d, 0xde, 0xb7, 0xd3, 0x3d, 0xfa, 0xf6, 0x5a, 0x6a, 0xdf, + 0xce, 0xf3, 0xbe, 0xdd, 0x13, 0xd4, 0x5a, 0x46, 0x0a, 0x95, 0x2d, 0x13, 0x69, 0x45, 0x96, 0x1c, + 0x99, 0x47, 0x61, 0x63, 0x15, 0xed, 0x83, 0x84, 0x48, 0x2b, 0x93, 0xea, 0x84, 0x89, 0x1d, 0x7a, + 0x7a, 0x9d, 0x24, 0xf9, 0x90, 0xcf, 0xc3, 0xd0, 0x83, 0xfd, 0xc0, 0x16, 0x06, 0xe0, 0xb2, 0x1f, + 0x19, 0x48, 0x36, 0x1f, 0xb5, 0x90, 0xee, 0xbe, 0x16, 0x9f, 0x0c, 0x69, 0xd8, 0x50, 0xac, 0xd8, + 0x5e, 0xe3, 0xc0, 0xf6, 0xd0, 0x41, 0x78, 0x56, 0x63, 0xa1, 0x94, 0xf0, 0xa1, 0xd8, 0x13, 0x80, + 0x98, 0xd7, 0xb0, 0xca, 0x82, 0x7c, 0x0f, 0x9c, 0xf7, 0x9d, 0xdd, 0xb6, 0x1d, 0x74, 0x3d, 0x6a, + 0xd9, 0xcd, 0x5d, 0xd7, 0x73, 0x82, 0xbd, 0x96, 0xe5, 0x77, 0x9d, 0x80, 0xce, 0xcf, 0x69, 0x39, + 0x75, 0x6b, 0x12, 0xaf, 0x24, 0xd1, 0x6a, 0x0c, 0xcb, 0x3c, 0xe7, 0xa7, 0x17, 0x90, 0x2f, 0xc3, + 0xa4, 0xba, 0x25, 0xfb, 0xf3, 0x67, 0x2e, 0xe5, 0xae, 0x4c, 0x85, 0x17, 0x8f, 0xf8, 0x06, 0x2e, + 0x63, 0xd1, 0x2a, 0x27, 0x84, 0xaf, 0xc7, 0xa2, 0x55, 0x78, 0x85, 0x59, 0xea, 0x48, 0x61, 0xd6, + 0x9c, 0x11, 0x33, 0x56, 0xf4, 0xf2, 0xfd, 0xdb, 0x25, 0x73, 0x74, 0xbd, 0xfa, 0xb0, 0xd6, 0x74, + 0x03, 0xe3, 0xbf, 0xca, 0xe0, 0x26, 0x4e, 0x5e, 0xc3, 0xb0, 0x4a, 0xe1, 0xeb, 0x19, 0xea, 0x6f, + 0xed, 0x4e, 0x2c, 0x90, 0x39, 0x47, 0x21, 0xaf, 0xc3, 0xc8, 0x6d, 0xbb, 0x2e, 0xc3, 0xc2, 0x08, + 0xe4, 0x1d, 0x84, 0xa8, 0xca, 0x5e, 0x8e, 0xc3, 0xe4, 0x4b, 0x3e, 0xb9, 0x4b, 0x51, 0xda, 0xe5, + 0x72, 0x49, 0x3e, 0xd7, 0xa3, 0x7c, 0x29, 0x16, 0x85, 0x92, 0x97, 0x39, 0x66, 0x15, 0x9f, 0xca, + 0xc1, 0xf8, 0xb3, 0x4c, 0xb4, 0x2b, 0x91, 0x57, 0x61, 0xc8, 0x5c, 0x0f, 0xbf, 0x9f, 0x3b, 0xfd, + 0xc6, 0x3e, 0x1f, 0x11, 0xc8, 0x97, 0xe1, 0x8c, 0xc2, 0x27, 0x61, 0xa2, 0xff, 0x0a, 0xfa, 0xa4, + 0x2a, 0x5f, 0x92, 0x6e, 0xa7, 0x9f, 0xce, 0x03, 0x85, 0xe9, 0xa8, 0xa0, 0x42, 0xdb, 0x0e, 0xe7, + 0xad, 0x34, 0x56, 0xe5, 0xdd, 0x40, 0x84, 0x78, 0x63, 0xd3, 0x38, 0x70, 0x97, 0x54, 0xe3, 0x37, + 0x33, 0xda, 0x6e, 0x13, 0xe6, 0xb7, 0xcd, 0x9c, 0x90, 0xdf, 0xf6, 0x2d, 0x80, 0x52, 0x37, 0x70, + 0x97, 0xdb, 0x9e, 0xdb, 0xe4, 0x5a, 0x14, 0x11, 0xcb, 0x1f, 0x75, 0xc3, 0x14, 0xc1, 0x9a, 0xe7, + 0x5c, 0x88, 0x9c, 0xea, 0xcd, 0x90, 0xfb, 0xa8, 0xde, 0x0c, 0xc6, 0xef, 0x67, 0xb4, 0x35, 0xca, + 0xa4, 0x44, 0x31, 0x15, 0x55, 0x8b, 0xb1, 0x8e, 0xf3, 0xc8, 0xf2, 0x9b, 0xae, 0xba, 0x43, 0x4a, + 0x34, 0xf2, 0x6f, 0x67, 0xe0, 0x2c, 0x77, 0x0b, 0x58, 0xeb, 0xb6, 0xb6, 0xa9, 0xf7, 0xd0, 0x6e, + 0x3a, 0x0d, 0xee, 0x78, 0xcd, 0x05, 0xe0, 0x2b, 0xc9, 0x05, 0x9f, 0x8e, 0xcf, 0x2f, 0xaa, 0xdc, + 0x4d, 0xc1, 0x6a, 0x63, 0xa1, 0xf5, 0x28, 0x2c, 0x55, 0x2f, 0xaa, 0xe9, 0xf4, 0xc6, 0xaf, 0x66, + 0xe0, 0xc5, 0x13, 0x6b, 0x21, 0xd7, 0x61, 0x54, 0x26, 0x51, 0xc8, 0x60, 0xc7, 0xa3, 0x9d, 0x6d, + 0x32, 0x81, 0x82, 0xc4, 0x22, 0x5f, 0x81, 0x33, 0x2a, 0xab, 0x0d, 0xcf, 0x76, 0xd4, 0x54, 0x05, + 0x29, 0x5f, 0x1d, 0x30, 0x94, 0xb8, 0xb4, 0x96, 0xce, 0xc4, 0xf8, 0xff, 0x33, 0x4a, 0xc6, 0xeb, + 0x67, 0x54, 0x86, 0xbf, 0xa5, 0xc9, 0xf0, 0x32, 0xa0, 0x65, 0xd8, 0x2a, 0x56, 0x96, 0x7a, 0xef, + 0x9a, 0x56, 0xec, 0xc5, 0x11, 0xf0, 0x23, 0x59, 0x18, 0xdf, 0xf4, 0xa9, 0xc7, 0x1f, 0x72, 0x3f, + 0x59, 0x81, 0x0b, 0xc3, 0x76, 0x0d, 0x14, 0x5a, 0xee, 0x4f, 0x32, 0xa8, 0xe0, 0x57, 0x29, 0x58, + 0x6f, 0x28, 0x59, 0xee, 0xb0, 0x37, 0x30, 0xbf, 0x1d, 0x42, 0x79, 0xb0, 0xae, 0x55, 0x3d, 0xe1, + 0x25, 0x66, 0x3d, 0x5d, 0x25, 0x5f, 0x80, 0xe1, 0x4d, 0x54, 0x57, 0xea, 0x41, 0x36, 0x42, 0xfe, + 0x58, 0xc8, 0x37, 0xe9, 0xae, 0xaf, 0x47, 0x61, 0xe3, 0x84, 0xa4, 0x06, 0xa3, 0x65, 0x8f, 0x62, + 0xfe, 0xea, 0xa1, 0xc1, 0x5d, 0xc4, 0xeb, 0x9c, 0x24, 0xee, 0x22, 0x2e, 0x38, 0x19, 0x3f, 0x9b, + 0x05, 0x12, 0xb5, 0x11, 0x93, 0x35, 0xf9, 0xcf, 0xec, 0xa0, 0xbf, 0xaf, 0x0d, 0xfa, 0x85, 0xc4, + 0xa0, 0xf3, 0xe6, 0x0d, 0x34, 0xf6, 0xbf, 0x9d, 0x81, 0xb3, 0xe9, 0x84, 0xe4, 0x25, 0x18, 0x79, + 0xb0, 0xb1, 0x2e, 0xe3, 0xb4, 0x88, 0xa6, 0xb8, 0x1d, 0xd4, 0x15, 0x98, 0xa2, 0x88, 0xbc, 0x01, + 0x23, 0x5f, 0x34, 0xcb, 0xec, 0x1c, 0x52, 0xd2, 0x01, 0x7c, 0xc3, 0xb3, 0xea, 0xfa, 0x51, 0x24, + 0x90, 0xd4, 0xb1, 0xcd, 0x3d, 0xb5, 0xb1, 0xfd, 0xc9, 0x2c, 0x4c, 0x97, 0xea, 0x75, 0xea, 0xfb, + 0x4c, 0xda, 0xa1, 0x7e, 0xf0, 0xcc, 0x0e, 0x6c, 0x7a, 0x04, 0x16, 0xad, 0x6d, 0x03, 0x8d, 0xea, + 0xef, 0x66, 0xe0, 0x8c, 0xa4, 0x7a, 0xe4, 0xd0, 0x83, 0x8d, 0x3d, 0x8f, 0xfa, 0x7b, 0x6e, 0xb3, + 0x31, 0x70, 0xce, 0x11, 0x26, 0xe8, 0x61, 0x20, 0x71, 0xf5, 0x55, 0x7f, 0x07, 0x21, 0x9a, 0xa0, + 0xc7, 0x83, 0x8d, 0x5f, 0x87, 0xd1, 0x52, 0xa7, 0xe3, 0xb9, 0x8f, 0xf8, 0xb2, 0x17, 0x71, 0x16, + 0x6d, 0x0e, 0xd2, 0x3c, 0xec, 0x39, 0x88, 0x7d, 0x46, 0x85, 0xb6, 0x79, 0x70, 0xbc, 0x49, 0xfe, + 0x19, 0x0d, 0xda, 0x56, 0x65, 0x71, 0x2c, 0x37, 0x6a, 0x40, 0xd6, 0x3d, 0xb7, 0xe5, 0x06, 0xb4, + 0xc1, 0xdb, 0x83, 0x81, 0x09, 0x4e, 0x8c, 0x75, 0xb5, 0xe1, 0x04, 0x4d, 0x2d, 0xd6, 0x55, 0xc0, + 0x00, 0x26, 0x87, 0x1b, 0xff, 0xef, 0x30, 0x4c, 0xa8, 0xbd, 0x43, 0x0c, 0x9e, 0x48, 0xc0, 0xf5, + 0xd4, 0xe8, 0x18, 0x36, 0x42, 0x4c, 0x51, 0x12, 0x85, 0x96, 0xc9, 0x9e, 0x18, 0x5a, 0x66, 0x0b, + 0x26, 0xd7, 0x3d, 0x17, 0x03, 0x42, 0xe2, 0x6b, 0xa5, 0xd8, 0x0a, 0x67, 0x95, 0x7b, 0x27, 0x1b, + 0x48, 0x7c, 0x0f, 0x45, 0xc9, 0xbe, 0x23, 0xb0, 0x31, 0xbd, 0x9e, 0xa6, 0x75, 0xd1, 0xf8, 0x70, + 0x53, 0x0b, 0xdb, 0x17, 0x51, 0x5d, 0x43, 0x53, 0x0b, 0x06, 0xd1, 0x4d, 0x2d, 0x18, 0x44, 0x5d, + 0x6b, 0xc3, 0x4f, 0x6b, 0xad, 0x91, 0x9f, 0xcd, 0xc0, 0x78, 0xa9, 0xdd, 0x16, 0x21, 0x6b, 0x4e, + 0xf0, 0xd6, 0xff, 0x8a, 0xb0, 0xb6, 0x78, 0xfb, 0x23, 0x59, 0x5b, 0xa0, 0xdc, 0xe2, 0xa3, 0xa4, + 0x1a, 0x55, 0xa8, 0xde, 0xd6, 0x94, 0xef, 0x20, 0x6f, 0x43, 0x21, 0x9c, 0xe4, 0xd5, 0x76, 0x83, + 0x3e, 0xa6, 0x3c, 0x11, 0xdb, 0xa4, 0x88, 0xe7, 0xac, 0x4a, 0xa6, 0x71, 0x44, 0xb2, 0x01, 0x60, + 0x87, 0xb3, 0x2b, 0x96, 0x51, 0x32, 0x39, 0xfd, 0x84, 0xf4, 0x8c, 0xbf, 0xf1, 0x41, 0x4b, 0x95, + 0x9e, 0x23, 0x3e, 0xa4, 0x05, 0xd3, 0x3c, 0x9d, 0x63, 0x2d, 0xb0, 0xbd, 0x00, 0xd3, 0x16, 0xc0, + 0x89, 0xe3, 0xf0, 0xaa, 0xd0, 0x9f, 0x3d, 0x2f, 0x92, 0x44, 0xfa, 0x8c, 0xd6, 0x4a, 0xc9, 0x61, + 0x10, 0xe7, 0xcd, 0xa3, 0x67, 0x9b, 0xe7, 0x92, 0xdf, 0xcb, 0x27, 0xfd, 0x4f, 0x66, 0xe0, 0xac, + 0x3a, 0xe9, 0x6b, 0xdd, 0x6d, 0x11, 0x8c, 0x93, 0x5c, 0x83, 0x31, 0x31, 0x27, 0xc3, 0x4b, 0x54, + 0x32, 0xfb, 0x42, 0x84, 0x42, 0x96, 0xd9, 0x34, 0x64, 0x3c, 0x84, 0xd4, 0x3d, 0x1b, 0xdb, 0xa7, + 0x58, 0x51, 0x94, 0x2a, 0xd8, 0xc3, 0xdf, 0xfa, 0xfc, 0x64, 0x10, 0xe3, 0x3d, 0x98, 0xd1, 0x47, + 0xa2, 0x46, 0x03, 0x72, 0x15, 0x46, 0xe5, 0xf0, 0x65, 0xd2, 0x87, 0x4f, 0x96, 0x1b, 0x5b, 0x40, + 0x12, 0xf4, 0x3e, 0x9a, 0x45, 0xb1, 0xfb, 0x29, 0x37, 0xdb, 0x93, 0x8f, 0x92, 0x09, 0xc4, 0xa5, + 0x59, 0xf1, 0x7d, 0xe3, 0x9a, 0x5b, 0x02, 0x06, 0x26, 0xfd, 0xb3, 0x29, 0x98, 0x4d, 0xd9, 0x73, + 0x4f, 0x90, 0x89, 0x8a, 0xfa, 0x06, 0x31, 0x16, 0x06, 0xfb, 0x90, 0xdb, 0xc2, 0x7b, 0x30, 0x7c, + 0xe2, 0x76, 0xc0, 0x9d, 0x52, 0x62, 0xbb, 0x00, 0x27, 0xfb, 0x58, 0xe4, 0x22, 0x35, 0x1e, 0xcf, + 0xf0, 0x53, 0x8b, 0xc7, 0xb3, 0x04, 0x93, 0xa2, 0x55, 0x62, 0xbb, 0x52, 0x8c, 0xa3, 0x3d, 0x5e, + 0x60, 0x25, 0xb6, 0x2d, 0x9d, 0x84, 0xf3, 0xf0, 0xdd, 0xe6, 0x23, 0x2a, 0x78, 0x8c, 0xaa, 0x3c, + 0xb0, 0x20, 0x95, 0x87, 0x42, 0x42, 0xfe, 0x13, 0x4c, 0x25, 0x87, 0x10, 0x75, 0xcf, 0xca, 0xf7, + 0xdb, 0xb3, 0x1a, 0x4f, 0x67, 0xcf, 0xba, 0x20, 0xbf, 0x31, 0x7d, 0xef, 0x4a, 0xf9, 0x2c, 0xf2, + 0xcb, 0x19, 0x98, 0xe1, 0x41, 0x61, 0xd4, 0x8f, 0xed, 0x1b, 0xe8, 0xa3, 0xfe, 0x74, 0x3e, 0xf6, + 0x05, 0x91, 0x42, 0x29, 0xfd, 0x5b, 0x93, 0x1f, 0x45, 0xbe, 0x07, 0x20, 0x5c, 0x51, 0x3c, 0x38, + 0xeb, 0xf8, 0xe2, 0x0b, 0x29, 0xbb, 0x40, 0x88, 0x14, 0xa5, 0x7b, 0x08, 0x42, 0x3a, 0x2d, 0x81, + 0x60, 0x08, 0x25, 0x7f, 0x13, 0xe6, 0xd8, 0x7a, 0x09, 0x21, 0x22, 0x84, 0xd5, 0xfc, 0x38, 0xd6, + 0xf2, 0x99, 0xde, 0x32, 0xd1, 0xb5, 0x34, 0x32, 0x1e, 0xca, 0x37, 0xca, 0xe5, 0x1c, 0xa8, 0xd1, + 0x2e, 0x52, 0x2b, 0xc2, 0xc8, 0x70, 0xf8, 0xf5, 0x3c, 0x25, 0x43, 0x8f, 0xfd, 0xed, 0xbc, 0x5c, + 0x0b, 0x7c, 0x7f, 0xf3, 0x75, 0x1f, 0x65, 0x04, 0x91, 0x2f, 0x02, 0x09, 0xa3, 0xa9, 0x70, 0x18, + 0x95, 0xe9, 0x1a, 0xb8, 0xba, 0x39, 0x8a, 0xca, 0xe2, 0xc9, 0x62, 0x75, 0x92, 0x24, 0x89, 0x09, + 0x85, 0x39, 0xd1, 0x68, 0x06, 0x95, 0x79, 0xde, 0xfc, 0xf9, 0x29, 0x2d, 0x40, 0x58, 0x54, 0x12, + 0x25, 0x7d, 0x56, 0x92, 0xc5, 0x69, 0x2a, 0xa7, 0x34, 0x76, 0xe4, 0x16, 0x8c, 0xa1, 0xa3, 0xf0, + 0x8a, 0x34, 0xf6, 0x12, 0x86, 0x27, 0xe8, 0x52, 0x6c, 0xed, 0xe9, 0x26, 0x5b, 0x11, 0x2a, 0xbb, + 0x0e, 0x54, 0xbc, 0x43, 0xb3, 0xdb, 0x46, 0xa5, 0xb0, 0xd0, 0x77, 0x34, 0xbc, 0x43, 0xcb, 0xeb, + 0xea, 0x9e, 0xe4, 0x88, 0x44, 0xbe, 0x0e, 0xe3, 0xf7, 0xed, 0xc7, 0x52, 0x27, 0x2c, 0x14, 0xbf, + 0xfd, 0x76, 0x20, 0x43, 0xb6, 0xa6, 0x65, 0x3f, 0xb6, 0x1a, 0xdd, 0x78, 0x20, 0x61, 0xdc, 0x86, + 0x54, 0x96, 0xe4, 0xab, 0x00, 0x8a, 0xa6, 0x9a, 0x9c, 0x58, 0xc1, 0x8b, 0x32, 0xec, 0x5d, 0xaa, + 0x06, 0x1b, 0xf9, 0x2b, 0x0c, 0x63, 0x92, 0xc3, 0xdc, 0xc7, 0x27, 0x39, 0x9c, 0xf9, 0xf8, 0x24, + 0x87, 0x85, 0x6d, 0x38, 0xdf, 0x73, 0xe9, 0xa4, 0x44, 0x23, 0xbe, 0xae, 0x47, 0x23, 0x3e, 0xdf, + 0xeb, 0x88, 0xf5, 0xf5, 0x0c, 0x1f, 0xb3, 0x85, 0xb9, 0xde, 0xd2, 0xc9, 0x77, 0xb2, 0xb1, 0x23, + 0x57, 0x5c, 0x2c, 0x78, 0x46, 0xa8, 0x5e, 0x32, 0x49, 0x16, 0x93, 0x00, 0xf3, 0x43, 0x59, 0x09, + 0x93, 0xce, 0x0e, 0x65, 0xf5, 0x50, 0xc7, 0xe3, 0xf9, 0x49, 0x4f, 0xdf, 0x77, 0x60, 0x8a, 0xe7, + 0xed, 0xbc, 0x47, 0x0f, 0x0f, 0x5c, 0xaf, 0x21, 0x93, 0xe3, 0xa3, 0x0c, 0x9e, 0x48, 0xba, 0x1d, + 0xc3, 0x25, 0x15, 0xe9, 0x7b, 0x3a, 0x8c, 0xb5, 0x9f, 0x4f, 0xdd, 0xc5, 0x18, 0x42, 0x3f, 0xb7, + 0x54, 0xf2, 0x66, 0x28, 0xa8, 0x51, 0x4f, 0xcd, 0xf3, 0xe1, 0x49, 0x60, 0x8a, 0xbc, 0x46, 0x3d, + 0xe3, 0x9f, 0xe5, 0x80, 0xf0, 0x9a, 0xca, 0x76, 0xc7, 0x46, 0xcf, 0x6c, 0x07, 0x63, 0x2d, 0x15, + 0x04, 0x8e, 0xbd, 0xdd, 0xa4, 0x6a, 0xa0, 0x32, 0x61, 0x5c, 0x1b, 0x96, 0x59, 0xf1, 0x8b, 0x4e, + 0x82, 0xb0, 0xc7, 0x56, 0x97, 0x7d, 0x92, 0xad, 0xee, 0xeb, 0xf0, 0x7c, 0xa9, 0x83, 0x09, 0x80, + 0x65, 0x2d, 0xb7, 0x5d, 0x4f, 0x6e, 0x52, 0x9a, 0xcf, 0x9f, 0x1d, 0xa2, 0x25, 0xbe, 0xb4, 0x1f, + 0x0b, 0x45, 0x4e, 0x61, 0xf3, 0xb2, 0x13, 0xa8, 0x31, 0x24, 0xa4, 0x9c, 0xd2, 0xc1, 0x92, 0x14, + 0x39, 0x85, 0x93, 0x48, 0x1e, 0x8e, 0x27, 0xe5, 0x14, 0xcc, 0x6c, 0x15, 0xf1, 0x70, 0x3c, 0xda, + 0x43, 0xd6, 0x09, 0x49, 0xc8, 0x3b, 0x30, 0x5e, 0xea, 0x06, 0xae, 0x60, 0x2c, 0xac, 0xc2, 0x23, + 0xfb, 0x6d, 0xf1, 0x29, 0xda, 0xd5, 0x27, 0x42, 0x37, 0xfe, 0x34, 0x07, 0xe7, 0x93, 0xc3, 0x2b, + 0x4a, 0xc3, 0xf5, 0x91, 0x39, 0x61, 0x7d, 0xa4, 0xcd, 0x86, 0x6c, 0x94, 0x77, 0xe1, 0x69, 0xcc, + 0x06, 0x9e, 0x47, 0xf8, 0x23, 0xce, 0x86, 0x1a, 0x8c, 0xab, 0xe7, 0xdd, 0xd0, 0x47, 0x3d, 0xef, + 0x54, 0x2e, 0xec, 0x52, 0xcf, 0x43, 0x67, 0x0c, 0x47, 0x4f, 0x47, 0xf1, 0xa8, 0x19, 0x1c, 0x83, + 0xfc, 0x5b, 0x70, 0x89, 0xef, 0x49, 0xf1, 0xc6, 0x2e, 0x1d, 0x4a, 0x8e, 0x62, 0xe0, 0x16, 0x8f, + 0x8f, 0x8a, 0xd7, 0xb8, 0xaa, 0xc4, 0x4a, 0x74, 0x9b, 0xb5, 0x7d, 0x68, 0xc9, 0x2f, 0x53, 0x2a, + 0x39, 0x91, 0xb7, 0x51, 0x86, 0xf3, 0xa2, 0x34, 0x72, 0xda, 0x96, 0x85, 0x6c, 0x90, 0xf7, 0x23, + 0x6d, 0x17, 0x0e, 0x72, 0x4c, 0x91, 0x85, 0xe5, 0x98, 0x81, 0x58, 0xc9, 0x0e, 0xfb, 0x46, 0x9a, + 0xcf, 0x0d, 0x8f, 0xda, 0xcd, 0xc1, 0xba, 0xbb, 0x8d, 0xd4, 0xa9, 0x65, 0x53, 0x75, 0x6a, 0x52, + 0x29, 0x93, 0x4b, 0x55, 0xca, 0x54, 0x60, 0xba, 0xd6, 0xdd, 0x96, 0x75, 0xc7, 0xfd, 0x35, 0xfd, + 0xee, 0x76, 0x5a, 0xaf, 0xc4, 0x49, 0x8c, 0x1f, 0xcd, 0xc2, 0xc4, 0x7a, 0xb3, 0xbb, 0xeb, 0xb4, + 0x2b, 0x76, 0x60, 0x3f, 0xb3, 0x6a, 0xbe, 0xb7, 0x34, 0x35, 0x5f, 0xe8, 0x5a, 0x16, 0x36, 0x6c, + 0x20, 0x1d, 0xdf, 0xcf, 0x64, 0x60, 0x3a, 0x22, 0xe1, 0x87, 0xf5, 0x0a, 0x0c, 0xb1, 0x1f, 0xe2, + 0xf2, 0x7b, 0x29, 0xc1, 0x98, 0xa7, 0x24, 0x0c, 0xff, 0x12, 0x8a, 0x37, 0x3d, 0xdf, 0x17, 0x72, + 0x58, 0xf8, 0x2c, 0x8c, 0x45, 0x6c, 0x4f, 0x93, 0x8a, 0xf0, 0xd7, 0x32, 0x50, 0x88, 0xb7, 0x84, + 0xdc, 0x83, 0x51, 0xc6, 0xc9, 0xa1, 0xf2, 0x5e, 0xfe, 0x72, 0x8f, 0x36, 0x5f, 0x13, 0x68, 0xfc, + 0xf3, 0xb0, 0xf3, 0x29, 0x87, 0x98, 0x92, 0xc3, 0x82, 0x09, 0x13, 0x2a, 0x56, 0xca, 0xd7, 0xbd, + 0xae, 0x4b, 0x28, 0x67, 0xd3, 0xfb, 0x41, 0x4b, 0xa0, 0xa8, 0x7d, 0xb5, 0x10, 0x3e, 0x2e, 0x6b, + 0x93, 0x2b, 0x75, 0x55, 0xe1, 0xa4, 0x59, 0x8c, 0x12, 0x09, 0xa8, 0xf3, 0x2c, 0x65, 0x42, 0x87, + 0x78, 0xe4, 0x75, 0x18, 0xe1, 0xf5, 0xa9, 0x89, 0xc4, 0x3a, 0x08, 0x51, 0xe5, 0x64, 0x8e, 0x63, + 0xfc, 0xbd, 0x1c, 0x9c, 0x8d, 0x3e, 0x6f, 0xb3, 0xd3, 0xb0, 0x03, 0xba, 0x6e, 0x7b, 0x76, 0xcb, + 0x3f, 0x61, 0x05, 0x5c, 0x49, 0x7c, 0x1a, 0x26, 0x96, 0x92, 0x9f, 0xa6, 0x7c, 0x90, 0x11, 0xfb, + 0x20, 0xd4, 0x81, 0xf2, 0x0f, 0x92, 0x9f, 0x41, 0xee, 0x41, 0xae, 0x46, 0x03, 0xb1, 0xf7, 0x5e, + 0x4e, 0xf4, 0xaa, 0xfa, 0x5d, 0xd7, 0x6a, 0x34, 0xe0, 0x83, 0xc8, 0xe3, 0x42, 0x69, 0xc1, 0xf9, + 0x18, 0x17, 0xb2, 0x05, 0x23, 0xcb, 0x8f, 0x3b, 0xb4, 0x1e, 0x88, 0x44, 0x9a, 0x57, 0xfb, 0xf3, + 0xe3, 0xb8, 0x4a, 0x1e, 0x4d, 0x8a, 0x00, 0xb5, 0xb3, 0x38, 0xca, 0xc2, 0x2d, 0xc8, 0xcb, 0xca, + 0x4f, 0x33, 0x73, 0x17, 0xde, 0x82, 0x71, 0xa5, 0x92, 0x53, 0x4d, 0xfa, 0x5f, 0x60, 0xfb, 0xaa, + 0xdb, 0x94, 0xb9, 0x37, 0x97, 0x13, 0xb2, 0xa2, 0x92, 0x9b, 0x89, 0xcb, 0x8a, 0xd6, 0xbe, 0x28, + 0xea, 0x23, 0x34, 0x56, 0x61, 0xba, 0xb6, 0xef, 0x74, 0xa2, 0x40, 0xb1, 0xda, 0x89, 0x8c, 0x39, + 0x64, 0xc4, 0xc5, 0x3d, 0x7e, 0x22, 0xc7, 0xe9, 0x8c, 0xbf, 0xc8, 0xc0, 0x08, 0xfb, 0xeb, 0xe1, + 0xad, 0x67, 0x74, 0xcb, 0xbc, 0xa9, 0x6d, 0x99, 0x33, 0x4a, 0xac, 0x76, 0xdc, 0x38, 0x6e, 0x9d, + 0xb0, 0x59, 0x1e, 0x89, 0x01, 0xe2, 0xc8, 0xe4, 0x0e, 0x8c, 0x0a, 0x93, 0x22, 0x61, 0xfb, 0xad, + 0x06, 0x7f, 0x97, 0xc6, 0x46, 0xe1, 0x0d, 0xdf, 0xed, 0xc4, 0x55, 0x22, 0x92, 0x9a, 0xc9, 0xf5, + 0x32, 0x64, 0xaf, 0x96, 0xb1, 0xd9, 0x45, 0x67, 0x3d, 0x1e, 0xba, 0x5c, 0xc9, 0xb1, 0xde, 0xc3, + 0xb7, 0xbe, 0x24, 0x5e, 0x43, 0x72, 0xfd, 0x98, 0x9c, 0x95, 0x09, 0x6d, 0x53, 0x1f, 0x4a, 0xfe, + 0xe8, 0x0c, 0x0f, 0xf8, 0x2d, 0x3f, 0xec, 0x5d, 0x98, 0xb8, 0xed, 0x7a, 0x07, 0xb6, 0xc7, 0xc3, + 0xb8, 0x0a, 0xf3, 0x03, 0x76, 0xff, 0x9c, 0xdc, 0xe1, 0x70, 0x1e, 0x08, 0xf6, 0xbb, 0x47, 0xc5, + 0xa1, 0x25, 0xd7, 0x6d, 0x9a, 0x1a, 0x3a, 0x79, 0x00, 0x93, 0xf7, 0xed, 0xc7, 0xca, 0xcd, 0x99, + 0x7b, 0xdf, 0x5c, 0x65, 0x13, 0x98, 0x5d, 0xbd, 0x4f, 0xb6, 0xef, 0xd2, 0xe9, 0x31, 0xaf, 0x94, + 0xeb, 0x05, 0xa2, 0x12, 0xa7, 0xbd, 0x2b, 0x1a, 0x9b, 0xb4, 0x50, 0xbb, 0x9e, 0x6a, 0xa1, 0x76, + 0xbe, 0xe3, 0x7a, 0x81, 0xb5, 0x13, 0x92, 0x6b, 0x01, 0xd5, 0x34, 0xc6, 0xe4, 0x5d, 0x98, 0x51, + 0x62, 0x4d, 0xde, 0x76, 0xbd, 0x96, 0x2d, 0x25, 0x7b, 0x54, 0x26, 0xa3, 0xd1, 0xca, 0x0e, 0x82, + 0xcd, 0x24, 0x26, 0xf9, 0x72, 0x9a, 0x3f, 0xd3, 0x70, 0x64, 0xe2, 0x96, 0xe2, 0xcf, 0xd4, 0xcb, + 0xc4, 0x2d, 0xe9, 0xd9, 0xb4, 0xdb, 0xcf, 0x04, 0x36, 0xbf, 0x74, 0x43, 0xdc, 0xe1, 0x4f, 0x36, + 0x71, 0x0d, 0xc7, 0xad, 0x87, 0xa9, 0xeb, 0x22, 0xe4, 0x96, 0xd6, 0x6f, 0xe3, 0x13, 0x88, 0xb4, + 0xd6, 0x69, 0xef, 0xd9, 0xed, 0x3a, 0x4a, 0xdc, 0xc2, 0xec, 0x5c, 0xdd, 0x91, 0x97, 0xd6, 0x6f, + 0x13, 0x1b, 0x66, 0x31, 0x45, 0x57, 0xf0, 0xa5, 0x1b, 0x37, 0x94, 0x81, 0xca, 0xe3, 0xa7, 0x5d, + 0x17, 0x9f, 0x56, 0xc4, 0x04, 0x5f, 0x81, 0xf5, 0xf8, 0xc6, 0x8d, 0xd4, 0xe1, 0x08, 0x3f, 0x2c, + 0x8d, 0x17, 0xdb, 0x19, 0xef, 0xdb, 0x8f, 0x23, 0x6f, 0x01, 0x5f, 0x78, 0x86, 0x5e, 0x90, 0x13, + 0x2b, 0xf2, 0x34, 0xd0, 0x76, 0x46, 0x9d, 0x88, 0x5d, 0x98, 0xa2, 0xe9, 0xe5, 0x0b, 0x9f, 0x9a, + 0x05, 0xa9, 0x17, 0x92, 0xee, 0xc3, 0xaa, 0xd4, 0xaf, 0xa0, 0x93, 0xcd, 0xf0, 0xda, 0xc7, 0xaf, + 0x4d, 0x22, 0x5d, 0xeb, 0x75, 0xf5, 0xda, 0xc7, 0xb5, 0x31, 0x5a, 0xb3, 0xa6, 0x43, 0x5d, 0x01, + 0x77, 0x9f, 0x30, 0x75, 0x2e, 0xc9, 0xdb, 0xe4, 0xc4, 0xe9, 0x6f, 0x93, 0x14, 0x86, 0x56, 0xdd, + 0xfa, 0xbe, 0x88, 0x02, 0xf7, 0x45, 0xb6, 0xdc, 0x9b, 0x6e, 0x7d, 0xff, 0xe9, 0x99, 0xf6, 0x22, + 0x7b, 0xb2, 0xc6, 0x3e, 0x95, 0xcd, 0x02, 0xd1, 0x27, 0xc2, 0x5c, 0x74, 0x2e, 0xbc, 0x4e, 0x29, + 0x65, 0x5c, 0xf0, 0xe1, 0x93, 0x46, 0x76, 0xad, 0xa9, 0x93, 0x13, 0x0a, 0x85, 0x0a, 0xf5, 0xf7, + 0x03, 0xb7, 0x53, 0x6e, 0x3a, 0x9d, 0x6d, 0xd7, 0xf6, 0x64, 0xcc, 0xe0, 0xe4, 0xfa, 0x7e, 0x35, + 0x75, 0x7d, 0xcf, 0x34, 0x38, 0xbd, 0x55, 0x97, 0x0c, 0xcc, 0x04, 0x4b, 0xf2, 0x65, 0x98, 0x62, + 0x93, 0x7b, 0xf9, 0x71, 0x40, 0xdb, 0x7c, 0xe4, 0x67, 0x50, 0x74, 0x98, 0x53, 0x92, 0x64, 0x84, + 0x85, 0x7c, 0x4e, 0xe1, 0x62, 0xa7, 0x21, 0x81, 0x16, 0x41, 0x4f, 0x63, 0x45, 0x1a, 0x30, 0x7f, + 0xdf, 0x7e, 0xac, 0x24, 0x99, 0x55, 0x26, 0x29, 0xc1, 0x09, 0x76, 0xe5, 0xf8, 0xa8, 0xf8, 0x32, + 0x9b, 0x60, 0x51, 0x18, 0xeb, 0x1e, 0xf3, 0xb5, 0x27, 0x27, 0xf2, 0x2d, 0x38, 0x27, 0x9a, 0x55, + 0xc1, 0xcc, 0x51, 0xae, 0x77, 0x58, 0xdb, 0xb3, 0xd1, 0x51, 0x68, 0xf6, 0x74, 0x1b, 0xa2, 0xec, + 0xb0, 0x86, 0xe4, 0x63, 0xf9, 0x9c, 0x91, 0xd9, 0xab, 0x06, 0xf2, 0x21, 0x4c, 0xf1, 0x77, 0x9f, + 0x15, 0xd7, 0x0f, 0x50, 0x2b, 0x30, 0x77, 0x3a, 0xfb, 0x77, 0xfe, 0x98, 0xc4, 0x3d, 0x46, 0x62, + 0x5a, 0x84, 0x18, 0x67, 0xf2, 0x36, 0x8c, 0xaf, 0x3b, 0x6d, 0x1e, 0xe3, 0xb2, 0xba, 0x8e, 0xfa, + 0x4b, 0x71, 0xfe, 0x74, 0x9c, 0xb6, 0x25, 0xaf, 0xe6, 0x9d, 0x70, 0xbb, 0x50, 0xb1, 0xc9, 0x16, + 0x8c, 0xd7, 0x6a, 0x2b, 0xb7, 0x1d, 0x76, 0x00, 0x76, 0x0e, 0xe7, 0xcf, 0xf6, 0xf8, 0xca, 0x97, + 0x52, 0xbf, 0x72, 0xd2, 0xf7, 0xf7, 0xac, 0x1d, 0xa7, 0x49, 0xad, 0xba, 0xdb, 0x39, 0x34, 0x55, + 0x4e, 0x29, 0x36, 0xe1, 0xe7, 0x9e, 0xb2, 0x4d, 0x78, 0x15, 0xa6, 0x15, 0x2b, 0x4d, 0xb4, 0xd0, + 0x9c, 0x8f, 0x02, 0x23, 0xa9, 0x36, 0xe0, 0x71, 0x1f, 0xc8, 0x38, 0x9d, 0x34, 0x06, 0x3f, 0x7f, + 0x5a, 0x63, 0x70, 0x07, 0x66, 0xf8, 0x60, 0x88, 0x79, 0x80, 0x23, 0xbd, 0xd0, 0xa3, 0x0f, 0xaf, + 0xa6, 0xf6, 0xe1, 0xac, 0x18, 0x69, 0x39, 0xc9, 0xf0, 0x9d, 0x33, 0xc9, 0x95, 0xec, 0x00, 0x11, + 0x40, 0x3b, 0xb0, 0xb7, 0x6d, 0x9f, 0x62, 0x5d, 0xcf, 0xf7, 0xa8, 0xeb, 0xe5, 0xd4, 0xba, 0xa6, + 0x64, 0x5d, 0xdb, 0xbc, 0x9a, 0x14, 0x8e, 0xa4, 0x2d, 0xeb, 0x91, 0xf3, 0x0b, 0x3b, 0xf6, 0x05, + 0x4d, 0x99, 0x9a, 0x44, 0xe0, 0x31, 0x86, 0xe2, 0x93, 0x36, 0xde, 0xef, 0x29, 0x9c, 0xc9, 0x63, + 0x38, 0x9b, 0xfc, 0x0a, 0xac, 0xf3, 0x02, 0xd6, 0x79, 0x41, 0xab, 0x33, 0x8e, 0xc4, 0xe7, 0x8d, + 0xde, 0xac, 0x78, 0xad, 0x3d, 0xf8, 0x93, 0x1f, 0xca, 0xc0, 0xb9, 0xfb, 0xb7, 0x4b, 0x98, 0x08, + 0xd2, 0xe1, 0x21, 0xcf, 0x42, 0xdf, 0xd1, 0x8b, 0x42, 0xe1, 0x1e, 0x7f, 0x04, 0x90, 0x12, 0x07, + 0x6e, 0x15, 0x4c, 0x46, 0x7c, 0xa9, 0xb5, 0x63, 0xf3, 0xfc, 0x92, 0x82, 0x45, 0x8a, 0x83, 0xe9, + 0xb7, 0xff, 0xb8, 0x98, 0x31, 0x7b, 0x55, 0x45, 0x9a, 0xb0, 0xa0, 0x77, 0x8b, 0x34, 0xd7, 0xdf, + 0xa3, 0xcd, 0xe6, 0x7c, 0x11, 0x67, 0xf4, 0xeb, 0xc7, 0x47, 0xc5, 0x2b, 0x89, 0xde, 0x0d, 0x5d, + 0x00, 0x18, 0xa6, 0xd2, 0xe0, 0x3e, 0xfc, 0xee, 0x0e, 0xe5, 0x27, 0x0b, 0x53, 0x29, 0xc6, 0xea, + 0xc6, 0x6f, 0x65, 0x63, 0x27, 0x15, 0xa9, 0xc2, 0xa8, 0x98, 0x80, 0x42, 0x74, 0x4f, 0x4e, 0xb3, + 0x0b, 0xa9, 0xd3, 0x6c, 0x54, 0xcc, 0x65, 0x53, 0xd2, 0x93, 0x03, 0xc6, 0x0a, 0xbf, 0x42, 0xdc, + 0x75, 0xbe, 0xca, 0x0f, 0x22, 0x04, 0x69, 0x47, 0x6e, 0xe5, 0xf4, 0x2e, 0x58, 0xba, 0x87, 0x1f, + 0x9e, 0xbd, 0xb2, 0x36, 0xb2, 0xcf, 0x93, 0x08, 0xe5, 0x42, 0x3f, 0x1e, 0x3d, 0x63, 0xd0, 0x53, + 0xab, 0x90, 0xd5, 0x62, 0xfc, 0x66, 0x06, 0x26, 0xb5, 0xa3, 0x8e, 0xdc, 0x52, 0x9c, 0xd4, 0x22, + 0xbf, 0x6d, 0x0d, 0x07, 0x77, 0xbf, 0xb8, 0xfb, 0xda, 0x2d, 0x61, 0x71, 0x9e, 0xed, 0x4d, 0x87, + 0xb3, 0x3f, 0xee, 0xb3, 0xd8, 0x5f, 0x33, 0x18, 0xa6, 0x26, 0x1c, 0xea, 0x91, 0x9a, 0xf0, 0xd7, + 0x5e, 0x80, 0x29, 0xfd, 0x2e, 0x44, 0x5e, 0x87, 0x11, 0xd4, 0xca, 0xca, 0x8b, 0x35, 0x2a, 0x04, + 0x50, 0x71, 0xab, 0xb9, 0x21, 0x70, 0x1c, 0xf2, 0x0a, 0x40, 0x68, 0xfa, 0x2b, 0xdf, 0x24, 0x86, + 0x8f, 0x8f, 0x8a, 0x99, 0x37, 0x4c, 0xa5, 0x80, 0x7c, 0x0d, 0x60, 0xcd, 0x6d, 0xd0, 0x30, 0x51, + 0x6c, 0x9f, 0x77, 0xf7, 0x57, 0x13, 0x09, 0x36, 0xce, 0xb4, 0xdd, 0x06, 0x4d, 0x66, 0xd3, 0x50, + 0x38, 0x92, 0xcf, 0xc3, 0xb0, 0xd9, 0x65, 0x97, 0x78, 0xae, 0x3f, 0x19, 0x97, 0x47, 0x4e, 0xb7, + 0x49, 0xa3, 0x1b, 0xa2, 0xd7, 0x8d, 0x9b, 0x94, 0x31, 0x00, 0x79, 0x9f, 0x27, 0xde, 0x10, 0xd1, + 0x21, 0x87, 0xa3, 0x57, 0x1a, 0x45, 0x14, 0x49, 0xc4, 0x87, 0x54, 0x48, 0xc8, 0x03, 0x18, 0x55, + 0x9f, 0x17, 0x14, 0x6f, 0x67, 0xf5, 0x09, 0x4a, 0xb9, 0x6e, 0x8a, 0x0c, 0xb3, 0xf1, 0x97, 0x07, + 0xc9, 0x85, 0xbc, 0x03, 0x63, 0x8c, 0x3d, 0x5b, 0xca, 0xbe, 0xb8, 0x66, 0xe0, 0x5b, 0x8c, 0xf2, + 0x41, 0x6c, 0x3b, 0xd0, 0x62, 0x38, 0x86, 0x04, 0xe4, 0xcb, 0x98, 0x5a, 0x54, 0x74, 0x75, 0x5f, + 0x7b, 0x8c, 0xcb, 0x89, 0xae, 0xc6, 0x5c, 0xa3, 0x89, 0x9e, 0x8e, 0xf8, 0x91, 0xdd, 0x30, 0xd8, + 0xd6, 0x20, 0xc9, 0x52, 0x5e, 0x4b, 0x54, 0x30, 0x2f, 0xe3, 0x47, 0x25, 0x13, 0xfe, 0x6a, 0x7c, + 0x49, 0x07, 0x0a, 0x91, 0x94, 0x27, 0xea, 0x82, 0x7e, 0x75, 0xbd, 0x91, 0xa8, 0x4b, 0x1d, 0xc0, + 0x44, 0x75, 0x09, 0xee, 0xa4, 0x01, 0x53, 0xf2, 0xc4, 0x10, 0xf5, 0x8d, 0xf7, 0xab, 0xef, 0x95, + 0x44, 0x7d, 0xb3, 0x8d, 0xed, 0x64, 0x3d, 0x31, 0x9e, 0xe4, 0x1d, 0x98, 0x94, 0x10, 0x9e, 0x7e, + 0x77, 0x22, 0x4a, 0x83, 0xda, 0xd8, 0x4e, 0x24, 0xdd, 0xd5, 0x91, 0x55, 0x6a, 0x3e, 0x3b, 0x26, + 0x35, 0xea, 0xf8, 0xac, 0xd0, 0x91, 0xc9, 0x07, 0x30, 0x5e, 0x6d, 0xb1, 0x86, 0xb8, 0x6d, 0x3b, + 0xa0, 0xc2, 0x13, 0x4e, 0xda, 0x96, 0x28, 0x25, 0xca, 0x54, 0xe5, 0x89, 0x85, 0xa3, 0x22, 0x2d, + 0xb1, 0x70, 0x04, 0x66, 0x9d, 0xc7, 0xdf, 0x93, 0xc4, 0x1c, 0x96, 0x5e, 0x72, 0x17, 0x52, 0xec, + 0x3b, 0x14, 0xf6, 0x22, 0x12, 0x20, 0x83, 0xca, 0xf7, 0x9c, 0x58, 0x14, 0x56, 0x95, 0x27, 0x79, + 0x17, 0xc6, 0x45, 0x1e, 0xa9, 0x92, 0xb9, 0xe6, 0xcf, 0x17, 0xb0, 0xf1, 0xe8, 0xdb, 0x2f, 0x53, + 0x4e, 0x59, 0xb6, 0x17, 0x33, 0x64, 0x8c, 0xf0, 0xc9, 0x97, 0x60, 0x6e, 0xcb, 0x69, 0x37, 0xdc, + 0x03, 0x5f, 0x1c, 0x53, 0x62, 0xa3, 0x9b, 0x89, 0xdc, 0x88, 0x0e, 0x78, 0x79, 0x28, 0x9c, 0x25, + 0x36, 0xbe, 0x54, 0x0e, 0xe4, 0x7b, 0x13, 0x9c, 0xf9, 0x0c, 0x22, 0xfd, 0x66, 0xd0, 0x62, 0x62, + 0x06, 0x25, 0xab, 0x8f, 0x4f, 0xa7, 0xd4, 0x6a, 0x88, 0x0b, 0x44, 0x3f, 0xdf, 0xef, 0xba, 0x4e, + 0x7b, 0x7e, 0x16, 0xf7, 0xc2, 0xe7, 0xe3, 0xde, 0xf4, 0x88, 0x27, 0x12, 0x34, 0x1b, 0xc7, 0x47, + 0xc5, 0x8b, 0x71, 0x21, 0xfc, 0x43, 0x57, 0x53, 0x94, 0xa7, 0xb0, 0x26, 0x1f, 0xc0, 0x04, 0xfb, + 0x3f, 0xd4, 0x12, 0xcc, 0x69, 0x16, 0x81, 0x0a, 0xa6, 0xa8, 0x07, 0xc7, 0x08, 0x13, 0x5d, 0xa5, + 0x28, 0x10, 0x34, 0x56, 0xe4, 0x2d, 0x00, 0x26, 0xc7, 0x88, 0xed, 0xf8, 0x4c, 0x14, 0xf4, 0x16, + 0xc5, 0xa0, 0xe4, 0x46, 0x1c, 0x21, 0x93, 0x77, 0x60, 0x9c, 0xfd, 0xaa, 0x75, 0x1b, 0x2e, 0x5b, + 0x1b, 0x67, 0x91, 0x96, 0x3b, 0x25, 0x32, 0x5a, 0x9f, 0xc3, 0x35, 0xa7, 0xc4, 0x08, 0x9d, 0xac, + 0xc0, 0x34, 0x06, 0x27, 0x16, 0x61, 0x31, 0x1d, 0xea, 0xcf, 0x9f, 0x53, 0xde, 0xc1, 0x59, 0x91, + 0xe5, 0x84, 0x65, 0xea, 0xe5, 0x22, 0x46, 0x46, 0x7c, 0x98, 0x4d, 0x3e, 0x24, 0xfa, 0xf3, 0xf3, + 0xd8, 0x49, 0x52, 0xa4, 0x4e, 0x62, 0xf0, 0xfd, 0x98, 0x8d, 0x88, 0xb2, 0x71, 0xc9, 0xe7, 0x04, + 0xb5, 0xc2, 0x34, 0xee, 0xc4, 0x04, 0x72, 0xa7, 0xbc, 0x1e, 0x8f, 0xde, 0x7b, 0x1e, 0x5b, 0x80, + 0xc3, 0xbc, 0x5b, 0x8f, 0x12, 0x3b, 0xa7, 0x44, 0xf0, 0x4d, 0xa1, 0x26, 0xdf, 0x84, 0x33, 0x72, + 0x07, 0x11, 0x45, 0x62, 0x5e, 0x2f, 0x9c, 0x72, 0x27, 0x6e, 0x6c, 0x87, 0x55, 0x27, 0xa6, 0x74, + 0x7a, 0x15, 0xc4, 0x86, 0x71, 0x1c, 0x56, 0x51, 0xe3, 0xf3, 0xfd, 0x6a, 0xbc, 0x92, 0xa8, 0xf1, + 0x2c, 0x4e, 0x94, 0x64, 0x65, 0x2a, 0x4f, 0xb2, 0x04, 0x93, 0x62, 0x1d, 0x89, 0xd9, 0xf6, 0x02, + 0xf6, 0x16, 0x6a, 0x95, 0xe4, 0x0a, 0x4c, 0x4c, 0x38, 0x9d, 0x44, 0xdd, 0x91, 0xf9, 0x33, 0xc2, + 0x05, 0x6d, 0x47, 0x8e, 0xbf, 0x1e, 0xe8, 0xc8, 0x6c, 0x47, 0x8a, 0xa4, 0x98, 0xe5, 0xc7, 0x1d, + 0x4f, 0xe8, 0x8c, 0x2e, 0x46, 0xf9, 0x70, 0x14, 0xe1, 0xc7, 0xa2, 0x21, 0x86, 0xba, 0x25, 0xa4, + 0x71, 0x20, 0x9b, 0x30, 0x1b, 0x9e, 0xda, 0x0a, 0xe3, 0x62, 0x14, 0x1f, 0x36, 0x3a, 0xea, 0xd3, + 0xf9, 0xa6, 0xd1, 0x13, 0x1b, 0xce, 0x69, 0xe7, 0xb4, 0xc2, 0xfa, 0x12, 0xb2, 0xc6, 0x44, 0xe2, + 0xfa, 0x21, 0x9f, 0xce, 0xbe, 0x17, 0x1f, 0xf2, 0x21, 0x2c, 0xc4, 0xcf, 0x66, 0xa5, 0x96, 0x17, + 0xb1, 0x96, 0xd7, 0x8e, 0x8f, 0x8a, 0x97, 0x13, 0xc7, 0x7b, 0x7a, 0x45, 0x7d, 0xb8, 0x91, 0xaf, + 0xc1, 0xbc, 0x7e, 0x3e, 0x2b, 0x35, 0x19, 0x58, 0x13, 0x2e, 0x9d, 0xf0, 0x60, 0x4f, 0xaf, 0xa1, + 0x27, 0x0f, 0x12, 0x40, 0x31, 0x75, 0x76, 0x2b, 0xd5, 0xbc, 0x14, 0x35, 0x28, 0xb1, 0x4a, 0xd2, + 0xab, 0x3b, 0x89, 0x25, 0x39, 0x80, 0x8b, 0x69, 0xc7, 0x84, 0x52, 0xe9, 0xcb, 0xa1, 0x56, 0xf6, + 0x53, 0xe9, 0x47, 0x4e, 0x7a, 0xcd, 0x27, 0xb0, 0x25, 0x5f, 0x86, 0x33, 0xca, 0xfa, 0x52, 0xea, + 0x7b, 0x05, 0xeb, 0x43, 0x27, 0x60, 0x75, 0x61, 0xa6, 0xd7, 0x92, 0xce, 0x83, 0xb4, 0x60, 0x56, + 0x36, 0x1c, 0xd5, 0xdf, 0xe2, 0xe8, 0xb9, 0xac, 0xed, 0xaa, 0x49, 0x8c, 0xa5, 0x4b, 0x62, 0x57, + 0x9d, 0x6f, 0x6c, 0x5b, 0x9d, 0x88, 0x50, 0x9d, 0xe9, 0x29, 0x7c, 0xc9, 0x0a, 0x8c, 0xd4, 0xd6, + 0xab, 0xb7, 0x6f, 0x2f, 0xcf, 0xbf, 0x8a, 0x35, 0x48, 0x8f, 0x21, 0x0e, 0xd4, 0x2e, 0x4d, 0xc2, + 0x50, 0xad, 0xe3, 0xec, 0xec, 0x68, 0x8e, 0x59, 0x1c, 0x95, 0x7c, 0x2f, 0x9a, 0x88, 0xb1, 0x1d, + 0xb5, 0xe4, 0xfb, 0xce, 0x2e, 0xc6, 0x1b, 0xf6, 0xe7, 0x5f, 0xd3, 0x5e, 0x7a, 0x65, 0x2c, 0xe6, + 0x32, 0xa6, 0xaa, 0x4a, 0xa0, 0x73, 0x69, 0xf3, 0xf8, 0xa8, 0x78, 0x41, 0xec, 0xdc, 0x96, 0x1d, + 0xb1, 0x52, 0x37, 0xf1, 0x64, 0x45, 0x77, 0x87, 0xf2, 0x57, 0x0a, 0x57, 0xef, 0x0e, 0xe5, 0xaf, + 0x16, 0x5e, 0x33, 0x5f, 0x48, 0xcf, 0xdd, 0xcf, 0xfb, 0xda, 0xbc, 0xdc, 0xaf, 0x34, 0x1a, 0x09, + 0xe3, 0xef, 0x64, 0xa0, 0x78, 0xc2, 0x07, 0xb3, 0xbd, 0x35, 0xea, 0xcd, 0x1a, 0x0d, 0xd4, 0xf8, + 0xd1, 0xd1, 0x28, 0x58, 0xfa, 0xe3, 0xb5, 0x4e, 0x82, 0xae, 0x4f, 0x22, 0x69, 0x81, 0xe2, 0x01, + 0x97, 0x4c, 0x56, 0x20, 0xb1, 0x8c, 0x5f, 0xc8, 0xc0, 0x6c, 0xca, 0xf8, 0x90, 0xcb, 0x30, 0x84, + 0x59, 0x88, 0x14, 0x6b, 0x83, 0x58, 0xf6, 0x21, 0x2c, 0x27, 0x9f, 0x86, 0xd1, 0xca, 0x5a, 0xad, + 0x56, 0x5a, 0x93, 0x57, 0x59, 0xbe, 0x8d, 0xb7, 0x7d, 0xcb, 0xb7, 0xf5, 0x47, 0x4a, 0x81, 0x46, + 0xde, 0x80, 0x91, 0xea, 0x3a, 0x12, 0x70, 0x9b, 0x39, 0xfc, 0x42, 0xa7, 0x13, 0xc7, 0x17, 0x48, + 0xc6, 0x8f, 0x67, 0x80, 0x24, 0x27, 0x1b, 0xb9, 0x01, 0xe3, 0xea, 0x94, 0xe6, 0x17, 0x6f, 0x7c, + 0x50, 0x53, 0x26, 0xac, 0xa9, 0xe2, 0x90, 0x0a, 0x0c, 0x63, 0xfe, 0xc8, 0xf0, 0x75, 0x34, 0xf5, + 0x60, 0x3c, 0x97, 0x38, 0x18, 0x87, 0x31, 0x3b, 0xa5, 0xc9, 0x89, 0x8d, 0xdf, 0xcd, 0x00, 0x49, + 0xb7, 0x79, 0x1a, 0xc8, 0x3a, 0xe3, 0x4d, 0xc5, 0xe7, 0x59, 0xcd, 0x33, 0x12, 0x26, 0x89, 0x52, + 0x2f, 0x91, 0x91, 0x77, 0xf4, 0x65, 0x4d, 0x69, 0xd1, 0xdb, 0x51, 0xee, 0x2a, 0x0c, 0x3f, 0xa4, + 0xde, 0xb6, 0x34, 0x07, 0x45, 0x13, 0xb2, 0x47, 0x0c, 0xa0, 0x5e, 0xe2, 0x11, 0xc3, 0xf8, 0xd3, + 0x0c, 0xcc, 0xa5, 0x49, 0xb8, 0x27, 0xf8, 0xb3, 0x19, 0x31, 0x57, 0x3c, 0xb4, 0xcc, 0xe0, 0xf6, + 0x65, 0xa1, 0x03, 0x5e, 0x11, 0x86, 0x59, 0x63, 0xe5, 0x08, 0xa3, 0x12, 0x85, 0xf5, 0x86, 0x6f, + 0x72, 0x38, 0x43, 0xe0, 0xb1, 0xbd, 0x86, 0x30, 0x2c, 0x1c, 0x22, 0xe0, 0x7c, 0x34, 0x39, 0x9c, + 0x21, 0xdc, 0x77, 0x1b, 0x61, 0xea, 0x74, 0x44, 0x68, 0x31, 0x80, 0xc9, 0xe1, 0xe4, 0x32, 0x8c, + 0x3e, 0x68, 0xaf, 0x52, 0xfb, 0x91, 0x8c, 0x75, 0x8f, 0x96, 0x24, 0x6e, 0xdb, 0x6a, 0x32, 0x98, + 0x29, 0x0b, 0x8d, 0x9f, 0xc9, 0xc0, 0x4c, 0x42, 0xb8, 0x3e, 0xd9, 0x65, 0xaf, 0xbf, 0xef, 0xcc, + 0x20, 0xed, 0xe3, 0x9f, 0x3f, 0x94, 0xfe, 0xf9, 0xc6, 0x7f, 0x3f, 0x02, 0xe7, 0x7a, 0xe8, 0x3a, + 0x22, 0xdf, 0xbe, 0xcc, 0x89, 0xbe, 0x7d, 0x5f, 0x81, 0xc9, 0x72, 0xd3, 0x76, 0x5a, 0xfe, 0x86, + 0x1b, 0x7d, 0x71, 0xe4, 0x22, 0x80, 0x65, 0x32, 0x7b, 0xbc, 0xb4, 0x25, 0x3f, 0x5f, 0x47, 0x0a, + 0x2b, 0x70, 0x93, 0xa2, 0x96, 0xc6, 0x2c, 0xe1, 0x5d, 0x97, 0xfb, 0x2b, 0xe2, 0x5d, 0xa7, 0xfb, + 0x7b, 0x0c, 0x3d, 0x55, 0x7f, 0x8f, 0x74, 0x5b, 0xd1, 0xe1, 0x27, 0xb1, 0x1c, 0x2e, 0xc3, 0x24, + 0x37, 0xa5, 0x29, 0xf9, 0x7c, 0x90, 0x46, 0x12, 0xe6, 0x37, 0xb6, 0x9f, 0x1c, 0x0b, 0x8d, 0x86, + 0xac, 0xe8, 0xbe, 0x09, 0xa3, 0xf8, 0x04, 0x78, 0xb9, 0xb7, 0xef, 0x81, 0xf6, 0xf4, 0xaf, 0xf9, + 0x20, 0x7c, 0x0b, 0xe6, 0xd2, 0x2e, 0x4b, 0xf3, 0x79, 0xcd, 0x4a, 0xaf, 0xa7, 0x75, 0xe7, 0xe0, + 0x57, 0xae, 0xfd, 0xd4, 0x2b, 0x97, 0xf4, 0x19, 0x1d, 0xd3, 0x42, 0xc1, 0xf6, 0x58, 0x0b, 0x1c, + 0xb7, 0xbf, 0x67, 0xa9, 0xf1, 0x15, 0xb8, 0xd0, 0x97, 0x9c, 0xbc, 0xad, 0xc5, 0x26, 0x79, 0x35, + 0x19, 0x9b, 0xe4, 0xbb, 0x47, 0xc5, 0x19, 0xcd, 0xdf, 0xeb, 0x7e, 0xa8, 0x2e, 0x36, 0x7e, 0x26, + 0xab, 0x7b, 0x2a, 0xfe, 0x55, 0x5c, 0xa8, 0x57, 0x61, 0x78, 0x6b, 0x8f, 0x7a, 0xf2, 0x78, 0xc0, + 0x0f, 0x39, 0x60, 0x00, 0xf5, 0x43, 0x10, 0x83, 0xdc, 0x86, 0xa9, 0x75, 0x3e, 0x71, 0xe5, 0x6c, + 0x1c, 0x8a, 0x6e, 0xec, 0x1d, 0xa1, 0x57, 0x4a, 0x99, 0x8e, 0x31, 0x2a, 0xe3, 0x4e, 0xac, 0xd3, + 0x45, 0x64, 0x15, 0xee, 0x51, 0xc1, 0x05, 0x88, 0xa9, 0xc8, 0x87, 0x24, 0xda, 0x6c, 0xcd, 0x18, + 0xd4, 0xd8, 0x81, 0x8b, 0x7d, 0x19, 0xb1, 0x73, 0x1b, 0x3a, 0xe1, 0xaf, 0x98, 0xc5, 0x66, 0x5f, + 0x52, 0x53, 0xa1, 0x33, 0xbe, 0x05, 0x13, 0x6a, 0x2f, 0xe3, 0x11, 0xc4, 0x7e, 0x8b, 0x59, 0xc1, + 0x8f, 0x20, 0x06, 0x30, 0x39, 0x3c, 0x7a, 0x09, 0xc8, 0xa6, 0xbf, 0x04, 0x44, 0xc3, 0x9f, 0x3b, + 0x69, 0xf8, 0x59, 0xe5, 0xb8, 0xc3, 0x29, 0x95, 0xe3, 0x6f, 0xb5, 0x72, 0x0c, 0x9d, 0x62, 0x72, + 0xf8, 0x53, 0xad, 0xfc, 0x77, 0x64, 0x72, 0x24, 0x74, 0xd8, 0x90, 0xcb, 0x3d, 0x4a, 0x02, 0x3f, + 0x9b, 0xb6, 0x7a, 0x23, 0xcc, 0x48, 0xa6, 0xc8, 0x9e, 0x24, 0x53, 0x9c, 0x66, 0x22, 0xa2, 0xa4, + 0xca, 0x87, 0x74, 0x28, 0x92, 0x03, 0xed, 0x84, 0xf1, 0x82, 0xc4, 0x32, 0xbe, 0x9d, 0x81, 0x33, + 0xa9, 0x1a, 0x57, 0x56, 0x2b, 0x57, 0xed, 0x2a, 0xeb, 0x30, 0xae, 0xd7, 0xe5, 0x18, 0xa7, 0xf1, + 0x9b, 0x1f, 0xbc, 0x2d, 0xc6, 0x8b, 0x30, 0x16, 0xbe, 0xf7, 0x91, 0x39, 0x39, 0x74, 0x68, 0xe4, + 0x26, 0x9f, 0x8d, 0x6a, 0x00, 0xec, 0x0b, 0x9e, 0xaa, 0x49, 0xa6, 0xf1, 0x3b, 0x59, 0x9e, 0x38, + 0xf3, 0x99, 0x0d, 0x81, 0x99, 0x6e, 0x47, 0xc9, 0x9a, 0xd4, 0x3b, 0xf0, 0x25, 0x59, 0x86, 0x91, + 0x5a, 0x60, 0x07, 0x5d, 0xe9, 0xee, 0x3f, 0xab, 0x92, 0x61, 0xc1, 0xc3, 0xc5, 0xc8, 0xe1, 0xdb, + 0x47, 0x88, 0x76, 0xc7, 0x44, 0x88, 0x62, 0x8e, 0xf9, 0x07, 0x19, 0x98, 0x50, 0x89, 0xc9, 0x07, + 0x30, 0x25, 0x03, 0xfb, 0xf1, 0x20, 0x08, 0xe2, 0x71, 0x52, 0x5a, 0xf6, 0xc8, 0xc0, 0x7e, 0x6a, + 0xd0, 0x04, 0x0d, 0x5f, 0xdd, 0xaa, 0x3b, 0x2a, 0x32, 0x69, 0x00, 0x69, 0xed, 0xd8, 0xd6, 0x01, + 0xb5, 0xf7, 0xa9, 0x1f, 0x58, 0xdc, 0x02, 0x43, 0xbc, 0x61, 0x4a, 0xf6, 0xf7, 0x6f, 0x97, 0xb8, + 0xf1, 0x05, 0x1b, 0x09, 0x11, 0xa1, 0x31, 0x41, 0xa3, 0x3e, 0xcc, 0xb4, 0x76, 0xec, 0x2d, 0x5e, + 0xc8, 0xe9, 0x8c, 0x3f, 0x1b, 0xe1, 0xd3, 0x4d, 0xc4, 0x01, 0xdd, 0x86, 0xa9, 0x07, 0xd5, 0x4a, + 0x59, 0x51, 0xd3, 0xea, 0x69, 0x64, 0x96, 0x1f, 0x07, 0xd4, 0x6b, 0xdb, 0x4d, 0x79, 0x43, 0x8d, + 0x8e, 0x20, 0xd7, 0x69, 0xd4, 0xd3, 0x55, 0xb8, 0x31, 0x8e, 0xac, 0x0e, 0x7e, 0x17, 0x0e, 0xeb, + 0xc8, 0x0e, 0x58, 0x87, 0x6f, 0xb7, 0x9a, 0x3d, 0xea, 0xd0, 0x39, 0x92, 0x3d, 0x28, 0xdc, 0x41, + 0xe9, 0x52, 0xa9, 0x25, 0xd7, 0xbf, 0x96, 0x97, 0x44, 0x2d, 0xcf, 0x73, 0xb1, 0x34, 0xbd, 0x9e, + 0x04, 0xd7, 0x68, 0x9f, 0x18, 0x3a, 0x71, 0x9f, 0xf8, 0x5b, 0x19, 0x18, 0xe1, 0xe2, 0xab, 0x98, + 0xc6, 0x3d, 0x04, 0xe4, 0xad, 0xa7, 0x23, 0x20, 0x17, 0xf0, 0x9c, 0xd0, 0x26, 0x34, 0x2f, 0x23, + 0x95, 0xd8, 0xba, 0x90, 0x56, 0xc4, 0xf8, 0xe0, 0xc2, 0x4b, 0x4e, 0x5e, 0x16, 0xa4, 0x1a, 0xb9, + 0xe0, 0x8f, 0x9e, 0xe8, 0xe5, 0x29, 0xc3, 0x16, 0x8c, 0x0a, 0x17, 0x7c, 0xdd, 0xf1, 0x7e, 0x15, + 0xc6, 0x84, 0x63, 0xff, 0xd2, 0xa1, 0x78, 0x56, 0x2d, 0x68, 0x96, 0x2a, 0x8d, 0xa5, 0xc3, 0x48, + 0x34, 0x17, 0xa1, 0x01, 0xac, 0xed, 0x43, 0x2d, 0x0f, 0xa9, 0x44, 0x24, 0x0f, 0x78, 0x7e, 0x3e, + 0x1e, 0x29, 0x55, 0x0f, 0x8d, 0x1e, 0xc2, 0x45, 0xc8, 0x20, 0xe9, 0x1d, 0x9c, 0x12, 0x18, 0x35, + 0xe2, 0x41, 0x56, 0xa1, 0x80, 0xd6, 0x4d, 0xb4, 0xc1, 0x57, 0x4d, 0xb5, 0xc2, 0x9d, 0xc7, 0x85, + 0x85, 0x6a, 0xc0, 0xcb, 0xc4, 0x72, 0x8b, 0xf9, 0x6d, 0x25, 0x28, 0xd9, 0x75, 0xba, 0x10, 0x9f, + 0x7d, 0xe4, 0x1d, 0x18, 0x0f, 0x23, 0xd5, 0x86, 0x9e, 0xa3, 0xf8, 0xbc, 0x12, 0x85, 0xb6, 0xd5, + 0xb3, 0xba, 0x29, 0xe8, 0x64, 0x11, 0xf2, 0x6c, 0x11, 0xc7, 0x33, 0xa0, 0x76, 0x05, 0x4c, 0xf5, + 0xe4, 0x90, 0x78, 0xa4, 0x06, 0xb3, 0x6c, 0xd1, 0xd4, 0x9c, 0xf6, 0x6e, 0x93, 0xae, 0xba, 0xbb, + 0x6e, 0x37, 0x88, 0x92, 0x9c, 0xf1, 0x0b, 0x8c, 0xdd, 0x6a, 0x6a, 0xc5, 0x7a, 0x8a, 0xb3, 0x14, + 0x6a, 0x65, 0xab, 0xfc, 0xe3, 0x2c, 0x8c, 0x2b, 0xf3, 0x89, 0x5c, 0x85, 0x7c, 0xd5, 0x5f, 0x75, + 0xeb, 0xfb, 0x61, 0x4c, 0xb9, 0xc9, 0xe3, 0xa3, 0xe2, 0x98, 0xe3, 0x5b, 0x4d, 0x04, 0x9a, 0x61, + 0x31, 0x59, 0x82, 0x49, 0xfe, 0x97, 0xcc, 0x20, 0x90, 0x8d, 0xd4, 0x5b, 0x1c, 0x59, 0xe6, 0x0e, + 0x50, 0x77, 0x4f, 0x8d, 0x84, 0x7c, 0x15, 0x80, 0x03, 0xd0, 0x0b, 0x39, 0x37, 0xb8, 0xff, 0xb4, + 0xa8, 0x20, 0xc5, 0xff, 0x58, 0x61, 0x48, 0xbe, 0xce, 0x23, 0xdb, 0xca, 0xf9, 0x3f, 0x34, 0xb8, + 0x03, 0x38, 0xe3, 0x6f, 0xa5, 0xc7, 0xa1, 0x50, 0x59, 0x8a, 0xa4, 0x1f, 0x0b, 0x26, 0xad, 0xbb, + 0x8f, 0xa8, 0x77, 0x58, 0x0a, 0x10, 0x51, 0xc1, 0x30, 0xfe, 0xb7, 0x8c, 0xb2, 0x6a, 0xc8, 0x1a, + 0x26, 0xed, 0xe5, 0x33, 0x42, 0x58, 0x18, 0x85, 0x77, 0x06, 0x09, 0x37, 0xe9, 0xce, 0xd2, 0xf3, + 0xc2, 0x1e, 0x7a, 0x36, 0x9c, 0x57, 0xb1, 0x64, 0xbe, 0x1c, 0x48, 0xbe, 0x00, 0x43, 0xd8, 0x75, + 0xd9, 0x13, 0x9b, 0x26, 0x8f, 0xed, 0x21, 0xd6, 0x67, 0xd8, 0x10, 0xa4, 0x24, 0x9f, 0x16, 0x1e, + 0x9c, 0xbc, 0xf3, 0xa7, 0x94, 0xb3, 0x97, 0x7d, 0x47, 0x78, 0x5e, 0x47, 0xa1, 0x48, 0x94, 0xd9, + 0xf3, 0x77, 0xb2, 0x50, 0x88, 0xaf, 0x55, 0xf2, 0x3e, 0x4c, 0xc8, 0xf3, 0x74, 0xc5, 0x16, 0xe1, + 0xef, 0x27, 0x44, 0xf8, 0x79, 0x79, 0xa8, 0xee, 0xd9, 0xaa, 0x45, 0x92, 0xa9, 0x11, 0x30, 0xe1, + 0x66, 0x43, 0x84, 0x06, 0x53, 0x56, 0x49, 0xe0, 0x06, 0x9d, 0x58, 0x40, 0x55, 0x89, 0x46, 0xde, + 0x84, 0xdc, 0xfd, 0xdb, 0x25, 0xe1, 0xe9, 0x53, 0x88, 0x9f, 0xba, 0xdc, 0x92, 0x51, 0xb7, 0xab, + 0x64, 0xf8, 0x64, 0x55, 0x89, 0x3d, 0x3c, 0xa2, 0xe5, 0x1c, 0x93, 0xe0, 0xb0, 0x71, 0x27, 0x07, + 0x21, 0xbe, 0x3b, 0x94, 0xcf, 0x15, 0x86, 0x44, 0x34, 0xcd, 0xff, 0x31, 0x07, 0x63, 0x61, 0xfd, + 0x84, 0xa8, 0xfe, 0x93, 0xdc, 0x57, 0x92, 0x9c, 0x87, 0xbc, 0x14, 0xd7, 0x84, 0xc3, 0xcf, 0xa8, + 0x2f, 0x44, 0xb5, 0x79, 0x90, 0x72, 0x19, 0x5f, 0xe6, 0xa6, 0xfc, 0x49, 0x6e, 0x40, 0x28, 0x74, + 0xf5, 0x92, 0xce, 0x86, 0xd8, 0x80, 0x99, 0x21, 0x1a, 0x99, 0x82, 0xac, 0xc3, 0x23, 0x34, 0x8d, + 0x99, 0x59, 0xa7, 0x41, 0xde, 0x87, 0xbc, 0xdd, 0x68, 0xd0, 0x86, 0x65, 0x4b, 0x53, 0x9d, 0x7e, + 0x93, 0x26, 0xcf, 0xb8, 0xf1, 0x43, 0x00, 0xa9, 0x4a, 0x01, 0x29, 0xc1, 0x58, 0xd3, 0xe6, 0xd6, + 0x78, 0x8d, 0x01, 0x4e, 0x94, 0x88, 0x43, 0x9e, 0x91, 0x6d, 0xfa, 0xb4, 0x41, 0x5e, 0x85, 0x21, + 0x36, 0x9a, 0xe2, 0x08, 0x91, 0x52, 0x22, 0x1b, 0x4c, 0xde, 0x61, 0x2b, 0xcf, 0x99, 0x88, 0x40, + 0x5e, 0x86, 0x5c, 0x77, 0x71, 0x47, 0x1c, 0x0e, 0x85, 0x28, 0x0e, 0x78, 0x88, 0xc6, 0x8a, 0xc9, + 0x4d, 0xc8, 0x1f, 0xe8, 0x21, 0xa4, 0xcf, 0xc4, 0x86, 0x31, 0xc4, 0x0f, 0x11, 0xc9, 0xab, 0x90, + 0xf3, 0x7d, 0x57, 0xd8, 0xb7, 0xc8, 0x25, 0x58, 0xab, 0x3d, 0x08, 0x47, 0x8d, 0x71, 0xf7, 0x7d, + 0x77, 0x29, 0x0f, 0x23, 0xfc, 0xc4, 0x30, 0x2e, 0x02, 0x44, 0xdf, 0x98, 0x74, 0xe0, 0x32, 0xbe, + 0x0a, 0x63, 0xe1, 0xb7, 0x91, 0x0b, 0x00, 0xfb, 0xf4, 0xd0, 0xda, 0xb3, 0xdb, 0x8d, 0x26, 0x17, + 0x37, 0x27, 0xcc, 0xb1, 0x7d, 0x7a, 0xb8, 0x82, 0x00, 0x72, 0x0e, 0x46, 0x3b, 0x6c, 0xf8, 0xc5, + 0x1c, 0x9f, 0x30, 0x47, 0x3a, 0xdd, 0x6d, 0x36, 0x95, 0xe7, 0x61, 0x14, 0x15, 0xa7, 0x62, 0x45, + 0x4e, 0x9a, 0xf2, 0xa7, 0xf1, 0xe7, 0x39, 0xcc, 0xb3, 0xa2, 0x34, 0x88, 0xbc, 0x04, 0x93, 0x75, + 0x8f, 0xe2, 0xe1, 0x64, 0x33, 0x91, 0x4b, 0xd4, 0x33, 0x11, 0x01, 0xab, 0x0d, 0x72, 0x19, 0xa6, + 0x3b, 0xdd, 0xed, 0xa6, 0x53, 0x67, 0xb5, 0x59, 0xf5, 0x6d, 0x11, 0x18, 0x7e, 0xc2, 0x9c, 0xe4, + 0xe0, 0x7b, 0xf4, 0xb0, 0xbc, 0x8d, 0x21, 0xc8, 0x0a, 0x6a, 0x04, 0xd9, 0x20, 0xcc, 0x80, 0x6d, + 0x4e, 0x2b, 0x70, 0x34, 0xd5, 0x3b, 0x0b, 0x23, 0xb6, 0xbd, 0xdb, 0x75, 0x78, 0xa8, 0xa0, 0x09, + 0x53, 0xfc, 0x22, 0x9f, 0x82, 0x99, 0x28, 0xa8, 0xb1, 0x6c, 0xc6, 0x30, 0x36, 0xa3, 0x10, 0x16, + 0x94, 0x39, 0x9c, 0xbc, 0x01, 0x44, 0xad, 0xcf, 0xdd, 0xfe, 0x90, 0xd6, 0xf9, 0x9c, 0x9c, 0x30, + 0x67, 0x94, 0x92, 0x07, 0x58, 0x40, 0x5e, 0x84, 0x09, 0x8f, 0xfa, 0x28, 0xee, 0x61, 0xb7, 0x61, + 0x1a, 0x32, 0x73, 0x5c, 0xc2, 0x58, 0xdf, 0x5d, 0x81, 0x82, 0xd2, 0x1d, 0x18, 0xa4, 0x97, 0x47, + 0x45, 0x37, 0xa7, 0x22, 0xb8, 0xd9, 0xa9, 0x36, 0xc8, 0x97, 0x60, 0x41, 0xc1, 0xe4, 0x19, 0xd1, + 0x2c, 0xda, 0x74, 0x76, 0x9d, 0xed, 0x26, 0x15, 0xf3, 0x2d, 0x39, 0xab, 0xc3, 0x3b, 0xa1, 0x39, + 0x1f, 0x51, 0xf3, 0x5c, 0x69, 0xcb, 0x82, 0x96, 0xac, 0xc2, 0x5c, 0x8c, 0x33, 0x6d, 0x58, 0xdd, + 0x4e, 0xcf, 0xd8, 0x5c, 0x11, 0x4f, 0xa2, 0xf3, 0xa4, 0x8d, 0xcd, 0x8e, 0xf1, 0x2d, 0x98, 0x50, + 0xe7, 0x24, 0xeb, 0x04, 0x55, 0xd0, 0x10, 0xb3, 0x6f, 0x3c, 0x84, 0x55, 0xd9, 0x45, 0x6f, 0x2a, + 0x42, 0x09, 0xc2, 0x64, 0xdf, 0xe6, 0x64, 0x08, 0xc5, 0x21, 0x7c, 0x11, 0x26, 0x1a, 0x8e, 0xdf, + 0x69, 0xda, 0x87, 0x56, 0x94, 0xea, 0xd7, 0x1c, 0x17, 0x30, 0xd4, 0xe4, 0x2c, 0xc1, 0x4c, 0x62, + 0x1f, 0x24, 0x6f, 0xf0, 0x1b, 0xaa, 0x10, 0x7e, 0x26, 0xf8, 0x2d, 0x1f, 0x2d, 0x73, 0x35, 0xb9, + 0x47, 0x20, 0x19, 0x6d, 0x98, 0x50, 0xcf, 0xb5, 0x13, 0x32, 0x18, 0x9c, 0xc5, 0x78, 0x1c, 0x7c, + 0xd3, 0x1f, 0x39, 0x3e, 0x2a, 0x66, 0x9d, 0x06, 0x46, 0xe1, 0xb8, 0x02, 0x79, 0x29, 0x82, 0x09, + 0xc9, 0x07, 0x5f, 0x07, 0x64, 0x7a, 0x57, 0x33, 0x2c, 0x35, 0x5e, 0x85, 0x51, 0x71, 0x74, 0xf5, + 0x7f, 0x13, 0x30, 0x7e, 0x38, 0x0b, 0xd3, 0x26, 0x65, 0x1b, 0x2b, 0xe5, 0x69, 0x4b, 0x9e, 0xd9, + 0x3b, 0x77, 0x7a, 0x54, 0x47, 0xad, 0x6d, 0x7d, 0x12, 0x86, 0xfc, 0xc3, 0x0c, 0xcc, 0xa6, 0xe0, + 0x7e, 0xa4, 0x84, 0x99, 0xb7, 0x60, 0xac, 0xe2, 0xd8, 0xcd, 0x52, 0xa3, 0x11, 0x06, 0xe7, 0x40, + 0xc1, 0x1d, 0xb3, 0xea, 0xd8, 0x0c, 0xaa, 0x0a, 0x31, 0x21, 0x2a, 0x79, 0x4d, 0x4c, 0x8a, 0x28, + 0xdd, 0x34, 0x4e, 0x8a, 0xef, 0x1e, 0x15, 0x81, 0x7f, 0x53, 0x94, 0x83, 0x1e, 0x23, 0xad, 0x72, + 0x60, 0xe4, 0xf7, 0xf2, 0xcc, 0x0e, 0x5d, 0x7a, 0xa4, 0xd5, 0x78, 0xf3, 0x06, 0xca, 0x19, 0xf2, + 0x13, 0x59, 0x38, 0x9b, 0x4e, 0xf8, 0x51, 0x73, 0x9f, 0x62, 0xb6, 0x16, 0x25, 0x3a, 0x34, 0xe6, + 0x3e, 0xe5, 0xa9, 0x5d, 0x10, 0x3f, 0x42, 0x20, 0x3b, 0x30, 0xb9, 0x6a, 0xfb, 0xc1, 0x0a, 0xb5, + 0xbd, 0x60, 0x9b, 0xda, 0xc1, 0x00, 0x92, 0xfc, 0xcb, 0xd2, 0x24, 0x01, 0x85, 0x89, 0x3d, 0x49, + 0x19, 0x93, 0xb5, 0x75, 0xb6, 0xe1, 0x44, 0x19, 0x1a, 0x60, 0xa2, 0x7c, 0x03, 0xa6, 0x6b, 0xb4, + 0x65, 0x77, 0xf6, 0x5c, 0x4f, 0x3a, 0x4e, 0x5f, 0x83, 0xc9, 0x10, 0x94, 0x3a, 0x5b, 0xf4, 0x62, + 0x0d, 0x5f, 0xe9, 0x88, 0x68, 0x2b, 0xd1, 0x8b, 0x8d, 0xbf, 0x9b, 0x85, 0x73, 0xa5, 0xba, 0xb0, + 0x14, 0x14, 0x05, 0xd2, 0xa0, 0xf9, 0x63, 0xae, 0x9b, 0x5c, 0x87, 0xb1, 0xfb, 0xf6, 0xe3, 0x55, + 0x6a, 0xfb, 0xd4, 0x17, 0x99, 0xe7, 0xb8, 0xd8, 0x6b, 0x3f, 0x8e, 0x5e, 0x73, 0xcc, 0x08, 0x47, + 0xd5, 0x0b, 0x0c, 0x3d, 0xa1, 0x5e, 0xc0, 0x80, 0x91, 0x15, 0xb7, 0xd9, 0x10, 0x67, 0xbd, 0x78, + 0x42, 0xde, 0x43, 0x88, 0x29, 0x4a, 0xd8, 0x75, 0x7a, 0x2a, 0xfc, 0x62, 0xfc, 0x84, 0x8f, 0xbd, + 0x4b, 0x2e, 0xc3, 0x28, 0x56, 0x14, 0xa6, 0xc8, 0xc6, 0x43, 0xa3, 0x49, 0x31, 0x7f, 0x58, 0xc3, + 0x94, 0x85, 0x6a, 0x4f, 0x0c, 0x3f, 0x59, 0x4f, 0x18, 0xff, 0x00, 0x5f, 0xa7, 0xd5, 0x56, 0xb2, + 0x93, 0x48, 0xf9, 0x90, 0xcc, 0x80, 0x1f, 0x92, 0x7d, 0x6a, 0x43, 0x92, 0xeb, 0x39, 0x24, 0x3f, + 0x92, 0x85, 0xf1, 0xf0, 0x63, 0x3f, 0x61, 0x21, 0xca, 0xc3, 0x76, 0x0d, 0x14, 0xec, 0xa4, 0xa6, + 0xec, 0x15, 0x22, 0xa6, 0xc8, 0x17, 0x60, 0x44, 0x2c, 0xa6, 0x4c, 0xcc, 0xb0, 0x37, 0x36, 0xba, + 0x4b, 0x53, 0x82, 0xf5, 0x08, 0x0e, 0xa8, 0x6f, 0x0a, 0x3a, 0x8c, 0x26, 0xb3, 0x45, 0xb7, 0x85, + 0xb1, 0xc2, 0x33, 0x7b, 0x46, 0xa5, 0x47, 0x93, 0x89, 0x1a, 0x36, 0xd0, 0xe9, 0xf4, 0x4f, 0xf2, + 0x50, 0x88, 0x93, 0x9c, 0x1c, 0x04, 0x7e, 0xbd, 0xbb, 0xcd, 0xaf, 0x2a, 0x3c, 0x08, 0x7c, 0xa7, + 0xbb, 0x6d, 0x32, 0x18, 0xda, 0x32, 0x79, 0xce, 0x23, 0x6c, 0xf5, 0x84, 0xb0, 0x65, 0xf2, 0x9c, + 0x47, 0x9a, 0x2d, 0x93, 0xe7, 0x3c, 0x42, 0x45, 0xc2, 0x6a, 0x0d, 0x1d, 0xe0, 0xf1, 0x9e, 0x22, + 0x14, 0x09, 0x4d, 0x3f, 0x9e, 0xd0, 0x49, 0xa2, 0xb1, 0xa3, 0x72, 0x89, 0xda, 0x9e, 0x08, 0x58, + 0x2e, 0xb6, 0x33, 0x3c, 0x2a, 0xb7, 0x11, 0xcc, 0xf3, 0xaf, 0x9b, 0x2a, 0x12, 0x69, 0x02, 0x51, + 0x7e, 0xca, 0x05, 0x7c, 0xf2, 0xdd, 0x5a, 0x1a, 0xe5, 0xcd, 0xa9, 0xac, 0x2d, 0x75, 0x35, 0xa7, + 0xf0, 0x7d, 0x9a, 0xea, 0xdc, 0x75, 0x11, 0x85, 0x11, 0x15, 0x48, 0xf9, 0x13, 0x99, 0xc9, 0x08, + 0x11, 0xc0, 0xa3, 0x34, 0x86, 0x6a, 0xa4, 0x88, 0x09, 0x79, 0x0f, 0xc6, 0xd5, 0xb0, 0x06, 0xdc, + 0xf9, 0xfe, 0x05, 0x1e, 0x58, 0xaf, 0x47, 0x0a, 0x50, 0x95, 0x80, 0x6c, 0xc3, 0xb9, 0xb2, 0xdb, + 0xf6, 0xbb, 0x2d, 0x19, 0xc2, 0x2f, 0x0a, 0x1c, 0x0c, 0x38, 0x14, 0xe8, 0x23, 0x5d, 0x17, 0x28, + 0xc2, 0x8b, 0x5e, 0x7a, 0x4d, 0xe8, 0x17, 0x90, 0x5e, 0x8c, 0xc8, 0x06, 0x8c, 0xa3, 0x4a, 0x54, + 0x98, 0x65, 0x8e, 0xeb, 0xdb, 0x46, 0x54, 0x52, 0x61, 0x0b, 0x83, 0x87, 0x8f, 0xb2, 0x5b, 0x4d, + 0x69, 0xb4, 0xaf, 0xaa, 0x76, 0x15, 0x64, 0xf2, 0x55, 0x98, 0xe2, 0x57, 0xb4, 0x2d, 0xba, 0xcd, + 0xe7, 0xce, 0x84, 0xa6, 0x89, 0xd0, 0x0b, 0xf9, 0xeb, 0xbc, 0x50, 0x44, 0x1f, 0xd0, 0x6d, 0x3e, + 0xf6, 0x9a, 0xcb, 0x8c, 0x86, 0x4f, 0x36, 0x61, 0x76, 0xc5, 0xf6, 0x39, 0x50, 0xf1, 0x4f, 0x9f, + 0x44, 0x0d, 0x2d, 0x9a, 0x32, 0xef, 0xd9, 0xbe, 0xd4, 0x6c, 0xa7, 0xfa, 0xa3, 0xa7, 0xd1, 0x93, + 0x1f, 0xce, 0xc0, 0xbc, 0xa6, 0xf8, 0x16, 0x86, 0x63, 0x2d, 0xda, 0x0e, 0xd0, 0x37, 0x66, 0x2a, + 0xcc, 0xfc, 0xde, 0x0b, 0x8d, 0x0f, 0x49, 0x4c, 0xb7, 0xee, 0x45, 0xe5, 0xaa, 0x8d, 0x70, 0x2f, + 0x1e, 0x62, 0xa1, 0xe2, 0x9a, 0x9e, 0xd6, 0x17, 0x6a, 0x6c, 0x5d, 0x4b, 0x34, 0xe3, 0x56, 0xbc, + 0xbf, 0x85, 0xa2, 0x2b, 0x13, 0x2a, 0xba, 0xe6, 0x60, 0x18, 0x7b, 0x55, 0x86, 0xd3, 0xc1, 0x1f, + 0xc6, 0xa7, 0xd5, 0x7d, 0x48, 0x88, 0x85, 0x7d, 0xf7, 0x21, 0xe3, 0x7f, 0x1e, 0x81, 0xe9, 0xd8, + 0xb4, 0x10, 0xf7, 0xd4, 0x4c, 0xe2, 0x9e, 0x5a, 0x03, 0xe0, 0xaa, 0xde, 0x01, 0x75, 0xb2, 0xd2, + 0x2f, 0x6f, 0x5c, 0xb8, 0xb9, 0x86, 0x6b, 0x4a, 0x61, 0xc3, 0x98, 0xf2, 0x15, 0x3b, 0xa0, 0x8e, + 0x3c, 0x64, 0xca, 0x17, 0xbd, 0xc2, 0x34, 0x62, 0x43, 0x8a, 0x30, 0x8c, 0x81, 0x34, 0x55, 0xb7, + 0x48, 0x87, 0x01, 0x4c, 0x0e, 0x27, 0x2f, 0xc1, 0x08, 0x13, 0xa2, 0xaa, 0x15, 0xb1, 0x09, 0xe2, + 0xd9, 0xc2, 0xa4, 0x2c, 0x26, 0xb1, 0x88, 0x22, 0x72, 0x0b, 0x26, 0xf8, 0x5f, 0x22, 0x0c, 0xca, + 0x88, 0x6e, 0xcd, 0x68, 0x39, 0x0d, 0x19, 0x09, 0x45, 0xc3, 0x63, 0xb7, 0x8b, 0x5a, 0x17, 0xd5, + 0x3a, 0xd5, 0x8a, 0x88, 0xbc, 0x8c, 0xb7, 0x0b, 0x9f, 0x03, 0x59, 0x15, 0x11, 0x02, 0x93, 0x65, + 0x84, 0x73, 0x42, 0x1e, 0xef, 0x94, 0x28, 0xcb, 0x70, 0xa7, 0x04, 0x53, 0x94, 0x90, 0xab, 0xfc, + 0x69, 0x05, 0xc5, 0x42, 0x9e, 0xc0, 0x0e, 0xdf, 0x2d, 0x50, 0x31, 0x81, 0xb2, 0x61, 0x58, 0xcc, + 0x2a, 0x67, 0x7f, 0x2f, 0xb7, 0x6c, 0xa7, 0x29, 0xb6, 0x15, 0xac, 0x1c, 0x71, 0x29, 0x83, 0x9a, + 0x11, 0x02, 0x79, 0x07, 0xa6, 0xd8, 0x8f, 0xb2, 0xdb, 0x6a, 0xb9, 0x6d, 0x64, 0x3f, 0x1e, 0x45, + 0xd4, 0x42, 0x92, 0x3a, 0x16, 0xf1, 0x5a, 0x62, 0xb8, 0xec, 0x3c, 0xc1, 0x67, 0xdb, 0x2e, 0x7f, + 0xf4, 0x99, 0x88, 0xce, 0x13, 0x24, 0xf5, 0x39, 0xdc, 0x54, 0x91, 0xc8, 0x5b, 0x30, 0xc9, 0x7e, + 0xde, 0x71, 0x1e, 0x51, 0x5e, 0xe1, 0x64, 0x64, 0xaf, 0x80, 0x54, 0xbb, 0xac, 0x84, 0xd7, 0xa7, + 0x63, 0x92, 0x2f, 0xc2, 0x19, 0xe4, 0x54, 0x77, 0x3b, 0xb4, 0x51, 0xda, 0xd9, 0x71, 0x9a, 0x0e, + 0x37, 0x2f, 0xe3, 0x01, 0x3f, 0x50, 0x07, 0xcf, 0x2b, 0x46, 0x0c, 0xcb, 0x8e, 0x50, 0xcc, 0x74, + 0x4a, 0xb2, 0x05, 0x85, 0x72, 0xd7, 0x0f, 0xdc, 0x56, 0x29, 0x08, 0x3c, 0x67, 0xbb, 0x1b, 0x50, + 0x7f, 0x7e, 0x5a, 0x0b, 0x8b, 0xc1, 0x16, 0x47, 0x58, 0xc8, 0xf5, 0x41, 0x75, 0xa4, 0xb0, 0xec, + 0x90, 0xc4, 0x4c, 0x30, 0x31, 0xfe, 0x28, 0x03, 0x93, 0x1a, 0x29, 0x79, 0x13, 0x26, 0x6e, 0x7b, + 0x0e, 0x6d, 0x37, 0x9a, 0x87, 0xca, 0x45, 0x15, 0x6f, 0x31, 0x3b, 0x02, 0xce, 0x5b, 0xad, 0xa1, + 0x85, 0x7a, 0x9e, 0x6c, 0xaa, 0xed, 0xe7, 0x75, 0xee, 0x9d, 0x2b, 0x26, 0x68, 0x2e, 0x8a, 0xd3, + 0x83, 0x13, 0x54, 0xcc, 0x4e, 0x05, 0x85, 0xbc, 0x0b, 0x23, 0xfc, 0x81, 0x57, 0x18, 0x22, 0x9e, + 0x4f, 0x6b, 0x26, 0xf7, 0x04, 0xc7, 0x89, 0x88, 0x56, 0x3c, 0xbe, 0x29, 0x88, 0x8c, 0x9f, 0xcd, + 0x00, 0x49, 0xa2, 0x9e, 0xa0, 0xf7, 0x3a, 0xd1, 0x3a, 0xe8, 0x0b, 0xe1, 0x6a, 0xcc, 0x69, 0x3a, + 0x73, 0x56, 0x13, 0x2f, 0xe0, 0x1d, 0x2f, 0x56, 0x9d, 0xaa, 0x88, 0xe3, 0xc5, 0xc6, 0x0f, 0x65, + 0x01, 0x22, 0x6c, 0xf2, 0x39, 0x9e, 0xaf, 0xe8, 0x8b, 0x5d, 0xbb, 0xe9, 0xec, 0x38, 0x7a, 0x00, + 0x4f, 0x64, 0xf2, 0x0d, 0x59, 0x62, 0xea, 0x88, 0xe4, 0x7d, 0x98, 0xae, 0xad, 0xeb, 0xb4, 0x8a, + 0x65, 0xba, 0xdf, 0xb1, 0x62, 0xe4, 0x71, 0x6c, 0x34, 0x38, 0x56, 0x47, 0x83, 0x1b, 0x1c, 0xf3, + 0x81, 0x10, 0x25, 0x6c, 0x63, 0xa9, 0xad, 0x0b, 0xe3, 0xfb, 0x46, 0xb5, 0x22, 0x76, 0x29, 0xfc, + 0x3a, 0xbf, 0x63, 0x75, 0x84, 0x55, 0x3e, 0xdb, 0x27, 0x34, 0xbc, 0xa8, 0x23, 0x87, 0x7b, 0x78, + 0x7b, 0xff, 0x1c, 0xaa, 0xfd, 0x5a, 0x6e, 0x40, 0x85, 0xb6, 0xe3, 0x99, 0xbd, 0xf7, 0x44, 0xd6, + 0x01, 0xc3, 0x9a, 0x13, 0xab, 0xd6, 0x3a, 0x61, 0x01, 0x73, 0x33, 0xba, 0xa4, 0x70, 0x3b, 0x81, + 0x14, 0xa3, 0x99, 0xbf, 0x9f, 0x81, 0x33, 0xa9, 0xb4, 0xe4, 0x1a, 0x40, 0xa4, 0x53, 0x12, 0xbd, + 0x84, 0x3b, 0x66, 0x14, 0x9d, 0xc6, 0x54, 0x30, 0xc8, 0x57, 0xe2, 0xda, 0xa0, 0x93, 0x0f, 0xc2, + 0x05, 0x19, 0x7d, 0x4c, 0xd7, 0x06, 0xa5, 0xe8, 0x80, 0x8c, 0x7f, 0x98, 0x83, 0x19, 0x25, 0xf8, + 0x0d, 0xff, 0xd6, 0x13, 0x0c, 0xc0, 0xf7, 0x61, 0x82, 0xb5, 0xc6, 0xa9, 0x0b, 0x4f, 0x3a, 0x6e, + 0xc9, 0xf2, 0x5a, 0xc2, 0x0d, 0x51, 0x70, 0xbb, 0xa6, 0x22, 0xf3, 0x98, 0x80, 0xb8, 0x75, 0xe2, + 0x83, 0x44, 0x3d, 0xe9, 0x51, 0xa7, 0x31, 0x27, 0x3e, 0x4c, 0x56, 0x0e, 0xdb, 0x76, 0x2b, 0xac, + 0x8d, 0x5b, 0xb4, 0x7c, 0xaa, 0x67, 0x6d, 0x1a, 0x36, 0xaf, 0x2e, 0x72, 0xd8, 0xe1, 0x65, 0x29, + 0xbe, 0xe2, 0x1a, 0xd5, 0xc2, 0xfb, 0x30, 0x93, 0xf8, 0xe8, 0x53, 0x85, 0x27, 0xdc, 0x02, 0x92, + 0xfc, 0x8e, 0x14, 0x0e, 0x9f, 0xd2, 0x83, 0x5f, 0x9e, 0x09, 0x1f, 0xaf, 0x31, 0xa3, 0x3b, 0xb7, + 0x8f, 0x59, 0x54, 0x83, 0x17, 0xfe, 0x5c, 0x56, 0x75, 0x05, 0x7d, 0xd6, 0x57, 0xdd, 0x17, 0xb4, + 0xdb, 0xf0, 0xc5, 0x5e, 0x63, 0x3a, 0x90, 0xd6, 0xe1, 0x3b, 0x39, 0x38, 0xd7, 0x83, 0x92, 0x1c, + 0xc6, 0x27, 0x11, 0xd7, 0x42, 0xdc, 0xe8, 0x5f, 0xe1, 0xd3, 0x98, 0x4a, 0xe4, 0x73, 0x3c, 0x18, + 0x44, 0x1d, 0xb3, 0x86, 0x8b, 0xfb, 0x37, 0xaa, 0xf1, 0xf7, 0x43, 0x68, 0x3c, 0x0a, 0x04, 0x87, + 0x92, 0xf7, 0x61, 0x18, 0xfd, 0x80, 0x63, 0xc1, 0xf7, 0x18, 0x06, 0xc2, 0x95, 0x48, 0x85, 0xec, + 0xa7, 0x16, 0xa9, 0x90, 0x01, 0xc8, 0x67, 0x21, 0x57, 0xda, 0xaa, 0x89, 0x71, 0x99, 0x52, 0xc9, + 0xb7, 0x6a, 0x51, 0x96, 0x05, 0x5b, 0x4b, 0x87, 0xc0, 0x28, 0x18, 0xe1, 0x9d, 0xf2, 0xba, 0x18, + 0x15, 0x95, 0xf0, 0x4e, 0x79, 0x3d, 0x22, 0xdc, 0xad, 0x6b, 0xc1, 0x8c, 0xee, 0x94, 0xd7, 0x3f, + 0xbe, 0x69, 0xff, 0xef, 0x64, 0x79, 0x04, 0x0b, 0xde, 0xb0, 0xf7, 0x61, 0x42, 0x0b, 0x4e, 0x9c, + 0x89, 0xe4, 0xb1, 0x30, 0x90, 0x74, 0xcc, 0x04, 0x48, 0x23, 0x90, 0xf9, 0x4a, 0xd8, 0x6f, 0x94, + 0x78, 0x55, 0x63, 0x9b, 0x90, 0x03, 0xca, 0xc4, 0xf1, 0x7c, 0x25, 0x21, 0x09, 0xb9, 0x09, 0xf9, + 0x0d, 0xda, 0xb6, 0xdb, 0x41, 0xa8, 0x10, 0x45, 0x6b, 0xe1, 0x00, 0x61, 0xba, 0xd4, 0x10, 0x22, + 0xa2, 0x65, 0x6b, 0x77, 0xdb, 0xaf, 0x7b, 0x0e, 0x46, 0xba, 0x09, 0xcf, 0x62, 0x6e, 0xd9, 0xaa, + 0x94, 0xe8, 0x0c, 0x62, 0x44, 0xc6, 0xcf, 0x65, 0x60, 0x54, 0x0c, 0x24, 0xcf, 0x33, 0xb5, 0x1b, + 0x9d, 0x25, 0xc2, 0x1b, 0x60, 0xd7, 0x89, 0x7b, 0x03, 0xec, 0xf2, 0x70, 0x32, 0x63, 0xc2, 0xb7, + 0x2d, 0x7c, 0x1a, 0xc4, 0xd9, 0x28, 0xbd, 0x00, 0xf5, 0x34, 0x42, 0x21, 0xea, 0xa0, 0x1e, 0x56, + 0xc6, 0xdf, 0x13, 0x5f, 0x76, 0xa7, 0xbc, 0x4e, 0x16, 0x21, 0xbf, 0xea, 0xf2, 0x50, 0x45, 0x6a, + 0xd2, 0xd0, 0xa6, 0x80, 0xa9, 0x1d, 0x24, 0xf1, 0xd8, 0xf7, 0xad, 0x7b, 0xae, 0xb8, 0xcb, 0x28, + 0xdf, 0xd7, 0xe1, 0xc0, 0xd8, 0xf7, 0x85, 0xa8, 0x03, 0x7f, 0x1f, 0x4d, 0xd9, 0x24, 0x1e, 0xde, + 0xc4, 0x44, 0x0e, 0x77, 0x55, 0xcf, 0x35, 0x51, 0x24, 0x77, 0x8a, 0x85, 0x5e, 0x3b, 0xc5, 0xc3, + 0x9b, 0x66, 0x0a, 0x15, 0xbe, 0xab, 0x45, 0xe0, 0x1a, 0xf5, 0x1e, 0x3d, 0xc3, 0xbb, 0x74, 0xfa, + 0xbb, 0x5a, 0xbc, 0x79, 0x03, 0x6d, 0xd2, 0x7f, 0x90, 0x85, 0xb3, 0xe9, 0x84, 0x6a, 0x5b, 0x32, + 0x7d, 0xda, 0x72, 0x05, 0xf2, 0x2b, 0xae, 0x1f, 0x28, 0x56, 0x7f, 0xa8, 0xfe, 0xdf, 0x13, 0x30, + 0x33, 0x2c, 0x65, 0x77, 0x6e, 0xf6, 0x77, 0xb8, 0x3c, 0x91, 0x1f, 0xc6, 0x6d, 0x60, 0x77, 0x6e, + 0x5e, 0x44, 0xee, 0x40, 0xde, 0x14, 0x9e, 0x53, 0xb1, 0xae, 0x91, 0xe0, 0x50, 0x9a, 0x22, 0x9e, + 0x80, 0x68, 0x31, 0xa2, 0x05, 0x8c, 0x94, 0x60, 0x54, 0x8c, 0x7e, 0xec, 0xe9, 0x38, 0x65, 0xca, + 0xe8, 0x61, 0xdb, 0x25, 0x1d, 0xdb, 0x51, 0xf0, 0x11, 0xb0, 0x5a, 0x91, 0x4e, 0x50, 0xb8, 0xa3, + 0xf0, 0x47, 0x42, 0xdd, 0xc0, 0x32, 0x44, 0x34, 0x7e, 0x38, 0x0b, 0x20, 0xb5, 0x36, 0xcf, 0xec, + 0x0c, 0xfb, 0xac, 0x36, 0xc3, 0x14, 0x7b, 0xa3, 0xc1, 0xf3, 0xa2, 0x3e, 0x40, 0x73, 0x9e, 0xc1, + 0xb3, 0xa2, 0x16, 0x61, 0x78, 0x23, 0x52, 0x68, 0x09, 0x1f, 0x13, 0x54, 0x47, 0x73, 0xb8, 0xb1, + 0x0d, 0x73, 0x77, 0x68, 0x10, 0xa9, 0xb7, 0xe4, 0xd3, 0x63, 0x7f, 0xb6, 0xaf, 0xc3, 0x98, 0xc0, + 0x0f, 0xf7, 0x2f, 0xae, 0x8b, 0x11, 0xa1, 0x50, 0x50, 0x17, 0x23, 0x11, 0xd8, 0x6e, 0x54, 0xa1, + 0x4d, 0x1a, 0xd0, 0x8f, 0xb7, 0x9a, 0x1a, 0x10, 0xde, 0x14, 0x6c, 0xd9, 0x60, 0x35, 0x9c, 0xd8, + 0x3f, 0x0f, 0xe1, 0x4c, 0xf8, 0xed, 0x4f, 0x93, 0xef, 0x75, 0x76, 0xa5, 0x14, 0x11, 0xcf, 0x23, + 0x8e, 0x7d, 0x6c, 0x4f, 0x1e, 0xc3, 0x82, 0x24, 0xd8, 0x72, 0x42, 0xc3, 0xc9, 0x81, 0x68, 0xc9, + 0x3b, 0x30, 0xae, 0xd0, 0x88, 0x88, 0xdd, 0xa8, 0xa6, 0x3e, 0x70, 0x82, 0x3d, 0xcb, 0xe7, 0x70, + 0x55, 0x4d, 0xad, 0xa0, 0x1b, 0x5f, 0x86, 0xe7, 0x43, 0x3f, 0xa0, 0x94, 0xaa, 0x63, 0xcc, 0x33, + 0xa7, 0x63, 0xbe, 0x16, 0x35, 0xab, 0xda, 0x0e, 0x5d, 0x9d, 0x25, 0x6f, 0xa2, 0x36, 0x4b, 0x34, + 0xe6, 0x85, 0x84, 0xf3, 0xb4, 0xe2, 0x23, 0x6d, 0xbc, 0xad, 0x7c, 0x6c, 0x0a, 0x43, 0x8d, 0x38, + 0x13, 0x27, 0xfe, 0xe1, 0x2c, 0x4c, 0x3f, 0xa8, 0x56, 0xca, 0xa1, 0xf5, 0xd1, 0x27, 0x2c, 0x6b, + 0xab, 0xd6, 0xb6, 0xde, 0xfb, 0x8d, 0xb1, 0x09, 0xb3, 0xb1, 0x6e, 0x40, 0xd1, 0xe1, 0x3d, 0xee, + 0x41, 0x12, 0x82, 0xa5, 0xd8, 0x70, 0x36, 0x8d, 0xfd, 0xc3, 0x9b, 0x66, 0x0c, 0xdb, 0xf8, 0xaf, + 0x21, 0xc6, 0x57, 0x6c, 0x61, 0xaf, 0xc3, 0x58, 0xd5, 0xf7, 0xbb, 0xd4, 0xdb, 0x34, 0x57, 0x55, + 0x55, 0x81, 0x83, 0x40, 0xab, 0xeb, 0x35, 0xcd, 0x08, 0x81, 0x5c, 0x85, 0xbc, 0x08, 0x62, 0x2d, + 0xf7, 0x04, 0xd4, 0xda, 0x86, 0x31, 0xb0, 0xcd, 0xb0, 0x98, 0xbc, 0x09, 0x13, 0xfc, 0x6f, 0x3e, + 0xdb, 0x44, 0x87, 0xa3, 0x72, 0x50, 0xa0, 0xf3, 0xd9, 0x69, 0x6a, 0x68, 0xe4, 0x35, 0xc8, 0x95, + 0xca, 0xa6, 0x50, 0x07, 0x09, 0xb9, 0x11, 0x73, 0xb1, 0x77, 0xa9, 0x7e, 0x89, 0x28, 0x9b, 0x4c, + 0xfa, 0x93, 0xf1, 0x1e, 0x84, 0x26, 0x9b, 0xa7, 0x8c, 0x17, 0xb0, 0xd8, 0x61, 0x86, 0x30, 0x72, + 0x1d, 0x46, 0x2b, 0xdc, 0x64, 0x4e, 0xe8, 0xb1, 0x79, 0x4a, 0x32, 0x0e, 0xd2, 0xa2, 0x25, 0x70, + 0x10, 0xb9, 0x2a, 0x53, 0x35, 0xe5, 0x23, 0x47, 0x94, 0x1e, 0xf9, 0x98, 0x5e, 0x87, 0x11, 0x11, + 0xea, 0x79, 0x4c, 0x49, 0xe2, 0x10, 0x0f, 0xf1, 0x2c, 0x70, 0x92, 0x1e, 0xa9, 0xf0, 0x34, 0x3d, + 0x52, 0xb7, 0xe1, 0xdc, 0x1d, 0xd4, 0xde, 0xe8, 0xf1, 0x91, 0x36, 0xcd, 0xaa, 0xd0, 0x87, 0xe3, + 0x33, 0x10, 0x57, 0xf0, 0xc4, 0x43, 0x2c, 0x59, 0x5d, 0x4f, 0xcd, 0xb0, 0xd9, 0x8b, 0x11, 0xf9, + 0x12, 0xcc, 0xa5, 0x15, 0x09, 0xad, 0x39, 0x46, 0x02, 0x4a, 0xaf, 0x40, 0x8d, 0x04, 0x94, 0xc6, + 0x81, 0xac, 0x42, 0x81, 0xc3, 0x4b, 0x8d, 0x96, 0xd3, 0xe6, 0x9a, 0x7f, 0xae, 0x55, 0x47, 0xcf, + 0x10, 0xc1, 0xd5, 0x66, 0x85, 0xfc, 0x05, 0x40, 0xf3, 0x25, 0x8a, 0x51, 0x92, 0x9f, 0xca, 0xb0, + 0xdb, 0x1c, 0x0f, 0x8c, 0xbc, 0x69, 0xae, 0xfa, 0x22, 0x8a, 0xdc, 0xd9, 0xc8, 0x4d, 0xa8, 0x16, + 0x78, 0x4e, 0x7b, 0x57, 0xf8, 0x09, 0x6d, 0x08, 0x3f, 0xa1, 0x77, 0x3e, 0x92, 0x9f, 0x10, 0x67, + 0xe5, 0x1f, 0x1f, 0x15, 0x27, 0x3c, 0x51, 0x27, 0xae, 0x22, 0xed, 0x0b, 0x58, 0xd7, 0xa1, 0xb3, + 0xec, 0x66, 0x9b, 0x87, 0x65, 0xa5, 0x0d, 0xde, 0xc8, 0x69, 0xdc, 0xc1, 0xb1, 0xeb, 0x30, 0x39, + 0x80, 0xd5, 0x0d, 0x11, 0x12, 0x0d, 0x4d, 0xe5, 0xc0, 0x2e, 0x9e, 0xd2, 0x17, 0x85, 0xbb, 0xd7, + 0x16, 0xa2, 0x8b, 0xa7, 0x74, 0x5c, 0xb1, 0x70, 0x1a, 0xa9, 0x93, 0x47, 0x23, 0x21, 0xd7, 0x61, + 0xe4, 0xbe, 0xfd, 0xb8, 0xb4, 0x4b, 0x45, 0x0a, 0xbe, 0x49, 0xb9, 0xfd, 0x21, 0x70, 0x29, 0xff, + 0x87, 0xdc, 0xd7, 0xe1, 0x39, 0x53, 0xa0, 0x91, 0xef, 0xcb, 0xc0, 0x59, 0xbe, 0x8c, 0x65, 0x2b, + 0x6b, 0x34, 0x08, 0x58, 0x3f, 0x88, 0x70, 0x72, 0x97, 0x22, 0x83, 0xed, 0x74, 0x3c, 0x74, 0xa5, + 0x37, 0xc4, 0xce, 0x10, 0x76, 0x9c, 0x2f, 0x4a, 0xb5, 0x40, 0xb9, 0xa9, 0xf4, 0x64, 0x03, 0xc6, + 0xef, 0xdf, 0x2e, 0x85, 0xd5, 0xf2, 0xe8, 0xd9, 0xc5, 0xb4, 0xdd, 0x51, 0x41, 0x4b, 0xf3, 0x34, + 0x50, 0xd9, 0x08, 0xef, 0x80, 0xcf, 0xca, 0xfe, 0x20, 0x6f, 0xa8, 0xbe, 0xa5, 0x39, 0x94, 0x9e, + 0x47, 0x5b, 0xf6, 0x63, 0xcb, 0xde, 0xa5, 0xda, 0x2b, 0xb9, 0xd0, 0x5e, 0xff, 0x4c, 0x06, 0xce, + 0xf7, 0x6c, 0x32, 0xb9, 0x05, 0xe7, 0x6c, 0xee, 0x31, 0x6d, 0xed, 0x05, 0x41, 0xc7, 0xb7, 0xe4, + 0x15, 0x43, 0x78, 0xa3, 0x9a, 0x67, 0x44, 0xf1, 0x0a, 0x2b, 0x95, 0xb7, 0x0e, 0x9f, 0xbc, 0x0f, + 0x2f, 0x38, 0x6d, 0x9f, 0xd6, 0xbb, 0x1e, 0xb5, 0x24, 0x83, 0xba, 0xd3, 0xf0, 0x2c, 0xcf, 0x6e, + 0xef, 0x4a, 0xd7, 0x5a, 0xf3, 0xbc, 0xc4, 0x11, 0x5e, 0xd9, 0x65, 0xa7, 0xe1, 0x99, 0x88, 0x60, + 0xfc, 0x51, 0x06, 0xe6, 0x7b, 0x75, 0x09, 0x99, 0x87, 0x51, 0xda, 0xb6, 0xb7, 0x9b, 0xd2, 0xa1, + 0xc8, 0x94, 0x3f, 0xc9, 0xf3, 0x10, 0xed, 0xf4, 0xe2, 0xf4, 0xcf, 0xd7, 0x45, 0x4e, 0x03, 0x34, + 0x6d, 0x57, 0xf7, 0x75, 0x61, 0xa0, 0x3c, 0x51, 0x57, 0x77, 0xf7, 0x0b, 0x00, 0xd1, 0x76, 0xce, + 0x15, 0x13, 0xe6, 0x98, 0x5d, 0xf7, 0xf8, 0xca, 0x23, 0x67, 0x61, 0x84, 0x6f, 0x97, 0xc2, 0xff, + 0x41, 0xfc, 0x62, 0xe7, 0xb6, 0xe8, 0x64, 0xdc, 0xe7, 0x73, 0x4b, 0x13, 0x5a, 0x67, 0x8f, 0xb4, + 0x70, 0x70, 0x8c, 0x9f, 0x9e, 0xe4, 0x22, 0x44, 0xa9, 0x1b, 0xec, 0x49, 0xa1, 0x63, 0x31, 0xcd, + 0x01, 0x8c, 0xdb, 0x52, 0x2a, 0x76, 0xd9, 0xba, 0xdb, 0x97, 0x7c, 0xfb, 0xc9, 0xa6, 0xbe, 0xfd, + 0xbc, 0x0e, 0x63, 0xe5, 0x3d, 0x5a, 0xdf, 0x0f, 0x9d, 0x70, 0xf2, 0x42, 0xb9, 0xce, 0x80, 0x3c, + 0x64, 0x75, 0x84, 0x40, 0xae, 0x03, 0xa0, 0xdf, 0x29, 0x97, 0x48, 0x95, 0xb4, 0x13, 0xe8, 0xa6, + 0x2a, 0xcc, 0x53, 0x14, 0x14, 0x64, 0x5f, 0x33, 0x6f, 0xab, 0xf6, 0x2c, 0x9c, 0xbd, 0xef, 0xed, + 0x08, 0xf4, 0x08, 0x81, 0x35, 0x4f, 0xd9, 0x57, 0xc4, 0x29, 0x58, 0x48, 0x6c, 0x3e, 0x2a, 0x12, + 0xb9, 0x06, 0x63, 0xeb, 0xd2, 0x91, 0x00, 0x0f, 0xc1, 0x09, 0xa4, 0x80, 0xc8, 0xe9, 0x60, 0x3e, + 0x63, 0x46, 0x28, 0xe4, 0xb3, 0x30, 0x5a, 0xa6, 0x5e, 0xb0, 0xb1, 0xb1, 0x8a, 0x46, 0x27, 0x3c, + 0x3b, 0x43, 0x1e, 0x23, 0xe9, 0x07, 0x41, 0xf3, 0xbb, 0x47, 0xc5, 0xc9, 0xc0, 0x69, 0xd1, 0x30, + 0xea, 0xb4, 0x29, 0xb1, 0xc9, 0x12, 0x14, 0xf8, 0xb3, 0x78, 0x74, 0xf7, 0xc0, 0x93, 0x31, 0xcf, + 0xcf, 0x69, 0xf1, 0x86, 0x7e, 0x40, 0xb7, 0xc3, 0x3c, 0x02, 0x09, 0x7c, 0xb2, 0x2c, 0xd3, 0x6f, + 0xa8, 0xcd, 0x84, 0x48, 0x19, 0x16, 0xdf, 0x31, 0x58, 0x6b, 0x93, 0x14, 0xa4, 0x04, 0x93, 0x65, + 0xb7, 0xd5, 0xb1, 0x03, 0x07, 0x13, 0xe2, 0x1d, 0x8a, 0x43, 0x10, 0x15, 0x7a, 0x75, 0xb5, 0x40, + 0x3b, 0x51, 0xd5, 0x02, 0x72, 0x1b, 0xa6, 0x4c, 0xb7, 0xcb, 0x86, 0x49, 0xde, 0xc2, 0xf9, 0x39, + 0x87, 0xa6, 0x21, 0x1e, 0x2b, 0x61, 0xc7, 0xb2, 0xb8, 0x72, 0x6b, 0x01, 0x41, 0x35, 0x2a, 0xb2, + 0x96, 0xf2, 0x1c, 0xa2, 0x1e, 0x6e, 0x6a, 0x36, 0x81, 0x04, 0xb3, 0x94, 0x97, 0x94, 0x9b, 0x30, + 0x5e, 0xab, 0x3d, 0xd8, 0xa0, 0x7e, 0x70, 0xbb, 0xe9, 0x1e, 0xe0, 0xd9, 0x96, 0x17, 0x59, 0x96, + 0x7c, 0xd7, 0x0a, 0xa8, 0x1f, 0x58, 0x3b, 0x4d, 0xf7, 0xc0, 0x54, 0xb1, 0xc8, 0xd7, 0x58, 0x7f, + 0x28, 0x92, 0xa0, 0x08, 0x7d, 0xda, 0x4f, 0x58, 0xc5, 0x13, 0x24, 0x5a, 0x34, 0x4c, 0x64, 0xd5, + 0x3b, 0x4b, 0x41, 0x47, 0x9f, 0x32, 0xcf, 0x7d, 0x7c, 0x58, 0x6a, 0x34, 0x3c, 0xea, 0xfb, 0xe2, + 0x10, 0xe2, 0x3e, 0x65, 0xa8, 0x6c, 0xb0, 0x79, 0x81, 0xe6, 0x53, 0xa6, 0x10, 0x90, 0x1f, 0xcd, + 0xc0, 0x19, 0xd5, 0xdb, 0x04, 0x97, 0x0b, 0x9a, 0xb9, 0xf0, 0x23, 0xe9, 0x8d, 0x6b, 0xf2, 0x10, + 0xbe, 0xa6, 0xa0, 0x5d, 0x7b, 0x74, 0xe3, 0x5a, 0x29, 0xfa, 0x59, 0x93, 0x44, 0x18, 0xc6, 0xad, + 0x98, 0xca, 0x2f, 0xfa, 0x82, 0xf9, 0x8c, 0x39, 0x67, 0xa7, 0x10, 0x93, 0x32, 0x93, 0xd4, 0xd8, + 0x8c, 0x42, 0xc3, 0xa9, 0xea, 0x3a, 0x9e, 0x69, 0x42, 0xa3, 0x2a, 0xe6, 0x1f, 0x37, 0xb1, 0x72, + 0x3a, 0xba, 0x40, 0xa6, 0xd0, 0x90, 0x2a, 0x4c, 0x73, 0x00, 0xdb, 0x16, 0x78, 0x12, 0x9e, 0xd9, + 0x28, 0x11, 0x80, 0x60, 0x83, 0x6f, 0xfd, 0x98, 0x88, 0x47, 0x8d, 0xd5, 0x19, 0xa3, 0x23, 0xef, + 0xc3, 0x94, 0xef, 0xef, 0x59, 0xca, 0x7a, 0x9d, 0xc3, 0x55, 0x8c, 0x21, 0x47, 0x45, 0x49, 0xcc, + 0xf3, 0x6e, 0xc2, 0xf7, 0xf7, 0xa2, 0x15, 0xfd, 0x3e, 0x4c, 0xa1, 0xad, 0x4e, 0xc4, 0xe0, 0x4c, + 0xc4, 0x40, 0x94, 0xc4, 0x19, 0x04, 0x4d, 0x3f, 0x62, 0xf0, 0xb7, 0x33, 0x70, 0x9e, 0x55, 0x94, + 0x3e, 0x42, 0x67, 0x3f, 0xca, 0x08, 0x61, 0x10, 0xc6, 0x9e, 0x3c, 0x55, 0x71, 0xd4, 0xf7, 0xf7, + 0xd2, 0x38, 0xe0, 0x47, 0xb1, 0x8f, 0x4f, 0xff, 0xa8, 0x73, 0x1f, 0xf9, 0xa3, 0x7a, 0xf2, 0x54, + 0x3f, 0x2a, 0x68, 0xfa, 0x69, 0x1c, 0xf0, 0x5a, 0x5b, 0x2b, 0xdd, 0x5f, 0x8d, 0xee, 0x66, 0x9f, + 0x2c, 0xb7, 0x15, 0xad, 0x6d, 0x7d, 0xdc, 0x56, 0x36, 0xb9, 0x5b, 0xb4, 0xd2, 0x0d, 0xf2, 0x5a, + 0xab, 0x81, 0xe3, 0xd7, 0xda, 0x18, 0x8d, 0x19, 0xc3, 0x36, 0x7e, 0x09, 0x62, 0x7c, 0x85, 0xa9, + 0xaa, 0x01, 0x23, 0xfc, 0xd6, 0x2a, 0x3a, 0x19, 0x6d, 0x16, 0xf8, 0x9d, 0xd6, 0x14, 0x25, 0xe4, + 0x3c, 0xe4, 0x6a, 0xb5, 0x07, 0xa2, 0x93, 0xd1, 0x60, 0xd5, 0xf7, 0x5d, 0x93, 0xc1, 0xd8, 0x08, + 0xa1, 0x15, 0xaa, 0x12, 0xa2, 0x9e, 0x9d, 0x77, 0x26, 0x42, 0x59, 0x7f, 0xcb, 0x3b, 0xe4, 0x50, + 0xd4, 0xdf, 0xe2, 0x0e, 0x19, 0xdd, 0x1c, 0xcb, 0x30, 0x5f, 0xf2, 0x7d, 0xea, 0xb1, 0x09, 0x21, + 0x8c, 0x1b, 0x3d, 0x71, 0xcf, 0x11, 0x07, 0x3b, 0x56, 0x6a, 0xd7, 0x7d, 0xb3, 0x27, 0x22, 0xb9, + 0x02, 0xf9, 0x52, 0xb7, 0xe1, 0xd0, 0x76, 0x5d, 0x8b, 0xb3, 0x66, 0x0b, 0x98, 0x19, 0x96, 0x92, + 0x2f, 0xc2, 0x99, 0x58, 0x10, 0x44, 0xd1, 0x03, 0xa3, 0xd1, 0xde, 0x2b, 0xef, 0x61, 0x91, 0x41, + 0x06, 0xef, 0x92, 0x74, 0x4a, 0x52, 0x82, 0xc2, 0x32, 0xba, 0x69, 0x55, 0x28, 0x7f, 0x1b, 0x72, + 0x3d, 0xee, 0x9f, 0xc7, 0x6f, 0xcd, 0xdc, 0x85, 0xcb, 0x6a, 0x84, 0x85, 0x66, 0x02, 0x9d, 0xdc, + 0x83, 0xd9, 0x38, 0x8c, 0x9d, 0xe0, 0xfc, 0x82, 0x8c, 0xfb, 0x4d, 0x82, 0x0b, 0x9e, 0xe1, 0x69, + 0x54, 0x64, 0x1b, 0x66, 0x22, 0x83, 0x24, 0xfd, 0xda, 0x2c, 0xed, 0x9c, 0xc3, 0x72, 0x79, 0x75, + 0x7e, 0x5e, 0x4c, 0xc6, 0xd9, 0xc8, 0xb8, 0x29, 0xbc, 0x3e, 0x9b, 0x49, 0x76, 0xa4, 0x01, 0x53, + 0x35, 0x67, 0xb7, 0xed, 0xb4, 0x77, 0xef, 0xd1, 0xc3, 0x75, 0xdb, 0xf1, 0x84, 0xc5, 0xa9, 0xb4, + 0x27, 0x2f, 0xf9, 0x87, 0xad, 0x16, 0x0d, 0x3c, 0xdc, 0x08, 0x59, 0x39, 0xfa, 0xa0, 0xb3, 0xeb, + 0xd0, 0x82, 0xcf, 0xe9, 0xd0, 0x6d, 0xb3, 0x63, 0x3b, 0x9a, 0x10, 0xa0, 0xf3, 0xd4, 0x54, 0x17, + 0x13, 0x03, 0xaa, 0x2e, 0x9a, 0x30, 0xb3, 0xdc, 0xae, 0x7b, 0x87, 0xf8, 0x44, 0x27, 0x3f, 0x6e, + 0xf2, 0x84, 0x8f, 0x7b, 0x59, 0x7c, 0xdc, 0x0b, 0xb6, 0x9c, 0x61, 0x69, 0x9f, 0x97, 0x64, 0x4c, + 0x6a, 0x30, 0x83, 0x17, 0x87, 0x6a, 0x65, 0xbd, 0xda, 0x76, 0x02, 0xc7, 0x0e, 0x68, 0x43, 0x08, + 0x17, 0xaf, 0x08, 0x9e, 0x17, 0xf8, 0x15, 0xd5, 0x69, 0x74, 0x2c, 0x47, 0xa2, 0xa8, 0x4c, 0x13, + 0xf4, 0xfd, 0xee, 0x89, 0xd3, 0x7f, 0x49, 0xf7, 0xc4, 0x2a, 0x4c, 0xc7, 0x63, 0x33, 0x14, 0xa2, + 0x73, 0xd8, 0xc7, 0x22, 0x76, 0x9c, 0xbb, 0x5d, 0x14, 0x26, 0xb5, 0x2c, 0x8a, 0x3a, 0x5d, 0xfc, + 0xca, 0x39, 0xa3, 0x5d, 0x39, 0xb5, 0x5d, 0xe9, 0x14, 0x57, 0x4e, 0xb2, 0x0e, 0x70, 0xdb, 0xf5, + 0xea, 0xb4, 0x84, 0xfe, 0xd1, 0x44, 0xcb, 0x47, 0xc4, 0x98, 0x46, 0x85, 0x7c, 0xfd, 0xec, 0xb0, + 0xdf, 0x56, 0xdc, 0xcd, 0x5d, 0xe1, 0x61, 0xfc, 0x58, 0x16, 0xe6, 0x7b, 0x7d, 0x4e, 0x9f, 0xeb, + 0xde, 0xa7, 0x20, 0xb9, 0xc2, 0xc5, 0xb5, 0xaf, 0x40, 0xe3, 0xeb, 0x7c, 0x11, 0xd2, 0x17, 0xb2, + 0xb8, 0x06, 0xce, 0xc6, 0x09, 0x36, 0xbd, 0x26, 0xb9, 0x05, 0xe3, 0xca, 0xc7, 0xe3, 0x5e, 0xda, + 0xab, 0xa9, 0x26, 0xec, 0x84, 0x7f, 0xb3, 0x6b, 0x22, 0xdf, 0xb7, 0xe4, 0x35, 0x91, 0xff, 0x22, + 0x05, 0xee, 0x22, 0x3e, 0xc2, 0xad, 0x00, 0x7c, 0xdf, 0x25, 0x04, 0x70, 0xdf, 0xe6, 0x5b, 0xa0, + 0x89, 0x7f, 0x1b, 0xbf, 0x3e, 0xc1, 0x4f, 0x64, 0xf5, 0x96, 0xd8, 0xcb, 0x3e, 0x38, 0x76, 0x7b, + 0xcc, 0x9e, 0xe6, 0xf6, 0x98, 0x3b, 0xf9, 0xf6, 0x38, 0x74, 0xd2, 0xed, 0x31, 0x76, 0xbd, 0x1b, + 0x3e, 0xf5, 0xf5, 0x6e, 0xe4, 0x54, 0xd7, 0xbb, 0xd1, 0x53, 0x5d, 0xef, 0xb4, 0x9b, 0x6a, 0xfe, + 0xa4, 0x9b, 0xea, 0x5f, 0x5f, 0x06, 0x9f, 0xd5, 0xcb, 0x60, 0x9a, 0x88, 0x77, 0xaa, 0xcb, 0xe0, + 0x8f, 0xf4, 0xbc, 0xcb, 0x15, 0x3e, 0x8a, 0x50, 0xfe, 0xd2, 0x00, 0x77, 0xb9, 0x41, 0x6f, 0x72, + 0x33, 0x4f, 0xe7, 0x26, 0x47, 0x9e, 0xda, 0x4d, 0x6e, 0xf6, 0x49, 0x6f, 0x72, 0x73, 0x4f, 0xf3, + 0x26, 0x77, 0xe6, 0xaf, 0xe2, 0x4d, 0xee, 0xec, 0xbf, 0x99, 0x9b, 0xdc, 0xdf, 0x80, 0x42, 0x5c, + 0xb8, 0x3c, 0x39, 0x8c, 0xf1, 0x53, 0x8b, 0x21, 0xc9, 0x44, 0xdf, 0xb8, 0x70, 0x47, 0xae, 0x03, + 0xac, 0x7b, 0xce, 0x23, 0x3b, 0xa0, 0xf7, 0xa4, 0xf5, 0x9b, 0x08, 0xc1, 0xcd, 0xa1, 0x6c, 0xe4, + 0x4d, 0x05, 0x25, 0xbc, 0xd7, 0x64, 0xd3, 0xee, 0x35, 0xc6, 0x8f, 0x66, 0x61, 0x86, 0x07, 0x62, + 0x7b, 0xf6, 0x1f, 0x61, 0xdf, 0xd3, 0x6e, 0xab, 0xd2, 0xd6, 0x3a, 0xd6, 0xba, 0x3e, 0xcf, 0xb0, + 0x5f, 0x85, 0x33, 0x89, 0xae, 0xc0, 0x1b, 0x6b, 0x45, 0x86, 0xc0, 0x4b, 0xdc, 0x59, 0xe7, 0xd3, + 0x2b, 0x79, 0x78, 0xd3, 0x4c, 0x50, 0x18, 0x7f, 0x3e, 0x94, 0xe0, 0x2f, 0x1e, 0x64, 0xd5, 0x27, + 0xd6, 0xcc, 0xe9, 0x9e, 0x58, 0xb3, 0x83, 0x3d, 0xb1, 0xc6, 0x84, 0x8a, 0xdc, 0x20, 0x42, 0xc5, + 0x17, 0x61, 0x72, 0x83, 0xda, 0x2d, 0x7f, 0xc3, 0x15, 0xf9, 0x87, 0xb8, 0xaf, 0x85, 0x8c, 0x70, + 0xc7, 0xca, 0xe4, 0x85, 0x2b, 0xb4, 0x19, 0x0d, 0x18, 0x01, 0x3b, 0x06, 0x79, 0x42, 0x22, 0x53, + 0xe7, 0xa0, 0xde, 0xa2, 0x87, 0xfb, 0xdc, 0xa2, 0x6b, 0x30, 0x21, 0xe8, 0xa2, 0xd8, 0xcd, 0xd1, + 0x75, 0x8f, 0x15, 0x21, 0x5c, 0xd6, 0x1e, 0xa6, 0xc5, 0x0e, 0x6b, 0xe7, 0x37, 0x3d, 0x8d, 0x09, + 0xeb, 0x82, 0xe5, 0x76, 0xa3, 0xe3, 0x3a, 0x6d, 0xec, 0x82, 0xd1, 0xa8, 0x0b, 0xa8, 0x00, 0xf3, + 0x2e, 0x50, 0x90, 0xc8, 0x3b, 0x30, 0x55, 0x5a, 0xaf, 0xaa, 0x64, 0xf9, 0xe8, 0x95, 0xd7, 0xee, + 0x38, 0x96, 0x46, 0x1a, 0xc3, 0xed, 0x77, 0xf3, 0x19, 0xfb, 0xcb, 0xb9, 0xf9, 0x18, 0xff, 0x62, + 0x42, 0x2e, 0xef, 0x8f, 0xf7, 0x81, 0x44, 0x7f, 0xf2, 0xc8, 0x9d, 0xf2, 0xc9, 0x63, 0xe8, 0x24, + 0x41, 0x52, 0x93, 0x6f, 0x87, 0x4f, 0x25, 0xdf, 0x8e, 0x3c, 0xf1, 0xf3, 0xc5, 0xe8, 0x29, 0x25, + 0xd6, 0xd8, 0x5a, 0xcb, 0x0f, 0xb2, 0xd6, 0x52, 0xa5, 0xdc, 0xb1, 0x27, 0x97, 0x72, 0xe1, 0xd4, + 0x52, 0x6e, 0x2d, 0xf2, 0x5d, 0x1e, 0x3f, 0xd1, 0x25, 0xe4, 0x82, 0xd0, 0x0a, 0xcc, 0xa4, 0x47, + 0xe1, 0x0b, 0xbd, 0x98, 0x3f, 0x51, 0xa2, 0xf3, 0xd7, 0xd3, 0x45, 0xe7, 0xfe, 0xe7, 0xcd, 0xa9, + 0x84, 0xe7, 0x1f, 0x7d, 0xba, 0xc2, 0xf3, 0xd3, 0x7d, 0x08, 0xf9, 0x6b, 0xf1, 0xf9, 0xaf, 0xc5, + 0xe7, 0x01, 0xc5, 0x67, 0x0f, 0x97, 0xd7, 0x96, 0xed, 0xb5, 0x51, 0xed, 0x74, 0x1d, 0x46, 0x65, + 0x18, 0xd2, 0x4c, 0xa4, 0x51, 0x4e, 0xc6, 0x1f, 0x95, 0x58, 0x64, 0x11, 0xf2, 0x92, 0x58, 0x4d, + 0x74, 0x73, 0x20, 0x60, 0x5a, 0x84, 0x47, 0x01, 0x33, 0xfe, 0xa3, 0x21, 0xb9, 0x85, 0xb3, 0x39, + 0xb3, 0x6e, 0x7b, 0x76, 0x0b, 0x33, 0xa8, 0x85, 0x2b, 0x4c, 0x11, 0xde, 0x63, 0x8b, 0x32, 0x66, + 0xda, 0xaf, 0x93, 0x7c, 0xa4, 0xc0, 0xb0, 0x51, 0x92, 0xda, 0xdc, 0x00, 0x49, 0x6a, 0xdf, 0xd2, + 0x32, 0xbc, 0x0e, 0x45, 0x29, 0x05, 0xd9, 0xb6, 0xd6, 0x3f, 0xb7, 0xeb, 0x2d, 0x35, 0x15, 0xeb, + 0x70, 0x14, 0xd5, 0x0b, 0x29, 0xfb, 0x24, 0x61, 0x0d, 0x6f, 0x23, 0x23, 0xa7, 0x09, 0xb9, 0x3c, + 0xfa, 0x6f, 0x34, 0xe4, 0xf2, 0x32, 0x80, 0x38, 0x6a, 0x23, 0xf3, 0x84, 0x57, 0x70, 0xf5, 0x0b, + 0x33, 0xe5, 0x20, 0x68, 0xf6, 0xc8, 0xc9, 0xa1, 0x10, 0x1a, 0xbf, 0x4f, 0x60, 0xa6, 0x56, 0x7b, + 0x50, 0x71, 0xec, 0xdd, 0xb6, 0xeb, 0x07, 0x4e, 0xbd, 0xda, 0xde, 0x71, 0x99, 0x28, 0x1e, 0x1e, + 0x07, 0x4a, 0x6c, 0xdd, 0xe8, 0x28, 0x08, 0x8b, 0xd9, 0x55, 0x6f, 0xd9, 0xf3, 0xa4, 0x7e, 0x94, + 0x5f, 0xf5, 0x28, 0x03, 0x98, 0x1c, 0xce, 0xa4, 0xdd, 0x5a, 0x17, 0x23, 0x5b, 0x08, 0x9b, 0x11, + 0x94, 0x76, 0x7d, 0x0e, 0x32, 0x65, 0x19, 0xa1, 0xc9, 0x09, 0x2b, 0x6e, 0x3f, 0xe7, 0xb4, 0xc0, + 0xcd, 0x51, 0x31, 0x3f, 0xec, 0x84, 0x30, 0x82, 0xdb, 0x66, 0x07, 0xe1, 0xaa, 0x45, 0x5c, 0x62, + 0x0d, 0x1c, 0xc2, 0x19, 0xcd, 0xe7, 0x79, 0xd0, 0xc7, 0x94, 0xd7, 0x84, 0x74, 0x6d, 0x60, 0x88, + 0x8d, 0x94, 0x17, 0x15, 0x35, 0x25, 0x5a, 0x6a, 0x0d, 0xec, 0x3c, 0xbb, 0x90, 0x5a, 0x12, 0xae, + 0xee, 0x71, 0x2d, 0x78, 0xb6, 0xb2, 0x69, 0xf0, 0xe4, 0x6f, 0xbd, 0xaa, 0xb6, 0x52, 0xb6, 0x82, + 0xfe, 0x35, 0x91, 0xdf, 0xc8, 0xc0, 0x39, 0x0d, 0x23, 0xdc, 0xae, 0xfc, 0x30, 0x1c, 0x48, 0xea, + 0xbc, 0xfe, 0xf0, 0xe9, 0xcc, 0xeb, 0x97, 0xf4, 0xb6, 0x44, 0x1b, 0xaa, 0xda, 0x86, 0x5e, 0x5f, + 0x48, 0x1e, 0xc1, 0x0c, 0x16, 0xc9, 0x87, 0x1d, 0x36, 0x67, 0xc5, 0x7b, 0xd0, 0x5c, 0xf4, 0xd9, + 0xdc, 0x8f, 0x1f, 0x13, 0x78, 0x2f, 0x7e, 0xe7, 0xa8, 0x38, 0xa9, 0xa1, 0xcb, 0x70, 0xd4, 0x56, + 0xf4, 0x3a, 0xe4, 0xb4, 0x77, 0x5c, 0x55, 0x50, 0x4a, 0x54, 0x41, 0xfe, 0xdb, 0x0c, 0x7f, 0x4e, + 0xe0, 0xcd, 0xb8, 0xed, 0xb9, 0xad, 0xb0, 0x5c, 0x9a, 0x56, 0xf6, 0xe8, 0xb6, 0xe6, 0xd3, 0xe9, + 0xb6, 0x57, 0xf0, 0x93, 0xf9, 0x9e, 0x60, 0xed, 0x78, 0x6e, 0x2b, 0xfa, 0x7c, 0xb5, 0xe3, 0x7a, + 0x7e, 0x24, 0xf9, 0xfe, 0x0c, 0x9c, 0xd7, 0xb4, 0x9a, 0x6a, 0x6e, 0x10, 0x11, 0x2d, 0x61, 0x36, + 0x8c, 0xa3, 0x12, 0x15, 0x2d, 0x5d, 0x13, 0xf3, 0xff, 0x32, 0x7e, 0x81, 0x12, 0xb6, 0x93, 0x21, + 0x59, 0x2d, 0x8e, 0xa5, 0x7c, 0x42, 0xef, 0x5a, 0x88, 0x03, 0x33, 0x68, 0x65, 0xa3, 0x99, 0x00, + 0xcf, 0xf5, 0x36, 0x01, 0x0e, 0xb3, 0xfe, 0x60, 0x46, 0x80, 0xde, 0x76, 0xc0, 0x49, 0xae, 0xe4, + 0x7b, 0xe1, 0x7c, 0x02, 0x18, 0xae, 0xb6, 0x33, 0x3d, 0x57, 0xdb, 0xa7, 0x8e, 0x8f, 0x8a, 0xaf, + 0xa6, 0xd5, 0x96, 0xb6, 0xd2, 0x7a, 0xd7, 0x40, 0x6c, 0x80, 0xa8, 0x50, 0x88, 0x1f, 0xe9, 0x13, + 0xf4, 0x53, 0x62, 0x7e, 0x28, 0xf8, 0x6c, 0x2f, 0x57, 0xbe, 0x41, 0x3d, 0xf2, 0x22, 0x24, 0x42, + 0x61, 0x42, 0xc9, 0x86, 0x70, 0x28, 0x8c, 0x3d, 0x7a, 0x54, 0xf2, 0x9d, 0xa3, 0xa2, 0x86, 0xcd, + 0x2e, 0x44, 0x6a, 0x9a, 0x05, 0x4d, 0xda, 0x53, 0x11, 0xc9, 0xaf, 0x65, 0x60, 0x8e, 0x01, 0xa2, + 0x49, 0x25, 0x1a, 0x35, 0xdf, 0x6f, 0xd6, 0xef, 0x3d, 0x9d, 0x59, 0xff, 0x22, 0x7e, 0xa3, 0x3a, + 0xeb, 0x13, 0x5d, 0x92, 0xfa, 0x71, 0x38, 0xdb, 0x35, 0x83, 0x2e, 0x6d, 0xb6, 0x9f, 0x1f, 0x60, + 0xb6, 0xf3, 0x01, 0x38, 0x79, 0xb6, 0xf7, 0xac, 0x85, 0x6c, 0xc0, 0x84, 0xb8, 0x0b, 0xf1, 0x0e, + 0xbb, 0xa8, 0x85, 0x71, 0x56, 0x8b, 0xf8, 0x05, 0x55, 0x24, 0x8b, 0x48, 0xb4, 0x50, 0xe3, 0x42, + 0xda, 0x30, 0xcb, 0x7f, 0xeb, 0xba, 0xa9, 0x62, 0x4f, 0xdd, 0xd4, 0x15, 0xd1, 0xa2, 0x4b, 0x82, + 0x7f, 0x4c, 0x45, 0xa5, 0x86, 0x5f, 0x4a, 0x61, 0x4c, 0x3a, 0x40, 0x34, 0x30, 0x5f, 0xb4, 0x97, + 0xfa, 0x6b, 0xa4, 0x5e, 0x15, 0x75, 0x16, 0xe3, 0x75, 0xc6, 0x57, 0x6e, 0x0a, 0x6f, 0x62, 0xc3, + 0xb4, 0x80, 0xba, 0xfb, 0x94, 0xef, 0xf0, 0x2f, 0x6a, 0x01, 0xb0, 0x62, 0xa5, 0xfc, 0x12, 0x25, + 0x6b, 0xc2, 0x00, 0x65, 0xb1, 0x0d, 0x3d, 0xce, 0x8f, 0x3c, 0x80, 0x99, 0x52, 0xa7, 0xd3, 0x74, + 0x68, 0x03, 0x5b, 0x69, 0x76, 0x59, 0x9b, 0x8c, 0x28, 0xdf, 0x9a, 0xcd, 0x0b, 0xc5, 0xcd, 0xce, + 0xeb, 0xc6, 0xb6, 0x9b, 0x04, 0xad, 0xf1, 0x23, 0x99, 0xc4, 0x47, 0x93, 0xd7, 0x61, 0x0c, 0x7f, + 0x28, 0x31, 0x55, 0x50, 0xc5, 0xc3, 0x3f, 0x11, 0x95, 0x47, 0x11, 0x02, 0x13, 0x96, 0xd4, 0xb8, + 0x8a, 0x39, 0x2e, 0x2c, 0x09, 0xbd, 0x42, 0xa4, 0x49, 0x28, 0x4a, 0xd7, 0x8c, 0x5c, 0x24, 0x74, + 0xa1, 0x6b, 0x86, 0x70, 0xc8, 0x30, 0xbe, 0x3f, 0xab, 0x4f, 0x3b, 0x72, 0x45, 0x91, 0xdb, 0x95, + 0xc8, 0x8e, 0x52, 0x6e, 0x57, 0xa4, 0xf5, 0xbf, 0x9f, 0x81, 0xd9, 0x07, 0xde, 0xae, 0xdd, 0x76, + 0xbe, 0xc9, 0xc3, 0x68, 0xbb, 0x38, 0x2e, 0xfd, 0x53, 0x57, 0x3e, 0xad, 0x14, 0x7c, 0xae, 0x52, + 0x31, 0x9b, 0x29, 0x38, 0x65, 0xcc, 0xb4, 0xef, 0x41, 0x67, 0x37, 0xfc, 0x30, 0x25, 0x13, 0x22, + 0x47, 0xe7, 0x70, 0xe3, 0x27, 0xb2, 0x30, 0xae, 0x2c, 0x01, 0xf2, 0x19, 0x98, 0x50, 0xf9, 0xa8, + 0x0a, 0x3f, 0xb5, 0x5a, 0x53, 0xc3, 0x42, 0x8d, 0x1f, 0xb5, 0x5b, 0x9a, 0xc6, 0x8f, 0x4d, 0x74, + 0x84, 0x9e, 0xf2, 0x6a, 0xf3, 0x7e, 0xca, 0xd5, 0x06, 0xa7, 0xad, 0xa2, 0xb1, 0xe9, 0x7b, 0xc1, + 0x79, 0x27, 0x79, 0xc1, 0x41, 0xe5, 0x91, 0x42, 0xdf, 0xfb, 0x9a, 0x63, 0xfc, 0x74, 0x06, 0x0a, + 0xf1, 0x45, 0xfa, 0xb1, 0xf4, 0xca, 0x29, 0x5e, 0x77, 0x7e, 0x3c, 0x1b, 0xa6, 0x42, 0x91, 0x2e, + 0xbc, 0xcf, 0xaa, 0x99, 0xe0, 0xbb, 0xda, 0xc3, 0xcb, 0xf3, 0x7a, 0x34, 0x3a, 0x35, 0xf8, 0x45, + 0x7a, 0x08, 0xca, 0xa1, 0x6f, 0xff, 0x62, 0xf1, 0x39, 0xe3, 0x03, 0x98, 0x8b, 0x77, 0x07, 0x3e, + 0xbe, 0x94, 0x60, 0x5a, 0x87, 0xc7, 0x13, 0x29, 0xc5, 0xa9, 0xcc, 0x38, 0xbe, 0xf1, 0x87, 0xd9, + 0x38, 0x6f, 0x61, 0x32, 0xc8, 0x36, 0x1d, 0xd5, 0x10, 0x46, 0x6c, 0x3a, 0x1c, 0x64, 0xca, 0xb2, + 0xd3, 0x24, 0x30, 0x0b, 0x1d, 0x51, 0x73, 0xe9, 0x8e, 0xa8, 0xe4, 0x56, 0xcc, 0x4a, 0x5a, 0x89, + 0x9a, 0x74, 0x40, 0xb7, 0xad, 0xc8, 0x52, 0x3a, 0x66, 0x1c, 0x5d, 0x86, 0x39, 0x2d, 0x04, 0xb8, + 0xa4, 0x1f, 0x8e, 0x74, 0xed, 0x01, 0x16, 0x70, 0xe2, 0x54, 0x64, 0xb2, 0x02, 0xa3, 0xec, 0x33, + 0xef, 0xdb, 0x1d, 0xf1, 0xa6, 0x42, 0x42, 0xb7, 0xf4, 0x66, 0x78, 0xe1, 0x53, 0x3c, 0xd3, 0x9b, + 0x94, 0x1d, 0xf9, 0xea, 0xc4, 0x12, 0x88, 0xc6, 0x3f, 0xcf, 0xb0, 0xf5, 0x5f, 0xdf, 0xff, 0x84, + 0x65, 0x41, 0x63, 0x4d, 0xea, 0x63, 0xd1, 0xfa, 0x27, 0x59, 0x9e, 0x0b, 0x47, 0x4c, 0x9f, 0xb7, + 0x60, 0x64, 0xc3, 0xf6, 0x76, 0x45, 0xd6, 0x68, 0x9d, 0x0b, 0x2f, 0x88, 0x62, 0x3a, 0x05, 0xf8, + 0xdb, 0x14, 0x04, 0xaa, 0x2e, 0x2c, 0x3b, 0x90, 0x2e, 0x4c, 0xd1, 0xcb, 0xe7, 0x9e, 0x9a, 0x5e, + 0xfe, 0x7b, 0xc2, 0xb4, 0x37, 0xa5, 0x60, 0x80, 0x08, 0xd3, 0x97, 0xe2, 0x69, 0xa3, 0x12, 0xb1, + 0xc0, 0x23, 0x76, 0xe4, 0x96, 0x9a, 0x88, 0x4a, 0xf1, 0xed, 0x3c, 0x21, 0xe5, 0x94, 0xf1, 0x27, + 0x39, 0xde, 0xc7, 0xa2, 0xa3, 0x2e, 0x6b, 0x7e, 0xdf, 0xb8, 0x4e, 0xd8, 0x46, 0xaf, 0x86, 0xe0, + 0x40, 0xb3, 0xa9, 0xcb, 0x30, 0xc4, 0xe6, 0xa6, 0xe8, 0x4d, 0xc4, 0x63, 0xf3, 0x57, 0xc5, 0x63, + 0xe5, 0x6c, 0x2d, 0xe3, 0x99, 0xa4, 0x66, 0x18, 0xc4, 0x63, 0x4b, 0x5d, 0xcb, 0x88, 0x41, 0xae, + 0xc0, 0xd0, 0x9a, 0xdb, 0x90, 0x91, 0xcc, 0xe7, 0x30, 0xfa, 0x87, 0x96, 0xc2, 0x74, 0x3e, 0x63, + 0x22, 0x06, 0x6b, 0x6b, 0x98, 0xff, 0x41, 0x6d, 0x6b, 0x6b, 0xc7, 0x4e, 0x66, 0x8e, 0x53, 0x92, + 0xce, 0x2c, 0xc3, 0x94, 0x9e, 0xaa, 0x5e, 0xd8, 0xfb, 0xa2, 0x76, 0x3d, 0x96, 0xf1, 0x5e, 0x7d, + 0x16, 0xd1, 0x89, 0xc8, 0x12, 0x4c, 0x6a, 0x11, 0x54, 0xc5, 0xe3, 0x26, 0xaa, 0x37, 0xf5, 0xf8, + 0xab, 0xaa, 0x7a, 0x53, 0x23, 0x61, 0xe7, 0xb9, 0xf8, 0x7e, 0xe5, 0x89, 0x33, 0xf1, 0xed, 0x02, + 0x87, 0xdc, 0x84, 0x3c, 0x0f, 0xb3, 0x51, 0xad, 0xa8, 0xcf, 0x54, 0x3e, 0xc2, 0x62, 0x61, 0x6a, + 0x24, 0xa2, 0x12, 0x56, 0xe1, 0xd3, 0x50, 0x10, 0x5b, 0x52, 0x94, 0xfc, 0xfc, 0x05, 0x18, 0x2a, + 0x57, 0x2b, 0xa6, 0xba, 0x8d, 0xd4, 0x9d, 0x86, 0x67, 0x22, 0x14, 0xbd, 0xea, 0xd6, 0x68, 0x70, + 0xe0, 0x7a, 0xfb, 0x26, 0xf5, 0x03, 0xcf, 0xe1, 0x09, 0x2a, 0x71, 0x21, 0x7e, 0x86, 0xbc, 0x03, + 0xc3, 0x68, 0x78, 0x1a, 0x3b, 0x19, 0xe2, 0x75, 0x2c, 0x4d, 0x8a, 0x09, 0x3c, 0x8c, 0x56, 0xac, + 0x26, 0x27, 0x22, 0x6f, 0xc1, 0x50, 0x85, 0xb6, 0x0f, 0x63, 0xb9, 0xf3, 0x12, 0xc4, 0xe1, 0x86, + 0xd0, 0xa0, 0xed, 0x43, 0x13, 0x49, 0x8c, 0x9f, 0xce, 0xc2, 0x99, 0x94, 0xcf, 0x7a, 0xf8, 0x99, + 0x67, 0x74, 0x57, 0x5c, 0xd2, 0x76, 0x45, 0xf9, 0x3e, 0xdd, 0xb3, 0xe3, 0x53, 0x37, 0xc9, 0x9f, + 0xcf, 0xc0, 0x39, 0x7d, 0x82, 0x0a, 0x4b, 0xf3, 0x87, 0x37, 0xc9, 0xdb, 0x30, 0xb2, 0x42, 0xed, + 0x06, 0x95, 0x79, 0xb5, 0xce, 0x84, 0x01, 0xf1, 0x78, 0x0c, 0x01, 0x5e, 0xc8, 0xd9, 0x46, 0x1e, + 0xa7, 0x1c, 0x4a, 0x2a, 0xe2, 0xe3, 0xb8, 0x3c, 0x6e, 0xc8, 0x78, 0x1e, 0x69, 0x55, 0xf5, 0xb1, + 0xf2, 0xf8, 0x4e, 0x06, 0x9e, 0xef, 0x43, 0xc3, 0x06, 0x8e, 0x0d, 0xbd, 0x3a, 0x70, 0x78, 0xa2, + 0x22, 0x94, 0xbc, 0x07, 0xd3, 0x1b, 0x42, 0x9e, 0x97, 0xc3, 0x91, 0x8d, 0xd6, 0x8b, 0x14, 0xf5, + 0x2d, 0x39, 0x2e, 0x71, 0x64, 0x2d, 0xd0, 0x4c, 0xae, 0x6f, 0xa0, 0x19, 0x35, 0x6e, 0xcb, 0xd0, + 0xa0, 0x71, 0x5b, 0x3e, 0x80, 0x39, 0xbd, 0x6d, 0x22, 0x7c, 0x6e, 0x14, 0xb5, 0x26, 0xd3, 0x3b, + 0x6a, 0x4d, 0xdf, 0x20, 0x9d, 0xc6, 0x4f, 0x64, 0xa0, 0xa0, 0xf3, 0x7e, 0xd2, 0xf1, 0x7c, 0x57, + 0x1b, 0xcf, 0xe7, 0xd3, 0xc7, 0xb3, 0xf7, 0x40, 0xfe, 0x3f, 0x99, 0x78, 0x63, 0x07, 0x1a, 0x41, + 0x03, 0x46, 0x2a, 0x6e, 0xcb, 0x76, 0xda, 0x6a, 0x2e, 0xfd, 0x06, 0x42, 0x4c, 0x51, 0x32, 0x58, + 0x90, 0x9f, 0x4b, 0x30, 0xbc, 0xe6, 0xb6, 0x4b, 0x15, 0x61, 0xd2, 0x8b, 0x7c, 0xda, 0x6e, 0xdb, + 0xb2, 0x1b, 0x26, 0x2f, 0x20, 0xab, 0x00, 0xb5, 0xba, 0x47, 0x69, 0xbb, 0xe6, 0x7c, 0x93, 0xc6, + 0x24, 0x0d, 0xd6, 0x43, 0xcd, 0x2e, 0x6e, 0x2c, 0xfc, 0xe9, 0x12, 0x11, 0x2d, 0xdf, 0xf9, 0xa6, + 0xba, 0xdf, 0x2a, 0xf4, 0xb8, 0xae, 0x44, 0x1c, 0xb4, 0xd8, 0x38, 0xdc, 0xf8, 0x38, 0xd6, 0x55, + 0x6a, 0x55, 0xd8, 0xc3, 0x37, 0x52, 0x87, 0xe3, 0x0f, 0x32, 0xf0, 0x7c, 0x1f, 0x9a, 0xa7, 0x30, + 0x2a, 0x7f, 0xd9, 0x1d, 0x4e, 0x01, 0x22, 0x22, 0x4c, 0x4d, 0xec, 0x34, 0x02, 0x9e, 0x2b, 0x6f, + 0x52, 0xa4, 0x26, 0x66, 0x00, 0x2d, 0x35, 0x31, 0x03, 0xb0, 0xb3, 0x74, 0x85, 0x3a, 0xbb, 0x7b, + 0xdc, 0x3c, 0x6b, 0x92, 0xef, 0x0d, 0x7b, 0x08, 0x51, 0xcf, 0x52, 0x8e, 0x63, 0xfc, 0xcb, 0x61, + 0x38, 0x6f, 0xd2, 0x5d, 0x87, 0xdd, 0x4b, 0x36, 0x7d, 0xa7, 0xbd, 0xab, 0xc5, 0xbd, 0x31, 0x62, + 0x2b, 0x57, 0x24, 0x89, 0x60, 0x90, 0x70, 0x26, 0x5e, 0x85, 0x3c, 0x13, 0x43, 0x94, 0xc5, 0x8b, + 0x8f, 0x56, 0x4c, 0x58, 0x11, 0x81, 0x95, 0x65, 0x31, 0x79, 0x4d, 0x88, 0x49, 0x4a, 0x1a, 0x1f, + 0x26, 0x26, 0x7d, 0xf7, 0xa8, 0x08, 0xb5, 0x43, 0x3f, 0xa0, 0x78, 0x45, 0x16, 0xa2, 0x52, 0x78, + 0x97, 0x19, 0xea, 0x71, 0x97, 0xb9, 0x0f, 0x73, 0xa5, 0x06, 0x3f, 0x1d, 0xed, 0xe6, 0xba, 0xe7, + 0xb4, 0xeb, 0x4e, 0xc7, 0x6e, 0xca, 0xfb, 0x39, 0xf6, 0xb2, 0x1d, 0x96, 0x5b, 0x9d, 0x10, 0xc1, + 0x4c, 0x25, 0x63, 0xcd, 0xa8, 0xac, 0xd5, 0x30, 0x3c, 0x8c, 0x78, 0x8f, 0xc4, 0x66, 0x34, 0xda, + 0x3e, 0xb6, 0xc2, 0x37, 0xc3, 0x62, 0xbc, 0x45, 0xe1, 0x83, 0xfc, 0xc6, 0x6a, 0x2d, 0x72, 0x69, + 0xe6, 0x59, 0x06, 0xf8, 0xc3, 0x7e, 0xd0, 0xf4, 0xd1, 0x14, 0x52, 0xc3, 0x8b, 0xe8, 0x6a, 0xb5, + 0x15, 0x46, 0x97, 0x4f, 0xd0, 0xf9, 0xfe, 0x9e, 0x4a, 0xc7, 0xf1, 0xc8, 0x75, 0x36, 0x15, 0x5a, + 0x6e, 0x40, 0x71, 0x0a, 0x8f, 0x45, 0x77, 0x2e, 0x0f, 0xa1, 0xfc, 0xce, 0xa5, 0xa0, 0x90, 0x77, + 0x60, 0x76, 0xb9, 0xbc, 0x28, 0xb5, 0xc8, 0x15, 0xb7, 0xde, 0xc5, 0x87, 0x78, 0xc0, 0xfa, 0x70, + 0x0c, 0x69, 0x7d, 0x91, 0xed, 0x26, 0x69, 0x68, 0xe4, 0x32, 0x8c, 0x56, 0x2b, 0xbc, 0xef, 0xc7, + 0xd5, 0x54, 0x5a, 0xc2, 0x32, 0x4a, 0x16, 0x92, 0x07, 0xd1, 0xa5, 0x60, 0xe2, 0x44, 0xe9, 0xfd, + 0xfc, 0x00, 0x17, 0x82, 0xb7, 0x60, 0x72, 0xc9, 0x0d, 0xaa, 0x6d, 0x3f, 0xb0, 0xdb, 0x75, 0x5a, + 0xad, 0xa8, 0x71, 0xad, 0xb7, 0xdd, 0xc0, 0x72, 0x44, 0x09, 0xfb, 0x72, 0x1d, 0x93, 0x7c, 0x0e, + 0x49, 0xef, 0xd0, 0x36, 0xf5, 0xa2, 0x78, 0xd6, 0xc3, 0xbc, 0x6f, 0x19, 0xe9, 0x6e, 0x58, 0x62, + 0xea, 0x88, 0x22, 0xcd, 0x17, 0x4f, 0xce, 0x59, 0x76, 0x1b, 0xd4, 0xe7, 0xbb, 0xc5, 0x27, 0x28, + 0xcd, 0x97, 0xd2, 0xb6, 0x3e, 0x3b, 0xe8, 0xbf, 0x87, 0x69, 0xbe, 0x12, 0xb8, 0xe4, 0x73, 0x30, + 0x8c, 0x3f, 0x85, 0x74, 0x3b, 0x9b, 0xc2, 0x36, 0x92, 0x6c, 0xeb, 0x0c, 0xd3, 0xe4, 0x04, 0xa4, + 0x0a, 0xa3, 0xe2, 0x62, 0x75, 0x9a, 0x64, 0x35, 0xe2, 0x86, 0xc6, 0x67, 0x86, 0xa0, 0x37, 0x1a, + 0x30, 0xa1, 0x56, 0xc8, 0x56, 0xc4, 0x8a, 0xed, 0xef, 0xd1, 0x06, 0xfb, 0x25, 0xf2, 0xcc, 0xe1, + 0x8a, 0xd8, 0x43, 0xa8, 0xc5, 0xbe, 0xc3, 0x54, 0x50, 0xd8, 0x99, 0x5a, 0xf5, 0x37, 0x7d, 0xf1, + 0x29, 0x42, 0xd5, 0xe2, 0xa0, 0xda, 0xae, 0x61, 0x8a, 0x22, 0xe3, 0x7b, 0x60, 0x6e, 0xad, 0xdb, + 0x6c, 0xda, 0xdb, 0x4d, 0x2a, 0xf3, 0x90, 0x60, 0x06, 0xef, 0x25, 0x18, 0xae, 0x29, 0x39, 0xc1, + 0xc3, 0x5c, 0x90, 0x0a, 0x0e, 0x1a, 0xa1, 0x66, 0x30, 0x54, 0x4f, 0x2c, 0x1b, 0x38, 0x27, 0x35, + 0x7e, 0x2f, 0x03, 0x73, 0xf2, 0xfd, 0xdf, 0xb3, 0xeb, 0xfb, 0x61, 0x62, 0xf8, 0xcb, 0xda, 0x5c, + 0xc3, 0x09, 0x1b, 0x9b, 0x46, 0x7c, 0xd6, 0xdd, 0x95, 0x1f, 0xa1, 0x0b, 0x2c, 0x69, 0x1f, 0x7c, + 0xd2, 0xc7, 0x90, 0x77, 0x60, 0x5c, 0x1c, 0x8f, 0x4a, 0x80, 0x49, 0x8c, 0xe2, 0x25, 0xae, 0x7b, + 0x71, 0x6b, 0x14, 0x15, 0x1d, 0x65, 0x31, 0xbd, 0x29, 0x4f, 0x2a, 0x03, 0xa4, 0xcb, 0x62, 0x7a, + 0x1d, 0x7d, 0xa6, 0xee, 0x6f, 0x8d, 0xc7, 0xfb, 0x56, 0xcc, 0xdd, 0x5b, 0x6a, 0x48, 0xb9, 0x4c, + 0x74, 0x33, 0x8e, 0x42, 0xca, 0xa9, 0x37, 0xe3, 0x10, 0x35, 0x1c, 0x93, 0xec, 0x09, 0x63, 0xf2, + 0x9e, 0x1c, 0x93, 0x5c, 0xef, 0x89, 0x31, 0xdb, 0x67, 0x1c, 0x6a, 0xd1, 0x0a, 0x19, 0x1a, 0x48, + 0xad, 0xf2, 0x1c, 0xc6, 0xce, 0xe7, 0x24, 0xf1, 0x5d, 0x54, 0x70, 0x52, 0x75, 0x35, 0xc3, 0x83, + 0x33, 0x3d, 0x61, 0x6b, 0xfe, 0x3c, 0x4c, 0x94, 0x82, 0xc0, 0xae, 0xef, 0xd1, 0x46, 0x85, 0x6d, + 0x4f, 0x4a, 0xf4, 0x2b, 0x5b, 0xc0, 0xd5, 0x47, 0x33, 0x15, 0x97, 0x47, 0x73, 0xb5, 0x7d, 0x61, + 0xcc, 0x1a, 0x46, 0x73, 0x65, 0x10, 0x3d, 0x9a, 0x2b, 0x83, 0x90, 0xeb, 0x30, 0x5a, 0x6d, 0x3f, + 0x72, 0x58, 0x9f, 0xf0, 0x00, 0x58, 0xa8, 0x9b, 0x72, 0x38, 0x48, 0xdd, 0x5c, 0x05, 0x16, 0x79, + 0x4b, 0xb9, 0xd4, 0x8c, 0x45, 0x0a, 0x0c, 0xae, 0xf2, 0x0a, 0x23, 0xdc, 0xa8, 0x17, 0x96, 0xf0, + 0x96, 0x73, 0x0b, 0x46, 0xa5, 0x26, 0x13, 0x22, 0xa5, 0x85, 0xa0, 0x4c, 0x06, 0x8c, 0x90, 0xc8, + 0x98, 0xe4, 0x5b, 0xc9, 0x97, 0x37, 0xae, 0x24, 0xf9, 0x56, 0xf2, 0xe5, 0x69, 0x49, 0xbe, 0x95, + 0xcc, 0x79, 0xa1, 0x12, 0x68, 0xe2, 0x44, 0x25, 0xd0, 0x43, 0x98, 0x58, 0xb7, 0xbd, 0xc0, 0x61, + 0x32, 0x4a, 0x3b, 0xf0, 0xe7, 0x27, 0x35, 0xbd, 0xa9, 0x52, 0xb4, 0x74, 0x51, 0xe6, 0xa5, 0xee, + 0x28, 0xf8, 0x7a, 0x02, 0xe5, 0x08, 0x9e, 0x6e, 0xca, 0x3a, 0xf5, 0x24, 0xa6, 0xac, 0xd8, 0xa9, + 0xa8, 0x2b, 0x9b, 0x8e, 0x34, 0x32, 0x78, 0x69, 0x89, 0x29, 0xcc, 0x42, 0x44, 0xf2, 0x15, 0x98, + 0x60, 0x7f, 0xaf, 0xbb, 0x4d, 0xa7, 0xee, 0x50, 0x7f, 0xbe, 0x80, 0x8d, 0xbb, 0x98, 0xba, 0xfa, + 0x11, 0xe9, 0xb0, 0x46, 0x03, 0xbe, 0x80, 0x91, 0x71, 0x5c, 0x09, 0xae, 0x71, 0x23, 0xef, 0xc3, + 0x04, 0x9b, 0x7d, 0xdb, 0xb6, 0xcf, 0x45, 0xd3, 0x99, 0xc8, 0x18, 0xb9, 0x21, 0xe0, 0x89, 0x80, + 0xca, 0x2a, 0x01, 0x3b, 0xe6, 0x4b, 0x1d, 0xbe, 0x41, 0x12, 0x65, 0xb6, 0x77, 0x12, 0x9b, 0xa3, + 0x44, 0x23, 0x5f, 0x80, 0x89, 0x52, 0xa7, 0x13, 0xed, 0x38, 0xb3, 0x8a, 0x22, 0xac, 0xd3, 0xb1, + 0x52, 0x77, 0x1d, 0x8d, 0x22, 0xbe, 0x31, 0xcf, 0x9d, 0x6a, 0x63, 0x26, 0x6f, 0x84, 0xd2, 0xfa, + 0x99, 0x48, 0xab, 0x2b, 0x2e, 0x8e, 0x9a, 0xe8, 0xcf, 0x05, 0xf7, 0x32, 0x4c, 0x72, 0x35, 0xa7, + 0x94, 0x66, 0xce, 0x26, 0x56, 0x4f, 0x8a, 0x50, 0xa3, 0xd3, 0x90, 0x65, 0x98, 0xe2, 0xde, 0xd6, + 0x4d, 0x11, 0xe9, 0x7a, 0xfe, 0x1c, 0xae, 0x5a, 0xe4, 0xc2, 0x9d, 0xb4, 0x9b, 0x98, 0x00, 0xc5, + 0xd6, 0xb8, 0xc4, 0x88, 0x8c, 0x3f, 0xcd, 0xc0, 0xb9, 0x1e, 0x23, 0x1e, 0xc6, 0x41, 0xce, 0xf4, + 0x8f, 0x83, 0xcc, 0x76, 0x0e, 0x5d, 0x2b, 0x82, 0xed, 0x17, 0x52, 0x96, 0x3a, 0x5e, 0x52, 0xde, + 0x72, 0x81, 0x88, 0x1c, 0x43, 0xa2, 0xea, 0xbb, 0x2e, 0xaa, 0x66, 0x73, 0xc9, 0x43, 0x48, 0xe0, + 0xf1, 0x8f, 0x5a, 0x32, 0x8e, 0x8f, 0x8a, 0x17, 0x45, 0x0a, 0xa3, 0x70, 0x58, 0x3f, 0x74, 0xb5, + 0x15, 0x9c, 0xc2, 0xda, 0x38, 0xca, 0xc0, 0xb8, 0xb2, 0x0e, 0xc9, 0x25, 0xc5, 0x0b, 0xb8, 0xc0, + 0x93, 0x60, 0x29, 0x1c, 0xb2, 0xfc, 0x24, 0xc2, 0x45, 0x95, 0x3d, 0x59, 0x01, 0x7d, 0x9f, 0x89, + 0x42, 0x4a, 0xac, 0xe8, 0x96, 0xa6, 0x2d, 0x36, 0xb1, 0x1c, 0xd3, 0xe9, 0xdb, 0x7e, 0x50, 0xaa, + 0x07, 0xce, 0x23, 0x3a, 0xc0, 0xa1, 0x13, 0xa5, 0xd3, 0xb7, 0xfd, 0xc0, 0xb2, 0x91, 0x2c, 0x91, + 0x4e, 0x3f, 0x64, 0x68, 0xfc, 0x40, 0x06, 0x60, 0xb3, 0x5a, 0xc6, 0x60, 0xef, 0x4f, 0x2a, 0x14, + 0xa4, 0x07, 0xd0, 0x95, 0xdc, 0xfb, 0x88, 0x03, 0xff, 0x4b, 0x06, 0xa6, 0x74, 0x34, 0xf2, 0x1e, + 0x4c, 0xd7, 0xea, 0x9e, 0xdb, 0x6c, 0x6e, 0xdb, 0xf5, 0xfd, 0x55, 0xa7, 0x4d, 0x79, 0xe8, 0xd2, + 0x61, 0x7e, 0x16, 0xf9, 0x61, 0x91, 0xd5, 0x64, 0x65, 0x66, 0x1c, 0x99, 0xfc, 0x60, 0x06, 0x26, + 0x6b, 0x7b, 0xee, 0x41, 0x18, 0x6d, 0x54, 0x0c, 0xc8, 0x57, 0xd9, 0xda, 0xf6, 0xf7, 0xdc, 0x83, + 0x28, 0x83, 0xa6, 0x66, 0xfc, 0xf9, 0xee, 0x60, 0xef, 0xf2, 0x75, 0x17, 0x6f, 0x32, 0x81, 0x7f, + 0x4d, 0xab, 0xc4, 0xd4, 0xeb, 0x34, 0xfe, 0x22, 0x03, 0xe3, 0x78, 0xe7, 0x69, 0x36, 0x51, 0xe6, + 0xfa, 0x24, 0xa5, 0x63, 0x0c, 0xdb, 0xd5, 0x67, 0x60, 0xdf, 0x84, 0xe9, 0x18, 0x1a, 0x31, 0x60, + 0xa4, 0x86, 0x0e, 0xfe, 0xaa, 0x82, 0x82, 0xbb, 0xfc, 0x9b, 0xa2, 0xc4, 0x58, 0x56, 0xc8, 0x1e, + 0xde, 0xc0, 0x67, 0xdd, 0x45, 0x00, 0x47, 0x82, 0xe4, 0xcd, 0x86, 0xc4, 0xbf, 0xe4, 0xe1, 0x0d, + 0x53, 0xc1, 0x32, 0xd6, 0x60, 0xa4, 0xe6, 0x7a, 0xc1, 0xd2, 0x21, 0xbf, 0x4c, 0x54, 0xa8, 0x5f, + 0x57, 0xdf, 0x6d, 0x1d, 0x7c, 0x2b, 0xa9, 0x9b, 0xa2, 0x88, 0x14, 0x61, 0xf8, 0xb6, 0x43, 0x9b, + 0x0d, 0xd5, 0x40, 0x77, 0x87, 0x01, 0x4c, 0x0e, 0x67, 0x17, 0xae, 0xb3, 0x51, 0x4e, 0x94, 0xc8, + 0x12, 0xf8, 0x49, 0xd7, 0x4d, 0x59, 0xeb, 0xdf, 0x17, 0xc3, 0x3c, 0x04, 0xc9, 0x9a, 0xfa, 0x74, + 0xf5, 0x7f, 0x9a, 0x81, 0x85, 0xde, 0x24, 0xaa, 0x71, 0x71, 0xa6, 0x8f, 0x71, 0xf1, 0x2b, 0xf1, + 0x77, 0x46, 0x44, 0x13, 0xef, 0x8c, 0xd1, 0xeb, 0x62, 0x05, 0x6d, 0xbb, 0xeb, 0x54, 0x26, 0x42, + 0xb9, 0xd4, 0xe7, 0x9b, 0x11, 0x91, 0x0f, 0x73, 0x80, 0x34, 0xa6, 0xa0, 0x35, 0x7e, 0x73, 0x08, + 0xce, 0xf7, 0xa4, 0x20, 0x2b, 0x4a, 0x7a, 0xa5, 0xa9, 0x30, 0xb1, 0x4b, 0x4f, 0xfc, 0x6b, 0xf8, + 0x2f, 0x9a, 0xef, 0xc5, 0xbd, 0xcd, 0x1e, 0x84, 0x69, 0x75, 0xb2, 0xc8, 0xeb, 0x53, 0x27, 0xf2, + 0xe2, 0xe8, 0xc8, 0x0c, 0x92, 0x19, 0x76, 0xd0, 0x2f, 0x91, 0x06, 0xb6, 0xd3, 0xf4, 0xd5, 0x65, + 0xd7, 0xe0, 0x20, 0x53, 0x96, 0x45, 0x16, 0xdf, 0x43, 0xe9, 0x16, 0xdf, 0xc6, 0xbf, 0xcc, 0xc0, + 0x58, 0xf8, 0xd9, 0x64, 0x01, 0xce, 0x6e, 0x98, 0xa5, 0xf2, 0xb2, 0xb5, 0xf1, 0xc1, 0xfa, 0xb2, + 0xb5, 0xb9, 0x56, 0x5b, 0x5f, 0x2e, 0x57, 0x6f, 0x57, 0x97, 0x2b, 0x85, 0xe7, 0xc8, 0x0c, 0x4c, + 0x6e, 0xae, 0xdd, 0x5b, 0x7b, 0xb0, 0xb5, 0x66, 0x2d, 0x9b, 0xe6, 0x03, 0xb3, 0x90, 0x21, 0x93, + 0x30, 0x66, 0x2e, 0x95, 0xca, 0xd6, 0xda, 0x83, 0xca, 0x72, 0x21, 0x4b, 0x0a, 0x30, 0x51, 0x7e, + 0xb0, 0xb6, 0xb6, 0x5c, 0xde, 0xa8, 0x3e, 0xac, 0x6e, 0x7c, 0x50, 0xc8, 0x11, 0x02, 0x53, 0x88, + 0xb0, 0x6e, 0x56, 0xd7, 0xca, 0xd5, 0xf5, 0xd2, 0x6a, 0x61, 0x88, 0xc1, 0x18, 0xbe, 0x02, 0x1b, + 0x0e, 0x19, 0xdd, 0xdb, 0x5c, 0x5a, 0x2e, 0x8c, 0x30, 0x14, 0xf6, 0x97, 0x82, 0x32, 0xca, 0xaa, + 0x47, 0x94, 0x4a, 0x69, 0xa3, 0xb4, 0x54, 0xaa, 0x2d, 0x17, 0xf2, 0xe4, 0x1c, 0xcc, 0x6a, 0x20, + 0x6b, 0xf5, 0xc1, 0x9d, 0xea, 0x5a, 0x61, 0x8c, 0xcc, 0x41, 0x21, 0x84, 0x55, 0x96, 0xac, 0xcd, + 0xda, 0xb2, 0x59, 0x80, 0x38, 0x74, 0xad, 0x74, 0x7f, 0xb9, 0x30, 0x6e, 0xbc, 0xcb, 0xfd, 0x00, + 0x79, 0x57, 0x93, 0xb3, 0x40, 0x6a, 0x1b, 0xa5, 0x8d, 0xcd, 0x5a, 0xac, 0xf1, 0xe3, 0x30, 0x5a, + 0xdb, 0x2c, 0x97, 0x97, 0x6b, 0xb5, 0x42, 0x86, 0x00, 0x8c, 0xdc, 0x2e, 0x55, 0x57, 0x97, 0x2b, + 0x85, 0xac, 0xf1, 0x53, 0x19, 0x98, 0x91, 0x12, 0xa0, 0x7c, 0x34, 0x7a, 0xc2, 0xb5, 0xf8, 0x9e, + 0x76, 0xb1, 0x95, 0x4e, 0x5a, 0xb1, 0x4a, 0xfa, 0x2c, 0xc3, 0x9f, 0xcf, 0xc0, 0x99, 0x54, 0x6c, + 0xf2, 0x01, 0x14, 0xe4, 0x17, 0xdc, 0xb7, 0x83, 0xfa, 0x5e, 0xb4, 0x8f, 0x5d, 0x8c, 0xd5, 0x12, + 0x43, 0xe3, 0x6a, 0xcd, 0x28, 0xe1, 0x73, 0x82, 0xcd, 0xe0, 0xe9, 0x08, 0x8c, 0x6f, 0x67, 0xe0, + 0x5c, 0x8f, 0x6a, 0x48, 0x19, 0x46, 0xc2, 0xc4, 0x34, 0x7d, 0x2c, 0xd8, 0xe6, 0xbe, 0x73, 0x54, + 0x14, 0x88, 0x98, 0x21, 0x17, 0xff, 0x32, 0x47, 0xc2, 0x4c, 0x33, 0x98, 0xee, 0x85, 0x77, 0xdf, + 0xf9, 0x58, 0xcf, 0x8b, 0x9a, 0x4a, 0x5b, 0xb5, 0xa5, 0x71, 0xd1, 0x77, 0x39, 0xfb, 0xc0, 0xc7, + 0x7c, 0x2f, 0xc6, 0xcf, 0x64, 0x98, 0x70, 0x17, 0x47, 0x64, 0x32, 0x6f, 0xc9, 0xf7, 0xbb, 0x2d, + 0x6a, 0xba, 0x4d, 0x5a, 0x32, 0xd7, 0xc4, 0xb1, 0x81, 0xd2, 0xaa, 0x8d, 0x05, 0x78, 0xad, 0xb0, + 0x6c, 0xaf, 0xad, 0xbd, 0x56, 0xab, 0x34, 0xe4, 0x2d, 0x80, 0xe5, 0xc7, 0x01, 0xf5, 0xda, 0x76, + 0x33, 0x8c, 0xd1, 0xc2, 0x23, 0x4b, 0x09, 0xa8, 0x2e, 0x6f, 0x2b, 0xc8, 0xc6, 0xdf, 0xca, 0xc0, + 0x84, 0xb8, 0x34, 0x95, 0x9a, 0xd4, 0x0b, 0x9e, 0x6c, 0x7a, 0xbd, 0xa5, 0x4d, 0xaf, 0xd0, 0x61, + 0x43, 0xe1, 0xcf, 0x8a, 0x53, 0x67, 0xd6, 0x3f, 0xc9, 0x40, 0x21, 0x8e, 0x48, 0xde, 0x83, 0x7c, + 0x8d, 0x3e, 0xa2, 0x9e, 0x13, 0x1c, 0x8a, 0x8d, 0x52, 0xa6, 0xf0, 0xe3, 0x38, 0xa2, 0x8c, 0xcf, + 0x07, 0x5f, 0xfc, 0x32, 0x43, 0x9a, 0x41, 0xf7, 0x7b, 0x45, 0xed, 0x91, 0x7b, 0x5a, 0x6a, 0x0f, + 0xe3, 0xff, 0xc8, 0xc2, 0xb9, 0x3b, 0x34, 0x50, 0xdb, 0x14, 0x9a, 0x17, 0x7c, 0x7a, 0xb0, 0x76, + 0x29, 0x2d, 0x99, 0x87, 0x51, 0x2c, 0x92, 0xe3, 0x6b, 0xca, 0x9f, 0x64, 0x29, 0x9c, 0xd7, 0x39, + 0x2d, 0x47, 0x58, 0x8f, 0xba, 0xaf, 0x29, 0x59, 0x83, 0xc2, 0x69, 0x7d, 0x19, 0xa6, 0x30, 0x2c, + 0x7e, 0x97, 0x2d, 0x07, 0xda, 0x10, 0xea, 0x9f, 0xbc, 0x19, 0x83, 0x92, 0xd7, 0xa0, 0xc0, 0x20, + 0xa5, 0xfa, 0x7e, 0xdb, 0x3d, 0x68, 0xd2, 0xc6, 0x2e, 0x6d, 0xe0, 0xb1, 0x9e, 0x37, 0x13, 0x70, + 0xc9, 0x73, 0xb3, 0xcd, 0xaf, 0x6e, 0xb4, 0x81, 0x3a, 0x1a, 0xc1, 0x33, 0x82, 0x2e, 0xbc, 0x05, + 0xe3, 0x1f, 0x31, 0x03, 0x98, 0xf1, 0xbf, 0x67, 0x60, 0x0e, 0x1b, 0xa7, 0x54, 0x2c, 0xb3, 0xb3, + 0xca, 0xde, 0x52, 0x92, 0xe2, 0xd8, 0x0c, 0xa4, 0x2f, 0x85, 0xb0, 0x17, 0x23, 0x9d, 0x50, 0x76, + 0x00, 0x9d, 0x50, 0xed, 0x34, 0x99, 0xe8, 0x07, 0x54, 0x69, 0xdd, 0x1d, 0xca, 0xe7, 0x0a, 0x43, + 0xd1, 0x90, 0x1b, 0x3f, 0x98, 0x85, 0x51, 0x93, 0x62, 0x8a, 0x6e, 0x72, 0x19, 0x46, 0xd7, 0xdc, + 0x80, 0xfa, 0xf7, 0xb5, 0x7c, 0xec, 0x6d, 0x06, 0xb2, 0x5a, 0x0d, 0x53, 0x16, 0xb2, 0x09, 0xbf, + 0xee, 0xb9, 0x8d, 0x6e, 0x3d, 0x50, 0x27, 0x7c, 0x87, 0x83, 0x4c, 0x59, 0x46, 0x5e, 0x87, 0x31, + 0xc1, 0x39, 0x7c, 0xd4, 0x45, 0x63, 0x64, 0x8f, 0x86, 0x29, 0xde, 0x23, 0x04, 0x94, 0x69, 0xb9, + 0x80, 0x31, 0xa4, 0xc8, 0xb4, 0x09, 0x99, 0x41, 0x8a, 0xea, 0xc3, 0x7d, 0x44, 0xf5, 0x4f, 0xc3, + 0x48, 0xc9, 0xf7, 0x69, 0x20, 0xa3, 0x18, 0x4c, 0x84, 0x61, 0xdb, 0x7c, 0x1a, 0x70, 0xc6, 0x36, + 0x96, 0x9b, 0x02, 0xcf, 0xf8, 0xe7, 0x59, 0x18, 0xc6, 0x3f, 0xf1, 0xc9, 0xd4, 0xab, 0xef, 0x69, + 0x4f, 0xa6, 0x5e, 0x7d, 0xcf, 0x44, 0x28, 0xb9, 0x81, 0x9a, 0x0a, 0x99, 0xbf, 0x49, 0xb4, 0x1e, + 0x55, 0xf0, 0x8d, 0x08, 0x6c, 0xaa, 0x38, 0xe1, 0x0b, 0x7f, 0x2e, 0x35, 0x76, 0xc9, 0x59, 0xc8, + 0x3e, 0xa8, 0x89, 0x16, 0x63, 0x44, 0x2c, 0xd7, 0x37, 0xb3, 0x0f, 0x6a, 0xd8, 0x1b, 0x2b, 0xa5, + 0xc5, 0x37, 0x6f, 0x89, 0x86, 0xf2, 0xde, 0xd8, 0xb3, 0x17, 0xdf, 0xbc, 0x65, 0x8a, 0x12, 0xd6, + 0xbf, 0xf8, 0xcd, 0xf8, 0xf0, 0xca, 0x7d, 0xee, 0xb1, 0x7f, 0xb1, 0x6d, 0xf8, 0xc8, 0x6a, 0x46, + 0x08, 0x64, 0x11, 0xc6, 0x45, 0xac, 0x07, 0xc4, 0x57, 0x62, 0x31, 0x88, 0x58, 0x10, 0x9c, 0x42, + 0x45, 0xe2, 0x4f, 0x70, 0x62, 0x80, 0x64, 0x96, 0x59, 0xf1, 0x04, 0x27, 0x87, 0xd0, 0x37, 0x15, + 0x14, 0xf6, 0x49, 0xfc, 0x0d, 0x2f, 0xf2, 0xa5, 0x9f, 0x52, 0x82, 0x06, 0x60, 0x9a, 0x83, 0x10, + 0xc1, 0xf8, 0xe5, 0x2c, 0xe4, 0xd7, 0x9b, 0xdd, 0x5d, 0xa7, 0xfd, 0xf0, 0x06, 0x21, 0x80, 0xd7, + 0x38, 0x99, 0x07, 0x83, 0xfd, 0x4d, 0xce, 0x43, 0x5e, 0xde, 0xdc, 0xe4, 0x86, 0xe4, 0x8b, 0x5b, + 0xdb, 0x3c, 0xc8, 0x71, 0x17, 0xa1, 0xcf, 0xe4, 0x4f, 0x72, 0x03, 0xc2, 0xfb, 0x57, 0xaf, 0x8b, + 0xda, 0x10, 0x5b, 0x2c, 0x66, 0x88, 0x46, 0xde, 0x00, 0x3c, 0x24, 0xc4, 0xe5, 0x41, 0x2a, 0xb4, + 0xf9, 0xa7, 0x09, 0x39, 0x85, 0x93, 0x20, 0x1a, 0xb9, 0x09, 0x62, 0x62, 0x8a, 0x6c, 0xe6, 0x67, + 0x74, 0x02, 0x9e, 0x1f, 0x52, 0x92, 0x08, 0x54, 0xf2, 0x0e, 0x8c, 0xd7, 0x3d, 0x8a, 0xaf, 0x8e, + 0x76, 0x33, 0x4a, 0x52, 0xae, 0x52, 0x96, 0xa3, 0xf2, 0x87, 0x37, 0x4c, 0x15, 0xdd, 0xf8, 0xe5, + 0x3c, 0x4c, 0xa8, 0xdf, 0x43, 0x4c, 0x98, 0xf5, 0x9b, 0xec, 0xee, 0x2e, 0x8c, 0xcd, 0x3a, 0x58, + 0x28, 0x8e, 0xd3, 0x4b, 0xfa, 0x07, 0x31, 0x3c, 0x6e, 0x79, 0x26, 0x83, 0x54, 0xac, 0x3c, 0x67, + 0xce, 0xf8, 0x11, 0x98, 0xe3, 0x91, 0x12, 0xe4, 0xdd, 0x8e, 0xbf, 0x4b, 0xdb, 0x8e, 0x7c, 0x6f, + 0x79, 0x49, 0x63, 0xf4, 0x40, 0x14, 0x26, 0x78, 0x85, 0x64, 0xe4, 0x4d, 0x18, 0x71, 0x3b, 0xb4, + 0x6d, 0x3b, 0xe2, 0x8c, 0x7b, 0x3e, 0xc6, 0x80, 0xb6, 0x4b, 0x55, 0x85, 0x50, 0x20, 0x93, 0xeb, + 0x30, 0xe4, 0xee, 0x87, 0xe3, 0x75, 0x5e, 0x27, 0xda, 0x0f, 0x6c, 0x85, 0x04, 0x11, 0x19, 0xc1, + 0x87, 0x76, 0x6b, 0x47, 0x8c, 0x98, 0x4e, 0x70, 0xd7, 0x6e, 0xed, 0xa8, 0x04, 0x0c, 0x91, 0xbc, + 0x0f, 0xd0, 0xb1, 0x77, 0xa9, 0x67, 0x35, 0xba, 0xc1, 0xa1, 0x18, 0xb7, 0x8b, 0x1a, 0xd9, 0x3a, + 0x2b, 0xae, 0x74, 0x83, 0x43, 0x85, 0x76, 0xac, 0x23, 0x81, 0xa4, 0x04, 0xd0, 0xb2, 0x83, 0x80, + 0x7a, 0x2d, 0x57, 0x58, 0xfb, 0x45, 0x41, 0x08, 0x39, 0x83, 0xfb, 0x61, 0xb1, 0xc2, 0x41, 0x21, + 0xc2, 0x8f, 0x76, 0x3c, 0x5b, 0xe4, 0x94, 0x8f, 0x7d, 0xb4, 0xe3, 0x69, 0xad, 0x64, 0x88, 0xe4, + 0x73, 0x30, 0xda, 0x70, 0xfc, 0xba, 0xeb, 0x35, 0x44, 0xf4, 0x92, 0x17, 0x34, 0x9a, 0x0a, 0x2f, + 0x53, 0xc8, 0x24, 0x3a, 0xfb, 0x5a, 0x11, 0x84, 0x74, 0xcd, 0x3d, 0x40, 0x35, 0x7f, 0xfc, 0x6b, + 0x6b, 0x61, 0xb1, 0xfa, 0xb5, 0x11, 0x11, 0x1b, 0xca, 0x5d, 0x27, 0x68, 0xda, 0xdb, 0xe2, 0x9d, + 0x5b, 0x1f, 0xca, 0x3b, 0x58, 0xa4, 0x0e, 0x25, 0x47, 0x26, 0x6f, 0x41, 0x9e, 0xb6, 0x03, 0xcf, + 0xb6, 0x9c, 0x86, 0xf0, 0x92, 0xd4, 0x3f, 0x9a, 0x1d, 0xc0, 0x76, 0xb5, 0xa2, 0x7e, 0x34, 0xe2, + 0x57, 0x1b, 0xac, 0x7f, 0xfc, 0xba, 0xd3, 0x12, 0xce, 0x8d, 0x7a, 0xff, 0xd4, 0xca, 0xd5, 0xfb, + 0x6a, 0xff, 0x30, 0x44, 0xf2, 0x1e, 0x8c, 0xb2, 0xf5, 0xdb, 0x70, 0x77, 0x45, 0x40, 0x08, 0x43, + 0xef, 0x1f, 0x5e, 0x96, 0x98, 0xae, 0x92, 0x88, 0x2d, 0x64, 0xfb, 0xc0, 0xb7, 0x9c, 0xba, 0x08, + 0xf2, 0xa0, 0x2f, 0xc7, 0xd2, 0x56, 0xad, 0x5a, 0x56, 0xc8, 0x86, 0xed, 0x03, 0xbf, 0x5a, 0x27, + 0x8b, 0x30, 0x8c, 0x29, 0x22, 0x44, 0x20, 0x4a, 0x9d, 0x06, 0x93, 0x43, 0xa8, 0x34, 0x88, 0xca, + 0x06, 0xb2, 0xe5, 0xa3, 0xbf, 0x88, 0x48, 0xd4, 0xa0, 0xf7, 0xc9, 0xfd, 0x1a, 0x3a, 0x91, 0xa8, + 0x9f, 0x28, 0xd0, 0xc9, 0x45, 0x80, 0xe8, 0x15, 0x9f, 0xbf, 0xb9, 0x98, 0x0a, 0xe4, 0xf3, 0x43, + 0xff, 0xf7, 0x2f, 0x16, 0x33, 0x4b, 0x00, 0x79, 0x19, 0xa1, 0xc6, 0x58, 0x85, 0xf3, 0x3d, 0xd7, + 0x3d, 0xb9, 0x0a, 0x85, 0x1d, 0x5b, 0x68, 0xfd, 0xea, 0x7b, 0x76, 0xbb, 0x4d, 0x9b, 0x62, 0xc7, + 0x9d, 0x96, 0xf0, 0x32, 0x07, 0x73, 0xce, 0xc6, 0xfb, 0x30, 0x97, 0x36, 0xe0, 0xe4, 0x45, 0x98, + 0x50, 0x83, 0xf1, 0x08, 0x26, 0xe3, 0x76, 0xc7, 0x91, 0xe1, 0x78, 0x04, 0x83, 0xdf, 0xc8, 0xc0, + 0x0b, 0xfd, 0xb6, 0x0f, 0xb2, 0x00, 0xf9, 0x8e, 0xe7, 0xb8, 0x28, 0xa6, 0x8a, 0x6c, 0x07, 0xf2, + 0x37, 0x26, 0x32, 0x40, 0x79, 0x2a, 0xb0, 0x77, 0x85, 0x83, 0x87, 0x39, 0x86, 0x90, 0x0d, 0x7b, + 0xd7, 0x27, 0x9f, 0x82, 0x99, 0x06, 0xdd, 0xb1, 0xbb, 0xcd, 0xc0, 0xf2, 0xeb, 0x7b, 0xb4, 0x81, + 0x3e, 0x55, 0x68, 0xb8, 0x67, 0x16, 0x44, 0x41, 0x4d, 0xc2, 0x13, 0x5f, 0x3c, 0xdc, 0xe3, 0x8b, + 0xef, 0x0e, 0xe5, 0x33, 0x85, 0xac, 0x89, 0x96, 0x52, 0xc6, 0xf7, 0x65, 0x61, 0xbe, 0xd7, 0x7a, + 0x21, 0xef, 0xa6, 0xf5, 0x01, 0x7f, 0xb8, 0x50, 0xe1, 0xea, 0xc3, 0x85, 0x52, 0x1b, 0x59, 0x84, + 0xd0, 0x23, 0xea, 0xa4, 0xe8, 0x06, 0x12, 0xc6, 0x68, 0x3a, 0xb6, 0xef, 0x1f, 0xb0, 0x2d, 0x21, + 0xa7, 0x04, 0xb4, 0x15, 0x30, 0x95, 0x46, 0xc2, 0xc8, 0x67, 0x01, 0xea, 0x4d, 0xd7, 0xa7, 0x68, + 0x1f, 0x20, 0x64, 0x0d, 0x6e, 0x16, 0x1e, 0x42, 0xd5, 0x07, 0x61, 0x84, 0x96, 0xdd, 0x06, 0x15, + 0x03, 0x68, 0xc3, 0xb9, 0x1e, 0x1b, 0x24, 0x1b, 0x9e, 0x28, 0x3b, 0xbc, 0xcc, 0x35, 0xd5, 0x0d, + 0x73, 0xc4, 0xc7, 0x7b, 0x3c, 0xdb, 0x6b, 0x8e, 0x1c, 0x02, 0x49, 0xee, 0x82, 0x8c, 0xbb, 0x30, + 0x6e, 0xee, 0x7a, 0x21, 0x77, 0x0e, 0xd9, 0xf4, 0x9a, 0xa4, 0x08, 0xe3, 0x32, 0x97, 0x24, 0x93, + 0xe5, 0x39, 0x73, 0x10, 0xa0, 0x7b, 0x14, 0x27, 0x0f, 0x46, 0x2c, 0x45, 0xbf, 0x37, 0x21, 0x25, + 0x8c, 0x21, 0x64, 0xe3, 0xb0, 0x23, 0x5b, 0xf7, 0x82, 0x9c, 0xdf, 0xfa, 0xd9, 0x24, 0x4a, 0x7f, + 0x36, 0x23, 0x87, 0x3f, 0xb9, 0xb9, 0x9f, 0xf4, 0x7d, 0x04, 0xd0, 0x4b, 0x49, 0x7c, 0x18, 0xfe, + 0xcd, 0xa4, 0x16, 0xb9, 0xea, 0x84, 0xd4, 0x22, 0x7e, 0x92, 0xcb, 0x30, 0xed, 0x71, 0x3b, 0xd6, + 0xc0, 0x15, 0xfd, 0xc9, 0xf3, 0x76, 0x4c, 0x72, 0xf0, 0x86, 0x8b, 0x7d, 0x2a, 0xbe, 0xeb, 0x6e, + 0xd8, 0x61, 0xca, 0x59, 0x47, 0xae, 0xc1, 0x18, 0x3b, 0xeb, 0x30, 0xd2, 0x4d, 0xcc, 0x3d, 0x02, + 0xf1, 0x50, 0x72, 0x30, 0xf3, 0x1f, 0x8a, 0xbf, 0x05, 0xaf, 0x6f, 0x67, 0x25, 0x33, 0xf5, 0xa4, + 0x25, 0xe7, 0x60, 0xd4, 0xf5, 0x76, 0x95, 0xa6, 0x8d, 0xb8, 0xde, 0x2e, 0x6b, 0xd7, 0x15, 0x28, + 0x70, 0x6f, 0x1d, 0x1e, 0x06, 0xc1, 0x3f, 0x6c, 0xf3, 0xab, 0x78, 0xde, 0x9c, 0xe2, 0x70, 0x4c, + 0x98, 0x7f, 0xd8, 0xae, 0x33, 0x4c, 0xdf, 0x77, 0x2d, 0x35, 0xc0, 0x95, 0x68, 0xf6, 0x94, 0xef, + 0xbb, 0x51, 0xa4, 0xab, 0x06, 0x59, 0x82, 0x49, 0xc6, 0x27, 0x0c, 0xb3, 0x25, 0x04, 0x81, 0x0b, + 0x49, 0x41, 0xe0, 0xb0, 0x5d, 0x97, 0x9f, 0x68, 0x4e, 0xf8, 0xca, 0x2f, 0x72, 0x0f, 0x0a, 0x8a, + 0xc4, 0x84, 0xfe, 0x98, 0x31, 0x9b, 0xea, 0x88, 0x8d, 0x22, 0x69, 0x55, 0xdb, 0x3b, 0xae, 0x39, + 0x5d, 0xd7, 0x01, 0xa2, 0x6b, 0xfe, 0xfd, 0x8c, 0xdc, 0x4b, 0x53, 0x88, 0x88, 0x01, 0x93, 0x7b, + 0xb6, 0x6f, 0xf9, 0x7e, 0x8b, 0xdb, 0x88, 0x89, 0xc0, 0xbe, 0xe3, 0x7b, 0xb6, 0x5f, 0xf3, 0x5b, + 0x32, 0x71, 0xc8, 0x19, 0x86, 0xe3, 0xda, 0xdd, 0x60, 0xcf, 0x52, 0xe5, 0x3f, 0xde, 0x63, 0xb3, + 0x7b, 0xb6, 0xff, 0x80, 0x95, 0x29, 0xbc, 0xc9, 0xcb, 0x30, 0x85, 0x7c, 0xeb, 0x8e, 0x64, 0x8c, + 0xa1, 0x2c, 0xcc, 0x7f, 0xcd, 0xde, 0xb7, 0xc5, 0x36, 0x92, 0x5c, 0x87, 0x4e, 0x93, 0x94, 0x44, + 0x1d, 0xea, 0xd1, 0xaa, 0x79, 0x48, 0x2b, 0xcd, 0xce, 0xec, 0xf4, 0x3c, 0x76, 0x86, 0xeb, 0x5d, + 0x7b, 0x66, 0xef, 0x7a, 0x77, 0xed, 0xeb, 0x47, 0x8b, 0x6c, 0x4a, 0x9c, 0xe1, 0xcb, 0xdd, 0xa4, + 0xe4, 0xf1, 0xd8, 0x6e, 0xf7, 0x92, 0x2d, 0xa9, 0x63, 0x8a, 0xa4, 0xd9, 0xe4, 0x8e, 0xc7, 0x08, + 0x90, 0x18, 0x01, 0x6c, 0x20, 0x2f, 0x27, 0x4e, 0x80, 0x18, 0x41, 0x80, 0x7c, 0xc4, 0x08, 0xf2, + 0x91, 0xdf, 0x20, 0x41, 0x92, 0x1f, 0xff, 0x19, 0x30, 0x0c, 0x18, 0x48, 0xbe, 0x92, 0x60, 0x91, + 0x2c, 0x90, 0x00, 0x79, 0xfc, 0x05, 0xf1, 0x87, 0xbf, 0x82, 0x3a, 0x55, 0xd5, 0x5d, 0xfd, 0x20, + 0x47, 0xe3, 0xdd, 0x4d, 0x62, 0xc0, 0x5f, 0x12, 0x4f, 0x9d, 0x53, 0x5d, 0xef, 0x3a, 0xe7, 0xd4, + 0x79, 0xac, 0xd0, 0x8a, 0xbb, 0x1e, 0xab, 0x99, 0xb7, 0xf0, 0x5f, 0x33, 0x70, 0x29, 0x7d, 0x74, + 0x70, 0x79, 0xd2, 0x31, 0x45, 0x1f, 0x3d, 0xde, 0xb6, 0x65, 0x0a, 0x61, 0x61, 0x48, 0xd2, 0x26, + 0x27, 0x93, 0x3a, 0x39, 0x45, 0xd8, 0xc0, 0x8a, 0x38, 0xa7, 0xd9, 0xf7, 0xfc, 0x09, 0x8f, 0xae, + 0x61, 0xae, 0xd3, 0x02, 0x76, 0x9e, 0xd7, 0x28, 0x98, 0xdc, 0x84, 0x35, 0x71, 0x22, 0x0f, 0x1f, + 0x0f, 0xe8, 0x87, 0xd9, 0x71, 0xbc, 0xca, 0xa1, 0x4d, 0x04, 0x92, 0x8b, 0xb0, 0xe8, 0x8c, 0x46, + 0xf4, 0x93, 0xec, 0x14, 0x5e, 0x70, 0x46, 0x23, 0x96, 0xdc, 0x06, 0x3d, 0x12, 0xed, 0x23, 0xb4, + 0x12, 0xe2, 0x26, 0x89, 0xe6, 0x0a, 0x02, 0x99, 0xe5, 0x90, 0x4f, 0xf7, 0x3d, 0xa5, 0x15, 0x28, + 0x4b, 0x88, 0x02, 0xce, 0x28, 0x40, 0x78, 0x0e, 0xf2, 0xe2, 0xbd, 0x9a, 0x39, 0x56, 0x98, 0x4b, + 0x0e, 0x7f, 0xab, 0x7e, 0x0d, 0x36, 0x7b, 0x9e, 0x8f, 0x8b, 0x97, 0x75, 0x69, 0x34, 0xe2, 0x3e, + 0x90, 0x2c, 0x48, 0xae, 0x79, 0x81, 0x17, 0xd3, 0x91, 0xd4, 0x47, 0x23, 0xe6, 0x09, 0xc9, 0xc7, + 0xfa, 0x0d, 0x58, 0xe7, 0x1c, 0x17, 0xbf, 0x22, 0xb1, 0x2d, 0x7c, 0x03, 0x53, 0x51, 0x88, 0xa7, + 0x13, 0x02, 0x0e, 0xaa, 0xf6, 0x04, 0xe5, 0x3f, 0x28, 0x70, 0x31, 0x95, 0x65, 0x23, 0x5f, 0x02, + 0xe6, 0xf2, 0x35, 0x19, 0xda, 0x63, 0xb7, 0xeb, 0x8d, 0x3c, 0x0c, 0x8a, 0xc1, 0x54, 0x9a, 0xf7, + 0xe6, 0x31, 0x7b, 0xe8, 0x3e, 0xd6, 0x1e, 0x9a, 0x01, 0x11, 0xd3, 0xb5, 0xa8, 0xe3, 0x18, 0x78, + 0xfb, 0x11, 0x5c, 0x4c, 0x45, 0x4d, 0xd1, 0x81, 0x7c, 0x28, 0x9a, 0xcc, 0x59, 0x3c, 0x52, 0xc5, + 0x3a, 0x2d, 0xe9, 0x46, 0x78, 0xf7, 0xbe, 0x17, 0x74, 0x2f, 0xc6, 0xdc, 0x11, 0x23, 0xbe, 0xaf, + 0xd3, 0xe4, 0x13, 0x41, 0x34, 0x7b, 0x6b, 0x3f, 0x82, 0x8b, 0x7c, 0xf1, 0x1d, 0x8f, 0x9d, 0xd1, + 0x49, 0x58, 0x1d, 0x6b, 0xe8, 0x8b, 0x69, 0xd5, 0xb1, 0x55, 0xb9, 0x47, 0xf1, 0x83, 0x5a, 0xcf, + 0x3b, 0x49, 0x20, 0xef, 0xc3, 0xd7, 0x33, 0x62, 0xab, 0xa7, 0x34, 0x27, 0x65, 0x59, 0x2b, 0x69, + 0xcb, 0xfa, 0xec, 0x7b, 0xaa, 0x01, 0x44, 0x3e, 0xac, 0x98, 0xd6, 0x93, 0x1b, 0x54, 0x09, 0x3e, + 0x9d, 0x37, 0x44, 0x3a, 0x1a, 0x2c, 0x96, 0x4c, 0x73, 0xa3, 0x1b, 0x07, 0x91, 0x1d, 0x58, 0x0e, + 0xf2, 0x55, 0xf3, 0x8b, 0x23, 0xcf, 0x00, 0xd5, 0x1e, 0x79, 0x01, 0x56, 0x18, 0x4b, 0x1e, 0xd9, + 0x73, 0x80, 0x30, 0x9d, 0x6e, 0x3c, 0x31, 0x06, 0x0a, 0xbc, 0xf0, 0xb4, 0x31, 0x24, 0x87, 0x70, + 0x09, 0xcd, 0x3a, 0xfc, 0x61, 0x30, 0x0d, 0x76, 0xd7, 0xe9, 0x9e, 0xb8, 0x7c, 0xd5, 0x6a, 0xa9, + 0x93, 0x31, 0x1a, 0x59, 0x56, 0x53, 0x9a, 0x87, 0xd1, 0xc8, 0xf2, 0x87, 0xe2, 0x77, 0x89, 0x92, + 0xf3, 0x36, 0xf4, 0x60, 0x67, 0x0e, 0xa5, 0x74, 0x70, 0x28, 0xf2, 0xc1, 0x71, 0x1b, 0xd4, 0x23, + 0xb7, 0x47, 0x79, 0x62, 0xb7, 0x87, 0x4d, 0x7b, 0xfb, 0x1e, 0xcb, 0xd0, 0x6e, 0xae, 0x05, 0x70, + 0xcb, 0x1f, 0x1e, 0xdc, 0xe3, 0x5f, 0x39, 0x15, 0x57, 0x9e, 0x2c, 0x56, 0x90, 0x57, 0xe0, 0x7c, + 0x2c, 0xe0, 0x48, 0xe8, 0xc1, 0x6e, 0x6e, 0xd0, 0xa2, 0x68, 0x78, 0xaa, 0x6b, 0xb0, 0x22, 0x56, + 0xc5, 0x38, 0xf0, 0x83, 0x33, 0x0b, 0x1c, 0x46, 0x77, 0x1d, 0xff, 0xdc, 0x54, 0x74, 0x2a, 0x55, + 0x22, 0x39, 0x03, 0x2f, 0x4d, 0x5e, 0x06, 0x12, 0xf0, 0xed, 0xc1, 0x41, 0xc1, 0x3f, 0xb8, 0x21, + 0x4a, 0x82, 0x1d, 0xce, 0x3f, 0xfb, 0xd7, 0x19, 0x38, 0x9f, 0x22, 0xca, 0x50, 0x21, 0xc0, 0x1b, + 0x4c, 0xdc, 0x63, 0x26, 0x42, 0xc8, 0x9d, 0x5c, 0x97, 0xe0, 0x5c, 0x3f, 0xb5, 0xc8, 0x32, 0x90, + 0xf3, 0x6f, 0xf1, 0x5f, 0xf4, 0xf0, 0x70, 0xc6, 0x42, 0xf5, 0x42, 0xff, 0x25, 0x55, 0xd8, 0xc0, + 0xb4, 0x0a, 0xbe, 0x37, 0xc4, 0xec, 0x0c, 0xc8, 0x84, 0xe4, 0x22, 0xc2, 0x0e, 0xb6, 0xa2, 0x25, + 0x21, 0x51, 0x2e, 0xc4, 0x54, 0x47, 0x31, 0x08, 0xf9, 0x38, 0x6c, 0x4b, 0x77, 0x8d, 0x1d, 0xdb, + 0x79, 0x68, 0xe9, 0x6e, 0x6e, 0x3a, 0xc1, 0xad, 0x53, 0x8e, 0xec, 0xc1, 0x5d, 0xb8, 0x82, 0x93, + 0xe8, 0xf5, 0x46, 0x76, 0x22, 0x0f, 0x07, 0x76, 0x95, 0x05, 0xae, 0xdf, 0xa6, 0x58, 0xd5, 0xde, + 0x28, 0x96, 0x92, 0x83, 0xf6, 0x9a, 0x0f, 0xdf, 0x23, 0xb8, 0x98, 0xda, 0x62, 0x7a, 0xc1, 0xa0, + 0x21, 0x55, 0xc8, 0x1b, 0x2d, 0xd1, 0xdf, 0x94, 0x39, 0xba, 0x06, 0x2b, 0x6f, 0xb9, 0xce, 0xd8, + 0x1d, 0xf3, 0x9b, 0x9b, 0x2f, 0x09, 0x06, 0x93, 0x2f, 0xee, 0x5e, 0x74, 0x6a, 0xb8, 0xce, 0x88, + 0xd4, 0xe1, 0x3c, 0xbb, 0x01, 0xbd, 0x53, 0x64, 0x06, 0xb9, 0x9e, 0x49, 0x89, 0xb0, 0x43, 0x48, + 0x82, 0x57, 0x53, 0x15, 0xb1, 0x18, 0xb5, 0xb9, 0x71, 0x1c, 0x07, 0xd1, 0x1d, 0x7d, 0x29, 0x1d, + 0x9b, 0xec, 0x42, 0x81, 0x55, 0xce, 0xc4, 0x02, 0xf6, 0x40, 0x70, 0x6d, 0xee, 0x17, 0x4a, 0x68, + 0x5f, 0xec, 0x07, 0xff, 0xd3, 0xfb, 0x1a, 0xdf, 0x62, 0xed, 0x53, 0xf9, 0xfd, 0xc3, 0x5c, 0x41, + 0x20, 0x7f, 0xf7, 0xd0, 0xfe, 0x46, 0x11, 0x5d, 0x8d, 0x08, 0xc7, 0x74, 0x69, 0xf9, 0xee, 0x40, + 0xbc, 0x01, 0x2d, 0x9b, 0xfc, 0xd7, 0x33, 0x2e, 0x75, 0xf2, 0x3a, 0xac, 0xd0, 0x6a, 0x8f, 0xa7, + 0x03, 0xb6, 0xe4, 0xb2, 0x91, 0x40, 0x3b, 0x75, 0x56, 0x44, 0xa7, 0x6d, 0xff, 0x9c, 0x59, 0x38, + 0x0d, 0x7f, 0x52, 0x6e, 0xd9, 0x3f, 0x9d, 0x8c, 0xe4, 0x85, 0x2a, 0x14, 0x85, 0x56, 0xbd, 0xdd, + 0xe2, 0x24, 0x79, 0x8a, 0x13, 0x72, 0xcb, 0xbb, 0x8b, 0x4c, 0x55, 0xa8, 0xbd, 0x04, 0x05, 0xa9, + 0x6e, 0xda, 0x19, 0xe6, 0x39, 0x23, 0x3a, 0xc3, 0x7e, 0xf1, 0xc9, 0x7e, 0x0b, 0xf2, 0xa2, 0x4a, + 0x2a, 0x16, 0x9c, 0x0c, 0x7d, 0xb1, 0xc9, 0xf1, 0x7f, 0x0a, 0xa3, 0xa3, 0x8c, 0x9d, 0x5c, 0x30, + 0xf1, 0x7f, 0xbc, 0x4b, 0x26, 0x0e, 0x95, 0x07, 0xfa, 0xbe, 0x3d, 0x42, 0x0b, 0xac, 0x80, 0x79, + 0xa6, 0xf0, 0x76, 0xdf, 0x67, 0x76, 0x59, 0xfc, 0x1b, 0x7f, 0x11, 0x5c, 0xc2, 0x31, 0x6d, 0xc2, + 0xac, 0x33, 0x33, 0x72, 0x65, 0x64, 0x92, 0x57, 0x06, 0x0b, 0xa0, 0xc2, 0x29, 0xd9, 0x97, 0x01, + 0x61, 0x78, 0x65, 0x48, 0x27, 0x43, 0x2e, 0x72, 0x32, 0x48, 0x32, 0x79, 0x38, 0x7b, 0xec, 0xc6, + 0x11, 0x32, 0x79, 0xfc, 0x9c, 0xfa, 0xe3, 0x8c, 0x50, 0x11, 0xec, 0x0e, 0x87, 0x13, 0x7f, 0x32, + 0x76, 0x46, 0x11, 0x55, 0x28, 0x39, 0x85, 0xe7, 0x90, 0x83, 0xbe, 0x87, 0x29, 0x2c, 0x86, 0x63, + 0x11, 0xb3, 0x23, 0x58, 0xb9, 0x85, 0x7b, 0x1f, 0x8e, 0xf2, 0xf8, 0x3a, 0xc5, 0xd6, 0x65, 0x64, + 0xba, 0x60, 0xa5, 0x5a, 0xf7, 0xcf, 0x99, 0x9b, 0xac, 0xce, 0x04, 0x16, 0xd9, 0x4f, 0xd9, 0xc4, + 0x71, 0x5d, 0xe8, 0x6e, 0xb8, 0xa3, 0xa3, 0xb5, 0xca, 0x7b, 0x9d, 0x7c, 0x12, 0x96, 0xbd, 0x9e, + 0x9c, 0xa9, 0x31, 0xae, 0x85, 0xab, 0xf6, 0x58, 0xb4, 0xe8, 0xb0, 0x0e, 0xba, 0xe6, 0x3c, 0x0e, + 0xdd, 0x5d, 0x8d, 0x28, 0x8d, 0xb5, 0x5d, 0x21, 0x8d, 0x26, 0xc9, 0xc8, 0x1a, 0x64, 0x82, 0x19, + 0xce, 0x78, 0x3d, 0xb6, 0xbd, 0xc2, 0x78, 0xd5, 0x26, 0xff, 0xa5, 0xfd, 0x22, 0xdc, 0x3e, 0xeb, + 0x18, 0xd1, 0xad, 0x38, 0x63, 0xc0, 0x97, 0xcd, 0x0d, 0x27, 0x31, 0x6e, 0xd7, 0x40, 0x0e, 0xb7, + 0xeb, 0x89, 0xc3, 0x4f, 0xc0, 0x3a, 0x63, 0x4f, 0xfb, 0xf3, 0x2c, 0xac, 0x45, 0xd5, 0xe4, 0xe4, + 0x25, 0xc8, 0x49, 0x27, 0xd0, 0x66, 0x8a, 0x2e, 0x1d, 0xcf, 0x1d, 0x44, 0x3a, 0xd3, 0x89, 0x43, + 0xee, 0xc3, 0x1a, 0x1a, 0xee, 0x21, 0xeb, 0x39, 0xf1, 0xf8, 0xe3, 0xcb, 0xfc, 0xf7, 0xb3, 0xfc, + 0xf7, 0xdf, 0xb9, 0x7a, 0x0e, 0x9f, 0xca, 0x56, 0x28, 0x2d, 0xe5, 0xfe, 0x68, 0xa1, 0xa4, 0x05, + 0xcd, 0xcd, 0xd6, 0x82, 0xf2, 0xae, 0xcc, 0xd0, 0x82, 0x2e, 0xcc, 0xd1, 0x82, 0x86, 0x94, 0xb2, + 0x16, 0x14, 0x75, 0xe1, 0x4b, 0xb3, 0x74, 0xe1, 0x21, 0x0d, 0xd3, 0x85, 0x87, 0x5a, 0xcc, 0xfc, + 0x4c, 0x2d, 0x66, 0x48, 0xc3, 0xb5, 0x98, 0x37, 0xf8, 0x18, 0x8d, 0x9d, 0xc7, 0x36, 0x0e, 0x1e, + 0xbf, 0x16, 0xb1, 0xf7, 0xa6, 0xf3, 0x18, 0x8d, 0x6b, 0x76, 0x97, 0x41, 0x58, 0xe4, 0x68, 0xbf, + 0xa3, 0xc4, 0x34, 0x81, 0x62, 0xfe, 0x6e, 0xc2, 0x1a, 0xbb, 0xac, 0xdc, 0x9e, 0x24, 0x6b, 0xae, + 0x9a, 0xab, 0x02, 0xca, 0xe4, 0xcd, 0x17, 0x61, 0x3d, 0x40, 0xe3, 0x22, 0x17, 0x7a, 0xea, 0x99, + 0x01, 0x35, 0x0f, 0x3b, 0xf3, 0x12, 0x6c, 0x04, 0x88, 0x5c, 0x9b, 0xc3, 0xc4, 0xcd, 0x55, 0x53, + 0x15, 0x05, 0x2d, 0x0e, 0xd7, 0x8e, 0xe3, 0x92, 0xc7, 0x07, 0xd4, 0x2a, 0xed, 0x7b, 0xd9, 0x88, + 0x96, 0x44, 0x7c, 0x86, 0xde, 0xa2, 0xfe, 0xd0, 0xe6, 0x83, 0xc4, 0xcf, 0xa2, 0x6b, 0x33, 0xe6, + 0x8c, 0xdb, 0x34, 0x59, 0x56, 0xd3, 0x04, 0xdf, 0x1f, 0x0a, 0x13, 0x27, 0x9b, 0x71, 0xd4, 0xec, + 0xde, 0xc7, 0x35, 0x2b, 0xaa, 0x63, 0x07, 0x4f, 0x71, 0x7e, 0x75, 0x42, 0x4c, 0xa5, 0x4b, 0x16, + 0x39, 0xeb, 0xe0, 0x97, 0xf8, 0x40, 0x07, 0x50, 0xa9, 0xe8, 0x47, 0x2b, 0xcf, 0xa6, 0xc8, 0x4e, + 0x89, 0xca, 0x71, 0x94, 0xb0, 0x66, 0x75, 0x2a, 0xfe, 0x15, 0xd5, 0x1a, 0xb0, 0x82, 0x3a, 0x0a, + 0x51, 0x61, 0x2e, 0x45, 0x05, 0x9f, 0xec, 0x7c, 0xa9, 0x5a, 0x37, 0x0b, 0x94, 0x4e, 0x54, 0x73, + 0x02, 0xcf, 0xc9, 0x9a, 0x85, 0x68, 0x23, 0x17, 0x44, 0x14, 0xdd, 0xb9, 0x23, 0x10, 0x2a, 0x20, + 0xb0, 0xa9, 0x97, 0x9c, 0x28, 0x80, 0xa3, 0x69, 0x27, 0xb0, 0x3d, 0x7b, 0x4a, 0xe6, 0x64, 0x68, + 0x0a, 0x2f, 0xd0, 0x8c, 0x7c, 0x81, 0xca, 0x7a, 0x86, 0x6c, 0x44, 0xcf, 0xa0, 0xfd, 0x51, 0x16, + 0xae, 0x9f, 0x61, 0xba, 0xe6, 0x7c, 0xf3, 0xd3, 0x51, 0xf6, 0x2c, 0x13, 0x91, 0x0c, 0x69, 0xa5, + 0xfc, 0x80, 0xa4, 0x52, 0x6a, 0x3a, 0x73, 0xf6, 0x25, 0x58, 0x67, 0xa7, 0x20, 0x33, 0x4b, 0x3c, + 0x9a, 0xf6, 0xcf, 0x70, 0x0c, 0xee, 0x08, 0x1f, 0xaa, 0x18, 0x29, 0x9e, 0x8c, 0x78, 0x62, 0x58, + 0x01, 0x8c, 0xb4, 0xa1, 0x80, 0x68, 0x47, 0x8e, 0xd7, 0x3f, 0x93, 0x33, 0x8f, 0xf0, 0xd0, 0x92, + 0xc9, 0x98, 0x35, 0x35, 0x05, 0x54, 0xf0, 0x37, 0xb9, 0x05, 0xeb, 0x83, 0xe9, 0x29, 0x65, 0x3c, + 0xd8, 0x5a, 0xe0, 0xd6, 0x1f, 0x0b, 0xe6, 0xea, 0x60, 0x7a, 0xaa, 0x8f, 0x46, 0x38, 0xa5, 0x68, + 0x26, 0xb2, 0x41, 0xf1, 0xd8, 0xae, 0x15, 0x98, 0x8b, 0x88, 0x49, 0x2b, 0x60, 0xfb, 0x96, 0xe3, + 0x5e, 0x00, 0x66, 0x34, 0xc8, 0x33, 0x54, 0xb1, 0x1f, 0xda, 0x8f, 0x33, 0x42, 0xde, 0x9d, 0xbd, + 0xee, 0x7f, 0x3e, 0x45, 0x29, 0x53, 0x74, 0x1b, 0x54, 0x3a, 0xf4, 0xe1, 0xa1, 0x12, 0xcc, 0xd1, + 0xda, 0x60, 0x7a, 0x1a, 0x8c, 0x9d, 0x3c, 0xf0, 0x8b, 0xf2, 0xc0, 0xbf, 0x2e, 0xe4, 0xe1, 0xd4, + 0xe3, 0x61, 0xf6, 0x90, 0x6b, 0xff, 0x91, 0x85, 0x5b, 0x67, 0x3b, 0x04, 0x7e, 0x3e, 0x6f, 0x29, + 0xf3, 0x16, 0x53, 0x9d, 0x2e, 0x24, 0x54, 0xa7, 0x29, 0x7b, 0x6f, 0x31, 0x6d, 0xef, 0x25, 0x14, + 0xb5, 0x4b, 0x29, 0x8a, 0xda, 0xd4, 0x0d, 0x9a, 0x7f, 0xca, 0x06, 0x5d, 0x96, 0xd7, 0xc9, 0xbf, + 0x04, 0x0a, 0x8c, 0xa8, 0x3c, 0xf0, 0x08, 0xce, 0x0b, 0x79, 0x80, 0xdd, 0x1c, 0xa1, 0xfe, 0xbd, + 0x70, 0xef, 0x4e, 0x9a, 0x24, 0x80, 0x68, 0x29, 0xdc, 0xfa, 0x06, 0x97, 0x01, 0xc2, 0xf2, 0xff, + 0x3b, 0xdc, 0x3f, 0x79, 0x08, 0x97, 0x30, 0xbe, 0x7b, 0x57, 0x7e, 0x39, 0xb0, 0xc7, 0xee, 0x11, + 0x5f, 0x0f, 0xd7, 0x12, 0xbc, 0xb2, 0xd7, 0x95, 0x9a, 0x63, 0xba, 0x47, 0xfb, 0xe7, 0xcc, 0x0b, + 0x7e, 0x0a, 0x3c, 0x2e, 0x58, 0xfc, 0xa9, 0x02, 0xda, 0xd3, 0xc7, 0x0b, 0x15, 0x55, 0xf1, 0x01, + 0x5f, 0x36, 0x0b, 0x8e, 0x34, 0x7a, 0xd7, 0x61, 0x75, 0xec, 0x1e, 0x8d, 0x5d, 0xff, 0x24, 0xa2, + 0x01, 0x59, 0xe1, 0x40, 0x31, 0x30, 0x22, 0xca, 0xe4, 0x33, 0x71, 0xe6, 0x82, 0x48, 0xab, 0x04, + 0xf2, 0x62, 0xea, 0x3c, 0xd0, 0xd5, 0x24, 0x37, 0x90, 0xfd, 0xb8, 0x9f, 0xcb, 0x67, 0xd4, 0xac, + 0xc9, 0x63, 0x61, 0x1e, 0x79, 0x7d, 0x57, 0xfb, 0x4b, 0x45, 0x70, 0x04, 0x69, 0x83, 0x47, 0x1e, + 0x49, 0xc6, 0xbc, 0xd9, 0x04, 0x1b, 0x92, 0x46, 0x22, 0xdb, 0x3d, 0xf2, 0xf0, 0x8c, 0x08, 0x88, + 0x84, 0x67, 0x44, 0xc8, 0x7b, 0xb0, 0x48, 0xe4, 0x52, 0xf3, 0x9b, 0xc2, 0x22, 0x88, 0x9e, 0x79, + 0x07, 0x77, 0xc9, 0x1d, 0x58, 0x62, 0x46, 0x40, 0xa2, 0xb9, 0xeb, 0x91, 0xe6, 0x1e, 0xdc, 0x35, + 0x45, 0xb9, 0xf6, 0x9d, 0xe0, 0x5d, 0x2b, 0xd1, 0x89, 0x83, 0xbb, 0xe4, 0xf5, 0xb3, 0x19, 0xe7, + 0xe6, 0x85, 0x71, 0x6e, 0x60, 0x98, 0xfb, 0x46, 0xc4, 0x30, 0xf7, 0xc6, 0xfc, 0xd1, 0xe2, 0xaf, + 0x91, 0x2c, 0x1c, 0x61, 0x18, 0xa6, 0xea, 0xc7, 0x0a, 0x3c, 0x3f, 0x97, 0x82, 0x5c, 0x86, 0xbc, + 0xde, 0xaa, 0xb6, 0xc3, 0xf9, 0xa5, 0x7b, 0x46, 0x40, 0xc8, 0x1e, 0x2c, 0xef, 0x3a, 0xbe, 0xd7, + 0xa5, 0xcb, 0x38, 0xf5, 0x79, 0x20, 0x51, 0x6d, 0x80, 0xbe, 0x7f, 0xce, 0x0c, 0x69, 0x89, 0x0d, + 0x1b, 0xb8, 0x17, 0x22, 0xa9, 0x9f, 0xb2, 0x29, 0xba, 0x86, 0x44, 0x85, 0x09, 0x32, 0x7a, 0xce, + 0x24, 0x80, 0xf1, 0x2d, 0xf8, 0xb6, 0xe0, 0x45, 0x66, 0x37, 0xf0, 0x19, 0xe2, 0xaa, 0xde, 0x86, + 0x7c, 0x4b, 0xd8, 0x09, 0x48, 0xd6, 0xec, 0xc2, 0x26, 0xc0, 0x0c, 0x4a, 0xb5, 0x5f, 0x57, 0x84, + 0x42, 0xe0, 0xe9, 0x1d, 0x91, 0xb2, 0x66, 0xf5, 0xe6, 0x67, 0xcd, 0xea, 0xfd, 0x94, 0x59, 0xb3, + 0xb4, 0x3f, 0xe1, 0x51, 0xcf, 0xab, 0xbd, 0x56, 0x4c, 0x33, 0xfb, 0x5e, 0xbd, 0x12, 0x8c, 0xc8, + 0xea, 0xbc, 0x2e, 0x65, 0x5d, 0x4c, 0x7e, 0x6b, 0xb6, 0x73, 0x82, 0xb4, 0x54, 0x7f, 0x2f, 0x0b, + 0x97, 0xe7, 0x91, 0xa7, 0xe6, 0x75, 0x56, 0x9e, 0x2d, 0xaf, 0xf3, 0x1d, 0xc8, 0x33, 0x58, 0x60, + 0x72, 0x8f, 0x03, 0xce, 0x49, 0xe9, 0x80, 0x8b, 0x62, 0x72, 0x1d, 0x16, 0xf5, 0x92, 0x15, 0xa6, + 0x1a, 0x43, 0xdb, 0x58, 0xa7, 0xeb, 0xa3, 0xd5, 0x25, 0x2f, 0x22, 0x5f, 0x4c, 0x66, 0xd7, 0xe3, + 0x39, 0xc6, 0x76, 0xa4, 0x01, 0x49, 0x24, 0x24, 0xc0, 0xf6, 0x86, 0x01, 0xf4, 0x79, 0x4c, 0x6a, + 0x33, 0x99, 0xa9, 0x4f, 0x83, 0xc5, 0xd6, 0xd8, 0xf5, 0xdd, 0x89, 0x6c, 0xb7, 0x3a, 0x42, 0x88, + 0xc9, 0x4b, 0xb8, 0x55, 0xa9, 0xf3, 0x84, 0x05, 0x11, 0x58, 0x94, 0x03, 0xbb, 0xa0, 0x19, 0x2a, + 0x05, 0x9b, 0x12, 0x0a, 0x25, 0xa8, 0x39, 0xd3, 0x41, 0xf7, 0xa4, 0x63, 0xd6, 0x38, 0xab, 0xc1, + 0x08, 0xfa, 0x08, 0xa5, 0x1d, 0xf4, 0x4d, 0x09, 0x45, 0xfb, 0xa6, 0x02, 0x17, 0xd2, 0xfa, 0x41, + 0x2e, 0x43, 0x6e, 0x90, 0x9a, 0x48, 0x70, 0xc0, 0x7c, 0x9f, 0x0b, 0xf4, 0xaf, 0x7d, 0x34, 0x1c, + 0x9f, 0x3a, 0x13, 0xd9, 0xba, 0x57, 0x02, 0x9b, 0x40, 0x7f, 0x54, 0xf0, 0x7f, 0x72, 0x55, 0x9c, + 0xd1, 0xd9, 0x44, 0xea, 0x41, 0xfc, 0xa3, 0xe9, 0x00, 0xd5, 0x5e, 0xab, 0x39, 0x62, 0x01, 0xf1, + 0x5f, 0x85, 0x1c, 0x6d, 0x56, 0x6c, 0xf5, 0xd2, 0xf5, 0xa3, 0xd7, 0x6b, 0x1c, 0x89, 0xb5, 0xca, + 0x77, 0x4e, 0xfb, 0x26, 0x22, 0x6b, 0x87, 0xb0, 0x16, 0xc5, 0x20, 0x46, 0x34, 0x84, 0x6a, 0xe1, + 0x9e, 0xca, 0x6b, 0xda, 0x1d, 0x0e, 0x99, 0x87, 0xc9, 0xee, 0x73, 0x7f, 0xf7, 0xce, 0x55, 0xa0, + 0x3f, 0x19, 0x4d, 0x5a, 0x88, 0x55, 0xed, 0x5b, 0x19, 0xb8, 0x10, 0x3a, 0xb5, 0x8b, 0x3d, 0xf4, + 0x33, 0xeb, 0x61, 0xa9, 0x47, 0x3c, 0x00, 0x05, 0xa3, 0x95, 0xec, 0xe0, 0x1c, 0xc7, 0xa3, 0x3d, + 0xd8, 0x9a, 0x85, 0x4f, 0x5e, 0x82, 0x65, 0x8c, 0x83, 0x34, 0x72, 0xba, 0xae, 0x7c, 0xf6, 0x0d, + 0x04, 0xd0, 0x0c, 0xcb, 0xb5, 0x1f, 0x2a, 0xb0, 0xcd, 0xfd, 0x22, 0xea, 0x8e, 0x37, 0x40, 0xb5, + 0x7a, 0xd7, 0x7d, 0x7f, 0x3c, 0x84, 0xf7, 0x22, 0xe7, 0xd8, 0xcd, 0xa8, 0xfb, 0x4b, 0xe2, 0x6b, + 0xb3, 0x7b, 0x4b, 0xee, 0x60, 0x6c, 0x2f, 0xfe, 0xec, 0x9c, 0x63, 0x11, 0x19, 0x06, 0x14, 0x20, + 0x47, 0x64, 0x40, 0x0c, 0xed, 0x97, 0xe0, 0xca, 0xfc, 0x0f, 0x90, 0x2f, 0xc0, 0x2a, 0x26, 0x8b, + 0xea, 0x8c, 0x8e, 0xc7, 0x4e, 0xcf, 0x15, 0xaa, 0x30, 0xa1, 0xbe, 0x94, 0xcb, 0x58, 0xa8, 0x32, + 0x1e, 0x21, 0xe0, 0x18, 0xd3, 0x50, 0x71, 0xa2, 0x88, 0xf3, 0x91, 0x5c, 0x9b, 0xf6, 0xcb, 0x0a, + 0x90, 0x64, 0x1d, 0xe4, 0xa3, 0xb0, 0xd2, 0x69, 0x97, 0xac, 0x89, 0x33, 0x9e, 0xec, 0x0f, 0xa7, + 0x63, 0x1e, 0x27, 0x8c, 0x39, 0x8c, 0x4f, 0xba, 0x36, 0x7b, 0x40, 0x39, 0x19, 0x4e, 0xc7, 0x66, + 0x04, 0x0f, 0xb3, 0x1c, 0xb9, 0xee, 0x97, 0x7b, 0xce, 0x93, 0x68, 0x96, 0x23, 0x0e, 0x8b, 0x64, + 0x39, 0xe2, 0x30, 0xed, 0xbb, 0x0a, 0xec, 0x08, 0x6b, 0xc2, 0x5e, 0x4a, 0x5b, 0x4a, 0x18, 0x16, + 0x65, 0x2c, 0x02, 0xd3, 0xce, 0x63, 0x69, 0x37, 0x44, 0xe4, 0x20, 0x6c, 0x20, 0xf2, 0xb6, 0x8c, + 0x96, 0x7c, 0x1a, 0x72, 0xd6, 0x64, 0x38, 0x3a, 0x43, 0xe8, 0x20, 0x35, 0x98, 0xd1, 0xc9, 0x70, + 0x84, 0x55, 0x20, 0xa5, 0xe6, 0xc2, 0x05, 0xb9, 0x71, 0xa2, 0xc5, 0xa4, 0x0e, 0x4b, 0x3c, 0x46, + 0x5c, 0xec, 0xa1, 0x7e, 0x4e, 0x9f, 0x76, 0xd7, 0x45, 0x7c, 0x22, 0x1e, 0x18, 0xd5, 0x14, 0x75, + 0x68, 0xbf, 0xa9, 0x40, 0x81, 0x72, 0x1b, 0x28, 0xc5, 0xbd, 0xd7, 0x25, 0x1d, 0x65, 0x1c, 0x85, + 0xdd, 0x49, 0x50, 0xfd, 0x99, 0x6e, 0xe3, 0xd7, 0x60, 0x3d, 0x46, 0x40, 0x34, 0x8c, 0x4c, 0xd1, + 0xf7, 0xba, 0x0e, 0x4b, 0x9a, 0xc2, 0x6c, 0x36, 0x22, 0x30, 0xed, 0x57, 0x15, 0xb8, 0x40, 0x65, + 0x7e, 0xf6, 0xce, 0x69, 0x4e, 0xfb, 0x62, 0xbf, 0x53, 0x0e, 0x4a, 0x98, 0xa5, 0x32, 0xaf, 0x79, + 0xc6, 0x41, 0x71, 0x98, 0x19, 0x94, 0x92, 0x7d, 0xc8, 0xf3, 0xfb, 0xc5, 0xe7, 0xf1, 0x4c, 0xaf, + 0x48, 0xca, 0x84, 0xb0, 0x62, 0x8e, 0x44, 0x7b, 0x82, 0x47, 0x18, 0xa7, 0x31, 0x03, 0x6a, 0xed, + 0x3f, 0x15, 0xd8, 0x9c, 0x41, 0x43, 0x3e, 0x01, 0x0b, 0xe8, 0xd1, 0xc7, 0x67, 0xef, 0xf2, 0x8c, + 0x4f, 0x4c, 0xba, 0x27, 0x07, 0x77, 0xd9, 0x45, 0x74, 0x4a, 0x7f, 0x98, 0x8c, 0x8a, 0x3c, 0x82, + 0x65, 0xbd, 0xd7, 0xe3, 0xe2, 0x4c, 0x26, 0x22, 0xce, 0xcc, 0xf8, 0xe2, 0x2b, 0x01, 0x3e, 0x13, + 0x67, 0x98, 0x6f, 0x49, 0xaf, 0x67, 0x73, 0x6f, 0xc5, 0xb0, 0xbe, 0xed, 0xff, 0x0f, 0x6b, 0x51, + 0xe4, 0x67, 0x72, 0xb0, 0xfa, 0x8e, 0x02, 0x6a, 0xb4, 0x0d, 0x1f, 0x4c, 0x64, 0xa5, 0xb4, 0x69, + 0x7e, 0xca, 0xa2, 0xfa, 0xed, 0x0c, 0x5c, 0x4c, 0x1d, 0x61, 0xf2, 0x32, 0x2c, 0xea, 0xa3, 0x51, + 0xb5, 0xcc, 0x57, 0x15, 0xe7, 0x90, 0x50, 0x4b, 0x1c, 0x91, 0xf6, 0x18, 0x12, 0x79, 0x15, 0xf2, + 0xec, 0x39, 0xbd, 0x2c, 0x0e, 0x1c, 0x0c, 0x15, 0xc3, 0xdf, 0xfa, 0xa3, 0x91, 0x45, 0x05, 0x22, + 0xa9, 0xc0, 0x1a, 0x0f, 0xb2, 0x62, 0xba, 0xc7, 0xee, 0x57, 0x83, 0x10, 0xf7, 0x18, 0x85, 0x5f, + 0xa8, 0x9e, 0xed, 0x31, 0x2b, 0x93, 0xc3, 0x8c, 0x44, 0xa9, 0x48, 0x0d, 0x54, 0xac, 0x53, 0xae, + 0x89, 0x85, 0x37, 0xc5, 0xb0, 0x37, 0xac, 0x11, 0x33, 0xea, 0x4a, 0x50, 0x06, 0xd3, 0xa5, 0xfb, + 0xbe, 0x77, 0x3c, 0x38, 0x75, 0x07, 0x93, 0x0f, 0x6e, 0xba, 0xc2, 0x6f, 0x9c, 0x69, 0xba, 0x7e, + 0x37, 0xc7, 0x36, 0x73, 0x9c, 0x8c, 0x72, 0x34, 0x52, 0x44, 0x6b, 0xe4, 0x68, 0xa8, 0xd0, 0xc4, + 0xc3, 0x88, 0x94, 0x61, 0x89, 0x85, 0x77, 0x11, 0x3b, 0xe3, 0xf9, 0xd4, 0x26, 0x30, 0x9c, 0x83, + 0xbb, 0x8c, 0x7d, 0x61, 0xae, 0x85, 0xbe, 0x29, 0x48, 0xc9, 0x01, 0x14, 0x4a, 0x7d, 0xd7, 0x19, + 0x4c, 0x47, 0xed, 0xb3, 0x3d, 0x39, 0x6e, 0xf1, 0xbe, 0xac, 0x74, 0x19, 0x19, 0x3e, 0x55, 0xe2, + 0x49, 0x2e, 0x57, 0x44, 0xda, 0x81, 0xb7, 0x51, 0x0e, 0x35, 0x95, 0x1f, 0x99, 0x33, 0x3e, 0x71, + 0x20, 0xd2, 0x45, 0x5d, 0xe9, 0xb8, 0x3b, 0x92, 0x0d, 0x6b, 0x35, 0xc7, 0x9f, 0xb4, 0xc7, 0xce, + 0xc0, 0xc7, 0xb0, 0x90, 0x67, 0x08, 0x9b, 0xb5, 0x23, 0x52, 0x0e, 0xa3, 0x8e, 0x71, 0x12, 0x90, + 0x32, 0x0d, 0x66, 0xb4, 0x3a, 0xca, 0x2f, 0x55, 0xbc, 0x81, 0xd3, 0xf7, 0xbe, 0x26, 0x9c, 0x32, + 0x19, 0xbf, 0x74, 0x24, 0x80, 0x66, 0x58, 0xae, 0x7d, 0x3e, 0x31, 0x6f, 0xac, 0x95, 0x05, 0x58, + 0xe2, 0x2e, 0xfb, 0xcc, 0x85, 0xbd, 0x65, 0x34, 0xca, 0xd5, 0xc6, 0x9e, 0xaa, 0x90, 0x35, 0x80, + 0x96, 0xd9, 0x2c, 0x19, 0x96, 0x45, 0x7f, 0x67, 0xe8, 0x6f, 0xee, 0xdf, 0x5e, 0xe9, 0xd4, 0xd4, + 0xac, 0xe4, 0xe2, 0x9e, 0xd3, 0x7e, 0xa0, 0xc0, 0xa5, 0xf4, 0xa9, 0x24, 0x6d, 0xc0, 0x20, 0x07, + 0xfc, 0xf1, 0xf9, 0xa3, 0x73, 0xe7, 0x3d, 0x15, 0x1c, 0x0f, 0x96, 0x30, 0x61, 0x4e, 0xf8, 0x19, + 0xf1, 0x58, 0xc4, 0xbc, 0xfa, 0xbc, 0x9e, 0x99, 0xf1, 0x7a, 0x5a, 0x09, 0xb6, 0x66, 0xd5, 0x11, + 0xed, 0xea, 0x3a, 0x14, 0xf4, 0x56, 0xab, 0x56, 0x2d, 0xe9, 0xed, 0x6a, 0xb3, 0xa1, 0x2a, 0x64, + 0x19, 0x16, 0xf6, 0xcc, 0x66, 0xa7, 0xa5, 0x66, 0xb4, 0x6f, 0x2b, 0xb0, 0x5a, 0x0d, 0xcd, 0xb4, + 0xde, 0xeb, 0xe6, 0xfb, 0x58, 0x64, 0xf3, 0x6d, 0x05, 0xe1, 0x40, 0x82, 0x0f, 0x9c, 0x69, 0xe7, + 0xfd, 0xad, 0x02, 0x1b, 0x09, 0x1a, 0x62, 0xc1, 0x92, 0x7e, 0x68, 0x35, 0xab, 0xe5, 0x12, 0x6f, + 0xd9, 0xd5, 0xd0, 0xbe, 0x08, 0x33, 0x3e, 0x25, 0xbe, 0xc2, 0x5c, 0x68, 0x1f, 0xfb, 0xf6, 0xd0, + 0xeb, 0x49, 0xd9, 0x5a, 0xf7, 0xcf, 0x99, 0xa2, 0x26, 0xbc, 0xc9, 0xbe, 0x36, 0x1d, 0xbb, 0x58, + 0x6d, 0x26, 0xa2, 0x08, 0x0d, 0xe0, 0xc9, 0x8a, 0xd1, 0xe1, 0xc1, 0xa1, 0xe5, 0xc9, 0xaa, 0xc3, + 0xfa, 0x76, 0x57, 0xa1, 0xc0, 0xa5, 0x16, 0x14, 0x08, 0xbe, 0xa7, 0xc0, 0xd6, 0xac, 0xb6, 0x52, + 0x41, 0x28, 0xea, 0x4f, 0x7f, 0x29, 0xc8, 0xe0, 0x10, 0x75, 0xa4, 0x17, 0x68, 0xe4, 0x53, 0x50, + 0xa8, 0xfa, 0xfe, 0xd4, 0x1d, 0x5b, 0xaf, 0x76, 0xcc, 0x2a, 0x5f, 0x20, 0xcf, 0xff, 0xdb, 0x3b, + 0x57, 0x37, 0xd1, 0x2d, 0x61, 0x6c, 0xfb, 0xaf, 0xda, 0xd3, 0xb1, 0x17, 0x89, 0x76, 0x2f, 0x53, + 0x50, 0xbe, 0xd5, 0x99, 0xf6, 0x3c, 0x57, 0x70, 0xed, 0xc2, 0xe7, 0x98, 0xc3, 0xe4, 0x5b, 0x44, + 0xc0, 0xb4, 0x6f, 0x28, 0xb0, 0x3d, 0x7b, 0x60, 0xe8, 0xcd, 0xd4, 0x66, 0x56, 0x3f, 0xc2, 0xeb, + 0x17, 0x6f, 0xa6, 0xc0, 0x34, 0x48, 0xae, 0x53, 0x20, 0x52, 0xa2, 0x20, 0x7b, 0x7a, 0x26, 0x91, + 0x32, 0x39, 0x4a, 0x24, 0x10, 0xb5, 0x7f, 0xcf, 0xc0, 0x25, 0xba, 0xe8, 0xfa, 0xae, 0xef, 0xeb, + 0xd3, 0xc9, 0x89, 0x3b, 0x98, 0x70, 0x36, 0x8c, 0xbc, 0x0e, 0x8b, 0x27, 0xcf, 0xa6, 0x72, 0x64, + 0xe8, 0x84, 0x00, 0x1e, 0xe4, 0xc2, 0xc9, 0x82, 0xfe, 0x4f, 0xae, 0x81, 0x9c, 0xa4, 0x3a, 0x8b, + 0x61, 0x32, 0x33, 0x5b, 0x8a, 0xb9, 0x3c, 0x0a, 0xf2, 0xc9, 0xbe, 0x01, 0x0b, 0xa8, 0x66, 0xe0, + 0x47, 0xaa, 0x60, 0x85, 0xd3, 0x5b, 0x87, 0x4a, 0x08, 0x93, 0x11, 0x90, 0x0f, 0x03, 0x84, 0x19, + 0x06, 0xf8, 0x99, 0x29, 0xc4, 0xef, 0x20, 0xc9, 0x80, 0xb9, 0x7c, 0x7a, 0xe4, 0xf0, 0xb0, 0xfd, + 0x45, 0xd8, 0x10, 0xc3, 0x32, 0x12, 0xd1, 0xf5, 0xf8, 0x6b, 0xd8, 0x3a, 0x2b, 0xa8, 0x8e, 0x44, + 0x84, 0xbd, 0x1b, 0x89, 0x44, 0xbb, 0x18, 0x64, 0x37, 0x96, 0x4d, 0xf7, 0x46, 0x22, 0x9b, 0x6e, + 0x9e, 0x61, 0xc9, 0x29, 0x73, 0xb5, 0x7f, 0xce, 0xc0, 0xf2, 0x21, 0x65, 0x56, 0x50, 0x04, 0x9f, + 0x2f, 0xd2, 0xdf, 0x83, 0x42, 0x6d, 0xe8, 0xf0, 0x67, 0x07, 0xee, 0x9b, 0xc0, 0x7c, 0x83, 0xfb, + 0x43, 0x47, 0xbc, 0x60, 0xf8, 0xa6, 0x8c, 0xf4, 0x14, 0xbf, 0xe6, 0xfb, 0xb0, 0xc8, 0x9e, 0x81, + 0xb8, 0x76, 0x49, 0xb0, 0xab, 0x41, 0x8b, 0x5e, 0x61, 0xc5, 0x92, 0xa6, 0x9c, 0x3d, 0x25, 0xc9, + 0xbc, 0x13, 0x8f, 0x15, 0x2a, 0x29, 0x1c, 0x16, 0xce, 0xa6, 0x70, 0x90, 0x62, 0xa2, 0x2d, 0x9e, + 0x25, 0x26, 0xda, 0xf6, 0x9b, 0x50, 0x90, 0xda, 0xf3, 0x4c, 0xdc, 0xeb, 0xd7, 0x33, 0xb0, 0x8a, + 0xbd, 0x0a, 0x6c, 0x42, 0x7e, 0x36, 0xd5, 0x27, 0x1f, 0x8b, 0xa8, 0x4f, 0xb6, 0xe4, 0xf9, 0x62, + 0x3d, 0x9b, 0xa3, 0x37, 0xb9, 0x0f, 0x1b, 0x09, 0x44, 0xf2, 0x1a, 0x2c, 0xd0, 0xe6, 0x0b, 0x71, + 0x53, 0x8d, 0xaf, 0x80, 0x30, 0x7e, 0x2e, 0xed, 0xb8, 0x6f, 0x32, 0x6c, 0xed, 0xbf, 0x14, 0x58, + 0xe1, 0xe9, 0x2b, 0x06, 0x47, 0xc3, 0xa7, 0x0e, 0xe7, 0xad, 0xf8, 0x70, 0xb2, 0x28, 0x1d, 0x7c, + 0x38, 0xff, 0xa7, 0x07, 0xf1, 0xcd, 0xc8, 0x20, 0x6e, 0x06, 0xd1, 0xf4, 0x44, 0x77, 0xe6, 0x8c, + 0xe1, 0x5f, 0x61, 0x7c, 0xd9, 0x28, 0x22, 0xf9, 0x22, 0x2c, 0x37, 0xdc, 0xc7, 0x11, 0xa9, 0xed, + 0xd6, 0x8c, 0x4a, 0x5f, 0x09, 0x10, 0xd9, 0x9e, 0xc2, 0x0b, 0x6f, 0xe0, 0x3e, 0xb6, 0x13, 0x2f, + 0x50, 0x61, 0x95, 0x54, 0x70, 0x8b, 0x92, 0x3d, 0xcb, 0xd2, 0xe7, 0x8e, 0x92, 0x18, 0x78, 0xe6, + 0x9b, 0x59, 0x80, 0xd0, 0xc7, 0x8c, 0x6e, 0xc0, 0xc8, 0xe3, 0xbb, 0x50, 0x78, 0x23, 0x48, 0x5e, + 0xe3, 0xe2, 0x4d, 0xfe, 0x16, 0x57, 0xcc, 0x66, 0x66, 0x47, 0x3b, 0x44, 0x15, 0x6d, 0x89, 0x3b, + 0x35, 0xf5, 0xdc, 0xbe, 0xc3, 0xce, 0xf6, 0xec, 0xee, 0x0d, 0x0c, 0x6e, 0x1b, 0x40, 0x67, 0xe4, + 0x21, 0x46, 0xd7, 0xa7, 0x32, 0x45, 0x48, 0xf8, 0x6d, 0xe6, 0x9e, 0xcd, 0x6f, 0xb3, 0x05, 0xcb, + 0xde, 0xe0, 0x6d, 0x77, 0x30, 0x19, 0x8e, 0x9f, 0xa0, 0x36, 0x3a, 0x54, 0x73, 0xd1, 0x21, 0xa8, + 0x8a, 0x32, 0x36, 0x0f, 0x78, 0x31, 0x06, 0xf8, 0xf2, 0x34, 0x04, 0xc0, 0xc0, 0xef, 0x74, 0x41, + 0x5d, 0xbc, 0x9f, 0xcb, 0x2f, 0xaa, 0x4b, 0xf7, 0x73, 0xf9, 0xbc, 0xba, 0x7c, 0x3f, 0x97, 0x5f, + 0x56, 0xc1, 0x94, 0xde, 0x77, 0x82, 0xf7, 0x1b, 0xe9, 0xc9, 0x25, 0xfa, 0x9c, 0xa2, 0xfd, 0x24, + 0x03, 0x24, 0xd9, 0x0c, 0xf2, 0x31, 0x28, 0xb0, 0x03, 0xd6, 0x1e, 0xfb, 0x5f, 0xe1, 0x66, 0xeb, + 0x2c, 0x7c, 0x8f, 0x04, 0x96, 0xc3, 0xf7, 0x30, 0xb0, 0xe9, 0x7f, 0xa5, 0x4f, 0xbe, 0x00, 0xe7, + 0x71, 0x78, 0x47, 0xee, 0xd8, 0x1b, 0xf6, 0x6c, 0x8c, 0xb5, 0xea, 0xf4, 0x79, 0xce, 0xc0, 0x97, + 0x31, 0xb9, 0x6d, 0xb2, 0x78, 0xc6, 0x34, 0xa0, 0x2b, 0x59, 0x0b, 0x31, 0x5b, 0x0c, 0x91, 0xb4, + 0x41, 0x95, 0xe9, 0x8f, 0xa6, 0xfd, 0x3e, 0x9f, 0xd9, 0x22, 0x15, 0x74, 0xe3, 0x65, 0x33, 0x2a, + 0x5e, 0x0b, 0x2b, 0xae, 0x4c, 0xfb, 0x7d, 0xf2, 0x3a, 0xc0, 0x70, 0x60, 0x9f, 0x7a, 0xbe, 0xcf, + 0xde, 0x38, 0x02, 0xaf, 0xd7, 0x10, 0x2a, 0x4f, 0xc6, 0x70, 0x50, 0x67, 0x40, 0xf2, 0xff, 0x00, + 0xbd, 0xfe, 0x31, 0x1c, 0x06, 0xb3, 0x6a, 0xe1, 0x59, 0x40, 0x04, 0x30, 0xea, 0x64, 0x7b, 0xec, + 0x5a, 0xde, 0xd7, 0x84, 0xcb, 0xc0, 0xe7, 0x60, 0x83, 0x1b, 0xa1, 0x1e, 0x7a, 0x93, 0x13, 0xce, + 0x61, 0xbf, 0x17, 0xf6, 0x5c, 0x62, 0xb1, 0xff, 0x3e, 0x07, 0xa0, 0x1f, 0x5a, 0x22, 0xd2, 0xd4, + 0x1d, 0x58, 0xa0, 0x72, 0x83, 0xd0, 0x3f, 0xa0, 0xf6, 0x16, 0xeb, 0x95, 0xb5, 0xb7, 0x88, 0x41, + 0x77, 0xa3, 0x89, 0xc6, 0xd9, 0x42, 0xf7, 0x80, 0xbb, 0x91, 0xd9, 0x6b, 0x47, 0x22, 0xfd, 0x72, + 0x2c, 0x52, 0x03, 0x08, 0x63, 0x3f, 0x71, 0x49, 0x76, 0x23, 0x0c, 0xa2, 0xc2, 0x0b, 0x78, 0xb6, + 0x81, 0x30, 0x7e, 0x94, 0xbc, 0x7c, 0x42, 0x34, 0xf2, 0x00, 0x72, 0x6d, 0x27, 0xf0, 0xe9, 0x9c, + 0x11, 0x11, 0xeb, 0x05, 0x9e, 0xd3, 0x31, 0x8c, 0x8a, 0xb5, 0x36, 0x71, 0x22, 0xa9, 0x6f, 0xb1, + 0x12, 0x62, 0xc0, 0x22, 0xcf, 0xd7, 0x3d, 0x23, 0x92, 0x22, 0x4f, 0xd7, 0xcd, 0xe3, 0x27, 0x23, + 0x50, 0xe6, 0x29, 0x78, 0x66, 0xee, 0x7b, 0x90, 0xb5, 0xac, 0x3a, 0x8f, 0x03, 0xb1, 0x1a, 0x4a, + 0x25, 0x96, 0x55, 0x67, 0x6f, 0x94, 0xbe, 0x7f, 0x2a, 0x91, 0x51, 0x64, 0xf2, 0x71, 0x28, 0x48, + 0xec, 0x33, 0x8f, 0xa0, 0x82, 0x63, 0x20, 0x79, 0xcd, 0xc8, 0x87, 0x86, 0x84, 0x4d, 0x6a, 0xa0, + 0x3e, 0x98, 0xbe, 0xe5, 0xea, 0xa3, 0x11, 0xba, 0xd3, 0xbd, 0xed, 0x8e, 0x19, 0xdb, 0x96, 0x0f, + 0x43, 0x0f, 0xa3, 0xad, 0x7d, 0x4f, 0x94, 0xca, 0x3a, 0x98, 0x38, 0x25, 0x69, 0xc1, 0x86, 0xe5, + 0x4e, 0xa6, 0x23, 0x66, 0xa7, 0x51, 0x19, 0x8e, 0xa9, 0x10, 0xc2, 0xe2, 0xad, 0x60, 0x94, 0x56, + 0x9f, 0x16, 0x0a, 0xe3, 0x98, 0xa3, 0xe1, 0x38, 0x26, 0x90, 0x24, 0x89, 0x35, 0x57, 0x9e, 0x72, + 0x7a, 0xab, 0x46, 0x45, 0x1b, 0xbc, 0x55, 0x85, 0x68, 0x13, 0x0a, 0x34, 0x1f, 0x4e, 0x89, 0x09, + 0x86, 0x0f, 0x66, 0x52, 0x4c, 0xb0, 0x48, 0x24, 0xb0, 0xef, 0xe6, 0xa4, 0xb0, 0x94, 0x7c, 0x2e, + 0x3e, 0x01, 0x70, 0x7f, 0xe8, 0x0d, 0xea, 0xee, 0xe4, 0x64, 0xd8, 0x93, 0x42, 0x93, 0x15, 0x7e, + 0x61, 0xe8, 0x0d, 0xec, 0x53, 0x04, 0xff, 0xe4, 0x9d, 0xab, 0x12, 0x92, 0x29, 0xfd, 0x4f, 0x3e, + 0x04, 0xcb, 0xf4, 0x57, 0x3b, 0xb4, 0x36, 0x61, 0xaa, 0x4a, 0xa4, 0x66, 0xc9, 0x1b, 0x42, 0x04, + 0xf2, 0x26, 0xa6, 0x2b, 0xf1, 0x46, 0x13, 0x89, 0x79, 0x15, 0xb9, 0x49, 0xbc, 0xd1, 0x24, 0x1e, + 0x69, 0x58, 0x42, 0x26, 0xfb, 0x41, 0xd3, 0x45, 0x86, 0x21, 0x9e, 0x15, 0x05, 0xf5, 0x71, 0x7c, + 0xad, 0xd9, 0x22, 0xc4, 0xa9, 0x9c, 0x0b, 0x36, 0x46, 0x86, 0x8d, 0xb0, 0xf6, 0xcb, 0xec, 0x01, + 0x85, 0x33, 0xb5, 0xac, 0x11, 0xfe, 0x49, 0xcf, 0xee, 0x22, 0x38, 0xd2, 0x88, 0x00, 0x99, 0xec, + 0xc2, 0x3a, 0xe3, 0xf1, 0x83, 0x4c, 0x85, 0x9c, 0xc5, 0xc5, 0xb3, 0x2d, 0x4c, 0x65, 0x28, 0x7f, + 0x3e, 0x46, 0x40, 0x2a, 0xb0, 0x80, 0x02, 0x21, 0x37, 0x31, 0xdf, 0x91, 0xa5, 0xe7, 0xf8, 0x3e, + 0xc2, 0x73, 0x05, 0xe5, 0x66, 0xf9, 0x5c, 0x41, 0x54, 0xf2, 0x59, 0x00, 0x63, 0x30, 0x1e, 0xf6, + 0xfb, 0x18, 0x84, 0x37, 0x8f, 0xa2, 0xd4, 0xf3, 0xd1, 0xfd, 0x88, 0xb5, 0x84, 0x48, 0x3c, 0x60, + 0x1c, 0xfe, 0xb6, 0x63, 0xa1, 0x7a, 0xa5, 0xba, 0xb4, 0x2a, 0x2c, 0xb2, 0xcd, 0x88, 0x01, 0xad, + 0x79, 0x8a, 0x0e, 0x29, 0x1c, 0x32, 0x0b, 0x68, 0xcd, 0xe1, 0xc9, 0x80, 0xd6, 0x12, 0x81, 0xf6, + 0x00, 0x2e, 0xa4, 0x75, 0x2c, 0x22, 0xc2, 0x2a, 0x67, 0x15, 0x61, 0xff, 0x30, 0x0b, 0x2b, 0x58, + 0x9b, 0x38, 0x85, 0x75, 0x58, 0xb5, 0xa6, 0x6f, 0x05, 0xd1, 0x9e, 0xc4, 0x69, 0x8c, 0xed, 0xf3, + 0xe5, 0x02, 0xf9, 0x69, 0x2b, 0x42, 0x41, 0x0c, 0x58, 0x13, 0x37, 0xc1, 0x9e, 0xb0, 0x40, 0x0f, + 0x62, 0x49, 0x8b, 0x88, 0x85, 0xc9, 0x4c, 0xad, 0x31, 0xa2, 0xf0, 0x3e, 0xc8, 0x3e, 0xcb, 0x7d, + 0x90, 0x3b, 0xd3, 0x7d, 0xf0, 0x08, 0x56, 0xc4, 0xd7, 0xf0, 0x24, 0x5f, 0x78, 0x6f, 0x27, 0x79, + 0xa4, 0x32, 0x52, 0x0b, 0x4e, 0xf4, 0xc5, 0xb9, 0x27, 0x3a, 0xbe, 0x17, 0x8a, 0x5d, 0x36, 0x42, + 0x58, 0xf2, 0x60, 0xc7, 0x54, 0x86, 0x7b, 0xa5, 0xd6, 0x4f, 0x71, 0x4b, 0xbe, 0x06, 0xcb, 0xb5, + 0xa1, 0x78, 0x2a, 0x92, 0x74, 0xf4, 0x7d, 0x01, 0x94, 0xd9, 0x85, 0x00, 0x33, 0xb8, 0xdd, 0xb2, + 0xef, 0xc7, 0xed, 0xf6, 0x26, 0x00, 0x77, 0x6d, 0x08, 0x53, 0x90, 0xe1, 0x96, 0x11, 0x91, 0x2e, + 0xa2, 0x4f, 0x05, 0x12, 0x32, 0x3d, 0x9d, 0xb8, 0x15, 0x8a, 0xde, 0xed, 0x0e, 0xa7, 0x83, 0x49, + 0x24, 0x67, 0xaf, 0xf0, 0x84, 0x74, 0x78, 0x99, 0x7c, 0x3c, 0xc4, 0xc8, 0xde, 0xdf, 0x09, 0x21, + 0x9f, 0x09, 0x8c, 0xe8, 0x96, 0xe6, 0x8d, 0x90, 0x96, 0x18, 0xa1, 0x99, 0xa6, 0x73, 0xda, 0x0f, + 0x14, 0x39, 0x90, 0xff, 0x4f, 0x31, 0xd5, 0x6f, 0x00, 0x04, 0x6f, 0xf5, 0x62, 0xae, 0x99, 0xbc, + 0x14, 0x40, 0xe5, 0x51, 0x0e, 0x71, 0xa5, 0xde, 0x64, 0xdf, 0xaf, 0xde, 0xb4, 0xa1, 0xd0, 0xfc, + 0xf2, 0xc4, 0x09, 0x8d, 0x3b, 0xc0, 0x0a, 0x38, 0x59, 0x3c, 0x99, 0xb2, 0xbb, 0x37, 0xf1, 0x6e, + 0x08, 0xf9, 0xe0, 0x19, 0x2c, 0xb0, 0x44, 0xa8, 0xfd, 0x99, 0x02, 0xeb, 0xb2, 0xfb, 0xf6, 0x93, + 0x41, 0x97, 0x7c, 0x92, 0xc5, 0x15, 0x55, 0x22, 0x22, 0x8b, 0x84, 0x44, 0x8f, 0xdc, 0x27, 0x83, + 0x2e, 0x63, 0x80, 0x9c, 0xc7, 0x72, 0x63, 0x29, 0x21, 0x79, 0x0b, 0x56, 0x5a, 0xc3, 0x7e, 0x9f, + 0xb2, 0x35, 0xe3, 0xb7, 0xb9, 0x00, 0x40, 0x2b, 0x8a, 0xbf, 0x18, 0x88, 0x06, 0xed, 0x5e, 0xe7, + 0x72, 0xee, 0xe6, 0x88, 0x9e, 0xf7, 0x1e, 0xa7, 0x0b, 0xab, 0xfd, 0x0e, 0xfa, 0x5b, 0xc9, 0x75, + 0x6a, 0x3f, 0x52, 0x80, 0x24, 0x9b, 0x24, 0x1f, 0x59, 0xca, 0xff, 0x02, 0x0b, 0x1b, 0x63, 0xfd, + 0x72, 0xcf, 0xc2, 0xfa, 0x15, 0x7f, 0x4b, 0x81, 0xf5, 0xaa, 0x5e, 0xe7, 0xa1, 0xfd, 0xd9, 0xc3, + 0xc6, 0x35, 0x78, 0xbe, 0xaa, 0xd7, 0xed, 0x56, 0xb3, 0x56, 0x2d, 0x3d, 0xb4, 0x53, 0x23, 0xf6, + 0x3e, 0x0f, 0xcf, 0x25, 0x51, 0xc2, 0x07, 0x90, 0xcb, 0xb0, 0x95, 0x2c, 0x16, 0x51, 0x7d, 0xd3, + 0x89, 0x45, 0x00, 0xe0, 0x6c, 0xf1, 0x53, 0xb0, 0x2e, 0x22, 0xd8, 0xb6, 0x6b, 0x16, 0xc6, 0xc8, + 0x5f, 0x87, 0xc2, 0x81, 0x61, 0x56, 0x2b, 0x0f, 0xed, 0x4a, 0xa7, 0x56, 0x53, 0xcf, 0x91, 0x55, + 0x58, 0xe6, 0x80, 0x92, 0xae, 0x2a, 0x64, 0x05, 0xf2, 0xd5, 0x86, 0x65, 0x94, 0x3a, 0xa6, 0xa1, + 0x66, 0x8a, 0x9f, 0x82, 0xb5, 0xd6, 0xd8, 0x7b, 0xdb, 0x99, 0xb8, 0x0f, 0xdc, 0x27, 0xf8, 0x7e, + 0xb1, 0x04, 0x59, 0x53, 0x3f, 0x54, 0xcf, 0x11, 0x80, 0xc5, 0xd6, 0x83, 0x92, 0x75, 0xf7, 0xae, + 0xaa, 0x90, 0x02, 0x2c, 0xed, 0x95, 0x5a, 0xf6, 0x83, 0xba, 0xa5, 0x66, 0xe8, 0x0f, 0xfd, 0xd0, + 0xc2, 0x1f, 0xd9, 0xe2, 0x47, 0x60, 0x03, 0x19, 0x92, 0x9a, 0xe7, 0x4f, 0xdc, 0x81, 0x3b, 0xc6, + 0x36, 0xac, 0x40, 0xde, 0x72, 0xe9, 0x49, 0x32, 0x71, 0x59, 0x03, 0xea, 0xd3, 0xfe, 0xc4, 0x1b, + 0xf5, 0xdd, 0xaf, 0xaa, 0x4a, 0xf1, 0x4d, 0x58, 0x37, 0x87, 0xd3, 0x89, 0x37, 0x38, 0xb6, 0x26, + 0x14, 0xe3, 0xf8, 0x09, 0xb9, 0x08, 0x1b, 0x9d, 0x86, 0x5e, 0xdf, 0xad, 0xee, 0x75, 0x9a, 0x1d, + 0xcb, 0xae, 0xeb, 0xed, 0xd2, 0x3e, 0x7b, 0x3d, 0xa9, 0x37, 0xad, 0xb6, 0x6d, 0x1a, 0x25, 0xa3, + 0xd1, 0x56, 0x95, 0xe2, 0xb7, 0x50, 0xb7, 0xd2, 0x1d, 0x0e, 0x7a, 0x15, 0xa7, 0x3b, 0x19, 0x8e, + 0xb1, 0xc1, 0x1a, 0x5c, 0xb1, 0x8c, 0x52, 0xb3, 0x51, 0xb6, 0x2b, 0x7a, 0xa9, 0xdd, 0x34, 0xd3, + 0x42, 0x46, 0x6f, 0xc3, 0xa5, 0x14, 0x9c, 0x66, 0xbb, 0xa5, 0x2a, 0xe4, 0x2a, 0xec, 0xa4, 0x94, + 0x1d, 0x1a, 0xbb, 0x7a, 0xa7, 0xbd, 0xdf, 0x50, 0x33, 0x33, 0x88, 0x2d, 0xab, 0xa9, 0x66, 0x8b, + 0xbf, 0xa6, 0xc0, 0x5a, 0xc7, 0xe7, 0xa6, 0xcb, 0x1d, 0xf4, 0x5a, 0x7c, 0x01, 0x2e, 0x77, 0x2c, + 0xc3, 0xb4, 0xdb, 0xcd, 0x07, 0x46, 0xc3, 0xee, 0x58, 0xfa, 0x5e, 0xbc, 0x35, 0x57, 0x61, 0x47, + 0xc2, 0x30, 0x8d, 0x52, 0xf3, 0xc0, 0x30, 0xed, 0x96, 0x6e, 0x59, 0x87, 0x4d, 0xb3, 0xac, 0x2a, + 0xf4, 0x8b, 0x29, 0x08, 0xf5, 0x8a, 0xce, 0x5a, 0x13, 0x29, 0x6b, 0x18, 0x87, 0x7a, 0xcd, 0xde, + 0x6d, 0xb6, 0xd5, 0x6c, 0xb1, 0x4e, 0xef, 0x77, 0x0c, 0xdc, 0xca, 0x0c, 0xee, 0xf2, 0x90, 0x6b, + 0x34, 0x1b, 0x46, 0xfc, 0xcd, 0x6d, 0x05, 0xf2, 0x7a, 0xab, 0x65, 0x36, 0x0f, 0x70, 0x89, 0x01, + 0x2c, 0x96, 0x8d, 0x06, 0x6d, 0x59, 0x96, 0x96, 0xb4, 0xcc, 0x66, 0xbd, 0xd9, 0x36, 0xca, 0x6a, + 0xae, 0x68, 0x8a, 0x2d, 0x2c, 0x2a, 0xed, 0x0e, 0xd9, 0x03, 0x57, 0xd9, 0xa8, 0xe8, 0x9d, 0x5a, + 0x9b, 0x4f, 0xd1, 0x43, 0xdb, 0x34, 0x3e, 0xd3, 0x31, 0xac, 0xb6, 0xa5, 0x2a, 0x44, 0x85, 0x95, + 0x86, 0x61, 0x94, 0x2d, 0xdb, 0x34, 0x0e, 0xaa, 0xc6, 0xa1, 0x9a, 0xa1, 0x75, 0xb2, 0xff, 0xe9, + 0x17, 0x8a, 0xdf, 0x55, 0x80, 0xb0, 0xa0, 0xb7, 0x22, 0x93, 0x0a, 0xae, 0x98, 0x2b, 0xb0, 0xbd, + 0x4f, 0xa7, 0x1a, 0xbb, 0x56, 0x6f, 0x96, 0xe3, 0x43, 0x76, 0x09, 0x48, 0xac, 0xbc, 0x59, 0xa9, + 0xa8, 0x0a, 0xd9, 0x81, 0xf3, 0x31, 0x78, 0xd9, 0x6c, 0xb6, 0xd4, 0xcc, 0x76, 0x26, 0xaf, 0x90, + 0xcd, 0x44, 0xe1, 0x03, 0xc3, 0x68, 0xa9, 0x59, 0x3a, 0x45, 0xb1, 0x02, 0xb1, 0x25, 0x18, 0x79, + 0xae, 0xf8, 0x0d, 0x05, 0x2e, 0xb1, 0x66, 0x8a, 0xfd, 0x15, 0x34, 0xf5, 0x32, 0x6c, 0xf1, 0x50, + 0xde, 0x69, 0x0d, 0xbd, 0x00, 0x6a, 0xa4, 0x94, 0x35, 0xf3, 0x22, 0x6c, 0x44, 0xa0, 0xd8, 0x8e, + 0x0c, 0x3d, 0x3d, 0x22, 0xe0, 0x5d, 0xc3, 0x6a, 0xdb, 0x46, 0xa5, 0xd2, 0x34, 0xdb, 0xac, 0x21, + 0xd9, 0xa2, 0x06, 0x1b, 0x25, 0x77, 0x3c, 0xa1, 0xa2, 0xd7, 0xc0, 0xf7, 0x86, 0x03, 0x6c, 0xc2, + 0x2a, 0x2c, 0x1b, 0x9f, 0x6d, 0x1b, 0x0d, 0xab, 0xda, 0x6c, 0xa8, 0xe7, 0x8a, 0x97, 0x63, 0x38, + 0x62, 0x1f, 0x5b, 0xd6, 0xbe, 0x7a, 0xae, 0xe8, 0xc0, 0xaa, 0x30, 0x12, 0x66, 0xab, 0xe2, 0x0a, + 0x6c, 0x8b, 0xb5, 0x86, 0x27, 0x4a, 0xbc, 0x0b, 0x5b, 0x70, 0x21, 0x59, 0x6e, 0xb4, 0x55, 0x85, + 0xce, 0x42, 0xac, 0x84, 0xc2, 0x33, 0xc5, 0x5f, 0x51, 0x60, 0x35, 0x78, 0x34, 0x41, 0x35, 0xed, + 0x55, 0xd8, 0xa9, 0x57, 0x74, 0xbb, 0x6c, 0x1c, 0x54, 0x4b, 0x86, 0xfd, 0xa0, 0xda, 0x28, 0xc7, + 0x3e, 0xf2, 0x1c, 0x5c, 0x4c, 0x41, 0xc0, 0xaf, 0x6c, 0xc1, 0x85, 0x78, 0x51, 0x9b, 0x6e, 0xd5, + 0x0c, 0x1d, 0xfa, 0x78, 0x49, 0xb0, 0x4f, 0xb3, 0xc5, 0x3f, 0x50, 0x60, 0x8b, 0xa7, 0xaa, 0xe7, + 0xcf, 0x37, 0x2c, 0x87, 0x09, 0x06, 0xf9, 0x2d, 0xc2, 0xad, 0xb6, 0xd9, 0xb1, 0xda, 0x46, 0x59, + 0x90, 0xd3, 0x45, 0x5b, 0x35, 0x8d, 0xba, 0xd1, 0x68, 0xc7, 0xda, 0xf6, 0x12, 0xbc, 0x38, 0x07, + 0xb7, 0xd1, 0x6c, 0x8b, 0xdf, 0x74, 0xaf, 0xbe, 0x08, 0xd7, 0xe7, 0x20, 0x07, 0x88, 0x99, 0xe2, + 0x01, 0xac, 0x59, 0x7a, 0xbd, 0x56, 0x19, 0x8e, 0xbb, 0xae, 0x3e, 0x9d, 0x9c, 0x0c, 0xc8, 0x0e, + 0x6c, 0x56, 0x9a, 0x66, 0xc9, 0xb0, 0xb1, 0x07, 0xb1, 0x46, 0x9c, 0x87, 0x75, 0xb9, 0xf0, 0xa1, + 0x41, 0x77, 0x17, 0x81, 0x35, 0x19, 0xd8, 0x68, 0xaa, 0x99, 0xe2, 0xe7, 0x61, 0x25, 0x92, 0xef, + 0x6d, 0x13, 0xce, 0xcb, 0xbf, 0x5b, 0xee, 0xa0, 0xe7, 0x0d, 0x8e, 0xd5, 0x73, 0xf1, 0x02, 0x73, + 0x3a, 0x18, 0xd0, 0x02, 0x3c, 0x6e, 0xe4, 0x82, 0xb6, 0x3b, 0x3e, 0xf5, 0x06, 0xce, 0xc4, 0xed, + 0xa9, 0x99, 0xe2, 0x2b, 0xb0, 0x1a, 0x89, 0x32, 0x4d, 0xd7, 0x55, 0xad, 0xc9, 0xef, 0x87, 0xba, + 0x51, 0xae, 0x76, 0xea, 0xea, 0x02, 0x3d, 0x68, 0xf6, 0xab, 0x7b, 0xfb, 0x2a, 0x14, 0xbf, 0xad, + 0x50, 0x31, 0x08, 0xc7, 0xbd, 0x5e, 0xd1, 0xc5, 0x4a, 0xa4, 0xbb, 0x80, 0xc5, 0xae, 0x37, 0x2c, + 0x8b, 0xbd, 0x84, 0x5f, 0x86, 0x2d, 0xfe, 0xc3, 0xd6, 0x1b, 0x65, 0x7b, 0x5f, 0x37, 0xcb, 0x87, + 0xba, 0x49, 0xb7, 0xc6, 0x43, 0x35, 0x83, 0xfb, 0x5d, 0x82, 0xd8, 0xed, 0x66, 0xa7, 0xb4, 0xaf, + 0x66, 0xe9, 0xf6, 0x8a, 0xc0, 0x5b, 0xd5, 0x86, 0x9a, 0xc3, 0xd3, 0x23, 0x81, 0x8d, 0xd5, 0xd2, + 0xf2, 0x85, 0xe2, 0xbb, 0x0a, 0x6c, 0x5a, 0xde, 0xf1, 0xc0, 0x99, 0x4c, 0xc7, 0xae, 0xde, 0x3f, + 0x1e, 0x8e, 0xbd, 0xc9, 0xc9, 0xa9, 0x35, 0xf5, 0x26, 0x2e, 0xb9, 0x03, 0x37, 0xad, 0xea, 0x5e, + 0x43, 0x6f, 0xd3, 0xdd, 0xaf, 0xd7, 0xf6, 0x9a, 0x66, 0xb5, 0xbd, 0x5f, 0xb7, 0xad, 0x4e, 0x35, + 0xb1, 0x31, 0x6e, 0xc0, 0x0b, 0xb3, 0x51, 0x6b, 0xc6, 0x9e, 0x5e, 0x7a, 0xa8, 0x2a, 0xf3, 0x2b, + 0xdc, 0xd5, 0x6b, 0x7a, 0xa3, 0x64, 0x94, 0xed, 0x83, 0xbb, 0x6a, 0x86, 0xdc, 0x84, 0x6b, 0xb3, + 0x51, 0x2b, 0xd5, 0x96, 0x45, 0xd1, 0xb2, 0xf3, 0xbf, 0xbb, 0x6f, 0xd5, 0x29, 0x56, 0xae, 0xf8, + 0xfb, 0x0a, 0x6c, 0xcd, 0x0a, 0x35, 0x44, 0x6e, 0x81, 0x66, 0x34, 0xda, 0xa6, 0x5e, 0x2d, 0xdb, + 0x25, 0xd3, 0x28, 0x1b, 0x8d, 0x76, 0x55, 0xaf, 0x59, 0xb6, 0xd5, 0xec, 0xd0, 0xd5, 0x14, 0x1a, + 0x2c, 0x5c, 0x87, 0xab, 0x73, 0xf0, 0x9a, 0xd5, 0x72, 0x49, 0x55, 0xc8, 0x5d, 0x78, 0x79, 0x0e, + 0x92, 0xf5, 0xd0, 0x6a, 0x1b, 0x75, 0xb9, 0x44, 0xcd, 0x14, 0x4b, 0xb0, 0x3d, 0x3b, 0x16, 0x09, + 0xbd, 0x45, 0xa2, 0x23, 0x9d, 0x87, 0x5c, 0x99, 0x5e, 0x5c, 0x91, 0x14, 0x07, 0x45, 0x0f, 0xd4, + 0x78, 0x38, 0x81, 0x84, 0x65, 0x89, 0xd9, 0x69, 0x34, 0xd8, 0x2d, 0xb7, 0x0e, 0x85, 0x66, 0x7b, + 0xdf, 0x30, 0x79, 0x92, 0x08, 0xcc, 0x0a, 0xd1, 0x69, 0xd0, 0x8d, 0xd3, 0x34, 0xab, 0x9f, 0xc3, + 0xeb, 0x6e, 0x0b, 0x2e, 0x58, 0x35, 0xbd, 0xf4, 0x00, 0xf7, 0x74, 0xb5, 0x61, 0x97, 0xf6, 0xf5, + 0x46, 0xc3, 0xa8, 0xa9, 0x80, 0x83, 0x39, 0xcb, 0x85, 0x90, 0x7c, 0x08, 0x6e, 0x37, 0x1f, 0xb4, + 0x75, 0xbb, 0x55, 0xeb, 0xec, 0x55, 0x1b, 0xb6, 0xf5, 0xb0, 0x51, 0x12, 0xac, 0x59, 0x29, 0x79, + 0x23, 0xdc, 0x86, 0x1b, 0x73, 0xb1, 0xc3, 0x74, 0x0e, 0xb7, 0x40, 0x9b, 0x8b, 0xc9, 0x3b, 0x52, + 0xfc, 0xa1, 0x02, 0x3b, 0x73, 0x9e, 0xb8, 0xc9, 0xcb, 0x70, 0x67, 0xdf, 0xd0, 0xcb, 0x35, 0xc3, + 0xb2, 0xf0, 0xa0, 0xa0, 0xd3, 0xc0, 0x2c, 0x50, 0x52, 0xcf, 0xfb, 0x3b, 0x70, 0x73, 0x3e, 0x7a, + 0xc8, 0x39, 0xdc, 0x86, 0x1b, 0xf3, 0x51, 0x39, 0x27, 0x91, 0xa1, 0xe7, 0xed, 0x7c, 0xcc, 0x80, + 0x03, 0xc9, 0x16, 0x7f, 0x43, 0x81, 0x4b, 0xe9, 0x7a, 0x26, 0xda, 0xb6, 0x6a, 0xc3, 0x6a, 0xeb, + 0xb5, 0x9a, 0xdd, 0xd2, 0x4d, 0xbd, 0x6e, 0x1b, 0x0d, 0xb3, 0x59, 0xab, 0xa5, 0xdd, 0xbc, 0x37, + 0xe0, 0x85, 0xd9, 0xa8, 0x56, 0xc9, 0xac, 0xb6, 0xe8, 0xe5, 0xa2, 0xc1, 0x95, 0xd9, 0x58, 0x46, + 0xb5, 0x64, 0xa8, 0x99, 0xdd, 0x4f, 0x7c, 0xff, 0x9f, 0xae, 0x9c, 0xfb, 0xfe, 0xbb, 0x57, 0x94, + 0x1f, 0xbd, 0x7b, 0x45, 0xf9, 0xc7, 0x77, 0xaf, 0x28, 0x9f, 0x7b, 0xe9, 0x6c, 0x99, 0x90, 0x50, + 0x2c, 0x79, 0x6b, 0x11, 0x05, 0xa8, 0x57, 0xff, 0x3b, 0x00, 0x00, 0xff, 0xff, 0x73, 0x68, 0x0e, + 0x86, 0xe8, 0xb5, 0x01, 0x00, } func (this *PluginSpecV1) Equal(that interface{}) bool { @@ -27385,6 +27662,95 @@ func (m *CORSPolicy) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *IdentityCenterPermissionSet) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *IdentityCenterPermissionSet) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *IdentityCenterPermissionSet) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.XXX_unrecognized != nil { + i -= len(m.XXX_unrecognized) + copy(dAtA[i:], m.XXX_unrecognized) + } + if len(m.Name) > 0 { + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintTypes(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0x12 + } + if len(m.ARN) > 0 { + i -= len(m.ARN) + copy(dAtA[i:], m.ARN) + i = encodeVarintTypes(dAtA, i, uint64(len(m.ARN))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *AppIdentityCenter) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *AppIdentityCenter) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *AppIdentityCenter) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.XXX_unrecognized != nil { + i -= len(m.XXX_unrecognized) + copy(dAtA[i:], m.XXX_unrecognized) + } + if len(m.PermissionSets) > 0 { + for iNdEx := len(m.PermissionSets) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.PermissionSets[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTypes(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + if len(m.AccountID) > 0 { + i -= len(m.AccountID) + copy(dAtA[i:], m.AccountID) + i = encodeVarintTypes(dAtA, i, uint64(len(m.AccountID))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + func (m *AppSpecV3) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -27409,6 +27775,18 @@ func (m *AppSpecV3) MarshalToSizedBuffer(dAtA []byte) (int, error) { i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } + if m.IdentityCenter != nil { + { + size, err := m.IdentityCenter.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTypes(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x62 + } if m.CORS != nil { { size, err := m.CORS.MarshalToSizedBuffer(dAtA[:i]) @@ -28243,12 +28621,12 @@ func (m *ProvisionTokenV1) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x1a } - n67, err67 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Expires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Expires):]) - if err67 != nil { - return 0, err67 + n68, err68 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Expires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Expires):]) + if err68 != nil { + return 0, err68 } - i -= n67 - i = encodeVarintTypes(dAtA, i, uint64(n67)) + i -= n68 + i = encodeVarintTypes(dAtA, i, uint64(n68)) i-- dAtA[i] = 0x12 if len(m.Roles) > 0 { @@ -28453,6 +28831,20 @@ func (m *ProvisionTokenSpecV2) MarshalToSizedBuffer(dAtA []byte) (int, error) { i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } + if m.Bitbucket != nil { + { + size, err := m.Bitbucket.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTypes(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x8a + } if m.TerraformCloud != nil { { size, err := m.TerraformCloud.MarshalToSizedBuffer(dAtA[:i]) @@ -29700,6 +30092,116 @@ func (m *ProvisionTokenSpecV2TerraformCloud_Rule) MarshalToSizedBuffer(dAtA []by return len(dAtA) - i, nil } +func (m *ProvisionTokenSpecV2Bitbucket) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ProvisionTokenSpecV2Bitbucket) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ProvisionTokenSpecV2Bitbucket) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.XXX_unrecognized != nil { + i -= len(m.XXX_unrecognized) + copy(dAtA[i:], m.XXX_unrecognized) + } + if len(m.IdentityProviderURL) > 0 { + i -= len(m.IdentityProviderURL) + copy(dAtA[i:], m.IdentityProviderURL) + i = encodeVarintTypes(dAtA, i, uint64(len(m.IdentityProviderURL))) + i-- + dAtA[i] = 0x1a + } + if len(m.Audience) > 0 { + i -= len(m.Audience) + copy(dAtA[i:], m.Audience) + i = encodeVarintTypes(dAtA, i, uint64(len(m.Audience))) + i-- + dAtA[i] = 0x12 + } + if len(m.Allow) > 0 { + for iNdEx := len(m.Allow) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Allow[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTypes(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *ProvisionTokenSpecV2Bitbucket_Rule) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ProvisionTokenSpecV2Bitbucket_Rule) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ProvisionTokenSpecV2Bitbucket_Rule) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.XXX_unrecognized != nil { + i -= len(m.XXX_unrecognized) + copy(dAtA[i:], m.XXX_unrecognized) + } + if len(m.BranchName) > 0 { + i -= len(m.BranchName) + copy(dAtA[i:], m.BranchName) + i = encodeVarintTypes(dAtA, i, uint64(len(m.BranchName))) + i-- + dAtA[i] = 0x22 + } + if len(m.DeploymentEnvironmentUUID) > 0 { + i -= len(m.DeploymentEnvironmentUUID) + copy(dAtA[i:], m.DeploymentEnvironmentUUID) + i = encodeVarintTypes(dAtA, i, uint64(len(m.DeploymentEnvironmentUUID))) + i-- + dAtA[i] = 0x1a + } + if len(m.RepositoryUUID) > 0 { + i -= len(m.RepositoryUUID) + copy(dAtA[i:], m.RepositoryUUID) + i = encodeVarintTypes(dAtA, i, uint64(len(m.RepositoryUUID))) + i-- + dAtA[i] = 0x12 + } + if len(m.WorkspaceUUID) > 0 { + i -= len(m.WorkspaceUUID) + copy(dAtA[i:], m.WorkspaceUUID) + i = encodeVarintTypes(dAtA, i, uint64(len(m.WorkspaceUUID))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + func (m *StaticTokensV2) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -30624,20 +31126,20 @@ func (m *AuthPreferenceSpecV2) MarshalToSizedBuffer(dAtA []byte) (int, error) { copy(dAtA[i:], m.XXX_unrecognized) } if len(m.SecondFactors) > 0 { - dAtA102 := make([]byte, len(m.SecondFactors)*10) - var j101 int + dAtA104 := make([]byte, len(m.SecondFactors)*10) + var j103 int for _, num := range m.SecondFactors { for num >= 1<<7 { - dAtA102[j101] = uint8(uint64(num)&0x7f | 0x80) + dAtA104[j103] = uint8(uint64(num)&0x7f | 0x80) num >>= 7 - j101++ + j103++ } - dAtA102[j101] = uint8(num) - j101++ + dAtA104[j103] = uint8(num) + j103++ } - i -= j101 - copy(dAtA[i:], dAtA102[:j101]) - i = encodeVarintTypes(dAtA, i, uint64(j101)) + i -= j103 + copy(dAtA[i:], dAtA104[:j103]) + i = encodeVarintTypes(dAtA, i, uint64(j103)) i-- dAtA[i] = 0x1 i-- @@ -31258,12 +31760,12 @@ func (m *UserTokenSpecV3) MarshalToSizedBuffer(dAtA []byte) (int, error) { i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } - n118, err118 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Created, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Created):]) - if err118 != nil { - return 0, err118 + n120, err120 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Created, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Created):]) + if err120 != nil { + return 0, err120 } - i -= n118 - i = encodeVarintTypes(dAtA, i, uint64(n118)) + i -= n120 + i = encodeVarintTypes(dAtA, i, uint64(n120)) i-- dAtA[i] = 0x22 if m.Usage != 0 { @@ -31380,12 +31882,12 @@ func (m *UserTokenSecretsSpecV3) MarshalToSizedBuffer(dAtA []byte) (int, error) i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } - n121, err121 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Created, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Created):]) - if err121 != nil { - return 0, err121 + n123, err123 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Created, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Created):]) + if err123 != nil { + return 0, err123 } - i -= n121 - i = encodeVarintTypes(dAtA, i, uint64(n121)) + i -= n123 + i = encodeVarintTypes(dAtA, i, uint64(n123)) i-- dAtA[i] = 0x1a if len(m.QRCode) > 0 { @@ -31590,12 +32092,12 @@ func (m *AccessReview) MarshalToSizedBuffer(dAtA []byte) (int, error) { copy(dAtA[i:], m.XXX_unrecognized) } if m.AssumeStartTime != nil { - n124, err124 := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.AssumeStartTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(*m.AssumeStartTime):]) - if err124 != nil { - return 0, err124 + n126, err126 := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.AssumeStartTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(*m.AssumeStartTime):]) + if err126 != nil { + return 0, err126 } - i -= n124 - i = encodeVarintTypes(dAtA, i, uint64(n124)) + i -= n126 + i = encodeVarintTypes(dAtA, i, uint64(n126)) i-- dAtA[i] = 0x52 } @@ -31612,20 +32114,20 @@ func (m *AccessReview) MarshalToSizedBuffer(dAtA []byte) (int, error) { dAtA[i] = 0x4a } if len(m.ThresholdIndexes) > 0 { - dAtA127 := make([]byte, len(m.ThresholdIndexes)*10) - var j126 int + dAtA129 := make([]byte, len(m.ThresholdIndexes)*10) + var j128 int for _, num := range m.ThresholdIndexes { for num >= 1<<7 { - dAtA127[j126] = uint8(uint64(num)&0x7f | 0x80) + dAtA129[j128] = uint8(uint64(num)&0x7f | 0x80) num >>= 7 - j126++ + j128++ } - dAtA127[j126] = uint8(num) - j126++ + dAtA129[j128] = uint8(num) + j128++ } - i -= j126 - copy(dAtA[i:], dAtA127[:j126]) - i = encodeVarintTypes(dAtA, i, uint64(j126)) + i -= j128 + copy(dAtA[i:], dAtA129[:j128]) + i = encodeVarintTypes(dAtA, i, uint64(j128)) i-- dAtA[i] = 0x3a } @@ -31639,12 +32141,12 @@ func (m *AccessReview) MarshalToSizedBuffer(dAtA []byte) (int, error) { } i-- dAtA[i] = 0x32 - n129, err129 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Created, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Created):]) - if err129 != nil { - return 0, err129 + n131, err131 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Created, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Created):]) + if err131 != nil { + return 0, err131 } - i -= n129 - i = encodeVarintTypes(dAtA, i, uint64(n129)) + i -= n131 + i = encodeVarintTypes(dAtA, i, uint64(n131)) i-- dAtA[i] = 0x2a if len(m.Reason) > 0 { @@ -31747,20 +32249,20 @@ func (m *ThresholdIndexSet) MarshalToSizedBuffer(dAtA []byte) (int, error) { copy(dAtA[i:], m.XXX_unrecognized) } if len(m.Indexes) > 0 { - dAtA132 := make([]byte, len(m.Indexes)*10) - var j131 int + dAtA134 := make([]byte, len(m.Indexes)*10) + var j133 int for _, num := range m.Indexes { for num >= 1<<7 { - dAtA132[j131] = uint8(uint64(num)&0x7f | 0x80) + dAtA134[j133] = uint8(uint64(num)&0x7f | 0x80) num >>= 7 - j131++ + j133++ } - dAtA132[j131] = uint8(num) - j131++ + dAtA134[j133] = uint8(num) + j133++ } - i -= j131 - copy(dAtA[i:], dAtA132[:j131]) - i = encodeVarintTypes(dAtA, i, uint64(j131)) + i -= j133 + copy(dAtA[i:], dAtA134[:j133]) + i = encodeVarintTypes(dAtA, i, uint64(j133)) i-- dAtA[i] = 0xa } @@ -31833,12 +32335,12 @@ func (m *AccessRequestSpecV3) MarshalToSizedBuffer(dAtA []byte) (int, error) { copy(dAtA[i:], m.XXX_unrecognized) } if m.AssumeStartTime != nil { - n133, err133 := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.AssumeStartTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(*m.AssumeStartTime):]) - if err133 != nil { - return 0, err133 + n135, err135 := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.AssumeStartTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(*m.AssumeStartTime):]) + if err135 != nil { + return 0, err135 } - i -= n133 - i = encodeVarintTypes(dAtA, i, uint64(n133)) + i -= n135 + i = encodeVarintTypes(dAtA, i, uint64(n135)) i-- dAtA[i] = 0x1 i-- @@ -31858,22 +32360,22 @@ func (m *AccessRequestSpecV3) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0xa2 } - n135, err135 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.SessionTTL, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.SessionTTL):]) - if err135 != nil { - return 0, err135 + n137, err137 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.SessionTTL, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.SessionTTL):]) + if err137 != nil { + return 0, err137 } - i -= n135 - i = encodeVarintTypes(dAtA, i, uint64(n135)) + i -= n137 + i = encodeVarintTypes(dAtA, i, uint64(n137)) i-- dAtA[i] = 0x1 i-- dAtA[i] = 0x92 - n136, err136 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.MaxDuration, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.MaxDuration):]) - if err136 != nil { - return 0, err136 + n138, err138 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.MaxDuration, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.MaxDuration):]) + if err138 != nil { + return 0, err138 } - i -= n136 - i = encodeVarintTypes(dAtA, i, uint64(n136)) + i -= n138 + i = encodeVarintTypes(dAtA, i, uint64(n138)) i-- dAtA[i] = 0x1 i-- @@ -32006,20 +32508,20 @@ func (m *AccessRequestSpecV3) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x32 } - n140, err140 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Expires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Expires):]) - if err140 != nil { - return 0, err140 + n142, err142 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Expires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Expires):]) + if err142 != nil { + return 0, err142 } - i -= n140 - i = encodeVarintTypes(dAtA, i, uint64(n140)) + i -= n142 + i = encodeVarintTypes(dAtA, i, uint64(n142)) i-- dAtA[i] = 0x2a - n141, err141 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Created, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Created):]) - if err141 != nil { - return 0, err141 + n143, err143 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Created, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Created):]) + if err143 != nil { + return 0, err143 } - i -= n141 - i = encodeVarintTypes(dAtA, i, uint64(n141)) + i -= n143 + i = encodeVarintTypes(dAtA, i, uint64(n143)) i-- dAtA[i] = 0x22 if m.State != 0 { @@ -32873,12 +33375,12 @@ func (m *RoleOptions) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0xfa } - n150, err150 := github_com_gogo_protobuf_types.StdDurationMarshalTo(m.MFAVerificationInterval, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdDuration(m.MFAVerificationInterval):]) - if err150 != nil { - return 0, err150 + n152, err152 := github_com_gogo_protobuf_types.StdDurationMarshalTo(m.MFAVerificationInterval, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdDuration(m.MFAVerificationInterval):]) + if err152 != nil { + return 0, err152 } - i -= n150 - i = encodeVarintTypes(dAtA, i, uint64(n150)) + i -= n152 + i = encodeVarintTypes(dAtA, i, uint64(n152)) i-- dAtA[i] = 0x1 i-- @@ -34089,6 +34591,18 @@ func (m *AccessRequestConditions) MarshalToSizedBuffer(dAtA []byte) (int, error) i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } + if m.Reason != nil { + { + size, err := m.Reason.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTypes(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x4a + } if len(m.KubernetesResources) > 0 { for iNdEx := len(m.KubernetesResources) - 1; iNdEx >= 0; iNdEx-- { { @@ -34176,6 +34690,40 @@ func (m *AccessRequestConditions) MarshalToSizedBuffer(dAtA []byte) (int, error) return len(dAtA) - i, nil } +func (m *AccessRequestConditionsReason) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *AccessRequestConditionsReason) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *AccessRequestConditionsReason) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.XXX_unrecognized != nil { + i -= len(m.XXX_unrecognized) + copy(dAtA[i:], m.XXX_unrecognized) + } + if len(m.Mode) > 0 { + i -= len(m.Mode) + copy(dAtA[i:], m.Mode) + i = encodeVarintTypes(dAtA, i, uint64(len(m.Mode))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + func (m *AccessReviewConditions) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -34773,12 +35321,12 @@ func (m *UserSpecV2) MarshalToSizedBuffer(dAtA []byte) (int, error) { } i-- dAtA[i] = 0x42 - n179, err179 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Expires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Expires):]) - if err179 != nil { - return 0, err179 + n182, err182 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Expires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Expires):]) + if err182 != nil { + return 0, err182 } - i -= n179 - i = encodeVarintTypes(dAtA, i, uint64(n179)) + i -= n182 + i = encodeVarintTypes(dAtA, i, uint64(n182)) i-- dAtA[i] = 0x3a { @@ -34927,20 +35475,20 @@ func (m *LoginStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } - n182, err182 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.LockExpires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.LockExpires):]) - if err182 != nil { - return 0, err182 + n185, err185 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.LockExpires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.LockExpires):]) + if err185 != nil { + return 0, err185 } - i -= n182 - i = encodeVarintTypes(dAtA, i, uint64(n182)) + i -= n185 + i = encodeVarintTypes(dAtA, i, uint64(n185)) i-- dAtA[i] = 0x22 - n183, err183 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.LockedTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.LockedTime):]) - if err183 != nil { - return 0, err183 + n186, err186 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.LockedTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.LockedTime):]) + if err186 != nil { + return 0, err186 } - i -= n183 - i = encodeVarintTypes(dAtA, i, uint64(n183)) + i -= n186 + i = encodeVarintTypes(dAtA, i, uint64(n186)) i-- dAtA[i] = 0x1a if len(m.LockedMessage) > 0 { @@ -34997,12 +35545,12 @@ func (m *CreatedBy) MarshalToSizedBuffer(dAtA []byte) (int, error) { } i-- dAtA[i] = 0x1a - n185, err185 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Time, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Time):]) - if err185 != nil { - return 0, err185 + n188, err188 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Time, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Time):]) + if err188 != nil { + return 0, err188 } - i -= n185 - i = encodeVarintTypes(dAtA, i, uint64(n185)) + i -= n188 + i = encodeVarintTypes(dAtA, i, uint64(n188)) i-- dAtA[i] = 0x12 if m.Connector != nil { @@ -35120,20 +35668,20 @@ func (m *MFADevice) MarshalToSizedBuffer(dAtA []byte) (int, error) { } } } - n188, err188 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.LastUsed, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.LastUsed):]) - if err188 != nil { - return 0, err188 + n191, err191 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.LastUsed, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.LastUsed):]) + if err191 != nil { + return 0, err191 } - i -= n188 - i = encodeVarintTypes(dAtA, i, uint64(n188)) + i -= n191 + i = encodeVarintTypes(dAtA, i, uint64(n191)) i-- dAtA[i] = 0x3a - n189, err189 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.AddedAt, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.AddedAt):]) - if err189 != nil { - return 0, err189 + n192, err192 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.AddedAt, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.AddedAt):]) + if err192 != nil { + return 0, err192 } - i -= n189 - i = encodeVarintTypes(dAtA, i, uint64(n189)) + i -= n192 + i = encodeVarintTypes(dAtA, i, uint64(n192)) i-- dAtA[i] = 0x32 if len(m.Id) > 0 { @@ -35830,12 +36378,12 @@ func (m *TunnelConnectionSpecV2) MarshalToSizedBuffer(dAtA []byte) (int, error) i-- dAtA[i] = 0x22 } - n201, err201 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.LastHeartbeat, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.LastHeartbeat):]) - if err201 != nil { - return 0, err201 + n204, err204 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.LastHeartbeat, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.LastHeartbeat):]) + if err204 != nil { + return 0, err204 } - i -= n201 - i = encodeVarintTypes(dAtA, i, uint64(n201)) + i -= n204 + i = encodeVarintTypes(dAtA, i, uint64(n204)) i-- dAtA[i] = 0x1a if len(m.ProxyName) > 0 { @@ -35927,12 +36475,12 @@ func (m *AcquireSemaphoreRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) i-- dAtA[i] = 0x2a } - n202, err202 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Expires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Expires):]) - if err202 != nil { - return 0, err202 + n205, err205 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Expires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Expires):]) + if err205 != nil { + return 0, err205 } - i -= n202 - i = encodeVarintTypes(dAtA, i, uint64(n202)) + i -= n205 + i = encodeVarintTypes(dAtA, i, uint64(n205)) i-- dAtA[i] = 0x22 if m.MaxLeases != 0 { @@ -35981,12 +36529,12 @@ func (m *SemaphoreLease) MarshalToSizedBuffer(dAtA []byte) (int, error) { i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } - n203, err203 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Expires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Expires):]) - if err203 != nil { - return 0, err203 + n206, err206 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Expires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Expires):]) + if err206 != nil { + return 0, err206 } - i -= n203 - i = encodeVarintTypes(dAtA, i, uint64(n203)) + i -= n206 + i = encodeVarintTypes(dAtA, i, uint64(n206)) i-- dAtA[i] = 0x2a if len(m.LeaseID) > 0 { @@ -36044,12 +36592,12 @@ func (m *SemaphoreLeaseRef) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x1a } - n204, err204 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Expires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Expires):]) - if err204 != nil { - return 0, err204 + n207, err207 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Expires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Expires):]) + if err207 != nil { + return 0, err207 } - i -= n204 - i = encodeVarintTypes(dAtA, i, uint64(n204)) + i -= n207 + i = encodeVarintTypes(dAtA, i, uint64(n207)) i-- dAtA[i] = 0x12 if len(m.LeaseID) > 0 { @@ -36321,28 +36869,28 @@ func (m *WebSessionSpecV2) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x48 } - n211, err211 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.LoginTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.LoginTime):]) - if err211 != nil { - return 0, err211 + n214, err214 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.LoginTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.LoginTime):]) + if err214 != nil { + return 0, err214 } - i -= n211 - i = encodeVarintTypes(dAtA, i, uint64(n211)) + i -= n214 + i = encodeVarintTypes(dAtA, i, uint64(n214)) i-- dAtA[i] = 0x42 - n212, err212 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Expires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Expires):]) - if err212 != nil { - return 0, err212 + n215, err215 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Expires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Expires):]) + if err215 != nil { + return 0, err215 } - i -= n212 - i = encodeVarintTypes(dAtA, i, uint64(n212)) + i -= n215 + i = encodeVarintTypes(dAtA, i, uint64(n215)) i-- dAtA[i] = 0x3a - n213, err213 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.BearerTokenExpires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.BearerTokenExpires):]) - if err213 != nil { - return 0, err213 + n216, err216 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.BearerTokenExpires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.BearerTokenExpires):]) + if err216 != nil { + return 0, err216 } - i -= n213 - i = encodeVarintTypes(dAtA, i, uint64(n213)) + i -= n216 + i = encodeVarintTypes(dAtA, i, uint64(n216)) i-- dAtA[i] = 0x32 if len(m.BearerToken) > 0 { @@ -36575,20 +37123,20 @@ func (m *SAMLSessionData) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x22 } - n214, err214 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.ExpireTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.ExpireTime):]) - if err214 != nil { - return 0, err214 + n217, err217 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.ExpireTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.ExpireTime):]) + if err217 != nil { + return 0, err217 } - i -= n214 - i = encodeVarintTypes(dAtA, i, uint64(n214)) + i -= n217 + i = encodeVarintTypes(dAtA, i, uint64(n217)) i-- dAtA[i] = 0x1a - n215, err215 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.CreateTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.CreateTime):]) - if err215 != nil { - return 0, err215 + n218, err218 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.CreateTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.CreateTime):]) + if err218 != nil { + return 0, err218 } - i -= n215 - i = encodeVarintTypes(dAtA, i, uint64(n215)) + i -= n218 + i = encodeVarintTypes(dAtA, i, uint64(n218)) i-- dAtA[i] = 0x12 if len(m.ID) > 0 { @@ -36870,12 +37418,12 @@ func (m *RemoteClusterStatusV3) MarshalToSizedBuffer(dAtA []byte) (int, error) { i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } - n219, err219 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.LastHeartbeat, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.LastHeartbeat):]) - if err219 != nil { - return 0, err219 + n222, err222 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.LastHeartbeat, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.LastHeartbeat):]) + if err222 != nil { + return 0, err222 } - i -= n219 - i = encodeVarintTypes(dAtA, i, uint64(n219)) + i -= n222 + i = encodeVarintTypes(dAtA, i, uint64(n222)) i-- dAtA[i] = 0x12 if len(m.Connection) > 0 { @@ -39644,12 +40192,12 @@ func (m *GithubAuthRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { dAtA[i] = 0x62 } if m.Expires != nil { - n260, err260 := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.Expires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(*m.Expires):]) - if err260 != nil { - return 0, err260 + n263, err263 := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.Expires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(*m.Expires):]) + if err263 != nil { + return 0, err263 } - i -= n260 - i = encodeVarintTypes(dAtA, i, uint64(n260)) + i -= n263 + i = encodeVarintTypes(dAtA, i, uint64(n263)) i-- dAtA[i] = 0x5a } @@ -40661,21 +41209,21 @@ func (m *LockSpecV2) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x2a } - n278, err278 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.CreatedAt, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.CreatedAt):]) - if err278 != nil { - return 0, err278 + n281, err281 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.CreatedAt, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.CreatedAt):]) + if err281 != nil { + return 0, err281 } - i -= n278 - i = encodeVarintTypes(dAtA, i, uint64(n278)) + i -= n281 + i = encodeVarintTypes(dAtA, i, uint64(n281)) i-- dAtA[i] = 0x22 if m.Expires != nil { - n279, err279 := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.Expires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(*m.Expires):]) - if err279 != nil { - return 0, err279 + n282, err282 := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.Expires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(*m.Expires):]) + if err282 != nil { + return 0, err282 } - i -= n279 - i = encodeVarintTypes(dAtA, i, uint64(n279)) + i -= n282 + i = encodeVarintTypes(dAtA, i, uint64(n282)) i-- dAtA[i] = 0x1a } @@ -41392,12 +41940,12 @@ func (m *RegisterUsingTokenRequest) MarshalToSizedBuffer(dAtA []byte) (int, erro dAtA[i] = 0x6a } if m.Expires != nil { - n291, err291 := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.Expires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(*m.Expires):]) - if err291 != nil { - return 0, err291 + n294, err294 := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.Expires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(*m.Expires):]) + if err294 != nil { + return 0, err294 } - i -= n291 - i = encodeVarintTypes(dAtA, i, uint64(n291)) + i -= n294 + i = encodeVarintTypes(dAtA, i, uint64(n294)) i-- dAtA[i] = 0x62 } @@ -41577,12 +42125,12 @@ func (m *RecoveryCodesSpecV1) MarshalToSizedBuffer(dAtA []byte) (int, error) { i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } - n294, err294 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Created, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Created):]) - if err294 != nil { - return 0, err294 + n297, err297 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Created, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Created):]) + if err297 != nil { + return 0, err297 } - i -= n294 - i = encodeVarintTypes(dAtA, i, uint64(n294)) + i -= n297 + i = encodeVarintTypes(dAtA, i, uint64(n297)) i-- dAtA[i] = 0x12 if len(m.Codes) > 0 { @@ -41962,20 +42510,20 @@ func (m *SessionTrackerSpecV1) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x32 } - n298, err298 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Expires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Expires):]) - if err298 != nil { - return 0, err298 + n301, err301 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Expires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Expires):]) + if err301 != nil { + return 0, err301 } - i -= n298 - i = encodeVarintTypes(dAtA, i, uint64(n298)) + i -= n301 + i = encodeVarintTypes(dAtA, i, uint64(n301)) i-- dAtA[i] = 0x2a - n299, err299 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Created, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Created):]) - if err299 != nil { - return 0, err299 + n302, err302 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Created, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Created):]) + if err302 != nil { + return 0, err302 } - i -= n299 - i = encodeVarintTypes(dAtA, i, uint64(n299)) + i -= n302 + i = encodeVarintTypes(dAtA, i, uint64(n302)) i-- dAtA[i] = 0x22 if m.State != 0 { @@ -42079,12 +42627,12 @@ func (m *Participant) MarshalToSizedBuffer(dAtA []byte) (int, error) { i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } - n300, err300 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.LastActive, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.LastActive):]) - if err300 != nil { - return 0, err300 + n303, err303 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.LastActive, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.LastActive):]) + if err303 != nil { + return 0, err303 } - i -= n300 - i = encodeVarintTypes(dAtA, i, uint64(n300)) + i -= n303 + i = encodeVarintTypes(dAtA, i, uint64(n303)) i-- dAtA[i] = 0x22 if len(m.Mode) > 0 { @@ -42796,12 +43344,12 @@ func (m *ClusterAlertSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } - n313, err313 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Created, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Created):]) - if err313 != nil { - return 0, err313 + n316, err316 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Created, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Created):]) + if err316 != nil { + return 0, err316 } - i -= n313 - i = encodeVarintTypes(dAtA, i, uint64(n313)) + i -= n316 + i = encodeVarintTypes(dAtA, i, uint64(n316)) i-- dAtA[i] = 0x1a if len(m.Message) > 0 { @@ -42931,12 +43479,12 @@ func (m *AlertAcknowledgement) MarshalToSizedBuffer(dAtA []byte) (int, error) { i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } - n314, err314 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Expires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Expires):]) - if err314 != nil { - return 0, err314 + n317, err317 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Expires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Expires):]) + if err317 != nil { + return 0, err317 } - i -= n314 - i = encodeVarintTypes(dAtA, i, uint64(n314)) + i -= n317 + i = encodeVarintTypes(dAtA, i, uint64(n317)) i-- dAtA[i] = 0x22 if len(m.Reason) > 0 { @@ -45263,12 +45811,12 @@ func (m *PluginStatusV1) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x32 } - n349, err349 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.LastSyncTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.LastSyncTime):]) - if err349 != nil { - return 0, err349 + n352, err352 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.LastSyncTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.LastSyncTime):]) + if err352 != nil { + return 0, err352 } - i -= n349 - i = encodeVarintTypes(dAtA, i, uint64(n349)) + i -= n352 + i = encodeVarintTypes(dAtA, i, uint64(n352)) i-- dAtA[i] = 0x1a if len(m.ErrorMessage) > 0 { @@ -45629,22 +46177,22 @@ func (m *PluginOktaStatusDetailsAppGroupSync) MarshalToSizedBuffer(dAtA []byte) dAtA[i] = 0x28 } if m.LastFailed != nil { - n359, err359 := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.LastFailed, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(*m.LastFailed):]) - if err359 != nil { - return 0, err359 + n362, err362 := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.LastFailed, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(*m.LastFailed):]) + if err362 != nil { + return 0, err362 } - i -= n359 - i = encodeVarintTypes(dAtA, i, uint64(n359)) + i -= n362 + i = encodeVarintTypes(dAtA, i, uint64(n362)) i-- dAtA[i] = 0x22 } if m.LastSuccessful != nil { - n360, err360 := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.LastSuccessful, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(*m.LastSuccessful):]) - if err360 != nil { - return 0, err360 + n363, err363 := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.LastSuccessful, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(*m.LastSuccessful):]) + if err363 != nil { + return 0, err363 } - i -= n360 - i = encodeVarintTypes(dAtA, i, uint64(n360)) + i -= n363 + i = encodeVarintTypes(dAtA, i, uint64(n363)) i-- dAtA[i] = 0x1a } @@ -45703,22 +46251,22 @@ func (m *PluginOktaStatusDetailsUsersSync) MarshalToSizedBuffer(dAtA []byte) (in dAtA[i] = 0x28 } if m.LastFailed != nil { - n361, err361 := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.LastFailed, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(*m.LastFailed):]) - if err361 != nil { - return 0, err361 + n364, err364 := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.LastFailed, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(*m.LastFailed):]) + if err364 != nil { + return 0, err364 } - i -= n361 - i = encodeVarintTypes(dAtA, i, uint64(n361)) + i -= n364 + i = encodeVarintTypes(dAtA, i, uint64(n364)) i-- dAtA[i] = 0x22 } if m.LastSuccessful != nil { - n362, err362 := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.LastSuccessful, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(*m.LastSuccessful):]) - if err362 != nil { - return 0, err362 + n365, err365 := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.LastSuccessful, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(*m.LastSuccessful):]) + if err365 != nil { + return 0, err365 } - i -= n362 - i = encodeVarintTypes(dAtA, i, uint64(n362)) + i -= n365 + i = encodeVarintTypes(dAtA, i, uint64(n365)) i-- dAtA[i] = 0x1a } @@ -45837,22 +46385,22 @@ func (m *PluginOktaStatusDetailsAccessListsSync) MarshalToSizedBuffer(dAtA []byt } } if m.LastFailed != nil { - n363, err363 := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.LastFailed, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(*m.LastFailed):]) - if err363 != nil { - return 0, err363 + n366, err366 := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.LastFailed, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(*m.LastFailed):]) + if err366 != nil { + return 0, err366 } - i -= n363 - i = encodeVarintTypes(dAtA, i, uint64(n363)) + i -= n366 + i = encodeVarintTypes(dAtA, i, uint64(n366)) i-- dAtA[i] = 0x22 } if m.LastSuccessful != nil { - n364, err364 := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.LastSuccessful, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(*m.LastSuccessful):]) - if err364 != nil { - return 0, err364 + n367, err367 := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.LastSuccessful, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(*m.LastSuccessful):]) + if err367 != nil { + return 0, err367 } - i -= n364 - i = encodeVarintTypes(dAtA, i, uint64(n364)) + i -= n367 + i = encodeVarintTypes(dAtA, i, uint64(n367)) i-- dAtA[i] = 0x1a } @@ -46018,12 +46566,12 @@ func (m *PluginOAuth2AccessTokenCredentials) MarshalToSizedBuffer(dAtA []byte) ( i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } - n369, err369 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Expires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Expires):]) - if err369 != nil { - return 0, err369 + n372, err372 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Expires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Expires):]) + if err372 != nil { + return 0, err372 } - i -= n369 - i = encodeVarintTypes(dAtA, i, uint64(n369)) + i -= n372 + i = encodeVarintTypes(dAtA, i, uint64(n372)) i-- dAtA[i] = 0x1a if len(m.RefreshToken) > 0 { @@ -46903,20 +47451,20 @@ func (m *ScheduledAgentUpgradeWindow) MarshalToSizedBuffer(dAtA []byte) (int, er i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } - n383, err383 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Stop, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Stop):]) - if err383 != nil { - return 0, err383 + n386, err386 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Stop, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Stop):]) + if err386 != nil { + return 0, err386 } - i -= n383 - i = encodeVarintTypes(dAtA, i, uint64(n383)) + i -= n386 + i = encodeVarintTypes(dAtA, i, uint64(n386)) i-- dAtA[i] = 0x12 - n384, err384 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Start, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Start):]) - if err384 != nil { - return 0, err384 + n387, err387 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Start, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Start):]) + if err387 != nil { + return 0, err387 } - i -= n384 - i = encodeVarintTypes(dAtA, i, uint64(n384)) + i -= n387 + i = encodeVarintTypes(dAtA, i, uint64(n387)) i-- dAtA[i] = 0xa return len(dAtA) - i, nil @@ -47343,12 +47891,12 @@ func (m *OktaAssignmentSpecV1) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x30 } - n391, err391 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.LastTransition, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.LastTransition):]) - if err391 != nil { - return 0, err391 + n394, err394 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.LastTransition, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.LastTransition):]) + if err394 != nil { + return 0, err394 } - i -= n391 - i = encodeVarintTypes(dAtA, i, uint64(n391)) + i -= n394 + i = encodeVarintTypes(dAtA, i, uint64(n394)) i-- dAtA[i] = 0x2a if m.Status != 0 { @@ -47356,12 +47904,12 @@ func (m *OktaAssignmentSpecV1) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x20 } - n392, err392 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.CleanupTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.CleanupTime):]) - if err392 != nil { - return 0, err392 + n395, err395 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.CleanupTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.CleanupTime):]) + if err395 != nil { + return 0, err395 } - i -= n392 - i = encodeVarintTypes(dAtA, i, uint64(n392)) + i -= n395 + i = encodeVarintTypes(dAtA, i, uint64(n395)) i-- dAtA[i] = 0x1a if len(m.Targets) > 0 { @@ -48804,12 +49352,12 @@ func (m *AccessGraphSync) MarshalToSizedBuffer(dAtA []byte) (int, error) { i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } - n415, err415 := github_com_gogo_protobuf_types.StdDurationMarshalTo(m.PollInterval, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdDuration(m.PollInterval):]) - if err415 != nil { - return 0, err415 + n418, err418 := github_com_gogo_protobuf_types.StdDurationMarshalTo(m.PollInterval, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdDuration(m.PollInterval):]) + if err418 != nil { + return 0, err418 } - i -= n415 - i = encodeVarintTypes(dAtA, i, uint64(n415)) + i -= n418 + i = encodeVarintTypes(dAtA, i, uint64(n418)) i-- dAtA[i] = 0x12 if len(m.AWS) > 0 { @@ -50142,6 +50690,48 @@ func (m *CORSPolicy) Size() (n int) { return n } +func (m *IdentityCenterPermissionSet) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.ARN) + if l > 0 { + n += 1 + l + sovTypes(uint64(l)) + } + l = len(m.Name) + if l > 0 { + n += 1 + l + sovTypes(uint64(l)) + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func (m *AppIdentityCenter) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.AccountID) + if l > 0 { + n += 1 + l + sovTypes(uint64(l)) + } + if len(m.PermissionSets) > 0 { + for _, e := range m.PermissionSets { + l = e.Size() + n += 1 + l + sovTypes(uint64(l)) + } + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + func (m *AppSpecV3) Size() (n int) { if m == nil { return 0 @@ -50200,6 +50790,10 @@ func (m *AppSpecV3) Size() (n int) { l = m.CORS.Size() n += 1 + l + sovTypes(uint64(l)) } + if m.IdentityCenter != nil { + l = m.IdentityCenter.Size() + n += 1 + l + sovTypes(uint64(l)) + } if m.XXX_unrecognized != nil { n += len(m.XXX_unrecognized) } @@ -50699,6 +51293,10 @@ func (m *ProvisionTokenSpecV2) Size() (n int) { l = m.TerraformCloud.Size() n += 2 + l + sovTypes(uint64(l)) } + if m.Bitbucket != nil { + l = m.Bitbucket.Size() + n += 2 + l + sovTypes(uint64(l)) + } if m.XXX_unrecognized != nil { n += len(m.XXX_unrecognized) } @@ -51229,6 +51827,60 @@ func (m *ProvisionTokenSpecV2TerraformCloud_Rule) Size() (n int) { return n } +func (m *ProvisionTokenSpecV2Bitbucket) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Allow) > 0 { + for _, e := range m.Allow { + l = e.Size() + n += 1 + l + sovTypes(uint64(l)) + } + } + l = len(m.Audience) + if l > 0 { + n += 1 + l + sovTypes(uint64(l)) + } + l = len(m.IdentityProviderURL) + if l > 0 { + n += 1 + l + sovTypes(uint64(l)) + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func (m *ProvisionTokenSpecV2Bitbucket_Rule) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.WorkspaceUUID) + if l > 0 { + n += 1 + l + sovTypes(uint64(l)) + } + l = len(m.RepositoryUUID) + if l > 0 { + n += 1 + l + sovTypes(uint64(l)) + } + l = len(m.DeploymentEnvironmentUUID) + if l > 0 { + n += 1 + l + sovTypes(uint64(l)) + } + l = len(m.BranchName) + if l > 0 { + n += 1 + l + sovTypes(uint64(l)) + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + func (m *StaticTokensV2) Size() (n int) { if m == nil { return 0 @@ -53198,6 +53850,26 @@ func (m *AccessRequestConditions) Size() (n int) { n += 1 + l + sovTypes(uint64(l)) } } + if m.Reason != nil { + l = m.Reason.Size() + n += 1 + l + sovTypes(uint64(l)) + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func (m *AccessRequestConditionsReason) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Mode) + if l > 0 { + n += 1 + l + sovTypes(uint64(l)) + } if m.XXX_unrecognized != nil { n += len(m.XXX_unrecognized) } @@ -68763,6 +69435,238 @@ func (m *CORSPolicy) Unmarshal(dAtA []byte) error { } return nil } +func (m *IdentityCenterPermissionSet) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: IdentityCenterPermissionSet: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: IdentityCenterPermissionSet: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ARN", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ARN = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *AppIdentityCenter) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: AppIdentityCenter: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: AppIdentityCenter: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AccountID", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.AccountID = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PermissionSets", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.PermissionSets = append(m.PermissionSets, &IdentityCenterPermissionSet{}) + if err := m.PermissionSets[len(m.PermissionSets)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *AppSpecV3) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -69139,11 +70043,43 @@ func (m *AppSpecV3) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.UserGroups = append(m.UserGroups, string(dAtA[iNdEx:postIndex])) + m.UserGroups = append(m.UserGroups, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Integration", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Integration = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 9: + case 10: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Integration", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field RequiredAppNames", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -69171,13 +70107,13 @@ func (m *AppSpecV3) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Integration = string(dAtA[iNdEx:postIndex]) + m.RequiredAppNames = append(m.RequiredAppNames, string(dAtA[iNdEx:postIndex])) iNdEx = postIndex - case 10: + case 11: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RequiredAppNames", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field CORS", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowTypes @@ -69187,27 +70123,31 @@ func (m *AppSpecV3) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthTypes } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthTypes } if postIndex > l { return io.ErrUnexpectedEOF } - m.RequiredAppNames = append(m.RequiredAppNames, string(dAtA[iNdEx:postIndex])) + if m.CORS == nil { + m.CORS = &CORSPolicy{} + } + if err := m.CORS.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex - case 11: + case 12: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field CORS", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field IdentityCenter", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -69234,10 +70174,10 @@ func (m *AppSpecV3) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.CORS == nil { - m.CORS = &CORSPolicy{} + if m.IdentityCenter == nil { + m.IdentityCenter = &AppIdentityCenter{} } - if err := m.CORS.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.IdentityCenter.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -72287,6 +73227,42 @@ func (m *ProvisionTokenSpecV2) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 17: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Bitbucket", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Bitbucket == nil { + m.Bitbucket = &ProvisionTokenSpecV2Bitbucket{} + } + if err := m.Bitbucket.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipTypes(dAtA[iNdEx:]) @@ -75236,11 +76212,288 @@ func (m *ProvisionTokenSpecV2TerraformCloud_Rule) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.OrganizationID = string(dAtA[iNdEx:postIndex]) + m.OrganizationID = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field OrganizationName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.OrganizationName = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ProjectID", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ProjectID = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ProjectName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ProjectName = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field WorkspaceID", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.WorkspaceID = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field WorkspaceName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.WorkspaceName = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RunPhase", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.RunPhase = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ProvisionTokenSpecV2Bitbucket) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ProvisionTokenSpecV2Bitbucket: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ProvisionTokenSpecV2Bitbucket: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Allow", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Allow = append(m.Allow, &ProvisionTokenSpecV2Bitbucket_Rule{}) + if err := m.Allow[len(m.Allow)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field OrganizationName", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Audience", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -75268,11 +76521,11 @@ func (m *ProvisionTokenSpecV2TerraformCloud_Rule) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.OrganizationName = string(dAtA[iNdEx:postIndex]) + m.Audience = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ProjectID", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field IdentityProviderURL", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -75300,11 +76553,62 @@ func (m *ProvisionTokenSpecV2TerraformCloud_Rule) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.ProjectID = string(dAtA[iNdEx:postIndex]) + m.IdentityProviderURL = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 4: + default: + iNdEx = preIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ProvisionTokenSpecV2Bitbucket_Rule) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Rule: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Rule: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ProjectName", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field WorkspaceUUID", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -75332,11 +76636,11 @@ func (m *ProvisionTokenSpecV2TerraformCloud_Rule) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.ProjectName = string(dAtA[iNdEx:postIndex]) + m.WorkspaceUUID = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 5: + case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field WorkspaceID", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field RepositoryUUID", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -75364,11 +76668,11 @@ func (m *ProvisionTokenSpecV2TerraformCloud_Rule) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.WorkspaceID = string(dAtA[iNdEx:postIndex]) + m.RepositoryUUID = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 6: + case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field WorkspaceName", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field DeploymentEnvironmentUUID", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -75396,11 +76700,11 @@ func (m *ProvisionTokenSpecV2TerraformCloud_Rule) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.WorkspaceName = string(dAtA[iNdEx:postIndex]) + m.DeploymentEnvironmentUUID = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 7: + case 4: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RunPhase", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field BranchName", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -75428,7 +76732,7 @@ func (m *ProvisionTokenSpecV2TerraformCloud_Rule) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.RunPhase = string(dAtA[iNdEx:postIndex]) + m.BranchName = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex default: iNdEx = preIndex @@ -88605,6 +89909,125 @@ func (m *AccessRequestConditions) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Reason", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Reason == nil { + m.Reason = &AccessRequestConditionsReason{} + } + if err := m.Reason.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *AccessRequestConditionsReason) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: AccessRequestConditionsReason: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: AccessRequestConditionsReason: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Mode", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Mode = RequestReasonMode(dAtA[iNdEx:postIndex]) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipTypes(dAtA[iNdEx:]) diff --git a/api/utils/keypaths/keypaths.go b/api/utils/keypaths/keypaths.go index 65d855ce2f3ec..5e2d62c4c4ebb 100644 --- a/api/utils/keypaths/keypaths.go +++ b/api/utils/keypaths/keypaths.go @@ -32,8 +32,8 @@ const ( sshDirSuffix = "-ssh" // fileNameKnownHosts is a file where known hosts are stored. fileNameKnownHosts = "known_hosts" - // fileExtTLSCertLegacy is the legacy suffix/extension of a file where a TLS cert is stored. - fileExtTLSCertLegacy = "-x509.pem" + // FileExtTLSCertLegacy is the legacy suffix/extension of a file where a TLS cert is stored. + FileExtTLSCertLegacy = "-x509.pem" // FileExtTLSCert is the suffix/extension of a file where a TLS cert is stored. FileExtTLSCert = ".crt" // FileExtKubeCred is the suffix/extension of a file where a kubernetes @@ -188,6 +188,14 @@ func TLSCertPath(baseDir, proxy, username string) string { return filepath.Join(ProxyKeyDir(baseDir, proxy), username+FileExtTLSCert) } +// TLSCertPathLegacy returns the legacy path used in Teleport 16.x and older to the +// users's TLS certificate for the given proxy. +// +// /keys//-x509.pem +func TLSCertPathLegacy(baseDir, proxy, username string) string { + return filepath.Join(ProxyKeyDir(baseDir, proxy), username+FileExtTLSCertLegacy) +} + // PublicKeyPath returns the path to the users's public key // for the given proxy. // @@ -378,14 +386,6 @@ func IdentitySSHCertPath(path string) string { return path + fileExtSSHCert } -// TrimCertPathSuffix returns the given path with any cert suffix/extension trimmed off. -func TrimCertPathSuffix(path string) string { - trimmedPath := strings.TrimSuffix(path, fileExtTLSCertLegacy) - trimmedPath = strings.TrimSuffix(trimmedPath, FileExtTLSCert) - trimmedPath = strings.TrimSuffix(trimmedPath, fileExtSSHCert) - return trimmedPath -} - // TrimKeyPathSuffix returns the given path with any key suffix/extension trimmed off. func TrimKeyPathSuffix(path string) string { return strings.TrimSuffix(path, fileExtTLSKey) diff --git a/api/utils/retryutils/jitter.go b/api/utils/retryutils/jitter.go index caa20a9647b40..89db496afbf57 100644 --- a/api/utils/retryutils/jitter.go +++ b/api/utils/retryutils/jitter.go @@ -76,7 +76,7 @@ func FullJitter(d time.Duration) time.Duration { return 0 } - return time.Duration(rand.Int64N(int64(d))) + return rand.N(d) } // HalfJitter is a jitter on the range [d/2, d). This is a large range and most @@ -92,7 +92,7 @@ func HalfJitter(d time.Duration) time.Duration { return d } - return d - frac + time.Duration(rand.Int64N(int64(frac))) + return d - frac + rand.N(frac) } // SeventhJitter returns a jitter on the range [6d/7, d). Prefer smaller jitters @@ -108,5 +108,5 @@ func SeventhJitter(d time.Duration) time.Duration { return d } - return d - frac + time.Duration(rand.Int64N(int64(frac))) + return d - frac + rand.N(frac) } diff --git a/docs/pages/reference/operator-resources/resources.teleport.dev_provisiontokens.mdx b/docs/pages/reference/operator-resources/resources.teleport.dev_provisiontokens.mdx index 9f50131d3e622..58bdd55eab002 100644 --- a/docs/pages/reference/operator-resources/resources.teleport.dev_provisiontokens.mdx +++ b/docs/pages/reference/operator-resources/resources.teleport.dev_provisiontokens.mdx @@ -29,6 +29,7 @@ resource, which you can apply after installing the Teleport Kubernetes operator. |allow|[][object](#specallow-items)|Allow is a list of TokenRules, nodes using this token must match one allow rule to use this token.| |aws_iid_ttl|string|AWSIIDTTL is the TTL to use for AWS EC2 Instance Identity Documents used to join the cluster with this token.| |azure|[object](#specazure)|Azure allows the configuration of options specific to the "azure" join method.| +|bitbucket|[object](#specbitbucket)|Bitbucket allows the configuration of options specific to the "bitbucket" join method.| |bot_name|string|BotName is the name of the bot this token grants access to, if any| |circleci|[object](#speccircleci)|CircleCI allows the configuration of options specific to the "circleci" join method.| |gcp|[object](#specgcp)|GCP allows the configuration of options specific to the "gcp" join method.| @@ -65,6 +66,23 @@ resource, which you can apply after installing the Teleport Kubernetes operator. |resource_groups|[]string|| |subscription|string|| +### spec.bitbucket + +|Field|Type|Description| +|---|---|---| +|allow|[][object](#specbitbucketallow-items)|Allow is a list of Rules, nodes using this token must match one allow rule to use this token.| +|audience|string|Audience is a Bitbucket-specified audience value for this token. It is unique to each Bitbucket repository, and must be set to the value as written in the Pipelines -> OpenID Connect section of the repository settings.| +|identity_provider_url|string|IdentityProviderURL is a Bitbucket-specified issuer URL for incoming OIDC tokens. It is unique to each Bitbucket repository, and must be set to the value as written in the Pipelines -> OpenID Connect section of the repository settings.| + +### spec.bitbucket.allow items + +|Field|Type|Description| +|---|---|---| +|branch_name|string|| +|deployment_environment_uuid|string|| +|repository_uuid|string|| +|workspace_uuid|string|| + ### spec.circleci |Field|Type|Description| diff --git a/docs/pages/reference/operator-resources/resources.teleport.dev_roles.mdx b/docs/pages/reference/operator-resources/resources.teleport.dev_roles.mdx index bc3ffaeb82b22..97ac53a0ca62c 100644 --- a/docs/pages/reference/operator-resources/resources.teleport.dev_roles.mdx +++ b/docs/pages/reference/operator-resources/resources.teleport.dev_roles.mdx @@ -122,6 +122,7 @@ resource, which you can apply after installing the Teleport Kubernetes operator. |claims_to_roles|[][object](#specallowrequestclaims_to_roles-items)|ClaimsToRoles specifies a mapping from claims (traits) to teleport roles.| |kubernetes_resources|[][object](#specallowrequestkubernetes_resources-items)|kubernetes_resources can optionally enforce a requester to request only certain kinds of kube resources. Eg: Users can make request to either a resource kind "kube_cluster" or any of its subresources like "namespaces". This field can be defined such that it prevents a user from requesting "kube_cluster" and enforce requesting any of its subresources.| |max_duration|string|MaxDuration is the amount of time the access will be granted for. If this is zero, the default duration is used.| +|reason|[object](#specallowrequestreason)|Reason defines settings for the reason for the access provided by the user.| |roles|[]string|Roles is the name of roles which will match the request rule.| |search_as_roles|[]string|SearchAsRoles is a list of extra roles which should apply to a user while they are searching for resources as part of a Resource Access Request, and defines the underlying roles which will be requested as part of any Resource Access Request.| |suggested_reviewers|[]string|SuggestedReviewers is a list of reviewer suggestions. These can be teleport usernames, but that is not a requirement.| @@ -141,6 +142,12 @@ resource, which you can apply after installing the Teleport Kubernetes operator. |---|---|---| |kind|string|kind specifies the Kubernetes Resource type.| +### spec.allow.request.reason + +|Field|Type|Description| +|---|---|---| +|mode|string|Mode can be either "required" or "optional". Empty string is treated as "optional". If a role has the request reason mode set to "required", then reason is required for all Access Requests requesting roles or resources allowed by this role. It applies only to users who have this role assigned.| + ### spec.allow.request.thresholds items |Field|Type|Description| @@ -287,6 +294,7 @@ resource, which you can apply after installing the Teleport Kubernetes operator. |claims_to_roles|[][object](#specdenyrequestclaims_to_roles-items)|ClaimsToRoles specifies a mapping from claims (traits) to teleport roles.| |kubernetes_resources|[][object](#specdenyrequestkubernetes_resources-items)|kubernetes_resources can optionally enforce a requester to request only certain kinds of kube resources. Eg: Users can make request to either a resource kind "kube_cluster" or any of its subresources like "namespaces". This field can be defined such that it prevents a user from requesting "kube_cluster" and enforce requesting any of its subresources.| |max_duration|string|MaxDuration is the amount of time the access will be granted for. If this is zero, the default duration is used.| +|reason|[object](#specdenyrequestreason)|Reason defines settings for the reason for the access provided by the user.| |roles|[]string|Roles is the name of roles which will match the request rule.| |search_as_roles|[]string|SearchAsRoles is a list of extra roles which should apply to a user while they are searching for resources as part of a Resource Access Request, and defines the underlying roles which will be requested as part of any Resource Access Request.| |suggested_reviewers|[]string|SuggestedReviewers is a list of reviewer suggestions. These can be teleport usernames, but that is not a requirement.| @@ -306,6 +314,12 @@ resource, which you can apply after installing the Teleport Kubernetes operator. |---|---|---| |kind|string|kind specifies the Kubernetes Resource type.| +### spec.deny.request.reason + +|Field|Type|Description| +|---|---|---| +|mode|string|Mode can be either "required" or "optional". Empty string is treated as "optional". If a role has the request reason mode set to "required", then reason is required for all Access Requests requesting roles or resources allowed by this role. It applies only to users who have this role assigned.| + ### spec.deny.request.thresholds items |Field|Type|Description| @@ -535,6 +549,7 @@ resource, which you can apply after installing the Teleport Kubernetes operator. |claims_to_roles|[][object](#specallowrequestclaims_to_roles-items)|ClaimsToRoles specifies a mapping from claims (traits) to teleport roles.| |kubernetes_resources|[][object](#specallowrequestkubernetes_resources-items)|kubernetes_resources can optionally enforce a requester to request only certain kinds of kube resources. Eg: Users can make request to either a resource kind "kube_cluster" or any of its subresources like "namespaces". This field can be defined such that it prevents a user from requesting "kube_cluster" and enforce requesting any of its subresources.| |max_duration|string|MaxDuration is the amount of time the access will be granted for. If this is zero, the default duration is used.| +|reason|[object](#specallowrequestreason)|Reason defines settings for the reason for the access provided by the user.| |roles|[]string|Roles is the name of roles which will match the request rule.| |search_as_roles|[]string|SearchAsRoles is a list of extra roles which should apply to a user while they are searching for resources as part of a Resource Access Request, and defines the underlying roles which will be requested as part of any Resource Access Request.| |suggested_reviewers|[]string|SuggestedReviewers is a list of reviewer suggestions. These can be teleport usernames, but that is not a requirement.| @@ -554,6 +569,12 @@ resource, which you can apply after installing the Teleport Kubernetes operator. |---|---|---| |kind|string|kind specifies the Kubernetes Resource type.| +### spec.allow.request.reason + +|Field|Type|Description| +|---|---|---| +|mode|string|Mode can be either "required" or "optional". Empty string is treated as "optional". If a role has the request reason mode set to "required", then reason is required for all Access Requests requesting roles or resources allowed by this role. It applies only to users who have this role assigned.| + ### spec.allow.request.thresholds items |Field|Type|Description| @@ -700,6 +721,7 @@ resource, which you can apply after installing the Teleport Kubernetes operator. |claims_to_roles|[][object](#specdenyrequestclaims_to_roles-items)|ClaimsToRoles specifies a mapping from claims (traits) to teleport roles.| |kubernetes_resources|[][object](#specdenyrequestkubernetes_resources-items)|kubernetes_resources can optionally enforce a requester to request only certain kinds of kube resources. Eg: Users can make request to either a resource kind "kube_cluster" or any of its subresources like "namespaces". This field can be defined such that it prevents a user from requesting "kube_cluster" and enforce requesting any of its subresources.| |max_duration|string|MaxDuration is the amount of time the access will be granted for. If this is zero, the default duration is used.| +|reason|[object](#specdenyrequestreason)|Reason defines settings for the reason for the access provided by the user.| |roles|[]string|Roles is the name of roles which will match the request rule.| |search_as_roles|[]string|SearchAsRoles is a list of extra roles which should apply to a user while they are searching for resources as part of a Resource Access Request, and defines the underlying roles which will be requested as part of any Resource Access Request.| |suggested_reviewers|[]string|SuggestedReviewers is a list of reviewer suggestions. These can be teleport usernames, but that is not a requirement.| @@ -719,6 +741,12 @@ resource, which you can apply after installing the Teleport Kubernetes operator. |---|---|---| |kind|string|kind specifies the Kubernetes Resource type.| +### spec.deny.request.reason + +|Field|Type|Description| +|---|---|---| +|mode|string|Mode can be either "required" or "optional". Empty string is treated as "optional". If a role has the request reason mode set to "required", then reason is required for all Access Requests requesting roles or resources allowed by this role. It applies only to users who have this role assigned.| + ### spec.deny.request.thresholds items |Field|Type|Description| diff --git a/docs/pages/reference/operator-resources/resources.teleport.dev_rolesv6.mdx b/docs/pages/reference/operator-resources/resources.teleport.dev_rolesv6.mdx index b7a46956303f6..2fb435f13e960 100644 --- a/docs/pages/reference/operator-resources/resources.teleport.dev_rolesv6.mdx +++ b/docs/pages/reference/operator-resources/resources.teleport.dev_rolesv6.mdx @@ -122,6 +122,7 @@ resource, which you can apply after installing the Teleport Kubernetes operator. |claims_to_roles|[][object](#specallowrequestclaims_to_roles-items)|ClaimsToRoles specifies a mapping from claims (traits) to teleport roles.| |kubernetes_resources|[][object](#specallowrequestkubernetes_resources-items)|kubernetes_resources can optionally enforce a requester to request only certain kinds of kube resources. Eg: Users can make request to either a resource kind "kube_cluster" or any of its subresources like "namespaces". This field can be defined such that it prevents a user from requesting "kube_cluster" and enforce requesting any of its subresources.| |max_duration|string|MaxDuration is the amount of time the access will be granted for. If this is zero, the default duration is used.| +|reason|[object](#specallowrequestreason)|Reason defines settings for the reason for the access provided by the user.| |roles|[]string|Roles is the name of roles which will match the request rule.| |search_as_roles|[]string|SearchAsRoles is a list of extra roles which should apply to a user while they are searching for resources as part of a Resource Access Request, and defines the underlying roles which will be requested as part of any Resource Access Request.| |suggested_reviewers|[]string|SuggestedReviewers is a list of reviewer suggestions. These can be teleport usernames, but that is not a requirement.| @@ -141,6 +142,12 @@ resource, which you can apply after installing the Teleport Kubernetes operator. |---|---|---| |kind|string|kind specifies the Kubernetes Resource type.| +### spec.allow.request.reason + +|Field|Type|Description| +|---|---|---| +|mode|string|Mode can be either "required" or "optional". Empty string is treated as "optional". If a role has the request reason mode set to "required", then reason is required for all Access Requests requesting roles or resources allowed by this role. It applies only to users who have this role assigned.| + ### spec.allow.request.thresholds items |Field|Type|Description| @@ -287,6 +294,7 @@ resource, which you can apply after installing the Teleport Kubernetes operator. |claims_to_roles|[][object](#specdenyrequestclaims_to_roles-items)|ClaimsToRoles specifies a mapping from claims (traits) to teleport roles.| |kubernetes_resources|[][object](#specdenyrequestkubernetes_resources-items)|kubernetes_resources can optionally enforce a requester to request only certain kinds of kube resources. Eg: Users can make request to either a resource kind "kube_cluster" or any of its subresources like "namespaces". This field can be defined such that it prevents a user from requesting "kube_cluster" and enforce requesting any of its subresources.| |max_duration|string|MaxDuration is the amount of time the access will be granted for. If this is zero, the default duration is used.| +|reason|[object](#specdenyrequestreason)|Reason defines settings for the reason for the access provided by the user.| |roles|[]string|Roles is the name of roles which will match the request rule.| |search_as_roles|[]string|SearchAsRoles is a list of extra roles which should apply to a user while they are searching for resources as part of a Resource Access Request, and defines the underlying roles which will be requested as part of any Resource Access Request.| |suggested_reviewers|[]string|SuggestedReviewers is a list of reviewer suggestions. These can be teleport usernames, but that is not a requirement.| @@ -306,6 +314,12 @@ resource, which you can apply after installing the Teleport Kubernetes operator. |---|---|---| |kind|string|kind specifies the Kubernetes Resource type.| +### spec.deny.request.reason + +|Field|Type|Description| +|---|---|---| +|mode|string|Mode can be either "required" or "optional". Empty string is treated as "optional". If a role has the request reason mode set to "required", then reason is required for all Access Requests requesting roles or resources allowed by this role. It applies only to users who have this role assigned.| + ### spec.deny.request.thresholds items |Field|Type|Description| diff --git a/docs/pages/reference/operator-resources/resources.teleport.dev_rolesv7.mdx b/docs/pages/reference/operator-resources/resources.teleport.dev_rolesv7.mdx index cb1a3d4c7b40d..9e847a9ea9fd0 100644 --- a/docs/pages/reference/operator-resources/resources.teleport.dev_rolesv7.mdx +++ b/docs/pages/reference/operator-resources/resources.teleport.dev_rolesv7.mdx @@ -122,6 +122,7 @@ resource, which you can apply after installing the Teleport Kubernetes operator. |claims_to_roles|[][object](#specallowrequestclaims_to_roles-items)|ClaimsToRoles specifies a mapping from claims (traits) to teleport roles.| |kubernetes_resources|[][object](#specallowrequestkubernetes_resources-items)|kubernetes_resources can optionally enforce a requester to request only certain kinds of kube resources. Eg: Users can make request to either a resource kind "kube_cluster" or any of its subresources like "namespaces". This field can be defined such that it prevents a user from requesting "kube_cluster" and enforce requesting any of its subresources.| |max_duration|string|MaxDuration is the amount of time the access will be granted for. If this is zero, the default duration is used.| +|reason|[object](#specallowrequestreason)|Reason defines settings for the reason for the access provided by the user.| |roles|[]string|Roles is the name of roles which will match the request rule.| |search_as_roles|[]string|SearchAsRoles is a list of extra roles which should apply to a user while they are searching for resources as part of a Resource Access Request, and defines the underlying roles which will be requested as part of any Resource Access Request.| |suggested_reviewers|[]string|SuggestedReviewers is a list of reviewer suggestions. These can be teleport usernames, but that is not a requirement.| @@ -141,6 +142,12 @@ resource, which you can apply after installing the Teleport Kubernetes operator. |---|---|---| |kind|string|kind specifies the Kubernetes Resource type.| +### spec.allow.request.reason + +|Field|Type|Description| +|---|---|---| +|mode|string|Mode can be either "required" or "optional". Empty string is treated as "optional". If a role has the request reason mode set to "required", then reason is required for all Access Requests requesting roles or resources allowed by this role. It applies only to users who have this role assigned.| + ### spec.allow.request.thresholds items |Field|Type|Description| @@ -287,6 +294,7 @@ resource, which you can apply after installing the Teleport Kubernetes operator. |claims_to_roles|[][object](#specdenyrequestclaims_to_roles-items)|ClaimsToRoles specifies a mapping from claims (traits) to teleport roles.| |kubernetes_resources|[][object](#specdenyrequestkubernetes_resources-items)|kubernetes_resources can optionally enforce a requester to request only certain kinds of kube resources. Eg: Users can make request to either a resource kind "kube_cluster" or any of its subresources like "namespaces". This field can be defined such that it prevents a user from requesting "kube_cluster" and enforce requesting any of its subresources.| |max_duration|string|MaxDuration is the amount of time the access will be granted for. If this is zero, the default duration is used.| +|reason|[object](#specdenyrequestreason)|Reason defines settings for the reason for the access provided by the user.| |roles|[]string|Roles is the name of roles which will match the request rule.| |search_as_roles|[]string|SearchAsRoles is a list of extra roles which should apply to a user while they are searching for resources as part of a Resource Access Request, and defines the underlying roles which will be requested as part of any Resource Access Request.| |suggested_reviewers|[]string|SuggestedReviewers is a list of reviewer suggestions. These can be teleport usernames, but that is not a requirement.| @@ -306,6 +314,12 @@ resource, which you can apply after installing the Teleport Kubernetes operator. |---|---|---| |kind|string|kind specifies the Kubernetes Resource type.| +### spec.deny.request.reason + +|Field|Type|Description| +|---|---|---| +|mode|string|Mode can be either "required" or "optional". Empty string is treated as "optional". If a role has the request reason mode set to "required", then reason is required for all Access Requests requesting roles or resources allowed by this role. It applies only to users who have this role assigned.| + ### spec.deny.request.thresholds items |Field|Type|Description| diff --git a/docs/pages/reference/terraform-provider/data-sources/app.mdx b/docs/pages/reference/terraform-provider/data-sources/app.mdx index 13aa0ab8d15b8..b2899fb41b508 100644 --- a/docs/pages/reference/terraform-provider/data-sources/app.mdx +++ b/docs/pages/reference/terraform-provider/data-sources/app.mdx @@ -45,6 +45,7 @@ Optional: - `cloud` (String) Cloud identifies the cloud instance the app represents. - `cors` (Attributes) CORSPolicy defines the Cross-Origin Resource Sharing settings for the app. (see [below for nested schema](#nested-schema-for-speccors)) - `dynamic_labels` (Attributes Map) DynamicLabels are the app's command labels. (see [below for nested schema](#nested-schema-for-specdynamic_labels)) +- `identity_center` (Attributes) IdentityCenter encasulates AWS identity-center specific information. Only valid for Identity Center account apps. (see [below for nested schema](#nested-schema-for-specidentity_center)) - `insecure_skip_verify` (Boolean) InsecureSkipVerify disables app's TLS certificate verification. - `integration` (String) Integration is the integration name that must be used to access this Application. Only applicable to AWS App Access. If present, the Application must use the Integration's credentials instead of ambient credentials to access Cloud APIs. - `public_addr` (String) PublicAddr is the public address the application is accessible at. @@ -81,6 +82,22 @@ Optional: - `result` (String) Result captures standard output +### Nested Schema for `spec.identity_center` + +Optional: + +- `account_id` (String) Account ID is the AWS-assigned ID of the account +- `permission_sets` (Attributes List) PermissionSets lists the available permission sets on the given account (see [below for nested schema](#nested-schema-for-specidentity_centerpermission_sets)) + +### Nested Schema for `spec.identity_center.permission_sets` + +Optional: + +- `arn` (String) ARN is the fully-formed ARN of the Permission Set. +- `name` (String) Name is the human-readable name of the Permission Set. + + + ### Nested Schema for `spec.rewrite` Optional: diff --git a/docs/pages/reference/terraform-provider/data-sources/provision_token.mdx b/docs/pages/reference/terraform-provider/data-sources/provision_token.mdx index b5c13ab486334..937be42adc350 100644 --- a/docs/pages/reference/terraform-provider/data-sources/provision_token.mdx +++ b/docs/pages/reference/terraform-provider/data-sources/provision_token.mdx @@ -35,6 +35,7 @@ Optional: - `allow` (Attributes List) Allow is a list of TokenRules, nodes using this token must match one allow rule to use this token. (see [below for nested schema](#nested-schema-for-specallow)) - `aws_iid_ttl` (String) AWSIIDTTL is the TTL to use for AWS EC2 Instance Identity Documents used to join the cluster with this token. - `azure` (Attributes) Azure allows the configuration of options specific to the "azure" join method. (see [below for nested schema](#nested-schema-for-specazure)) +- `bitbucket` (Attributes) Bitbucket allows the configuration of options specific to the "bitbucket" join method. (see [below for nested schema](#nested-schema-for-specbitbucket)) - `bot_name` (String) BotName is the name of the bot this token grants access to, if any - `circleci` (Attributes) CircleCI allows the configuration of options specific to the "circleci" join method. (see [below for nested schema](#nested-schema-for-speccircleci)) - `gcp` (Attributes) GCP allows the configuration of options specific to the "gcp" join method. (see [below for nested schema](#nested-schema-for-specgcp)) @@ -73,6 +74,25 @@ Optional: +### Nested Schema for `spec.bitbucket` + +Optional: + +- `allow` (Attributes List) Allow is a list of Rules, nodes using this token must match one allow rule to use this token. (see [below for nested schema](#nested-schema-for-specbitbucketallow)) +- `audience` (String) Audience is a Bitbucket-specified audience value for this token. It is unique to each Bitbucket repository, and must be set to the value as written in the Pipelines -> OpenID Connect section of the repository settings. +- `identity_provider_url` (String) IdentityProviderURL is a Bitbucket-specified issuer URL for incoming OIDC tokens. It is unique to each Bitbucket repository, and must be set to the value as written in the Pipelines -> OpenID Connect section of the repository settings. + +### Nested Schema for `spec.bitbucket.allow` + +Optional: + +- `branch_name` (String) BranchName is the name of the branch on which this pipeline executed. +- `deployment_environment_uuid` (String) DeploymentEnvironmentUUID is the UUID of the deployment environment targeted by this pipelines run, if any. These values may be found in the "Pipelines -> OpenID Connect -> Deployment environments" section of the repository settings. +- `repository_uuid` (String) RepositoryUUID is the UUID of the repository for which this token was issued. Bitbucket UUIDs must begin and end with braces, e.g. `{...}`. This value may be found in the Pipelines -> OpenID Connect section of the repository settings. +- `workspace_uuid` (String) WorkspaceUUID is the UUID of the workspace for which this token was issued. Bitbucket UUIDs must begin and end with braces, e.g. `{...}`. This value may be found in the Pipelines -> OpenID Connect section of the repository settings. + + + ### Nested Schema for `spec.circleci` Optional: diff --git a/docs/pages/reference/terraform-provider/data-sources/role.mdx b/docs/pages/reference/terraform-provider/data-sources/role.mdx index f9a52392086fc..d6007d1a790e6 100644 --- a/docs/pages/reference/terraform-provider/data-sources/role.mdx +++ b/docs/pages/reference/terraform-provider/data-sources/role.mdx @@ -142,6 +142,7 @@ Optional: - `claims_to_roles` (Attributes List) ClaimsToRoles specifies a mapping from claims (traits) to teleport roles. (see [below for nested schema](#nested-schema-for-specallowrequestclaims_to_roles)) - `kubernetes_resources` (Attributes List) kubernetes_resources can optionally enforce a requester to request only certain kinds of kube resources. Eg: Users can make request to either a resource kind "kube_cluster" or any of its subresources like "namespaces". This field can be defined such that it prevents a user from requesting "kube_cluster" and enforce requesting any of its subresources. (see [below for nested schema](#nested-schema-for-specallowrequestkubernetes_resources)) - `max_duration` (String) MaxDuration is the amount of time the access will be granted for. If this is zero, the default duration is used. +- `reason` (Attributes) Reason defines settings for the reason for the access provided by the user. (see [below for nested schema](#nested-schema-for-specallowrequestreason)) - `roles` (List of String) Roles is the name of roles which will match the request rule. - `search_as_roles` (List of String) SearchAsRoles is a list of extra roles which should apply to a user while they are searching for resources as part of a Resource Access Request, and defines the underlying roles which will be requested as part of any Resource Access Request. - `suggested_reviewers` (List of String) SuggestedReviewers is a list of reviewer suggestions. These can be teleport usernames, but that is not a requirement. @@ -163,6 +164,13 @@ Optional: - `kind` (String) kind specifies the Kubernetes Resource type. +### Nested Schema for `spec.allow.request.reason` + +Optional: + +- `mode` (String) Mode can be either "required" or "optional". Empty string is treated as "optional". If a role has the request reason mode set to "required", then reason is required for all Access Requests requesting roles or resources allowed by this role. It applies only to users who have this role assigned. + + ### Nested Schema for `spec.allow.request.thresholds` Optional: @@ -322,6 +330,7 @@ Optional: - `claims_to_roles` (Attributes List) ClaimsToRoles specifies a mapping from claims (traits) to teleport roles. (see [below for nested schema](#nested-schema-for-specdenyrequestclaims_to_roles)) - `kubernetes_resources` (Attributes List) kubernetes_resources can optionally enforce a requester to request only certain kinds of kube resources. Eg: Users can make request to either a resource kind "kube_cluster" or any of its subresources like "namespaces". This field can be defined such that it prevents a user from requesting "kube_cluster" and enforce requesting any of its subresources. (see [below for nested schema](#nested-schema-for-specdenyrequestkubernetes_resources)) - `max_duration` (String) MaxDuration is the amount of time the access will be granted for. If this is zero, the default duration is used. +- `reason` (Attributes) Reason defines settings for the reason for the access provided by the user. (see [below for nested schema](#nested-schema-for-specdenyrequestreason)) - `roles` (List of String) Roles is the name of roles which will match the request rule. - `search_as_roles` (List of String) SearchAsRoles is a list of extra roles which should apply to a user while they are searching for resources as part of a Resource Access Request, and defines the underlying roles which will be requested as part of any Resource Access Request. - `suggested_reviewers` (List of String) SuggestedReviewers is a list of reviewer suggestions. These can be teleport usernames, but that is not a requirement. @@ -343,6 +352,13 @@ Optional: - `kind` (String) kind specifies the Kubernetes Resource type. +### Nested Schema for `spec.deny.request.reason` + +Optional: + +- `mode` (String) Mode can be either "required" or "optional". Empty string is treated as "optional". If a role has the request reason mode set to "required", then reason is required for all Access Requests requesting roles or resources allowed by this role. It applies only to users who have this role assigned. + + ### Nested Schema for `spec.deny.request.thresholds` Optional: diff --git a/docs/pages/reference/terraform-provider/resources/app.mdx b/docs/pages/reference/terraform-provider/resources/app.mdx index 820b1fce445cb..6901673e50c8c 100644 --- a/docs/pages/reference/terraform-provider/resources/app.mdx +++ b/docs/pages/reference/terraform-provider/resources/app.mdx @@ -64,6 +64,7 @@ Optional: - `cloud` (String) Cloud identifies the cloud instance the app represents. - `cors` (Attributes) CORSPolicy defines the Cross-Origin Resource Sharing settings for the app. (see [below for nested schema](#nested-schema-for-speccors)) - `dynamic_labels` (Attributes Map) DynamicLabels are the app's command labels. (see [below for nested schema](#nested-schema-for-specdynamic_labels)) +- `identity_center` (Attributes) IdentityCenter encasulates AWS identity-center specific information. Only valid for Identity Center account apps. (see [below for nested schema](#nested-schema-for-specidentity_center)) - `insecure_skip_verify` (Boolean) InsecureSkipVerify disables app's TLS certificate verification. - `integration` (String) Integration is the integration name that must be used to access this Application. Only applicable to AWS App Access. If present, the Application must use the Integration's credentials instead of ambient credentials to access Cloud APIs. - `public_addr` (String) PublicAddr is the public address the application is accessible at. @@ -100,6 +101,22 @@ Optional: - `result` (String) Result captures standard output +### Nested Schema for `spec.identity_center` + +Optional: + +- `account_id` (String) Account ID is the AWS-assigned ID of the account +- `permission_sets` (Attributes List) PermissionSets lists the available permission sets on the given account (see [below for nested schema](#nested-schema-for-specidentity_centerpermission_sets)) + +### Nested Schema for `spec.identity_center.permission_sets` + +Optional: + +- `arn` (String) ARN is the fully-formed ARN of the Permission Set. +- `name` (String) Name is the human-readable name of the Permission Set. + + + ### Nested Schema for `spec.rewrite` Optional: diff --git a/docs/pages/reference/terraform-provider/resources/provision_token.mdx b/docs/pages/reference/terraform-provider/resources/provision_token.mdx index 6c122b1ecdfce..b42ddb363a9bf 100644 --- a/docs/pages/reference/terraform-provider/resources/provision_token.mdx +++ b/docs/pages/reference/terraform-provider/resources/provision_token.mdx @@ -69,6 +69,7 @@ Optional: - `allow` (Attributes List) Allow is a list of TokenRules, nodes using this token must match one allow rule to use this token. (see [below for nested schema](#nested-schema-for-specallow)) - `aws_iid_ttl` (String) AWSIIDTTL is the TTL to use for AWS EC2 Instance Identity Documents used to join the cluster with this token. - `azure` (Attributes) Azure allows the configuration of options specific to the "azure" join method. (see [below for nested schema](#nested-schema-for-specazure)) +- `bitbucket` (Attributes) Bitbucket allows the configuration of options specific to the "bitbucket" join method. (see [below for nested schema](#nested-schema-for-specbitbucket)) - `bot_name` (String) BotName is the name of the bot this token grants access to, if any - `circleci` (Attributes) CircleCI allows the configuration of options specific to the "circleci" join method. (see [below for nested schema](#nested-schema-for-speccircleci)) - `gcp` (Attributes) GCP allows the configuration of options specific to the "gcp" join method. (see [below for nested schema](#nested-schema-for-specgcp)) @@ -107,6 +108,25 @@ Optional: +### Nested Schema for `spec.bitbucket` + +Optional: + +- `allow` (Attributes List) Allow is a list of Rules, nodes using this token must match one allow rule to use this token. (see [below for nested schema](#nested-schema-for-specbitbucketallow)) +- `audience` (String) Audience is a Bitbucket-specified audience value for this token. It is unique to each Bitbucket repository, and must be set to the value as written in the Pipelines -> OpenID Connect section of the repository settings. +- `identity_provider_url` (String) IdentityProviderURL is a Bitbucket-specified issuer URL for incoming OIDC tokens. It is unique to each Bitbucket repository, and must be set to the value as written in the Pipelines -> OpenID Connect section of the repository settings. + +### Nested Schema for `spec.bitbucket.allow` + +Optional: + +- `branch_name` (String) BranchName is the name of the branch on which this pipeline executed. +- `deployment_environment_uuid` (String) DeploymentEnvironmentUUID is the UUID of the deployment environment targeted by this pipelines run, if any. These values may be found in the "Pipelines -> OpenID Connect -> Deployment environments" section of the repository settings. +- `repository_uuid` (String) RepositoryUUID is the UUID of the repository for which this token was issued. Bitbucket UUIDs must begin and end with braces, e.g. `{...}`. This value may be found in the Pipelines -> OpenID Connect section of the repository settings. +- `workspace_uuid` (String) WorkspaceUUID is the UUID of the workspace for which this token was issued. Bitbucket UUIDs must begin and end with braces, e.g. `{...}`. This value may be found in the Pipelines -> OpenID Connect section of the repository settings. + + + ### Nested Schema for `spec.circleci` Optional: diff --git a/docs/pages/reference/terraform-provider/resources/role.mdx b/docs/pages/reference/terraform-provider/resources/role.mdx index db077054822aa..143ab376caea9 100644 --- a/docs/pages/reference/terraform-provider/resources/role.mdx +++ b/docs/pages/reference/terraform-provider/resources/role.mdx @@ -196,6 +196,7 @@ Optional: - `claims_to_roles` (Attributes List) ClaimsToRoles specifies a mapping from claims (traits) to teleport roles. (see [below for nested schema](#nested-schema-for-specallowrequestclaims_to_roles)) - `kubernetes_resources` (Attributes List) kubernetes_resources can optionally enforce a requester to request only certain kinds of kube resources. Eg: Users can make request to either a resource kind "kube_cluster" or any of its subresources like "namespaces". This field can be defined such that it prevents a user from requesting "kube_cluster" and enforce requesting any of its subresources. (see [below for nested schema](#nested-schema-for-specallowrequestkubernetes_resources)) - `max_duration` (String) MaxDuration is the amount of time the access will be granted for. If this is zero, the default duration is used. +- `reason` (Attributes) Reason defines settings for the reason for the access provided by the user. (see [below for nested schema](#nested-schema-for-specallowrequestreason)) - `roles` (List of String) Roles is the name of roles which will match the request rule. - `search_as_roles` (List of String) SearchAsRoles is a list of extra roles which should apply to a user while they are searching for resources as part of a Resource Access Request, and defines the underlying roles which will be requested as part of any Resource Access Request. - `suggested_reviewers` (List of String) SuggestedReviewers is a list of reviewer suggestions. These can be teleport usernames, but that is not a requirement. @@ -217,6 +218,13 @@ Optional: - `kind` (String) kind specifies the Kubernetes Resource type. +### Nested Schema for `spec.allow.request.reason` + +Optional: + +- `mode` (String) Mode can be either "required" or "optional". Empty string is treated as "optional". If a role has the request reason mode set to "required", then reason is required for all Access Requests requesting roles or resources allowed by this role. It applies only to users who have this role assigned. + + ### Nested Schema for `spec.allow.request.thresholds` Optional: @@ -376,6 +384,7 @@ Optional: - `claims_to_roles` (Attributes List) ClaimsToRoles specifies a mapping from claims (traits) to teleport roles. (see [below for nested schema](#nested-schema-for-specdenyrequestclaims_to_roles)) - `kubernetes_resources` (Attributes List) kubernetes_resources can optionally enforce a requester to request only certain kinds of kube resources. Eg: Users can make request to either a resource kind "kube_cluster" or any of its subresources like "namespaces". This field can be defined such that it prevents a user from requesting "kube_cluster" and enforce requesting any of its subresources. (see [below for nested schema](#nested-schema-for-specdenyrequestkubernetes_resources)) - `max_duration` (String) MaxDuration is the amount of time the access will be granted for. If this is zero, the default duration is used. +- `reason` (Attributes) Reason defines settings for the reason for the access provided by the user. (see [below for nested schema](#nested-schema-for-specdenyrequestreason)) - `roles` (List of String) Roles is the name of roles which will match the request rule. - `search_as_roles` (List of String) SearchAsRoles is a list of extra roles which should apply to a user while they are searching for resources as part of a Resource Access Request, and defines the underlying roles which will be requested as part of any Resource Access Request. - `suggested_reviewers` (List of String) SuggestedReviewers is a list of reviewer suggestions. These can be teleport usernames, but that is not a requirement. @@ -397,6 +406,13 @@ Optional: - `kind` (String) kind specifies the Kubernetes Resource type. +### Nested Schema for `spec.deny.request.reason` + +Optional: + +- `mode` (String) Mode can be either "required" or "optional". Empty string is treated as "optional". If a role has the request reason mode set to "required", then reason is required for all Access Requests requesting roles or resources allowed by this role. It applies only to users who have this role assigned. + + ### Nested Schema for `spec.deny.request.thresholds` Optional: diff --git a/e b/e index 34d99edff3320..b4bb763b45204 160000 --- a/e +++ b/e @@ -1 +1 @@ -Subproject commit 34d99edff3320b09cbcf89c2add57da3899d48be +Subproject commit b4bb763b4520494f929e2997c07ca3e93f45f0b0 diff --git a/e_imports.go b/e_imports.go index 5b7f5d9f3ccfa..32eb84c7ff814 100644 --- a/e_imports.go +++ b/e_imports.go @@ -76,6 +76,7 @@ import ( _ "github.com/elimity-com/scim/schema" _ "github.com/ghodss/yaml" _ "github.com/go-jose/go-jose/v3" + _ "github.com/go-jose/go-jose/v3/json" _ "github.com/go-piv/piv-go/piv" _ "github.com/gogo/protobuf/proto" _ "github.com/google/go-attestation/attest" @@ -156,6 +157,7 @@ import ( _ "gopkg.in/check.v1" _ "k8s.io/apimachinery/pkg/util/yaml" + _ "github.com/gravitational/teleport/api" _ "github.com/gravitational/teleport/api/accessrequest" _ "github.com/gravitational/teleport/api/breaker" _ "github.com/gravitational/teleport/api/client" @@ -173,6 +175,7 @@ import ( _ "github.com/gravitational/teleport/api/gen/proto/go/teleport/devicetrust/v1" _ "github.com/gravitational/teleport/api/gen/proto/go/teleport/externalauditstorage/v1" _ "github.com/gravitational/teleport/api/gen/proto/go/teleport/header/v1" + _ "github.com/gravitational/teleport/api/gen/proto/go/teleport/identitycenter/v1" _ "github.com/gravitational/teleport/api/gen/proto/go/teleport/label/v1" _ "github.com/gravitational/teleport/api/gen/proto/go/teleport/loginrule/v1" _ "github.com/gravitational/teleport/api/gen/proto/go/teleport/mfa/v1" @@ -203,6 +206,7 @@ import ( _ "github.com/gravitational/teleport/api/types/secreports" _ "github.com/gravitational/teleport/api/types/secreports/convert/v1" _ "github.com/gravitational/teleport/api/types/trait" + _ "github.com/gravitational/teleport/api/types/trait/convert/v1" _ "github.com/gravitational/teleport/api/types/userloginstate" _ "github.com/gravitational/teleport/api/types/wrappers" _ "github.com/gravitational/teleport/api/utils" 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 154e0d49c17f5..469e5ec97db65 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 1e47d2f9651f3..83dbf98c0fdb0 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/charts/teleport-operator/operator-crds/resources.teleport.dev_provisiontokens.yaml b/examples/chart/teleport-cluster/charts/teleport-operator/operator-crds/resources.teleport.dev_provisiontokens.yaml index 462856edb980a..e42dc48675faa 100644 --- a/examples/chart/teleport-cluster/charts/teleport-operator/operator-crds/resources.teleport.dev_provisiontokens.yaml +++ b/examples/chart/teleport-cluster/charts/teleport-operator/operator-crds/resources.teleport.dev_provisiontokens.yaml @@ -102,6 +102,40 @@ spec: nullable: true type: array type: object + bitbucket: + description: Bitbucket allows the configuration of options specific + to the "bitbucket" join method. + nullable: true + properties: + allow: + description: Allow is a list of Rules, nodes using this token + must match one allow rule to use this token. + items: + properties: + branch_name: + type: string + deployment_environment_uuid: + type: string + repository_uuid: + type: string + workspace_uuid: + type: string + type: object + nullable: true + type: array + audience: + description: Audience is a Bitbucket-specified audience value + for this token. It is unique to each Bitbucket repository, and + must be set to the value as written in the Pipelines -> OpenID + Connect section of the repository settings. + type: string + identity_provider_url: + description: IdentityProviderURL is a Bitbucket-specified issuer + URL for incoming OIDC tokens. It is unique to each Bitbucket + repository, and must be set to the value as written in the Pipelines + -> OpenID Connect section of the repository settings. + type: string + type: object bot_name: description: BotName is the name of the bot this token grants access to, if any diff --git a/examples/chart/teleport-cluster/charts/teleport-operator/operator-crds/resources.teleport.dev_roles.yaml b/examples/chart/teleport-cluster/charts/teleport-operator/operator-crds/resources.teleport.dev_roles.yaml index c333c44eb2d33..6f45a69d0cd2f 100644 --- a/examples/chart/teleport-cluster/charts/teleport-operator/operator-crds/resources.teleport.dev_roles.yaml +++ b/examples/chart/teleport-cluster/charts/teleport-operator/operator-crds/resources.teleport.dev_roles.yaml @@ -357,6 +357,20 @@ spec: is used. format: duration type: string + reason: + description: Reason defines settings for the reason for the + access provided by the user. + nullable: true + properties: + mode: + description: Mode can be either "required" or "optional". + Empty string is treated as "optional". If a role has + the request reason mode set to "required", then reason + is required for all Access Requests requesting roles + or resources allowed by this role. It applies only to + users who have this role assigned. + type: string + type: object roles: description: Roles is the name of roles which will match the request rule. @@ -908,6 +922,20 @@ spec: is used. format: duration type: string + reason: + description: Reason defines settings for the reason for the + access provided by the user. + nullable: true + properties: + mode: + description: Mode can be either "required" or "optional". + Empty string is treated as "optional". If a role has + the request reason mode set to "required", then reason + is required for all Access Requests requesting roles + or resources allowed by this role. It applies only to + users who have this role assigned. + type: string + type: object roles: description: Roles is the name of roles which will match the request rule. @@ -1738,6 +1766,20 @@ spec: is used. format: duration type: string + reason: + description: Reason defines settings for the reason for the + access provided by the user. + nullable: true + properties: + mode: + description: Mode can be either "required" or "optional". + Empty string is treated as "optional". If a role has + the request reason mode set to "required", then reason + is required for all Access Requests requesting roles + or resources allowed by this role. It applies only to + users who have this role assigned. + type: string + type: object roles: description: Roles is the name of roles which will match the request rule. @@ -2289,6 +2331,20 @@ spec: is used. format: duration type: string + reason: + description: Reason defines settings for the reason for the + access provided by the user. + nullable: true + properties: + mode: + description: Mode can be either "required" or "optional". + Empty string is treated as "optional". If a role has + the request reason mode set to "required", then reason + is required for all Access Requests requesting roles + or resources allowed by this role. It applies only to + users who have this role assigned. + type: string + type: object roles: description: Roles is the name of roles which will match the request rule. diff --git a/examples/chart/teleport-cluster/charts/teleport-operator/operator-crds/resources.teleport.dev_rolesv6.yaml b/examples/chart/teleport-cluster/charts/teleport-operator/operator-crds/resources.teleport.dev_rolesv6.yaml index d8825c525df6d..d3f56242f7c49 100644 --- a/examples/chart/teleport-cluster/charts/teleport-operator/operator-crds/resources.teleport.dev_rolesv6.yaml +++ b/examples/chart/teleport-cluster/charts/teleport-operator/operator-crds/resources.teleport.dev_rolesv6.yaml @@ -360,6 +360,20 @@ spec: is used. format: duration type: string + reason: + description: Reason defines settings for the reason for the + access provided by the user. + nullable: true + properties: + mode: + description: Mode can be either "required" or "optional". + Empty string is treated as "optional". If a role has + the request reason mode set to "required", then reason + is required for all Access Requests requesting roles + or resources allowed by this role. It applies only to + users who have this role assigned. + type: string + type: object roles: description: Roles is the name of roles which will match the request rule. @@ -911,6 +925,20 @@ spec: is used. format: duration type: string + reason: + description: Reason defines settings for the reason for the + access provided by the user. + nullable: true + properties: + mode: + description: Mode can be either "required" or "optional". + Empty string is treated as "optional". If a role has + the request reason mode set to "required", then reason + is required for all Access Requests requesting roles + or resources allowed by this role. It applies only to + users who have this role assigned. + type: string + type: object roles: description: Roles is the name of roles which will match the request rule. diff --git a/examples/chart/teleport-cluster/charts/teleport-operator/operator-crds/resources.teleport.dev_rolesv7.yaml b/examples/chart/teleport-cluster/charts/teleport-operator/operator-crds/resources.teleport.dev_rolesv7.yaml index 85a0961a5a617..059d8711dd2ef 100644 --- a/examples/chart/teleport-cluster/charts/teleport-operator/operator-crds/resources.teleport.dev_rolesv7.yaml +++ b/examples/chart/teleport-cluster/charts/teleport-operator/operator-crds/resources.teleport.dev_rolesv7.yaml @@ -360,6 +360,20 @@ spec: is used. format: duration type: string + reason: + description: Reason defines settings for the reason for the + access provided by the user. + nullable: true + properties: + mode: + description: Mode can be either "required" or "optional". + Empty string is treated as "optional". If a role has + the request reason mode set to "required", then reason + is required for all Access Requests requesting roles + or resources allowed by this role. It applies only to + users who have this role assigned. + type: string + type: object roles: description: Roles is the name of roles which will match the request rule. @@ -911,6 +925,20 @@ spec: is used. format: duration type: string + reason: + description: Reason defines settings for the reason for the + access provided by the user. + nullable: true + properties: + mode: + description: Mode can be either "required" or "optional". + Empty string is treated as "optional". If a role has + the request reason mode set to "required", then reason + is required for all Access Requests requesting roles + or resources allowed by this role. It applies only to + users who have this role assigned. + type: string + type: object roles: description: Roles is the name of roles which will match the request rule. diff --git a/examples/chart/teleport-cluster/charts/teleport-operator/templates/role.yaml b/examples/chart/teleport-cluster/charts/teleport-operator/templates/role.yaml index fd0a7d00ed45d..25b8c72416dc6 100644 --- a/examples/chart/teleport-cluster/charts/teleport-operator/templates/role.yaml +++ b/examples/chart/teleport-cluster/charts/teleport-operator/templates/role.yaml @@ -66,5 +66,6 @@ rules: verbs: - "get" - "list" + - "watch" {{- end -}} {{- end -}} diff --git a/examples/chart/teleport-cluster/charts/teleport-operator/tests/role_test.yaml b/examples/chart/teleport-cluster/charts/teleport-operator/tests/role_test.yaml index 0ec8b59e6dc00..4ae5d4b9c3ce5 100644 --- a/examples/chart/teleport-cluster/charts/teleport-operator/tests/role_test.yaml +++ b/examples/chart/teleport-cluster/charts/teleport-operator/tests/role_test.yaml @@ -49,4 +49,4 @@ tests: content: apiGroups: [""] resources: ["secrets"] - verbs: ["get", "list"] \ No newline at end of file + verbs: ["get", "list", "watch"] \ No newline at end of file diff --git a/examples/chart/teleport-cluster/values.yaml b/examples/chart/teleport-cluster/values.yaml index ff6514d8f165b..eba1e7c370a08 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 16b0be2004012..1338f741bad08 100644 --- a/examples/chart/teleport-kube-agent/README.md +++ b/examples/chart/teleport-kube-agent/README.md @@ -13,14 +13,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 supproted join methods and creating tokens. ## Combining roles diff --git a/examples/dynamoathenamigration/migration_test.go b/examples/dynamoathenamigration/migration_test.go index 1b682cca53e29..40aca246a9b43 100644 --- a/examples/dynamoathenamigration/migration_test.go +++ b/examples/dynamoathenamigration/migration_test.go @@ -22,7 +22,7 @@ import ( "errors" "fmt" "io" - "math/rand" + "math/rand/v2" "os" "path/filepath" "sort" @@ -39,6 +39,7 @@ import ( apievents "github.com/gravitational/teleport/api/types/events" "github.com/gravitational/teleport/api/utils/prompt" + "github.com/gravitational/teleport/api/utils/retryutils" "github.com/gravitational/teleport/lib/utils" ) @@ -190,7 +191,7 @@ func (m *mockEmitter) EmitAuditEvent(ctx context.Context, in apievents.AuditEven // Without it, in rare cases after 50 events still some worker were not able // to read message because of other processing it immediately. select { - case <-time.After(time.Duration(rand.Intn(50)+50) * time.Microsecond): + case <-time.After(retryutils.HalfJitter(100 * time.Microsecond)): return nil case <-ctx.Done(): return ctx.Err() @@ -695,8 +696,6 @@ func generateExportFilesFromLines(t *testing.T, lines []string) (file *os.File, } func generateExportFileOfSize(t *testing.T, wantSize int, minDate, maxDate string) (*os.File, int) { - rnd := rand.New(rand.NewSource(time.Now().UnixNano())) - f, err := os.CreateTemp(t.TempDir(), "*") require.NoError(t, err) require.NoError(t, err) @@ -705,7 +704,7 @@ func generateExportFileOfSize(t *testing.T, wantSize int, minDate, maxDate strin var noOfEvents, size int for size < wantSize { noOfEvents++ - line := eventLineFromTime(randomTime(t, minDate, maxDate, rnd).Format(time.DateOnly)) + line := eventLineFromTime(randomTime(t, minDate, maxDate).Format(time.DateOnly)) size += len(line) _, err = zw.Write([]byte(line + "\n")) require.NoError(t, err) @@ -717,16 +716,12 @@ func generateExportFileOfSize(t *testing.T, wantSize int, minDate, maxDate strin return f, noOfEvents } -func randomTime(t *testing.T, minStr, maxStr string, rnd *rand.Rand) time.Time { +func randomTime(t *testing.T, minStr, maxStr string) time.Time { min, err := time.Parse(time.DateOnly, minStr) require.NoError(t, err) max, err := time.Parse(time.DateOnly, maxStr) require.NoError(t, err) - minUnix := min.Unix() - maxUnix := max.Unix() - delta := maxUnix - minUnix - sec := rnd.Int63n(delta) + minUnix - return time.Unix(sec, 0) + return min.Add(rand.N(max.Sub(min))) } func eventLineFromTime(eventTime string) string { diff --git a/examples/teleport-usage/main.go b/examples/teleport-usage/main.go index c58fbac748e0f..0e9a12a5720d3 100644 --- a/examples/teleport-usage/main.go +++ b/examples/teleport-usage/main.go @@ -22,7 +22,7 @@ import ( "fmt" "log" "math" - "math/rand" + "math/rand/v2" "os" "reflect" "strconv" @@ -334,7 +334,7 @@ func (a *adaptiveRateLimiter) wait(permits float64) { durationToWait := time.Duration(permits / a.permitCapacity * float64(time.Second)) time.Sleep(durationToWait) - if rand.Intn(10) == 0 { + if rand.N(10) == 0 { a.adjustUp() } } diff --git a/integrations/event-handler/go.mod b/integrations/event-handler/go.mod index 91616c67c475f..cc7bc1e7ded82 100644 --- a/integrations/event-handler/go.mod +++ b/integrations/event-handler/go.mod @@ -108,6 +108,7 @@ require ( github.com/containerd/errdefs v0.1.0 // indirect github.com/containerd/log v0.1.0 // indirect github.com/coreos/go-oidc v2.2.1+incompatible // indirect + github.com/coreos/go-oidc/v3 v3.11.0 // indirect github.com/coreos/go-semver v0.3.1 // indirect github.com/coreos/pkg v0.0.0-20220810130054-c7d1c02cb6cf // indirect github.com/crewjam/httperr v0.2.0 // indirect diff --git a/integrations/event-handler/go.sum b/integrations/event-handler/go.sum index d3e24c73cb343..c4e6782cb069a 100644 --- a/integrations/event-handler/go.sum +++ b/integrations/event-handler/go.sum @@ -863,6 +863,8 @@ github.com/containerd/errdefs v0.1.0 h1:m0wCRBiu1WJT/Fr+iOoQHMQS/eP5myQ8lCv4Dz5Z github.com/containerd/errdefs v0.1.0/go.mod h1:YgWiiHtLmSeBrvpw+UfPijzbLaB77mEG1WwJTDETIV0= github.com/containerd/log v0.1.0 h1:TCJt7ioM2cr/tfR8GPbGf9/VRAX8D2B4PjzCpfX540I= github.com/containerd/log v0.1.0/go.mod h1:VRRf09a7mHDIRezVKTRCrOq78v577GXq3bSa3EhrzVo= +github.com/coreos/go-oidc/v3 v3.11.0 h1:Ia3MxdwpSw702YW0xgfmP1GVCMA9aEFWu12XUZ3/OtI= +github.com/coreos/go-oidc/v3 v3.11.0/go.mod h1:gE3LgjOgFoHi9a4ce4/tJczr0Ai2/BoDhf0r5lltWI0= github.com/coreos/go-semver v0.3.1 h1:yi21YpKnrx1gt5R+la8n5WgS0kCrsPp33dmEyHReZr4= github.com/coreos/go-semver v0.3.1/go.mod h1:irMmmIw/7yzSRPWryHsK7EYSg09caPQL03VsM8rvUec= github.com/coreos/pkg v0.0.0-20220810130054-c7d1c02cb6cf h1:GOPo6vn/vTN+3IwZBvXX0y5doJfSC7My0cdzelyOCsQ= diff --git a/integrations/lib/backoff/backoff.go b/integrations/lib/backoff/backoff.go index 92ad845626308..e563486879f55 100644 --- a/integrations/lib/backoff/backoff.go +++ b/integrations/lib/backoff/backoff.go @@ -20,7 +20,7 @@ package backoff import ( "context" - "math/rand" + "math/rand/v2" "time" "github.com/gravitational/trace" @@ -58,7 +58,7 @@ func NewDecorrWithMul(base, cap time.Duration, mul int64, clock clockwork.Clock) } func (backoff *decorr) Do(ctx context.Context) error { - backoff.sleep = backoff.base + rand.Int63n(backoff.sleep*backoff.mul-backoff.base) + backoff.sleep = backoff.base + rand.N(backoff.sleep*backoff.mul-backoff.base) if backoff.sleep > backoff.cap { backoff.sleep = backoff.cap } diff --git a/integrations/operator/config/crd/bases/resources.teleport.dev_provisiontokens.yaml b/integrations/operator/config/crd/bases/resources.teleport.dev_provisiontokens.yaml index 462856edb980a..e42dc48675faa 100644 --- a/integrations/operator/config/crd/bases/resources.teleport.dev_provisiontokens.yaml +++ b/integrations/operator/config/crd/bases/resources.teleport.dev_provisiontokens.yaml @@ -102,6 +102,40 @@ spec: nullable: true type: array type: object + bitbucket: + description: Bitbucket allows the configuration of options specific + to the "bitbucket" join method. + nullable: true + properties: + allow: + description: Allow is a list of Rules, nodes using this token + must match one allow rule to use this token. + items: + properties: + branch_name: + type: string + deployment_environment_uuid: + type: string + repository_uuid: + type: string + workspace_uuid: + type: string + type: object + nullable: true + type: array + audience: + description: Audience is a Bitbucket-specified audience value + for this token. It is unique to each Bitbucket repository, and + must be set to the value as written in the Pipelines -> OpenID + Connect section of the repository settings. + type: string + identity_provider_url: + description: IdentityProviderURL is a Bitbucket-specified issuer + URL for incoming OIDC tokens. It is unique to each Bitbucket + repository, and must be set to the value as written in the Pipelines + -> OpenID Connect section of the repository settings. + type: string + type: object bot_name: description: BotName is the name of the bot this token grants access to, if any diff --git a/integrations/operator/config/crd/bases/resources.teleport.dev_roles.yaml b/integrations/operator/config/crd/bases/resources.teleport.dev_roles.yaml index c333c44eb2d33..6f45a69d0cd2f 100644 --- a/integrations/operator/config/crd/bases/resources.teleport.dev_roles.yaml +++ b/integrations/operator/config/crd/bases/resources.teleport.dev_roles.yaml @@ -357,6 +357,20 @@ spec: is used. format: duration type: string + reason: + description: Reason defines settings for the reason for the + access provided by the user. + nullable: true + properties: + mode: + description: Mode can be either "required" or "optional". + Empty string is treated as "optional". If a role has + the request reason mode set to "required", then reason + is required for all Access Requests requesting roles + or resources allowed by this role. It applies only to + users who have this role assigned. + type: string + type: object roles: description: Roles is the name of roles which will match the request rule. @@ -908,6 +922,20 @@ spec: is used. format: duration type: string + reason: + description: Reason defines settings for the reason for the + access provided by the user. + nullable: true + properties: + mode: + description: Mode can be either "required" or "optional". + Empty string is treated as "optional". If a role has + the request reason mode set to "required", then reason + is required for all Access Requests requesting roles + or resources allowed by this role. It applies only to + users who have this role assigned. + type: string + type: object roles: description: Roles is the name of roles which will match the request rule. @@ -1738,6 +1766,20 @@ spec: is used. format: duration type: string + reason: + description: Reason defines settings for the reason for the + access provided by the user. + nullable: true + properties: + mode: + description: Mode can be either "required" or "optional". + Empty string is treated as "optional". If a role has + the request reason mode set to "required", then reason + is required for all Access Requests requesting roles + or resources allowed by this role. It applies only to + users who have this role assigned. + type: string + type: object roles: description: Roles is the name of roles which will match the request rule. @@ -2289,6 +2331,20 @@ spec: is used. format: duration type: string + reason: + description: Reason defines settings for the reason for the + access provided by the user. + nullable: true + properties: + mode: + description: Mode can be either "required" or "optional". + Empty string is treated as "optional". If a role has + the request reason mode set to "required", then reason + is required for all Access Requests requesting roles + or resources allowed by this role. It applies only to + users who have this role assigned. + type: string + type: object roles: description: Roles is the name of roles which will match the request rule. diff --git a/integrations/operator/config/crd/bases/resources.teleport.dev_rolesv6.yaml b/integrations/operator/config/crd/bases/resources.teleport.dev_rolesv6.yaml index d8825c525df6d..d3f56242f7c49 100644 --- a/integrations/operator/config/crd/bases/resources.teleport.dev_rolesv6.yaml +++ b/integrations/operator/config/crd/bases/resources.teleport.dev_rolesv6.yaml @@ -360,6 +360,20 @@ spec: is used. format: duration type: string + reason: + description: Reason defines settings for the reason for the + access provided by the user. + nullable: true + properties: + mode: + description: Mode can be either "required" or "optional". + Empty string is treated as "optional". If a role has + the request reason mode set to "required", then reason + is required for all Access Requests requesting roles + or resources allowed by this role. It applies only to + users who have this role assigned. + type: string + type: object roles: description: Roles is the name of roles which will match the request rule. @@ -911,6 +925,20 @@ spec: is used. format: duration type: string + reason: + description: Reason defines settings for the reason for the + access provided by the user. + nullable: true + properties: + mode: + description: Mode can be either "required" or "optional". + Empty string is treated as "optional". If a role has + the request reason mode set to "required", then reason + is required for all Access Requests requesting roles + or resources allowed by this role. It applies only to + users who have this role assigned. + type: string + type: object roles: description: Roles is the name of roles which will match the request rule. diff --git a/integrations/operator/config/crd/bases/resources.teleport.dev_rolesv7.yaml b/integrations/operator/config/crd/bases/resources.teleport.dev_rolesv7.yaml index 85a0961a5a617..059d8711dd2ef 100644 --- a/integrations/operator/config/crd/bases/resources.teleport.dev_rolesv7.yaml +++ b/integrations/operator/config/crd/bases/resources.teleport.dev_rolesv7.yaml @@ -360,6 +360,20 @@ spec: is used. format: duration type: string + reason: + description: Reason defines settings for the reason for the + access provided by the user. + nullable: true + properties: + mode: + description: Mode can be either "required" or "optional". + Empty string is treated as "optional". If a role has + the request reason mode set to "required", then reason + is required for all Access Requests requesting roles + or resources allowed by this role. It applies only to + users who have this role assigned. + type: string + type: object roles: description: Roles is the name of roles which will match the request rule. @@ -911,6 +925,20 @@ spec: is used. format: duration type: string + reason: + description: Reason defines settings for the reason for the + access provided by the user. + nullable: true + properties: + mode: + description: Mode can be either "required" or "optional". + Empty string is treated as "optional". If a role has + the request reason mode set to "required", then reason + is required for all Access Requests requesting roles + or resources allowed by this role. It applies only to + users who have this role assigned. + type: string + type: object roles: description: Roles is the name of roles which will match the request rule. diff --git a/integrations/operator/controllers/resources/testlib/env.go b/integrations/operator/controllers/resources/testlib/env.go index 4f35bcff10c60..df04115401b59 100644 --- a/integrations/operator/controllers/resources/testlib/env.go +++ b/integrations/operator/controllers/resources/testlib/env.go @@ -20,7 +20,7 @@ package testlib import ( "context" - "math/rand" + "math/rand/v2" "os" "path/filepath" "runtime" @@ -88,12 +88,11 @@ func deleteNamespaceForTest(t *testing.T, kc kclient.Client, ns *core.Namespace) require.NoError(t, err) } -var letterRunes = []rune("abcdefghijklmnopqrstuvwxyz1234567890") - func ValidRandomResourceName(prefix string) string { - b := make([]rune, 5) + const letters = "abcdefghijklmnopqrstuvwxyz1234567890" + b := make([]byte, 5) for i := range b { - b[i] = letterRunes[rand.Intn(len(letterRunes))] + b[i] = letters[rand.N(len(letters))] } return prefix + string(b) } diff --git a/integrations/terraform/go.mod b/integrations/terraform/go.mod index 66bf1acc0c923..48049fce1daa8 100644 --- a/integrations/terraform/go.mod +++ b/integrations/terraform/go.mod @@ -124,6 +124,7 @@ require ( github.com/containerd/errdefs v0.1.0 // indirect github.com/containerd/log v0.1.0 // indirect github.com/coreos/go-oidc v2.2.1+incompatible // indirect + github.com/coreos/go-oidc/v3 v3.11.0 // indirect github.com/coreos/go-semver v0.3.1 // indirect github.com/coreos/pkg v0.0.0-20220810130054-c7d1c02cb6cf // indirect github.com/crewjam/httperr v0.2.0 // indirect diff --git a/integrations/terraform/go.sum b/integrations/terraform/go.sum index 0d72dfd232e37..c845eb8b042e7 100644 --- a/integrations/terraform/go.sum +++ b/integrations/terraform/go.sum @@ -943,6 +943,8 @@ github.com/containerd/errdefs v0.1.0 h1:m0wCRBiu1WJT/Fr+iOoQHMQS/eP5myQ8lCv4Dz5Z github.com/containerd/errdefs v0.1.0/go.mod h1:YgWiiHtLmSeBrvpw+UfPijzbLaB77mEG1WwJTDETIV0= github.com/containerd/log v0.1.0 h1:TCJt7ioM2cr/tfR8GPbGf9/VRAX8D2B4PjzCpfX540I= github.com/containerd/log v0.1.0/go.mod h1:VRRf09a7mHDIRezVKTRCrOq78v577GXq3bSa3EhrzVo= +github.com/coreos/go-oidc/v3 v3.11.0 h1:Ia3MxdwpSw702YW0xgfmP1GVCMA9aEFWu12XUZ3/OtI= +github.com/coreos/go-oidc/v3 v3.11.0/go.mod h1:gE3LgjOgFoHi9a4ce4/tJczr0Ai2/BoDhf0r5lltWI0= github.com/coreos/go-semver v0.3.1 h1:yi21YpKnrx1gt5R+la8n5WgS0kCrsPp33dmEyHReZr4= github.com/coreos/go-semver v0.3.1/go.mod h1:irMmmIw/7yzSRPWryHsK7EYSg09caPQL03VsM8rvUec= github.com/coreos/go-systemd/v22 v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8iXXhfZs= diff --git a/integrations/terraform/tfschema/token/types_terraform.go b/integrations/terraform/tfschema/token/types_terraform.go index 576da0f47d911..64c3a61f7bc43 100644 --- a/integrations/terraform/tfschema/token/types_terraform.go +++ b/integrations/terraform/tfschema/token/types_terraform.go @@ -159,6 +159,48 @@ func GenSchemaProvisionTokenV2(ctx context.Context) (github_com_hashicorp_terraf Description: "Azure allows the configuration of options specific to the \"azure\" join method.", Optional: true, }, + "bitbucket": { + Attributes: github_com_hashicorp_terraform_plugin_framework_tfsdk.SingleNestedAttributes(map[string]github_com_hashicorp_terraform_plugin_framework_tfsdk.Attribute{ + "allow": { + Attributes: github_com_hashicorp_terraform_plugin_framework_tfsdk.ListNestedAttributes(map[string]github_com_hashicorp_terraform_plugin_framework_tfsdk.Attribute{ + "branch_name": { + Description: "BranchName is the name of the branch on which this pipeline executed.", + Optional: true, + Type: github_com_hashicorp_terraform_plugin_framework_types.StringType, + }, + "deployment_environment_uuid": { + Description: "DeploymentEnvironmentUUID is the UUID of the deployment environment targeted by this pipelines run, if any. These values may be found in the \"Pipelines -> OpenID Connect -> Deployment environments\" section of the repository settings.", + Optional: true, + Type: github_com_hashicorp_terraform_plugin_framework_types.StringType, + }, + "repository_uuid": { + Description: "RepositoryUUID is the UUID of the repository for which this token was issued. Bitbucket UUIDs must begin and end with braces, e.g. `{...}`. This value may be found in the Pipelines -> OpenID Connect section of the repository settings.", + Optional: true, + Type: github_com_hashicorp_terraform_plugin_framework_types.StringType, + }, + "workspace_uuid": { + Description: "WorkspaceUUID is the UUID of the workspace for which this token was issued. Bitbucket UUIDs must begin and end with braces, e.g. `{...}`. This value may be found in the Pipelines -> OpenID Connect section of the repository settings.", + Optional: true, + Type: github_com_hashicorp_terraform_plugin_framework_types.StringType, + }, + }), + Description: "Allow is a list of Rules, nodes using this token must match one allow rule to use this token.", + Optional: true, + }, + "audience": { + Description: "Audience is a Bitbucket-specified audience value for this token. It is unique to each Bitbucket repository, and must be set to the value as written in the Pipelines -> OpenID Connect section of the repository settings.", + Optional: true, + Type: github_com_hashicorp_terraform_plugin_framework_types.StringType, + }, + "identity_provider_url": { + Description: "IdentityProviderURL is a Bitbucket-specified issuer URL for incoming OIDC tokens. It is unique to each Bitbucket repository, and must be set to the value as written in the Pipelines -> OpenID Connect section of the repository settings.", + Optional: true, + Type: github_com_hashicorp_terraform_plugin_framework_types.StringType, + }, + }), + Description: "Bitbucket allows the configuration of options specific to the \"bitbucket\" join method.", + Optional: true, + }, "bot_name": { Description: "BotName is the name of the bot this token grants access to, if any", Optional: true, @@ -2405,6 +2447,155 @@ func CopyProvisionTokenV2FromTerraform(_ context.Context, tf github_com_hashicor } } } + { + a, ok := tf.Attrs["bitbucket"] + if !ok { + diags.Append(attrReadMissingDiag{"ProvisionTokenV2.Spec.Bitbucket"}) + } else { + v, ok := a.(github_com_hashicorp_terraform_plugin_framework_types.Object) + if !ok { + diags.Append(attrReadConversionFailureDiag{"ProvisionTokenV2.Spec.Bitbucket", "github.com/hashicorp/terraform-plugin-framework/types.Object"}) + } else { + obj.Bitbucket = nil + if !v.Null && !v.Unknown { + tf := v + obj.Bitbucket = &github_com_gravitational_teleport_api_types.ProvisionTokenSpecV2Bitbucket{} + obj := obj.Bitbucket + { + a, ok := tf.Attrs["allow"] + if !ok { + diags.Append(attrReadMissingDiag{"ProvisionTokenV2.Spec.Bitbucket.Allow"}) + } else { + v, ok := a.(github_com_hashicorp_terraform_plugin_framework_types.List) + if !ok { + diags.Append(attrReadConversionFailureDiag{"ProvisionTokenV2.Spec.Bitbucket.Allow", "github.com/hashicorp/terraform-plugin-framework/types.List"}) + } else { + obj.Allow = make([]*github_com_gravitational_teleport_api_types.ProvisionTokenSpecV2Bitbucket_Rule, len(v.Elems)) + if !v.Null && !v.Unknown { + for k, a := range v.Elems { + v, ok := a.(github_com_hashicorp_terraform_plugin_framework_types.Object) + if !ok { + diags.Append(attrReadConversionFailureDiag{"ProvisionTokenV2.Spec.Bitbucket.Allow", "github_com_hashicorp_terraform_plugin_framework_types.Object"}) + } else { + var t *github_com_gravitational_teleport_api_types.ProvisionTokenSpecV2Bitbucket_Rule + if !v.Null && !v.Unknown { + tf := v + t = &github_com_gravitational_teleport_api_types.ProvisionTokenSpecV2Bitbucket_Rule{} + obj := t + { + a, ok := tf.Attrs["workspace_uuid"] + if !ok { + diags.Append(attrReadMissingDiag{"ProvisionTokenV2.Spec.Bitbucket.Allow.WorkspaceUUID"}) + } else { + v, ok := a.(github_com_hashicorp_terraform_plugin_framework_types.String) + if !ok { + diags.Append(attrReadConversionFailureDiag{"ProvisionTokenV2.Spec.Bitbucket.Allow.WorkspaceUUID", "github.com/hashicorp/terraform-plugin-framework/types.String"}) + } else { + var t string + if !v.Null && !v.Unknown { + t = string(v.Value) + } + obj.WorkspaceUUID = t + } + } + } + { + a, ok := tf.Attrs["repository_uuid"] + if !ok { + diags.Append(attrReadMissingDiag{"ProvisionTokenV2.Spec.Bitbucket.Allow.RepositoryUUID"}) + } else { + v, ok := a.(github_com_hashicorp_terraform_plugin_framework_types.String) + if !ok { + diags.Append(attrReadConversionFailureDiag{"ProvisionTokenV2.Spec.Bitbucket.Allow.RepositoryUUID", "github.com/hashicorp/terraform-plugin-framework/types.String"}) + } else { + var t string + if !v.Null && !v.Unknown { + t = string(v.Value) + } + obj.RepositoryUUID = t + } + } + } + { + a, ok := tf.Attrs["deployment_environment_uuid"] + if !ok { + diags.Append(attrReadMissingDiag{"ProvisionTokenV2.Spec.Bitbucket.Allow.DeploymentEnvironmentUUID"}) + } else { + v, ok := a.(github_com_hashicorp_terraform_plugin_framework_types.String) + if !ok { + diags.Append(attrReadConversionFailureDiag{"ProvisionTokenV2.Spec.Bitbucket.Allow.DeploymentEnvironmentUUID", "github.com/hashicorp/terraform-plugin-framework/types.String"}) + } else { + var t string + if !v.Null && !v.Unknown { + t = string(v.Value) + } + obj.DeploymentEnvironmentUUID = t + } + } + } + { + a, ok := tf.Attrs["branch_name"] + if !ok { + diags.Append(attrReadMissingDiag{"ProvisionTokenV2.Spec.Bitbucket.Allow.BranchName"}) + } else { + v, ok := a.(github_com_hashicorp_terraform_plugin_framework_types.String) + if !ok { + diags.Append(attrReadConversionFailureDiag{"ProvisionTokenV2.Spec.Bitbucket.Allow.BranchName", "github.com/hashicorp/terraform-plugin-framework/types.String"}) + } else { + var t string + if !v.Null && !v.Unknown { + t = string(v.Value) + } + obj.BranchName = t + } + } + } + } + obj.Allow[k] = t + } + } + } + } + } + } + { + a, ok := tf.Attrs["audience"] + if !ok { + diags.Append(attrReadMissingDiag{"ProvisionTokenV2.Spec.Bitbucket.Audience"}) + } else { + v, ok := a.(github_com_hashicorp_terraform_plugin_framework_types.String) + if !ok { + diags.Append(attrReadConversionFailureDiag{"ProvisionTokenV2.Spec.Bitbucket.Audience", "github.com/hashicorp/terraform-plugin-framework/types.String"}) + } else { + var t string + if !v.Null && !v.Unknown { + t = string(v.Value) + } + obj.Audience = t + } + } + } + { + a, ok := tf.Attrs["identity_provider_url"] + if !ok { + diags.Append(attrReadMissingDiag{"ProvisionTokenV2.Spec.Bitbucket.IdentityProviderURL"}) + } else { + v, ok := a.(github_com_hashicorp_terraform_plugin_framework_types.String) + if !ok { + diags.Append(attrReadConversionFailureDiag{"ProvisionTokenV2.Spec.Bitbucket.IdentityProviderURL", "github.com/hashicorp/terraform-plugin-framework/types.String"}) + } else { + var t string + if !v.Null && !v.Unknown { + t = string(v.Value) + } + obj.IdentityProviderURL = t + } + } + } + } + } + } + } } } } @@ -5244,6 +5435,228 @@ func CopyProvisionTokenV2ToTerraform(ctx context.Context, obj *github_com_gravit } } } + { + a, ok := tf.AttrTypes["bitbucket"] + if !ok { + diags.Append(attrWriteMissingDiag{"ProvisionTokenV2.Spec.Bitbucket"}) + } else { + o, ok := a.(github_com_hashicorp_terraform_plugin_framework_types.ObjectType) + if !ok { + diags.Append(attrWriteConversionFailureDiag{"ProvisionTokenV2.Spec.Bitbucket", "github.com/hashicorp/terraform-plugin-framework/types.ObjectType"}) + } else { + v, ok := tf.Attrs["bitbucket"].(github_com_hashicorp_terraform_plugin_framework_types.Object) + if !ok { + v = github_com_hashicorp_terraform_plugin_framework_types.Object{ + + AttrTypes: o.AttrTypes, + Attrs: make(map[string]github_com_hashicorp_terraform_plugin_framework_attr.Value, len(o.AttrTypes)), + } + } else { + if v.Attrs == nil { + v.Attrs = make(map[string]github_com_hashicorp_terraform_plugin_framework_attr.Value, len(tf.AttrTypes)) + } + } + if obj.Bitbucket == nil { + v.Null = true + } else { + obj := obj.Bitbucket + tf := &v + { + a, ok := tf.AttrTypes["allow"] + if !ok { + diags.Append(attrWriteMissingDiag{"ProvisionTokenV2.Spec.Bitbucket.Allow"}) + } else { + o, ok := a.(github_com_hashicorp_terraform_plugin_framework_types.ListType) + if !ok { + diags.Append(attrWriteConversionFailureDiag{"ProvisionTokenV2.Spec.Bitbucket.Allow", "github.com/hashicorp/terraform-plugin-framework/types.ListType"}) + } else { + c, ok := tf.Attrs["allow"].(github_com_hashicorp_terraform_plugin_framework_types.List) + if !ok { + c = github_com_hashicorp_terraform_plugin_framework_types.List{ + + ElemType: o.ElemType, + Elems: make([]github_com_hashicorp_terraform_plugin_framework_attr.Value, len(obj.Allow)), + Null: true, + } + } else { + if c.Elems == nil { + c.Elems = make([]github_com_hashicorp_terraform_plugin_framework_attr.Value, len(obj.Allow)) + } + } + if obj.Allow != nil { + o := o.ElemType.(github_com_hashicorp_terraform_plugin_framework_types.ObjectType) + if len(obj.Allow) != len(c.Elems) { + c.Elems = make([]github_com_hashicorp_terraform_plugin_framework_attr.Value, len(obj.Allow)) + } + for k, a := range obj.Allow { + v, ok := tf.Attrs["allow"].(github_com_hashicorp_terraform_plugin_framework_types.Object) + if !ok { + v = github_com_hashicorp_terraform_plugin_framework_types.Object{ + + AttrTypes: o.AttrTypes, + Attrs: make(map[string]github_com_hashicorp_terraform_plugin_framework_attr.Value, len(o.AttrTypes)), + } + } else { + if v.Attrs == nil { + v.Attrs = make(map[string]github_com_hashicorp_terraform_plugin_framework_attr.Value, len(tf.AttrTypes)) + } + } + if a == nil { + v.Null = true + } else { + obj := a + tf := &v + { + t, ok := tf.AttrTypes["workspace_uuid"] + if !ok { + diags.Append(attrWriteMissingDiag{"ProvisionTokenV2.Spec.Bitbucket.Allow.WorkspaceUUID"}) + } else { + v, ok := tf.Attrs["workspace_uuid"].(github_com_hashicorp_terraform_plugin_framework_types.String) + if !ok { + i, err := t.ValueFromTerraform(ctx, github_com_hashicorp_terraform_plugin_go_tftypes.NewValue(t.TerraformType(ctx), nil)) + if err != nil { + diags.Append(attrWriteGeneralError{"ProvisionTokenV2.Spec.Bitbucket.Allow.WorkspaceUUID", err}) + } + v, ok = i.(github_com_hashicorp_terraform_plugin_framework_types.String) + if !ok { + diags.Append(attrWriteConversionFailureDiag{"ProvisionTokenV2.Spec.Bitbucket.Allow.WorkspaceUUID", "github.com/hashicorp/terraform-plugin-framework/types.String"}) + } + v.Null = string(obj.WorkspaceUUID) == "" + } + v.Value = string(obj.WorkspaceUUID) + v.Unknown = false + tf.Attrs["workspace_uuid"] = v + } + } + { + t, ok := tf.AttrTypes["repository_uuid"] + if !ok { + diags.Append(attrWriteMissingDiag{"ProvisionTokenV2.Spec.Bitbucket.Allow.RepositoryUUID"}) + } else { + v, ok := tf.Attrs["repository_uuid"].(github_com_hashicorp_terraform_plugin_framework_types.String) + if !ok { + i, err := t.ValueFromTerraform(ctx, github_com_hashicorp_terraform_plugin_go_tftypes.NewValue(t.TerraformType(ctx), nil)) + if err != nil { + diags.Append(attrWriteGeneralError{"ProvisionTokenV2.Spec.Bitbucket.Allow.RepositoryUUID", err}) + } + v, ok = i.(github_com_hashicorp_terraform_plugin_framework_types.String) + if !ok { + diags.Append(attrWriteConversionFailureDiag{"ProvisionTokenV2.Spec.Bitbucket.Allow.RepositoryUUID", "github.com/hashicorp/terraform-plugin-framework/types.String"}) + } + v.Null = string(obj.RepositoryUUID) == "" + } + v.Value = string(obj.RepositoryUUID) + v.Unknown = false + tf.Attrs["repository_uuid"] = v + } + } + { + t, ok := tf.AttrTypes["deployment_environment_uuid"] + if !ok { + diags.Append(attrWriteMissingDiag{"ProvisionTokenV2.Spec.Bitbucket.Allow.DeploymentEnvironmentUUID"}) + } else { + v, ok := tf.Attrs["deployment_environment_uuid"].(github_com_hashicorp_terraform_plugin_framework_types.String) + if !ok { + i, err := t.ValueFromTerraform(ctx, github_com_hashicorp_terraform_plugin_go_tftypes.NewValue(t.TerraformType(ctx), nil)) + if err != nil { + diags.Append(attrWriteGeneralError{"ProvisionTokenV2.Spec.Bitbucket.Allow.DeploymentEnvironmentUUID", err}) + } + v, ok = i.(github_com_hashicorp_terraform_plugin_framework_types.String) + if !ok { + diags.Append(attrWriteConversionFailureDiag{"ProvisionTokenV2.Spec.Bitbucket.Allow.DeploymentEnvironmentUUID", "github.com/hashicorp/terraform-plugin-framework/types.String"}) + } + v.Null = string(obj.DeploymentEnvironmentUUID) == "" + } + v.Value = string(obj.DeploymentEnvironmentUUID) + v.Unknown = false + tf.Attrs["deployment_environment_uuid"] = v + } + } + { + t, ok := tf.AttrTypes["branch_name"] + if !ok { + diags.Append(attrWriteMissingDiag{"ProvisionTokenV2.Spec.Bitbucket.Allow.BranchName"}) + } else { + v, ok := tf.Attrs["branch_name"].(github_com_hashicorp_terraform_plugin_framework_types.String) + if !ok { + i, err := t.ValueFromTerraform(ctx, github_com_hashicorp_terraform_plugin_go_tftypes.NewValue(t.TerraformType(ctx), nil)) + if err != nil { + diags.Append(attrWriteGeneralError{"ProvisionTokenV2.Spec.Bitbucket.Allow.BranchName", err}) + } + v, ok = i.(github_com_hashicorp_terraform_plugin_framework_types.String) + if !ok { + diags.Append(attrWriteConversionFailureDiag{"ProvisionTokenV2.Spec.Bitbucket.Allow.BranchName", "github.com/hashicorp/terraform-plugin-framework/types.String"}) + } + v.Null = string(obj.BranchName) == "" + } + v.Value = string(obj.BranchName) + v.Unknown = false + tf.Attrs["branch_name"] = v + } + } + } + v.Unknown = false + c.Elems[k] = v + } + if len(obj.Allow) > 0 { + c.Null = false + } + } + c.Unknown = false + tf.Attrs["allow"] = c + } + } + } + { + t, ok := tf.AttrTypes["audience"] + if !ok { + diags.Append(attrWriteMissingDiag{"ProvisionTokenV2.Spec.Bitbucket.Audience"}) + } else { + v, ok := tf.Attrs["audience"].(github_com_hashicorp_terraform_plugin_framework_types.String) + if !ok { + i, err := t.ValueFromTerraform(ctx, github_com_hashicorp_terraform_plugin_go_tftypes.NewValue(t.TerraformType(ctx), nil)) + if err != nil { + diags.Append(attrWriteGeneralError{"ProvisionTokenV2.Spec.Bitbucket.Audience", err}) + } + v, ok = i.(github_com_hashicorp_terraform_plugin_framework_types.String) + if !ok { + diags.Append(attrWriteConversionFailureDiag{"ProvisionTokenV2.Spec.Bitbucket.Audience", "github.com/hashicorp/terraform-plugin-framework/types.String"}) + } + v.Null = string(obj.Audience) == "" + } + v.Value = string(obj.Audience) + v.Unknown = false + tf.Attrs["audience"] = v + } + } + { + t, ok := tf.AttrTypes["identity_provider_url"] + if !ok { + diags.Append(attrWriteMissingDiag{"ProvisionTokenV2.Spec.Bitbucket.IdentityProviderURL"}) + } else { + v, ok := tf.Attrs["identity_provider_url"].(github_com_hashicorp_terraform_plugin_framework_types.String) + if !ok { + i, err := t.ValueFromTerraform(ctx, github_com_hashicorp_terraform_plugin_go_tftypes.NewValue(t.TerraformType(ctx), nil)) + if err != nil { + diags.Append(attrWriteGeneralError{"ProvisionTokenV2.Spec.Bitbucket.IdentityProviderURL", err}) + } + v, ok = i.(github_com_hashicorp_terraform_plugin_framework_types.String) + if !ok { + diags.Append(attrWriteConversionFailureDiag{"ProvisionTokenV2.Spec.Bitbucket.IdentityProviderURL", "github.com/hashicorp/terraform-plugin-framework/types.String"}) + } + v.Null = string(obj.IdentityProviderURL) == "" + } + v.Value = string(obj.IdentityProviderURL) + v.Unknown = false + tf.Attrs["identity_provider_url"] = v + } + } + } + v.Unknown = false + tf.Attrs["bitbucket"] = v + } + } + } } v.Unknown = false tf.Attrs["spec"] = v diff --git a/integrations/terraform/tfschema/types_terraform.go b/integrations/terraform/tfschema/types_terraform.go index 822f6396a24f0..78ec772d30e2e 100644 --- a/integrations/terraform/tfschema/types_terraform.go +++ b/integrations/terraform/tfschema/types_terraform.go @@ -898,6 +898,33 @@ func GenSchemaAppV3(ctx context.Context) (github_com_hashicorp_terraform_plugin_ Description: "DynamicLabels are the app's command labels.", Optional: true, }, + "identity_center": { + Attributes: github_com_hashicorp_terraform_plugin_framework_tfsdk.SingleNestedAttributes(map[string]github_com_hashicorp_terraform_plugin_framework_tfsdk.Attribute{ + "account_id": { + Description: "Account ID is the AWS-assigned ID of the account", + Optional: true, + Type: github_com_hashicorp_terraform_plugin_framework_types.StringType, + }, + "permission_sets": { + Attributes: github_com_hashicorp_terraform_plugin_framework_tfsdk.ListNestedAttributes(map[string]github_com_hashicorp_terraform_plugin_framework_tfsdk.Attribute{ + "arn": { + Description: "ARN is the fully-formed ARN of the Permission Set.", + Optional: true, + Type: github_com_hashicorp_terraform_plugin_framework_types.StringType, + }, + "name": { + Description: "Name is the human-readable name of the Permission Set.", + Optional: true, + Type: github_com_hashicorp_terraform_plugin_framework_types.StringType, + }, + }), + Description: "PermissionSets lists the available permission sets on the given account", + Optional: true, + }, + }), + Description: "IdentityCenter encasulates AWS identity-center specific information. Only valid for Identity Center account apps.", + Optional: true, + }, "insecure_skip_verify": { Description: "InsecureSkipVerify disables app's TLS certificate verification.", Optional: true, @@ -1809,6 +1836,15 @@ func GenSchemaRoleV6(ctx context.Context) (github_com_hashicorp_terraform_plugin Optional: true, Type: DurationType{}, }, + "reason": { + Attributes: github_com_hashicorp_terraform_plugin_framework_tfsdk.SingleNestedAttributes(map[string]github_com_hashicorp_terraform_plugin_framework_tfsdk.Attribute{"mode": { + Description: "Mode can be either \"required\" or \"optional\". Empty string is treated as \"optional\". If a role has the request reason mode set to \"required\", then reason is required for all Access Requests requesting roles or resources allowed by this role. It applies only to users who have this role assigned.", + Optional: true, + Type: github_com_hashicorp_terraform_plugin_framework_types.StringType, + }}), + Description: "Reason defines settings for the reason for the access provided by the user.", + Optional: true, + }, "roles": { Description: "Roles is the name of roles which will match the request rule.", Optional: true, @@ -2267,6 +2303,15 @@ func GenSchemaRoleV6(ctx context.Context) (github_com_hashicorp_terraform_plugin Optional: true, Type: DurationType{}, }, + "reason": { + Attributes: github_com_hashicorp_terraform_plugin_framework_tfsdk.SingleNestedAttributes(map[string]github_com_hashicorp_terraform_plugin_framework_tfsdk.Attribute{"mode": { + Description: "Mode can be either \"required\" or \"optional\". Empty string is treated as \"optional\". If a role has the request reason mode set to \"required\", then reason is required for all Access Requests requesting roles or resources allowed by this role. It applies only to users who have this role assigned.", + Optional: true, + Type: github_com_hashicorp_terraform_plugin_framework_types.StringType, + }}), + Description: "Reason defines settings for the reason for the access provided by the user.", + Optional: true, + }, "roles": { Description: "Roles is the name of roles which will match the request rule.", Optional: true, @@ -10599,6 +10644,104 @@ func CopyAppV3FromTerraform(_ context.Context, tf github_com_hashicorp_terraform } } } + { + a, ok := tf.Attrs["identity_center"] + if !ok { + diags.Append(attrReadMissingDiag{"AppV3.Spec.IdentityCenter"}) + } else { + v, ok := a.(github_com_hashicorp_terraform_plugin_framework_types.Object) + if !ok { + diags.Append(attrReadConversionFailureDiag{"AppV3.Spec.IdentityCenter", "github.com/hashicorp/terraform-plugin-framework/types.Object"}) + } else { + obj.IdentityCenter = nil + if !v.Null && !v.Unknown { + tf := v + obj.IdentityCenter = &github_com_gravitational_teleport_api_types.AppIdentityCenter{} + obj := obj.IdentityCenter + { + a, ok := tf.Attrs["account_id"] + if !ok { + diags.Append(attrReadMissingDiag{"AppV3.Spec.IdentityCenter.AccountID"}) + } else { + v, ok := a.(github_com_hashicorp_terraform_plugin_framework_types.String) + if !ok { + diags.Append(attrReadConversionFailureDiag{"AppV3.Spec.IdentityCenter.AccountID", "github.com/hashicorp/terraform-plugin-framework/types.String"}) + } else { + var t string + if !v.Null && !v.Unknown { + t = string(v.Value) + } + obj.AccountID = t + } + } + } + { + a, ok := tf.Attrs["permission_sets"] + if !ok { + diags.Append(attrReadMissingDiag{"AppV3.Spec.IdentityCenter.PermissionSets"}) + } else { + v, ok := a.(github_com_hashicorp_terraform_plugin_framework_types.List) + if !ok { + diags.Append(attrReadConversionFailureDiag{"AppV3.Spec.IdentityCenter.PermissionSets", "github.com/hashicorp/terraform-plugin-framework/types.List"}) + } else { + obj.PermissionSets = make([]*github_com_gravitational_teleport_api_types.IdentityCenterPermissionSet, len(v.Elems)) + if !v.Null && !v.Unknown { + for k, a := range v.Elems { + v, ok := a.(github_com_hashicorp_terraform_plugin_framework_types.Object) + if !ok { + diags.Append(attrReadConversionFailureDiag{"AppV3.Spec.IdentityCenter.PermissionSets", "github_com_hashicorp_terraform_plugin_framework_types.Object"}) + } else { + var t *github_com_gravitational_teleport_api_types.IdentityCenterPermissionSet + if !v.Null && !v.Unknown { + tf := v + t = &github_com_gravitational_teleport_api_types.IdentityCenterPermissionSet{} + obj := t + { + a, ok := tf.Attrs["arn"] + if !ok { + diags.Append(attrReadMissingDiag{"AppV3.Spec.IdentityCenter.PermissionSets.ARN"}) + } else { + v, ok := a.(github_com_hashicorp_terraform_plugin_framework_types.String) + if !ok { + diags.Append(attrReadConversionFailureDiag{"AppV3.Spec.IdentityCenter.PermissionSets.ARN", "github.com/hashicorp/terraform-plugin-framework/types.String"}) + } else { + var t string + if !v.Null && !v.Unknown { + t = string(v.Value) + } + obj.ARN = t + } + } + } + { + a, ok := tf.Attrs["name"] + if !ok { + diags.Append(attrReadMissingDiag{"AppV3.Spec.IdentityCenter.PermissionSets.Name"}) + } else { + v, ok := a.(github_com_hashicorp_terraform_plugin_framework_types.String) + if !ok { + diags.Append(attrReadConversionFailureDiag{"AppV3.Spec.IdentityCenter.PermissionSets.Name", "github.com/hashicorp/terraform-plugin-framework/types.String"}) + } else { + var t string + if !v.Null && !v.Unknown { + t = string(v.Value) + } + obj.Name = t + } + } + } + } + obj.PermissionSets[k] = t + } + } + } + } + } + } + } + } + } + } } } } @@ -11816,6 +11959,162 @@ func CopyAppV3ToTerraform(ctx context.Context, obj *github_com_gravitational_tel } } } + { + a, ok := tf.AttrTypes["identity_center"] + if !ok { + diags.Append(attrWriteMissingDiag{"AppV3.Spec.IdentityCenter"}) + } else { + o, ok := a.(github_com_hashicorp_terraform_plugin_framework_types.ObjectType) + if !ok { + diags.Append(attrWriteConversionFailureDiag{"AppV3.Spec.IdentityCenter", "github.com/hashicorp/terraform-plugin-framework/types.ObjectType"}) + } else { + v, ok := tf.Attrs["identity_center"].(github_com_hashicorp_terraform_plugin_framework_types.Object) + if !ok { + v = github_com_hashicorp_terraform_plugin_framework_types.Object{ + + AttrTypes: o.AttrTypes, + Attrs: make(map[string]github_com_hashicorp_terraform_plugin_framework_attr.Value, len(o.AttrTypes)), + } + } else { + if v.Attrs == nil { + v.Attrs = make(map[string]github_com_hashicorp_terraform_plugin_framework_attr.Value, len(tf.AttrTypes)) + } + } + if obj.IdentityCenter == nil { + v.Null = true + } else { + obj := obj.IdentityCenter + tf := &v + { + t, ok := tf.AttrTypes["account_id"] + if !ok { + diags.Append(attrWriteMissingDiag{"AppV3.Spec.IdentityCenter.AccountID"}) + } else { + v, ok := tf.Attrs["account_id"].(github_com_hashicorp_terraform_plugin_framework_types.String) + if !ok { + i, err := t.ValueFromTerraform(ctx, github_com_hashicorp_terraform_plugin_go_tftypes.NewValue(t.TerraformType(ctx), nil)) + if err != nil { + diags.Append(attrWriteGeneralError{"AppV3.Spec.IdentityCenter.AccountID", err}) + } + v, ok = i.(github_com_hashicorp_terraform_plugin_framework_types.String) + if !ok { + diags.Append(attrWriteConversionFailureDiag{"AppV3.Spec.IdentityCenter.AccountID", "github.com/hashicorp/terraform-plugin-framework/types.String"}) + } + v.Null = string(obj.AccountID) == "" + } + v.Value = string(obj.AccountID) + v.Unknown = false + tf.Attrs["account_id"] = v + } + } + { + a, ok := tf.AttrTypes["permission_sets"] + if !ok { + diags.Append(attrWriteMissingDiag{"AppV3.Spec.IdentityCenter.PermissionSets"}) + } else { + o, ok := a.(github_com_hashicorp_terraform_plugin_framework_types.ListType) + if !ok { + diags.Append(attrWriteConversionFailureDiag{"AppV3.Spec.IdentityCenter.PermissionSets", "github.com/hashicorp/terraform-plugin-framework/types.ListType"}) + } else { + c, ok := tf.Attrs["permission_sets"].(github_com_hashicorp_terraform_plugin_framework_types.List) + if !ok { + c = github_com_hashicorp_terraform_plugin_framework_types.List{ + + ElemType: o.ElemType, + Elems: make([]github_com_hashicorp_terraform_plugin_framework_attr.Value, len(obj.PermissionSets)), + Null: true, + } + } else { + if c.Elems == nil { + c.Elems = make([]github_com_hashicorp_terraform_plugin_framework_attr.Value, len(obj.PermissionSets)) + } + } + if obj.PermissionSets != nil { + o := o.ElemType.(github_com_hashicorp_terraform_plugin_framework_types.ObjectType) + if len(obj.PermissionSets) != len(c.Elems) { + c.Elems = make([]github_com_hashicorp_terraform_plugin_framework_attr.Value, len(obj.PermissionSets)) + } + for k, a := range obj.PermissionSets { + v, ok := tf.Attrs["permission_sets"].(github_com_hashicorp_terraform_plugin_framework_types.Object) + if !ok { + v = github_com_hashicorp_terraform_plugin_framework_types.Object{ + + AttrTypes: o.AttrTypes, + Attrs: make(map[string]github_com_hashicorp_terraform_plugin_framework_attr.Value, len(o.AttrTypes)), + } + } else { + if v.Attrs == nil { + v.Attrs = make(map[string]github_com_hashicorp_terraform_plugin_framework_attr.Value, len(tf.AttrTypes)) + } + } + if a == nil { + v.Null = true + } else { + obj := a + tf := &v + { + t, ok := tf.AttrTypes["arn"] + if !ok { + diags.Append(attrWriteMissingDiag{"AppV3.Spec.IdentityCenter.PermissionSets.ARN"}) + } else { + v, ok := tf.Attrs["arn"].(github_com_hashicorp_terraform_plugin_framework_types.String) + if !ok { + i, err := t.ValueFromTerraform(ctx, github_com_hashicorp_terraform_plugin_go_tftypes.NewValue(t.TerraformType(ctx), nil)) + if err != nil { + diags.Append(attrWriteGeneralError{"AppV3.Spec.IdentityCenter.PermissionSets.ARN", err}) + } + v, ok = i.(github_com_hashicorp_terraform_plugin_framework_types.String) + if !ok { + diags.Append(attrWriteConversionFailureDiag{"AppV3.Spec.IdentityCenter.PermissionSets.ARN", "github.com/hashicorp/terraform-plugin-framework/types.String"}) + } + v.Null = string(obj.ARN) == "" + } + v.Value = string(obj.ARN) + v.Unknown = false + tf.Attrs["arn"] = v + } + } + { + t, ok := tf.AttrTypes["name"] + if !ok { + diags.Append(attrWriteMissingDiag{"AppV3.Spec.IdentityCenter.PermissionSets.Name"}) + } else { + v, ok := tf.Attrs["name"].(github_com_hashicorp_terraform_plugin_framework_types.String) + if !ok { + i, err := t.ValueFromTerraform(ctx, github_com_hashicorp_terraform_plugin_go_tftypes.NewValue(t.TerraformType(ctx), nil)) + if err != nil { + diags.Append(attrWriteGeneralError{"AppV3.Spec.IdentityCenter.PermissionSets.Name", err}) + } + v, ok = i.(github_com_hashicorp_terraform_plugin_framework_types.String) + if !ok { + diags.Append(attrWriteConversionFailureDiag{"AppV3.Spec.IdentityCenter.PermissionSets.Name", "github.com/hashicorp/terraform-plugin-framework/types.String"}) + } + v.Null = string(obj.Name) == "" + } + v.Value = string(obj.Name) + v.Unknown = false + tf.Attrs["name"] = v + } + } + } + v.Unknown = false + c.Elems[k] = v + } + if len(obj.PermissionSets) > 0 { + c.Null = false + } + } + c.Unknown = false + tf.Attrs["permission_sets"] = c + } + } + } + } + v.Unknown = false + tf.Attrs["identity_center"] = v + } + } + } } v.Unknown = false tf.Attrs["spec"] = v @@ -16910,6 +17209,41 @@ func CopyRoleV6FromTerraform(_ context.Context, tf github_com_hashicorp_terrafor } } } + { + a, ok := tf.Attrs["reason"] + if !ok { + diags.Append(attrReadMissingDiag{"RoleV6.Spec.Allow.Request.Reason"}) + } else { + v, ok := a.(github_com_hashicorp_terraform_plugin_framework_types.Object) + if !ok { + diags.Append(attrReadConversionFailureDiag{"RoleV6.Spec.Allow.Request.Reason", "github.com/hashicorp/terraform-plugin-framework/types.Object"}) + } else { + obj.Reason = nil + if !v.Null && !v.Unknown { + tf := v + obj.Reason = &github_com_gravitational_teleport_api_types.AccessRequestConditionsReason{} + obj := obj.Reason + { + a, ok := tf.Attrs["mode"] + if !ok { + diags.Append(attrReadMissingDiag{"RoleV6.Spec.Allow.Request.Reason.Mode"}) + } else { + v, ok := a.(github_com_hashicorp_terraform_plugin_framework_types.String) + if !ok { + diags.Append(attrReadConversionFailureDiag{"RoleV6.Spec.Allow.Request.Reason.Mode", "github.com/hashicorp/terraform-plugin-framework/types.String"}) + } else { + var t github_com_gravitational_teleport_api_types.RequestReasonMode + if !v.Null && !v.Unknown { + t = github_com_gravitational_teleport_api_types.RequestReasonMode(v.Value) + } + obj.Mode = t + } + } + } + } + } + } + } } } } @@ -18824,6 +19158,41 @@ func CopyRoleV6FromTerraform(_ context.Context, tf github_com_hashicorp_terrafor } } } + { + a, ok := tf.Attrs["reason"] + if !ok { + diags.Append(attrReadMissingDiag{"RoleV6.Spec.Deny.Request.Reason"}) + } else { + v, ok := a.(github_com_hashicorp_terraform_plugin_framework_types.Object) + if !ok { + diags.Append(attrReadConversionFailureDiag{"RoleV6.Spec.Deny.Request.Reason", "github.com/hashicorp/terraform-plugin-framework/types.Object"}) + } else { + obj.Reason = nil + if !v.Null && !v.Unknown { + tf := v + obj.Reason = &github_com_gravitational_teleport_api_types.AccessRequestConditionsReason{} + obj := obj.Reason + { + a, ok := tf.Attrs["mode"] + if !ok { + diags.Append(attrReadMissingDiag{"RoleV6.Spec.Deny.Request.Reason.Mode"}) + } else { + v, ok := a.(github_com_hashicorp_terraform_plugin_framework_types.String) + if !ok { + diags.Append(attrReadConversionFailureDiag{"RoleV6.Spec.Deny.Request.Reason.Mode", "github.com/hashicorp/terraform-plugin-framework/types.String"}) + } else { + var t github_com_gravitational_teleport_api_types.RequestReasonMode + if !v.Null && !v.Unknown { + t = github_com_gravitational_teleport_api_types.RequestReasonMode(v.Value) + } + obj.Mode = t + } + } + } + } + } + } + } } } } @@ -22324,6 +22693,60 @@ func CopyRoleV6ToTerraform(ctx context.Context, obj *github_com_gravitational_te } } } + { + a, ok := tf.AttrTypes["reason"] + if !ok { + diags.Append(attrWriteMissingDiag{"RoleV6.Spec.Allow.Request.Reason"}) + } else { + o, ok := a.(github_com_hashicorp_terraform_plugin_framework_types.ObjectType) + if !ok { + diags.Append(attrWriteConversionFailureDiag{"RoleV6.Spec.Allow.Request.Reason", "github.com/hashicorp/terraform-plugin-framework/types.ObjectType"}) + } else { + v, ok := tf.Attrs["reason"].(github_com_hashicorp_terraform_plugin_framework_types.Object) + if !ok { + v = github_com_hashicorp_terraform_plugin_framework_types.Object{ + + AttrTypes: o.AttrTypes, + Attrs: make(map[string]github_com_hashicorp_terraform_plugin_framework_attr.Value, len(o.AttrTypes)), + } + } else { + if v.Attrs == nil { + v.Attrs = make(map[string]github_com_hashicorp_terraform_plugin_framework_attr.Value, len(tf.AttrTypes)) + } + } + if obj.Reason == nil { + v.Null = true + } else { + obj := obj.Reason + tf := &v + { + t, ok := tf.AttrTypes["mode"] + if !ok { + diags.Append(attrWriteMissingDiag{"RoleV6.Spec.Allow.Request.Reason.Mode"}) + } else { + v, ok := tf.Attrs["mode"].(github_com_hashicorp_terraform_plugin_framework_types.String) + if !ok { + i, err := t.ValueFromTerraform(ctx, github_com_hashicorp_terraform_plugin_go_tftypes.NewValue(t.TerraformType(ctx), nil)) + if err != nil { + diags.Append(attrWriteGeneralError{"RoleV6.Spec.Allow.Request.Reason.Mode", err}) + } + v, ok = i.(github_com_hashicorp_terraform_plugin_framework_types.String) + if !ok { + diags.Append(attrWriteConversionFailureDiag{"RoleV6.Spec.Allow.Request.Reason.Mode", "github.com/hashicorp/terraform-plugin-framework/types.String"}) + } + v.Null = string(obj.Mode) == "" + } + v.Value = string(obj.Mode) + v.Unknown = false + tf.Attrs["mode"] = v + } + } + } + v.Unknown = false + tf.Attrs["reason"] = v + } + } + } } v.Unknown = false tf.Attrs["request"] = v @@ -25668,6 +26091,60 @@ func CopyRoleV6ToTerraform(ctx context.Context, obj *github_com_gravitational_te } } } + { + a, ok := tf.AttrTypes["reason"] + if !ok { + diags.Append(attrWriteMissingDiag{"RoleV6.Spec.Deny.Request.Reason"}) + } else { + o, ok := a.(github_com_hashicorp_terraform_plugin_framework_types.ObjectType) + if !ok { + diags.Append(attrWriteConversionFailureDiag{"RoleV6.Spec.Deny.Request.Reason", "github.com/hashicorp/terraform-plugin-framework/types.ObjectType"}) + } else { + v, ok := tf.Attrs["reason"].(github_com_hashicorp_terraform_plugin_framework_types.Object) + if !ok { + v = github_com_hashicorp_terraform_plugin_framework_types.Object{ + + AttrTypes: o.AttrTypes, + Attrs: make(map[string]github_com_hashicorp_terraform_plugin_framework_attr.Value, len(o.AttrTypes)), + } + } else { + if v.Attrs == nil { + v.Attrs = make(map[string]github_com_hashicorp_terraform_plugin_framework_attr.Value, len(tf.AttrTypes)) + } + } + if obj.Reason == nil { + v.Null = true + } else { + obj := obj.Reason + tf := &v + { + t, ok := tf.AttrTypes["mode"] + if !ok { + diags.Append(attrWriteMissingDiag{"RoleV6.Spec.Deny.Request.Reason.Mode"}) + } else { + v, ok := tf.Attrs["mode"].(github_com_hashicorp_terraform_plugin_framework_types.String) + if !ok { + i, err := t.ValueFromTerraform(ctx, github_com_hashicorp_terraform_plugin_go_tftypes.NewValue(t.TerraformType(ctx), nil)) + if err != nil { + diags.Append(attrWriteGeneralError{"RoleV6.Spec.Deny.Request.Reason.Mode", err}) + } + v, ok = i.(github_com_hashicorp_terraform_plugin_framework_types.String) + if !ok { + diags.Append(attrWriteConversionFailureDiag{"RoleV6.Spec.Deny.Request.Reason.Mode", "github.com/hashicorp/terraform-plugin-framework/types.String"}) + } + v.Null = string(obj.Mode) == "" + } + v.Value = string(obj.Mode) + v.Unknown = false + tf.Attrs["mode"] = v + } + } + } + v.Unknown = false + tf.Attrs["reason"] = v + } + } + } } v.Unknown = false tf.Attrs["request"] = v diff --git a/lib/auth/accountrecovery_test.go b/lib/auth/accountrecovery_test.go index be0312661e2c6..1b53462c410cd 100644 --- a/lib/auth/accountrecovery_test.go +++ b/lib/auth/accountrecovery_test.go @@ -23,7 +23,7 @@ import ( "encoding/binary" "encoding/hex" "fmt" - "math/rand" + "math/rand/v2" "net/netip" "strings" "testing" diff --git a/lib/auth/auth.go b/lib/auth/auth.go index b9d91381cd51c..58306a3bbb1bc 100644 --- a/lib/auth/auth.go +++ b/lib/auth/auth.go @@ -38,7 +38,7 @@ import ( "io" "log/slog" "math/big" - insecurerand "math/rand" + mathrand "math/rand/v2" "net" "os" "regexp" @@ -88,6 +88,7 @@ import ( wantypes "github.com/gravitational/teleport/lib/auth/webauthntypes" "github.com/gravitational/teleport/lib/authz" "github.com/gravitational/teleport/lib/backend" + "github.com/gravitational/teleport/lib/bitbucket" "github.com/gravitational/teleport/lib/cache" "github.com/gravitational/teleport/lib/circleci" "github.com/gravitational/teleport/lib/cloud" @@ -622,6 +623,10 @@ func NewServer(cfg *InitConfig, opts ...ServerOption) (*Server, error) { }) } + if as.bitbucketIDTokenValidator == nil { + as.bitbucketIDTokenValidator = bitbucket.NewIDTokenValidator(as.clock) + } + // Add in a login hook for generating state during user login. as.ulsGenerator, err = userloginstate.NewGenerator(userloginstate.GeneratorConfig{ Log: log, @@ -1028,6 +1033,8 @@ type Server struct { // the purpose of tests. terraformIDTokenValidator terraformCloudIDTokenValidator + bitbucketIDTokenValidator bitbucketIDTokenValidator + // loadAllCAs tells tsh to load the host CAs for all clusters when trying to ssh into a node. loadAllCAs bool @@ -1334,8 +1341,7 @@ func (a *Server) runPeriodicOperations() { // to avoid contention on the database in case if there are multiple // auth servers running - so they don't compete trying // to update the same resources. - r := insecurerand.New(insecurerand.NewSource(a.GetClock().Now().UnixNano())) - period := defaults.HighResPollingPeriod + time.Duration(r.Intn(int(defaults.HighResPollingPeriod/time.Second)))*time.Second + period := retryutils.HalfJitter(2 * defaults.HighResPollingPeriod) ticker := interval.NewMulti( a.GetClock(), @@ -1430,7 +1436,7 @@ func (a *Server) runPeriodicOperations() { case <-a.closeCtx.Done(): return case <-remoteClustersRefresh.Next(): - a.refreshRemoteClusters(a.closeCtx, r) + a.refreshRemoteClusters(a.closeCtx) } } }() @@ -1859,7 +1865,7 @@ var ( ) // refreshRemoteClusters updates connection status of all remote clusters. -func (a *Server) refreshRemoteClusters(ctx context.Context, rnd *insecurerand.Rand) { +func (a *Server) refreshRemoteClusters(ctx context.Context) { remoteClusters, err := a.Services.GetRemoteClusters(ctx) if err != nil { log.WithError(err).Error("Failed to load remote clusters for status refresh") @@ -1873,7 +1879,7 @@ func (a *Server) refreshRemoteClusters(ctx context.Context, rnd *insecurerand.Ra } // randomize the order to optimize for multiple auth servers running in parallel - rnd.Shuffle(len(remoteClusters), func(i, j int) { + mathrand.Shuffle(len(remoteClusters), func(i, j int) { remoteClusters[i], remoteClusters[j] = remoteClusters[j], remoteClusters[i] }) @@ -4825,7 +4831,7 @@ func (a *Server) PingInventory(ctx context.Context, req proto.InventoryPingReque return proto.InventoryPingResponse{}, trace.NotFound("no control stream found for server %q", req.ServerID) } - id := insecurerand.Uint64() + id := mathrand.Uint64() if !req.ControlLog { // this ping doesn't pass through the control log, so just execute it immediately. diff --git a/lib/auth/auth_with_roles.go b/lib/auth/auth_with_roles.go index 70078ee0ff737..eee369828bd60 100644 --- a/lib/auth/auth_with_roles.go +++ b/lib/auth/auth_with_roles.go @@ -195,8 +195,8 @@ func (a *ServerWithRoles) actionWithExtendedContext(namespace, kind, verb string // actionForKindSession is a special checker that grants access to session // recordings. It can allow access to a specific recording based on the // `where` section of the user's access rule for kind `session`. -func (a *ServerWithRoles) actionForKindSession(namespace string, sid session.ID) (types.SessionKind, error) { - sessionEnd, err := a.findSessionEndEvent(namespace, sid) +func (a *ServerWithRoles) actionForKindSession(ctx context.Context, namespace string, sid session.ID) (types.SessionKind, error) { + sessionEnd, err := a.findSessionEndEvent(ctx, sid) extendContext := func(ctx *services.Context) error { ctx.Session = sessionEnd @@ -4097,8 +4097,8 @@ func (s *streamWithRoles) RecordEvent(ctx context.Context, pe apievents.Prepared return s.stream.RecordEvent(ctx, pe) } -func (a *ServerWithRoles) findSessionEndEvent(namespace string, sid session.ID) (apievents.AuditEvent, error) { - sessionEvents, _, err := a.alog.SearchSessionEvents(context.TODO(), events.SearchSessionEventsRequest{ +func (a *ServerWithRoles) findSessionEndEvent(ctx context.Context, sid session.ID) (apievents.AuditEvent, error) { + sessionEvents, _, err := a.alog.SearchSessionEvents(ctx, events.SearchSessionEventsRequest{ From: time.Time{}, To: a.authServer.clock.Now().UTC(), Limit: defaults.EventsIterationLimit, @@ -4204,7 +4204,7 @@ func (a *ServerWithRoles) ListRoles(ctx context.Context, req *proto.ListRolesReq }, nil } -func (a *ServerWithRoles) validateRole(ctx context.Context, role types.Role) error { +func (a *ServerWithRoles) validateRole(role types.Role) error { if downgradeReason := role.GetMetadata().Labels[types.TeleportDowngradedLabel]; downgradeReason != "" { return trace.BadParameter("refusing to upsert role because %s label is set with reason %q", types.TeleportDowngradedLabel, downgradeReason) @@ -4229,6 +4229,16 @@ func (a *ServerWithRoles) validateRole(ctx context.Context, role types.Role) err } } + if role.GetRequestReasonMode(types.Deny) != "" { + return trace.BadParameter("request reason mode can be provided only for allow rules") + } + if role.GetRequestReasonMode(types.Allow) != "" { + err := role.GetRequestReasonMode(types.Allow).Check() + if err != nil { + return trace.Wrap(err) + } + } + return nil } @@ -4242,7 +4252,7 @@ func (a *ServerWithRoles) CreateRole(ctx context.Context, role types.Role) (type return nil, trace.Wrap(err) } - if err := a.validateRole(ctx, role); err != nil { + if err := a.validateRole(role); err != nil { return nil, trace.Wrap(err) } @@ -4274,7 +4284,7 @@ func (a *ServerWithRoles) UpdateRole(ctx context.Context, role types.Role) (type return nil, trace.Wrap(err) } - if err := a.validateRole(ctx, role); err != nil { + if err := a.validateRole(role); err != nil { return nil, trace.Wrap(err) } @@ -4306,7 +4316,7 @@ func (a *ServerWithRoles) UpsertRole(ctx context.Context, role types.Role) (type return nil, trace.Wrap(err) } - if err := a.validateRole(ctx, role); err != nil { + if err := a.validateRole(role); err != nil { return nil, trace.Wrap(err) } @@ -5948,7 +5958,7 @@ func (a *ServerWithRoles) StreamSessionEvents(ctx context.Context, sessionID ses var sessionType types.SessionKind if !isTeleportServer { var err error - sessionType, err = a.actionForKindSession(apidefaults.Namespace, sessionID) + sessionType, err = a.actionForKindSession(ctx, apidefaults.Namespace, sessionID) if err != nil { c, e := make(chan apievents.AuditEvent), make(chan error, 1) e <- trace.Wrap(err) diff --git a/lib/auth/auth_with_roles_test.go b/lib/auth/auth_with_roles_test.go index 538e4655fce7a..48a32faf0a987 100644 --- a/lib/auth/auth_with_roles_test.go +++ b/lib/auth/auth_with_roles_test.go @@ -8053,7 +8053,7 @@ func TestCreateAccessRequest(t *testing.T) { clock := srv.Clock() alice, bob, admin := createSessionTestUsers(t, srv.Auth()) - searchRole, err := types.NewRole("requestRole", types.RoleSpecV6{ + searchRole, err := types.NewRole("searchRole", types.RoleSpecV6{ Allow: types.RoleConditions{ Request: &types.AccessRequestConditions{ Roles: []string{"requestRole"}, @@ -8063,11 +8063,32 @@ func TestCreateAccessRequest(t *testing.T) { }) require.NoError(t, err) - requestRole, err := types.NewRole("requestRole", types.RoleSpecV6{}) + requestRole, err := types.NewRole("requestRole", types.RoleSpecV6{ + Allow: types.RoleConditions{ + GroupLabels: types.Labels{ + types.Wildcard: []string{types.Wildcard}, + }, + NodeLabels: types.Labels{ + types.Wildcard: []string{types.Wildcard}, + }, + }, + }) + require.NoError(t, err) + + nodeAllowedByRequestRole, err := types.NewServerWithLabels( + "test-node", + types.KindNode, + types.ServerSpecV2{}, + map[string]string{"any-key": "any-val"}, + ) require.NoError(t, err) - srv.Auth().CreateRole(ctx, searchRole) - srv.Auth().CreateRole(ctx, requestRole) + _, err = srv.Auth().UpsertNode(ctx, nodeAllowedByRequestRole) + require.NoError(t, err) + _, err = srv.Auth().CreateRole(ctx, requestRole) + require.NoError(t, err) + _, err = srv.Auth().CreateRole(ctx, searchRole) + require.NoError(t, err) user, err := srv.Auth().GetUser(ctx, alice, true) require.NoError(t, err) @@ -8110,12 +8131,12 @@ func TestCreateAccessRequest(t *testing.T) { user: alice, accessRequest: mustAccessRequest(t, alice, types.RequestState_PENDING, clock.Now(), clock.Now().Add(time.Hour), []string{requestRole.GetName()}, []types.ResourceID{ - mustResourceID(srv.ClusterName(), types.KindRole, requestRole.GetName()), + mustResourceID(srv.ClusterName(), nodeAllowedByRequestRole.GetKind(), nodeAllowedByRequestRole.GetName()), }), errAssertionFunc: require.NoError, expected: mustAccessRequest(t, alice, types.RequestState_PENDING, clock.Now(), clock.Now().Add(time.Hour), []string{requestRole.GetName()}, []types.ResourceID{ - mustResourceID(srv.ClusterName(), types.KindRole, requestRole.GetName()), + mustResourceID(srv.ClusterName(), nodeAllowedByRequestRole.GetKind(), nodeAllowedByRequestRole.GetName()), }), }, { @@ -8123,12 +8144,15 @@ func TestCreateAccessRequest(t *testing.T) { user: admin, accessRequest: mustAccessRequest(t, alice, types.RequestState_PENDING, clock.Now(), clock.Now().Add(time.Hour), []string{requestRole.GetName()}, []types.ResourceID{ - mustResourceID(srv.ClusterName(), types.KindRole, requestRole.GetName()), + mustResourceID(srv.ClusterName(), types.KindUserGroup, userGroup1.GetName()), }), errAssertionFunc: require.NoError, expected: mustAccessRequest(t, alice, types.RequestState_PENDING, clock.Now(), clock.Now().Add(time.Hour), []string{requestRole.GetName()}, []types.ResourceID{ - mustResourceID(srv.ClusterName(), types.KindRole, requestRole.GetName()), + mustResourceID(srv.ClusterName(), types.KindUserGroup, userGroup1.GetName()), + mustResourceID(srv.ClusterName(), types.KindApp, userGroup1.GetApplications()[0]), + mustResourceID(srv.ClusterName(), types.KindApp, userGroup1.GetApplications()[1]), + mustResourceID(srv.ClusterName(), types.KindApp, userGroup1.GetApplications()[2]), }), }, { @@ -8136,7 +8160,7 @@ func TestCreateAccessRequest(t *testing.T) { user: bob, accessRequest: mustAccessRequest(t, alice, types.RequestState_PENDING, clock.Now(), clock.Now().Add(time.Hour), []string{requestRole.GetName()}, []types.ResourceID{ - mustResourceID(srv.ClusterName(), types.KindRole, requestRole.GetName()), + mustResourceID(srv.ClusterName(), types.KindUserGroup, userGroup1.GetName()), }), errAssertionFunc: require.Error, }, @@ -8145,7 +8169,7 @@ func TestCreateAccessRequest(t *testing.T) { user: alice, accessRequest: mustAccessRequest(t, alice, types.RequestState_PENDING, clock.Now(), clock.Now().Add(time.Hour), []string{requestRole.GetName()}, []types.ResourceID{ - mustResourceID(srv.ClusterName(), types.KindRole, requestRole.GetName()), + mustResourceID(srv.ClusterName(), nodeAllowedByRequestRole.GetKind(), nodeAllowedByRequestRole.GetName()), mustResourceID(srv.ClusterName(), types.KindUserGroup, userGroup1.GetName()), mustResourceID(srv.ClusterName(), types.KindApp, "app1"), mustResourceID(srv.ClusterName(), types.KindUserGroup, userGroup2.GetName()), @@ -8154,7 +8178,7 @@ func TestCreateAccessRequest(t *testing.T) { errAssertionFunc: require.NoError, expected: mustAccessRequest(t, alice, types.RequestState_PENDING, clock.Now(), clock.Now().Add(time.Hour), []string{requestRole.GetName()}, []types.ResourceID{ - mustResourceID(srv.ClusterName(), types.KindRole, requestRole.GetName()), + mustResourceID(srv.ClusterName(), nodeAllowedByRequestRole.GetKind(), nodeAllowedByRequestRole.GetName()), mustResourceID(srv.ClusterName(), types.KindUserGroup, userGroup1.GetName()), mustResourceID(srv.ClusterName(), types.KindApp, "app1"), mustResourceID(srv.ClusterName(), types.KindUserGroup, userGroup2.GetName()), @@ -8389,9 +8413,13 @@ func TestAccessRequestNonGreedyAnnotations(t *testing.T) { require.NoError(t, err) paymentsServer.SetStaticLabels(map[string]string{"service": "payments"}) - idServer, err := types.NewServer("server-identity", types.KindNode, types.ServerSpecV2{}) + idServer, err := types.NewServerWithLabels( + "server-identity", + types.KindNode, + types.ServerSpecV2{}, + map[string]string{"service": "identity"}, + ) require.NoError(t, err) - idServer.SetStaticLabels(map[string]string{"service": "payments"}) ctx := context.Background() srv := newTestTLSServer(t) @@ -9163,3 +9191,114 @@ func TestCloudDefaultPasswordless(t *testing.T) { }) } } + +func TestRoleRequestReasonModeValidation(t *testing.T) { + ctx := context.Background() + srv := newTestTLSServer(t) + + s := newTestServerWithRoles(t, srv.AuthServer, types.RoleAdmin) + + testCases := []struct { + desc string + allow types.AccessRequestConditions + deny types.AccessRequestConditions + expectedError error + }{ + { + desc: "Reason mode can be omitted", + allow: types.AccessRequestConditions{ + Roles: []string{"requestable-test-role"}, + }, + expectedError: nil, + }, + { + desc: "Reason mode can be empty", + allow: types.AccessRequestConditions{ + Roles: []string{"requestable-test-role"}, + Reason: &types.AccessRequestConditionsReason{ + Mode: "", + }, + }, + expectedError: nil, + }, + { + desc: "Reason mode can be required in allow condition", + allow: types.AccessRequestConditions{ + Roles: []string{"requestable-test-role"}, + Reason: &types.AccessRequestConditionsReason{ + Mode: types.RequestReasonModeRequired, + }, + }, + expectedError: nil, + }, + { + desc: "Reason mode can be optional in allow condition", + allow: types.AccessRequestConditions{ + Roles: []string{"requestable-test-role"}, + Reason: &types.AccessRequestConditionsReason{ + Mode: types.RequestReasonModeOptional, + }, + }, + expectedError: nil, + }, + { + desc: "Reason mode can be empty", + allow: types.AccessRequestConditions{ + Roles: []string{"requestable-test-role"}, + Reason: &types.AccessRequestConditionsReason{ + Mode: "", + }, + }, + expectedError: nil, + }, + { + desc: "Reason mode cannot be set to any other value", + allow: types.AccessRequestConditions{ + Roles: []string{"requestable-test-role"}, + Reason: &types.AccessRequestConditionsReason{ + Mode: "other-value", + }, + }, + expectedError: trace.BadParameter(`unrecognized request reason mode "other-value", must be one of: [required optional]`), + }, + { + desc: "Reason mode cannot be set deny condition", + deny: types.AccessRequestConditions{ + Roles: []string{"requestable-test-role"}, + Reason: &types.AccessRequestConditionsReason{ + Mode: types.RequestReasonModeOptional, + }, + }, + expectedError: trace.BadParameter("request reason mode can be provided only for allow rules"), + }, + } + + for i, tt := range testCases { + t.Run(tt.desc, func(t *testing.T) { + var err error + + createRole := newRole(t, fmt.Sprintf("test-create-role-%d", i), nil, types.RoleConditions{}, types.RoleConditions{}) + updateRole := newRole(t, fmt.Sprintf("test-update-role-%d", i), nil, types.RoleConditions{}, types.RoleConditions{}) + upsertRole := newRole(t, fmt.Sprintf("test-upsert-role-%d", i), nil, types.RoleConditions{}, types.RoleConditions{}) + + createRole.SetAccessRequestConditions(types.Allow, tt.allow) + createRole.SetAccessRequestConditions(types.Deny, tt.deny) + _, err = s.CreateRole(ctx, createRole) + require.ErrorIs(t, err, tt.expectedError) + + updateRole, err = s.CreateRole(ctx, updateRole) + require.NoError(t, err) + updateRole.SetAccessRequestConditions(types.Allow, tt.allow) + updateRole.SetAccessRequestConditions(types.Deny, tt.deny) + _, err = s.UpdateRole(ctx, updateRole) + require.ErrorIs(t, err, tt.expectedError) + + upsertRole, err = s.CreateRole(ctx, upsertRole) + require.NoError(t, err) + upsertRole.SetAccessRequestConditions(types.Allow, tt.allow) + upsertRole.SetAccessRequestConditions(types.Deny, tt.deny) + _, err = s.UpsertRole(ctx, upsertRole) + require.ErrorIs(t, err, tt.expectedError) + }) + } +} diff --git a/lib/auth/helpers.go b/lib/auth/helpers.go index 99818886c00dc..dd1b2fcf7e414 100644 --- a/lib/auth/helpers.go +++ b/lib/auth/helpers.go @@ -79,7 +79,7 @@ type TestAuthServerConfig struct { // CipherSuites is the list of ciphers that the server supports. CipherSuites []uint16 // Clock is used to control time in tests. - Clock clockwork.FakeClock + Clock clockwork.Clock // ClusterNetworkingConfig allows a test to change the default // networking configuration. ClusterNetworkingConfig types.ClusterNetworkingConfig diff --git a/lib/auth/join.go b/lib/auth/join.go index 87fb8a94c23b7..53880bf9955e2 100644 --- a/lib/auth/join.go +++ b/lib/auth/join.go @@ -297,6 +297,14 @@ func (a *Server) RegisterUsingToken(ctx context.Context, req *types.RegisterUsin if err != nil { return nil, trace.Wrap(err) } + case types.JoinMethodBitbucket: + claims, err := a.checkBitbucketJoinRequest(ctx, req) + if claims != nil { + joinAttributeSrc = claims + } + if err != nil { + return nil, trace.Wrap(err) + } case types.JoinMethodToken: // carry on to common token checking logic default: diff --git a/lib/auth/join/join.go b/lib/auth/join/join.go index 58c98cdd6448e..15deb2bb5da7b 100644 --- a/lib/auth/join/join.go +++ b/lib/auth/join/join.go @@ -41,6 +41,7 @@ import ( "github.com/gravitational/teleport/lib/auth/authclient" "github.com/gravitational/teleport/lib/auth/join/iam" "github.com/gravitational/teleport/lib/auth/state" + "github.com/gravitational/teleport/lib/bitbucket" "github.com/gravitational/teleport/lib/circleci" proxyinsecureclient "github.com/gravitational/teleport/lib/client/proxy/insecure" "github.com/gravitational/teleport/lib/cloud/imds/azure" @@ -256,6 +257,11 @@ func Register(ctx context.Context, params RegisterParams) (result *RegisterResul if err != nil { return nil, trace.Wrap(err) } + case types.JoinMethodBitbucket: + params.IDToken, err = bitbucket.NewIDTokenSource(os.Getenv).GetIDToken() + if err != nil { + return nil, trace.Wrap(err) + } } // If an explicit AuthClient has been provided, we want to go straight to diff --git a/lib/auth/join_bitbucket.go b/lib/auth/join_bitbucket.go new file mode 100644 index 0000000000000..b4264deef3f77 --- /dev/null +++ b/lib/auth/join_bitbucket.go @@ -0,0 +1,89 @@ +/* + * Teleport + * Copyright (C) 2024 Gravitational, Inc. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package auth + +import ( + "context" + + "github.com/gravitational/trace" + + "github.com/gravitational/teleport/api/types" + "github.com/gravitational/teleport/lib/bitbucket" +) + +type bitbucketIDTokenValidator interface { + Validate( + ctx context.Context, idpURL, audience, token string, + ) (*bitbucket.IDTokenClaims, error) +} + +func (a *Server) checkBitbucketJoinRequest(ctx context.Context, req *types.RegisterUsingTokenRequest) (*bitbucket.IDTokenClaims, error) { + if req.IDToken == "" { + return nil, trace.BadParameter("id_token not provided for bitbucket join request") + } + pt, err := a.GetToken(ctx, req.Token) + if err != nil { + return nil, trace.Wrap(err) + } + + token, ok := pt.(*types.ProvisionTokenV2) + if !ok { + return nil, trace.BadParameter("bitbucket join method only supports ProvisionTokenV2, '%T' was provided", pt) + } + + claims, err := a.bitbucketIDTokenValidator.Validate( + ctx, token.Spec.Bitbucket.IdentityProviderURL, token.Spec.Bitbucket.Audience, req.IDToken, + ) + if err != nil { + return nil, trace.Wrap(err) + } + + a.logger.InfoContext(ctx, "Bitbucket run trying to join cluster", "claims", claims, "token", pt.GetName()) + + return claims, trace.Wrap(checkBitbucketAllowRules(token, claims)) +} + +func checkBitbucketAllowRules(token *types.ProvisionTokenV2, claims *bitbucket.IDTokenClaims) error { + // If a single rule passes, accept the IDToken + for _, rule := range token.Spec.Bitbucket.Allow { + // Please consider keeping these field validators in the same order they + // are defined within the ProvisionTokenSpecV2Bitbucket proto spec. + + if rule.WorkspaceUUID != "" && claims.WorkspaceUUID != rule.WorkspaceUUID { + continue + } + + if rule.RepositoryUUID != "" && claims.RepositoryUUID != rule.RepositoryUUID { + continue + } + + if rule.DeploymentEnvironmentUUID != "" && claims.DeploymentEnvironmentUUID != rule.DeploymentEnvironmentUUID { + continue + } + + if rule.BranchName != "" && claims.BranchName != rule.BranchName { + continue + } + + // All provided rules met. + return nil + } + + return trace.AccessDenied("id token claims did not match any allow rules") +} diff --git a/lib/auth/join_bitbucket_test.go b/lib/auth/join_bitbucket_test.go new file mode 100644 index 0000000000000..9c718de2ce3b6 --- /dev/null +++ b/lib/auth/join_bitbucket_test.go @@ -0,0 +1,285 @@ +/* + * Teleport + * Copyright (C) 2023 Gravitational, Inc. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package auth + +import ( + "context" + "fmt" + "testing" + "time" + + "github.com/gravitational/trace" + "github.com/stretchr/testify/require" + + "github.com/gravitational/teleport/api/types" + "github.com/gravitational/teleport/lib/auth/testauthority" + "github.com/gravitational/teleport/lib/bitbucket" + "github.com/gravitational/teleport/lib/modules" +) + +const fakeBitbucketIDPURL = "https://api.bitbucket.org/2.0/workspaces/example/pipelines-config/identity/oidc" + +type mockBitbucketTokenValidator struct { + tokens map[string]bitbucket.IDTokenClaims +} + +func (m *mockBitbucketTokenValidator) Validate( + _ context.Context, issuerURL, audience, token string, +) (*bitbucket.IDTokenClaims, error) { + if issuerURL != fakeBitbucketIDPURL { + return nil, fmt.Errorf("bad issuer: %s", issuerURL) + } + + claims, ok := m.tokens[token] + if !ok { + return nil, errMockInvalidToken + } + + return &claims, nil +} + +func TestAuth_RegisterUsingToken_Bitbucket(t *testing.T) { + const ( + validIDToken = "test.fake.jwt" + fakeAudience = "ari:cloud:bitbucket::workspace/e2b9cba7-4ecf-452c-bb1c-87add4084c99" + fakeWorkspaceUUID = "{e2b9cba7-4ecf-452c-bb1c-87add4084c99}" + fakeRepositoryUUID = "{8864cd24-449d-4441-8862-cf4fe8ad6caa}" + fakeStepUUID = "{d5ff2daf-063f-4c13-82fc-cb51af94c2cb}" + fakePipelineUUID = "{805b0ca6-1086-4d23-b526-de1d38cf36d7}" + fakeDeploymentEnvUUID = "{c7ba7cd0-75e2-4616-8834-6d401da3ba0c}" + fakeBranchName = "main" + ) + + idTokenValidator := &mockBitbucketTokenValidator{ + tokens: map[string]bitbucket.IDTokenClaims{ + validIDToken: { + BranchName: fakeBranchName, + WorkspaceUUID: fakeWorkspaceUUID, + RepositoryUUID: fakeRepositoryUUID, + StepUUID: fakeStepUUID, + PipelineUUID: fakePipelineUUID, + DeploymentEnvironmentUUID: fakeDeploymentEnvUUID, + Sub: fmt.Sprintf("%s:%s", fakeRepositoryUUID, fakeStepUUID), + }, + }, + } + + ctx := context.Background() + p, err := newTestPack(ctx, t.TempDir(), func(server *Server) error { + server.bitbucketIDTokenValidator = idTokenValidator + return nil + }) + require.NoError(t, err) + auth := p.a + + // helper for creating RegisterUsingTokenRequest + sshPrivateKey, sshPublicKey, err := testauthority.New().GenerateKeyPair() + require.NoError(t, err) + tlsPublicKey, err := PrivateKeyToPublicKeyTLS(sshPrivateKey) + require.NoError(t, err) + newRequest := func(idToken string) *types.RegisterUsingTokenRequest { + return &types.RegisterUsingTokenRequest{ + HostID: "host-id", + Role: types.RoleNode, + IDToken: idToken, + PublicTLSKey: tlsPublicKey, + PublicSSHKey: sshPublicKey, + } + } + + allowRule := func(modifier func(*types.ProvisionTokenSpecV2Bitbucket_Rule)) *types.ProvisionTokenSpecV2Bitbucket_Rule { + rule := &types.ProvisionTokenSpecV2Bitbucket_Rule{ + WorkspaceUUID: fakeWorkspaceUUID, + RepositoryUUID: fakeRepositoryUUID, + DeploymentEnvironmentUUID: fakeDeploymentEnvUUID, + BranchName: fakeBranchName, + } + if modifier != nil { + modifier(rule) + } + return rule + } + + allowRulesNotMatched := require.ErrorAssertionFunc(func(t require.TestingT, err error, i ...interface{}) { + require.ErrorContains(t, err, "id token claims did not match any allow rules") + require.True(t, trace.IsAccessDenied(err)) + }) + + tests := []struct { + name string + setEnterprise bool + request *types.RegisterUsingTokenRequest + tokenSpec types.ProvisionTokenSpecV2 + assertError require.ErrorAssertionFunc + }{ + { + name: "success", + setEnterprise: true, + tokenSpec: types.ProvisionTokenSpecV2{ + JoinMethod: types.JoinMethodBitbucket, + Roles: []types.SystemRole{types.RoleNode}, + Bitbucket: &types.ProvisionTokenSpecV2Bitbucket{ + IdentityProviderURL: fakeBitbucketIDPURL, + Audience: fakeAudience, + Allow: []*types.ProvisionTokenSpecV2Bitbucket_Rule{ + allowRule(nil), + }, + }, + }, + request: newRequest(validIDToken), + assertError: require.NoError, + }, + { + name: "multiple allow rules", + setEnterprise: true, + tokenSpec: types.ProvisionTokenSpecV2{ + JoinMethod: types.JoinMethodBitbucket, + Roles: []types.SystemRole{types.RoleNode}, + Bitbucket: &types.ProvisionTokenSpecV2Bitbucket{ + IdentityProviderURL: fakeBitbucketIDPURL, + Audience: fakeAudience, + Allow: []*types.ProvisionTokenSpecV2Bitbucket_Rule{ + allowRule(func(rule *types.ProvisionTokenSpecV2Bitbucket_Rule) { + rule.WorkspaceUUID = "{foo}" + rule.RepositoryUUID = "{bar}" + }), + allowRule(nil), + }, + }, + }, + request: newRequest(validIDToken), + assertError: require.NoError, + }, + { + name: "incorrect workspace uuid", + setEnterprise: true, + tokenSpec: types.ProvisionTokenSpecV2{ + JoinMethod: types.JoinMethodBitbucket, + Roles: []types.SystemRole{types.RoleNode}, + Bitbucket: &types.ProvisionTokenSpecV2Bitbucket{ + IdentityProviderURL: fakeBitbucketIDPURL, + Audience: fakeAudience, + Allow: []*types.ProvisionTokenSpecV2Bitbucket_Rule{ + allowRule(func(rule *types.ProvisionTokenSpecV2Bitbucket_Rule) { + rule.WorkspaceUUID = "foo" + }), + }, + }, + }, + request: newRequest(validIDToken), + assertError: allowRulesNotMatched, + }, + { + name: "incorrect repository uuid", + setEnterprise: true, + tokenSpec: types.ProvisionTokenSpecV2{ + JoinMethod: types.JoinMethodBitbucket, + Roles: []types.SystemRole{types.RoleNode}, + Bitbucket: &types.ProvisionTokenSpecV2Bitbucket{ + IdentityProviderURL: fakeBitbucketIDPURL, + Audience: fakeAudience, + Allow: []*types.ProvisionTokenSpecV2Bitbucket_Rule{ + allowRule(func(rule *types.ProvisionTokenSpecV2Bitbucket_Rule) { + rule.RepositoryUUID = "bar" + }), + }, + }, + }, + request: newRequest(validIDToken), + assertError: allowRulesNotMatched, + }, + { + name: "incorrect branch name", + setEnterprise: true, + tokenSpec: types.ProvisionTokenSpecV2{ + JoinMethod: types.JoinMethodBitbucket, + Roles: []types.SystemRole{types.RoleNode}, + Bitbucket: &types.ProvisionTokenSpecV2Bitbucket{ + IdentityProviderURL: fakeBitbucketIDPURL, + Audience: fakeAudience, + Allow: []*types.ProvisionTokenSpecV2Bitbucket_Rule{ + allowRule(func(rule *types.ProvisionTokenSpecV2Bitbucket_Rule) { + rule.BranchName = "baz" + }), + }, + }, + }, + request: newRequest(validIDToken), + assertError: allowRulesNotMatched, + }, + { + name: "incorrect deployment environment", + setEnterprise: true, + tokenSpec: types.ProvisionTokenSpecV2{ + JoinMethod: types.JoinMethodBitbucket, + Roles: []types.SystemRole{types.RoleNode}, + Bitbucket: &types.ProvisionTokenSpecV2Bitbucket{ + IdentityProviderURL: fakeBitbucketIDPURL, + Audience: fakeAudience, + Allow: []*types.ProvisionTokenSpecV2Bitbucket_Rule{ + allowRule(func(rule *types.ProvisionTokenSpecV2Bitbucket_Rule) { + rule.DeploymentEnvironmentUUID = "{foo}" + }), + }, + }, + }, + request: newRequest(validIDToken), + assertError: allowRulesNotMatched, + }, + { + name: "invalid token", + setEnterprise: true, + tokenSpec: types.ProvisionTokenSpecV2{ + JoinMethod: types.JoinMethodBitbucket, + Roles: []types.SystemRole{types.RoleNode}, + Bitbucket: &types.ProvisionTokenSpecV2Bitbucket{ + IdentityProviderURL: fakeBitbucketIDPURL, + Audience: fakeAudience, + Allow: []*types.ProvisionTokenSpecV2Bitbucket_Rule{ + allowRule(nil), + }, + }, + }, + request: newRequest("some other token"), + assertError: func(t require.TestingT, err error, i ...interface{}) { + require.ErrorIs(t, err, errMockInvalidToken) + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if tt.setEnterprise { + modules.SetTestModules( + t, + &modules.TestModules{TestBuildType: modules.BuildEnterprise}, + ) + } + + token, err := types.NewProvisionTokenFromSpec( + tt.name, time.Now().Add(time.Minute), tt.tokenSpec, + ) + require.NoError(t, err) + require.NoError(t, auth.CreateToken(ctx, token)) + tt.request.Token = tt.name + + _, err = auth.RegisterUsingToken(ctx, tt.request) + tt.assertError(t, err) + }) + } +} diff --git a/lib/auth/keystore/gcp_kms_test.go b/lib/auth/keystore/gcp_kms_test.go index e43825b8c7526..922d8b4e3d051 100644 --- a/lib/auth/keystore/gcp_kms_test.go +++ b/lib/auth/keystore/gcp_kms_test.go @@ -25,7 +25,7 @@ import ( "crypto/x509/pkix" "encoding/pem" "math/big" - "math/rand" + mathrandv1 "math/rand" //nolint:depguard // only used for deterministic output "net" "strings" "sync" @@ -206,7 +206,7 @@ func (f *fakeGCPKMSServer) AsymmetricSign(ctx context.Context, req *kmspb.Asymme return nil, trace.BadParameter("unsupported digest type %T", typedDigest) } - testRand := rand.New(rand.NewSource(0)) + testRand := mathrandv1.New(mathrandv1.NewSource(0)) sig, err := signer.Sign(testRand, digest, alg) if err != nil { return nil, trace.Wrap(err) @@ -517,7 +517,7 @@ func TestGCPKMSKeystore(t *testing.T) { Key: clientPrivKey.SSHPublicKey(), CertType: ssh.HostCert, } - err = cert.SignCert(rand.New(rand.NewSource(0)), sshSigner) + err = cert.SignCert(mathrandv1.New(mathrandv1.NewSource(0)), sshSigner) if tc.expectSignError { require.Error(t, err, "expected to get error signing SSH cert") return @@ -545,7 +545,7 @@ func TestGCPKMSKeystore(t *testing.T) { }, } _, err = x509.CreateCertificate( - rand.New(rand.NewSource(0)), + mathrandv1.New(mathrandv1.NewSource(0)), template, tlsCA.Cert, clientPrivKey.Public(), diff --git a/lib/auth/kube_test.go b/lib/auth/kube_test.go index 08af05f555701..501b0ecea4f38 100644 --- a/lib/auth/kube_test.go +++ b/lib/auth/kube_test.go @@ -19,10 +19,10 @@ package auth import ( + "crypto/rand" "crypto/x509" "crypto/x509/pkix" "encoding/pem" - "math/rand" "testing" "time" @@ -112,9 +112,7 @@ func newTestCSR(subj pkix.Name) ([]byte, error) { x509CSR := &x509.CertificateRequest{ Subject: subj, } - // Use math/rand to avoid blocking on system entropy. - rng := rand.New(rand.NewSource(0)) - derCSR, err := x509.CreateCertificateRequest(rng, x509CSR, priv) + derCSR, err := x509.CreateCertificateRequest(rand.Reader, x509CSR, priv) if err != nil { return nil, err } diff --git a/lib/auth/machineid/machineidv1/bot_service.go b/lib/auth/machineid/machineidv1/bot_service.go index 6c76188dd5c68..248d04655d75c 100644 --- a/lib/auth/machineid/machineidv1/bot_service.go +++ b/lib/auth/machineid/machineidv1/bot_service.go @@ -55,6 +55,7 @@ var SupportedJoinMethods = []types.JoinMethod{ types.JoinMethodToken, types.JoinMethodTPM, types.JoinMethodTerraformCloud, + types.JoinMethodBitbucket, } // BotResourceName returns the default name for resources associated with the diff --git a/lib/auth/password_test.go b/lib/auth/password_test.go index c9a3866488bad..3306062fddff5 100644 --- a/lib/auth/password_test.go +++ b/lib/auth/password_test.go @@ -22,7 +22,7 @@ import ( "context" "encoding/base32" "fmt" - "math/rand" + "math/rand/v2" "testing" "time" diff --git a/lib/auth/tls_test.go b/lib/auth/tls_test.go index 597060dbf1940..d6e8c6a88b0bc 100644 --- a/lib/auth/tls_test.go +++ b/lib/auth/tls_test.go @@ -413,8 +413,9 @@ func TestAutoRotation(t *testing.T) { t.Parallel() ctx := context.Background() - testSrv := newTestTLSServer(t) - clock := testSrv.AuthServer.TestAuthServerConfig.Clock + clock := clockwork.NewFakeClock() + testSrv := newTestTLSServer(t, withClock(clock)) + var ok bool // create proxy client @@ -514,8 +515,8 @@ func TestAutoFallback(t *testing.T) { t.Parallel() ctx := context.Background() - testSrv := newTestTLSServer(t) - clock := testSrv.AuthServer.TestAuthServerConfig.Clock + clock := clockwork.NewFakeClock() + testSrv := newTestTLSServer(t, withClock(clock)) var ok bool @@ -5001,6 +5002,7 @@ func verifyJWTAWSOIDC(clock clockwork.Clock, clusterName string, pairs []*types. type testTLSServerOptions struct { cacheEnabled bool accessGraph *AccessGraphConfig + clock clockwork.Clock } type testTLSServerOption func(*testTLSServerOptions) @@ -5017,6 +5019,12 @@ func withAccessGraphConfig(cfg AccessGraphConfig) testTLSServerOption { } } +func withClock(clock clockwork.Clock) testTLSServerOption { + return func(options *testTLSServerOptions) { + options.clock = clock + } +} + // newTestTLSServer is a helper that returns a *TestTLSServer with sensible // defaults for most tests that are exercising Auth Service RPCs. // @@ -5027,9 +5035,12 @@ func newTestTLSServer(t testing.TB, opts ...testTLSServerOption) *TestTLSServer for _, opt := range opts { opt(&options) } + if options.clock == nil { + options.clock = clockwork.NewFakeClockAt(time.Now().Round(time.Second).UTC()) + } as, err := NewTestAuthServer(TestAuthServerConfig{ Dir: t.TempDir(), - Clock: clockwork.NewFakeClockAt(time.Now().Round(time.Second).UTC()), + Clock: options.clock, CacheEnabled: options.cacheEnabled, }) require.NoError(t, err) diff --git a/lib/auth/trustedcluster_test.go b/lib/auth/trustedcluster_test.go index f1581dbc64fee..c65287c5064ff 100644 --- a/lib/auth/trustedcluster_test.go +++ b/lib/auth/trustedcluster_test.go @@ -21,7 +21,6 @@ package auth import ( "context" "fmt" - insecurerand "math/rand" "testing" "time" @@ -44,7 +43,6 @@ import ( func TestRemoteClusterStatus(t *testing.T) { ctx := context.Background() a := newTestAuthServer(ctx, t) - rnd := insecurerand.New(insecurerand.NewSource(a.GetClock().Now().UnixNano())) rc, err := types.NewRemoteCluster("rc") require.NoError(t, err) @@ -53,7 +51,7 @@ func TestRemoteClusterStatus(t *testing.T) { // This scenario deals with only one remote cluster, so it never hits the limit on status updates. // TestRefreshRemoteClusters focuses on verifying the update limit logic. - a.refreshRemoteClusters(ctx, rnd) + a.refreshRemoteClusters(ctx) wantRC := rc // Initially, no tunnels exist and status should be "offline". @@ -83,7 +81,7 @@ func TestRemoteClusterStatus(t *testing.T) { require.NoError(t, err) require.NoError(t, a.UpsertTunnelConnection(tc2)) - a.refreshRemoteClusters(ctx, rnd) + a.refreshRemoteClusters(ctx) // With active tunnels, the status is "online" and last_heartbeat is set to // the latest tunnel heartbeat. @@ -96,7 +94,7 @@ func TestRemoteClusterStatus(t *testing.T) { // Delete the latest connection. require.NoError(t, a.DeleteTunnelConnection(tc2.GetClusterName(), tc2.GetName())) - a.refreshRemoteClusters(ctx, rnd) + a.refreshRemoteClusters(ctx) // The status should remain the same, since tc1 still exists. // The last_heartbeat should remain the same, since tc1 has an older @@ -109,7 +107,7 @@ func TestRemoteClusterStatus(t *testing.T) { // Delete the remaining connection require.NoError(t, a.DeleteTunnelConnection(tc1.GetClusterName(), tc1.GetName())) - a.refreshRemoteClusters(ctx, rnd) + a.refreshRemoteClusters(ctx) // The status should switch to "offline". // The last_heartbeat should remain the same. @@ -162,7 +160,6 @@ func TestRefreshRemoteClusters(t *testing.T) { require.LessOrEqual(t, tt.clustersNeedUpdate, tt.clustersTotal) a := newTestAuthServer(ctx, t) - rnd := insecurerand.New(insecurerand.NewSource(a.GetClock().Now().UnixNano())) allClusters := make(map[string]types.RemoteCluster) for i := 0; i < tt.clustersTotal; i++ { @@ -186,7 +183,7 @@ func TestRefreshRemoteClusters(t *testing.T) { } } - a.refreshRemoteClusters(ctx, rnd) + a.refreshRemoteClusters(ctx) clusters, err := a.GetRemoteClusters(ctx) require.NoError(t, err) diff --git a/lib/auth/usertoken_test.go b/lib/auth/usertoken_test.go index e7482fc2ce4f0..4592f95955d41 100644 --- a/lib/auth/usertoken_test.go +++ b/lib/auth/usertoken_test.go @@ -22,7 +22,7 @@ import ( "context" "encoding/base32" "fmt" - "math/rand" + "math/rand/v2" "testing" "time" diff --git a/lib/autoupdate/agent/config.go b/lib/autoupdate/agent/config.go index 334d1089ab7f4..a13b475f59720 100644 --- a/lib/autoupdate/agent/config.go +++ b/lib/autoupdate/agent/config.go @@ -19,98 +19,187 @@ package agent import ( - "context" - "log/slog" + "errors" + "io/fs" "os" - "path/filepath" - "text/template" + "strings" + "time" "github.com/google/renameio/v2" "github.com/gravitational/trace" + "gopkg.in/yaml.v3" ) const ( - updateServiceTemplate = `# teleport-update -[Unit] -Description=Teleport auto-update service - -[Service] -Type=oneshot -ExecStart={{.LinkDir}}/bin/teleport-update update -` - updateTimerTemplate = `# teleport-update -[Unit] -Description=Teleport auto-update timer unit - -[Timer] -OnActiveSec=1m -OnUnitActiveSec=5m -RandomizedDelaySec=1m - -[Install] -WantedBy=teleport.service -` + // updateConfigName specifies the name of the file inside versionsDirName containing configuration for the teleport update. + updateConfigName = "update.yaml" + + // UpdateConfig metadata + updateConfigVersion = "v1" + updateConfigKind = "update_config" ) -// Setup installs service and timer files for the teleport-update binary. -// Afterwords, Setup reloads systemd and enables the timer with --now. -func Setup(ctx context.Context, log *slog.Logger, linkDir, dataDir string) error { - err := writeConfigFiles(linkDir, dataDir) +// UpdateConfig describes the update.yaml file schema. +type UpdateConfig struct { + // Version of the configuration file + Version string `yaml:"version"` + // Kind of configuration file (always "update_config") + Kind string `yaml:"kind"` + // Spec contains user-specified configuration. + Spec UpdateSpec `yaml:"spec"` + // Status contains state configuration. + Status UpdateStatus `yaml:"status"` +} + +// UpdateSpec describes the spec field in update.yaml. +type UpdateSpec struct { + // Proxy address + Proxy string `yaml:"proxy"` + // Group specifies the update group identifier for the agent. + Group string `yaml:"group,omitempty"` + // URLTemplate for the Teleport tgz download URL. + URLTemplate string `yaml:"url_template,omitempty"` + // Enabled controls whether auto-updates are enabled. + Enabled bool `yaml:"enabled"` + // Pinned controls whether the active_version is pinned. + Pinned bool `yaml:"pinned"` +} + +// UpdateStatus describes the status field in update.yaml. +type UpdateStatus struct { + // ActiveVersion is the currently active Teleport version. + ActiveVersion string `yaml:"active_version"` + // BackupVersion is the last working version of Teleport. + BackupVersion string `yaml:"backup_version"` + // SkipVersion is the last reverted version of Teleport. + SkipVersion string `yaml:"skip_version,omitempty"` +} + +// readConfig reads UpdateConfig from a file. +func readConfig(path string) (*UpdateConfig, error) { + f, err := os.Open(path) + if errors.Is(err, fs.ErrNotExist) { + return &UpdateConfig{ + Version: updateConfigVersion, + Kind: updateConfigKind, + }, nil + } if err != nil { - return trace.Errorf("failed to write teleport-update systemd config files: %w", err) + return nil, trace.Errorf("failed to open: %w", err) } - svc := &SystemdService{ - ServiceName: "teleport-update.timer", - Log: log, + defer f.Close() + var cfg UpdateConfig + if err := yaml.NewDecoder(f).Decode(&cfg); err != nil { + return nil, trace.Errorf("failed to parse: %w", err) } - if err := svc.Sync(ctx); err != nil { - return trace.Errorf("failed to sync systemd config: %w", err) + if k := cfg.Kind; k != updateConfigKind { + return nil, trace.Errorf("invalid kind %q", k) } - if err := svc.Enable(ctx, true); err != nil { - return trace.Errorf("failed to enable teleport-update systemd timer: %w", err) + if v := cfg.Version; v != updateConfigVersion { + return nil, trace.Errorf("invalid version %q", v) } - return nil + return &cfg, nil } -func writeConfigFiles(linkDir, dataDir string) error { - servicePath := filepath.Join(linkDir, serviceDir, updateServiceName) - err := writeTemplate(servicePath, updateServiceTemplate, linkDir, dataDir) +// writeConfig writes UpdateConfig to a file atomically, ensuring the file cannot be corrupted. +func writeConfig(filename string, cfg *UpdateConfig) error { + opts := []renameio.Option{ + renameio.WithPermissions(configFileMode), + renameio.WithExistingPermissions(), + } + t, err := renameio.NewPendingFile(filename, opts...) if err != nil { return trace.Wrap(err) } - timerPath := filepath.Join(linkDir, serviceDir, updateTimerName) - err = writeTemplate(timerPath, updateTimerTemplate, linkDir, dataDir) + defer t.Cleanup() + err = yaml.NewEncoder(t).Encode(cfg) if err != nil { return trace.Wrap(err) } - return nil + return trace.Wrap(t.CloseAtomicallyReplace()) } -func writeTemplate(path, t, linkDir, dataDir string) error { - dir, file := filepath.Split(path) - if err := os.MkdirAll(dir, systemDirMode); err != nil { - return trace.Wrap(err) +func validateConfigSpec(spec *UpdateSpec, override OverrideConfig) error { + if override.Proxy != "" { + spec.Proxy = override.Proxy } - opts := []renameio.Option{ - renameio.WithPermissions(configFileMode), - renameio.WithExistingPermissions(), + if override.Group != "" { + spec.Group = override.Group } - f, err := renameio.NewPendingFile(path, opts...) - if err != nil { - return trace.Wrap(err) + switch override.URLTemplate { + case "": + case "default": + spec.URLTemplate = "" + default: + spec.URLTemplate = override.URLTemplate + } + if spec.URLTemplate != "" && + !strings.HasPrefix(strings.ToLower(spec.URLTemplate), "https://") { + return trace.Errorf("Teleport download URL must use TLS (https://)") } - defer f.Cleanup() + if override.Enabled { + spec.Enabled = true + } + if override.Pinned { + spec.Pinned = true + } + return nil +} - tmpl, err := template.New(file).Parse(t) - if err != nil { - return trace.Wrap(err) +// Status of the agent auto-updates system. +type Status struct { + UpdateSpec `yaml:",inline"` + UpdateStatus `yaml:",inline"` + FindResp `yaml:",inline"` +} + +// FindResp summarizes the auto-update status response from cluster. +type FindResp struct { + // Version of Teleport to install + TargetVersion string `yaml:"target_version"` + // Flags describing the edition of Teleport + Flags InstallFlags `yaml:"flags"` + // InWindow is true when the install should happen now. + InWindow bool `yaml:"in_window"` + // Jitter duration before an automated install + Jitter time.Duration `yaml:"jitter"` +} + +// InstallFlags sets flags for the Teleport installation +type InstallFlags int + +const ( + // FlagEnterprise installs enterprise Teleport + FlagEnterprise InstallFlags = 1 << iota + // FlagFIPS installs FIPS Teleport + FlagFIPS +) + +func (i InstallFlags) MarshalYAML() (any, error) { + return i.Strings(), nil +} + +func (i InstallFlags) Strings() []string { + var out []string + for _, flag := range []InstallFlags{ + FlagEnterprise, + FlagFIPS, + } { + if i&flag != 0 { + out = append(out, flag.String()) + } } - err = tmpl.Execute(f, struct { - LinkDir string - DataDir string - }{linkDir, dataDir}) - if err != nil { - return trace.Wrap(err) + return out +} + +func (i InstallFlags) String() string { + switch i { + case 0: + return "" + case FlagEnterprise: + return "Enterprise" + case FlagFIPS: + return "FIPS" } - return trace.Wrap(f.CloseAtomicallyReplace()) + return "Unknown" } diff --git a/lib/autoupdate/agent/installer.go b/lib/autoupdate/agent/installer.go index f03401063a3b8..a723b02aa3379 100644 --- a/lib/autoupdate/agent/installer.go +++ b/lib/autoupdate/agent/installer.go @@ -39,6 +39,7 @@ import ( "github.com/google/renameio/v2" "github.com/gravitational/trace" + "github.com/gravitational/teleport" "github.com/gravitational/teleport/lib/utils" ) @@ -443,6 +444,46 @@ func (li *LocalInstaller) LinkSystem(ctx context.Context) (revert func(context.C return revert, trace.Wrap(err) } +// TryLink links the specified version, but only in the case that +// no installation of Teleport is already linked or partially linked. +// See Installer interface for additional specs. +func (li *LocalInstaller) TryLink(ctx context.Context, version string) error { + versionDir, err := li.versionDir(version) + if err != nil { + return trace.Wrap(err) + } + return trace.Wrap(li.tryLinks(ctx, + filepath.Join(versionDir, "bin"), + filepath.Join(versionDir, serviceDir), + )) +} + +// TryLinkSystem links the system installation, but only in the case that +// no installation of Teleport is already linked or partially linked. +// See Installer interface for additional specs. +func (li *LocalInstaller) TryLinkSystem(ctx context.Context) error { + return trace.Wrap(li.tryLinks(ctx, li.SystemBinDir, li.SystemServiceDir)) +} + +// Unlink unlinks a version from LinkBinDir and LinkServiceDir. +// See Installer interface for additional specs. +func (li *LocalInstaller) Unlink(ctx context.Context, version string) error { + versionDir, err := li.versionDir(version) + if err != nil { + return trace.Wrap(err) + } + return trace.Wrap(li.removeLinks(ctx, + filepath.Join(versionDir, "bin"), + filepath.Join(versionDir, serviceDir), + )) +} + +// UnlinkSystem unlinks the system (package) version from LinkBinDir and LinkServiceDir. +// See Installer interface for additional specs. +func (li *LocalInstaller) UnlinkSystem(ctx context.Context) error { + return trace.Wrap(li.removeLinks(ctx, li.SystemBinDir, li.SystemServiceDir)) +} + // symlink from oldname to newname type symlink struct { oldname, newname string @@ -640,25 +681,67 @@ func readFileN(name string, n int64) ([]byte, error) { return data, trace.Wrap(err) } -// TryLink links the specified version, but only in the case that -// no installation of Teleport is already linked or partially linked. -// See Installer interface for additional specs. -func (li *LocalInstaller) TryLink(ctx context.Context, version string) error { - versionDir, err := li.versionDir(version) +func (li *LocalInstaller) removeLinks(ctx context.Context, binDir, svcDir string) error { + removeService := false + entries, err := os.ReadDir(binDir) + if err != nil { + return trace.Errorf("failed to find Teleport binary directory: %w", err) + } + for _, entry := range entries { + if entry.IsDir() { + continue + } + oldname := filepath.Join(binDir, entry.Name()) + newname := filepath.Join(li.LinkBinDir, entry.Name()) + v, err := os.Readlink(newname) + if errors.Is(err, os.ErrNotExist) || + errors.Is(err, os.ErrInvalid) || + errors.Is(err, syscall.EINVAL) { + li.Log.DebugContext(ctx, "Link not present.", "oldname", oldname, "newname", newname) + continue + } + if err != nil { + return trace.Errorf("error reading link for %s: %w", filepath.Base(newname), err) + } + if v != oldname { + li.Log.DebugContext(ctx, "Skipping link to different binary.", "oldname", oldname, "newname", newname) + continue + } + if err := os.Remove(newname); err != nil { + li.Log.ErrorContext(ctx, "Unable to remove link.", "oldname", oldname, "newname", newname, errorKey, err) + continue + } + if filepath.Base(newname) == teleport.ComponentTeleport { + removeService = true + } + } + // only remove service if teleport was removed + if !removeService { + li.Log.DebugContext(ctx, "Teleport binary not unlinked. Skipping removal of teleport.service.") + return nil + } + src := filepath.Join(svcDir, serviceName) + srcBytes, err := readFileN(src, maxServiceFileSize) if err != nil { return trace.Wrap(err) } - return trace.Wrap(li.tryLinks(ctx, - filepath.Join(versionDir, "bin"), - filepath.Join(versionDir, serviceDir), - )) -} - -// TryLinkSystem links the system installation, but only in the case that -// no installation of Teleport is already linked or partially linked. -// See Installer interface for additional specs. -func (li *LocalInstaller) TryLinkSystem(ctx context.Context) error { - return trace.Wrap(li.tryLinks(ctx, li.SystemBinDir, li.SystemServiceDir)) + dst := filepath.Join(li.LinkServiceDir, serviceName) + dstBytes, err := readFileN(dst, maxServiceFileSize) + if errors.Is(err, os.ErrNotExist) { + li.Log.DebugContext(ctx, "Service not present.", "path", dst) + return nil + } + if err != nil { + return trace.Wrap(err) + } + if !bytes.Equal(srcBytes, dstBytes) { + li.Log.WarnContext(ctx, "Removed teleport binary link, but skipping removal of custom teleport.service: the service file does not match the reference file for this version. The file might have been manually edited.") + return nil + } + if err := os.Remove(dst); err != nil { + return trace.Errorf("error removing copy of %s: %w", filepath.Base(dst), err) + } + return nil } // tryLinks create binary and service links for files in binDir and svcDir if links are not already present. diff --git a/lib/autoupdate/agent/installer_test.go b/lib/autoupdate/agent/installer_test.go index ee9701ac2202c..9b9c9b268490e 100644 --- a/lib/autoupdate/agent/installer_test.go +++ b/lib/autoupdate/agent/installer_test.go @@ -32,6 +32,7 @@ import ( "os" "path/filepath" "runtime" + "slices" "strconv" "strings" "testing" @@ -393,7 +394,7 @@ func TestLocalInstaller_Link(t *testing.T) { installer := &LocalInstaller{ InstallDir: versionsDir, LinkBinDir: filepath.Join(linkDir, "bin"), - LinkServiceDir: filepath.Join(linkDir, "lib/systemd/system"), + LinkServiceDir: filepath.Join(linkDir, serviceDir), Log: slog.Default(), } ctx := context.Background() @@ -635,7 +636,7 @@ func TestLocalInstaller_TryLink(t *testing.T) { installer := &LocalInstaller{ InstallDir: versionsDir, LinkBinDir: filepath.Join(linkDir, "bin"), - LinkServiceDir: filepath.Join(linkDir, "lib/systemd/system"), + LinkServiceDir: filepath.Join(linkDir, serviceDir), Log: slog.Default(), } ctx := context.Background() @@ -773,8 +774,8 @@ func TestLocalInstaller_Remove(t *testing.T) { installer := &LocalInstaller{ InstallDir: versionsDir, - LinkBinDir: linkDir, - LinkServiceDir: linkDir, + LinkBinDir: filepath.Join(linkDir, "bin"), + LinkServiceDir: filepath.Join(linkDir, serviceDir), Log: slog.Default(), } ctx := context.Background() @@ -796,6 +797,185 @@ func TestLocalInstaller_Remove(t *testing.T) { } } +func TestLocalInstaller_Unlink(t *testing.T) { + t.Parallel() + const version = "existing-version" + servicePath := filepath.Join(serviceDir, serviceName) + + tests := []struct { + name string + bins []string + svcOrig []byte + + links []symlink + svcCopy []byte + + remaining []string + errMatch string + }{ + { + name: "normal", + bins: []string{"teleport", "tsh"}, + svcOrig: []byte("orig"), + links: []symlink{ + {oldname: "bin/teleport", newname: "bin/teleport"}, + {oldname: "bin/tsh", newname: "bin/tsh"}, + }, + svcCopy: []byte("orig"), + }, + { + name: "different services", + bins: []string{"teleport", "tsh"}, + svcOrig: []byte("orig"), + links: []symlink{ + {oldname: "bin/teleport", newname: "bin/teleport"}, + {oldname: "bin/tsh", newname: "bin/tsh"}, + }, + svcCopy: []byte("custom"), + remaining: []string{servicePath}, + }, + { + name: "missing target service", + bins: []string{"teleport", "tsh"}, + svcOrig: []byte("orig"), + links: []symlink{ + {oldname: "bin/teleport", newname: "bin/teleport"}, + {oldname: "bin/tsh", newname: "bin/tsh"}, + }, + }, + { + name: "missing source service", + bins: []string{"teleport", "tsh"}, + links: []symlink{ + {oldname: "bin/teleport", newname: "bin/teleport"}, + {oldname: "bin/tsh", newname: "bin/tsh"}, + }, + svcCopy: []byte("custom"), + remaining: []string{servicePath}, + errMatch: "no such", + }, + { + name: "missing teleport link", + bins: []string{"teleport", "tsh"}, + svcOrig: []byte("orig"), + links: []symlink{ + {oldname: "bin/tsh", newname: "bin/tsh"}, + }, + svcCopy: []byte("orig"), + remaining: []string{servicePath}, + }, + { + name: "missing other link", + bins: []string{"teleport", "tsh"}, + svcOrig: []byte("orig"), + links: []symlink{ + {oldname: "bin/teleport", newname: "bin/teleport"}, + }, + svcCopy: []byte("orig"), + }, + { + name: "wrong teleport link", + bins: []string{"teleport", "tsh"}, + svcOrig: []byte("orig"), + links: []symlink{ + {oldname: "other", newname: "bin/teleport"}, + {oldname: "bin/tsh", newname: "bin/tsh"}, + }, + svcCopy: []byte("orig"), + remaining: []string{servicePath, "bin/teleport"}, + }, + { + name: "wrong other link", + bins: []string{"teleport", "tsh"}, + svcOrig: []byte("orig"), + links: []symlink{ + {oldname: "bin/teleport", newname: "bin/teleport"}, + {oldname: "wrong", newname: "bin/tsh"}, + }, + svcCopy: []byte("orig"), + remaining: []string{"bin/tsh"}, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + versionsDir := t.TempDir() + versionDir := filepath.Join(versionsDir, version) + err := os.MkdirAll(versionDir, 0o755) + require.NoError(t, err) + linkDir := t.TempDir() + + var files []smallFile + for _, n := range tt.bins { + files = append(files, smallFile{ + name: filepath.Join(versionDir, "bin", n), + data: []byte("binary"), + mode: os.ModePerm, + }) + } + if tt.svcOrig != nil { + files = append(files, smallFile{ + name: filepath.Join(versionDir, servicePath), + data: tt.svcOrig, + mode: os.ModePerm, + }) + } + if tt.svcCopy != nil { + files = append(files, smallFile{ + name: filepath.Join(linkDir, servicePath), + data: tt.svcCopy, + mode: os.ModePerm, + }) + } + + for _, n := range files { + err = os.MkdirAll(filepath.Dir(n.name), os.ModePerm) + require.NoError(t, err) + err = os.WriteFile(n.name, n.data, n.mode) + require.NoError(t, err) + } + for _, n := range tt.links { + newname := filepath.Join(linkDir, n.newname) + oldname := filepath.Join(versionDir, n.oldname) + err = os.MkdirAll(filepath.Dir(newname), os.ModePerm) + require.NoError(t, err) + err = os.Symlink(oldname, newname) + require.NoError(t, err) + } + + installer := &LocalInstaller{ + InstallDir: versionsDir, + LinkBinDir: filepath.Join(linkDir, "bin"), + LinkServiceDir: filepath.Join(linkDir, serviceDir), + Log: slog.Default(), + } + ctx := context.Background() + err = installer.Unlink(ctx, version) + if tt.errMatch != "" { + require.Error(t, err) + assert.Contains(t, err.Error(), tt.errMatch) + } else { + require.NoError(t, err) + } + for _, n := range tt.remaining { + _, err = os.Lstat(filepath.Join(linkDir, n)) + require.NoError(t, err) + } + for _, n := range tt.links { + if slices.Contains(tt.remaining, n.newname) { + continue + } + _, err = os.Lstat(filepath.Join(linkDir, n.newname)) + require.ErrorIs(t, err, os.ErrNotExist) + } + if !slices.Contains(tt.remaining, servicePath) { + _, err = os.Lstat(filepath.Join(linkDir, servicePath)) + require.ErrorIs(t, err, os.ErrNotExist) + } + }) + } +} + func TestLocalInstaller_List(t *testing.T) { installDir := t.TempDir() versions := []string{"v1", "v2"} diff --git a/lib/autoupdate/agent/setup.go b/lib/autoupdate/agent/setup.go new file mode 100644 index 0000000000000..334d1089ab7f4 --- /dev/null +++ b/lib/autoupdate/agent/setup.go @@ -0,0 +1,116 @@ +/* + * Teleport + * Copyright (C) 2024 Gravitational, Inc. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package agent + +import ( + "context" + "log/slog" + "os" + "path/filepath" + "text/template" + + "github.com/google/renameio/v2" + "github.com/gravitational/trace" +) + +const ( + updateServiceTemplate = `# teleport-update +[Unit] +Description=Teleport auto-update service + +[Service] +Type=oneshot +ExecStart={{.LinkDir}}/bin/teleport-update update +` + updateTimerTemplate = `# teleport-update +[Unit] +Description=Teleport auto-update timer unit + +[Timer] +OnActiveSec=1m +OnUnitActiveSec=5m +RandomizedDelaySec=1m + +[Install] +WantedBy=teleport.service +` +) + +// Setup installs service and timer files for the teleport-update binary. +// Afterwords, Setup reloads systemd and enables the timer with --now. +func Setup(ctx context.Context, log *slog.Logger, linkDir, dataDir string) error { + err := writeConfigFiles(linkDir, dataDir) + if err != nil { + return trace.Errorf("failed to write teleport-update systemd config files: %w", err) + } + svc := &SystemdService{ + ServiceName: "teleport-update.timer", + Log: log, + } + if err := svc.Sync(ctx); err != nil { + return trace.Errorf("failed to sync systemd config: %w", err) + } + if err := svc.Enable(ctx, true); err != nil { + return trace.Errorf("failed to enable teleport-update systemd timer: %w", err) + } + return nil +} + +func writeConfigFiles(linkDir, dataDir string) error { + servicePath := filepath.Join(linkDir, serviceDir, updateServiceName) + err := writeTemplate(servicePath, updateServiceTemplate, linkDir, dataDir) + if err != nil { + return trace.Wrap(err) + } + timerPath := filepath.Join(linkDir, serviceDir, updateTimerName) + err = writeTemplate(timerPath, updateTimerTemplate, linkDir, dataDir) + if err != nil { + return trace.Wrap(err) + } + return nil +} + +func writeTemplate(path, t, linkDir, dataDir string) error { + dir, file := filepath.Split(path) + if err := os.MkdirAll(dir, systemDirMode); err != nil { + return trace.Wrap(err) + } + opts := []renameio.Option{ + renameio.WithPermissions(configFileMode), + renameio.WithExistingPermissions(), + } + f, err := renameio.NewPendingFile(path, opts...) + if err != nil { + return trace.Wrap(err) + } + defer f.Cleanup() + + tmpl, err := template.New(file).Parse(t) + if err != nil { + return trace.Wrap(err) + } + err = tmpl.Execute(f, struct { + LinkDir string + DataDir string + }{linkDir, dataDir}) + if err != nil { + return trace.Wrap(err) + } + return trace.Wrap(f.CloseAtomicallyReplace()) +} diff --git a/lib/autoupdate/agent/config_test.go b/lib/autoupdate/agent/setup_test.go similarity index 100% rename from lib/autoupdate/agent/config_test.go rename to lib/autoupdate/agent/setup_test.go diff --git a/lib/autoupdate/agent/testdata/TestUpdater_Disable/already_disabled.golden b/lib/autoupdate/agent/testdata/TestUpdater_Disable/already_disabled.golden index 2ddb840b01794..b05a76e619cdc 100644 --- a/lib/autoupdate/agent/testdata/TestUpdater_Disable/already_disabled.golden +++ b/lib/autoupdate/agent/testdata/TestUpdater_Disable/already_disabled.golden @@ -2,9 +2,8 @@ version: v1 kind: update_config spec: proxy: "" - group: "" - url_template: "" enabled: false + pinned: false status: active_version: "" backup_version: "" diff --git a/lib/autoupdate/agent/testdata/TestUpdater_Disable/enabled.golden b/lib/autoupdate/agent/testdata/TestUpdater_Disable/enabled.golden index 2ddb840b01794..b05a76e619cdc 100644 --- a/lib/autoupdate/agent/testdata/TestUpdater_Disable/enabled.golden +++ b/lib/autoupdate/agent/testdata/TestUpdater_Disable/enabled.golden @@ -2,9 +2,8 @@ version: v1 kind: update_config spec: proxy: "" - group: "" - url_template: "" enabled: false + pinned: false status: active_version: "" backup_version: "" diff --git a/lib/autoupdate/agent/testdata/TestUpdater_Enable/FIPS_and_Enterprise_flags.golden b/lib/autoupdate/agent/testdata/TestUpdater_Install/FIPS_and_Enterprise_flags.golden similarity index 68% rename from lib/autoupdate/agent/testdata/TestUpdater_Enable/FIPS_and_Enterprise_flags.golden rename to lib/autoupdate/agent/testdata/TestUpdater_Install/FIPS_and_Enterprise_flags.golden index d9e09a2c95d71..9c2b8ef209bbd 100644 --- a/lib/autoupdate/agent/testdata/TestUpdater_Enable/FIPS_and_Enterprise_flags.golden +++ b/lib/autoupdate/agent/testdata/TestUpdater_Install/FIPS_and_Enterprise_flags.golden @@ -2,9 +2,8 @@ version: v1 kind: update_config spec: proxy: localhost - group: "" - url_template: "" - enabled: true + enabled: false + pinned: false status: active_version: 16.3.0 backup_version: "" diff --git a/lib/autoupdate/agent/testdata/TestUpdater_Enable/backup_version_kept_for_validation.golden b/lib/autoupdate/agent/testdata/TestUpdater_Install/backup_version_kept_for_validation.golden similarity index 70% rename from lib/autoupdate/agent/testdata/TestUpdater_Enable/backup_version_kept_for_validation.golden rename to lib/autoupdate/agent/testdata/TestUpdater_Install/backup_version_kept_for_validation.golden index 77829fb91706a..715d8d3aae94d 100644 --- a/lib/autoupdate/agent/testdata/TestUpdater_Enable/backup_version_kept_for_validation.golden +++ b/lib/autoupdate/agent/testdata/TestUpdater_Install/backup_version_kept_for_validation.golden @@ -2,9 +2,8 @@ version: v1 kind: update_config spec: proxy: localhost - group: "" - url_template: "" - enabled: true + enabled: false + pinned: false status: active_version: 16.3.0 backup_version: backup-version diff --git a/lib/autoupdate/agent/testdata/TestUpdater_Enable/backup_version_removed_on_install.golden b/lib/autoupdate/agent/testdata/TestUpdater_Install/backup_version_removed_on_install.golden similarity index 70% rename from lib/autoupdate/agent/testdata/TestUpdater_Enable/backup_version_removed_on_install.golden rename to lib/autoupdate/agent/testdata/TestUpdater_Install/backup_version_removed_on_install.golden index 9dd03b7888da4..ec6bf5a101df8 100644 --- a/lib/autoupdate/agent/testdata/TestUpdater_Enable/backup_version_removed_on_install.golden +++ b/lib/autoupdate/agent/testdata/TestUpdater_Install/backup_version_removed_on_install.golden @@ -2,9 +2,8 @@ version: v1 kind: update_config spec: proxy: localhost - group: "" - url_template: "" - enabled: true + enabled: false + pinned: false status: active_version: 16.3.0 backup_version: old-version diff --git a/lib/autoupdate/agent/testdata/TestUpdater_Enable/config_does_not_exist.golden b/lib/autoupdate/agent/testdata/TestUpdater_Install/config_does_not_exist.golden similarity index 68% rename from lib/autoupdate/agent/testdata/TestUpdater_Enable/config_does_not_exist.golden rename to lib/autoupdate/agent/testdata/TestUpdater_Install/config_does_not_exist.golden index d9e09a2c95d71..9c2b8ef209bbd 100644 --- a/lib/autoupdate/agent/testdata/TestUpdater_Enable/config_does_not_exist.golden +++ b/lib/autoupdate/agent/testdata/TestUpdater_Install/config_does_not_exist.golden @@ -2,9 +2,8 @@ version: v1 kind: update_config spec: proxy: localhost - group: "" - url_template: "" - enabled: true + enabled: false + pinned: false status: active_version: 16.3.0 backup_version: "" diff --git a/lib/autoupdate/agent/testdata/TestUpdater_Enable/config_from_file.golden b/lib/autoupdate/agent/testdata/TestUpdater_Install/config_from_file.golden similarity index 91% rename from lib/autoupdate/agent/testdata/TestUpdater_Enable/config_from_file.golden rename to lib/autoupdate/agent/testdata/TestUpdater_Install/config_from_file.golden index 61e41f76ca234..d63e09b2fa155 100644 --- a/lib/autoupdate/agent/testdata/TestUpdater_Enable/config_from_file.golden +++ b/lib/autoupdate/agent/testdata/TestUpdater_Install/config_from_file.golden @@ -5,6 +5,7 @@ spec: group: group url_template: https://example.com enabled: true + pinned: false status: active_version: 16.3.0 backup_version: old-version diff --git a/lib/autoupdate/agent/testdata/TestUpdater_Enable/config_from_user.golden b/lib/autoupdate/agent/testdata/TestUpdater_Install/config_from_user.golden similarity index 92% rename from lib/autoupdate/agent/testdata/TestUpdater_Enable/config_from_user.golden rename to lib/autoupdate/agent/testdata/TestUpdater_Install/config_from_user.golden index c1f0fd166b497..52b33b0111955 100644 --- a/lib/autoupdate/agent/testdata/TestUpdater_Enable/config_from_user.golden +++ b/lib/autoupdate/agent/testdata/TestUpdater_Install/config_from_user.golden @@ -5,6 +5,7 @@ spec: group: new-group url_template: https://example.com/new enabled: true + pinned: false status: active_version: new-version backup_version: old-version diff --git a/lib/autoupdate/agent/testdata/TestUpdater_Enable/already_enabled.golden b/lib/autoupdate/agent/testdata/TestUpdater_Install/defaults.golden similarity index 70% rename from lib/autoupdate/agent/testdata/TestUpdater_Enable/already_enabled.golden rename to lib/autoupdate/agent/testdata/TestUpdater_Install/defaults.golden index 9dd03b7888da4..ec6bf5a101df8 100644 --- a/lib/autoupdate/agent/testdata/TestUpdater_Enable/already_enabled.golden +++ b/lib/autoupdate/agent/testdata/TestUpdater_Install/defaults.golden @@ -2,9 +2,8 @@ version: v1 kind: update_config spec: proxy: localhost - group: "" - url_template: "" - enabled: true + enabled: false + pinned: false status: active_version: 16.3.0 backup_version: old-version diff --git a/lib/autoupdate/agent/testdata/TestUpdater_Enable/insecure_URL.golden b/lib/autoupdate/agent/testdata/TestUpdater_Install/insecure_URL.golden similarity index 90% rename from lib/autoupdate/agent/testdata/TestUpdater_Enable/insecure_URL.golden rename to lib/autoupdate/agent/testdata/TestUpdater_Install/insecure_URL.golden index d3da980a1afde..4de09b7eeb217 100644 --- a/lib/autoupdate/agent/testdata/TestUpdater_Enable/insecure_URL.golden +++ b/lib/autoupdate/agent/testdata/TestUpdater_Install/insecure_URL.golden @@ -2,9 +2,9 @@ version: v1 kind: update_config spec: proxy: "" - group: "" url_template: http://example.com enabled: false + pinned: false status: active_version: "" backup_version: "" diff --git a/lib/autoupdate/agent/testdata/TestUpdater_Enable/install_error.golden b/lib/autoupdate/agent/testdata/TestUpdater_Install/install_error.golden similarity index 78% rename from lib/autoupdate/agent/testdata/TestUpdater_Enable/install_error.golden rename to lib/autoupdate/agent/testdata/TestUpdater_Install/install_error.golden index 2ddb840b01794..b05a76e619cdc 100644 --- a/lib/autoupdate/agent/testdata/TestUpdater_Enable/install_error.golden +++ b/lib/autoupdate/agent/testdata/TestUpdater_Install/install_error.golden @@ -2,9 +2,8 @@ version: v1 kind: update_config spec: proxy: "" - group: "" - url_template: "" enabled: false + pinned: false status: active_version: "" backup_version: "" diff --git a/lib/autoupdate/agent/testdata/TestUpdater_Enable/invalid_metadata.golden b/lib/autoupdate/agent/testdata/TestUpdater_Install/invalid_metadata.golden similarity index 76% rename from lib/autoupdate/agent/testdata/TestUpdater_Enable/invalid_metadata.golden rename to lib/autoupdate/agent/testdata/TestUpdater_Install/invalid_metadata.golden index df0c99fe5fe7e..91cb5de367475 100644 --- a/lib/autoupdate/agent/testdata/TestUpdater_Enable/invalid_metadata.golden +++ b/lib/autoupdate/agent/testdata/TestUpdater_Install/invalid_metadata.golden @@ -2,9 +2,8 @@ version: "" kind: "" spec: proxy: "" - group: "" - url_template: "" enabled: false + pinned: false status: active_version: "" backup_version: "" diff --git a/lib/autoupdate/agent/testdata/TestUpdater_Install/override_skip.golden b/lib/autoupdate/agent/testdata/TestUpdater_Install/override_skip.golden new file mode 100644 index 0000000000000..ec6bf5a101df8 --- /dev/null +++ b/lib/autoupdate/agent/testdata/TestUpdater_Install/override_skip.golden @@ -0,0 +1,9 @@ +version: v1 +kind: update_config +spec: + proxy: localhost + enabled: false + pinned: false +status: + active_version: 16.3.0 + backup_version: old-version diff --git a/lib/autoupdate/agent/testdata/TestUpdater_Enable/version_already_installed.golden b/lib/autoupdate/agent/testdata/TestUpdater_Install/version_already_installed.golden similarity index 68% rename from lib/autoupdate/agent/testdata/TestUpdater_Enable/version_already_installed.golden rename to lib/autoupdate/agent/testdata/TestUpdater_Install/version_already_installed.golden index d9e09a2c95d71..9c2b8ef209bbd 100644 --- a/lib/autoupdate/agent/testdata/TestUpdater_Enable/version_already_installed.golden +++ b/lib/autoupdate/agent/testdata/TestUpdater_Install/version_already_installed.golden @@ -2,9 +2,8 @@ version: v1 kind: update_config spec: proxy: localhost - group: "" - url_template: "" - enabled: true + enabled: false + pinned: false status: active_version: 16.3.0 backup_version: "" diff --git a/lib/autoupdate/agent/testdata/TestUpdater_Unpin/not_pinned.golden b/lib/autoupdate/agent/testdata/TestUpdater_Unpin/not_pinned.golden new file mode 100644 index 0000000000000..b05a76e619cdc --- /dev/null +++ b/lib/autoupdate/agent/testdata/TestUpdater_Unpin/not_pinned.golden @@ -0,0 +1,9 @@ +version: v1 +kind: update_config +spec: + proxy: "" + enabled: false + pinned: false +status: + active_version: "" + backup_version: "" diff --git a/lib/autoupdate/agent/testdata/TestUpdater_Unpin/pinned.golden b/lib/autoupdate/agent/testdata/TestUpdater_Unpin/pinned.golden new file mode 100644 index 0000000000000..b05a76e619cdc --- /dev/null +++ b/lib/autoupdate/agent/testdata/TestUpdater_Unpin/pinned.golden @@ -0,0 +1,9 @@ +version: v1 +kind: update_config +spec: + proxy: "" + enabled: false + pinned: false +status: + active_version: "" + backup_version: "" diff --git a/lib/autoupdate/agent/testdata/TestUpdater_Update/FIPS_and_Enterprise_flags.golden b/lib/autoupdate/agent/testdata/TestUpdater_Update/FIPS_and_Enterprise_flags.golden index 066926264d28e..0f0663cdaffc8 100644 --- a/lib/autoupdate/agent/testdata/TestUpdater_Update/FIPS_and_Enterprise_flags.golden +++ b/lib/autoupdate/agent/testdata/TestUpdater_Update/FIPS_and_Enterprise_flags.golden @@ -2,9 +2,9 @@ version: v1 kind: update_config spec: proxy: localhost - group: "" url_template: https://example.com enabled: true + pinned: false status: active_version: 16.3.0 backup_version: old-version diff --git a/lib/autoupdate/agent/testdata/TestUpdater_Update/backup_version_kept_when_no_change.golden b/lib/autoupdate/agent/testdata/TestUpdater_Update/backup_version_kept_when_no_change.golden index 646397b4713d7..c56612e230890 100644 --- a/lib/autoupdate/agent/testdata/TestUpdater_Update/backup_version_kept_when_no_change.golden +++ b/lib/autoupdate/agent/testdata/TestUpdater_Update/backup_version_kept_when_no_change.golden @@ -2,9 +2,9 @@ version: v1 kind: update_config spec: proxy: localhost - group: "" url_template: https://example.com enabled: true + pinned: false status: active_version: 16.3.0 backup_version: backup-version diff --git a/lib/autoupdate/agent/testdata/TestUpdater_Update/backup_version_removed_on_install.golden b/lib/autoupdate/agent/testdata/TestUpdater_Update/backup_version_removed_on_install.golden index 066926264d28e..0f0663cdaffc8 100644 --- a/lib/autoupdate/agent/testdata/TestUpdater_Update/backup_version_removed_on_install.golden +++ b/lib/autoupdate/agent/testdata/TestUpdater_Update/backup_version_removed_on_install.golden @@ -2,9 +2,9 @@ version: v1 kind: update_config spec: proxy: localhost - group: "" url_template: https://example.com enabled: true + pinned: false status: active_version: 16.3.0 backup_version: old-version diff --git a/lib/autoupdate/agent/testdata/TestUpdater_Update/insecure_URL.golden b/lib/autoupdate/agent/testdata/TestUpdater_Update/insecure_URL.golden index 6ff42e075b57a..1078bb7378840 100644 --- a/lib/autoupdate/agent/testdata/TestUpdater_Update/insecure_URL.golden +++ b/lib/autoupdate/agent/testdata/TestUpdater_Update/insecure_URL.golden @@ -2,9 +2,9 @@ version: v1 kind: update_config spec: proxy: localhost - group: "" url_template: http://example.com enabled: true + pinned: false status: active_version: "" backup_version: "" diff --git a/lib/autoupdate/agent/testdata/TestUpdater_Update/install_error.golden b/lib/autoupdate/agent/testdata/TestUpdater_Update/install_error.golden index 3b9e19637eef5..85c50cbb4b1e0 100644 --- a/lib/autoupdate/agent/testdata/TestUpdater_Update/install_error.golden +++ b/lib/autoupdate/agent/testdata/TestUpdater_Update/install_error.golden @@ -2,9 +2,8 @@ version: v1 kind: update_config spec: proxy: localhost - group: "" - url_template: "" enabled: true + pinned: false status: active_version: "" backup_version: "" diff --git a/lib/autoupdate/agent/testdata/TestUpdater_Update/invalid_metadata.golden b/lib/autoupdate/agent/testdata/TestUpdater_Update/invalid_metadata.golden index e47fe44a13da0..99be1fccf2fd7 100644 --- a/lib/autoupdate/agent/testdata/TestUpdater_Update/invalid_metadata.golden +++ b/lib/autoupdate/agent/testdata/TestUpdater_Update/invalid_metadata.golden @@ -2,9 +2,8 @@ version: "" kind: "" spec: proxy: localhost - group: "" - url_template: "" enabled: false + pinned: false status: active_version: "" backup_version: "" diff --git a/lib/autoupdate/agent/testdata/TestUpdater_Update/pinned_version.golden b/lib/autoupdate/agent/testdata/TestUpdater_Update/pinned_version.golden new file mode 100644 index 0000000000000..ec80fb388511c --- /dev/null +++ b/lib/autoupdate/agent/testdata/TestUpdater_Update/pinned_version.golden @@ -0,0 +1,10 @@ +version: v1 +kind: update_config +spec: + proxy: localhost + url_template: https://example.com + enabled: true + pinned: true +status: + active_version: old-version + backup_version: backup-version diff --git a/lib/autoupdate/agent/testdata/TestUpdater_Update/reload_fails.golden b/lib/autoupdate/agent/testdata/TestUpdater_Update/reload_fails.golden index 3628297dd9443..8451c7aae551b 100644 --- a/lib/autoupdate/agent/testdata/TestUpdater_Update/reload_fails.golden +++ b/lib/autoupdate/agent/testdata/TestUpdater_Update/reload_fails.golden @@ -2,9 +2,10 @@ version: v1 kind: update_config spec: proxy: localhost - group: "" url_template: https://example.com enabled: true + pinned: false status: active_version: old-version backup_version: backup-version + skip_version: 16.3.0 diff --git a/lib/autoupdate/agent/testdata/TestUpdater_Update/setup_fails.golden b/lib/autoupdate/agent/testdata/TestUpdater_Update/setup_fails.golden index 3628297dd9443..8451c7aae551b 100644 --- a/lib/autoupdate/agent/testdata/TestUpdater_Update/setup_fails.golden +++ b/lib/autoupdate/agent/testdata/TestUpdater_Update/setup_fails.golden @@ -2,9 +2,10 @@ version: v1 kind: update_config spec: proxy: localhost - group: "" url_template: https://example.com enabled: true + pinned: false status: active_version: old-version backup_version: backup-version + skip_version: 16.3.0 diff --git a/lib/autoupdate/agent/testdata/TestUpdater_Update/skip_version.golden b/lib/autoupdate/agent/testdata/TestUpdater_Update/skip_version.golden new file mode 100644 index 0000000000000..8451c7aae551b --- /dev/null +++ b/lib/autoupdate/agent/testdata/TestUpdater_Update/skip_version.golden @@ -0,0 +1,11 @@ +version: v1 +kind: update_config +spec: + proxy: localhost + url_template: https://example.com + enabled: true + pinned: false +status: + active_version: old-version + backup_version: backup-version + skip_version: 16.3.0 diff --git a/lib/autoupdate/agent/testdata/TestUpdater_Update/updates_disabled_during_window.golden b/lib/autoupdate/agent/testdata/TestUpdater_Update/updates_disabled_during_window.golden index dc449aab8503e..41bab44393b8d 100644 --- a/lib/autoupdate/agent/testdata/TestUpdater_Update/updates_disabled_during_window.golden +++ b/lib/autoupdate/agent/testdata/TestUpdater_Update/updates_disabled_during_window.golden @@ -5,6 +5,7 @@ spec: group: group url_template: https://example.com enabled: false + pinned: false status: active_version: old-version backup_version: "" diff --git a/lib/autoupdate/agent/testdata/TestUpdater_Update/updates_disabled_outside_of_window.golden b/lib/autoupdate/agent/testdata/TestUpdater_Update/updates_disabled_outside_of_window.golden index dc449aab8503e..41bab44393b8d 100644 --- a/lib/autoupdate/agent/testdata/TestUpdater_Update/updates_disabled_outside_of_window.golden +++ b/lib/autoupdate/agent/testdata/TestUpdater_Update/updates_disabled_outside_of_window.golden @@ -5,6 +5,7 @@ spec: group: group url_template: https://example.com enabled: false + pinned: false status: active_version: old-version backup_version: "" diff --git a/lib/autoupdate/agent/testdata/TestUpdater_Update/updates_enabled_during_window.golden b/lib/autoupdate/agent/testdata/TestUpdater_Update/updates_enabled_during_window.golden index 61e41f76ca234..d63e09b2fa155 100644 --- a/lib/autoupdate/agent/testdata/TestUpdater_Update/updates_enabled_during_window.golden +++ b/lib/autoupdate/agent/testdata/TestUpdater_Update/updates_enabled_during_window.golden @@ -5,6 +5,7 @@ spec: group: group url_template: https://example.com enabled: true + pinned: false status: active_version: 16.3.0 backup_version: old-version diff --git a/lib/autoupdate/agent/testdata/TestUpdater_Update/updates_enabled_outside_of_window.golden b/lib/autoupdate/agent/testdata/TestUpdater_Update/updates_enabled_outside_of_window.golden index 802c475ba90f4..3d0ead7bbfe4d 100644 --- a/lib/autoupdate/agent/testdata/TestUpdater_Update/updates_enabled_outside_of_window.golden +++ b/lib/autoupdate/agent/testdata/TestUpdater_Update/updates_enabled_outside_of_window.golden @@ -5,6 +5,7 @@ spec: group: group url_template: https://example.com enabled: true + pinned: false status: active_version: old-version backup_version: "" diff --git a/lib/autoupdate/agent/testdata/TestUpdater_Update/version_already_installed_in_window.golden b/lib/autoupdate/agent/testdata/TestUpdater_Update/version_already_installed_in_window.golden index 6e16d193a8eb0..09cfd0264e561 100644 --- a/lib/autoupdate/agent/testdata/TestUpdater_Update/version_already_installed_in_window.golden +++ b/lib/autoupdate/agent/testdata/TestUpdater_Update/version_already_installed_in_window.golden @@ -2,9 +2,9 @@ version: v1 kind: update_config spec: proxy: localhost - group: "" url_template: https://example.com enabled: true + pinned: false status: active_version: 16.3.0 backup_version: "" diff --git a/lib/autoupdate/agent/testdata/TestUpdater_Update/version_already_installed_outside_of_window.golden b/lib/autoupdate/agent/testdata/TestUpdater_Update/version_already_installed_outside_of_window.golden index 6e16d193a8eb0..09cfd0264e561 100644 --- a/lib/autoupdate/agent/testdata/TestUpdater_Update/version_already_installed_outside_of_window.golden +++ b/lib/autoupdate/agent/testdata/TestUpdater_Update/version_already_installed_outside_of_window.golden @@ -2,9 +2,9 @@ version: v1 kind: update_config spec: proxy: localhost - group: "" url_template: https://example.com enabled: true + pinned: false status: active_version: 16.3.0 backup_version: "" diff --git a/lib/autoupdate/agent/updater.go b/lib/autoupdate/agent/updater.go index 8fa5d34c246c2..73cd193124dfe 100644 --- a/lib/autoupdate/agent/updater.go +++ b/lib/autoupdate/agent/updater.go @@ -23,19 +23,15 @@ import ( "crypto/tls" "crypto/x509" "errors" - "io/fs" "log/slog" "net/http" "os" "os/exec" "path/filepath" "runtime" - "strings" "time" - "github.com/google/renameio/v2" "github.com/gravitational/trace" - "gopkg.in/yaml.v3" "github.com/gravitational/teleport/api/client/webclient" "github.com/gravitational/teleport/api/constants" @@ -72,47 +68,6 @@ const ( errorKey = "error" ) -const ( - // updateConfigName specifies the name of the file inside versionsDirName containing configuration for the teleport update. - updateConfigName = "update.yaml" - - // UpdateConfig metadata - updateConfigVersion = "v1" - updateConfigKind = "update_config" -) - -// UpdateConfig describes the update.yaml file schema. -type UpdateConfig struct { - // Version of the configuration file - Version string `yaml:"version"` - // Kind of configuration file (always "update_config") - Kind string `yaml:"kind"` - // Spec contains user-specified configuration. - Spec UpdateSpec `yaml:"spec"` - // Status contains state configuration. - Status UpdateStatus `yaml:"status"` -} - -// UpdateSpec describes the spec field in update.yaml. -type UpdateSpec struct { - // Proxy address - Proxy string `yaml:"proxy"` - // Group specifies the update group identifier for the agent. - Group string `yaml:"group"` - // URLTemplate for the Teleport tgz download URL. - URLTemplate string `yaml:"url_template"` - // Enabled controls whether auto-updates are enabled. - Enabled bool `yaml:"enabled"` -} - -// UpdateStatus describes the status field in update.yaml. -type UpdateStatus struct { - // ActiveVersion is the currently active Teleport version. - ActiveVersion string `yaml:"active_version"` - // BackupVersion is the last working version of Teleport. - BackupVersion string `yaml:"backup_version"` -} - // NewLocalUpdater returns a new Updater that auto-updates local // installations of the Teleport agent. // The AutoUpdater uses an HTTP client with sane defaults for downloads, and @@ -255,10 +210,13 @@ type Installer interface { // Unlike Link, TryLink will fail if existing links to other locations are present. // TryLink must be idempotent. TryLink(ctx context.Context, version string) error - // TryLinkSystem links the system installation of Teleport into the linking locations. + // TryLinkSystem links the system (package) installation of Teleport into the linking locations. // Unlike LinkSystem, TryLinkSystem will fail if existing links to other locations are present. // TryLinkSystem must be idempotent. TryLinkSystem(ctx context.Context) error + // UnlinkSystem unlinks the system (package) installation of Teleport from the linking locations. + // TryLinkSystem must be idempotent. + UnlinkSystem(ctx context.Context) error // List the installed versions of Teleport. List(ctx context.Context) (versions []string, err error) // Remove the Teleport agent at version. @@ -298,40 +256,23 @@ type Process interface { Sync(ctx context.Context) error } -// InstallFlags sets flags for the Teleport installation -type InstallFlags int - -// TODO(sclevine): add flags for need_restart and selinux config -const ( - // FlagEnterprise installs enterprise Teleport - FlagEnterprise InstallFlags = 1 << iota - // FlagFIPS installs FIPS Teleport - FlagFIPS -) +// TODO(sclevine): add support for need_restart and selinux config // OverrideConfig contains overrides for individual update operations. // If validated, these overrides may be persisted to disk. type OverrideConfig struct { - // Proxy address, scheme and port optional. - // Overrides existing value if specified. - Proxy string - // Group identifier for updates (e.g., staging) - // Overrides existing value if specified. - Group string - // URLTemplate for the Teleport tgz download URL - // Overrides existing value if specified. - URLTemplate string + UpdateSpec // ForceVersion to the specified version. ForceVersion string // ForceFlags in installed Teleport. ForceFlags InstallFlags } -// Enable enables agent updates and attempts an initial update. -// If the initial update succeeds, auto-updates are enabled and the configuration is persisted. -// Otherwise, the auto-updates configuration is not changed. +// Install attempts an initial installation of Teleport. +// If the initial installation succeeds, the override configuration is persisted. +// Otherwise, the configuration is not changed. // This function is idempotent. -func (u *Updater) Enable(ctx context.Context, override OverrideConfig) error { +func (u *Updater) Install(ctx context.Context, override OverrideConfig) error { // Read configuration from update.yaml and override any new values passed as flags. cfg, err := readConfig(u.ConfigPath) if err != nil { @@ -340,56 +281,42 @@ func (u *Updater) Enable(ctx context.Context, override OverrideConfig) error { if err := validateConfigSpec(&cfg.Spec, override); err != nil { return trace.Wrap(err) } - if cfg.Spec.Proxy == "" { - return trace.Errorf("Teleport proxy URL must be specified with --proxy or present in %s", updateConfigName) - } + + activeVersion := cfg.Status.ActiveVersion + skipVersion := cfg.Status.SkipVersion // Lookup target version from the proxy. - addr, err := libutils.ParseAddr(cfg.Spec.Proxy) + resp, err := u.find(ctx, cfg) if err != nil { - return trace.Errorf("failed to parse proxy server address: %w", err) - } - targetVersion := override.ForceVersion - flags := override.ForceFlags - if targetVersion == "" { - resp, err := webclient.Find(&webclient.Config{ - Context: ctx, - ProxyAddr: addr.Addr, - Insecure: u.InsecureSkipVerify, - Timeout: 30 * time.Second, - UpdateGroup: cfg.Spec.Group, - Pool: u.Pool, - }) - if err != nil { - return trace.Errorf("failed to request version from proxy: %w", err) - } - targetVersion = resp.AutoUpdate.AgentVersion - switch resp.Edition { - case modules.BuildEnterprise: - flags |= FlagEnterprise - case modules.BuildOSS, modules.BuildCommunity: - default: - u.Log.WarnContext(ctx, "Unknown edition detected, defaulting to community.", "edition", resp.Edition) - } - if resp.FIPS { - flags |= FlagFIPS - } + return trace.Wrap(err) + } + targetVersion := resp.TargetVersion + flags := resp.Flags + flags |= override.ForceFlags + if override.ForceVersion != "" { + targetVersion = override.ForceVersion } - if targetVersion == "" { + switch targetVersion { + case "": return trace.Errorf("agent version not available from Teleport cluster") + case skipVersion: + u.Log.WarnContext(ctx, "Target version was previously marked as broken. Retrying update.", targetVersionKey, targetVersion, activeVersionKey, activeVersion) + default: + u.Log.InfoContext(ctx, "Initiating installation.", targetVersionKey, targetVersion, activeVersionKey, activeVersion) } - u.Log.InfoContext(ctx, "Initiating initial update.", targetVersionKey, targetVersion, activeVersionKey, cfg.Status.ActiveVersion) - if err := u.update(ctx, cfg, targetVersion, flags); err != nil { return trace.Wrap(err) } + if targetVersion == cfg.Status.SkipVersion { + cfg.Status.SkipVersion = "" + } - // Always write the configuration file if enable succeeds. + // Only write the configuration file if the initial update succeeds. + // Note: skip_version is never set on failed enable, only failed update. - cfg.Spec.Enabled = true if err := writeConfig(u.ConfigPath, cfg); err != nil { return trace.Errorf("failed to write %s: %w", updateConfigName, err) } @@ -397,6 +324,29 @@ func (u *Updater) Enable(ctx context.Context, override OverrideConfig) error { return nil } +// Status returns all available local and remote fields related to agent auto-updates. +func (u *Updater) Status(ctx context.Context) (Status, error) { + var out Status + // Read configuration from update.yaml. + cfg, err := readConfig(u.ConfigPath) + if err != nil { + return out, trace.Errorf("failed to read %s: %w", updateConfigName, err) + } + if err := validateConfigSpec(&cfg.Spec, OverrideConfig{}); err != nil { + return out, trace.Wrap(err) + } + out.UpdateSpec = cfg.Spec + out.UpdateStatus = cfg.Status + + // Lookup target version from the proxy. + resp, err := u.find(ctx, cfg) + if err != nil { + return out, trace.Wrap(err) + } + out.FindResp = resp + return out, nil +} + // Disable disables agent auto-updates. // This function is idempotent. func (u *Updater) Disable(ctx context.Context) error { @@ -415,6 +365,24 @@ func (u *Updater) Disable(ctx context.Context) error { return nil } +// Unpin allows the current version to be changed by Update. +// This function is idempotent. +func (u *Updater) Unpin(ctx context.Context) error { + cfg, err := readConfig(u.ConfigPath) + if err != nil { + return trace.Errorf("failed to read %s: %w", updateConfigName, err) + } + if !cfg.Spec.Pinned { + u.Log.InfoContext(ctx, "Current version not pinned.", activeVersionKey, cfg.Status.ActiveVersion) + return nil + } + cfg.Spec.Pinned = false + if err := writeConfig(u.ConfigPath, cfg); err != nil { + return trace.Errorf("failed to write %s: %w", updateConfigName, err) + } + return nil +} + // Update initiates an agent update. // If the update succeeds, the new installed version is marked as active. // Otherwise, the auto-updates configuration is not changed. @@ -430,50 +398,36 @@ func (u *Updater) Update(ctx context.Context) error { return trace.Wrap(err) } activeVersion := cfg.Status.ActiveVersion + skipVersion := cfg.Status.SkipVersion if !cfg.Spec.Enabled { u.Log.InfoContext(ctx, "Automatic updates disabled.", activeVersionKey, activeVersion) return nil } - if cfg.Spec.Proxy == "" { - return trace.Errorf("Teleport proxy URL must be present in %s", updateConfigName) - } - // Lookup target version from the proxy. - - addr, err := libutils.ParseAddr(cfg.Spec.Proxy) + resp, err := u.find(ctx, cfg) if err != nil { - return trace.Errorf("failed to parse proxy server address: %w", err) - } - resp, err := webclient.Find(&webclient.Config{ - Context: ctx, - ProxyAddr: addr.Addr, - Insecure: u.InsecureSkipVerify, - Timeout: 30 * time.Second, - UpdateGroup: cfg.Spec.Group, - Pool: u.Pool, - }) - if err != nil { - return trace.Errorf("failed to request version from proxy: %w", err) - } - targetVersion := resp.AutoUpdate.AgentVersion - var flags InstallFlags - switch resp.Edition { - case modules.BuildEnterprise: - flags |= FlagEnterprise - case modules.BuildOSS, modules.BuildCommunity: - default: - u.Log.WarnContext(ctx, "Unknown edition detected, defaulting to community.", "edition", resp.Edition) + return trace.Wrap(err) } - if resp.FIPS { - flags |= FlagFIPS + targetVersion := resp.TargetVersion + + if cfg.Spec.Pinned { + switch targetVersion { + case activeVersion: + u.Log.InfoContext(ctx, "Teleport is up-to-date. Installation is pinned to prevent future updates.", activeVersionKey, activeVersion) + default: + u.Log.InfoContext(ctx, "Teleport version is pinned. Skipping update.", targetVersionKey, targetVersion, activeVersionKey, activeVersion) + } + return nil } - if !resp.AutoUpdate.AgentAutoUpdate { + if !resp.InWindow { switch targetVersion { case "": u.Log.WarnContext(ctx, "Cannot determine target agent version. Waiting for both version and update window.") case activeVersion: u.Log.InfoContext(ctx, "Teleport is up-to-date. Update window is not active.", activeVersionKey, activeVersion) + case skipVersion: + u.Log.InfoContext(ctx, "Update available, but the new version is marked as broken. Update window is not active.", targetVersionKey, targetVersion, activeVersionKey, activeVersion) default: u.Log.InfoContext(ctx, "Update available, but update window is not active.", targetVersionKey, targetVersion, activeVersionKey, activeVersion) } @@ -487,24 +441,61 @@ func (u *Updater) Update(ctx context.Context) error { case activeVersion: u.Log.InfoContext(ctx, "Teleport is up-to-date. Update window is active, but no action is needed.", activeVersionKey, activeVersion) return nil + case skipVersion: + u.Log.InfoContext(ctx, "Update available, but the new version is marked as broken. Skipping update during the update window.", targetVersionKey, targetVersion, activeVersionKey, activeVersion) + return nil default: u.Log.InfoContext(ctx, "Update available. Initiating update.", targetVersionKey, targetVersion, activeVersionKey, activeVersion) } + time.Sleep(resp.Jitter) - jitterSec := resp.AutoUpdate.AgentUpdateJitterSeconds - time.Sleep(time.Duration(jitterSec) * time.Second) - - if err := u.update(ctx, cfg, targetVersion, flags); err != nil { - return trace.Wrap(err) + updateErr := u.update(ctx, cfg, targetVersion, resp.Flags) + writeErr := writeConfig(u.ConfigPath, cfg) + if writeErr != nil { + writeErr = trace.Errorf("failed to write %s: %w", updateConfigName, writeErr) + } else { + u.Log.InfoContext(ctx, "Configuration updated.") } + return trace.NewAggregate(updateErr, writeErr) +} - // Write the configuration file if update succeeds. - - if err := writeConfig(u.ConfigPath, cfg); err != nil { - return trace.Errorf("failed to write %s: %w", updateConfigName, err) +func (u *Updater) find(ctx context.Context, cfg *UpdateConfig) (FindResp, error) { + if cfg.Spec.Proxy == "" { + return FindResp{}, trace.Errorf("Teleport proxy URL must be specified with --proxy or present in %s", updateConfigName) } - u.Log.InfoContext(ctx, "Configuration updated.") - return nil + addr, err := libutils.ParseAddr(cfg.Spec.Proxy) + if err != nil { + return FindResp{}, trace.Errorf("failed to parse proxy server address: %w", err) + } + resp, err := webclient.Find(&webclient.Config{ + Context: ctx, + ProxyAddr: addr.Addr, + Insecure: u.InsecureSkipVerify, + Timeout: 30 * time.Second, + UpdateGroup: cfg.Spec.Group, + Pool: u.Pool, + }) + if err != nil { + return FindResp{}, trace.Errorf("failed to request version from proxy: %w", err) + } + var flags InstallFlags + switch resp.Edition { + case modules.BuildEnterprise: + flags |= FlagEnterprise + case modules.BuildOSS, modules.BuildCommunity: + default: + u.Log.WarnContext(ctx, "Unknown edition detected, defaulting to community.", "edition", resp.Edition) + } + if resp.FIPS { + flags |= FlagFIPS + } + jitterSec := resp.AutoUpdate.AgentUpdateJitterSeconds + return FindResp{ + TargetVersion: resp.AutoUpdate.AgentVersion, + Flags: flags, + InWindow: resp.AutoUpdate.AgentAutoUpdate, + Jitter: time.Duration(jitterSec) * time.Second, + }, nil } func (u *Updater) update(ctx context.Context, cfg *UpdateConfig, targetVersion string, flags InstallFlags) error { @@ -548,6 +539,7 @@ func (u *Updater) update(ctx context.Context, cfg *UpdateConfig, targetVersion s // fix the link to restore the active version. revertConfig := func(ctx context.Context) bool { + cfg.Status.SkipVersion = targetVersion if ok := revert(ctx); !ok { u.Log.ErrorContext(ctx, "Failed to revert Teleport symlinks. Installation likely broken.") return false @@ -611,79 +603,13 @@ func (u *Updater) update(ctx context.Context, cfg *UpdateConfig, targetVersion s versions, err := u.Installer.List(ctx) if err != nil { - return trace.Errorf("failed to list installed versions: %w", err) - } - if n := len(versions); n > 2 { + u.Log.ErrorContext(ctx, "Failed to read installed versions.", errorKey, err) + } else if n := len(versions); n > 2 { u.Log.WarnContext(ctx, "More than 2 versions of Teleport installed. Version directory may need cleanup to save space.", "count", n) } return nil } -// readConfig reads UpdateConfig from a file. -func readConfig(path string) (*UpdateConfig, error) { - f, err := os.Open(path) - if errors.Is(err, fs.ErrNotExist) { - return &UpdateConfig{ - Version: updateConfigVersion, - Kind: updateConfigKind, - }, nil - } - if err != nil { - return nil, trace.Errorf("failed to open: %w", err) - } - defer f.Close() - var cfg UpdateConfig - if err := yaml.NewDecoder(f).Decode(&cfg); err != nil { - return nil, trace.Errorf("failed to parse: %w", err) - } - if k := cfg.Kind; k != updateConfigKind { - return nil, trace.Errorf("invalid kind %q", k) - } - if v := cfg.Version; v != updateConfigVersion { - return nil, trace.Errorf("invalid version %q", v) - } - return &cfg, nil -} - -// writeConfig writes UpdateConfig to a file atomically, ensuring the file cannot be corrupted. -func writeConfig(filename string, cfg *UpdateConfig) error { - opts := []renameio.Option{ - renameio.WithPermissions(configFileMode), - renameio.WithExistingPermissions(), - } - t, err := renameio.NewPendingFile(filename, opts...) - if err != nil { - return trace.Wrap(err) - } - defer t.Cleanup() - err = yaml.NewEncoder(t).Encode(cfg) - if err != nil { - return trace.Wrap(err) - } - return trace.Wrap(t.CloseAtomicallyReplace()) -} - -func validateConfigSpec(spec *UpdateSpec, override OverrideConfig) error { - if override.Proxy != "" { - spec.Proxy = override.Proxy - } - if override.Group != "" { - spec.Group = override.Group - } - switch override.URLTemplate { - case "": - case "default": - spec.URLTemplate = "" - default: - spec.URLTemplate = override.URLTemplate - } - if spec.URLTemplate != "" && - !strings.HasPrefix(strings.ToLower(spec.URLTemplate), "https://") { - return trace.Errorf("Teleport download URL must use TLS (https://)") - } - return nil -} - // LinkPackage creates links from the system (package) installation of Teleport, if they are needed. // LinkPackage returns nil and warns if an auto-updates version is already linked, but auto-updates is disabled. // LinkPackage returns an error only if an unknown version of Teleport is present (e.g., manually copied files). @@ -710,10 +636,22 @@ func (u *Updater) LinkPackage(ctx context.Context) error { } else if err != nil { return trace.Errorf("failed to link system package installation: %w", err) } - // TODO(sclevine): only if systemd files change if err := u.Process.Sync(ctx); err != nil { - return trace.Errorf("failed to validate configuration for packaged installation of Teleport: %w", err) + return trace.Errorf("failed to sync systemd configuration: %w", err) } u.Log.InfoContext(ctx, "Successfully linked system package installation.") return nil } + +// UnlinkPackage removes links from the system (package) installation of Teleport, if they are present. +// This function is idempotent. +func (u *Updater) UnlinkPackage(ctx context.Context) error { + if err := u.Installer.UnlinkSystem(ctx); err != nil { + return trace.Errorf("failed to unlink system package installation: %w", err) + } + if err := u.Process.Sync(ctx); err != nil { + return trace.Errorf("failed to sync systemd configuration: %w", err) + } + u.Log.InfoContext(ctx, "Successfully unlinked system package installation.") + return nil +} diff --git a/lib/autoupdate/agent/updater_test.go b/lib/autoupdate/agent/updater_test.go index 01e6e4980f5de..b67c808c6bbac 100644 --- a/lib/autoupdate/agent/updater_test.go +++ b/lib/autoupdate/agent/updater_test.go @@ -124,6 +124,92 @@ func TestUpdater_Disable(t *testing.T) { } } +func TestUpdater_Unpin(t *testing.T) { + t.Parallel() + + tests := []struct { + name string + cfg *UpdateConfig // nil -> file not present + errMatch string + }{ + { + name: "pinned", + cfg: &UpdateConfig{ + Version: updateConfigVersion, + Kind: updateConfigKind, + Spec: UpdateSpec{ + Pinned: true, + }, + }, + }, + { + name: "not pinned", + cfg: &UpdateConfig{ + Version: updateConfigVersion, + Kind: updateConfigKind, + Spec: UpdateSpec{ + Pinned: false, + }, + }, + }, + { + name: "config does not exist", + }, + { + name: "invalid metadata", + cfg: &UpdateConfig{ + Spec: UpdateSpec{ + Enabled: true, + }, + }, + errMatch: "invalid", + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + dir := t.TempDir() + cfgPath := filepath.Join(dir, VersionsDirName, "update.yaml") + + updater, err := NewLocalUpdater(LocalUpdaterConfig{ + InsecureSkipVerify: true, + DataDir: dir, + }) + require.NoError(t, err) + + // Create config file only if provided in test case + if tt.cfg != nil { + b, err := yaml.Marshal(tt.cfg) + require.NoError(t, err) + err = os.WriteFile(cfgPath, b, 0600) + require.NoError(t, err) + } + + err = updater.Unpin(context.Background()) + if tt.errMatch != "" { + require.Error(t, err) + assert.Contains(t, err.Error(), tt.errMatch) + return + } + require.NoError(t, err) + + data, err := os.ReadFile(cfgPath) + + // If no config is present, disable should not create it + if tt.cfg == nil { + require.ErrorIs(t, err, os.ErrNotExist) + return + } + require.NoError(t, err) + + if golden.ShouldSet() { + golden.Set(t, data) + } + require.Equal(t, string(golden.Get(t)), string(data)) + }) + } +} + func TestUpdater_Update(t *testing.T) { t.Parallel() @@ -398,6 +484,40 @@ func TestUpdater_Update(t *testing.T) { setupCalls: 1, errMatch: "reload error", }, + { + name: "skip version", + cfg: &UpdateConfig{ + Version: updateConfigVersion, + Kind: updateConfigKind, + Spec: UpdateSpec{ + URLTemplate: "https://example.com", + Enabled: true, + }, + Status: UpdateStatus{ + ActiveVersion: "old-version", + BackupVersion: "backup-version", + SkipVersion: "16.3.0", + }, + }, + inWindow: true, + }, + { + name: "pinned version", + cfg: &UpdateConfig{ + Version: updateConfigVersion, + Kind: updateConfigKind, + Spec: UpdateSpec{ + URLTemplate: "https://example.com", + Enabled: true, + Pinned: true, + }, + Status: UpdateStatus{ + ActiveVersion: "old-version", + BackupVersion: "backup-version", + }, + }, + inWindow: true, + }, } for _, tt := range tests { @@ -645,7 +765,7 @@ func TestUpdater_LinkPackage(t *testing.T) { } } -func TestUpdater_Enable(t *testing.T) { +func TestUpdater_Install(t *testing.T) { t.Parallel() tests := []struct { @@ -673,6 +793,7 @@ func TestUpdater_Enable(t *testing.T) { Version: updateConfigVersion, Kind: updateConfigKind, Spec: UpdateSpec{ + Enabled: true, Group: "group", URLTemplate: "https://example.com", }, @@ -702,27 +823,45 @@ func TestUpdater_Enable(t *testing.T) { }, }, userCfg: OverrideConfig{ - Group: "new-group", - URLTemplate: "https://example.com/new", + UpdateSpec: UpdateSpec{ + Enabled: true, + Group: "new-group", + URLTemplate: "https://example.com/new", + }, ForceVersion: "new-version", }, installedVersion: "new-version", installedTemplate: "https://example.com/new", linkedVersion: "new-version", + requestGroup: "new-group", reloadCalls: 1, setupCalls: 1, }, { - name: "already enabled", + name: "defaults", cfg: &UpdateConfig{ Version: updateConfigVersion, Kind: updateConfigKind, - Spec: UpdateSpec{ - Enabled: true, + Status: UpdateStatus{ + ActiveVersion: "old-version", }, + }, + + installedVersion: "16.3.0", + installedTemplate: cdnURITemplate, + linkedVersion: "16.3.0", + reloadCalls: 1, + setupCalls: 1, + }, + { + name: "override skip", + cfg: &UpdateConfig{ + Version: updateConfigVersion, + Kind: updateConfigKind, Status: UpdateStatus{ ActiveVersion: "old-version", + SkipVersion: "16.3.0", }, }, @@ -947,7 +1086,7 @@ func TestUpdater_Enable(t *testing.T) { } ctx := context.Background() - err = updater.Enable(ctx, tt.userCfg) + err = updater.Install(ctx, tt.userCfg) if tt.errMatch != "" { require.Error(t, err) assert.Contains(t, err.Error(), tt.errMatch) @@ -996,6 +1135,7 @@ type testInstaller struct { FuncLinkSystem func(ctx context.Context) (revert func(context.Context) bool, err error) FuncTryLink func(ctx context.Context, version string) error FuncTryLinkSystem func(ctx context.Context) error + FuncUnlinkSystem func(ctx context.Context) error FuncList func(ctx context.Context) (versions []string, err error) } @@ -1023,6 +1163,10 @@ func (ti *testInstaller) TryLinkSystem(ctx context.Context) error { return ti.FuncTryLinkSystem(ctx) } +func (ti *testInstaller) UnlinkSystem(ctx context.Context) error { + return ti.FuncUnlinkSystem(ctx) +} + func (ti *testInstaller) List(ctx context.Context) (versions []string, err error) { return ti.FuncList(ctx) } diff --git a/lib/benchmark/ssh.go b/lib/benchmark/ssh.go index ab9a1645bcafe..454a594b7309e 100644 --- a/lib/benchmark/ssh.go +++ b/lib/benchmark/ssh.go @@ -20,7 +20,7 @@ package benchmark import ( "context" - "math/rand" + "math/rand/v2" "github.com/gravitational/trace" @@ -81,7 +81,7 @@ func chooseRandomHost(hosts []types.Server) string { name := hosts[0].GetName() return name + ":0" default: - name := hosts[rand.Intn(len(hosts))].GetName() + name := hosts[rand.N(len(hosts))].GetName() return name + ":0" } } diff --git a/lib/bitbucket/bitbucket.go b/lib/bitbucket/bitbucket.go new file mode 100644 index 0000000000000..ee9923337f9e8 --- /dev/null +++ b/lib/bitbucket/bitbucket.go @@ -0,0 +1,78 @@ +/* + * Teleport + * Copyright (C) 2024 Gravitational, Inc. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package bitbucket + +import ( + "github.com/gravitational/trace" + "github.com/mitchellh/mapstructure" +) + +// IDTokenClaims +// See the following for the structure: +// https://support.atlassian.com/bitbucket-cloud/docs/integrate-pipelines-with-resource-servers-using-oidc/ +type IDTokenClaims struct { + // Sub provides some information about the Bitbucket Pipelines run that + // generated this token. Format: {RepositoryUUID}:{StepUUID} + Sub string `json:"sub"` + + // StepUUID is the UUID of the pipeline step for which this token was + // issued. Bitbucket UUIDs must begin and end with braces, e.g. '{...}' + StepUUID string `json:"stepUuid"` + + // RepositoryUUID is the UUID of the repository for which this token was + // issued. Bitbucket UUIDs must begin and end with braces, e.g. '{...}'. + // This value may be found in the Pipelines -> OpenID Connect section of the + // repository settings. + RepositoryUUID string `json:"repositoryUuid"` + + // PipelineUUID is the UUID of the pipeline for which this token was issued. + // Bitbucket UUIDs must begin and end with braces, e.g. '{...}' + PipelineUUID string `json:"pipelineUuid"` + + // WorkspaceUUID is the UUID of the workspace for which this token was + // issued. Bitbucket UUIDs must begin and end with braces, e.g. '{...}'. + // This value may be found in the Pipelines -> OpenID Connect section of the + // repository settings. + WorkspaceUUID string `json:"workspaceUuid"` + + // DeploymentEnvironmentUUID is the name of the deployment environment for + // which this pipeline was executed. Bitbucket UUIDs must begin and end with + // braces, e.g. '{...}'. + DeploymentEnvironmentUUID string `json:"deploymentEnvironmentUuid"` + + // BranchName is the name of the branch on which this pipeline executed. + BranchName string `json:"branchName"` +} + +// JoinAuditAttributes returns a series of attributes that can be inserted into +// audit events related to a specific join. +func (c *IDTokenClaims) JoinAuditAttributes() (map[string]any, error) { + res := map[string]any{} + d, err := mapstructure.NewDecoder(&mapstructure.DecoderConfig{ + TagName: "json", + Result: &res, + }) + if err != nil { + return nil, trace.Wrap(err) + } + if err := d.Decode(c); err != nil { + return nil, trace.Wrap(err) + } + return res, nil +} diff --git a/lib/bitbucket/token_source.go b/lib/bitbucket/token_source.go new file mode 100644 index 0000000000000..f5a96d4f6e417 --- /dev/null +++ b/lib/bitbucket/token_source.go @@ -0,0 +1,51 @@ +/* + * Teleport + * Copyright (C) 2024 Gravitational, Inc. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package bitbucket + +import ( + "github.com/gravitational/trace" +) + +// IDTokenSource allows a Bitbucket OIDC token to be fetched whilst within a +// Pipelines execution. +type IDTokenSource struct { + // getEnv is a function that returns a string from the environment, usually + // os.Getenv except in tests. + getEnv func(key string) string +} + +// GetIDToken attempts to fetch a Bitbucket OIDC token from the environment. +func (its *IDTokenSource) GetIDToken() (string, error) { + tok := its.getEnv("BITBUCKET_STEP_OIDC_TOKEN") + if tok == "" { + return "", trace.BadParameter( + "BITBUCKET_STEP_OIDC_TOKEN environment variable missing", + ) + } + + return tok, nil +} + +// NewIDTokenSource builds a helper that can extract a Bitbucket OIDC token from +// the environment, using `getEnv`. +func NewIDTokenSource(getEnv func(key string) string) *IDTokenSource { + return &IDTokenSource{ + getEnv, + } +} diff --git a/lib/bitbucket/token_source_test.go b/lib/bitbucket/token_source_test.go new file mode 100644 index 0000000000000..bef39ae24645c --- /dev/null +++ b/lib/bitbucket/token_source_test.go @@ -0,0 +1,48 @@ +/* + * Teleport + * Copyright (C) 2024 Gravitational, Inc. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package bitbucket + +import ( + "testing" + + "github.com/gravitational/trace" + "github.com/stretchr/testify/require" +) + +func TestIDTokenSource_GetIDToken(t *testing.T) { + t.Run("value present", func(t *testing.T) { + its := NewIDTokenSource(func(key string) string { + if key == "BITBUCKET_STEP_OIDC_TOKEN" { + return "foo" + } + return "" + }) + tok, err := its.GetIDToken() + require.NoError(t, err) + require.Equal(t, "foo", tok) + }) + + t.Run("value missing", func(t *testing.T) { + its := NewIDTokenSource(func(key string) string { return "" }) + tok, err := its.GetIDToken() + require.Error(t, err) + require.True(t, trace.IsBadParameter(err)) + require.Equal(t, "", tok) + }) +} diff --git a/lib/bitbucket/token_validator.go b/lib/bitbucket/token_validator.go new file mode 100644 index 0000000000000..d4c78031a8235 --- /dev/null +++ b/lib/bitbucket/token_validator.go @@ -0,0 +1,79 @@ +/* + * Teleport + * Copyright (C) 2023 Gravitational, Inc. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package bitbucket + +import ( + "context" + "time" + + "github.com/coreos/go-oidc/v3/oidc" + "github.com/gravitational/trace" + "github.com/jonboulle/clockwork" +) + +// providerTimeout is the maximum time allowed to fetch provider metadata before +// giving up. +const providerTimeout = 15 * time.Second + +// IDTokenValidator validates a Bitbucket issued ID Token. +type IDTokenValidator struct { + // clock is used by the validator when checking expiry and issuer times of + // tokens. If omitted, a real clock will be used. + clock clockwork.Clock +} + +// NewIDTokenValidator returns an initialized IDTokenValidator +func NewIDTokenValidator(clock clockwork.Clock) *IDTokenValidator { + if clock == nil { + clock = clockwork.NewRealClock() + } + + return &IDTokenValidator{ + clock: clock, + } +} + +// Validate validates a Bitbucket issued ID token. +func (id *IDTokenValidator) Validate( + ctx context.Context, issuerURL, audience, token string, +) (*IDTokenClaims, error) { + timeoutCtx, cancel := context.WithTimeout(ctx, providerTimeout) + defer cancel() + + p, err := oidc.NewProvider(timeoutCtx, issuerURL) + if err != nil { + return nil, trace.Wrap(err, "creating oidc provider") + } + + verifier := p.Verifier(&oidc.Config{ + ClientID: audience, + Now: id.clock.Now, + }) + + idToken, err := verifier.Verify(timeoutCtx, token) + if err != nil { + return nil, trace.Wrap(err, "verifying token") + } + + var claims IDTokenClaims + if err := idToken.Claims(&claims); err != nil { + return nil, trace.Wrap(err) + } + return &claims, nil +} diff --git a/lib/bitbucket/token_validator_test.go b/lib/bitbucket/token_validator_test.go new file mode 100644 index 0000000000000..43ff8c7ee6698 --- /dev/null +++ b/lib/bitbucket/token_validator_test.go @@ -0,0 +1,277 @@ +/* + * Teleport + * Copyright (C) 2024 Gravitational, Inc. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package bitbucket + +import ( + "cmp" + "context" + "crypto" + "encoding/json" + "net/http" + "net/http/httptest" + "testing" + "time" + + "github.com/go-jose/go-jose/v3" + "github.com/go-jose/go-jose/v3/jwt" + "github.com/jonboulle/clockwork" + "github.com/stretchr/testify/require" + + "github.com/gravitational/teleport/lib/cryptosuites" +) + +type fakeIDP struct { + t *testing.T + signer jose.Signer + publicKey crypto.PublicKey + server *httptest.Server + audience string +} + +func newFakeIDP(t *testing.T, audience string) *fakeIDP { + privateKey, err := cryptosuites.GenerateKeyWithAlgorithm(cryptosuites.RSA2048) + require.NoError(t, err) + + signer, err := jose.NewSigner( + jose.SigningKey{Algorithm: jose.RS256, Key: privateKey}, + (&jose.SignerOptions{}).WithType("JWT"), + ) + require.NoError(t, err) + + f := &fakeIDP{ + signer: signer, + publicKey: privateKey.Public(), + t: t, + audience: audience, + } + + providerMux := http.NewServeMux() + providerMux.HandleFunc( + "/.well-known/openid-configuration", + f.handleOpenIDConfig, + ) + providerMux.HandleFunc( + "/.well-known/jwks", + f.handleJWKSEndpoint, + ) + + srv := httptest.NewServer(providerMux) + t.Cleanup(srv.Close) + f.server = srv + return f +} + +func (f *fakeIDP) issuer() string { + return f.server.URL +} + +func (f *fakeIDP) handleOpenIDConfig(w http.ResponseWriter, r *http.Request) { + // mimic https://api.bitbucket.org/2.0/workspaces/$workspace/pipelines-config/identity/oidc/.well-known/openid-configuration + response := map[string]interface{}{ + "claims_supported": []string{ + "sub", + "iss", + "aud", + "exp", + "iat", + "branchName", + "compliant", + "deploymentEnvironmentUuid", + "pipelineUuid", + "repositoryUuid", + "stepUuid", + "workspaceUuid", + }, + "id_token_signing_alg_values_supported": []string{"RS256"}, + "issuer": f.issuer(), + "jwks_uri": f.issuer() + "/.well-known/jwks", + "response_types_supported": []string{"id_token"}, + "scopes_supported": []string{"openid"}, + "subject_types_supported": []string{"public"}, + } + responseBytes, err := json.Marshal(response) + require.NoError(f.t, err) + _, err = w.Write(responseBytes) + require.NoError(f.t, err) +} + +func (f *fakeIDP) handleJWKSEndpoint(w http.ResponseWriter, r *http.Request) { + // mimic https://app.terraform.io/.well-known/jwks but with our own keys + jwks := jose.JSONWebKeySet{ + Keys: []jose.JSONWebKey{ + { + Key: f.publicKey, + }, + }, + } + responseBytes, err := json.Marshal(jwks) + require.NoError(f.t, err) + _, err = w.Write(responseBytes) + require.NoError(f.t, err) +} + +func (f *fakeIDP) issueToken( + t *testing.T, + issuer, + audience, + workspaceUUID, + repositoryUUID, + stepUUID, + sub string, + issuedAt time.Time, + expiry time.Time, +) string { + stdClaims := jwt.Claims{ + Issuer: issuer, + Subject: sub, + Audience: jwt.Audience{audience}, + IssuedAt: jwt.NewNumericDate(issuedAt), + NotBefore: jwt.NewNumericDate(issuedAt), + Expiry: jwt.NewNumericDate(expiry), + } + customClaims := map[string]interface{}{ + "workspaceUuid": workspaceUUID, + "repositoryUuid": repositoryUUID, + "stepUuid": stepUUID, + } + token, err := jwt.Signed(f.signer). + Claims(stdClaims). + Claims(customClaims). + CompactSerialize() + require.NoError(t, err) + + return token +} + +func TestIDTokenValidator_Validate(t *testing.T) { + t.Parallel() + + // workspace-id is the bitbucket workspace UUID, without braces + const audience = "ari:cloud:bitbucket::workspace/workspace-uuid" + idp := newFakeIDP(t, audience) + + tests := []struct { + name string + assertError require.ErrorAssertionFunc + want *IDTokenClaims + token string + audienceOverride string + }{ + { + name: "success", + assertError: require.NoError, + token: idp.issueToken( + t, + idp.issuer(), + idp.audience, + "{workspace}", + "{repository}", + "{step}", + "{repository}:{step}", + time.Now().Add(-5*time.Minute), + time.Now().Add(5*time.Minute), + ), + want: &IDTokenClaims{ + WorkspaceUUID: "{workspace}", + RepositoryUUID: "{repository}", + StepUUID: "{step}", + Sub: "{repository}:{step}", + }, + }, + { + name: "expired", + assertError: require.Error, + token: idp.issueToken( + t, + idp.issuer(), + idp.audience, + "{workspace}", + "{repository}", + "{step}", + "{repository}:{step}", + time.Now().Add(-15*time.Minute), + time.Now().Add(-5*time.Minute), + ), + }, + { + name: "future", + assertError: require.Error, + token: idp.issueToken( + t, + idp.issuer(), + idp.audience, + "{workspace}", + "{repository}", + "{step}", + "{repository}:{step}", + time.Now().Add(10*time.Minute), + time.Now().Add(20*time.Minute), + ), + }, + { + name: "invalid audience", + assertError: require.Error, + token: idp.issueToken( + t, + idp.issuer(), + "some.wrong.audience.example.com", + "{workspace}", + "{repository}", + "{step}", + "{repository}:{step}", + time.Now().Add(-5*time.Minute), + time.Now().Add(5*time.Minute), + ), + }, + { + name: "invalid issuer", + assertError: require.Error, + token: idp.issueToken( + t, + "https://the.wrong.issuer", + idp.audience, + "{workspace}", + "{repository}", + "{step}", + "{repository}:{step}", + time.Now().Add(-5*time.Minute), + time.Now().Add(5*time.Minute), + ), + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + ctx := context.Background() + + issuerAddr := "http://" + idp.server.Listener.Addr().String() + + v := NewIDTokenValidator(clockwork.NewRealClock()) + + claims, err := v.Validate( + ctx, + issuerAddr, + cmp.Or(tt.audienceOverride, audience), + tt.token, + ) + tt.assertError(t, err) + require.Equal(t, tt.want, claims) + }) + } +} diff --git a/lib/client/api.go b/lib/client/api.go index c74cbd81d3006..57a4a7eed500c 100644 --- a/lib/client/api.go +++ b/lib/client/api.go @@ -2313,6 +2313,7 @@ func playSession(ctx context.Context, sessionID string, speed float64, streamer SessionID: *sid, Streamer: streamer, SkipIdleTime: skipIdleTime, + Context: ctx, }) if err != nil { return trace.Wrap(err) diff --git a/lib/client/client_store.go b/lib/client/client_store.go index df4fcb05de968..f00992b513cef 100644 --- a/lib/client/client_store.go +++ b/lib/client/client_store.go @@ -20,6 +20,7 @@ package client import ( "errors" + "fmt" "net/url" "time" @@ -87,21 +88,31 @@ func (s *Store) SetCustomHardwareKeyPrompt(prompt keys.HardwareKeyPrompt) { s.KeyStore.SetCustomHardwareKeyPrompt(prompt) } -var ( - // ErrNoCredentials is returned by the client store when a specific key is not found. - // This error can be used to determine whether a client should retrieve new credentials, - // like how it is used with lib/client.RetryWithRelogin. - ErrNoCredentials = &trace.NotFoundError{Message: "no credentials"} +// ErrNoProfile is returned by the client store when a specific profile is not found. +var ErrNoProfile = &trace.NotFoundError{Message: "no profile"} - // ErrNoProfile is returned by the client store when a specific profile is not found. - // This error can be used to determine whether a client should retrieve new credentials, - // like how it is used with lib/client.RetryWithRelogin. - ErrNoProfile = &trace.NotFoundError{Message: "no profile"} -) +// noCredentialsError is returned by the client store when a specific key is not found. +// It unwraps to the original error to allow checks for underlying error types. +// Use [IsNoCredentialsError] instead of checking for this type directly. +type noCredentialsError struct { + wrappedError error +} + +func newNoCredentialsError(wrappedError error) *noCredentialsError { + return &noCredentialsError{wrappedError} +} + +func (e *noCredentialsError) Error() string { + return fmt.Sprintf("no credentials: %v", e.wrappedError) +} + +func (e *noCredentialsError) Unwrap() error { + return e.wrappedError +} // IsNoCredentialsError returns whether the given error implies that the user should retrieve new credentials. func IsNoCredentialsError(err error) bool { - return errors.Is(err, ErrNoCredentials) || errors.Is(err, ErrNoProfile) + return errors.As(err, new(*noCredentialsError)) || errors.Is(err, ErrNoProfile) } // GetKeyRing gets the requested key ring with trusted the requested @@ -111,7 +122,7 @@ func IsNoCredentialsError(err error) bool { func (s *Store) GetKeyRing(idx KeyRingIndex, opts ...CertOption) (*KeyRing, error) { keyRing, err := s.KeyStore.GetKeyRing(idx, opts...) if trace.IsNotFound(err) { - return nil, trace.Wrap(ErrNoCredentials, err.Error()) + return nil, newNoCredentialsError(err) } else if err != nil { return nil, trace.Wrap(err) } @@ -199,8 +210,9 @@ func (s *Store) ReadProfileStatus(profileName string) (*ProfileStatus, error) { Username: profile.Username, Cluster: profile.SiteName, KubeEnabled: profile.KubeProxyAddr != "", - // Set ValidUntil to now to show that the keys are not available. + // Set ValidUntil to now and GetKeyRingError to show that the keys are not available. ValidUntil: time.Now(), + GetKeyRingError: err, SAMLSingleLogoutEnabled: profile.SAMLSingleLogoutEnabled, SSOHost: profile.SSOHost, }, nil diff --git a/lib/client/keystore.go b/lib/client/keystore.go index 250689ff97c28..2cba0d5810825 100644 --- a/lib/client/keystore.go +++ b/lib/client/keystore.go @@ -22,6 +22,7 @@ import ( "bytes" "context" "errors" + "fmt" iofs "io/fs" "os" "path/filepath" @@ -130,6 +131,12 @@ func (fs *FSKeyStore) tlsCertPath(idx KeyRingIndex) string { return keypaths.TLSCertPath(fs.KeyDir, idx.ProxyHost, idx.Username) } +// tlsCertPathLegacy returns the legacy TLS certificate path used in Teleport v16 and +// older given KeyRingIndex. +func (fs *FSKeyStore) tlsCertPathLegacy(idx KeyRingIndex) string { + return keypaths.TLSCertPathLegacy(fs.KeyDir, idx.ProxyHost, idx.Username) +} + // sshDir returns the SSH certificate path for the given KeyRingIndex. func (fs *FSKeyStore) sshDir(proxy, user string) string { return keypaths.SSHDir(fs.KeyDir, proxy, user) @@ -497,6 +504,33 @@ func (fs *FSKeyStore) DeleteKeys() error { return nil } +// LegacyCertPathError will be returned when [(*FSKeyStore).GetKeyRing] does not +// find a user TLS certificate at the expected path used in v17+ but does find +// one at the legacy path used in Teleport v16-. +type LegacyCertPathError struct { + wrappedError error + expectedPath, foundPath string +} + +func newLegacyCertPathError(wrappedError error, expectedPath, foundPath string) *LegacyCertPathError { + return &LegacyCertPathError{ + wrappedError: wrappedError, + expectedPath: expectedPath, + foundPath: foundPath, + } +} + +// Error implements the error interface. +func (e *LegacyCertPathError) Error() string { + return fmt.Sprintf( + "user TLS certificate was found at unsupported legacy path (expected path: %s, found path: %s)", + e.expectedPath, e.foundPath) +} + +func (e *LegacyCertPathError) Unwrap() error { + return e.wrappedError +} + // GetKeyRing returns the user's key including the specified certs. // If the key is not found, returns trace.NotFound error. func (fs *FSKeyStore) GetKeyRing(idx KeyRingIndex, opts ...CertOption) (*KeyRing, error) { @@ -512,6 +546,12 @@ func (fs *FSKeyStore) GetKeyRing(idx KeyRingIndex, opts ...CertOption) (*KeyRing tlsCred, err := readTLSCredential(fs.userTLSKeyPath(idx), fs.tlsCertPath(idx), fs.CustomHardwareKeyPrompt) if err != nil { + if trace.IsNotFound(err) { + if _, statErr := os.Stat(fs.tlsCertPathLegacy(idx)); statErr == nil { + return nil, newLegacyCertPathError(err, fs.tlsCertPath(idx), fs.tlsCertPathLegacy(idx)) + } + return nil, err + } return nil, trace.Wrap(err) } diff --git a/lib/client/profile.go b/lib/client/profile.go index f037d2e67fd23..5b06fe0e48dcc 100644 --- a/lib/client/profile.go +++ b/lib/client/profile.go @@ -203,6 +203,9 @@ type ProfileStatus struct { // ValidUntil is the time at which this SSH certificate will expire. ValidUntil time.Time + // GetKeyRingError is any error encountered while loading the KeyRing. + GetKeyRingError error + // Extensions is a list of enabled SSH features for the certificate. Extensions []string diff --git a/lib/events/auditlog.go b/lib/events/auditlog.go index 5227935e6f236..51180746cbe7f 100644 --- a/lib/events/auditlog.go +++ b/lib/events/auditlog.go @@ -532,7 +532,7 @@ func (l *AuditLog) StreamSessionEvents(ctx context.Context, sessionID session.ID } start := time.Now() - if err := l.UploadHandler.Download(l.ctx, sessionID, rawSession); err != nil { + if err := l.UploadHandler.Download(ctx, sessionID, rawSession); err != nil { _ = rawSession.Close() if errors.Is(err, fs.ErrNotExist) { err = trace.NotFound("a recording for session %v was not found", sessionID) diff --git a/lib/events/dynamoevents/dynamoevents_test.go b/lib/events/dynamoevents/dynamoevents_test.go index 8d8c2b5050da9..0e868ac837a0c 100644 --- a/lib/events/dynamoevents/dynamoevents_test.go +++ b/lib/events/dynamoevents/dynamoevents_test.go @@ -22,7 +22,7 @@ import ( "context" "encoding/json" "fmt" - "math/rand" + "math/rand/v2" "net/http" "net/http/httptest" "net/url" @@ -596,12 +596,11 @@ func generateEvent(sessionID session.ID, index int64, query string) apievents.Au } } -var letterRunes = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ") - func randStringAlpha(n int) string { - b := make([]rune, n) + const letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" + b := make([]byte, n) for i := range b { - b[i] = letterRunes[rand.Intn(len(letterRunes))] + b[i] = letters[rand.N(len(letters))] } return string(b) } diff --git a/lib/events/export/date_exporter_test.go b/lib/events/export/date_exporter_test.go index a6907ade60015..f2c27e4a12797 100644 --- a/lib/events/export/date_exporter_test.go +++ b/lib/events/export/date_exporter_test.go @@ -21,7 +21,7 @@ package export import ( "context" "fmt" - "math/rand" + "math/rand/v2" "strconv" "sync" "testing" @@ -407,8 +407,8 @@ func (c *fakeClient) ExportUnstructuredEvents(ctx context.Context, req *auditlog // randomly truncate the chunk and append an error to simulate flake. we target a 33% failure rate // since event export is more frequent than chunk listing. var fail bool - if c.randomFlake && rand.Int()%3 == 0 { - chunk = chunk[:rand.Intn(len(chunk))] + if c.randomFlake && rand.N(3) == 0 { + chunk = chunk[:rand.N(len(chunk))] fail = true } @@ -438,8 +438,8 @@ func (c *fakeClient) GetEventExportChunks(ctx context.Context, req *auditlogpb.G // randomly truncate the chunk list and append an error to simulate flake. we target a 50% failure rate // since chunk listing is less frequent than event export. var fail bool - if c.randomFlake && rand.Int()%2 == 0 { - eec = eec[:rand.Intn(len(eec))] + if c.randomFlake && rand.N(2) == 0 { + eec = eec[:rand.N(len(eec))] fail = true } diff --git a/lib/events/s3sessions/s3handler.go b/lib/events/s3sessions/s3handler.go index 7fc80f9063c5a..8b8487bd26a3f 100644 --- a/lib/events/s3sessions/s3handler.go +++ b/lib/events/s3sessions/s3handler.go @@ -38,6 +38,7 @@ import ( "github.com/aws/aws-sdk-go-v2/service/s3" awstypes "github.com/aws/aws-sdk-go-v2/service/s3/types" "github.com/gravitational/trace" + "go.opentelemetry.io/contrib/instrumentation/github.com/aws/aws-sdk-go-v2/otelaws" "github.com/gravitational/teleport" "github.com/gravitational/teleport/api/types" @@ -232,6 +233,8 @@ func NewHandler(ctx context.Context, cfg Config) (*Handler, error) { return nil, trace.Wrap(err) } + otelaws.AppendMiddlewares(&awsConfig.APIOptions) + // Create S3 client with custom options client := s3.NewFromConfig(awsConfig, s3Opts...) diff --git a/lib/kube/proxy/transport.go b/lib/kube/proxy/transport.go index 1e8e0067ed9e4..87217b39a0a4b 100644 --- a/lib/kube/proxy/transport.go +++ b/lib/kube/proxy/transport.go @@ -23,7 +23,7 @@ import ( "crypto/tls" "crypto/x509" "fmt" - "math/rand" + "math/rand/v2" "net" "net/http" "time" @@ -316,12 +316,9 @@ func (f *Forwarder) localClusterDialer(kubeClusterName string, opts ...contextDi } // Shuffle the list of servers to avoid always connecting to the same // server. - rand.Shuffle( - len(kubeServers), - func(i, j int) { - kubeServers[i], kubeServers[j] = kubeServers[j], kubeServers[i] - }, - ) + rand.Shuffle(len(kubeServers), func(i, j int) { + kubeServers[i], kubeServers[j] = kubeServers[j], kubeServers[i] + }) var errs []error // Validate that the requested kube cluster is registered. diff --git a/lib/player/player.go b/lib/player/player.go index c548a8929200e..50c0ccf6a3fa4 100644 --- a/lib/player/player.go +++ b/lib/player/player.go @@ -119,6 +119,7 @@ type Config struct { SessionID session.ID Streamer Streamer SkipIdleTime bool + Context context.Context } func New(cfg *Config) (*Player, error) { @@ -140,6 +141,11 @@ func New(cfg *Config) (*Player, error) { slog.With(teleport.ComponentKey, "player"), ) + ctx := context.Background() + if cfg.Context != nil { + ctx = cfg.Context + } + p := &Player{ clock: clk, log: log, @@ -158,7 +164,7 @@ func New(cfg *Config) (*Player, error) { // start in a paused state p.playPause <- make(chan struct{}) - go p.stream() + go p.stream(ctx) return p, nil } @@ -186,8 +192,8 @@ func (p *Player) SetSpeed(s float64) error { return nil } -func (p *Player) stream() { - ctx, cancel := context.WithCancel(context.Background()) +func (p *Player) stream(baseContext context.Context) { + ctx, cancel := context.WithCancel(baseContext) defer cancel() eventsC, errC := p.streamer.StreamSessionEvents(metadata.WithSessionRecordingFormatContext(ctx, teleport.PTY), p.sessionID, 0) @@ -232,7 +238,7 @@ func (p *Player) stream() { // we rewind (by restarting the stream and seeking forward // to the rewind point) p.advanceTo.Store(int64(adv) * -1) - go p.stream() + go p.stream(baseContext) return default: if adv != normalPlayback { @@ -247,7 +253,7 @@ func (p *Player) stream() { switch err := p.applyDelay(lastDelay, currentDelay); { case errors.Is(err, errSeekWhilePaused): p.log.DebugContext(ctx, "Seeked during pause, will restart stream") - go p.stream() + go p.stream(baseContext) return case err != nil: close(p.emit) diff --git a/lib/proxy/router_test.go b/lib/proxy/router_test.go index 177875fda2fd6..660f9fd435762 100644 --- a/lib/proxy/router_test.go +++ b/lib/proxy/router_test.go @@ -21,7 +21,7 @@ package proxy import ( "bytes" "context" - "math/rand" + "math/rand/v2" "net" "testing" diff --git a/lib/resumption/handover_test.go b/lib/resumption/handover_test.go index 6b504866209ee..303593e6471a1 100644 --- a/lib/resumption/handover_test.go +++ b/lib/resumption/handover_test.go @@ -19,7 +19,7 @@ package resumption import ( "context" "encoding/binary" - "math/rand" + "math/rand/v2" "net" "net/netip" "os" @@ -64,12 +64,12 @@ func TestHandover(t *testing.T) { srv := &net.TCPAddr{ IP: net.IPv4(127, 0, 0, 1), - Port: 1 + rand.Intn(65535), + Port: 1 + rand.N(65536-1), } clt := &net.TCPAddr{ IP: clientAddr.AsSlice(), Zone: clientAddr.Zone(), - Port: 1 + rand.Intn(65535), + Port: 1 + rand.N(65536-1), } go handleConnection(utils.NewConnWithAddr(c2, srv, clt)) diff --git a/lib/reversetunnel/track/tracker_test.go b/lib/reversetunnel/track/tracker_test.go index e5fd610a31851..b1fe9746c5ba1 100644 --- a/lib/reversetunnel/track/tracker_test.go +++ b/lib/reversetunnel/track/tracker_test.go @@ -20,7 +20,7 @@ package track import ( "fmt" - pr "math/rand" + "math/rand/v2" "sync" "testing" "time" @@ -52,7 +52,7 @@ func (s *simpleTestProxies) RemoveRandProxies(n int) { rms := make([]bool, len(s.proxies)) rmc := 0 for rmc < n { - i := pr.Int() % len(s.proxies) + i := rand.N(len(s.proxies)) if !rms[i] { rms[i] = true rmc++ @@ -74,7 +74,7 @@ func (s *simpleTestProxies) GetRandProxy() (p testProxy, ok bool) { ok = false return } - i := pr.Int() % len(s.proxies) + i := rand.N(len(s.proxies)) return s.proxies[i], true } @@ -120,23 +120,18 @@ type testProxy struct { func newTestProxy(life time.Duration) testProxy { principals := make([]string, 0, 3) for i := 0; i < 3; i++ { - p := fmt.Sprintf("proxy-%d", pr.Int()) + p := fmt.Sprintf("proxy-%d", rand.Int()) principals = append(principals, p) } return testProxy{principals, life} } func prDuration(min time.Duration, max time.Duration) time.Duration { - mn, mx := int64(min), int64(max) - rslt := pr.Int63n(mx-mn) + mn - return time.Duration(rslt) + return min + rand.N(max-min) } func jitter(t time.Duration) time.Duration { - maxJitter := t / 5 - baseJitter := time.Duration(pr.Uint64()) - j := baseJitter % maxJitter - return t + j + return t + rand.N(t/5) } func TestBasic(t *testing.T) { diff --git a/lib/services/fanoutv2_test.go b/lib/services/fanoutv2_test.go index 0b142009386b8..e1a8ff9e20df9 100644 --- a/lib/services/fanoutv2_test.go +++ b/lib/services/fanoutv2_test.go @@ -20,7 +20,7 @@ package services import ( "context" - "math/rand" + "math/rand/v2" "testing" "time" @@ -112,7 +112,7 @@ func TestFanoutV2StreamOrdering(t *testing.T) { var inputs []string for i := 0; i < events; i++ { kind := "spam" - if rand.Int()%2 == 0 { + if rand.N(2) == 0 { kind = "eggs" } inputs = append(inputs, kind) diff --git a/lib/srv/db/proxyserver.go b/lib/srv/db/proxyserver.go index fb72e2accfe0d..3a2bacd8610e1 100644 --- a/lib/srv/db/proxyserver.go +++ b/lib/srv/db/proxyserver.go @@ -26,7 +26,7 @@ import ( "fmt" "io" "log/slog" - "math/rand" + "math/rand/v2" "net" "sort" "strconv" @@ -111,10 +111,9 @@ type ShuffleFunc func([]types.DatabaseServer) []types.DatabaseServer // ShuffleRandom is a ShuffleFunc that randomizes the order of database servers. // Used to provide load balancing behavior when proxying to multiple agents. func ShuffleRandom(servers []types.DatabaseServer) []types.DatabaseServer { - rand.New(rand.NewSource(time.Now().UnixNano())).Shuffle( - len(servers), func(i, j int) { - servers[i], servers[j] = servers[j], servers[i] - }) + rand.Shuffle(len(servers), func(i, j int) { + servers[i], servers[j] = servers[j], servers[i] + }) return servers } @@ -379,8 +378,7 @@ func (s *ProxyServer) handleConnection(conn net.Conn) error { // the MySQL.ServerVersion set in configuration if the first one is not available. // Function picks a random server each time if more than one are available. func getMySQLVersionFromServer(servers []types.DatabaseServer) string { - count := len(servers) - db := servers[rand.Intn(count)].GetDatabase() + db := servers[rand.N(len(servers))].GetDatabase() return db.GetMySQLServerVersion() } diff --git a/lib/sshutils/sftp/sftp_test.go b/lib/sshutils/sftp/sftp_test.go index f43a2a956ef67..7be2b5ae0f9ab 100644 --- a/lib/sshutils/sftp/sftp_test.go +++ b/lib/sshutils/sftp/sftp_test.go @@ -21,9 +21,10 @@ package sftp import ( "bytes" "context" + cryptorand "crypto/rand" "fmt" "io" - "math/rand" + mathrand "math/rand/v2" "net/http" "net/http/httptest" "os" @@ -31,7 +32,6 @@ import ( "strconv" "strings" "testing" - "time" "github.com/google/go-cmp/cmp" "github.com/gravitational/trace" @@ -723,9 +723,10 @@ func createFile(t *testing.T, path string) { }() // populate file with random amount of random contents - r := rand.New(rand.NewSource(time.Now().Unix())) - lr := io.LimitReader(r, r.Int63n(fileMaxSize)+1) - _, err = io.Copy(f, lr) + buf := make([]byte, mathrand.N(fileMaxSize)+1) + _, err = cryptorand.Read(buf) + require.NoError(t, err) + _, err = f.Write(buf) require.NoError(t, err) } diff --git a/lib/tbot/config/config.go b/lib/tbot/config/config.go index 2d049abcfe623..4469e09b755b1 100644 --- a/lib/tbot/config/config.go +++ b/lib/tbot/config/config.go @@ -58,6 +58,7 @@ var SupportedJoinMethods = []string{ string(types.JoinMethodToken), string(types.JoinMethodTPM), string(types.JoinMethodTerraformCloud), + string(types.JoinMethodBitbucket), } var log = logutils.NewPackageLogger(teleport.ComponentKey, teleport.ComponentTBot) diff --git a/lib/tbot/tbot.go b/lib/tbot/tbot.go index 5aae9aa30e915..068b634709469 100644 --- a/lib/tbot/tbot.go +++ b/lib/tbot/tbot.go @@ -546,7 +546,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 diff --git a/lib/utils/concurrentqueue/queue_test.go b/lib/utils/concurrentqueue/queue_test.go index 9c986fdfbe56e..83e1e82575583 100644 --- a/lib/utils/concurrentqueue/queue_test.go +++ b/lib/utils/concurrentqueue/queue_test.go @@ -19,7 +19,7 @@ package concurrentqueue import ( - "math/rand" + "math/rand/v2" "testing" "time" @@ -35,7 +35,7 @@ func TestOrdering(t *testing.T) { q := New(func(v int) int { // introduce a short random delay to ensure that work // completes out of order. - time.Sleep(time.Duration(rand.Int63n(int64(time.Millisecond * 12)))) + time.Sleep(rand.N(time.Millisecond * 12)) return v }, Workers(10)) t.Cleanup(func() { require.NoError(t, q.Close()) }) diff --git a/lib/utils/loadbalancer.go b/lib/utils/loadbalancer.go index 26558a8c0b4c5..c201f8e60a79c 100644 --- a/lib/utils/loadbalancer.go +++ b/lib/utils/loadbalancer.go @@ -22,7 +22,7 @@ import ( "context" "errors" "io" - "math/rand" + "math/rand/v2" "net" "sync" "time" @@ -94,7 +94,7 @@ func randomPolicy() loadBalancerPolicy { if len(backends) == 0 { return NetAddr{}, trace.ConnectionProblem(nil, "no backends") } - i := rand.Intn(len(backends)) + i := rand.N(len(backends)) return backends[i], nil } } diff --git a/lib/utils/utils.go b/lib/utils/utils.go index 5da5b39d05685..1990f39ad23e2 100644 --- a/lib/utils/utils.go +++ b/lib/utils/utils.go @@ -24,7 +24,7 @@ import ( "fmt" "io" "io/fs" - "math/rand" + "math/rand/v2" "net" "net/url" "os" @@ -529,7 +529,7 @@ func ChooseRandomString(slice []string) string { case 1: return slice[0] default: - return slice[rand.Intn(len(slice))] + return slice[rand.N(len(slice))] } } diff --git a/lib/web/app/match.go b/lib/web/app/match.go index ad57f02e008e9..6a4339d93200f 100644 --- a/lib/web/app/match.go +++ b/lib/web/app/match.go @@ -20,7 +20,7 @@ package app import ( "context" - "math/rand" + "math/rand/v2" "slices" "strings" diff --git a/lib/web/desktop.go b/lib/web/desktop.go index 227480b79077c..b72d4108b5ef8 100644 --- a/lib/web/desktop.go +++ b/lib/web/desktop.go @@ -25,7 +25,7 @@ import ( "crypto/tls" "errors" "io" - "math/rand" + "math/rand/v2" "net" "net/http" "sync" diff --git a/lib/web/desktop_playback.go b/lib/web/desktop_playback.go index f4755f18fe789..1467c14a28165 100644 --- a/lib/web/desktop_playback.go +++ b/lib/web/desktop_playback.go @@ -55,6 +55,7 @@ func (h *Handler) desktopPlaybackHandle( Log: h.logger, SessionID: session.ID(sID), Streamer: clt, + Context: r.Context(), }) if err != nil { h.log.Errorf("couldn't create player for session %v: %v", sID, err) diff --git a/lib/web/tty_playback.go b/lib/web/tty_playback.go index 76c603c1e49ec..f601f4237666c 100644 --- a/lib/web/tty_playback.go +++ b/lib/web/tty_playback.go @@ -88,6 +88,7 @@ func (h *Handler) ttyPlaybackHandle( Log: h.logger, SessionID: session.ID(sID), Streamer: clt, + Context: r.Context(), }) if err != nil { h.log.Warn("player error", err) diff --git a/tool/tctl/common/tctl.go b/tool/tctl/common/tctl.go index 14f954ce91f4a..f9f7c189e4636 100644 --- a/tool/tctl/common/tctl.go +++ b/tool/tctl/common/tctl.go @@ -457,6 +457,14 @@ func LoadConfigFromProfile(ccf *GlobalCLIFlags, cfg *servicecfg.Config) (*authcl return nil, trace.Wrap(err) } if profile.IsExpired(time.Now()) { + if profile.GetKeyRingError != nil { + if errors.As(profile.GetKeyRingError, new(*client.LegacyCertPathError)) { + // Intentionally avoid wrapping the error because the caller + // ignores NotFound errors. + return nil, trace.Errorf("it appears tsh v16 or older was used to log in, make sure to use tsh and tctl on the same major version\n\t%v", profile.GetKeyRingError) + } + return nil, trace.Wrap(profile.GetKeyRingError) + } return nil, trace.BadParameter("your credentials have expired, please login using `tsh login`") } diff --git a/tool/tctl/sso/configure/flags/file_reader_test.go b/tool/tctl/sso/configure/flags/file_reader_test.go index 742f0352b49a3..d235a55c0b8a5 100644 --- a/tool/tctl/sso/configure/flags/file_reader_test.go +++ b/tool/tctl/sso/configure/flags/file_reader_test.go @@ -17,12 +17,11 @@ package flags import ( - "math/rand" + "crypto/rand" "os" "path/filepath" "strings" "testing" - "time" "github.com/stretchr/testify/require" ) @@ -50,11 +49,9 @@ func TestFileReader(t *testing.T) { // random string fn = filepath.Join(tmp, "random.txt") - src := rand.NewSource(time.Now().UnixNano()) buf := make([]byte, 1024*1024) - for ix := range buf { - buf[ix] = byte(src.Int63()) - } + _, err = rand.Read(buf) + require.NoError(t, err) err = os.WriteFile(fn, buf, 0777) require.NoError(t, err) err = reader.Set(fn) diff --git a/tool/teleport-update/main.go b/tool/teleport-update/main.go index 1db37feae4954..9e19393f12d0c 100644 --- a/tool/teleport-update/main.go +++ b/tool/teleport-update/main.go @@ -29,6 +29,7 @@ import ( "syscall" "github.com/gravitational/trace" + "gopkg.in/yaml.v3" "github.com/gravitational/teleport" autoupdate "github.com/gravitational/teleport/lib/autoupdate/agent" @@ -106,7 +107,7 @@ func Run(args []string) error { versionCmd := app.Command("version", fmt.Sprintf("Print the version of your %s binary.", autoupdate.BinaryName)) - enableCmd := app.Command("enable", "Enable agent auto-updates and perform initial update.") + enableCmd := app.Command("enable", "Enable agent auto-updates and perform initial installation or update.") enableCmd.Flag("proxy", "Address of the Teleport Proxy."). Short('p').Envar(proxyServerEnvVar).StringVar(&ccfg.Proxy) enableCmd.Flag("group", "Update group for this agent installation."). @@ -119,17 +120,33 @@ func Run(args []string) error { Short('s').Hidden().BoolVar(&ccfg.SelfSetup) // TODO(sclevine): add force-fips and force-enterprise as hidden flags + pinCmd := app.Command("pin", "Install Teleport and lock the updater on the installed version.") + pinCmd.Flag("proxy", "Address of the Teleport Proxy."). + Short('p').Envar(proxyServerEnvVar).StringVar(&ccfg.Proxy) + pinCmd.Flag("group", "Update group for this agent installation."). + Short('g').Envar(updateGroupEnvVar).StringVar(&ccfg.Group) + pinCmd.Flag("template", "Go template used to override Teleport download URL."). + Short('t').Envar(templateEnvVar).StringVar(&ccfg.URLTemplate) + pinCmd.Flag("force-version", "Force the provided version instead of querying it from the Teleport cluster."). + Short('f').Envar(updateVersionEnvVar).StringVar(&ccfg.ForceVersion) + pinCmd.Flag("self-setup", "Use the current teleport-update binary to create systemd service config for auto-updates."). + Short('s').Hidden().BoolVar(&ccfg.SelfSetup) + disableCmd := app.Command("disable", "Disable agent auto-updates.") + unpinCmd := app.Command("unpin", "Unpin the current version, allowing it to be updated.") updateCmd := app.Command("update", "Update agent to the latest version, if a new version is available.") updateCmd.Flag("self-setup", "Use the current teleport-update binary to create systemd service config for auto-updates."). Short('s').Hidden().BoolVar(&ccfg.SelfSetup) linkCmd := app.Command("link-package", "Link the system installation of Teleport from the Teleport package, if auto-updates is disabled.") + unlinkCmd := app.Command("unlink-package", "Unlink the system installation of Teleport from the Teleport package.") setupCmd := app.Command("setup", "Write configuration files that run the update subcommand on a timer."). Hidden() + statusCmd := app.Command("status", "Show Teleport agent auto-update status.") + libutils.UpdateAppUsageTemplate(app, args) command, err := app.Parse(args) if err != nil { @@ -144,15 +161,25 @@ func Run(args []string) error { switch command { case enableCmd.FullCommand(): - err = cmdEnable(ctx, &ccfg) + ccfg.Enabled = true + err = cmdInstall(ctx, &ccfg) + case pinCmd.FullCommand(): + ccfg.Pinned = true + err = cmdInstall(ctx, &ccfg) case disableCmd.FullCommand(): err = cmdDisable(ctx, &ccfg) + case unpinCmd.FullCommand(): + err = cmdUnpin(ctx, &ccfg) case updateCmd.FullCommand(): err = cmdUpdate(ctx, &ccfg) case linkCmd.FullCommand(): err = cmdLink(ctx, &ccfg) + case unlinkCmd.FullCommand(): + err = cmdUnlink(ctx, &ccfg) case setupCmd.FullCommand(): err = cmdSetup(ctx, &ccfg) + case statusCmd.FullCommand(): + err = cmdStatus(ctx, &ccfg) case versionCmd.FullCommand(): modules.GetModules().PrintVersion() default: @@ -190,7 +217,7 @@ func cmdDisable(ctx context.Context, ccfg *cliConfig) error { Log: plog, }) if err != nil { - return trace.Errorf("failed to setup updater: %w", err) + return trace.Errorf("failed to initialize updater: %w", err) } unlock, err := libutils.FSWriteLock(filepath.Join(ccfg.DataDir, lockFileName)) if err != nil { @@ -207,8 +234,8 @@ func cmdDisable(ctx context.Context, ccfg *cliConfig) error { return nil } -// cmdEnable enables updates and triggers an initial update. -func cmdEnable(ctx context.Context, ccfg *cliConfig) error { +// cmdUnpin unpins the current version. +func cmdUnpin(ctx context.Context, ccfg *cliConfig) error { updater, err := autoupdate.NewLocalUpdater(autoupdate.LocalUpdaterConfig{ DataDir: ccfg.DataDir, LinkDir: ccfg.LinkDir, @@ -219,6 +246,33 @@ func cmdEnable(ctx context.Context, ccfg *cliConfig) error { if err != nil { return trace.Errorf("failed to setup updater: %w", err) } + unlock, err := libutils.FSWriteLock(filepath.Join(ccfg.DataDir, lockFileName)) + if err != nil { + return trace.Errorf("failed to grab concurrent execution lock: %w", err) + } + defer func() { + if err := unlock(); err != nil { + plog.DebugContext(ctx, "Failed to close lock file", "error", err) + } + }() + if err := updater.Unpin(ctx); err != nil { + return trace.Wrap(err) + } + return nil +} + +// cmdInstall installs Teleport and sets configuration. +func cmdInstall(ctx context.Context, ccfg *cliConfig) error { + updater, err := autoupdate.NewLocalUpdater(autoupdate.LocalUpdaterConfig{ + DataDir: ccfg.DataDir, + LinkDir: ccfg.LinkDir, + SystemDir: autoupdate.DefaultSystemDir, + SelfSetup: ccfg.SelfSetup, + Log: plog, + }) + if err != nil { + return trace.Errorf("failed to initialize updater: %w", err) + } // Ensure enable can't run concurrently. unlock, err := libutils.FSWriteLock(filepath.Join(ccfg.DataDir, lockFileName)) @@ -230,7 +284,7 @@ func cmdEnable(ctx context.Context, ccfg *cliConfig) error { plog.DebugContext(ctx, "Failed to close lock file", "error", err) } }() - if err := updater.Enable(ctx, ccfg.OverrideConfig); err != nil { + if err := updater.Install(ctx, ccfg.OverrideConfig); err != nil { return trace.Wrap(err) } return nil @@ -246,7 +300,7 @@ func cmdUpdate(ctx context.Context, ccfg *cliConfig) error { Log: plog, }) if err != nil { - return trace.Errorf("failed to setup updater: %w", err) + return trace.Errorf("failed to initialize updater: %w", err) } // Ensure update can't run concurrently. unlock, err := libutils.FSWriteLock(filepath.Join(ccfg.DataDir, lockFileName)) @@ -275,7 +329,7 @@ func cmdLink(ctx context.Context, ccfg *cliConfig) error { Log: plog, }) if err != nil { - return trace.Errorf("failed to setup updater: %w", err) + return trace.Errorf("failed to initialize updater: %w", err) } // Skip operation and warn if the updater is currently running. @@ -299,6 +353,39 @@ func cmdLink(ctx context.Context, ccfg *cliConfig) error { return nil } +// cmdUnlink remove system package links. +func cmdUnlink(ctx context.Context, ccfg *cliConfig) error { + updater, err := autoupdate.NewLocalUpdater(autoupdate.LocalUpdaterConfig{ + DataDir: ccfg.DataDir, + LinkDir: ccfg.LinkDir, + SystemDir: autoupdate.DefaultSystemDir, + SelfSetup: ccfg.SelfSetup, + Log: plog, + }) + if err != nil { + return trace.Errorf("failed to setup updater: %w", err) + } + + // Error if the updater is running. We could remove its links by accident. + unlock, err := libutils.FSTryWriteLock(filepath.Join(ccfg.DataDir, lockFileName)) + if errors.Is(err, libutils.ErrUnsuccessfulLockTry) { + return trace.Errorf("updater is currently running") + } + if err != nil { + return trace.Errorf("failed to grab concurrent execution lock: %w", err) + } + defer func() { + if err := unlock(); err != nil { + plog.DebugContext(ctx, "Failed to close lock file", "error", err) + } + }() + + if err := updater.UnlinkPackage(ctx); err != nil { + return trace.Wrap(err) + } + return nil +} + // cmdSetup writes configuration files that are needed to run teleport-update update. func cmdSetup(ctx context.Context, ccfg *cliConfig) error { err := autoupdate.Setup(ctx, plog, ccfg.LinkDir, ccfg.DataDir) @@ -311,3 +398,23 @@ func cmdSetup(ctx context.Context, ccfg *cliConfig) error { } return nil } + +// cmdStatus displays auto-update status. +func cmdStatus(ctx context.Context, ccfg *cliConfig) error { + updater, err := autoupdate.NewLocalUpdater(autoupdate.LocalUpdaterConfig{ + DataDir: ccfg.DataDir, + LinkDir: ccfg.LinkDir, + SystemDir: autoupdate.DefaultSystemDir, + SelfSetup: ccfg.SelfSetup, + Log: plog, + }) + if err != nil { + return trace.Errorf("failed to initialize updater: %w", err) + } + status, err := updater.Status(ctx) + if err != nil { + return trace.Errorf("failed to get status: %w", err) + } + enc := yaml.NewEncoder(os.Stdout) + return trace.Wrap(enc.Encode(status)) +} diff --git a/tool/tsh/common/tsh.go b/tool/tsh/common/tsh.go index f2d61ef9b175f..8c51c89641eda 100644 --- a/tool/tsh/common/tsh.go +++ b/tool/tsh/common/tsh.go @@ -1027,6 +1027,7 @@ func Run(ctx context.Context, args []string, opts ...CliOption) error { scp.Flag("preserve", "Preserves access and modification times from the original file").Short('p').BoolVar(&cf.PreserveAttrs) scp.Flag("quiet", "Quiet mode").Short('q').BoolVar(&cf.Quiet) scp.Flag("no-resume", "Disable SSH connection resumption").Envar(noResumeEnvVar).BoolVar(&cf.DisableSSHResumption) + scp.Flag("relogin", "Permit performing an authentication attempt on a failed command").Default("true").BoolVar(&cf.Relogin) // ls ls := app.Command("ls", "List remote SSH nodes.") ls.Flag("cluster", clusterHelp).Short('c').StringVar(&cf.SiteName) diff --git a/tool/tsh/common/tsh_test.go b/tool/tsh/common/tsh_test.go index 1525282057d12..d8c58df31ec99 100644 --- a/tool/tsh/common/tsh_test.go +++ b/tool/tsh/common/tsh_test.go @@ -407,6 +407,36 @@ func TestAlias(t *testing.T) { } } +// TestNoEnvVars checks if tsh is able to work without any env vars provided. +// This is important for VNet on macOS. When launchd starts VNet's launch daemon, it executes "tsh +// vnet-daemon" with only the following env vars available: +// +// XPC_SERVICE_NAME=com.goteleport.tshdev.vnetd +// PATH=/usr/bin:/bin:/usr/sbin:/sbin +// XPC_FLAGS=1 +// +// …plus whatever is set in the launch daemon plist under the EnvironmentVariables key. +func TestNoEnvVars(t *testing.T) { + t.Parallel() + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) + t.Cleanup(cancel) + + testExecutable, err := os.Executable() + require.NoError(t, err) + // Execute an actual command and not just `tsh help` which goes through a different code path. + cmd := exec.CommandContext(ctx, testExecutable, "version", "--client") + // Run the command with no env vars except tshBinMainTestEnv, otherwise the test would hang. + cmd.Env = []string{fmt.Sprintf("%s=1", tshBinMainTestEnv)} + + t.Logf("running command %v", cmd) + output, err := cmd.CombinedOutput() + t.Logf("executable output: %v", string(output)) + // By checking the ctx error together with err, the error report will include "context deadline + // exceeded" if the command doesn't complete within the timeout. Otherwise the error would be just + // "signal: killed". + require.NoError(t, trace.NewAggregate(err, ctx.Err())) +} + func TestFailedLogin(t *testing.T) { t.Parallel() tmpHomePath := t.TempDir() diff --git a/web/packages/teleport/src/Discover/Database/DeployService/AutoDeploy/AutoDeploy.tsx b/web/packages/teleport/src/Discover/Database/DeployService/AutoDeploy/AutoDeploy.tsx index 79a0355e73816..79ad036a1592f 100644 --- a/web/packages/teleport/src/Discover/Database/DeployService/AutoDeploy/AutoDeploy.tsx +++ b/web/packages/teleport/src/Discover/Database/DeployService/AutoDeploy/AutoDeploy.tsx @@ -545,6 +545,16 @@ const DeployHints = ({ + + Refer to the{' '} + + troubleshooting documentation + {' '} + for more details. + ); diff --git a/web/packages/teleport/src/Discover/Shared/AwsAccount/AwsAccount.test.tsx b/web/packages/teleport/src/Discover/Shared/AwsAccount/AwsAccount.test.tsx index 06a93feb72353..cbf77b8dca781 100644 --- a/web/packages/teleport/src/Discover/Shared/AwsAccount/AwsAccount.test.tsx +++ b/web/packages/teleport/src/Discover/Shared/AwsAccount/AwsAccount.test.tsx @@ -129,7 +129,7 @@ test('missing permissions for integrations', async () => { renderAwsAccount(ctx, discoverCtx); expect( - screen.getByText(/required permissions for integrating/i) + screen.getByText(/permissions required to set up this integration/i) ).toBeInTheDocument(); expect(screen.queryByText(/aws integrations/i)).not.toBeInTheDocument(); diff --git a/web/packages/teleport/src/Discover/Shared/AwsAccount/AwsAccount.tsx b/web/packages/teleport/src/Discover/Shared/AwsAccount/AwsAccount.tsx index 175bc33c65641..d651596820a1e 100644 --- a/web/packages/teleport/src/Discover/Shared/AwsAccount/AwsAccount.tsx +++ b/web/packages/teleport/src/Discover/Shared/AwsAccount/AwsAccount.tsx @@ -165,7 +165,7 @@ export function AwsAccount() { - You don’t have the required permissions for integrating. + You don’t have the permissions required to set up this integration.
Ask your Teleport administrator to update your role with the following: diff --git a/web/packages/teleport/src/services/recordings/makeRecording.ts b/web/packages/teleport/src/services/recordings/makeRecording.ts index 3a9264f3630f3..3b69c2508fa41 100644 --- a/web/packages/teleport/src/services/recordings/makeRecording.ts +++ b/web/packages/teleport/src/services/recordings/makeRecording.ts @@ -66,6 +66,7 @@ function makeDesktopRecording({ function makeSshOrKubeRecording({ participants, + user, time, session_start, session_stop, @@ -84,9 +85,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". @@ -101,7 +106,7 @@ function makeSshOrKubeRecording({ durationText, sid, createdDate: new Date(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 248d6199b10da..507828e3a9490 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: '', 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 (