From 29b04c4a4cab97c76914fd8c81f781d81bea2982 Mon Sep 17 00:00:00 2001 From: Shingo Omura Date: Thu, 30 May 2024 23:58:33 +0900 Subject: [PATCH 1/5] KEP-3619: update cri-api dependency --- go.mod | 2 +- go.sum | 4 +- .../cri-api/pkg/apis/runtime/v1/api.pb.go | 1207 ++++++++++------- .../cri-api/pkg/apis/runtime/v1/api.proto | 12 + vendor/modules.txt | 2 +- 5 files changed, 740 insertions(+), 487 deletions(-) diff --git a/go.mod b/go.mod index 94c742e869..6aa803a34b 100644 --- a/go.mod +++ b/go.mod @@ -31,7 +31,7 @@ require ( k8s.io/api v0.31.0-beta.0 k8s.io/apimachinery v0.31.0-beta.0 k8s.io/client-go v0.31.0-beta.0 - k8s.io/cri-api v0.31.0-beta.0 + k8s.io/cri-api v0.31.0-beta.0.0.20240716205706-865479a3e1b3 k8s.io/cri-client v0.31.0-beta.0 k8s.io/klog/v2 v2.130.1 k8s.io/kubectl v0.30.3 diff --git a/go.sum b/go.sum index 751018d41e..8eb61f7ec2 100644 --- a/go.sum +++ b/go.sum @@ -238,8 +238,8 @@ k8s.io/client-go v0.31.0-beta.0 h1:op39m8L2YX8cUVTj8Fj+SD09axcxwPbFlipM3x+11fc= k8s.io/client-go v0.31.0-beta.0/go.mod h1:ZTCtLpZyZDJBji9GGwrzKjR60/lVXvm8WLdgTEqPRw4= k8s.io/component-base v0.31.0-beta.0 h1:Pw4OEeykCxfs8fTCslHEWggbNe/24W4TYVIn1VEdkjE= k8s.io/component-base v0.31.0-beta.0/go.mod h1:mjY7SWAP/NhFiwUkdT+gzhGDI/cBqB/Pi5tF443aikE= -k8s.io/cri-api v0.31.0-beta.0 h1:U+E5RaGMtR1TLsJvaxb0RCVRU9ZcDPrC5EiCxb1uN1s= -k8s.io/cri-api v0.31.0-beta.0/go.mod h1:Po3TMAYH/+KrZabi7QiwQI4a692oZcUOUThd/rqwxrI= +k8s.io/cri-api v0.31.0-beta.0.0.20240716205706-865479a3e1b3 h1:Ajq0xvhs7HDrZVLgqUenylY8i4BkaazJzfeM+fh63AU= +k8s.io/cri-api v0.31.0-beta.0.0.20240716205706-865479a3e1b3/go.mod h1:Po3TMAYH/+KrZabi7QiwQI4a692oZcUOUThd/rqwxrI= k8s.io/cri-client v0.31.0-beta.0 h1:VIq3WTdpshrNkbM/zXmOedEValrOsSseqrLRXeK/s/k= k8s.io/cri-client v0.31.0-beta.0/go.mod h1:qtduCKkjfx6kUepnUL6vyROfA43bVpmnIpD4pSw4JZo= k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk= diff --git a/vendor/k8s.io/cri-api/pkg/apis/runtime/v1/api.pb.go b/vendor/k8s.io/cri-api/pkg/apis/runtime/v1/api.pb.go index 6bff68e112..0922abbe1f 100644 --- a/vendor/k8s.io/cri-api/pkg/apis/runtime/v1/api.pb.go +++ b/vendor/k8s.io/cri-api/pkg/apis/runtime/v1/api.pb.go @@ -7930,6 +7930,7 @@ func (m *StatusRequest) GetVerbose() bool { return false } +// RuntimeHandlerFeatures is a set of features implemented by the runtime handler. type RuntimeHandlerFeatures struct { // recursive_read_only_mounts is set to true if the runtime handler supports // recursive read-only mounts. @@ -8045,6 +8046,55 @@ func (m *RuntimeHandler) GetFeatures() *RuntimeHandlerFeatures { return nil } +// RuntimeFeatures describes the set of features implemented by the CRI implementation. +// The features contained in the RuntimeFeatures should depend only on the cri implementation +// independent of runtime handlers. +type RuntimeFeatures struct { + // supplemental_groups_policy is set to true if the runtime supports SupplementalGroupsPolicy and ContainerUser. + SupplementalGroupsPolicy bool `protobuf:"varint,1,opt,name=supplemental_groups_policy,json=supplementalGroupsPolicy,proto3" json:"supplemental_groups_policy,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *RuntimeFeatures) Reset() { *m = RuntimeFeatures{} } +func (*RuntimeFeatures) ProtoMessage() {} +func (*RuntimeFeatures) Descriptor() ([]byte, []int) { + return fileDescriptor_00212fb1f9d3bf1c, []int{114} +} +func (m *RuntimeFeatures) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RuntimeFeatures) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_RuntimeFeatures.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 *RuntimeFeatures) XXX_Merge(src proto.Message) { + xxx_messageInfo_RuntimeFeatures.Merge(m, src) +} +func (m *RuntimeFeatures) XXX_Size() int { + return m.Size() +} +func (m *RuntimeFeatures) XXX_DiscardUnknown() { + xxx_messageInfo_RuntimeFeatures.DiscardUnknown(m) +} + +var xxx_messageInfo_RuntimeFeatures proto.InternalMessageInfo + +func (m *RuntimeFeatures) GetSupplementalGroupsPolicy() bool { + if m != nil { + return m.SupplementalGroupsPolicy + } + return false +} + type StatusResponse struct { // Status of the Runtime. Status *RuntimeStatus `protobuf:"bytes,1,opt,name=status,proto3" json:"status,omitempty"` @@ -8054,15 +8104,18 @@ type StatusResponse struct { // It should only be returned non-empty when Verbose is true. Info map[string]string `protobuf:"bytes,2,rep,name=info,proto3" json:"info,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // Runtime handlers. - RuntimeHandlers []*RuntimeHandler `protobuf:"bytes,3,rep,name=runtime_handlers,json=runtimeHandlers,proto3" json:"runtime_handlers,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_sizecache int32 `json:"-"` + RuntimeHandlers []*RuntimeHandler `protobuf:"bytes,3,rep,name=runtime_handlers,json=runtimeHandlers,proto3" json:"runtime_handlers,omitempty"` + // features describes the set of features implemented by the CRI implementation. + // This field is supposed to propagate to NodeFeatures in Kubernetes API. + Features *RuntimeFeatures `protobuf:"bytes,4,opt,name=features,proto3" json:"features,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *StatusResponse) Reset() { *m = StatusResponse{} } func (*StatusResponse) ProtoMessage() {} func (*StatusResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_00212fb1f9d3bf1c, []int{114} + return fileDescriptor_00212fb1f9d3bf1c, []int{115} } func (m *StatusResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -8112,6 +8165,13 @@ func (m *StatusResponse) GetRuntimeHandlers() []*RuntimeHandler { return nil } +func (m *StatusResponse) GetFeatures() *RuntimeFeatures { + if m != nil { + return m.Features + } + return nil +} + type ImageFsInfoRequest struct { XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_sizecache int32 `json:"-"` @@ -8120,7 +8180,7 @@ type ImageFsInfoRequest struct { func (m *ImageFsInfoRequest) Reset() { *m = ImageFsInfoRequest{} } func (*ImageFsInfoRequest) ProtoMessage() {} func (*ImageFsInfoRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_00212fb1f9d3bf1c, []int{115} + return fileDescriptor_00212fb1f9d3bf1c, []int{116} } func (m *ImageFsInfoRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -8160,7 +8220,7 @@ type UInt64Value struct { func (m *UInt64Value) Reset() { *m = UInt64Value{} } func (*UInt64Value) ProtoMessage() {} func (*UInt64Value) Descriptor() ([]byte, []int) { - return fileDescriptor_00212fb1f9d3bf1c, []int{116} + return fileDescriptor_00212fb1f9d3bf1c, []int{117} } func (m *UInt64Value) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -8207,7 +8267,7 @@ type FilesystemIdentifier struct { func (m *FilesystemIdentifier) Reset() { *m = FilesystemIdentifier{} } func (*FilesystemIdentifier) ProtoMessage() {} func (*FilesystemIdentifier) Descriptor() ([]byte, []int) { - return fileDescriptor_00212fb1f9d3bf1c, []int{117} + return fileDescriptor_00212fb1f9d3bf1c, []int{118} } func (m *FilesystemIdentifier) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -8264,7 +8324,7 @@ type FilesystemUsage struct { func (m *FilesystemUsage) Reset() { *m = FilesystemUsage{} } func (*FilesystemUsage) ProtoMessage() {} func (*FilesystemUsage) Descriptor() ([]byte, []int) { - return fileDescriptor_00212fb1f9d3bf1c, []int{118} + return fileDescriptor_00212fb1f9d3bf1c, []int{119} } func (m *FilesystemUsage) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -8338,7 +8398,7 @@ type WindowsFilesystemUsage struct { func (m *WindowsFilesystemUsage) Reset() { *m = WindowsFilesystemUsage{} } func (*WindowsFilesystemUsage) ProtoMessage() {} func (*WindowsFilesystemUsage) Descriptor() ([]byte, []int) { - return fileDescriptor_00212fb1f9d3bf1c, []int{119} + return fileDescriptor_00212fb1f9d3bf1c, []int{120} } func (m *WindowsFilesystemUsage) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -8403,7 +8463,7 @@ type ImageFsInfoResponse struct { func (m *ImageFsInfoResponse) Reset() { *m = ImageFsInfoResponse{} } func (*ImageFsInfoResponse) ProtoMessage() {} func (*ImageFsInfoResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_00212fb1f9d3bf1c, []int{120} + return fileDescriptor_00212fb1f9d3bf1c, []int{121} } func (m *ImageFsInfoResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -8456,7 +8516,7 @@ type ContainerStatsRequest struct { func (m *ContainerStatsRequest) Reset() { *m = ContainerStatsRequest{} } func (*ContainerStatsRequest) ProtoMessage() {} func (*ContainerStatsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_00212fb1f9d3bf1c, []int{121} + return fileDescriptor_00212fb1f9d3bf1c, []int{122} } func (m *ContainerStatsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -8502,7 +8562,7 @@ type ContainerStatsResponse struct { func (m *ContainerStatsResponse) Reset() { *m = ContainerStatsResponse{} } func (*ContainerStatsResponse) ProtoMessage() {} func (*ContainerStatsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_00212fb1f9d3bf1c, []int{122} + return fileDescriptor_00212fb1f9d3bf1c, []int{123} } func (m *ContainerStatsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -8548,7 +8608,7 @@ type ListContainerStatsRequest struct { func (m *ListContainerStatsRequest) Reset() { *m = ListContainerStatsRequest{} } func (*ListContainerStatsRequest) ProtoMessage() {} func (*ListContainerStatsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_00212fb1f9d3bf1c, []int{123} + return fileDescriptor_00212fb1f9d3bf1c, []int{124} } func (m *ListContainerStatsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -8602,7 +8662,7 @@ type ContainerStatsFilter struct { func (m *ContainerStatsFilter) Reset() { *m = ContainerStatsFilter{} } func (*ContainerStatsFilter) ProtoMessage() {} func (*ContainerStatsFilter) Descriptor() ([]byte, []int) { - return fileDescriptor_00212fb1f9d3bf1c, []int{124} + return fileDescriptor_00212fb1f9d3bf1c, []int{125} } func (m *ContainerStatsFilter) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -8662,7 +8722,7 @@ type ListContainerStatsResponse struct { func (m *ListContainerStatsResponse) Reset() { *m = ListContainerStatsResponse{} } func (*ListContainerStatsResponse) ProtoMessage() {} func (*ListContainerStatsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_00212fb1f9d3bf1c, []int{125} + return fileDescriptor_00212fb1f9d3bf1c, []int{126} } func (m *ListContainerStatsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -8718,7 +8778,7 @@ type ContainerAttributes struct { func (m *ContainerAttributes) Reset() { *m = ContainerAttributes{} } func (*ContainerAttributes) ProtoMessage() {} func (*ContainerAttributes) Descriptor() ([]byte, []int) { - return fileDescriptor_00212fb1f9d3bf1c, []int{126} + return fileDescriptor_00212fb1f9d3bf1c, []int{127} } func (m *ContainerAttributes) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -8794,7 +8854,7 @@ type ContainerStats struct { func (m *ContainerStats) Reset() { *m = ContainerStats{} } func (*ContainerStats) ProtoMessage() {} func (*ContainerStats) Descriptor() ([]byte, []int) { - return fileDescriptor_00212fb1f9d3bf1c, []int{127} + return fileDescriptor_00212fb1f9d3bf1c, []int{128} } func (m *ContainerStats) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -8875,7 +8935,7 @@ type WindowsContainerStats struct { func (m *WindowsContainerStats) Reset() { *m = WindowsContainerStats{} } func (*WindowsContainerStats) ProtoMessage() {} func (*WindowsContainerStats) Descriptor() ([]byte, []int) { - return fileDescriptor_00212fb1f9d3bf1c, []int{128} + return fileDescriptor_00212fb1f9d3bf1c, []int{129} } func (m *WindowsContainerStats) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -8948,7 +9008,7 @@ type CpuUsage struct { func (m *CpuUsage) Reset() { *m = CpuUsage{} } func (*CpuUsage) ProtoMessage() {} func (*CpuUsage) Descriptor() ([]byte, []int) { - return fileDescriptor_00212fb1f9d3bf1c, []int{129} + return fileDescriptor_00212fb1f9d3bf1c, []int{130} } func (m *CpuUsage) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -9014,7 +9074,7 @@ type WindowsCpuUsage struct { func (m *WindowsCpuUsage) Reset() { *m = WindowsCpuUsage{} } func (*WindowsCpuUsage) ProtoMessage() {} func (*WindowsCpuUsage) Descriptor() ([]byte, []int) { - return fileDescriptor_00212fb1f9d3bf1c, []int{130} + return fileDescriptor_00212fb1f9d3bf1c, []int{131} } func (m *WindowsCpuUsage) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -9087,7 +9147,7 @@ type MemoryUsage struct { func (m *MemoryUsage) Reset() { *m = MemoryUsage{} } func (*MemoryUsage) ProtoMessage() {} func (*MemoryUsage) Descriptor() ([]byte, []int) { - return fileDescriptor_00212fb1f9d3bf1c, []int{131} + return fileDescriptor_00212fb1f9d3bf1c, []int{132} } func (m *MemoryUsage) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -9179,7 +9239,7 @@ type SwapUsage struct { func (m *SwapUsage) Reset() { *m = SwapUsage{} } func (*SwapUsage) ProtoMessage() {} func (*SwapUsage) Descriptor() ([]byte, []int) { - return fileDescriptor_00212fb1f9d3bf1c, []int{132} + return fileDescriptor_00212fb1f9d3bf1c, []int{133} } func (m *SwapUsage) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -9248,7 +9308,7 @@ type WindowsMemoryUsage struct { func (m *WindowsMemoryUsage) Reset() { *m = WindowsMemoryUsage{} } func (*WindowsMemoryUsage) ProtoMessage() {} func (*WindowsMemoryUsage) Descriptor() ([]byte, []int) { - return fileDescriptor_00212fb1f9d3bf1c, []int{133} + return fileDescriptor_00212fb1f9d3bf1c, []int{134} } func (m *WindowsMemoryUsage) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -9322,7 +9382,7 @@ type ReopenContainerLogRequest struct { func (m *ReopenContainerLogRequest) Reset() { *m = ReopenContainerLogRequest{} } func (*ReopenContainerLogRequest) ProtoMessage() {} func (*ReopenContainerLogRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_00212fb1f9d3bf1c, []int{134} + return fileDescriptor_00212fb1f9d3bf1c, []int{135} } func (m *ReopenContainerLogRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -9366,7 +9426,7 @@ type ReopenContainerLogResponse struct { func (m *ReopenContainerLogResponse) Reset() { *m = ReopenContainerLogResponse{} } func (*ReopenContainerLogResponse) ProtoMessage() {} func (*ReopenContainerLogResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_00212fb1f9d3bf1c, []int{135} + return fileDescriptor_00212fb1f9d3bf1c, []int{136} } func (m *ReopenContainerLogResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -9411,7 +9471,7 @@ type CheckpointContainerRequest struct { func (m *CheckpointContainerRequest) Reset() { *m = CheckpointContainerRequest{} } func (*CheckpointContainerRequest) ProtoMessage() {} func (*CheckpointContainerRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_00212fb1f9d3bf1c, []int{136} + return fileDescriptor_00212fb1f9d3bf1c, []int{137} } func (m *CheckpointContainerRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -9469,7 +9529,7 @@ type CheckpointContainerResponse struct { func (m *CheckpointContainerResponse) Reset() { *m = CheckpointContainerResponse{} } func (*CheckpointContainerResponse) ProtoMessage() {} func (*CheckpointContainerResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_00212fb1f9d3bf1c, []int{137} + return fileDescriptor_00212fb1f9d3bf1c, []int{138} } func (m *CheckpointContainerResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -9506,7 +9566,7 @@ type GetEventsRequest struct { func (m *GetEventsRequest) Reset() { *m = GetEventsRequest{} } func (*GetEventsRequest) ProtoMessage() {} func (*GetEventsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_00212fb1f9d3bf1c, []int{138} + return fileDescriptor_00212fb1f9d3bf1c, []int{139} } func (m *GetEventsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -9553,7 +9613,7 @@ type ContainerEventResponse struct { func (m *ContainerEventResponse) Reset() { *m = ContainerEventResponse{} } func (*ContainerEventResponse) ProtoMessage() {} func (*ContainerEventResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_00212fb1f9d3bf1c, []int{139} + return fileDescriptor_00212fb1f9d3bf1c, []int{140} } func (m *ContainerEventResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -9625,7 +9685,7 @@ type ListMetricDescriptorsRequest struct { func (m *ListMetricDescriptorsRequest) Reset() { *m = ListMetricDescriptorsRequest{} } func (*ListMetricDescriptorsRequest) ProtoMessage() {} func (*ListMetricDescriptorsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_00212fb1f9d3bf1c, []int{140} + return fileDescriptor_00212fb1f9d3bf1c, []int{141} } func (m *ListMetricDescriptorsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -9663,7 +9723,7 @@ type ListMetricDescriptorsResponse struct { func (m *ListMetricDescriptorsResponse) Reset() { *m = ListMetricDescriptorsResponse{} } func (*ListMetricDescriptorsResponse) ProtoMessage() {} func (*ListMetricDescriptorsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_00212fb1f9d3bf1c, []int{141} + return fileDescriptor_00212fb1f9d3bf1c, []int{142} } func (m *ListMetricDescriptorsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -9716,7 +9776,7 @@ type MetricDescriptor struct { func (m *MetricDescriptor) Reset() { *m = MetricDescriptor{} } func (*MetricDescriptor) ProtoMessage() {} func (*MetricDescriptor) Descriptor() ([]byte, []int) { - return fileDescriptor_00212fb1f9d3bf1c, []int{142} + return fileDescriptor_00212fb1f9d3bf1c, []int{143} } func (m *MetricDescriptor) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -9774,7 +9834,7 @@ type ListPodSandboxMetricsRequest struct { func (m *ListPodSandboxMetricsRequest) Reset() { *m = ListPodSandboxMetricsRequest{} } func (*ListPodSandboxMetricsRequest) ProtoMessage() {} func (*ListPodSandboxMetricsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_00212fb1f9d3bf1c, []int{143} + return fileDescriptor_00212fb1f9d3bf1c, []int{144} } func (m *ListPodSandboxMetricsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -9812,7 +9872,7 @@ type ListPodSandboxMetricsResponse struct { func (m *ListPodSandboxMetricsResponse) Reset() { *m = ListPodSandboxMetricsResponse{} } func (*ListPodSandboxMetricsResponse) ProtoMessage() {} func (*ListPodSandboxMetricsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_00212fb1f9d3bf1c, []int{144} + return fileDescriptor_00212fb1f9d3bf1c, []int{145} } func (m *ListPodSandboxMetricsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -9859,7 +9919,7 @@ type PodSandboxMetrics struct { func (m *PodSandboxMetrics) Reset() { *m = PodSandboxMetrics{} } func (*PodSandboxMetrics) ProtoMessage() {} func (*PodSandboxMetrics) Descriptor() ([]byte, []int) { - return fileDescriptor_00212fb1f9d3bf1c, []int{145} + return fileDescriptor_00212fb1f9d3bf1c, []int{146} } func (m *PodSandboxMetrics) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -9919,7 +9979,7 @@ type ContainerMetrics struct { func (m *ContainerMetrics) Reset() { *m = ContainerMetrics{} } func (*ContainerMetrics) ProtoMessage() {} func (*ContainerMetrics) Descriptor() ([]byte, []int) { - return fileDescriptor_00212fb1f9d3bf1c, []int{146} + return fileDescriptor_00212fb1f9d3bf1c, []int{147} } func (m *ContainerMetrics) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -9982,7 +10042,7 @@ type Metric struct { func (m *Metric) Reset() { *m = Metric{} } func (*Metric) ProtoMessage() {} func (*Metric) Descriptor() ([]byte, []int) { - return fileDescriptor_00212fb1f9d3bf1c, []int{147} + return fileDescriptor_00212fb1f9d3bf1c, []int{148} } func (m *Metric) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -10054,7 +10114,7 @@ type RuntimeConfigRequest struct { func (m *RuntimeConfigRequest) Reset() { *m = RuntimeConfigRequest{} } func (*RuntimeConfigRequest) ProtoMessage() {} func (*RuntimeConfigRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_00212fb1f9d3bf1c, []int{148} + return fileDescriptor_00212fb1f9d3bf1c, []int{149} } func (m *RuntimeConfigRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -10095,7 +10155,7 @@ type RuntimeConfigResponse struct { func (m *RuntimeConfigResponse) Reset() { *m = RuntimeConfigResponse{} } func (*RuntimeConfigResponse) ProtoMessage() {} func (*RuntimeConfigResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_00212fb1f9d3bf1c, []int{149} + return fileDescriptor_00212fb1f9d3bf1c, []int{150} } func (m *RuntimeConfigResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -10147,7 +10207,7 @@ type LinuxRuntimeConfiguration struct { func (m *LinuxRuntimeConfiguration) Reset() { *m = LinuxRuntimeConfiguration{} } func (*LinuxRuntimeConfiguration) ProtoMessage() {} func (*LinuxRuntimeConfiguration) Descriptor() ([]byte, []int) { - return fileDescriptor_00212fb1f9d3bf1c, []int{150} + return fileDescriptor_00212fb1f9d3bf1c, []int{151} } func (m *LinuxRuntimeConfiguration) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -10332,6 +10392,7 @@ func init() { proto.RegisterType((*StatusRequest)(nil), "runtime.v1.StatusRequest") proto.RegisterType((*RuntimeHandlerFeatures)(nil), "runtime.v1.RuntimeHandlerFeatures") proto.RegisterType((*RuntimeHandler)(nil), "runtime.v1.RuntimeHandler") + proto.RegisterType((*RuntimeFeatures)(nil), "runtime.v1.RuntimeFeatures") proto.RegisterType((*StatusResponse)(nil), "runtime.v1.StatusResponse") proto.RegisterMapType((map[string]string)(nil), "runtime.v1.StatusResponse.InfoEntry") proto.RegisterType((*ImageFsInfoRequest)(nil), "runtime.v1.ImageFsInfoRequest") @@ -10378,451 +10439,453 @@ func init() { func init() { proto.RegisterFile("api.proto", fileDescriptor_00212fb1f9d3bf1c) } var fileDescriptor_00212fb1f9d3bf1c = []byte{ - // 7093 bytes of a gzipped FileDescriptorProto + // 7123 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x7d, 0x5d, 0x6c, 0x1c, 0xc9, 0x75, 0x2e, 0x7b, 0x66, 0x48, 0xce, 0x1c, 0x72, 0xc8, 0x61, 0x89, 0x22, 0xa9, 0x91, 0x44, 0x49, - 0xbd, 0x7f, 0x92, 0x76, 0xf5, 0xb3, 0x5a, 0xed, 0xae, 0xa4, 0xfd, 0xd3, 0x88, 0xa4, 0xb4, 0xb3, - 0x16, 0xc9, 0x71, 0x0f, 0xb9, 0xf6, 0xae, 0x2f, 0xdc, 0xb7, 0x35, 0x5d, 0x1c, 0xf6, 0x6a, 0xa6, - 0xbb, 0xdd, 0xdd, 0x43, 0x89, 0x7e, 0xb8, 0xb8, 0x4f, 0x17, 0x37, 0x7e, 0x32, 0x90, 0x18, 0x41, - 0x8c, 0x20, 0x86, 0x03, 0x04, 0xc9, 0x5b, 0x12, 0x03, 0x49, 0x1c, 0x24, 0x40, 0x80, 0x20, 0x31, - 0x9c, 0x00, 0x01, 0xf2, 0x90, 0x00, 0x7e, 0x08, 0x10, 0x7b, 0x13, 0x20, 0x40, 0x9e, 0xfd, 0x90, - 0x97, 0xc4, 0x41, 0xfd, 0x75, 0x77, 0xf5, 0xcf, 0xcc, 0x90, 0xbb, 0xd9, 0x5d, 0x3f, 0x71, 0xba, - 0xea, 0x9c, 0x53, 0x55, 0xa7, 0x4e, 0x9d, 0x3a, 0x55, 0xf5, 0x55, 0x11, 0x2a, 0x86, 0x6b, 0x5d, - 0x75, 0x3d, 0x27, 0x70, 0x10, 0x78, 0x03, 0x3b, 0xb0, 0xfa, 0xf8, 0xea, 0xc1, 0xcb, 0xf5, 0x2b, - 0x5d, 0x2b, 0xd8, 0x1f, 0x3c, 0xba, 0xda, 0x71, 0xfa, 0xd7, 0xba, 0x4e, 0xd7, 0xb9, 0x46, 0x49, - 0x1e, 0x0d, 0xf6, 0xe8, 0x17, 0xfd, 0xa0, 0xbf, 0x18, 0xab, 0x7a, 0x19, 0xe6, 0xde, 0xc7, 0x9e, - 0x6f, 0x39, 0xb6, 0x86, 0xbf, 0x31, 0xc0, 0x7e, 0x80, 0x56, 0x60, 0xfa, 0x80, 0xa5, 0xac, 0x28, - 0xe7, 0x95, 0x8b, 0x15, 0x4d, 0x7c, 0xaa, 0xbf, 0xab, 0xc0, 0x7c, 0x48, 0xec, 0xbb, 0x8e, 0xed, - 0xe3, 0x7c, 0x6a, 0x74, 0x01, 0x66, 0x79, 0xb5, 0x74, 0xdb, 0xe8, 0xe3, 0x95, 0x02, 0xcd, 0x9e, - 0xe1, 0x69, 0x5b, 0x46, 0x1f, 0xa3, 0x17, 0x60, 0x5e, 0x90, 0x08, 0x21, 0x45, 0x4a, 0x35, 0xc7, - 0x93, 0x79, 0x69, 0xe8, 0x2a, 0x9c, 0x10, 0x84, 0x86, 0x6b, 0x85, 0xc4, 0x25, 0x4a, 0xbc, 0xc0, - 0xb3, 0x1a, 0xae, 0xc5, 0xe9, 0xd5, 0xaf, 0x41, 0x65, 0x7d, 0xab, 0xbd, 0xe6, 0xd8, 0x7b, 0x56, - 0x97, 0x54, 0xd1, 0xc7, 0x1e, 0xe1, 0x59, 0x51, 0xce, 0x17, 0x49, 0x15, 0xf9, 0x27, 0xaa, 0x43, - 0xd9, 0xc7, 0x86, 0xd7, 0xd9, 0xc7, 0xfe, 0x4a, 0x81, 0x66, 0x85, 0xdf, 0x84, 0xcb, 0x71, 0x03, - 0xcb, 0xb1, 0xfd, 0x95, 0x22, 0xe3, 0xe2, 0x9f, 0xea, 0x6f, 0x2a, 0x30, 0xd3, 0x72, 0xbc, 0x60, - 0xd3, 0x70, 0x5d, 0xcb, 0xee, 0xa2, 0xeb, 0x50, 0xa6, 0xba, 0xec, 0x38, 0x3d, 0xaa, 0x83, 0xb9, - 0x1b, 0x8b, 0x57, 0xa3, 0x0e, 0xb9, 0xda, 0xe2, 0x79, 0x5a, 0x48, 0x85, 0x9e, 0x83, 0xb9, 0x8e, - 0x63, 0x07, 0x86, 0x65, 0x63, 0x4f, 0x77, 0x1d, 0x2f, 0xa0, 0xca, 0x99, 0xd4, 0xaa, 0x61, 0x2a, - 0x91, 0x8f, 0x4e, 0x43, 0x65, 0xdf, 0xf1, 0x03, 0x46, 0x51, 0xa4, 0x14, 0x65, 0x92, 0x40, 0x33, - 0x97, 0x61, 0x9a, 0x66, 0x5a, 0x2e, 0x57, 0xc3, 0x14, 0xf9, 0x6c, 0xba, 0xea, 0xf7, 0x8a, 0x30, - 0xb9, 0xe9, 0x0c, 0xec, 0x20, 0x51, 0x8c, 0x11, 0xec, 0xf3, 0x2e, 0x8a, 0x15, 0x63, 0x04, 0xfb, - 0x51, 0x31, 0x84, 0x82, 0xf5, 0x12, 0x2b, 0x86, 0x64, 0xd6, 0xa1, 0xec, 0x61, 0xc3, 0x74, 0xec, - 0xde, 0x21, 0xad, 0x42, 0x59, 0x0b, 0xbf, 0x49, 0xf7, 0xf9, 0xb8, 0x67, 0xd9, 0x83, 0xa7, 0xba, - 0x87, 0x7b, 0xc6, 0x23, 0xdc, 0xa3, 0x55, 0x29, 0x6b, 0x73, 0x3c, 0x59, 0x63, 0xa9, 0xe8, 0x6d, - 0x98, 0x71, 0x3d, 0xc7, 0x35, 0xba, 0x06, 0xd1, 0xe0, 0xca, 0x24, 0x55, 0xd2, 0x99, 0xb8, 0x92, - 0x68, 0x85, 0x5b, 0x11, 0x8d, 0x16, 0x67, 0x40, 0xaf, 0xc3, 0xcc, 0xc0, 0x32, 0xb9, 0xbe, 0xfd, - 0x95, 0xa9, 0xf3, 0xc5, 0x8b, 0x33, 0x37, 0x4e, 0xc6, 0xf9, 0x9b, 0xeb, 0x3c, 0x57, 0x8b, 0x53, - 0x12, 0xc6, 0x6e, 0x8c, 0x71, 0x7a, 0x28, 0x63, 0x8c, 0x92, 0x1a, 0x1c, 0xee, 0x0c, 0x3c, 0xdf, - 0x3a, 0xc0, 0x3a, 0x69, 0xb0, 0x4e, 0x35, 0x50, 0xa6, 0xcd, 0x5b, 0x08, 0xb3, 0x34, 0x6c, 0x98, - 0xdb, 0x44, 0x15, 0x2f, 0xc2, 0xa4, 0xd5, 0x37, 0xba, 0x78, 0xa5, 0x72, 0x5e, 0x49, 0x15, 0x41, - 0x32, 0xda, 0x2e, 0xee, 0x68, 0x8c, 0x46, 0xd5, 0xa1, 0x12, 0x16, 0x1b, 0xf5, 0xa3, 0x49, 0x7b, - 0xa7, 0xca, 0xfb, 0xd1, 0x24, 0xe3, 0x27, 0xea, 0x3d, 0xcb, 0xa4, 0x3d, 0x53, 0xd5, 0x66, 0xc2, - 0xb4, 0xa6, 0x89, 0x96, 0x60, 0xaa, 0x87, 0xed, 0x6e, 0xb0, 0x4f, 0xbb, 0xa6, 0xaa, 0xf1, 0x2f, - 0xf5, 0xd7, 0x14, 0xa8, 0xee, 0xfa, 0xd8, 0x23, 0x83, 0xcc, 0x77, 0x8d, 0x0e, 0x46, 0x57, 0xa0, - 0xd4, 0x77, 0x4c, 0xcc, 0xed, 0xf3, 0x54, 0xbc, 0x7a, 0x21, 0xd1, 0xa6, 0x63, 0x62, 0x8d, 0x92, - 0xa1, 0x4b, 0x50, 0x1a, 0x58, 0x26, 0x1b, 0x14, 0xb9, 0x0a, 0xa3, 0x24, 0x84, 0xb4, 0x4b, 0x48, - 0x8b, 0x43, 0x49, 0x09, 0x89, 0xfa, 0x0b, 0x05, 0xe6, 0xc3, 0xd2, 0xb6, 0xe9, 0x68, 0x42, 0xaf, - 0xc0, 0xb4, 0x8d, 0x83, 0x27, 0x8e, 0xf7, 0x78, 0x74, 0xdd, 0x04, 0x25, 0x7a, 0x11, 0x8a, 0x2e, - 0xd7, 0xc8, 0x50, 0x06, 0x42, 0x45, 0x88, 0x2d, 0xb7, 0x43, 0x35, 0x34, 0x9c, 0xd8, 0x72, 0x3b, - 0x64, 0x2c, 0x04, 0x86, 0xd7, 0xc5, 0xb4, 0x3f, 0xd8, 0xb8, 0x2a, 0xb3, 0x84, 0xa6, 0x89, 0xee, - 0xc2, 0xdc, 0xc0, 0xc7, 0x9e, 0xed, 0xeb, 0xc2, 0x33, 0x4c, 0xd2, 0xde, 0x96, 0x84, 0x4a, 0x7a, - 0xd7, 0xaa, 0x8c, 0x61, 0x9b, 0xbb, 0x0e, 0x15, 0xa0, 0x69, 0x07, 0xaf, 0xdd, 0x7c, 0xdf, 0xe8, - 0x0d, 0x30, 0x5a, 0x84, 0xc9, 0x03, 0xf2, 0x83, 0xb6, 0xbc, 0xa8, 0xb1, 0x0f, 0xf5, 0xfb, 0x93, - 0x70, 0xfa, 0x21, 0x19, 0x3d, 0x6d, 0xc3, 0x36, 0x1f, 0x39, 0x4f, 0xdb, 0xc4, 0xd8, 0xac, 0xe0, - 0x70, 0xcd, 0xb1, 0x03, 0xfc, 0x34, 0x40, 0xef, 0xc2, 0x82, 0x2d, 0xe4, 0x87, 0x15, 0x51, 0x68, - 0x45, 0x4e, 0x67, 0xb6, 0x8e, 0x15, 0xae, 0xd5, 0x6c, 0x39, 0xc1, 0x47, 0xf7, 0xa2, 0xf1, 0x2b, - 0xe4, 0x14, 0xd2, 0x0d, 0x6a, 0x6f, 0xd0, 0xda, 0x70, 0x29, 0x62, 0x68, 0x0b, 0x19, 0xaf, 0x01, - 0xf1, 0xe8, 0xba, 0xe1, 0xeb, 0xa4, 0xa5, 0x54, 0xcb, 0x33, 0x37, 0x96, 0x24, 0x2b, 0x08, 0x1b, - 0xac, 0x55, 0xbc, 0x81, 0xdd, 0xf0, 0x89, 0x86, 0xd0, 0x2d, 0x3a, 0x3b, 0x10, 0xbe, 0xae, 0xe7, - 0x0c, 0x5c, 0x3a, 0xb2, 0xf2, 0x19, 0x81, 0x32, 0x3e, 0x20, 0x94, 0x74, 0xd2, 0xe0, 0x1e, 0x48, - 0xf7, 0x1c, 0x27, 0xd8, 0xf3, 0x85, 0xd7, 0x11, 0xc9, 0x1a, 0x4d, 0x45, 0xd7, 0xe0, 0x84, 0x3f, - 0x70, 0xdd, 0x1e, 0xee, 0x63, 0x3b, 0x30, 0x7a, 0xac, 0x20, 0xd2, 0x67, 0xc5, 0x8b, 0x45, 0x0d, - 0xc5, 0xb3, 0xa8, 0x60, 0x1f, 0x3d, 0x82, 0x7a, 0x06, 0x83, 0xee, 0x3a, 0x3d, 0xab, 0x73, 0xb8, - 0x32, 0x43, 0x0d, 0xe8, 0x59, 0x49, 0x35, 0x29, 0x19, 0x2d, 0x4a, 0xab, 0xad, 0xf8, 0x39, 0x39, - 0x68, 0x15, 0xc0, 0xf5, 0xac, 0x03, 0xab, 0x87, 0xbb, 0xd8, 0x5c, 0x99, 0xa2, 0x15, 0x8f, 0xa5, - 0xa0, 0x57, 0xc9, 0x64, 0xd5, 0xe9, 0x38, 0x7d, 0x97, 0xbb, 0x12, 0xa9, 0x4f, 0x85, 0x2d, 0xb4, - 0x3c, 0x67, 0xcf, 0xea, 0x61, 0x4d, 0xd0, 0xa2, 0xd7, 0xa1, 0x6c, 0xb8, 0xae, 0xe1, 0xf5, 0x1d, - 0x6f, 0x05, 0x46, 0xf3, 0x85, 0xc4, 0xe8, 0x26, 0x2c, 0x72, 0x19, 0xba, 0xcb, 0x32, 0xd9, 0x3c, - 0x30, 0x4d, 0x6c, 0xff, 0x5e, 0x61, 0x45, 0xd1, 0x10, 0xcf, 0xe7, 0xbc, 0x64, 0x56, 0x50, 0xff, - 0x4a, 0x81, 0xf9, 0x84, 0x4c, 0xf4, 0x1e, 0xcc, 0x0a, 0x09, 0xc1, 0xa1, 0x2b, 0x5c, 0xcd, 0x0b, - 0x43, 0xaa, 0x71, 0x95, 0xff, 0xdd, 0x39, 0x74, 0x31, 0x75, 0xf8, 0xe2, 0x03, 0x3d, 0x03, 0xd5, - 0x9e, 0xd3, 0x31, 0x7a, 0xd4, 0x33, 0x7a, 0x78, 0x8f, 0x4f, 0x4b, 0xb3, 0x61, 0xa2, 0x86, 0xf7, - 0xd4, 0xbb, 0x30, 0x13, 0x13, 0x80, 0x10, 0xcc, 0x69, 0xac, 0xa8, 0x75, 0xbc, 0x67, 0x0c, 0x7a, - 0x41, 0x6d, 0x02, 0xcd, 0x01, 0xec, 0xda, 0x1d, 0x12, 0x06, 0xd8, 0xd8, 0xac, 0x29, 0xa8, 0x0a, - 0x95, 0x87, 0x42, 0x44, 0xad, 0xa0, 0x7e, 0xb7, 0x08, 0x27, 0xa9, 0x71, 0xb7, 0x1c, 0x93, 0x8f, - 0x36, 0x1e, 0x33, 0x3c, 0x03, 0xd5, 0x0e, 0xed, 0x7e, 0xdd, 0x35, 0x3c, 0x6c, 0x07, 0x7c, 0xe6, - 0x9c, 0x65, 0x89, 0x2d, 0x9a, 0x86, 0x34, 0xa8, 0xf9, 0xbc, 0x45, 0x7a, 0x87, 0x8d, 0x4e, 0x3e, - 0x80, 0xa4, 0x56, 0x0f, 0x19, 0xcc, 0xda, 0xbc, 0x9f, 0x1a, 0xdd, 0xd3, 0xfe, 0xa1, 0xdf, 0x09, - 0x7a, 0xc2, 0xa3, 0x5e, 0x4d, 0x89, 0x4a, 0x56, 0xf6, 0x6a, 0x9b, 0x31, 0x6c, 0xd8, 0x81, 0x77, - 0xa8, 0x09, 0x76, 0xf4, 0x0e, 0x94, 0x9d, 0x03, 0xec, 0xed, 0x63, 0x83, 0x79, 0xb2, 0x99, 0x1b, - 0xcf, 0xa4, 0x44, 0xad, 0x89, 0xc9, 0x44, 0xc3, 0xbe, 0x33, 0xf0, 0x3a, 0xd8, 0xd7, 0x42, 0x26, - 0xd4, 0x80, 0x8a, 0x27, 0x92, 0xb9, 0xa7, 0x1b, 0x4b, 0x42, 0xc4, 0x55, 0xbf, 0x03, 0xb3, 0xf1, - 0xca, 0xa1, 0x1a, 0x14, 0x1f, 0xe3, 0x43, 0xae, 0x4c, 0xf2, 0x33, 0xf2, 0x81, 0xac, 0x87, 0xd9, - 0xc7, 0x9d, 0xc2, 0x2d, 0x45, 0xf5, 0x00, 0x45, 0x2d, 0xdd, 0xc4, 0x81, 0x61, 0x1a, 0x81, 0x81, - 0x10, 0x94, 0x68, 0x34, 0xc9, 0x44, 0xd0, 0xdf, 0x44, 0xea, 0x80, 0x4f, 0x07, 0x15, 0x8d, 0xfc, - 0x44, 0x67, 0xa0, 0x12, 0x7a, 0x3b, 0x1e, 0x52, 0x46, 0x09, 0x24, 0xb4, 0x33, 0x82, 0x00, 0xf7, - 0xdd, 0x80, 0x2a, 0xa6, 0xaa, 0x89, 0x4f, 0xf5, 0x57, 0x26, 0xa1, 0x96, 0xb2, 0x85, 0x3b, 0x50, - 0xee, 0xf3, 0xe2, 0xb9, 0x9f, 0x5d, 0x95, 0xe2, 0xbb, 0x54, 0x25, 0xb5, 0x90, 0x9e, 0x84, 0x4f, - 0xc4, 0xd6, 0x62, 0x01, 0x70, 0xf8, 0xcd, 0x8c, 0xbc, 0xab, 0x9b, 0x96, 0x87, 0x3b, 0x81, 0xe3, - 0x1d, 0xf2, 0x8a, 0xce, 0xf6, 0x9c, 0xee, 0xba, 0x48, 0x43, 0x37, 0x01, 0x4c, 0xdb, 0xd7, 0xa9, - 0x0d, 0x77, 0x79, 0x3f, 0x4a, 0x93, 0x6c, 0x18, 0xe7, 0x6a, 0x15, 0xd3, 0xf6, 0x79, 0x95, 0xdf, - 0x84, 0x2a, 0x09, 0x1a, 0xf5, 0xbe, 0x88, 0x7c, 0x26, 0xa9, 0x2d, 0x2d, 0xcb, 0xf5, 0x0e, 0x43, - 0x58, 0x6d, 0xd6, 0x8d, 0x3e, 0x7c, 0x74, 0x17, 0xa6, 0x68, 0xdc, 0x26, 0x22, 0xad, 0x8b, 0xd9, - 0xcd, 0xe5, 0xd6, 0xf7, 0x90, 0x92, 0x32, 0xe3, 0xe3, 0x7c, 0x68, 0x1b, 0x66, 0x0c, 0xdb, 0x76, - 0x02, 0x83, 0xcd, 0x2a, 0x2c, 0xee, 0xba, 0x32, 0x54, 0x4c, 0x23, 0xa2, 0x67, 0xb2, 0xe2, 0x12, - 0xd0, 0xeb, 0x30, 0x49, 0xa7, 0x1d, 0x3e, 0x4f, 0x5c, 0x18, 0x39, 0x28, 0x34, 0x46, 0x8f, 0xde, - 0x82, 0xe9, 0x27, 0x96, 0x6d, 0x3a, 0x4f, 0x7c, 0xee, 0x4f, 0x25, 0x13, 0xfe, 0x0a, 0xcb, 0x4a, - 0x31, 0x0b, 0x9e, 0xfa, 0x6d, 0x98, 0x89, 0xb5, 0xef, 0x28, 0xf6, 0x5b, 0x7f, 0x1b, 0x6a, 0xc9, - 0x36, 0x1d, 0xc9, 0xfe, 0x07, 0xb0, 0xa8, 0x0d, 0xec, 0xa8, 0x6a, 0x62, 0x7d, 0x76, 0x13, 0xa6, - 0xb8, 0x35, 0x30, 0x63, 0x3c, 0x33, 0x4c, 0xad, 0x1a, 0xa7, 0x8d, 0x2f, 0xb5, 0xf6, 0x0d, 0xdb, - 0xec, 0x61, 0x8f, 0x97, 0x28, 0x96, 0x5a, 0xef, 0xb2, 0x54, 0xf5, 0x2d, 0x38, 0x99, 0x28, 0x96, - 0xaf, 0xf4, 0x9e, 0x85, 0x39, 0xd7, 0x31, 0x75, 0x9f, 0x25, 0x8b, 0x78, 0xb5, 0x42, 0x6c, 0x47, - 0xd0, 0x36, 0x4d, 0xc2, 0xde, 0x0e, 0x1c, 0x37, 0x5d, 0xed, 0xf1, 0xd8, 0x57, 0x60, 0x29, 0xc9, - 0xce, 0x8a, 0x57, 0xdf, 0x81, 0x65, 0x0d, 0xf7, 0x9d, 0x03, 0x7c, 0x5c, 0xd1, 0x75, 0x58, 0x49, - 0x0b, 0xe0, 0xc2, 0x3f, 0x80, 0xe5, 0x28, 0xb5, 0x1d, 0x18, 0xc1, 0xc0, 0x3f, 0x92, 0x70, 0xbe, - 0x0c, 0x7e, 0xe4, 0xf8, 0xac, 0x23, 0xcb, 0x9a, 0xf8, 0x54, 0x97, 0x61, 0xb2, 0xe5, 0x98, 0xcd, - 0x16, 0x9a, 0x83, 0x82, 0xe5, 0x72, 0xe6, 0x82, 0xe5, 0xaa, 0x9d, 0x78, 0x99, 0x5b, 0x2c, 0xb2, - 0x65, 0x45, 0x27, 0x49, 0xd1, 0x2d, 0x98, 0x33, 0x4c, 0xd3, 0x22, 0x86, 0x64, 0xf4, 0x74, 0xcb, - 0x15, 0x81, 0xf9, 0x42, 0xa2, 0xeb, 0x9b, 0x2d, 0xad, 0x1a, 0x11, 0x36, 0x5d, 0x5f, 0xbd, 0x07, - 0x95, 0x68, 0x11, 0xf0, 0x6a, 0xb4, 0xa4, 0x2d, 0x8c, 0x8e, 0x17, 0xc3, 0xf5, 0xee, 0x56, 0x6a, - 0x92, 0xe4, 0xd5, 0x7c, 0x15, 0x20, 0x74, 0xaa, 0x22, 0x04, 0x3d, 0x99, 0x29, 0x52, 0x8b, 0x11, - 0xaa, 0xff, 0x5c, 0x8a, 0x3b, 0xd9, 0x58, 0x93, 0xcd, 0xb0, 0xc9, 0xa6, 0xe4, 0x74, 0x0b, 0x47, - 0x74, 0xba, 0x2f, 0xc3, 0xa4, 0x1f, 0x18, 0x01, 0xe6, 0x31, 0xff, 0xe9, 0x6c, 0x46, 0x52, 0x30, - 0xd6, 0x18, 0x25, 0x3a, 0x0b, 0xd0, 0xf1, 0xb0, 0x11, 0x60, 0x53, 0x37, 0xd8, 0xac, 0x50, 0xd4, - 0x2a, 0x3c, 0xa5, 0x11, 0x10, 0x2f, 0x22, 0x56, 0x29, 0x19, 0x13, 0x61, 0x4e, 0x37, 0x46, 0xeb, - 0x95, 0xd0, 0x7b, 0x4d, 0x8d, 0xf4, 0x5e, 0x9c, 0x95, 0x7b, 0xaf, 0xc8, 0x13, 0x4f, 0x0f, 0xf3, - 0xc4, 0x8c, 0x69, 0x1c, 0x4f, 0x5c, 0x1e, 0xe6, 0x89, 0xb9, 0x98, 0xe1, 0x9e, 0x38, 0xc3, 0x91, - 0x54, 0xb2, 0x1c, 0xc9, 0xe7, 0xe9, 0x3a, 0xff, 0xb4, 0x00, 0x2b, 0xe9, 0xf1, 0xcc, 0xfd, 0xd8, - 0x4d, 0x98, 0xf2, 0x69, 0xca, 0x70, 0xff, 0xc9, 0xb9, 0x38, 0x2d, 0xba, 0x07, 0x25, 0xcb, 0xde, - 0x73, 0xf8, 0xc0, 0xbb, 0x3a, 0x94, 0x87, 0x97, 0x74, 0xb5, 0x69, 0xef, 0x39, 0x4c, 0x83, 0x94, - 0x17, 0x3d, 0x84, 0x13, 0xe1, 0xea, 0xdd, 0xd7, 0x99, 0x60, 0x2c, 0xe2, 0x3c, 0xc9, 0x4a, 0xc3, - 0xa8, 0x8a, 0x4b, 0x44, 0x11, 0x5f, 0x9b, 0xb3, 0x91, 0x18, 0x87, 0x90, 0xfb, 0x81, 0xd1, 0x77, - 0x85, 0xc5, 0x86, 0x09, 0xf5, 0xd7, 0xa1, 0x12, 0x16, 0x7f, 0x24, 0xdd, 0x35, 0x61, 0x31, 0x31, - 0x46, 0xd8, 0x62, 0x35, 0x1c, 0x54, 0xca, 0xb8, 0x83, 0x4a, 0xfd, 0xb9, 0x12, 0x1f, 0xe8, 0xf7, - 0xad, 0x5e, 0x80, 0xbd, 0xd4, 0x40, 0x7f, 0x4d, 0xc8, 0x65, 0xa3, 0xfc, 0xfc, 0x10, 0xb9, 0x6c, - 0x2d, 0xc8, 0x47, 0xec, 0xfb, 0x30, 0x47, 0x4d, 0x5c, 0xf7, 0x71, 0x8f, 0xc6, 0x4a, 0x5c, 0x8f, - 0xd7, 0xb2, 0x05, 0xb0, 0xd2, 0xd9, 0x10, 0x69, 0x73, 0x0e, 0xd6, 0x37, 0xd5, 0x5e, 0x3c, 0xad, - 0x7e, 0x17, 0x50, 0x9a, 0xe8, 0x48, 0x1a, 0xdc, 0x24, 0xfe, 0xd2, 0x0f, 0x32, 0x67, 0xee, 0x3d, - 0x5a, 0x8d, 0xe1, 0x96, 0xc7, 0xaa, 0xaa, 0x71, 0x5a, 0xf5, 0x1f, 0x8b, 0x00, 0x51, 0xe6, 0x17, - 0xdc, 0x51, 0xde, 0x09, 0x1d, 0x16, 0x8b, 0x38, 0xd5, 0x6c, 0x91, 0x99, 0xae, 0xaa, 0x29, 0xbb, - 0x2a, 0x16, 0x7b, 0xbe, 0x90, 0x23, 0xe0, 0xc8, 0x4e, 0x6a, 0xfa, 0x8b, 0xe6, 0xa4, 0xee, 0xc3, - 0x52, 0xd2, 0x4c, 0xb8, 0x87, 0x7a, 0x09, 0x26, 0xad, 0x00, 0xf7, 0xd9, 0x76, 0x75, 0x62, 0x53, - 0x24, 0x46, 0xce, 0x88, 0xd4, 0xb7, 0x61, 0x49, 0xee, 0xab, 0xa3, 0x85, 0x2e, 0xea, 0xc3, 0x64, - 0xec, 0x13, 0xb9, 0x4a, 0x6e, 0x1f, 0x99, 0xdb, 0x4b, 0x49, 0x1e, 0x46, 0xa9, 0xfe, 0x48, 0x81, - 0x93, 0x89, 0xac, 0x9c, 0x81, 0xff, 0xb5, 0xd4, 0x00, 0x66, 0xbe, 0xf5, 0xe6, 0x90, 0x52, 0x3e, - 0xc3, 0x51, 0xfc, 0x15, 0xa8, 0xcb, 0xdd, 0x23, 0xa9, 0xf6, 0x76, 0x62, 0x28, 0x5f, 0x18, 0x59, - 0xe9, 0x70, 0x3c, 0xb7, 0xe0, 0x74, 0xa6, 0xe0, 0xb4, 0xce, 0x8b, 0x63, 0xea, 0xfc, 0x3f, 0x0a, - 0x71, 0x9f, 0xdd, 0x08, 0x02, 0xcf, 0x7a, 0x34, 0x08, 0xf0, 0xa7, 0x1b, 0x54, 0xad, 0x87, 0x23, - 0x9b, 0xf9, 0xd9, 0x97, 0xb2, 0x39, 0xa3, 0xd2, 0x33, 0xc7, 0x78, 0x5b, 0x1e, 0xe3, 0x25, 0x2a, - 0xea, 0xe5, 0x91, 0xa2, 0x86, 0x8e, 0xf6, 0xcf, 0x73, 0x10, 0xff, 0x8d, 0x02, 0xf3, 0x89, 0x5e, - 0x41, 0x77, 0x01, 0x8c, 0xb0, 0xea, 0xdc, 0x3e, 0xce, 0x8f, 0x6a, 0xa2, 0x16, 0xe3, 0x21, 0x73, - 0x22, 0x8b, 0x17, 0x33, 0xe6, 0xc4, 0x8c, 0x78, 0x31, 0x0c, 0x17, 0xdf, 0x8c, 0x16, 0xbb, 0x6c, - 0x23, 0x56, 0x1d, 0xba, 0xd8, 0x65, 0xbc, 0x82, 0x45, 0xfd, 0xd5, 0x02, 0x2c, 0x66, 0x49, 0x47, - 0xcf, 0x43, 0xb1, 0xe3, 0x0e, 0x78, 0x4b, 0xa4, 0xb3, 0xad, 0x35, 0x77, 0xb0, 0xeb, 0x1b, 0x5d, - 0xac, 0x11, 0x02, 0x74, 0x0d, 0xa6, 0xfa, 0xb8, 0xef, 0x78, 0x87, 0xbc, 0xde, 0xd2, 0x76, 0xc3, - 0x26, 0xcd, 0x61, 0xd4, 0x9c, 0x0c, 0xdd, 0x88, 0xc2, 0x6a, 0x56, 0xdf, 0x15, 0x69, 0xf5, 0xc0, - 0xb2, 0x18, 0x4b, 0x18, 0x4b, 0xdf, 0x80, 0x69, 0xd7, 0x73, 0x3a, 0xd8, 0xf7, 0xf9, 0x6e, 0xc8, - 0x4a, 0xe2, 0xb0, 0x8d, 0x64, 0x71, 0x1e, 0x4e, 0x88, 0xee, 0x00, 0x44, 0x01, 0x14, 0x9f, 0x99, - 0xea, 0xb9, 0xf1, 0x96, 0xaf, 0xc5, 0xa8, 0xd5, 0x1f, 0x16, 0x60, 0x29, 0x5b, 0x73, 0xe8, 0x4a, - 0x5c, 0x2f, 0xa7, 0x33, 0x54, 0x2d, 0xab, 0xe7, 0xb5, 0x84, 0x7a, 0x56, 0x33, 0x38, 0xb2, 0xb4, - 0x74, 0x3b, 0xa9, 0xa5, 0x73, 0x19, 0x8c, 0xd9, 0xca, 0xba, 0x9d, 0x54, 0x56, 0x16, 0x6b, 0xb6, - 0xce, 0x1a, 0x19, 0x3a, 0xbb, 0x90, 0xd5, 0xc6, 0x7c, 0xd5, 0xfd, 0x85, 0x02, 0xb3, 0xf1, 0x7a, - 0xc9, 0x21, 0xab, 0x92, 0x08, 0x59, 0xd1, 0x16, 0x2c, 0x98, 0x6c, 0xe7, 0x56, 0xb7, 0xec, 0x00, - 0x7b, 0x7b, 0x46, 0x47, 0x44, 0x85, 0x17, 0x32, 0xec, 0xa2, 0x29, 0x68, 0x58, 0xc5, 0x6b, 0x9c, - 0x37, 0x4c, 0x26, 0x2d, 0x08, 0xe5, 0x08, 0xaf, 0x35, 0x86, 0xa0, 0x18, 0x93, 0xfa, 0x0f, 0x0a, - 0x9c, 0xc8, 0x50, 0xf0, 0x88, 0x86, 0xec, 0xe6, 0x37, 0xe4, 0x62, 0x7e, 0xd7, 0x8d, 0x6c, 0xcf, - 0xbb, 0x19, 0xed, 0x19, 0x5f, 0x5e, 0xbc, 0x59, 0xbf, 0x50, 0xe0, 0x64, 0x26, 0x55, 0xe6, 0xf6, - 0xea, 0x0d, 0x28, 0x7b, 0x4f, 0xf5, 0x47, 0x87, 0x01, 0xf6, 0xb3, 0x06, 0xf6, 0x6e, 0xec, 0x9c, - 0x66, 0xda, 0x7b, 0x7a, 0x8f, 0xd0, 0xa1, 0x9b, 0x50, 0xf1, 0x9e, 0xea, 0xd8, 0xf3, 0x1c, 0x4f, - 0xf8, 0xa2, 0x5c, 0xa6, 0xb2, 0xf7, 0x74, 0x83, 0x12, 0x92, 0x92, 0x02, 0x51, 0x52, 0x69, 0x44, - 0x49, 0x41, 0x54, 0x52, 0x10, 0x96, 0x34, 0x39, 0xa2, 0xa4, 0x80, 0x97, 0xa4, 0xfe, 0x5e, 0x01, - 0xce, 0x0c, 0x53, 0xd7, 0xa7, 0xa6, 0x88, 0x0d, 0x40, 0xde, 0x53, 0xdd, 0x35, 0x3a, 0x8f, 0x71, - 0xe0, 0xeb, 0xa6, 0xe7, 0xb8, 0x2e, 0x36, 0x47, 0x69, 0xa4, 0xe6, 0x3d, 0x6d, 0x31, 0x8e, 0x75, - 0xc6, 0x70, 0x2c, 0xcd, 0x6c, 0x00, 0x0a, 0xd2, 0x45, 0x8f, 0x50, 0x51, 0x2d, 0x48, 0x14, 0xad, - 0x7e, 0x04, 0xb3, 0x71, 0x0f, 0x31, 0xc2, 0xf6, 0xdf, 0x84, 0x2a, 0xf7, 0x20, 0x7a, 0xc7, 0x19, - 0xd8, 0xc1, 0x28, 0x45, 0xcd, 0x72, 0xea, 0x35, 0x42, 0xac, 0x7e, 0x23, 0x1c, 0x6e, 0x9f, 0x59, - 0x91, 0xff, 0xaf, 0x00, 0x95, 0xf0, 0x84, 0x9e, 0xcc, 0xf4, 0xec, 0x1c, 0x9f, 0xf5, 0x3b, 0xfb, - 0x40, 0xef, 0xca, 0x51, 0x0b, 0x8b, 0x53, 0x9f, 0xcf, 0x3c, 0xe3, 0x1f, 0xb1, 0x30, 0xb9, 0x0e, - 0x8b, 0x03, 0x1f, 0x7b, 0xba, 0xef, 0xe2, 0x8e, 0xb5, 0x67, 0x61, 0x53, 0x67, 0xc5, 0x21, 0x5a, - 0x1c, 0x22, 0x79, 0x6d, 0x91, 0x45, 0x65, 0x66, 0x2d, 0x65, 0x4e, 0x64, 0x2e, 0x65, 0x3e, 0x69, - 0x28, 0x73, 0x03, 0xca, 0x5f, 0xc2, 0x87, 0x6c, 0xb1, 0x3f, 0x26, 0x9f, 0xfa, 0x9d, 0x12, 0x2c, - 0xe7, 0x1c, 0x03, 0xd1, 0x95, 0xa2, 0x3b, 0xd0, 0x5d, 0xec, 0x59, 0x8e, 0x29, 0x7a, 0xad, 0xe3, - 0x0e, 0x5a, 0x34, 0x01, 0x9d, 0x06, 0xf2, 0xa1, 0x7f, 0x63, 0xe0, 0xf0, 0x60, 0xb4, 0xa8, 0x95, - 0x3b, 0xee, 0xe0, 0xcb, 0xe4, 0x5b, 0xf0, 0xfa, 0xfb, 0x86, 0x87, 0x99, 0xff, 0x60, 0xbc, 0x6d, - 0x9a, 0x80, 0x5e, 0x86, 0x93, 0x6c, 0x6e, 0xd4, 0x7b, 0x56, 0xdf, 0x22, 0x5e, 0x36, 0x36, 0x34, - 0x8a, 0x1a, 0x62, 0x99, 0x0f, 0x49, 0x5e, 0xd3, 0x66, 0x83, 0x41, 0x85, 0xaa, 0xe3, 0xf4, 0x75, - 0xbf, 0xe3, 0x78, 0x58, 0x37, 0xcc, 0x8f, 0xe8, 0x38, 0x28, 0x6a, 0x33, 0x8e, 0xd3, 0x6f, 0x93, - 0xb4, 0x86, 0xf9, 0x11, 0x3a, 0x07, 0x33, 0x1d, 0x77, 0xe0, 0xe3, 0x40, 0x27, 0x7f, 0xe8, 0x66, - 0x5d, 0x45, 0x03, 0x96, 0xb4, 0xe6, 0x0e, 0xfc, 0x18, 0x41, 0x9f, 0x2c, 0xcf, 0xa6, 0xe3, 0x04, - 0x9b, 0xb8, 0x4f, 0x4f, 0xd4, 0xf7, 0x07, 0x5d, 0xec, 0x1a, 0x5d, 0xcc, 0xaa, 0x26, 0x76, 0xdc, - 0xa4, 0x13, 0xf5, 0x77, 0x39, 0x09, 0xad, 0xa0, 0x36, 0xb7, 0x1f, 0xff, 0xf4, 0xd1, 0x7b, 0x30, - 0x3d, 0xb0, 0xa9, 0x01, 0xac, 0x54, 0x28, 0xef, 0xf5, 0x31, 0x0e, 0xdd, 0xae, 0xee, 0x32, 0x16, - 0x7e, 0x06, 0xc8, 0x05, 0xa0, 0x3b, 0x50, 0xe7, 0x8a, 0xf2, 0x9f, 0x18, 0x6e, 0x52, 0x5b, 0x40, - 0x55, 0xb0, 0xc4, 0x28, 0xda, 0x4f, 0x0c, 0x37, 0xae, 0xb1, 0xfa, 0x1d, 0x98, 0x8d, 0x0b, 0x3d, - 0x92, 0x2d, 0xdd, 0x83, 0xaa, 0xd4, 0x48, 0xd2, 0xdb, 0x54, 0x29, 0xbe, 0xf5, 0x4d, 0x31, 0xb6, - 0xca, 0x24, 0xa1, 0x6d, 0x7d, 0x93, 0xe2, 0x20, 0x68, 0xcd, 0xa8, 0x9c, 0x92, 0xc6, 0x3e, 0x54, - 0x03, 0xaa, 0x12, 0xf4, 0x80, 0xb8, 0x64, 0x8a, 0x31, 0xe0, 0x2e, 0x99, 0xfc, 0x26, 0x69, 0x9e, - 0xd3, 0x13, 0x35, 0xa0, 0xbf, 0x49, 0x1a, 0x3d, 0x80, 0x66, 0xc7, 0x69, 0xf4, 0x37, 0x2d, 0x02, - 0x1f, 0x70, 0x80, 0x52, 0x45, 0x63, 0x1f, 0xea, 0x6f, 0x29, 0x00, 0x6b, 0x86, 0x6b, 0x3c, 0xb2, - 0x7a, 0x56, 0x70, 0x88, 0x2e, 0x41, 0xcd, 0x30, 0x4d, 0xbd, 0x23, 0x52, 0x2c, 0x2c, 0x10, 0x63, - 0xf3, 0x86, 0x69, 0xae, 0xc5, 0x92, 0xd1, 0x8b, 0xb0, 0x40, 0x1c, 0xaa, 0x4c, 0xcb, 0x20, 0x64, - 0x35, 0x92, 0x21, 0x11, 0xdf, 0x82, 0x15, 0x22, 0xd7, 0xe8, 0x3f, 0xb2, 0xb0, 0x1d, 0xc8, 0x3c, - 0x0c, 0x5b, 0xb6, 0x64, 0x98, 0x66, 0x83, 0x65, 0xc7, 0x39, 0xd5, 0xdf, 0x9e, 0x86, 0xb3, 0x72, - 0x8f, 0x27, 0xd1, 0x20, 0x77, 0x60, 0x36, 0x51, 0xdf, 0x14, 0x8e, 0x22, 0x6a, 0xa1, 0x26, 0xd1, - 0x26, 0xb0, 0x08, 0x85, 0x14, 0x16, 0x21, 0x13, 0x69, 0x52, 0xfc, 0x94, 0x90, 0x26, 0xa5, 0x4f, - 0x88, 0x34, 0x99, 0x3c, 0x2e, 0xd2, 0x64, 0x76, 0x6c, 0xa4, 0xc9, 0xf3, 0xd4, 0xf5, 0x8a, 0x12, - 0x69, 0x38, 0xc0, 0x7c, 0x42, 0x35, 0x94, 0x6e, 0x0b, 0x18, 0x63, 0x02, 0x91, 0x32, 0x7d, 0x14, - 0x44, 0x4a, 0xf9, 0x98, 0x88, 0x94, 0x85, 0x4f, 0x05, 0x91, 0x72, 0x1e, 0x66, 0x6d, 0x47, 0xb7, - 0xf1, 0x13, 0x9d, 0x74, 0xbd, 0x4f, 0x71, 0x2e, 0x65, 0x0d, 0x6c, 0x67, 0x0b, 0x3f, 0x69, 0x91, - 0x14, 0x74, 0x01, 0x66, 0xfb, 0x86, 0xff, 0x18, 0x9b, 0x14, 0x1a, 0xe2, 0xaf, 0x54, 0xa9, 0xcd, - 0xce, 0xb0, 0xb4, 0x16, 0x49, 0x42, 0xcf, 0x41, 0xd8, 0x56, 0x4e, 0x34, 0x47, 0x89, 0xaa, 0x22, - 0x95, 0x91, 0xc5, 0xd0, 0x2d, 0xf3, 0xc7, 0x44, 0xb7, 0xd4, 0x8e, 0x82, 0x6e, 0xb9, 0x02, 0x35, - 0xf1, 0x5b, 0xc0, 0x5b, 0xd8, 0x69, 0x05, 0x45, 0xb6, 0xcc, 0x8b, 0x3c, 0x01, 0x61, 0xc9, 0x03, - 0xc3, 0xc0, 0x50, 0x30, 0xcc, 0xef, 0x2b, 0x7c, 0xdd, 0x1c, 0x0e, 0x52, 0x7e, 0x0a, 0x2f, 0x01, - 0x28, 0x94, 0xe3, 0x00, 0x28, 0xd0, 0x4e, 0x2e, 0xc4, 0xe4, 0x52, 0xbe, 0xa4, 0x51, 0x20, 0x13, - 0xd5, 0x02, 0x24, 0x73, 0xd0, 0x81, 0xc2, 0x61, 0x14, 0x6c, 0xa6, 0xa6, 0x30, 0x8a, 0x1a, 0x14, - 0xbb, 0x1c, 0x58, 0x51, 0xd4, 0xc8, 0xcf, 0x3c, 0x0b, 0x2e, 0xe6, 0x59, 0xb0, 0xba, 0x19, 0xae, - 0x9e, 0x3f, 0x0d, 0xe4, 0x9f, 0xfa, 0xaf, 0x0a, 0x9c, 0xe5, 0xf2, 0x72, 0xe0, 0x71, 0x19, 0x83, - 0x56, 0xc9, 0x19, 0xb4, 0x1d, 0x0f, 0x9b, 0xd8, 0x0e, 0x2c, 0xa3, 0x47, 0xe3, 0x31, 0x71, 0x20, - 0x1e, 0x25, 0xd3, 0x90, 0xf0, 0x02, 0xcc, 0x32, 0x78, 0x2c, 0x5f, 0x48, 0x33, 0x14, 0xec, 0x0c, - 0x45, 0xc8, 0xf2, 0xb5, 0xf2, 0x76, 0x96, 0xa3, 0x2c, 0xe5, 0xee, 0xc0, 0x8c, 0xf4, 0x97, 0xaa, - 0x03, 0xcb, 0x39, 0xd0, 0x84, 0x4c, 0x8b, 0x50, 0xd2, 0x16, 0x31, 0x54, 0x49, 0x69, 0x8b, 0xf8, - 0x8e, 0x02, 0xe7, 0x52, 0x0b, 0xfa, 0xcf, 0x5f, 0xb3, 0xea, 0x1f, 0x29, 0xa1, 0xfd, 0x24, 0x47, - 0xd7, 0x5a, 0x7a, 0x74, 0x3d, 0x37, 0x6c, 0x7f, 0x22, 0x73, 0x7c, 0xbd, 0x9f, 0x3b, 0xbe, 0x5e, - 0x1c, 0xba, 0xd7, 0x31, 0x4a, 0x9f, 0xff, 0xa4, 0xc0, 0xa9, 0xdc, 0x0a, 0x24, 0xc2, 0x5b, 0x25, - 0x19, 0xde, 0xf2, 0xd0, 0x38, 0x5a, 0xcc, 0xb0, 0xd0, 0x98, 0xae, 0x57, 0x78, 0x0c, 0xaa, 0xf7, - 0x8d, 0xa7, 0x56, 0x7f, 0xd0, 0xe7, 0xb1, 0x31, 0x11, 0xb7, 0xc9, 0x52, 0x8e, 0x13, 0x1c, 0x5f, - 0x83, 0x45, 0x36, 0x6f, 0xd1, 0xf8, 0x2c, 0xe2, 0x60, 0x31, 0xf2, 0x02, 0xcb, 0x23, 0xa1, 0x1a, - 0x67, 0x50, 0x1b, 0xb0, 0x10, 0x36, 0x6b, 0x28, 0x34, 0x2b, 0x06, 0xb5, 0x2a, 0xc8, 0x50, 0x2b, - 0x1b, 0xa6, 0xd6, 0xf1, 0x81, 0xd5, 0xc1, 0x9f, 0x0a, 0x4c, 0xfd, 0x3c, 0xcc, 0xb8, 0xd8, 0xeb, - 0x5b, 0xbe, 0x1f, 0x06, 0x29, 0x15, 0x2d, 0x9e, 0xa4, 0x9e, 0x83, 0xca, 0xda, 0x7a, 0x93, 0x17, - 0x99, 0x51, 0x55, 0xf5, 0xdf, 0xa6, 0x60, 0x3e, 0x69, 0x63, 0xb7, 0x53, 0xd0, 0xaf, 0xb3, 0x99, - 0xdb, 0x86, 0x19, 0xfb, 0xe5, 0x21, 0x22, 0xbc, 0x30, 0x1a, 0x11, 0x4e, 0xd4, 0xd4, 0x71, 0xfa, - 0x7d, 0xc3, 0x36, 0xc5, 0x65, 0x03, 0xfe, 0x49, 0x6a, 0x6a, 0x78, 0x5d, 0xb6, 0x53, 0x5e, 0xd1, - 0xe8, 0x6f, 0x62, 0x02, 0xc4, 0x19, 0x5a, 0x36, 0x05, 0x8f, 0xd1, 0x5e, 0xaa, 0x68, 0xc0, 0x93, - 0xd6, 0x2d, 0x0f, 0x5d, 0x84, 0x12, 0xb6, 0x0f, 0xc4, 0x11, 0x9a, 0xb4, 0x63, 0x2b, 0x96, 0x78, - 0x1a, 0xa5, 0x40, 0x97, 0x60, 0xaa, 0x4f, 0xcc, 0x4a, 0x00, 0x0c, 0x16, 0x52, 0xa0, 0x7c, 0x8d, - 0x13, 0xa0, 0x97, 0x60, 0xda, 0xa4, 0xda, 0x13, 0x6b, 0x1a, 0x24, 0xc1, 0xd0, 0x68, 0x96, 0x26, - 0x48, 0xd0, 0x3b, 0xe1, 0x71, 0x41, 0x25, 0x7d, 0x8e, 0x97, 0x50, 0x73, 0xe6, 0x49, 0xc1, 0x96, - 0xbc, 0xe6, 0x86, 0xf4, 0xa1, 0x43, 0x52, 0xca, 0xf0, 0x95, 0xf7, 0x29, 0x28, 0xf7, 0x9c, 0x2e, - 0xb3, 0x9e, 0x19, 0x76, 0x53, 0xa5, 0xe7, 0x74, 0xa9, 0xf1, 0x2c, 0xc2, 0xa4, 0x1f, 0x98, 0x96, - 0x4d, 0x43, 0xc3, 0xb2, 0xc6, 0x3e, 0xc8, 0x20, 0xa5, 0x3f, 0x74, 0xc7, 0xee, 0xe0, 0x95, 0x2a, - 0xcd, 0xaa, 0xd0, 0x94, 0x6d, 0xbb, 0x43, 0x97, 0xc8, 0x41, 0x70, 0xb8, 0x32, 0x47, 0xd3, 0xc9, - 0xcf, 0x68, 0xd7, 0x7e, 0x3e, 0x67, 0xd7, 0x3e, 0x51, 0xe1, 0x8c, 0x5d, 0xfb, 0x5a, 0xee, 0x9c, - 0x91, 0xe4, 0x15, 0x2c, 0x24, 0x2c, 0x5e, 0x5b, 0x6f, 0xea, 0xa2, 0x6b, 0x16, 0xd2, 0x30, 0xfc, - 0xd0, 0xec, 0x35, 0x08, 0x7f, 0x7e, 0xae, 0x87, 0x26, 0x3f, 0x54, 0x60, 0x69, 0x8d, 0x1e, 0x19, - 0xc7, 0x7c, 0xe3, 0x51, 0xd0, 0x56, 0xaf, 0x84, 0x10, 0xb8, 0x0c, 0x1c, 0x53, 0x52, 0x53, 0x02, - 0x01, 0xb7, 0x06, 0x73, 0x42, 0x2c, 0x67, 0x2e, 0x8e, 0x81, 0x9f, 0xab, 0xfa, 0xf1, 0x4f, 0xf5, - 0x4d, 0x58, 0x4e, 0xd5, 0x9c, 0x1f, 0xdc, 0x25, 0xef, 0x6b, 0xb0, 0x8a, 0xc7, 0xef, 0x6b, 0xa8, - 0x77, 0xe0, 0x64, 0x3b, 0x30, 0xbc, 0x20, 0xd5, 0xec, 0x31, 0x78, 0x29, 0x32, 0x4e, 0xe6, 0xe5, - 0xe0, 0xb5, 0x36, 0x2c, 0xb6, 0x03, 0xc7, 0x3d, 0x86, 0x50, 0xe2, 0x77, 0x48, 0xcb, 0x9d, 0x81, - 0x98, 0x67, 0xc4, 0xa7, 0xba, 0xcc, 0x70, 0x7c, 0xe9, 0xd2, 0xde, 0x80, 0x25, 0x06, 0xa3, 0x3b, - 0x4e, 0x23, 0x4e, 0x09, 0x10, 0x5f, 0x5a, 0xee, 0x03, 0x38, 0x21, 0x1d, 0x25, 0x70, 0xd8, 0xc9, - 0x75, 0x19, 0x76, 0x92, 0x7f, 0x6a, 0x13, 0xa2, 0x4e, 0x7e, 0xbd, 0x10, 0xf3, 0xe3, 0x39, 0x67, - 0xcf, 0xaf, 0xca, 0xa0, 0x93, 0x73, 0xf9, 0x52, 0x25, 0xcc, 0x49, 0xda, 0x3a, 0x8b, 0x19, 0xd6, - 0xb9, 0x9b, 0x3a, 0xd8, 0x2e, 0xa5, 0x41, 0x43, 0x89, 0x1a, 0x7e, 0x26, 0x47, 0xda, 0x0f, 0x19, - 0x30, 0x25, 0x2c, 0x3a, 0x3c, 0xcd, 0x7e, 0x25, 0x71, 0x9a, 0x7d, 0x7a, 0x48, 0x4d, 0xc3, 0x73, - 0xec, 0x1f, 0x94, 0xa0, 0x12, 0xe6, 0xa5, 0x34, 0x9c, 0x56, 0x55, 0x21, 0x43, 0x55, 0xf1, 0xf9, - 0xb5, 0x78, 0xcc, 0xf9, 0xb5, 0x34, 0xc6, 0xfc, 0x7a, 0x1a, 0x2a, 0xf4, 0x07, 0xbd, 0x4b, 0xc0, - 0xe6, 0xcb, 0x32, 0x4d, 0xd0, 0xf0, 0x5e, 0x64, 0x62, 0x53, 0x63, 0x9a, 0x58, 0x02, 0x04, 0x33, - 0x9d, 0x04, 0xc1, 0xdc, 0x0e, 0xe7, 0xbe, 0x72, 0xfa, 0xd0, 0x29, 0x94, 0x98, 0x39, 0xeb, 0x25, - 0x76, 0x9a, 0x2b, 0xe9, 0x9d, 0xe6, 0x88, 0x7f, 0xe4, 0x7c, 0xc7, 0x9a, 0x6c, 0x99, 0x6c, 0xfd, - 0xaa, 0x4d, 0xd3, 0xef, 0xa6, 0xf9, 0x79, 0xba, 0xfe, 0x6d, 0x06, 0x7a, 0x89, 0x9b, 0x20, 0x77, - 0x9f, 0xaf, 0x4a, 0xe7, 0x8d, 0x4a, 0xc6, 0x34, 0x16, 0xba, 0x8c, 0xf8, 0x19, 0xe3, 0x2e, 0x2c, - 0x25, 0xc1, 0x72, 0x47, 0x72, 0x7f, 0x39, 0xa8, 0xdd, 0x9f, 0xc6, 0x83, 0xc1, 0x1c, 0x88, 0xea, - 0xed, 0x14, 0x9a, 0x62, 0x6c, 0xe3, 0xbd, 0x2e, 0x03, 0xaf, 0x8e, 0x6c, 0x72, 0x29, 0xdc, 0x15, - 0x0d, 0x56, 0x0c, 0x8f, 0x67, 0xb3, 0xb8, 0xbd, 0xc2, 0x53, 0x1a, 0x74, 0xd1, 0xb0, 0x67, 0xd9, - 0x96, 0xbf, 0xcf, 0xf2, 0xa7, 0xd8, 0xa2, 0x41, 0x24, 0x35, 0xe8, 0xfe, 0x2c, 0x7e, 0x6a, 0x05, - 0x7a, 0xc7, 0x31, 0x31, 0x35, 0xe8, 0x49, 0xad, 0x4c, 0x12, 0xd6, 0x1c, 0x13, 0x47, 0x43, 0xad, - 0x7c, 0xd4, 0xa1, 0x56, 0x49, 0x0c, 0xb5, 0x25, 0x98, 0xf2, 0xb0, 0xe1, 0x3b, 0x36, 0x37, 0x49, - 0xfe, 0x45, 0x3a, 0xa2, 0x8f, 0x7d, 0x9f, 0x94, 0xc1, 0x63, 0x33, 0xfe, 0x19, 0x8b, 0x23, 0x67, - 0x87, 0xc4, 0x91, 0x43, 0x00, 0xb0, 0x89, 0x38, 0xb2, 0x3a, 0x24, 0x8e, 0x1c, 0x0b, 0xff, 0x1a, - 0x45, 0xcc, 0x73, 0xa3, 0x22, 0xe6, 0x78, 0xc8, 0x39, 0x2f, 0x87, 0x9c, 0x6f, 0xc6, 0x17, 0xaf, - 0xb5, 0x34, 0x1c, 0x60, 0xf8, 0xaa, 0x35, 0x3e, 0xb6, 0x17, 0xa4, 0xb1, 0x8d, 0xae, 0xf0, 0x4d, - 0x72, 0x94, 0xde, 0x5e, 0x95, 0x76, 0x7b, 0xd8, 0xfe, 0xf9, 0xe7, 0xe9, 0x0a, 0xfe, 0x56, 0x81, - 0xe5, 0xd4, 0xd0, 0xe5, 0xce, 0xe0, 0x95, 0x04, 0x46, 0x77, 0x28, 0x38, 0x56, 0x40, 0x74, 0x1b, - 0x12, 0x44, 0xf7, 0xca, 0x30, 0x96, 0x1c, 0x84, 0xee, 0xf1, 0x51, 0xb3, 0xdf, 0x56, 0x00, 0x65, - 0x2c, 0xf4, 0x6f, 0x8b, 0x25, 0xc1, 0x11, 0x76, 0xff, 0xf8, 0xaa, 0xe0, 0x9d, 0x68, 0x55, 0x50, - 0x38, 0xca, 0xe6, 0x46, 0x08, 0xe7, 0xd9, 0x80, 0xaa, 0xbc, 0xbf, 0x77, 0x53, 0xae, 0xcc, 0x6a, - 0x7e, 0x65, 0xa8, 0x81, 0x30, 0x62, 0xf5, 0xa7, 0x05, 0x38, 0xb7, 0xeb, 0x9a, 0x89, 0x90, 0x97, - 0x17, 0x36, 0xbe, 0xab, 0xbd, 0x2d, 0x43, 0x9a, 0x8e, 0xa9, 0x89, 0xe2, 0x71, 0x34, 0x81, 0xbe, - 0x9e, 0x05, 0x3a, 0x7b, 0x53, 0x3a, 0x1e, 0x1e, 0xde, 0xc0, 0x11, 0xf8, 0xb3, 0x4f, 0x3a, 0x12, - 0x54, 0x38, 0x9f, 0x5f, 0x01, 0x1e, 0x1e, 0xff, 0x6f, 0x98, 0xdf, 0x78, 0x8a, 0x3b, 0xed, 0x43, - 0xbb, 0x73, 0x04, 0xad, 0xd7, 0xa0, 0xd8, 0xe9, 0x9b, 0xfc, 0x60, 0x8a, 0xfc, 0x8c, 0x47, 0xfc, - 0x45, 0x39, 0xe2, 0xd7, 0xa1, 0x16, 0x95, 0xc0, 0xc7, 0xe1, 0x12, 0x19, 0x87, 0x26, 0x21, 0x26, - 0xc2, 0x67, 0x35, 0xfe, 0xc5, 0xd3, 0xb1, 0xc7, 0x2e, 0x11, 0xb1, 0x74, 0xec, 0x79, 0xf2, 0x34, - 0x52, 0x94, 0xa7, 0x11, 0xf5, 0xbb, 0x0a, 0xcc, 0x90, 0x12, 0x3e, 0x51, 0xfd, 0xf9, 0xb2, 0xbb, - 0x18, 0x2d, 0xbb, 0xc3, 0xd5, 0x7b, 0x29, 0xbe, 0x7a, 0x8f, 0x6a, 0x3e, 0x49, 0x93, 0xd3, 0x35, - 0x9f, 0x0a, 0xd3, 0xb1, 0xe7, 0xa9, 0xe7, 0x61, 0x96, 0xd5, 0x8d, 0xb7, 0xbc, 0x06, 0xc5, 0x81, - 0xd7, 0x13, 0xfd, 0x37, 0xf0, 0x7a, 0xea, 0xb7, 0x14, 0xa8, 0x36, 0x82, 0xc0, 0xe8, 0xec, 0x1f, - 0xa1, 0x01, 0x61, 0xe5, 0x0a, 0xf1, 0xca, 0xa5, 0x1b, 0x11, 0x55, 0xb7, 0x94, 0x53, 0xdd, 0x49, - 0xa9, 0xba, 0x2a, 0xcc, 0x89, 0xba, 0xe4, 0x56, 0x78, 0x0b, 0x50, 0xcb, 0xf1, 0x82, 0xfb, 0x8e, - 0xf7, 0xc4, 0xf0, 0xcc, 0xa3, 0xad, 0xb0, 0x11, 0x94, 0xf8, 0xbb, 0x14, 0xc5, 0x8b, 0x93, 0x1a, - 0xfd, 0xad, 0xbe, 0x00, 0x27, 0x24, 0x79, 0xb9, 0x05, 0xdf, 0x81, 0x19, 0x1a, 0x16, 0xf0, 0xc5, - 0xd7, 0x8b, 0x71, 0x4c, 0xc5, 0xa8, 0xb7, 0x11, 0xd6, 0x61, 0x81, 0x04, 0x88, 0x34, 0x3d, 0xf4, - 0x2f, 0xd7, 0x12, 0xeb, 0x93, 0xe5, 0x94, 0x88, 0xc4, 0xda, 0xe4, 0xe7, 0x0a, 0x4c, 0x32, 0xf8, - 0x44, 0x32, 0x68, 0x3b, 0x4d, 0x26, 0x5e, 0xd7, 0xd1, 0x03, 0xa3, 0x1b, 0xbe, 0xf9, 0x41, 0x12, - 0x76, 0x8c, 0x2e, 0x3d, 0xe8, 0xa2, 0x99, 0xa6, 0xd5, 0xc5, 0x7e, 0x20, 0x0e, 0x67, 0x67, 0x48, - 0xda, 0x3a, 0x4b, 0x22, 0x8a, 0xa1, 0x67, 0xd8, 0x25, 0x7a, 0x54, 0x4d, 0x7f, 0xa3, 0x8b, 0xec, - 0xe0, 0x64, 0xf8, 0x89, 0x24, 0x3d, 0x50, 0xa9, 0x43, 0x39, 0x71, 0x94, 0x18, 0x7e, 0xa3, 0x4b, - 0x50, 0xa2, 0x7b, 0xe5, 0xd3, 0xc3, 0xb4, 0x44, 0x49, 0x88, 0x55, 0xb8, 0x96, 0x6d, 0x63, 0x93, - 0x3f, 0x48, 0xc1, 0xbf, 0xd4, 0x77, 0x00, 0xc5, 0x95, 0xc7, 0x3b, 0xe8, 0x12, 0x4c, 0x51, 0xdd, - 0x8a, 0xa8, 0x7a, 0x21, 0x25, 0x5a, 0xe3, 0x04, 0xea, 0xd7, 0x00, 0xb1, 0xb2, 0xa4, 0x48, 0xfa, - 0x28, 0x1d, 0x38, 0x24, 0xa6, 0xfe, 0x63, 0x05, 0x4e, 0x48, 0xd2, 0x79, 0xfd, 0x5e, 0x90, 0xc5, - 0x67, 0x54, 0x8f, 0x8b, 0x7e, 0x4b, 0x9a, 0xe0, 0x2f, 0xa5, 0xab, 0xf1, 0x3f, 0x34, 0xb9, 0xff, - 0x9d, 0x02, 0xd0, 0x18, 0x04, 0xfb, 0x7c, 0x53, 0x38, 0xde, 0x89, 0x4a, 0xa2, 0x13, 0xeb, 0x50, - 0x76, 0x0d, 0xdf, 0x7f, 0xe2, 0x78, 0x62, 0xc1, 0x1b, 0x7e, 0xd3, 0xad, 0xdc, 0x01, 0x7f, 0xab, - 0xa3, 0xa2, 0xd1, 0xdf, 0xe8, 0x39, 0x98, 0x63, 0x8f, 0xd1, 0xe8, 0x86, 0x69, 0x7a, 0x02, 0xa7, - 0x59, 0xd1, 0xaa, 0x2c, 0xb5, 0xc1, 0x12, 0x09, 0x99, 0x45, 0x4f, 0x4e, 0x82, 0x43, 0x3d, 0x70, - 0x1e, 0x63, 0x9b, 0x2f, 0x62, 0xab, 0x22, 0x75, 0x87, 0x24, 0xb2, 0x53, 0xd8, 0xae, 0xe5, 0x07, - 0x9e, 0x20, 0x13, 0xe7, 0xd5, 0x3c, 0x95, 0x92, 0xa9, 0x7f, 0xa0, 0x40, 0xad, 0x35, 0xe8, 0xf5, - 0x98, 0x72, 0x8f, 0xd3, 0xc9, 0x97, 0x79, 0x53, 0x0a, 0x69, 0x93, 0x8f, 0x14, 0xc5, 0x9b, 0xf8, - 0xa9, 0xec, 0xbb, 0x5d, 0x87, 0x85, 0x58, 0x8d, 0xb9, 0xe1, 0x48, 0x4b, 0x0d, 0x45, 0x5e, 0x6a, - 0xa8, 0x0d, 0x40, 0x6c, 0xab, 0xe9, 0xd8, 0xad, 0x54, 0x4f, 0xc2, 0x09, 0x49, 0x04, 0x9f, 0x8a, - 0x2f, 0x43, 0x95, 0x63, 0x06, 0xb9, 0x41, 0x9c, 0x82, 0x32, 0x71, 0xa9, 0x1d, 0xcb, 0x14, 0xe0, - 0x94, 0x69, 0xd7, 0x31, 0xd7, 0x2c, 0xd3, 0x53, 0xbf, 0x0c, 0x55, 0xfe, 0x28, 0x01, 0xa7, 0xbd, - 0x0b, 0x73, 0xfc, 0x2c, 0x53, 0x97, 0x6e, 0xf1, 0x9e, 0xca, 0x00, 0xa6, 0x0a, 0x55, 0xd8, 0xf1, - 0x4f, 0xf5, 0xeb, 0x50, 0x67, 0xd1, 0x82, 0x24, 0x58, 0x34, 0xf0, 0x2e, 0x08, 0x5c, 0xd8, 0x10, - 0xf9, 0x32, 0x67, 0xd5, 0x8b, 0x7f, 0xaa, 0x67, 0xe1, 0x74, 0xa6, 0x7c, 0xde, 0x7a, 0x17, 0x6a, - 0x51, 0x06, 0xbb, 0x6a, 0x1a, 0x22, 0x6e, 0x94, 0x18, 0xe2, 0x66, 0x29, 0x0c, 0xe1, 0x0b, 0x62, - 0xe6, 0xa2, 0x51, 0x7a, 0xb4, 0x04, 0x2c, 0xe6, 0x2d, 0x01, 0x4b, 0xd2, 0x12, 0x50, 0xdd, 0x0c, - 0x75, 0xc8, 0x17, 0xe2, 0x6f, 0xd2, 0xad, 0x02, 0x56, 0xb6, 0x70, 0x6a, 0x67, 0xb2, 0xdb, 0xc7, - 0x88, 0xb4, 0x18, 0xbd, 0x7a, 0x09, 0xaa, 0xb2, 0x7b, 0x8b, 0x79, 0x2c, 0x45, 0xf6, 0x58, 0xff, - 0x07, 0x96, 0x34, 0x09, 0x64, 0x77, 0x1f, 0x1b, 0xc1, 0xc0, 0xc3, 0x3e, 0x7a, 0x03, 0xea, 0x19, - 0xef, 0x03, 0xe9, 0x7c, 0x65, 0xc8, 0xc4, 0x2c, 0xa7, 0x9e, 0x09, 0xda, 0x64, 0xeb, 0xc2, 0x17, - 0x60, 0x9e, 0x82, 0x00, 0x63, 0x97, 0x67, 0x99, 0x8e, 0xe8, 0xf3, 0x32, 0x5b, 0xd1, 0x4d, 0x59, - 0x33, 0x7c, 0xd2, 0x82, 0x97, 0x9f, 0x79, 0xc6, 0xf6, 0x36, 0x94, 0xf7, 0x78, 0xbd, 0xf8, 0x80, - 0x54, 0x33, 0x94, 0x91, 0x68, 0x81, 0x16, 0xf2, 0xa8, 0xff, 0xa9, 0xc0, 0x5c, 0xc2, 0x25, 0xbf, - 0x9c, 0x58, 0x7f, 0x65, 0x59, 0x4f, 0x62, 0xf5, 0x75, 0x4b, 0x72, 0xce, 0x32, 0x28, 0x65, 0xf8, - 0xb5, 0xc8, 0x0d, 0xa8, 0x25, 0x10, 0x8e, 0x02, 0xdd, 0x5c, 0xcf, 0x6f, 0x87, 0x36, 0x2f, 0xc3, - 0x1f, 0xfd, 0xe3, 0xbb, 0xf7, 0x45, 0x3e, 0xe9, 0xdd, 0xf7, 0x09, 0x3f, 0xb7, 0x0a, 0xf5, 0x19, - 0x98, 0xd9, 0xcd, 0x7b, 0xab, 0xa7, 0x24, 0xf0, 0x8f, 0xaf, 0xc1, 0xe2, 0x7d, 0xab, 0x87, 0xfd, - 0x43, 0x3f, 0xc0, 0xfd, 0x26, 0xf5, 0xc5, 0x7b, 0x16, 0xf6, 0xd0, 0x2a, 0x00, 0x35, 0x05, 0xd7, - 0xb1, 0xc2, 0xb7, 0x43, 0x62, 0x29, 0xea, 0x4f, 0x14, 0x98, 0x8f, 0x18, 0xc7, 0x01, 0xb9, 0xbe, - 0x0a, 0x93, 0x7b, 0xbe, 0xd8, 0x46, 0x4d, 0x1c, 0x2e, 0x65, 0x55, 0x41, 0x2b, 0xed, 0xf9, 0x4d, - 0x13, 0xbd, 0x06, 0x30, 0xf0, 0xb1, 0xc9, 0xcf, 0x73, 0x47, 0xc0, 0x8e, 0x2b, 0x84, 0x94, 0x9d, - 0x08, 0xdf, 0x82, 0x19, 0xcb, 0x76, 0x4c, 0x4c, 0xcf, 0xfa, 0xcd, 0x51, 0x90, 0x63, 0x60, 0xb4, - 0xbb, 0x3e, 0x36, 0xd5, 0xdf, 0x89, 0x4e, 0xec, 0xbf, 0xc8, 0x2d, 0x54, 0xff, 0x50, 0x44, 0x23, - 0xa2, 0xdb, 0xb9, 0xe9, 0xbf, 0x0b, 0x0b, 0x6c, 0x52, 0xd9, 0x0b, 0xcb, 0xcc, 0xbc, 0x8b, 0x95, - 0x68, 0x9c, 0x56, 0xb3, 0x78, 0x1c, 0x2a, 0x98, 0x50, 0x0b, 0x4e, 0x46, 0xcb, 0x83, 0xb8, 0xb4, - 0xc2, 0x68, 0x69, 0x8b, 0x9d, 0xd8, 0xae, 0xbb, 0x60, 0x54, 0xef, 0xc0, 0xc9, 0xc4, 0x75, 0x8b, - 0xf1, 0x8f, 0x5e, 0xde, 0x4b, 0x6c, 0x94, 0x46, 0x83, 0xfd, 0xba, 0x7c, 0xcb, 0x6f, 0xd8, 0xc5, - 0x18, 0x7e, 0xe1, 0x6c, 0x17, 0x4e, 0x49, 0xbb, 0xb8, 0x52, 0x5d, 0x6e, 0x25, 0x82, 0xf5, 0xf3, - 0xf9, 0xf2, 0x12, 0x51, 0xfb, 0xbf, 0x2b, 0xb0, 0x98, 0x45, 0x70, 0xcc, 0xc3, 0x85, 0x0f, 0x73, - 0x6e, 0x08, 0xbf, 0x32, 0xaa, 0x42, 0x9f, 0xc9, 0x61, 0xcc, 0x16, 0xbb, 0x5f, 0x38, 0xba, 0x4f, - 0x8a, 0xe3, 0xf5, 0xc9, 0xcf, 0x0b, 0xb1, 0x03, 0xb4, 0x21, 0x77, 0x00, 0x3f, 0xc1, 0xae, 0xf5, - 0x5a, 0xe2, 0x0a, 0xe0, 0x8b, 0x99, 0x8c, 0x23, 0x6e, 0x00, 0x6a, 0x59, 0x9b, 0x31, 0xd7, 0x47, - 0x49, 0xfa, 0xc2, 0x5e, 0x00, 0xfc, 0x8d, 0x02, 0xcc, 0xc9, 0x1d, 0x82, 0xde, 0xc9, 0xb8, 0xff, - 0x77, 0x6e, 0x44, 0x03, 0xa5, 0xeb, 0x7f, 0xfc, 0xbe, 0x5d, 0x61, 0xfc, 0xfb, 0x76, 0xc5, 0xf1, - 0xee, 0xdb, 0xdd, 0x83, 0xb9, 0x27, 0x9e, 0x15, 0x18, 0x8f, 0x7a, 0x58, 0xef, 0x19, 0x87, 0xd8, - 0xe3, 0x8e, 0x7d, 0xa8, 0x2b, 0xaa, 0x0a, 0x96, 0x87, 0x84, 0x83, 0x2e, 0x53, 0x9f, 0x18, 0x2e, - 0x5f, 0xed, 0x4a, 0x01, 0x74, 0xfb, 0x89, 0xe1, 0x32, 0x1e, 0x4a, 0xa2, 0x7e, 0xab, 0x00, 0x27, - 0x33, 0x6f, 0x89, 0x7d, 0x72, 0x15, 0x5d, 0x89, 0xab, 0xe8, 0x28, 0x57, 0xef, 0x8a, 0x47, 0xba, - 0x7a, 0xd7, 0xcc, 0x51, 0x58, 0x16, 0x42, 0x63, 0xb8, 0xde, 0xd4, 0x3f, 0x53, 0xa0, 0x2c, 0x2a, - 0x35, 0xf2, 0x22, 0xdc, 0xf2, 0x80, 0x90, 0xe9, 0xf4, 0xb2, 0x82, 0x6d, 0xd8, 0x8e, 0xee, 0x63, - 0x12, 0xc1, 0x8e, 0xbc, 0x76, 0xb4, 0x48, 0xf9, 0xd6, 0x1c, 0x0f, 0x6f, 0x19, 0xb6, 0xd3, 0x66, - 0x4c, 0xa8, 0x01, 0x35, 0x26, 0x8f, 0x8a, 0x22, 0x42, 0x47, 0x4e, 0x94, 0x73, 0x94, 0x81, 0x08, - 0x21, 0xc2, 0x7c, 0xf5, 0x2f, 0x15, 0x98, 0x4f, 0x68, 0xf6, 0x97, 0xaf, 0x11, 0xdf, 0x2f, 0xc2, - 0x4c, 0xac, 0x97, 0x47, 0x34, 0x60, 0x0d, 0x16, 0x04, 0xca, 0xca, 0xc7, 0xc1, 0x78, 0xd7, 0xbe, - 0xe6, 0x39, 0x47, 0x1b, 0x07, 0x2c, 0x8e, 0xba, 0x0b, 0xf3, 0xc6, 0x81, 0x61, 0xf5, 0xa8, 0x05, - 0x8d, 0x15, 0xa2, 0xcc, 0x85, 0xf4, 0x61, 0x24, 0xc6, 0xda, 0x3d, 0xd6, 0xe5, 0x2f, 0xa0, 0xb4, - 0xd1, 0x1d, 0x3c, 0xdf, 0x8f, 0x41, 0xf9, 0x86, 0xde, 0xc1, 0xf3, 0xfd, 0xb0, 0x3c, 0x7a, 0x53, - 0x83, 0x5e, 0x3e, 0xf4, 0xf9, 0x8b, 0x35, 0xf9, 0xe5, 0x11, 0xda, 0xfb, 0x94, 0x94, 0x28, 0xac, - 0x6f, 0x7c, 0xe4, 0x78, 0x7a, 0x9c, 0x7f, 0x7a, 0x84, 0xc2, 0x28, 0x47, 0x2b, 0x14, 0xa2, 0xfe, - 0x89, 0x02, 0x95, 0xd0, 0x8f, 0x8c, 0xe8, 0xa1, 0x26, 0x2c, 0xd2, 0x6b, 0x2d, 0x49, 0x0d, 0x8f, - 0xe8, 0x24, 0x44, 0x98, 0x1a, 0xb2, 0x96, 0x1b, 0x50, 0xa3, 0xa2, 0xe2, 0xaa, 0x1e, 0xd5, 0x51, - 0xbe, 0xa8, 0x26, 0x0b, 0x28, 0xff, 0xbc, 0x00, 0x28, 0xed, 0x4a, 0x7e, 0x69, 0x8c, 0x2c, 0xde, - 0x69, 0xa5, 0xf1, 0x3b, 0xfd, 0x01, 0x9c, 0xe8, 0x38, 0xfd, 0xbe, 0x45, 0xaf, 0x44, 0x39, 0xde, - 0xe1, 0x78, 0xe6, 0xb6, 0xc0, 0x78, 0x98, 0x9e, 0x98, 0xfa, 0xde, 0x86, 0x53, 0x1a, 0x76, 0x5c, - 0x6c, 0x87, 0xae, 0xff, 0xa1, 0xd3, 0x3d, 0x42, 0x7c, 0x7b, 0x06, 0xea, 0x59, 0xfc, 0x7c, 0xd7, - 0x62, 0x00, 0xf5, 0xb5, 0x7d, 0xdc, 0x79, 0x4c, 0x97, 0x5f, 0xc7, 0x41, 0x4a, 0xd5, 0xa1, 0xdc, - 0x73, 0x3a, 0xec, 0xfd, 0x62, 0xbe, 0xb1, 0x27, 0xbe, 0x87, 0x9c, 0xa9, 0x9c, 0x85, 0xd3, 0x99, - 0xc5, 0xf2, 0x5a, 0x21, 0xa8, 0x3d, 0xc0, 0xc1, 0xc6, 0x01, 0xb6, 0xc3, 0xf0, 0x59, 0xfd, 0x51, - 0x21, 0x16, 0xa8, 0xd3, 0xac, 0x23, 0x20, 0xcc, 0x50, 0x0b, 0xa2, 0x95, 0x83, 0x8e, 0x09, 0x37, - 0x7b, 0x8c, 0x93, 0x3d, 0x95, 0x9b, 0x7d, 0xc4, 0x4c, 0x0b, 0xa1, 0x6f, 0x70, 0x46, 0xcf, 0x0c, - 0x85, 0x69, 0x09, 0xe0, 0x41, 0x31, 0x09, 0x3c, 0x78, 0x0f, 0x50, 0x3c, 0x14, 0xe7, 0xbb, 0x06, - 0xa5, 0x31, 0x5e, 0x56, 0xaa, 0xb9, 0xc9, 0x37, 0xc0, 0x72, 0xde, 0x47, 0x9a, 0x3c, 0xd6, 0xfb, - 0x48, 0xea, 0x2a, 0x9c, 0x21, 0x01, 0xf6, 0x26, 0x0e, 0x3c, 0xab, 0xb3, 0x8e, 0xfd, 0x8e, 0x67, - 0xb9, 0x81, 0x13, 0x82, 0x9e, 0x54, 0x1d, 0xce, 0xe6, 0xe4, 0x73, 0x75, 0xbf, 0x0d, 0x33, 0x66, - 0x94, 0x9c, 0xb5, 0xcf, 0x94, 0xe4, 0xd5, 0xe2, 0x0c, 0xea, 0x07, 0x50, 0x4b, 0x12, 0x64, 0xee, - 0xdf, 0x20, 0x28, 0xed, 0xe3, 0x9e, 0x2b, 0xee, 0xb0, 0x91, 0xdf, 0x44, 0xeb, 0x6c, 0xed, 0xf2, - 0x18, 0x1f, 0x8a, 0x73, 0x88, 0x0a, 0x4d, 0xf9, 0x12, 0x3e, 0x0c, 0xdb, 0x26, 0x3d, 0xd8, 0xe1, - 0x59, 0x9d, 0x64, 0xdb, 0x32, 0xf2, 0xa3, 0xb6, 0x91, 0x6e, 0xeb, 0xb3, 0x64, 0xde, 0xb6, 0xb3, - 0xb9, 0x8f, 0x81, 0x50, 0x5e, 0x70, 0x1d, 0x93, 0xff, 0x56, 0x7f, 0xa0, 0xc0, 0x42, 0x8a, 0x62, - 0xcc, 0xb3, 0xa5, 0x97, 0x60, 0x5a, 0x94, 0x5b, 0x48, 0x03, 0x89, 0x99, 0x2c, 0x4d, 0x90, 0xa0, - 0x26, 0x2c, 0x44, 0x16, 0x2d, 0xf8, 0x8a, 0xe9, 0xbe, 0x88, 0x2f, 0x5c, 0x68, 0x75, 0x6b, 0x9d, - 0x44, 0x8a, 0xda, 0x81, 0x5a, 0x92, 0x6a, 0x9c, 0x31, 0x75, 0xa4, 0xfa, 0xaa, 0x7f, 0xad, 0xc0, - 0x14, 0x4b, 0xcb, 0xec, 0x6c, 0x69, 0x3a, 0x28, 0x24, 0xa7, 0x83, 0xd7, 0x61, 0x86, 0xc9, 0xd1, - 0xc3, 0x1b, 0x8c, 0x73, 0xf2, 0xf6, 0x3a, 0x13, 0x4d, 0x47, 0x2b, 0xf4, 0xc3, 0xdf, 0xa4, 0x19, - 0xcc, 0x5e, 0xe8, 0xca, 0x44, 0xc0, 0xc5, 0x67, 0x68, 0x1a, 0x75, 0xb9, 0x24, 0x64, 0xe6, 0x6b, - 0x98, 0x11, 0xbe, 0x99, 0x6f, 0x6d, 0x2d, 0xd1, 0xe7, 0x27, 0x53, 0x1b, 0xcc, 0xea, 0x0e, 0x7d, - 0x1f, 0x32, 0xbd, 0x31, 0x8c, 0xde, 0x90, 0xe1, 0x05, 0xcf, 0xa5, 0x4e, 0xf8, 0x25, 0xb6, 0x81, - 0xc7, 0xde, 0x79, 0xe7, 0x28, 0x83, 0x0f, 0xe1, 0x54, 0x2e, 0x0d, 0x7a, 0x2b, 0x7c, 0x8c, 0xd7, - 0xf4, 0xac, 0x03, 0xbe, 0xb1, 0x30, 0x27, 0x3f, 0xfc, 0xb1, 0x46, 0x09, 0xd6, 0x69, 0xbe, 0x78, - 0xa6, 0x97, 0x7d, 0x5d, 0x7e, 0x1e, 0xca, 0xe2, 0x0d, 0x7e, 0x34, 0x0d, 0xc5, 0x9d, 0xb5, 0x56, - 0x6d, 0x82, 0xfc, 0xd8, 0x5d, 0x6f, 0xd5, 0x14, 0x54, 0x86, 0x52, 0x7b, 0x6d, 0xa7, 0x55, 0x2b, - 0x5c, 0xee, 0x43, 0x2d, 0xf9, 0x0c, 0x3d, 0x5a, 0x86, 0x13, 0x2d, 0x6d, 0xbb, 0xd5, 0x78, 0xd0, - 0xd8, 0x69, 0x6e, 0x6f, 0xe9, 0x2d, 0xad, 0xf9, 0x7e, 0x63, 0x67, 0xa3, 0x36, 0x81, 0x2e, 0xc0, - 0xd9, 0x78, 0xc6, 0xbb, 0xdb, 0xed, 0x1d, 0x7d, 0x67, 0x5b, 0x5f, 0xdb, 0xde, 0xda, 0x69, 0x34, - 0xb7, 0x36, 0xb4, 0x9a, 0x82, 0xce, 0xc2, 0xa9, 0x38, 0xc9, 0xbd, 0xe6, 0x7a, 0x53, 0xdb, 0x58, - 0x23, 0xbf, 0x1b, 0x0f, 0x6b, 0x85, 0xcb, 0x6f, 0x41, 0x55, 0xba, 0xe4, 0x44, 0xaa, 0xd4, 0xda, - 0x5e, 0xaf, 0x4d, 0xa0, 0x2a, 0x54, 0xe2, 0x72, 0xca, 0x50, 0xda, 0xda, 0x5e, 0xdf, 0xa8, 0x15, - 0x10, 0xc0, 0xd4, 0x4e, 0x43, 0x7b, 0xb0, 0xb1, 0x53, 0x2b, 0x5e, 0x7e, 0x19, 0x56, 0xf2, 0x2e, - 0xfb, 0xa1, 0x0a, 0x4c, 0x6e, 0x62, 0xaf, 0x8b, 0x6b, 0x13, 0x84, 0xa5, 0x4d, 0xac, 0x24, 0xa8, - 0x29, 0x97, 0xef, 0x24, 0xdf, 0xaa, 0xc1, 0x68, 0x01, 0xaa, 0xed, 0xc6, 0xd6, 0xfa, 0xbd, 0xed, - 0xaf, 0xea, 0xda, 0x46, 0x63, 0xfd, 0x83, 0xda, 0x04, 0x5a, 0x84, 0x9a, 0x48, 0xda, 0xda, 0xde, - 0x61, 0xa9, 0xca, 0xe5, 0xc7, 0x89, 0x65, 0x2e, 0x46, 0x27, 0x61, 0x21, 0xac, 0xa5, 0xbe, 0xa6, - 0x6d, 0x34, 0x76, 0x36, 0x48, 0xe5, 0xa5, 0x64, 0x6d, 0x77, 0x6b, 0xab, 0xb9, 0xf5, 0xa0, 0xa6, - 0x10, 0xa9, 0x51, 0xf2, 0xc6, 0x57, 0x9b, 0x84, 0xb8, 0x20, 0x13, 0xef, 0x6e, 0x7d, 0x69, 0x6b, - 0xfb, 0x2b, 0x5b, 0xb5, 0xe2, 0xe5, 0xff, 0x1f, 0x47, 0xd3, 0x44, 0x53, 0xd1, 0x69, 0x58, 0x4e, - 0x95, 0xa8, 0x6f, 0xbc, 0xbf, 0xb1, 0xb5, 0x53, 0x9b, 0x90, 0x33, 0xdb, 0x3b, 0x0d, 0x2d, 0xca, - 0x54, 0x92, 0x99, 0xdb, 0xad, 0x56, 0x98, 0x59, 0x90, 0x33, 0xd7, 0x37, 0x1e, 0x6e, 0x44, 0x9c, - 0xc5, 0xcb, 0xcf, 0x02, 0x44, 0x43, 0x0e, 0xcd, 0xc0, 0xf4, 0xda, 0xf6, 0xee, 0xd6, 0xce, 0x86, - 0x56, 0x9b, 0x20, 0x5a, 0x7e, 0xd0, 0xd8, 0x7d, 0xb0, 0x51, 0x53, 0x2e, 0x5f, 0x82, 0xd9, 0xb8, - 0x01, 0x12, 0xba, 0xf6, 0x07, 0xed, 0x9d, 0x8d, 0x4d, 0xa2, 0x91, 0x59, 0x28, 0xaf, 0x3d, 0xd0, - 0xb6, 0x77, 0x5b, 0xf7, 0xdb, 0x35, 0xe5, 0xc6, 0x7f, 0x2d, 0x86, 0x9b, 0xfa, 0x6d, 0xec, 0xd1, - 0xdb, 0x28, 0xeb, 0x30, 0x2d, 0xfe, 0xd1, 0x85, 0xb4, 0xd1, 0x23, 0xff, 0x63, 0x8e, 0xfa, 0xe9, - 0xcc, 0x3c, 0x1e, 0x4a, 0x4c, 0xa0, 0xf7, 0xe9, 0x31, 0x49, 0xec, 0xa5, 0xb8, 0xf3, 0x89, 0xdd, - 0xf3, 0xd4, 0x83, 0x74, 0xf5, 0x0b, 0x43, 0x28, 0x42, 0xb9, 0x1f, 0xc0, 0x9c, 0xfc, 0x24, 0x2b, - 0xba, 0x20, 0x6f, 0xee, 0x67, 0xbc, 0xf6, 0x5a, 0x57, 0x87, 0x91, 0x84, 0xa2, 0x75, 0xa8, 0x25, - 0x9f, 0x64, 0x45, 0x12, 0x32, 0x28, 0xe7, 0xc5, 0xd7, 0xfa, 0xb3, 0xc3, 0x89, 0xe2, 0x05, 0xa4, - 0x5e, 0x1a, 0x7d, 0x66, 0xf8, 0xdb, 0x8d, 0x19, 0x05, 0xe4, 0x3d, 0xf0, 0xc8, 0x94, 0x23, 0x4f, - 0xb4, 0x28, 0xf1, 0xb8, 0x67, 0xc6, 0x3b, 0x80, 0xb2, 0x72, 0xb2, 0xdf, 0x80, 0x53, 0x27, 0xd0, - 0xff, 0x82, 0xf9, 0xc4, 0x55, 0x03, 0x24, 0x31, 0x66, 0xdf, 0xa0, 0xa8, 0x3f, 0x33, 0x94, 0x46, - 0xee, 0xd5, 0xf8, 0x75, 0x82, 0x64, 0xaf, 0x66, 0x5c, 0x53, 0x48, 0xf6, 0x6a, 0xe6, 0x6d, 0x04, - 0x6a, 0x88, 0xd2, 0xd5, 0x01, 0xd9, 0x10, 0xb3, 0xae, 0x2a, 0xd4, 0x2f, 0x0c, 0xa1, 0x88, 0x2b, - 0x24, 0x71, 0x79, 0x40, 0x56, 0x48, 0xf6, 0xb5, 0x84, 0xfa, 0x33, 0x43, 0x69, 0x92, 0x3d, 0x19, - 0x21, 0x93, 0xd3, 0x3d, 0x99, 0x02, 0xce, 0xa7, 0x7b, 0x32, 0x0d, 0x6c, 0xe6, 0x3d, 0x99, 0xc0, - 0x12, 0xab, 0x43, 0xd1, 0x89, 0x59, 0x3d, 0x99, 0x8d, 0x60, 0x54, 0x27, 0xd0, 0x13, 0x58, 0xc9, - 0x43, 0x8f, 0xa1, 0x17, 0x8f, 0x00, 0x72, 0xab, 0xbf, 0x34, 0x1e, 0x71, 0x58, 0x30, 0x06, 0x94, - 0x5e, 0x71, 0xa1, 0xe7, 0x64, 0x75, 0xe7, 0xac, 0xe8, 0xea, 0xcf, 0x8f, 0x22, 0x0b, 0x8b, 0x79, - 0x00, 0x65, 0x81, 0x4b, 0x43, 0x92, 0x0b, 0x4c, 0xe0, 0xe1, 0xea, 0x67, 0xb2, 0x33, 0x43, 0x41, - 0x6f, 0x40, 0x89, 0xa4, 0xa2, 0xe5, 0x24, 0x9d, 0x10, 0xb0, 0x92, 0xce, 0x08, 0x99, 0x1b, 0x30, - 0xc5, 0x00, 0x57, 0x48, 0x3a, 0x0b, 0x95, 0x00, 0x61, 0xf5, 0x7a, 0x56, 0x56, 0x28, 0xa2, 0xc5, - 0xfe, 0x6d, 0x10, 0xc7, 0x4f, 0xa1, 0xd5, 0xe4, 0x63, 0xec, 0x32, 0x50, 0xab, 0x7e, 0x2e, 0x37, - 0x3f, 0x6e, 0xb3, 0x89, 0x8d, 0xd5, 0x0b, 0x43, 0x0e, 0x0a, 0xb2, 0x6c, 0x36, 0xfb, 0xf8, 0x81, - 0x75, 0x6e, 0xfa, 0x78, 0x02, 0x3d, 0x97, 0x6b, 0xef, 0x52, 0x11, 0xcf, 0x8f, 0x22, 0x8b, 0x0f, - 0x8d, 0xe4, 0xab, 0x6a, 0xea, 0xb0, 0x17, 0x0f, 0xb3, 0x86, 0x46, 0xce, 0x4b, 0x8a, 0xea, 0x04, - 0xda, 0x87, 0x13, 0x19, 0x4f, 0x2d, 0xa2, 0xe7, 0xf3, 0xfd, 0xaf, 0x54, 0xca, 0x0b, 0x23, 0xe9, - 0xe2, 0x25, 0x65, 0x80, 0x26, 0xe4, 0x92, 0xf2, 0x51, 0x1b, 0x72, 0x49, 0xc3, 0xd0, 0x17, 0xd4, - 0x10, 0xb9, 0x0f, 0x39, 0x95, 0x75, 0xc6, 0x9e, 0x61, 0x88, 0x29, 0x8f, 0xb1, 0x0f, 0x27, 0x32, - 0x76, 0x25, 0xe4, 0xca, 0xe6, 0xef, 0x96, 0xc8, 0x95, 0x1d, 0xb6, 0xbd, 0x31, 0x81, 0x3e, 0x04, - 0xf4, 0x00, 0x07, 0x72, 0x28, 0xe7, 0x23, 0x69, 0xa0, 0x26, 0x37, 0x40, 0x72, 0xec, 0x53, 0xda, - 0x09, 0x51, 0x27, 0xae, 0x2b, 0xc8, 0x66, 0xb7, 0x99, 0x52, 0xeb, 0x77, 0x74, 0x31, 0xd9, 0x6d, - 0x79, 0x5b, 0x00, 0xf5, 0x4b, 0x63, 0x50, 0x86, 0x6d, 0xb1, 0x93, 0xcf, 0xfa, 0x8a, 0x25, 0xe4, - 0xc5, 0x7c, 0x33, 0x91, 0x97, 0xe5, 0xe9, 0xf2, 0x72, 0x17, 0xe8, 0x61, 0x3c, 0x17, 0x33, 0xa6, - 0xf3, 0xf9, 0x10, 0x9e, 0x9c, 0x78, 0x2e, 0xcb, 0x80, 0x6e, 0x7c, 0xaf, 0x08, 0xb3, 0x0c, 0xea, - 0xc4, 0xc3, 0xcf, 0x4d, 0x80, 0x08, 0x35, 0x88, 0xce, 0x26, 0xeb, 0x28, 0x41, 0x31, 0xeb, 0xab, - 0x79, 0xd9, 0x71, 0x37, 0x17, 0x43, 0xe3, 0xc9, 0x6e, 0x2e, 0x0d, 0x2e, 0x94, 0xdd, 0x5c, 0x06, - 0x8c, 0x4f, 0x9d, 0x40, 0xef, 0x41, 0x25, 0x04, 0x7f, 0xc9, 0xc6, 0x93, 0x44, 0xb1, 0xd5, 0xcf, - 0xe6, 0xe4, 0xc6, 0x6b, 0x17, 0xc3, 0x74, 0xc9, 0xb5, 0x4b, 0xe3, 0xc5, 0xe4, 0xda, 0x65, 0x81, - 0xc1, 0xa2, 0xf6, 0x32, 0x1c, 0x41, 0x46, 0x7b, 0x25, 0x5c, 0x49, 0x46, 0x7b, 0x65, 0x00, 0x82, - 0x3a, 0x71, 0xef, 0xee, 0x8f, 0x7f, 0xb6, 0xaa, 0xfc, 0xe4, 0x67, 0xab, 0x13, 0xff, 0xf7, 0xe3, - 0x55, 0xe5, 0xc7, 0x1f, 0xaf, 0x2a, 0x7f, 0xff, 0xf1, 0xaa, 0xf2, 0xd3, 0x8f, 0x57, 0x95, 0x6f, - 0xff, 0xcb, 0xea, 0xc4, 0x87, 0xea, 0xe3, 0x5b, 0xfe, 0x55, 0xcb, 0xb9, 0xd6, 0xf1, 0xac, 0x2b, - 0x86, 0x6b, 0x5d, 0x73, 0x1f, 0x77, 0xaf, 0x19, 0xae, 0xe5, 0x5f, 0xe3, 0x72, 0xaf, 0x1d, 0xbc, - 0xfc, 0x68, 0x8a, 0xfe, 0xab, 0xb9, 0x57, 0xfe, 0x3b, 0x00, 0x00, 0xff, 0xff, 0x2a, 0x00, 0x2f, - 0x79, 0x24, 0x70, 0x00, 0x00, + 0xbd, 0x7f, 0x92, 0x76, 0xf5, 0xb3, 0x5a, 0xed, 0xae, 0xa4, 0xd5, 0xee, 0x6a, 0x44, 0x52, 0xda, + 0x59, 0x8b, 0xe4, 0xb8, 0x87, 0x5c, 0x7b, 0xd7, 0x17, 0xee, 0xdb, 0x9a, 0x2e, 0x0e, 0x7b, 0x35, + 0xd3, 0xdd, 0xee, 0xee, 0x91, 0x44, 0x3f, 0x5c, 0xdc, 0xa7, 0x8b, 0x1b, 0x3f, 0x19, 0x48, 0x8c, + 0x20, 0x46, 0x10, 0xc3, 0x01, 0x82, 0xe4, 0x2d, 0x89, 0x81, 0x38, 0x0e, 0x12, 0x20, 0x40, 0x90, + 0x18, 0x4e, 0x80, 0x00, 0x79, 0x48, 0x00, 0x3f, 0x04, 0x88, 0xbd, 0x09, 0x10, 0x20, 0xcf, 0x7e, + 0xc8, 0x53, 0x1c, 0xd4, 0x5f, 0x77, 0x57, 0xff, 0xcc, 0x0c, 0xb9, 0xca, 0xee, 0xfa, 0x89, 0xd3, + 0x55, 0xe7, 0x9c, 0xaa, 0x3a, 0x55, 0x75, 0xea, 0x9c, 0xaa, 0xaf, 0x8a, 0x50, 0x31, 0x5c, 0xeb, + 0xb2, 0xeb, 0x39, 0x81, 0x83, 0xc0, 0x1b, 0xd8, 0x81, 0xd5, 0xc7, 0x97, 0x1f, 0xbf, 0x5a, 0xbf, + 0xd4, 0xb5, 0x82, 0xfd, 0xc1, 0xc3, 0xcb, 0x1d, 0xa7, 0x7f, 0xa5, 0xeb, 0x74, 0x9d, 0x2b, 0x94, + 0xe4, 0xe1, 0x60, 0x8f, 0x7e, 0xd1, 0x0f, 0xfa, 0x8b, 0xb1, 0xaa, 0x17, 0x61, 0xee, 0x03, 0xec, + 0xf9, 0x96, 0x63, 0x6b, 0xf8, 0x1b, 0x03, 0xec, 0x07, 0x68, 0x05, 0xa6, 0x1f, 0xb3, 0x94, 0x15, + 0xe5, 0xac, 0x72, 0xbe, 0xa2, 0x89, 0x4f, 0xf5, 0xf7, 0x15, 0x98, 0x0f, 0x89, 0x7d, 0xd7, 0xb1, + 0x7d, 0x9c, 0x4f, 0x8d, 0xce, 0xc1, 0x2c, 0xaf, 0x96, 0x6e, 0x1b, 0x7d, 0xbc, 0x52, 0xa0, 0xd9, + 0x33, 0x3c, 0x6d, 0xcb, 0xe8, 0x63, 0xf4, 0x12, 0xcc, 0x0b, 0x12, 0x21, 0xa4, 0x48, 0xa9, 0xe6, + 0x78, 0x32, 0x2f, 0x0d, 0x5d, 0x86, 0x63, 0x82, 0xd0, 0x70, 0xad, 0x90, 0xb8, 0x44, 0x89, 0x17, + 0x78, 0x56, 0xc3, 0xb5, 0x38, 0xbd, 0xfa, 0x35, 0xa8, 0xac, 0x6f, 0xb5, 0xd7, 0x1c, 0x7b, 0xcf, + 0xea, 0x92, 0x2a, 0xfa, 0xd8, 0x23, 0x3c, 0x2b, 0xca, 0xd9, 0x22, 0xa9, 0x22, 0xff, 0x44, 0x75, + 0x28, 0xfb, 0xd8, 0xf0, 0x3a, 0xfb, 0xd8, 0x5f, 0x29, 0xd0, 0xac, 0xf0, 0x9b, 0x70, 0x39, 0x6e, + 0x60, 0x39, 0xb6, 0xbf, 0x52, 0x64, 0x5c, 0xfc, 0x53, 0xfd, 0x6d, 0x05, 0x66, 0x5a, 0x8e, 0x17, + 0x6c, 0x1a, 0xae, 0x6b, 0xd9, 0x5d, 0x74, 0x15, 0xca, 0x54, 0x97, 0x1d, 0xa7, 0x47, 0x75, 0x30, + 0x77, 0x6d, 0xf1, 0x72, 0xd4, 0x21, 0x97, 0x5b, 0x3c, 0x4f, 0x0b, 0xa9, 0xd0, 0x0b, 0x30, 0xd7, + 0x71, 0xec, 0xc0, 0xb0, 0x6c, 0xec, 0xe9, 0xae, 0xe3, 0x05, 0x54, 0x39, 0x93, 0x5a, 0x35, 0x4c, + 0x25, 0xf2, 0xd1, 0x49, 0xa8, 0xec, 0x3b, 0x7e, 0xc0, 0x28, 0x8a, 0x94, 0xa2, 0x4c, 0x12, 0x68, + 0xe6, 0x32, 0x4c, 0xd3, 0x4c, 0xcb, 0xe5, 0x6a, 0x98, 0x22, 0x9f, 0x4d, 0x57, 0xfd, 0x5e, 0x11, + 0x26, 0x37, 0x9d, 0x81, 0x1d, 0x24, 0x8a, 0x31, 0x82, 0x7d, 0xde, 0x45, 0xb1, 0x62, 0x8c, 0x60, + 0x3f, 0x2a, 0x86, 0x50, 0xb0, 0x5e, 0x62, 0xc5, 0x90, 0xcc, 0x3a, 0x94, 0x3d, 0x6c, 0x98, 0x8e, + 0xdd, 0x3b, 0xa0, 0x55, 0x28, 0x6b, 0xe1, 0x37, 0xe9, 0x3e, 0x1f, 0xf7, 0x2c, 0x7b, 0xf0, 0x54, + 0xf7, 0x70, 0xcf, 0x78, 0x88, 0x7b, 0xb4, 0x2a, 0x65, 0x6d, 0x8e, 0x27, 0x6b, 0x2c, 0x15, 0xbd, + 0x03, 0x33, 0xae, 0xe7, 0xb8, 0x46, 0xd7, 0x20, 0x1a, 0x5c, 0x99, 0xa4, 0x4a, 0x3a, 0x15, 0x57, + 0x12, 0xad, 0x70, 0x2b, 0xa2, 0xd1, 0xe2, 0x0c, 0xe8, 0x4d, 0x98, 0x19, 0x58, 0x26, 0xd7, 0xb7, + 0xbf, 0x32, 0x75, 0xb6, 0x78, 0x7e, 0xe6, 0xda, 0xf1, 0x38, 0x7f, 0x73, 0x9d, 0xe7, 0x6a, 0x71, + 0x4a, 0xc2, 0xd8, 0x8d, 0x31, 0x4e, 0x0f, 0x65, 0x8c, 0x51, 0xd2, 0x01, 0x87, 0x3b, 0x03, 0xcf, + 0xb7, 0x1e, 0x63, 0x9d, 0x34, 0x58, 0xa7, 0x1a, 0x28, 0xd3, 0xe6, 0x2d, 0x84, 0x59, 0x1a, 0x36, + 0xcc, 0x6d, 0xa2, 0x8a, 0x97, 0x61, 0xd2, 0xea, 0x1b, 0x5d, 0xbc, 0x52, 0x39, 0xab, 0xa4, 0x8a, + 0x20, 0x19, 0x6d, 0x17, 0x77, 0x34, 0x46, 0xa3, 0xea, 0x50, 0x09, 0x8b, 0x8d, 0xfa, 0xd1, 0xa4, + 0xbd, 0x53, 0xe5, 0xfd, 0x68, 0x92, 0xf9, 0x13, 0xf5, 0x9e, 0x65, 0xd2, 0x9e, 0xa9, 0x6a, 0x33, + 0x61, 0x5a, 0xd3, 0x44, 0x4b, 0x30, 0xd5, 0xc3, 0x76, 0x37, 0xd8, 0xa7, 0x5d, 0x53, 0xd5, 0xf8, + 0x97, 0xfa, 0x1b, 0x0a, 0x54, 0x77, 0x7d, 0xec, 0x91, 0x49, 0xe6, 0xbb, 0x46, 0x07, 0xa3, 0x4b, + 0x50, 0xea, 0x3b, 0x26, 0xe6, 0xe3, 0xf3, 0x44, 0xbc, 0x7a, 0x21, 0xd1, 0xa6, 0x63, 0x62, 0x8d, + 0x92, 0xa1, 0x0b, 0x50, 0x1a, 0x58, 0x26, 0x9b, 0x14, 0xb9, 0x0a, 0xa3, 0x24, 0x84, 0xb4, 0x4b, + 0x48, 0x8b, 0x43, 0x49, 0x09, 0x89, 0xfa, 0x4b, 0x05, 0xe6, 0xc3, 0xd2, 0xb6, 0xe9, 0x6c, 0x42, + 0xaf, 0xc1, 0xb4, 0x8d, 0x83, 0x27, 0x8e, 0xf7, 0x68, 0x74, 0xdd, 0x04, 0x25, 0x7a, 0x19, 0x8a, + 0x2e, 0xd7, 0xc8, 0x50, 0x06, 0x42, 0x45, 0x88, 0x2d, 0xb7, 0x43, 0x35, 0x34, 0x9c, 0xd8, 0x72, + 0x3b, 0x64, 0x2e, 0x04, 0x86, 0xd7, 0xc5, 0xb4, 0x3f, 0xd8, 0xbc, 0x2a, 0xb3, 0x84, 0xa6, 0x89, + 0xee, 0xc0, 0xdc, 0xc0, 0xc7, 0x9e, 0xed, 0xeb, 0xc2, 0x32, 0x4c, 0xd2, 0xde, 0x96, 0x84, 0x4a, + 0x7a, 0xd7, 0xaa, 0x8c, 0x61, 0x9b, 0x9b, 0x0e, 0x15, 0xa0, 0x69, 0x07, 0x6f, 0x5c, 0xff, 0xc0, + 0xe8, 0x0d, 0x30, 0x5a, 0x84, 0xc9, 0xc7, 0xe4, 0x07, 0x6d, 0x79, 0x51, 0x63, 0x1f, 0xea, 0xf7, + 0x27, 0xe1, 0xe4, 0x03, 0x32, 0x7b, 0xda, 0x86, 0x6d, 0x3e, 0x74, 0x9e, 0xb6, 0xc9, 0x60, 0xb3, + 0x82, 0x83, 0x35, 0xc7, 0x0e, 0xf0, 0xd3, 0x00, 0xbd, 0x07, 0x0b, 0xb6, 0x90, 0x1f, 0x56, 0x44, + 0xa1, 0x15, 0x39, 0x99, 0xd9, 0x3a, 0x56, 0xb8, 0x56, 0xb3, 0xe5, 0x04, 0x1f, 0xdd, 0x8d, 0xe6, + 0xaf, 0x90, 0x53, 0x48, 0x37, 0xa8, 0xbd, 0x41, 0x6b, 0xc3, 0xa5, 0x88, 0xa9, 0x2d, 0x64, 0xbc, + 0x01, 0xc4, 0xa2, 0xeb, 0x86, 0xaf, 0x93, 0x96, 0x52, 0x2d, 0xcf, 0x5c, 0x5b, 0x92, 0x46, 0x41, + 0xd8, 0x60, 0xad, 0xe2, 0x0d, 0xec, 0x86, 0x4f, 0x34, 0x84, 0x6e, 0xd0, 0xd5, 0x81, 0xf0, 0x75, + 0x3d, 0x67, 0xe0, 0xd2, 0x99, 0x95, 0xcf, 0x08, 0x94, 0xf1, 0x3e, 0xa1, 0xa4, 0x8b, 0x06, 0xb7, + 0x40, 0xba, 0xe7, 0x38, 0xc1, 0x9e, 0x2f, 0xac, 0x8e, 0x48, 0xd6, 0x68, 0x2a, 0xba, 0x02, 0xc7, + 0xfc, 0x81, 0xeb, 0xf6, 0x70, 0x1f, 0xdb, 0x81, 0xd1, 0x63, 0x05, 0x91, 0x3e, 0x2b, 0x9e, 0x2f, + 0x6a, 0x28, 0x9e, 0x45, 0x05, 0xfb, 0xe8, 0x21, 0xd4, 0x33, 0x18, 0x74, 0xd7, 0xe9, 0x59, 0x9d, + 0x83, 0x95, 0x19, 0x3a, 0x80, 0x9e, 0x97, 0x54, 0x93, 0x92, 0xd1, 0xa2, 0xb4, 0xda, 0x8a, 0x9f, + 0x93, 0x83, 0x56, 0x01, 0x5c, 0xcf, 0x7a, 0x6c, 0xf5, 0x70, 0x17, 0x9b, 0x2b, 0x53, 0xb4, 0xe2, + 0xb1, 0x14, 0xf4, 0x3a, 0x59, 0xac, 0x3a, 0x1d, 0xa7, 0xef, 0x72, 0x53, 0x22, 0xf5, 0xa9, 0x18, + 0x0b, 0x2d, 0xcf, 0xd9, 0xb3, 0x7a, 0x58, 0x13, 0xb4, 0xe8, 0x4d, 0x28, 0x1b, 0xae, 0x6b, 0x78, + 0x7d, 0xc7, 0x5b, 0x81, 0xd1, 0x7c, 0x21, 0x31, 0xba, 0x0e, 0x8b, 0x5c, 0x86, 0xee, 0xb2, 0x4c, + 0xb6, 0x0e, 0x4c, 0x93, 0xb1, 0x7f, 0xb7, 0xb0, 0xa2, 0x68, 0x88, 0xe7, 0x73, 0x5e, 0xb2, 0x2a, + 0xa8, 0x7f, 0xad, 0xc0, 0x7c, 0x42, 0x26, 0x7a, 0x1f, 0x66, 0x85, 0x84, 0xe0, 0xc0, 0x15, 0xa6, + 0xe6, 0xa5, 0x21, 0xd5, 0xb8, 0xcc, 0xff, 0xee, 0x1c, 0xb8, 0x98, 0x1a, 0x7c, 0xf1, 0x81, 0x9e, + 0x83, 0x6a, 0xcf, 0xe9, 0x18, 0x3d, 0x6a, 0x19, 0x3d, 0xbc, 0xc7, 0x97, 0xa5, 0xd9, 0x30, 0x51, + 0xc3, 0x7b, 0xea, 0x1d, 0x98, 0x89, 0x09, 0x40, 0x08, 0xe6, 0x34, 0x56, 0xd4, 0x3a, 0xde, 0x33, + 0x06, 0xbd, 0xa0, 0x36, 0x81, 0xe6, 0x00, 0x76, 0xed, 0x0e, 0x71, 0x03, 0x6c, 0x6c, 0xd6, 0x14, + 0x54, 0x85, 0xca, 0x03, 0x21, 0xa2, 0x56, 0x50, 0xbf, 0x5b, 0x84, 0xe3, 0x74, 0x70, 0xb7, 0x1c, + 0x93, 0xcf, 0x36, 0xee, 0x33, 0x3c, 0x07, 0xd5, 0x0e, 0xed, 0x7e, 0xdd, 0x35, 0x3c, 0x6c, 0x07, + 0x7c, 0xe5, 0x9c, 0x65, 0x89, 0x2d, 0x9a, 0x86, 0x34, 0xa8, 0xf9, 0xbc, 0x45, 0x7a, 0x87, 0xcd, + 0x4e, 0x3e, 0x81, 0xa4, 0x56, 0x0f, 0x99, 0xcc, 0xda, 0xbc, 0x9f, 0x9a, 0xdd, 0xd3, 0xfe, 0x81, + 0xdf, 0x09, 0x7a, 0xc2, 0xa2, 0x5e, 0x4e, 0x89, 0x4a, 0x56, 0xf6, 0x72, 0x9b, 0x31, 0x6c, 0xd8, + 0x81, 0x77, 0xa0, 0x09, 0x76, 0xf4, 0x2e, 0x94, 0x9d, 0xc7, 0xd8, 0xdb, 0xc7, 0x06, 0xb3, 0x64, + 0x33, 0xd7, 0x9e, 0x4b, 0x89, 0x5a, 0x13, 0x8b, 0x89, 0x86, 0x7d, 0x67, 0xe0, 0x75, 0xb0, 0xaf, + 0x85, 0x4c, 0xa8, 0x01, 0x15, 0x4f, 0x24, 0x73, 0x4b, 0x37, 0x96, 0x84, 0x88, 0xab, 0x7e, 0x0b, + 0x66, 0xe3, 0x95, 0x43, 0x35, 0x28, 0x3e, 0xc2, 0x07, 0x5c, 0x99, 0xe4, 0x67, 0x64, 0x03, 0x59, + 0x0f, 0xb3, 0x8f, 0x5b, 0x85, 0x1b, 0x8a, 0xea, 0x01, 0x8a, 0x5a, 0xba, 0x89, 0x03, 0xc3, 0x34, + 0x02, 0x03, 0x21, 0x28, 0x51, 0x6f, 0x92, 0x89, 0xa0, 0xbf, 0x89, 0xd4, 0x01, 0x5f, 0x0e, 0x2a, + 0x1a, 0xf9, 0x89, 0x4e, 0x41, 0x25, 0xb4, 0x76, 0xdc, 0xa5, 0x8c, 0x12, 0x88, 0x6b, 0x67, 0x04, + 0x01, 0xee, 0xbb, 0x01, 0x55, 0x4c, 0x55, 0x13, 0x9f, 0xea, 0xaf, 0x4d, 0x42, 0x2d, 0x35, 0x16, + 0x6e, 0x41, 0xb9, 0xcf, 0x8b, 0xe7, 0x76, 0x76, 0x55, 0xf2, 0xef, 0x52, 0x95, 0xd4, 0x42, 0x7a, + 0xe2, 0x3e, 0x91, 0xb1, 0x16, 0x73, 0x80, 0xc3, 0x6f, 0x36, 0xc8, 0xbb, 0xba, 0x69, 0x79, 0xb8, + 0x13, 0x38, 0xde, 0x01, 0xaf, 0xe8, 0x6c, 0xcf, 0xe9, 0xae, 0x8b, 0x34, 0x74, 0x1d, 0xc0, 0xb4, + 0x7d, 0x9d, 0x8e, 0xe1, 0x2e, 0xef, 0x47, 0x69, 0x91, 0x0d, 0xfd, 0x5c, 0xad, 0x62, 0xda, 0x3e, + 0xaf, 0xf2, 0x6d, 0xa8, 0x12, 0xa7, 0x51, 0xef, 0x0b, 0xcf, 0x67, 0x92, 0x8e, 0xa5, 0x65, 0xb9, + 0xde, 0xa1, 0x0b, 0xab, 0xcd, 0xba, 0xd1, 0x87, 0x8f, 0xee, 0xc0, 0x14, 0xf5, 0xdb, 0x84, 0xa7, + 0x75, 0x3e, 0xbb, 0xb9, 0x7c, 0xf4, 0x3d, 0xa0, 0xa4, 0x6c, 0xf0, 0x71, 0x3e, 0xb4, 0x0d, 0x33, + 0x86, 0x6d, 0x3b, 0x81, 0xc1, 0x56, 0x15, 0xe6, 0x77, 0x5d, 0x1a, 0x2a, 0xa6, 0x11, 0xd1, 0x33, + 0x59, 0x71, 0x09, 0xe8, 0x4d, 0x98, 0xa4, 0xcb, 0x0e, 0x5f, 0x27, 0xce, 0x8d, 0x9c, 0x14, 0x1a, + 0xa3, 0x47, 0x6f, 0xc3, 0xf4, 0x13, 0xcb, 0x36, 0x9d, 0x27, 0x3e, 0xb7, 0xa7, 0xd2, 0x10, 0xfe, + 0x0a, 0xcb, 0x4a, 0x31, 0x0b, 0x9e, 0xfa, 0x4d, 0x98, 0x89, 0xb5, 0xef, 0x30, 0xe3, 0xb7, 0xfe, + 0x0e, 0xd4, 0x92, 0x6d, 0x3a, 0xd4, 0xf8, 0x1f, 0xc0, 0xa2, 0x36, 0xb0, 0xa3, 0xaa, 0x89, 0xf8, + 0xec, 0x3a, 0x4c, 0xf1, 0xd1, 0xc0, 0x06, 0xe3, 0xa9, 0x61, 0x6a, 0xd5, 0x38, 0x6d, 0x3c, 0xd4, + 0xda, 0x37, 0x6c, 0xb3, 0x87, 0x3d, 0x5e, 0xa2, 0x08, 0xb5, 0xde, 0x63, 0xa9, 0xea, 0xdb, 0x70, + 0x3c, 0x51, 0x2c, 0x8f, 0xf4, 0x9e, 0x87, 0x39, 0xd7, 0x31, 0x75, 0x9f, 0x25, 0x0b, 0x7f, 0xb5, + 0x42, 0xc6, 0x8e, 0xa0, 0x6d, 0x9a, 0x84, 0xbd, 0x1d, 0x38, 0x6e, 0xba, 0xda, 0xe3, 0xb1, 0xaf, + 0xc0, 0x52, 0x92, 0x9d, 0x15, 0xaf, 0xbe, 0x0b, 0xcb, 0x1a, 0xee, 0x3b, 0x8f, 0xf1, 0x51, 0x45, + 0xd7, 0x61, 0x25, 0x2d, 0x80, 0x0b, 0xff, 0x10, 0x96, 0xa3, 0xd4, 0x76, 0x60, 0x04, 0x03, 0xff, + 0x50, 0xc2, 0x79, 0x18, 0xfc, 0xd0, 0xf1, 0x59, 0x47, 0x96, 0x35, 0xf1, 0xa9, 0x2e, 0xc3, 0x64, + 0xcb, 0x31, 0x9b, 0x2d, 0x34, 0x07, 0x05, 0xcb, 0xe5, 0xcc, 0x05, 0xcb, 0x55, 0x3b, 0xf1, 0x32, + 0xb7, 0x98, 0x67, 0xcb, 0x8a, 0x4e, 0x92, 0xa2, 0x1b, 0x30, 0x67, 0x98, 0xa6, 0x45, 0x06, 0x92, + 0xd1, 0xd3, 0x2d, 0x57, 0x38, 0xe6, 0x0b, 0x89, 0xae, 0x6f, 0xb6, 0xb4, 0x6a, 0x44, 0xd8, 0x74, + 0x7d, 0xf5, 0x2e, 0x54, 0xa2, 0x20, 0xe0, 0xf5, 0x28, 0xa4, 0x2d, 0x8c, 0xf6, 0x17, 0xc3, 0x78, + 0x77, 0x2b, 0xb5, 0x48, 0xf2, 0x6a, 0xbe, 0x0e, 0x10, 0x1a, 0x55, 0xe1, 0x82, 0x1e, 0xcf, 0x14, + 0xa9, 0xc5, 0x08, 0xd5, 0x7f, 0x29, 0xc5, 0x8d, 0x6c, 0xac, 0xc9, 0x66, 0xd8, 0x64, 0x53, 0x32, + 0xba, 0x85, 0x43, 0x1a, 0xdd, 0x57, 0x61, 0xd2, 0x0f, 0x8c, 0x00, 0x73, 0x9f, 0xff, 0x64, 0x36, + 0x23, 0x29, 0x18, 0x6b, 0x8c, 0x12, 0x9d, 0x06, 0xe8, 0x78, 0xd8, 0x08, 0xb0, 0xa9, 0x1b, 0x6c, + 0x55, 0x28, 0x6a, 0x15, 0x9e, 0xd2, 0x08, 0x88, 0x15, 0x11, 0x51, 0x4a, 0xc6, 0x42, 0x98, 0xd3, + 0x8d, 0x51, 0xbc, 0x12, 0x5a, 0xaf, 0xa9, 0x91, 0xd6, 0x8b, 0xb3, 0x72, 0xeb, 0x15, 0x59, 0xe2, + 0xe9, 0x61, 0x96, 0x98, 0x31, 0x8d, 0x63, 0x89, 0xcb, 0xc3, 0x2c, 0x31, 0x17, 0x33, 0xdc, 0x12, + 0x67, 0x18, 0x92, 0x4a, 0x96, 0x21, 0xf9, 0x3c, 0x4d, 0xe7, 0x9f, 0x15, 0x60, 0x25, 0x3d, 0x9f, + 0xb9, 0x1d, 0xbb, 0x0e, 0x53, 0x3e, 0x4d, 0x19, 0x6e, 0x3f, 0x39, 0x17, 0xa7, 0x45, 0x77, 0xa1, + 0x64, 0xd9, 0x7b, 0x0e, 0x9f, 0x78, 0x97, 0x87, 0xf2, 0xf0, 0x92, 0x2e, 0x37, 0xed, 0x3d, 0x87, + 0x69, 0x90, 0xf2, 0xa2, 0x07, 0x70, 0x2c, 0x8c, 0xde, 0x7d, 0x9d, 0x09, 0xc6, 0xc2, 0xcf, 0x93, + 0x46, 0x69, 0xe8, 0x55, 0x71, 0x89, 0x28, 0xe2, 0x6b, 0x73, 0x36, 0xe2, 0xe3, 0x10, 0x72, 0x3f, + 0x30, 0xfa, 0xae, 0x18, 0xb1, 0x61, 0x42, 0xfd, 0x4d, 0xa8, 0x84, 0xc5, 0x1f, 0x4a, 0x77, 0x4d, + 0x58, 0x4c, 0xcc, 0x11, 0x16, 0xac, 0x86, 0x93, 0x4a, 0x19, 0x77, 0x52, 0xa9, 0xbf, 0x50, 0xe2, + 0x13, 0xfd, 0x9e, 0xd5, 0x0b, 0xb0, 0x97, 0x9a, 0xe8, 0x6f, 0x08, 0xb9, 0x6c, 0x96, 0x9f, 0x1d, + 0x22, 0x97, 0xc5, 0x82, 0x7c, 0xc6, 0x7e, 0x00, 0x73, 0x74, 0x88, 0xeb, 0x3e, 0xee, 0x51, 0x5f, + 0x89, 0xeb, 0xf1, 0x4a, 0xb6, 0x00, 0x56, 0x3a, 0x9b, 0x22, 0x6d, 0xce, 0xc1, 0xfa, 0xa6, 0xda, + 0x8b, 0xa7, 0xd5, 0xef, 0x00, 0x4a, 0x13, 0x1d, 0x4a, 0x83, 0x9b, 0xc4, 0x5e, 0xfa, 0x41, 0xe6, + 0xca, 0xbd, 0x47, 0xab, 0x31, 0x7c, 0xe4, 0xb1, 0xaa, 0x6a, 0x9c, 0x56, 0xfd, 0xa7, 0x22, 0x40, + 0x94, 0xf9, 0x05, 0x37, 0x94, 0xb7, 0x42, 0x83, 0xc5, 0x3c, 0x4e, 0x35, 0x5b, 0x64, 0xa6, 0xa9, + 0x6a, 0xca, 0xa6, 0x8a, 0xf9, 0x9e, 0x2f, 0xe5, 0x08, 0x38, 0xb4, 0x91, 0x9a, 0xfe, 0xa2, 0x19, + 0xa9, 0x7b, 0xb0, 0x94, 0x1c, 0x26, 0xdc, 0x42, 0xbd, 0x02, 0x93, 0x56, 0x80, 0xfb, 0x6c, 0xbb, + 0x3a, 0xb1, 0x29, 0x12, 0x23, 0x67, 0x44, 0xea, 0x3b, 0xb0, 0x24, 0xf7, 0xd5, 0xe1, 0x5c, 0x17, + 0xf5, 0x41, 0xd2, 0xf7, 0x89, 0x4c, 0x25, 0x1f, 0x1f, 0x99, 0xdb, 0x4b, 0x49, 0x1e, 0x46, 0xa9, + 0xfe, 0x58, 0x81, 0xe3, 0x89, 0xac, 0x9c, 0x89, 0xff, 0xb5, 0xd4, 0x04, 0x66, 0xb6, 0xf5, 0xfa, + 0x90, 0x52, 0x3e, 0xc3, 0x59, 0xfc, 0x15, 0xa8, 0xcb, 0xdd, 0x23, 0xa9, 0xf6, 0x66, 0x62, 0x2a, + 0x9f, 0x1b, 0x59, 0xe9, 0x70, 0x3e, 0xb7, 0xe0, 0x64, 0xa6, 0xe0, 0xb4, 0xce, 0x8b, 0x63, 0xea, + 0xfc, 0x3f, 0x0b, 0x71, 0x9b, 0xdd, 0x08, 0x02, 0xcf, 0x7a, 0x38, 0x08, 0xf0, 0xb3, 0x75, 0xaa, + 0xd6, 0xc3, 0x99, 0xcd, 0xec, 0xec, 0x2b, 0xd9, 0x9c, 0x51, 0xe9, 0x99, 0x73, 0xbc, 0x2d, 0xcf, + 0xf1, 0x12, 0x15, 0xf5, 0xea, 0x48, 0x51, 0x43, 0x67, 0xfb, 0xe7, 0x39, 0x89, 0xff, 0x56, 0x81, + 0xf9, 0x44, 0xaf, 0xa0, 0x3b, 0x00, 0x46, 0x58, 0x75, 0x3e, 0x3e, 0xce, 0x8e, 0x6a, 0xa2, 0x16, + 0xe3, 0x21, 0x6b, 0x22, 0xf3, 0x17, 0x33, 0xd6, 0xc4, 0x0c, 0x7f, 0x31, 0x74, 0x17, 0x6f, 0x47, + 0xc1, 0x2e, 0xdb, 0x88, 0x55, 0x87, 0x06, 0xbb, 0x8c, 0x57, 0xb0, 0xa8, 0xbf, 0x5e, 0x80, 0xc5, + 0x2c, 0xe9, 0xe8, 0x45, 0x28, 0x76, 0xdc, 0x01, 0x6f, 0x89, 0x74, 0xb6, 0xb5, 0xe6, 0x0e, 0x76, + 0x7d, 0xa3, 0x8b, 0x35, 0x42, 0x80, 0xae, 0xc0, 0x54, 0x1f, 0xf7, 0x1d, 0xef, 0x80, 0xd7, 0x5b, + 0xda, 0x6e, 0xd8, 0xa4, 0x39, 0x8c, 0x9a, 0x93, 0xa1, 0x6b, 0x91, 0x5b, 0xcd, 0xea, 0xbb, 0x22, + 0x45, 0x0f, 0x2c, 0x8b, 0xb1, 0x84, 0xbe, 0xf4, 0x35, 0x98, 0x76, 0x3d, 0xa7, 0x83, 0x7d, 0x9f, + 0xef, 0x86, 0xac, 0x24, 0x0e, 0xdb, 0x48, 0x16, 0xe7, 0xe1, 0x84, 0xe8, 0x16, 0x40, 0xe4, 0x40, + 0xf1, 0x95, 0xa9, 0x9e, 0xeb, 0x6f, 0xf9, 0x5a, 0x8c, 0x5a, 0xfd, 0x51, 0x01, 0x96, 0xb2, 0x35, + 0x87, 0x2e, 0xc5, 0xf5, 0x72, 0x32, 0x43, 0xd5, 0xb2, 0x7a, 0xde, 0x48, 0xa8, 0x67, 0x35, 0x83, + 0x23, 0x4b, 0x4b, 0x37, 0x93, 0x5a, 0x3a, 0x93, 0xc1, 0x98, 0xad, 0xac, 0x9b, 0x49, 0x65, 0x65, + 0xb1, 0x66, 0xeb, 0xac, 0x91, 0xa1, 0xb3, 0x73, 0x59, 0x6d, 0xcc, 0x57, 0xdd, 0x5f, 0x2a, 0x30, + 0x1b, 0xaf, 0x97, 0xec, 0xb2, 0x2a, 0x09, 0x97, 0x15, 0x6d, 0xc1, 0x82, 0xc9, 0x76, 0x6e, 0x75, + 0xcb, 0x0e, 0xb0, 0xb7, 0x67, 0x74, 0x84, 0x57, 0x78, 0x2e, 0x63, 0x5c, 0x34, 0x05, 0x0d, 0xab, + 0x78, 0x8d, 0xf3, 0x86, 0xc9, 0xa4, 0x05, 0xa1, 0x1c, 0x61, 0xb5, 0xc6, 0x10, 0x14, 0x63, 0x52, + 0xff, 0x51, 0x81, 0x63, 0x19, 0x0a, 0x1e, 0xd1, 0x90, 0xdd, 0xfc, 0x86, 0x9c, 0xcf, 0xef, 0xba, + 0x91, 0xed, 0x79, 0x2f, 0xa3, 0x3d, 0xe3, 0xcb, 0x8b, 0x37, 0xeb, 0x97, 0x0a, 0x1c, 0xcf, 0xa4, + 0xca, 0xdc, 0x5e, 0xbd, 0x06, 0x65, 0xef, 0xa9, 0xfe, 0xf0, 0x20, 0xc0, 0x7e, 0xd6, 0xc4, 0xde, + 0x8d, 0x9d, 0xd3, 0x4c, 0x7b, 0x4f, 0xef, 0x12, 0x3a, 0x74, 0x1d, 0x2a, 0xde, 0x53, 0x1d, 0x7b, + 0x9e, 0xe3, 0x09, 0x5b, 0x94, 0xcb, 0x54, 0xf6, 0x9e, 0x6e, 0x50, 0x42, 0x52, 0x52, 0x20, 0x4a, + 0x2a, 0x8d, 0x28, 0x29, 0x88, 0x4a, 0x0a, 0xc2, 0x92, 0x26, 0x47, 0x94, 0x14, 0xf0, 0x92, 0xd4, + 0x3f, 0x28, 0xc0, 0xa9, 0x61, 0xea, 0x7a, 0x66, 0x8a, 0xd8, 0x00, 0xe4, 0x3d, 0xd5, 0x5d, 0xa3, + 0xf3, 0x08, 0x07, 0xbe, 0x6e, 0x7a, 0x8e, 0xeb, 0x62, 0x73, 0x94, 0x46, 0x6a, 0xde, 0xd3, 0x16, + 0xe3, 0x58, 0x67, 0x0c, 0x47, 0xd2, 0xcc, 0x06, 0xa0, 0x20, 0x5d, 0xf4, 0x08, 0x15, 0xd5, 0x82, + 0x44, 0xd1, 0xea, 0xc7, 0x30, 0x1b, 0xb7, 0x10, 0x23, 0xc6, 0xfe, 0x6d, 0xa8, 0x72, 0x0b, 0xa2, + 0x77, 0x9c, 0x81, 0x1d, 0x8c, 0x52, 0xd4, 0x2c, 0xa7, 0x5e, 0x23, 0xc4, 0xea, 0x37, 0xc2, 0xe9, + 0xf6, 0x99, 0x15, 0xf9, 0xff, 0x0a, 0x50, 0x09, 0x4f, 0xe8, 0xc9, 0x4a, 0xcf, 0xce, 0xf1, 0x59, + 0xbf, 0xb3, 0x0f, 0xf4, 0x9e, 0xec, 0xb5, 0x30, 0x3f, 0xf5, 0xc5, 0xcc, 0x33, 0xfe, 0x11, 0x81, + 0xc9, 0x55, 0x58, 0x1c, 0xf8, 0xd8, 0xd3, 0x7d, 0x17, 0x77, 0xac, 0x3d, 0x0b, 0x9b, 0x3a, 0x2b, + 0x0e, 0xd1, 0xe2, 0x10, 0xc9, 0x6b, 0x8b, 0x2c, 0x2a, 0x33, 0x2b, 0x94, 0x39, 0x96, 0x19, 0xca, + 0x7c, 0x5a, 0x57, 0xe6, 0x1a, 0x94, 0xbf, 0x84, 0x0f, 0x58, 0xb0, 0x3f, 0x26, 0x9f, 0xfa, 0x9d, + 0x12, 0x2c, 0xe7, 0x1c, 0x03, 0xd1, 0x48, 0xd1, 0x1d, 0xe8, 0x2e, 0xf6, 0x2c, 0xc7, 0x14, 0xbd, + 0xd6, 0x71, 0x07, 0x2d, 0x9a, 0x80, 0x4e, 0x02, 0xf9, 0xd0, 0xbf, 0x31, 0x70, 0xb8, 0x33, 0x5a, + 0xd4, 0xca, 0x1d, 0x77, 0xf0, 0x65, 0xf2, 0x2d, 0x78, 0xfd, 0x7d, 0xc3, 0xc3, 0xcc, 0x7e, 0x30, + 0xde, 0x36, 0x4d, 0x40, 0xaf, 0xc2, 0x71, 0xb6, 0x36, 0xea, 0x3d, 0xab, 0x6f, 0x11, 0x2b, 0x1b, + 0x9b, 0x1a, 0x45, 0x0d, 0xb1, 0xcc, 0x07, 0x24, 0xaf, 0x69, 0xb3, 0xc9, 0xa0, 0x42, 0xd5, 0x71, + 0xfa, 0xba, 0xdf, 0x71, 0x3c, 0xac, 0x1b, 0xe6, 0xc7, 0x74, 0x1e, 0x14, 0xb5, 0x19, 0xc7, 0xe9, + 0xb7, 0x49, 0x5a, 0xc3, 0xfc, 0x18, 0x9d, 0x81, 0x99, 0x8e, 0x3b, 0xf0, 0x71, 0xa0, 0x93, 0x3f, + 0x74, 0xb3, 0xae, 0xa2, 0x01, 0x4b, 0x5a, 0x73, 0x07, 0x7e, 0x8c, 0xa0, 0x4f, 0xc2, 0xb3, 0xe9, + 0x38, 0xc1, 0x26, 0xee, 0xd3, 0x13, 0xf5, 0xfd, 0x41, 0x17, 0xbb, 0x46, 0x17, 0xb3, 0xaa, 0x89, + 0x1d, 0x37, 0xe9, 0x44, 0xfd, 0x3d, 0x4e, 0x42, 0x2b, 0xa8, 0xcd, 0xed, 0xc7, 0x3f, 0x7d, 0xf4, + 0x3e, 0x4c, 0x0f, 0x6c, 0x3a, 0x00, 0x56, 0x2a, 0x94, 0xf7, 0xea, 0x18, 0x87, 0x6e, 0x97, 0x77, + 0x19, 0x0b, 0x3f, 0x03, 0xe4, 0x02, 0xd0, 0x2d, 0xa8, 0x73, 0x45, 0xf9, 0x4f, 0x0c, 0x37, 0xa9, + 0x2d, 0xa0, 0x2a, 0x58, 0x62, 0x14, 0xed, 0x27, 0x86, 0x1b, 0xd7, 0x58, 0xfd, 0x16, 0xcc, 0xc6, + 0x85, 0x1e, 0x6a, 0x2c, 0xdd, 0x85, 0xaa, 0xd4, 0x48, 0xd2, 0xdb, 0x54, 0x29, 0xbe, 0xf5, 0x4d, + 0x31, 0xb7, 0xca, 0x24, 0xa1, 0x6d, 0x7d, 0x93, 0xe2, 0x20, 0x68, 0xcd, 0xa8, 0x9c, 0x92, 0xc6, + 0x3e, 0x54, 0x03, 0xaa, 0x12, 0xf4, 0x80, 0x98, 0x64, 0x8a, 0x31, 0xe0, 0x26, 0x99, 0xfc, 0x26, + 0x69, 0x9e, 0xd3, 0x13, 0x35, 0xa0, 0xbf, 0x49, 0x1a, 0x3d, 0x80, 0x66, 0xc7, 0x69, 0xf4, 0x37, + 0x2d, 0x02, 0x3f, 0xe6, 0x00, 0xa5, 0x8a, 0xc6, 0x3e, 0xd4, 0xdf, 0x51, 0x00, 0xd6, 0x0c, 0xd7, + 0x78, 0x68, 0xf5, 0xac, 0xe0, 0x00, 0x5d, 0x80, 0x9a, 0x61, 0x9a, 0x7a, 0x47, 0xa4, 0x58, 0x58, + 0x20, 0xc6, 0xe6, 0x0d, 0xd3, 0x5c, 0x8b, 0x25, 0xa3, 0x97, 0x61, 0x81, 0x18, 0x54, 0x99, 0x96, + 0x41, 0xc8, 0x6a, 0x24, 0x43, 0x22, 0xbe, 0x01, 0x2b, 0x44, 0xae, 0xd1, 0x7f, 0x68, 0x61, 0x3b, + 0x90, 0x79, 0x18, 0xb6, 0x6c, 0xc9, 0x30, 0xcd, 0x06, 0xcb, 0x8e, 0x73, 0xaa, 0xbf, 0x3b, 0x0d, + 0xa7, 0xe5, 0x1e, 0x4f, 0xa2, 0x41, 0x6e, 0xc1, 0x6c, 0xa2, 0xbe, 0x29, 0x1c, 0x45, 0xd4, 0x42, + 0x4d, 0xa2, 0x4d, 0x60, 0x11, 0x0a, 0x29, 0x2c, 0x42, 0x26, 0xd2, 0xa4, 0xf8, 0x8c, 0x90, 0x26, + 0xa5, 0x4f, 0x89, 0x34, 0x99, 0x3c, 0x2a, 0xd2, 0x64, 0x76, 0x6c, 0xa4, 0xc9, 0x8b, 0xd4, 0xf4, + 0x8a, 0x12, 0xa9, 0x3b, 0xc0, 0x6c, 0x42, 0x35, 0x94, 0x6e, 0x0b, 0x18, 0x63, 0x02, 0x91, 0x32, + 0x7d, 0x18, 0x44, 0x4a, 0xf9, 0x88, 0x88, 0x94, 0x85, 0x67, 0x82, 0x48, 0x39, 0x0b, 0xb3, 0xb6, + 0xa3, 0xdb, 0xf8, 0x89, 0x4e, 0xba, 0xde, 0xa7, 0x38, 0x97, 0xb2, 0x06, 0xb6, 0xb3, 0x85, 0x9f, + 0xb4, 0x48, 0x0a, 0x3a, 0x07, 0xb3, 0x7d, 0xc3, 0x7f, 0x84, 0x4d, 0x0a, 0x0d, 0xf1, 0x57, 0xaa, + 0x74, 0xcc, 0xce, 0xb0, 0xb4, 0x16, 0x49, 0x42, 0x2f, 0x40, 0xd8, 0x56, 0x4e, 0x34, 0x47, 0x89, + 0xaa, 0x22, 0x95, 0x91, 0xc5, 0xd0, 0x2d, 0xf3, 0x47, 0x44, 0xb7, 0xd4, 0x0e, 0x83, 0x6e, 0xb9, + 0x04, 0x35, 0xf1, 0x5b, 0xc0, 0x5b, 0xd8, 0x69, 0x05, 0x45, 0xb6, 0xcc, 0x8b, 0x3c, 0x01, 0x61, + 0xc9, 0x03, 0xc3, 0xc0, 0x50, 0x30, 0xcc, 0x1f, 0x2a, 0x3c, 0x6e, 0x0e, 0x27, 0x29, 0x3f, 0x85, + 0x97, 0x00, 0x14, 0xca, 0x51, 0x00, 0x14, 0x68, 0x27, 0x17, 0x62, 0x72, 0x21, 0x5f, 0xd2, 0x28, + 0x90, 0x89, 0x6a, 0x01, 0x92, 0x39, 0xe8, 0x44, 0xe1, 0x30, 0x0a, 0xb6, 0x52, 0x53, 0x18, 0x45, + 0x0d, 0x8a, 0x5d, 0x0e, 0xac, 0x28, 0x6a, 0xe4, 0x67, 0xde, 0x08, 0x2e, 0xe6, 0x8d, 0x60, 0x75, + 0x33, 0x8c, 0x9e, 0x9f, 0x05, 0xf2, 0x4f, 0xfd, 0x37, 0x05, 0x4e, 0x73, 0x79, 0x39, 0xf0, 0xb8, + 0x8c, 0x49, 0xab, 0xe4, 0x4c, 0xda, 0x8e, 0x87, 0x4d, 0x6c, 0x07, 0x96, 0xd1, 0xa3, 0xfe, 0x98, + 0x38, 0x10, 0x8f, 0x92, 0xa9, 0x4b, 0x78, 0x0e, 0x66, 0x19, 0x3c, 0x96, 0x07, 0xd2, 0x0c, 0x05, + 0x3b, 0x43, 0x11, 0xb2, 0x3c, 0x56, 0xde, 0xce, 0x32, 0x94, 0xa5, 0xdc, 0x1d, 0x98, 0x91, 0xf6, + 0x52, 0x75, 0x60, 0x39, 0x07, 0x9a, 0x90, 0x39, 0x22, 0x94, 0xf4, 0x88, 0x18, 0xaa, 0xa4, 0xf4, + 0x88, 0xf8, 0x8e, 0x02, 0x67, 0x52, 0x01, 0xfd, 0xe7, 0xaf, 0x59, 0xf5, 0x4f, 0x94, 0x70, 0xfc, + 0x24, 0x67, 0xd7, 0x5a, 0x7a, 0x76, 0xbd, 0x30, 0x6c, 0x7f, 0x22, 0x73, 0x7e, 0x7d, 0x90, 0x3b, + 0xbf, 0x5e, 0x1e, 0xba, 0xd7, 0x31, 0x4a, 0x9f, 0xff, 0xac, 0xc0, 0x89, 0xdc, 0x0a, 0x24, 0xdc, + 0x5b, 0x25, 0xe9, 0xde, 0x72, 0xd7, 0x38, 0x0a, 0x66, 0x98, 0x6b, 0x4c, 0xe3, 0x15, 0xee, 0x83, + 0xea, 0x7d, 0xe3, 0xa9, 0xd5, 0x1f, 0xf4, 0xb9, 0x6f, 0x4c, 0xc4, 0x6d, 0xb2, 0x94, 0xa3, 0x38, + 0xc7, 0x57, 0x60, 0x91, 0xad, 0x5b, 0xd4, 0x3f, 0x8b, 0x38, 0x98, 0x8f, 0xbc, 0xc0, 0xf2, 0x88, + 0xab, 0xc6, 0x19, 0xd4, 0x06, 0x2c, 0x84, 0xcd, 0x1a, 0x0a, 0xcd, 0x8a, 0x41, 0xad, 0x0a, 0x32, + 0xd4, 0xca, 0x86, 0xa9, 0x75, 0xfc, 0xd8, 0xea, 0xe0, 0x67, 0x02, 0x53, 0x3f, 0x0b, 0x33, 0x2e, + 0xf6, 0xfa, 0x96, 0xef, 0x87, 0x4e, 0x4a, 0x45, 0x8b, 0x27, 0xa9, 0x67, 0xa0, 0xb2, 0xb6, 0xde, + 0xe4, 0x45, 0x66, 0x54, 0x55, 0xfd, 0xf7, 0x29, 0x98, 0x4f, 0x8e, 0xb1, 0x9b, 0x29, 0xe8, 0xd7, + 0xe9, 0xcc, 0x6d, 0xc3, 0x8c, 0xfd, 0xf2, 0x10, 0x11, 0x5e, 0x18, 0x8d, 0x08, 0x27, 0x6a, 0xea, + 0x38, 0xfd, 0xbe, 0x61, 0x9b, 0xe2, 0xb2, 0x01, 0xff, 0x24, 0x35, 0x35, 0xbc, 0x2e, 0xdb, 0x29, + 0xaf, 0x68, 0xf4, 0x37, 0x19, 0x02, 0xc4, 0x18, 0x5a, 0x36, 0x05, 0x8f, 0xd1, 0x5e, 0xaa, 0x68, + 0xc0, 0x93, 0xd6, 0x2d, 0x0f, 0x9d, 0x87, 0x12, 0xb6, 0x1f, 0x8b, 0x23, 0x34, 0x69, 0xc7, 0x56, + 0x84, 0x78, 0x1a, 0xa5, 0x40, 0x17, 0x60, 0xaa, 0x4f, 0x86, 0x95, 0x00, 0x18, 0x2c, 0xa4, 0x40, + 0xf9, 0x1a, 0x27, 0x40, 0xaf, 0xc0, 0xb4, 0x49, 0xb5, 0x27, 0x62, 0x1a, 0x24, 0xc1, 0xd0, 0x68, + 0x96, 0x26, 0x48, 0xd0, 0xbb, 0xe1, 0x71, 0x41, 0x25, 0x7d, 0x8e, 0x97, 0x50, 0x73, 0xe6, 0x49, + 0xc1, 0x96, 0x1c, 0x73, 0x43, 0xfa, 0xd0, 0x21, 0x29, 0x65, 0x78, 0xe4, 0x7d, 0x02, 0xca, 0x3d, + 0xa7, 0xcb, 0x46, 0xcf, 0x0c, 0xbb, 0xa9, 0xd2, 0x73, 0xba, 0x74, 0xf0, 0x2c, 0xc2, 0xa4, 0x1f, + 0x98, 0x96, 0x4d, 0x5d, 0xc3, 0xb2, 0xc6, 0x3e, 0xc8, 0x24, 0xa5, 0x3f, 0x74, 0xc7, 0xee, 0xe0, + 0x95, 0x2a, 0xcd, 0xaa, 0xd0, 0x94, 0x6d, 0xbb, 0x43, 0x43, 0xe4, 0x20, 0x38, 0x58, 0x99, 0xa3, + 0xe9, 0xe4, 0x67, 0xb4, 0x6b, 0x3f, 0x9f, 0xb3, 0x6b, 0x9f, 0xa8, 0x70, 0xc6, 0xae, 0x7d, 0x2d, + 0x77, 0xcd, 0x48, 0xf2, 0x0a, 0x16, 0xe2, 0x16, 0xaf, 0xad, 0x37, 0x75, 0xd1, 0x35, 0x0b, 0x69, + 0x18, 0x7e, 0x38, 0xec, 0x35, 0x08, 0x7f, 0x7e, 0xae, 0x87, 0x26, 0x3f, 0x52, 0x60, 0x69, 0x8d, + 0x1e, 0x19, 0xc7, 0x6c, 0xe3, 0x61, 0xd0, 0x56, 0xaf, 0x85, 0x10, 0xb8, 0x0c, 0x1c, 0x53, 0x52, + 0x53, 0x02, 0x01, 0xb7, 0x06, 0x73, 0x42, 0x2c, 0x67, 0x2e, 0x8e, 0x81, 0x9f, 0xab, 0xfa, 0xf1, + 0x4f, 0xf5, 0x36, 0x2c, 0xa7, 0x6a, 0xce, 0x0f, 0xee, 0x92, 0xf7, 0x35, 0x58, 0xc5, 0xe3, 0xf7, + 0x35, 0xd4, 0x5b, 0x70, 0xbc, 0x1d, 0x18, 0x5e, 0x90, 0x6a, 0xf6, 0x18, 0xbc, 0x14, 0x19, 0x27, + 0xf3, 0x72, 0xf0, 0x5a, 0x1b, 0x16, 0xdb, 0x81, 0xe3, 0x1e, 0x41, 0x28, 0xb1, 0x3b, 0xa4, 0xe5, + 0xce, 0x40, 0xac, 0x33, 0xe2, 0x53, 0x5d, 0x66, 0x38, 0xbe, 0x74, 0x69, 0x6f, 0xc1, 0x12, 0x83, + 0xd1, 0x1d, 0xa5, 0x11, 0x27, 0x04, 0x88, 0x2f, 0x2d, 0xf7, 0x3e, 0x1c, 0x93, 0x8e, 0x12, 0x38, + 0xec, 0xe4, 0xaa, 0x0c, 0x3b, 0xc9, 0x3f, 0xb5, 0x09, 0x51, 0x27, 0xbf, 0x59, 0x88, 0xd9, 0xf1, + 0x9c, 0xb3, 0xe7, 0xd7, 0x65, 0xd0, 0xc9, 0x99, 0x7c, 0xa9, 0x12, 0xe6, 0x24, 0x3d, 0x3a, 0x8b, + 0x19, 0xa3, 0x73, 0x37, 0x75, 0xb0, 0x5d, 0x4a, 0x83, 0x86, 0x12, 0x35, 0xfc, 0x4c, 0x8e, 0xb4, + 0x1f, 0x30, 0x60, 0x4a, 0x58, 0x74, 0x78, 0x9a, 0xfd, 0x5a, 0xe2, 0x34, 0xfb, 0xe4, 0x90, 0x9a, + 0x86, 0xe7, 0xd8, 0x3f, 0x28, 0x41, 0x25, 0xcc, 0x4b, 0x69, 0x38, 0xad, 0xaa, 0x42, 0x86, 0xaa, + 0xe2, 0xeb, 0x6b, 0xf1, 0x88, 0xeb, 0x6b, 0x69, 0x8c, 0xf5, 0xf5, 0x24, 0x54, 0xe8, 0x0f, 0x7a, + 0x97, 0x80, 0xad, 0x97, 0x65, 0x9a, 0xa0, 0xe1, 0xbd, 0x68, 0x88, 0x4d, 0x8d, 0x39, 0xc4, 0x12, + 0x20, 0x98, 0xe9, 0x24, 0x08, 0xe6, 0x66, 0xb8, 0xf6, 0x95, 0xd3, 0x87, 0x4e, 0xa1, 0xc4, 0xcc, + 0x55, 0x2f, 0xb1, 0xd3, 0x5c, 0x49, 0xef, 0x34, 0x47, 0xfc, 0x23, 0xd7, 0x3b, 0xd6, 0x64, 0xcb, + 0x64, 0xf1, 0xab, 0x36, 0x4d, 0xbf, 0x9b, 0xe6, 0xe7, 0x69, 0xfa, 0xb7, 0x19, 0xe8, 0x25, 0x3e, + 0x04, 0xb9, 0xf9, 0x7c, 0x5d, 0x3a, 0x6f, 0x54, 0x32, 0x96, 0xb1, 0xd0, 0x64, 0xc4, 0xcf, 0x18, + 0x77, 0x61, 0x29, 0x09, 0x96, 0x3b, 0x94, 0xf9, 0xcb, 0x41, 0xed, 0xfe, 0x2c, 0xee, 0x0c, 0xe6, + 0x40, 0x54, 0x6f, 0xa6, 0xd0, 0x14, 0x63, 0x0f, 0xde, 0xab, 0x32, 0xf0, 0xea, 0xd0, 0x43, 0x2e, + 0x85, 0xbb, 0xa2, 0xce, 0x8a, 0xe1, 0xf1, 0x6c, 0xe6, 0xb7, 0x57, 0x78, 0x4a, 0x83, 0x06, 0x0d, + 0x7b, 0x96, 0x6d, 0xf9, 0xfb, 0x2c, 0x7f, 0x8a, 0x05, 0x0d, 0x22, 0xa9, 0x41, 0xf7, 0x67, 0xf1, + 0x53, 0x2b, 0xd0, 0x3b, 0x8e, 0x89, 0xe9, 0x80, 0x9e, 0xd4, 0xca, 0x24, 0x61, 0xcd, 0x31, 0x71, + 0x34, 0xd5, 0xca, 0x87, 0x9d, 0x6a, 0x95, 0xc4, 0x54, 0x5b, 0x82, 0x29, 0x0f, 0x1b, 0xbe, 0x63, + 0xf3, 0x21, 0xc9, 0xbf, 0x48, 0x47, 0xf4, 0xb1, 0xef, 0x93, 0x32, 0xb8, 0x6f, 0xc6, 0x3f, 0x63, + 0x7e, 0xe4, 0xec, 0x10, 0x3f, 0x72, 0x08, 0x00, 0x36, 0xe1, 0x47, 0x56, 0x87, 0xf8, 0x91, 0x63, + 0xe1, 0x5f, 0x23, 0x8f, 0x79, 0x6e, 0x94, 0xc7, 0x1c, 0x77, 0x39, 0xe7, 0x65, 0x97, 0xf3, 0x76, + 0x3c, 0x78, 0xad, 0xa5, 0xe1, 0x00, 0xc3, 0xa3, 0xd6, 0xf8, 0xdc, 0x5e, 0x90, 0xe6, 0x36, 0xba, + 0xc4, 0x37, 0xc9, 0x51, 0x7a, 0x7b, 0x55, 0xda, 0xed, 0x61, 0xfb, 0xe7, 0x9f, 0xa7, 0x29, 0xf8, + 0x3b, 0x05, 0x96, 0x53, 0x53, 0x97, 0x1b, 0x83, 0xd7, 0x12, 0x18, 0xdd, 0xa1, 0xe0, 0x58, 0x01, + 0xd1, 0x6d, 0x48, 0x10, 0xdd, 0x4b, 0xc3, 0x58, 0x72, 0x10, 0xba, 0x47, 0x47, 0xcd, 0x7e, 0x5b, + 0x01, 0x94, 0x11, 0xe8, 0xdf, 0x14, 0x21, 0xc1, 0x21, 0x76, 0xff, 0x78, 0x54, 0xf0, 0x6e, 0x14, + 0x15, 0x14, 0x0e, 0xb3, 0xb9, 0x11, 0xc2, 0x79, 0x36, 0xa0, 0x2a, 0xef, 0xef, 0x5d, 0x97, 0x2b, + 0xb3, 0x9a, 0x5f, 0x19, 0x3a, 0x40, 0x18, 0xb1, 0xfa, 0xb3, 0x02, 0x9c, 0xd9, 0x75, 0xcd, 0x84, + 0xcb, 0xcb, 0x0b, 0x1b, 0xdf, 0xd4, 0xde, 0x94, 0x21, 0x4d, 0x47, 0xd4, 0x44, 0xf1, 0x28, 0x9a, + 0x40, 0x5f, 0xcf, 0x02, 0x9d, 0xdd, 0x96, 0x8e, 0x87, 0x87, 0x37, 0x70, 0x04, 0xfe, 0xec, 0xd3, + 0xce, 0x04, 0x15, 0xce, 0xe6, 0x57, 0x80, 0xbb, 0xc7, 0xff, 0x1b, 0xe6, 0x37, 0x9e, 0xe2, 0x4e, + 0xfb, 0xc0, 0xee, 0x1c, 0x42, 0xeb, 0x35, 0x28, 0x76, 0xfa, 0x26, 0x3f, 0x98, 0x22, 0x3f, 0xe3, + 0x1e, 0x7f, 0x51, 0xf6, 0xf8, 0x75, 0xa8, 0x45, 0x25, 0xf0, 0x79, 0xb8, 0x44, 0xe6, 0xa1, 0x49, + 0x88, 0x89, 0xf0, 0x59, 0x8d, 0x7f, 0xf1, 0x74, 0xec, 0xb1, 0x4b, 0x44, 0x2c, 0x1d, 0x7b, 0x9e, + 0xbc, 0x8c, 0x14, 0xe5, 0x65, 0x44, 0xfd, 0xae, 0x02, 0x33, 0xa4, 0x84, 0x4f, 0x55, 0x7f, 0x1e, + 0x76, 0x17, 0xa3, 0xb0, 0x3b, 0x8c, 0xde, 0x4b, 0xf1, 0xe8, 0x3d, 0xaa, 0xf9, 0x24, 0x4d, 0x4e, + 0xd7, 0x7c, 0x2a, 0x4c, 0xc7, 0x9e, 0xa7, 0x9e, 0x85, 0x59, 0x56, 0x37, 0xde, 0xf2, 0x1a, 0x14, + 0x07, 0x5e, 0x4f, 0xf4, 0xdf, 0xc0, 0xeb, 0xa9, 0xdf, 0x52, 0xa0, 0xda, 0x08, 0x02, 0xa3, 0xb3, + 0x7f, 0x88, 0x06, 0x84, 0x95, 0x2b, 0xc4, 0x2b, 0x97, 0x6e, 0x44, 0x54, 0xdd, 0x52, 0x4e, 0x75, + 0x27, 0xa5, 0xea, 0xaa, 0x30, 0x27, 0xea, 0x92, 0x5b, 0xe1, 0x2d, 0x40, 0x2d, 0xc7, 0x0b, 0xee, + 0x39, 0xde, 0x13, 0xc3, 0x33, 0x0f, 0x17, 0x61, 0x23, 0x28, 0xf1, 0x77, 0x29, 0x8a, 0xe7, 0x27, + 0x35, 0xfa, 0x5b, 0x7d, 0x09, 0x8e, 0x49, 0xf2, 0x72, 0x0b, 0xbe, 0x05, 0x33, 0xd4, 0x2d, 0xe0, + 0xc1, 0xd7, 0xcb, 0x71, 0x4c, 0xc5, 0xa8, 0xb7, 0x11, 0xd6, 0x61, 0x81, 0x38, 0x88, 0x34, 0x3d, + 0xb4, 0x2f, 0x57, 0x12, 0xf1, 0xc9, 0x72, 0x4a, 0x44, 0x22, 0x36, 0xf9, 0x85, 0x02, 0x93, 0x0c, + 0x3e, 0x91, 0x74, 0xda, 0x4e, 0x92, 0x85, 0xd7, 0x75, 0xf4, 0xc0, 0xe8, 0x86, 0x6f, 0x7e, 0x90, + 0x84, 0x1d, 0xa3, 0x4b, 0x0f, 0xba, 0x68, 0xa6, 0x69, 0x75, 0xb1, 0x1f, 0x88, 0xc3, 0xd9, 0x19, + 0x92, 0xb6, 0xce, 0x92, 0x88, 0x62, 0xe8, 0x19, 0x76, 0x89, 0x1e, 0x55, 0xd3, 0xdf, 0xe8, 0x3c, + 0x3b, 0x38, 0x19, 0x7e, 0x22, 0x49, 0x0f, 0x54, 0xea, 0x50, 0x4e, 0x1c, 0x25, 0x86, 0xdf, 0xe8, + 0x02, 0x94, 0xe8, 0x5e, 0xf9, 0xf4, 0x30, 0x2d, 0x51, 0x12, 0x32, 0x2a, 0x5c, 0xcb, 0xb6, 0xb1, + 0xc9, 0x1f, 0xa4, 0xe0, 0x5f, 0xea, 0xbb, 0x80, 0xe2, 0xca, 0xe3, 0x1d, 0x74, 0x01, 0xa6, 0xa8, + 0x6e, 0x85, 0x57, 0xbd, 0x90, 0x12, 0xad, 0x71, 0x02, 0xf5, 0x6b, 0x80, 0x58, 0x59, 0x92, 0x27, + 0x7d, 0x98, 0x0e, 0x1c, 0xe2, 0x53, 0xff, 0x50, 0x81, 0x63, 0x92, 0x74, 0x5e, 0xbf, 0x97, 0x64, + 0xf1, 0x19, 0xd5, 0xe3, 0xa2, 0xdf, 0x96, 0x16, 0xf8, 0x0b, 0xe9, 0x6a, 0xfc, 0x0f, 0x2d, 0xee, + 0x7f, 0xaf, 0x00, 0x34, 0x06, 0xc1, 0x3e, 0xdf, 0x14, 0x8e, 0x77, 0xa2, 0x92, 0xe8, 0xc4, 0x3a, + 0x94, 0x5d, 0xc3, 0xf7, 0x9f, 0x38, 0x9e, 0x08, 0x78, 0xc3, 0x6f, 0xba, 0x95, 0x3b, 0xe0, 0x6f, + 0x75, 0x54, 0x34, 0xfa, 0x1b, 0xbd, 0x00, 0x73, 0xec, 0x31, 0x1a, 0xdd, 0x30, 0x4d, 0x4f, 0xe0, + 0x34, 0x2b, 0x5a, 0x95, 0xa5, 0x36, 0x58, 0x22, 0x21, 0xb3, 0xe8, 0xc9, 0x49, 0x70, 0xa0, 0x07, + 0xce, 0x23, 0x6c, 0xf3, 0x20, 0xb6, 0x2a, 0x52, 0x77, 0x48, 0x22, 0x3b, 0x85, 0xed, 0x5a, 0x7e, + 0xe0, 0x09, 0x32, 0x71, 0x5e, 0xcd, 0x53, 0x29, 0x99, 0xfa, 0x47, 0x0a, 0xd4, 0x5a, 0x83, 0x5e, + 0x8f, 0x29, 0xf7, 0x28, 0x9d, 0x7c, 0x91, 0x37, 0xa5, 0x90, 0x1e, 0xf2, 0x91, 0xa2, 0x78, 0x13, + 0x9f, 0xc9, 0xbe, 0xdb, 0x55, 0x58, 0x88, 0xd5, 0x98, 0x0f, 0x1c, 0x29, 0xd4, 0x50, 0xe4, 0x50, + 0x43, 0x6d, 0x00, 0x62, 0x5b, 0x4d, 0x47, 0x6e, 0xa5, 0x7a, 0x1c, 0x8e, 0x49, 0x22, 0xf8, 0x52, + 0x7c, 0x11, 0xaa, 0x1c, 0x33, 0xc8, 0x07, 0xc4, 0x09, 0x28, 0x13, 0x93, 0xda, 0xb1, 0x4c, 0x01, + 0x4e, 0x99, 0x76, 0x1d, 0x73, 0xcd, 0x32, 0x3d, 0xf5, 0xcb, 0x50, 0xe5, 0x8f, 0x12, 0x70, 0xda, + 0x3b, 0x30, 0xc7, 0xcf, 0x32, 0x75, 0xe9, 0x16, 0xef, 0x89, 0x0c, 0x60, 0xaa, 0x50, 0x85, 0x1d, + 0xff, 0x54, 0xbf, 0x0e, 0x75, 0xe6, 0x2d, 0x48, 0x82, 0x45, 0x03, 0xef, 0x80, 0xc0, 0x85, 0x0d, + 0x91, 0x2f, 0x73, 0x56, 0xbd, 0xf8, 0xa7, 0x7a, 0x1a, 0x4e, 0x66, 0xca, 0xe7, 0xad, 0x77, 0xa1, + 0x16, 0x65, 0xb0, 0xab, 0xa6, 0x21, 0xe2, 0x46, 0x89, 0x21, 0x6e, 0x96, 0x42, 0x17, 0xbe, 0x20, + 0x56, 0x2e, 0xea, 0xa5, 0x47, 0x21, 0x60, 0x31, 0x2f, 0x04, 0x2c, 0x49, 0x21, 0xa0, 0xba, 0x19, + 0xea, 0x90, 0x07, 0xe2, 0xb7, 0xe9, 0x56, 0x01, 0x2b, 0x5b, 0x18, 0xb5, 0x53, 0xd9, 0xed, 0x63, + 0x44, 0x5a, 0x8c, 0x5e, 0xbd, 0x00, 0x55, 0xd9, 0xbc, 0xc5, 0x2c, 0x96, 0x22, 0x5b, 0xac, 0xff, + 0x03, 0x4b, 0x9a, 0x04, 0xb2, 0xbb, 0x87, 0x8d, 0x60, 0xe0, 0x61, 0x1f, 0xbd, 0x05, 0xf5, 0x8c, + 0xf7, 0x81, 0x74, 0x1e, 0x19, 0x32, 0x31, 0xcb, 0xa9, 0x67, 0x82, 0x36, 0x59, 0x5c, 0xf8, 0x12, + 0xcc, 0x53, 0x10, 0x60, 0xec, 0xf2, 0x2c, 0xd3, 0x11, 0x7d, 0x5e, 0x66, 0x2b, 0xba, 0x29, 0x6b, + 0x86, 0x4f, 0x5a, 0xf0, 0xf2, 0x33, 0xcf, 0xd8, 0xde, 0x81, 0xf2, 0x1e, 0xaf, 0x17, 0x9f, 0x90, + 0x6a, 0x86, 0x32, 0x12, 0x2d, 0xd0, 0x42, 0x1e, 0x75, 0x1b, 0xe6, 0x39, 0x4d, 0xd8, 0xbc, 0xdb, + 0x43, 0x71, 0x27, 0xac, 0x79, 0xb9, 0x88, 0x12, 0xf5, 0x87, 0x05, 0x98, 0x4b, 0xd8, 0xf8, 0x57, + 0x13, 0x01, 0x5d, 0xd6, 0x70, 0x4c, 0x84, 0x73, 0x37, 0x24, 0x6b, 0x2f, 0xa3, 0x5c, 0x86, 0xdf, + 0xb3, 0xdc, 0x80, 0x5a, 0x02, 0x32, 0x29, 0xe0, 0xd2, 0xf5, 0x7c, 0xc5, 0x68, 0xf3, 0x32, 0x9e, + 0xd2, 0x47, 0x6f, 0xc6, 0xf4, 0x5a, 0x4a, 0x87, 0xa1, 0x09, 0x9d, 0x45, 0x0a, 0x3d, 0xfa, 0x42, + 0xb3, 0xc8, 0x97, 0xdf, 0x7b, 0x3e, 0xe1, 0xe7, 0xe3, 0x53, 0x7d, 0x0e, 0x66, 0x76, 0xf3, 0x5e, + 0x0d, 0x2a, 0x09, 0x24, 0xe6, 0x1b, 0xb0, 0x78, 0xcf, 0xea, 0x61, 0xff, 0xc0, 0x0f, 0x70, 0xbf, + 0x49, 0x57, 0x85, 0x3d, 0x0b, 0x7b, 0x68, 0x15, 0x80, 0x0e, 0x4a, 0xd7, 0xb1, 0xc2, 0x57, 0x4c, + 0x62, 0x29, 0xea, 0x4f, 0x15, 0x98, 0x8f, 0x18, 0xc7, 0x81, 0xdb, 0xbe, 0x0e, 0x93, 0x7b, 0xbe, + 0xd8, 0xd0, 0x4d, 0x1c, 0x73, 0x65, 0x55, 0x41, 0x2b, 0xed, 0xf9, 0x4d, 0x13, 0xbd, 0x01, 0x30, + 0xf0, 0xb1, 0xc9, 0x4f, 0x96, 0x47, 0x00, 0xa0, 0x2b, 0x84, 0x94, 0x9d, 0x4d, 0xdf, 0x80, 0x19, + 0xcb, 0x76, 0x4c, 0x4c, 0x51, 0x07, 0xe6, 0x28, 0xf0, 0x33, 0x30, 0xda, 0x5d, 0x1f, 0x9b, 0xea, + 0xef, 0x45, 0xd8, 0x81, 0x2f, 0x72, 0x0b, 0xd5, 0x3f, 0x16, 0x7e, 0x91, 0xe8, 0x76, 0x3e, 0x67, + 0xde, 0x83, 0x05, 0xb6, 0xbc, 0xed, 0x85, 0x65, 0x66, 0xde, 0x0a, 0x4b, 0x34, 0x4e, 0xab, 0x59, + 0xdc, 0x23, 0x16, 0x4c, 0xa8, 0x05, 0xc7, 0xa3, 0x40, 0x25, 0x2e, 0xad, 0x30, 0x5a, 0xda, 0x62, + 0x27, 0xb6, 0xff, 0x2f, 0x18, 0xd5, 0x5b, 0x70, 0x3c, 0x71, 0xf1, 0x63, 0xfc, 0x43, 0xa0, 0xf7, + 0x13, 0x5b, 0xb6, 0x91, 0x95, 0xb8, 0x2a, 0xdf, 0x37, 0x1c, 0x76, 0x45, 0x87, 0x5f, 0x7d, 0xdb, + 0x85, 0x13, 0xd2, 0x7e, 0xb2, 0x54, 0x97, 0x1b, 0x89, 0xb0, 0xe1, 0x6c, 0xbe, 0xbc, 0x44, 0xfc, + 0xf0, 0x1f, 0x0a, 0x2c, 0x66, 0x11, 0x1c, 0xf1, 0x98, 0xe3, 0xa3, 0x9c, 0xbb, 0xca, 0xaf, 0x8d, + 0xaa, 0xd0, 0x67, 0x72, 0x2c, 0xb4, 0xc5, 0x6e, 0x3a, 0x8e, 0xee, 0x93, 0xe2, 0x78, 0x7d, 0xf2, + 0x8b, 0x42, 0xec, 0x28, 0x6f, 0xc8, 0x6d, 0xc4, 0x4f, 0xb1, 0x7f, 0xbe, 0x96, 0xb8, 0x8c, 0xf8, + 0x72, 0x26, 0xe3, 0x88, 0xbb, 0x88, 0x5a, 0xd6, 0xb6, 0xd0, 0xd5, 0x51, 0x92, 0xbe, 0xb0, 0x57, + 0x11, 0x7f, 0xab, 0x00, 0x73, 0x72, 0x87, 0xa0, 0x77, 0x33, 0x6e, 0x22, 0x9e, 0x19, 0xd1, 0x40, + 0xe9, 0x22, 0x22, 0xbf, 0xf9, 0x57, 0x18, 0xff, 0xe6, 0x5f, 0x71, 0xbc, 0x9b, 0x7f, 0x77, 0x61, + 0xee, 0x89, 0x67, 0x05, 0xc6, 0xc3, 0x1e, 0xd6, 0x7b, 0xc6, 0x01, 0xf6, 0xb2, 0x56, 0xd8, 0xa4, + 0x29, 0xaa, 0x0a, 0x96, 0x07, 0x84, 0x83, 0x06, 0xcc, 0x4f, 0x0c, 0x97, 0xc7, 0xdd, 0x92, 0x2b, + 0xdf, 0x7e, 0x62, 0xb8, 0x8c, 0x87, 0x92, 0xa8, 0xdf, 0x2a, 0xc0, 0xf1, 0xcc, 0xfb, 0x6a, 0x9f, + 0x5e, 0x45, 0x97, 0xe2, 0x2a, 0x3a, 0xcc, 0x25, 0xc0, 0xe2, 0xa1, 0x2e, 0x01, 0x36, 0x73, 0x14, + 0x96, 0x85, 0x15, 0x19, 0xae, 0x37, 0xf5, 0xcf, 0x15, 0x28, 0x8b, 0x4a, 0x8d, 0xbc, 0x92, 0xb7, + 0x3c, 0x20, 0x64, 0x3a, 0xbd, 0x36, 0x61, 0x1b, 0xb6, 0xa3, 0xfb, 0x98, 0xf8, 0xd2, 0x23, 0x2f, + 0x40, 0x2d, 0x52, 0xbe, 0x35, 0xc7, 0xc3, 0x5b, 0x86, 0xed, 0xb4, 0x19, 0x13, 0x6a, 0x40, 0x8d, + 0xc9, 0xa3, 0xa2, 0x88, 0xd0, 0x91, 0x0b, 0xe5, 0x1c, 0x65, 0x20, 0x42, 0x88, 0x30, 0x5f, 0xfd, + 0x2b, 0x05, 0xe6, 0x13, 0x9a, 0xfd, 0xd5, 0x6b, 0xc4, 0xf7, 0x8b, 0x30, 0x13, 0xeb, 0xe5, 0x11, + 0x0d, 0x58, 0x83, 0x05, 0x81, 0xf7, 0xf2, 0x71, 0x30, 0xde, 0x05, 0xb4, 0x79, 0xce, 0xd1, 0xc6, + 0x01, 0xf3, 0xa3, 0xee, 0xc0, 0xbc, 0xf1, 0xd8, 0xb0, 0x7a, 0x74, 0x04, 0x8d, 0xe5, 0xa2, 0xcc, + 0x85, 0xf4, 0xa1, 0x27, 0xc6, 0xda, 0x3d, 0xd6, 0x35, 0x34, 0xa0, 0xb4, 0xd1, 0x6d, 0x40, 0xdf, + 0x8f, 0x81, 0x0a, 0x87, 0xde, 0x06, 0xf4, 0xfd, 0xb0, 0x3c, 0x7a, 0x67, 0x84, 0x5e, 0x83, 0xf4, + 0xf9, 0xdb, 0x39, 0xf9, 0xe5, 0x11, 0xda, 0x7b, 0x94, 0x94, 0x28, 0xac, 0x6f, 0x7c, 0xec, 0x78, + 0x7a, 0x9c, 0x7f, 0x7a, 0x84, 0xc2, 0x28, 0x47, 0x2b, 0x14, 0xa2, 0xfe, 0xa9, 0x02, 0x95, 0xd0, + 0x8e, 0x8c, 0xe8, 0xa1, 0x26, 0x2c, 0xd2, 0x0b, 0x36, 0x49, 0x0d, 0x8f, 0xe8, 0x24, 0x44, 0x98, + 0x1a, 0xb2, 0x96, 0x1b, 0x50, 0xa3, 0xa2, 0xe2, 0xaa, 0x1e, 0xd5, 0x51, 0xbe, 0xa8, 0x26, 0x73, + 0x28, 0xff, 0xa2, 0x00, 0x28, 0x6d, 0x4a, 0x7e, 0x65, 0x06, 0x59, 0xbc, 0xd3, 0x4a, 0xe3, 0x77, + 0xfa, 0x7d, 0x38, 0xd6, 0x71, 0xfa, 0x7d, 0x8b, 0x5e, 0xce, 0x72, 0xbc, 0x83, 0xf1, 0x86, 0xdb, + 0x02, 0xe3, 0x61, 0x7a, 0x62, 0xea, 0x7b, 0x07, 0x4e, 0x68, 0xd8, 0x71, 0xb1, 0x1d, 0x9a, 0xfe, + 0x07, 0x4e, 0xf7, 0x10, 0xfe, 0xed, 0x29, 0xa8, 0x67, 0xf1, 0xf3, 0xfd, 0x93, 0x01, 0xd4, 0xd7, + 0xf6, 0x71, 0xe7, 0x11, 0x0d, 0xbf, 0x8e, 0x82, 0xd9, 0xaa, 0x43, 0xb9, 0xe7, 0x74, 0xd8, 0x4b, + 0xca, 0x7c, 0x8b, 0x51, 0x7c, 0x0f, 0x39, 0xdd, 0x39, 0x0d, 0x27, 0x33, 0x8b, 0xe5, 0xb5, 0x42, + 0x50, 0xbb, 0x8f, 0x83, 0x8d, 0xc7, 0xd8, 0x0e, 0xdd, 0x67, 0xf5, 0xc7, 0x85, 0x98, 0xa3, 0x4e, + 0xb3, 0x0e, 0x81, 0x75, 0x43, 0x2d, 0x88, 0x22, 0x07, 0x1d, 0x13, 0x6e, 0xf6, 0x2c, 0x28, 0x7b, + 0xb4, 0x37, 0xfb, 0xb0, 0x9b, 0x16, 0x42, 0x5f, 0x03, 0x8d, 0x1e, 0x3c, 0x0a, 0xd3, 0x12, 0x10, + 0x88, 0x62, 0x12, 0x02, 0xf1, 0x3e, 0xa0, 0xb8, 0x2b, 0xce, 0xb7, 0x1b, 0x4a, 0x63, 0xbc, 0xf1, + 0x54, 0x73, 0x93, 0xaf, 0x91, 0xe5, 0xbc, 0xd4, 0x34, 0x79, 0xa4, 0x97, 0x9a, 0xd4, 0x55, 0x38, + 0x45, 0x1c, 0xec, 0x4d, 0x1c, 0x78, 0x56, 0x67, 0x1d, 0xfb, 0x1d, 0xcf, 0x72, 0x03, 0x27, 0x84, + 0x5f, 0xa9, 0x3a, 0x9c, 0xce, 0xc9, 0xe7, 0xea, 0x7e, 0x07, 0x66, 0xcc, 0x28, 0x39, 0x6b, 0xc7, + 0x2b, 0xc9, 0xab, 0xc5, 0x19, 0xd4, 0x0f, 0xa1, 0x96, 0x24, 0xc8, 0xdc, 0x49, 0x42, 0x50, 0xda, + 0xc7, 0x3d, 0x57, 0xdc, 0xa6, 0x23, 0xbf, 0x89, 0xd6, 0x59, 0xec, 0xf2, 0x08, 0x1f, 0x88, 0x13, + 0x91, 0x0a, 0x4d, 0xf9, 0x12, 0x3e, 0x08, 0xdb, 0x26, 0x3d, 0x1d, 0xe2, 0x59, 0x9d, 0x64, 0xdb, + 0x32, 0xf2, 0xa3, 0xb6, 0x91, 0x6e, 0xeb, 0xb3, 0x64, 0xde, 0xb6, 0xd3, 0xb9, 0xcf, 0x92, 0x50, + 0x5e, 0x70, 0x1d, 0x93, 0xff, 0x56, 0x7f, 0xa0, 0xc0, 0x42, 0x8a, 0x62, 0xcc, 0x53, 0xae, 0x57, + 0x60, 0x5a, 0x94, 0x5b, 0x48, 0x43, 0x9a, 0x99, 0x2c, 0x4d, 0x90, 0xa0, 0x26, 0x2c, 0x44, 0x23, + 0x5a, 0xf0, 0x15, 0xd3, 0x7d, 0x11, 0x0f, 0x5c, 0x68, 0x75, 0x6b, 0x9d, 0x44, 0x8a, 0xda, 0x81, + 0x5a, 0x92, 0x6a, 0x9c, 0x39, 0x75, 0xa8, 0xfa, 0xaa, 0x7f, 0xa3, 0xc0, 0x14, 0x4b, 0xcb, 0xec, + 0x6c, 0x69, 0x39, 0x28, 0x24, 0x97, 0x83, 0x37, 0x61, 0x86, 0xc9, 0xd1, 0xc3, 0xbb, 0x94, 0x73, + 0xf2, 0x46, 0x3f, 0x13, 0x4d, 0x67, 0x2b, 0xf4, 0xc3, 0xdf, 0xa4, 0x19, 0x6c, 0xbc, 0xd0, 0xc8, + 0x44, 0x00, 0xd7, 0x67, 0x68, 0x1a, 0x35, 0xb9, 0xc4, 0x65, 0xe6, 0x31, 0xcc, 0x08, 0xdb, 0xcc, + 0xb7, 0xb6, 0x96, 0xe8, 0x43, 0x98, 0xa9, 0xad, 0x6e, 0x75, 0x87, 0xbe, 0x54, 0x99, 0xde, 0xa2, + 0x46, 0x6f, 0xc9, 0x40, 0x87, 0x17, 0x52, 0x58, 0x03, 0x89, 0x6d, 0xe0, 0xb1, 0x17, 0xe7, 0x39, + 0xde, 0xe1, 0x23, 0x38, 0x91, 0x4b, 0x83, 0xde, 0x0e, 0x9f, 0x05, 0x36, 0x3d, 0xeb, 0x31, 0xdf, + 0x58, 0x98, 0x93, 0x9f, 0x20, 0x59, 0xa3, 0x04, 0xeb, 0x34, 0x5f, 0x3c, 0x18, 0xcc, 0xbe, 0x2e, + 0xbe, 0x08, 0x65, 0xf1, 0xdf, 0x00, 0xd0, 0x34, 0x14, 0x77, 0xd6, 0x5a, 0xb5, 0x09, 0xf2, 0x63, + 0x77, 0xbd, 0x55, 0x53, 0x50, 0x19, 0x4a, 0xed, 0xb5, 0x9d, 0x56, 0xad, 0x70, 0xb1, 0x0f, 0xb5, + 0xe4, 0x83, 0xf8, 0x68, 0x19, 0x8e, 0xb5, 0xb4, 0xed, 0x56, 0xe3, 0x7e, 0x63, 0xa7, 0xb9, 0xbd, + 0xa5, 0xb7, 0xb4, 0xe6, 0x07, 0x8d, 0x9d, 0x8d, 0xda, 0x04, 0x3a, 0x07, 0xa7, 0xe3, 0x19, 0xef, + 0x6d, 0xb7, 0x77, 0xf4, 0x9d, 0x6d, 0x7d, 0x6d, 0x7b, 0x6b, 0xa7, 0xd1, 0xdc, 0xda, 0xd0, 0x6a, + 0x0a, 0x3a, 0x0d, 0x27, 0xe2, 0x24, 0x77, 0x9b, 0xeb, 0x4d, 0x6d, 0x63, 0x8d, 0xfc, 0x6e, 0x3c, + 0xa8, 0x15, 0x2e, 0xbe, 0x0d, 0x55, 0xe9, 0xba, 0x15, 0xa9, 0x52, 0x6b, 0x7b, 0xbd, 0x36, 0x81, + 0xaa, 0x50, 0x89, 0xcb, 0x29, 0x43, 0x69, 0x6b, 0x7b, 0x7d, 0xa3, 0x56, 0x40, 0x00, 0x53, 0x3b, + 0x0d, 0xed, 0xfe, 0xc6, 0x4e, 0xad, 0x78, 0xf1, 0x55, 0x58, 0xc9, 0xbb, 0x76, 0x88, 0x2a, 0x30, + 0xb9, 0x89, 0xbd, 0x2e, 0xae, 0x4d, 0x10, 0x96, 0x36, 0x19, 0x25, 0x41, 0x4d, 0xb9, 0x78, 0x2b, + 0xf9, 0x6a, 0x0e, 0x46, 0x0b, 0x50, 0x6d, 0x37, 0xb6, 0xd6, 0xef, 0x6e, 0x7f, 0x55, 0xd7, 0x36, + 0x1a, 0xeb, 0x1f, 0xd6, 0x26, 0xd0, 0x22, 0xd4, 0x44, 0xd2, 0xd6, 0xf6, 0x0e, 0x4b, 0x55, 0x2e, + 0x3e, 0x4a, 0x84, 0xb9, 0x18, 0x1d, 0x87, 0x85, 0xb0, 0x96, 0xfa, 0x9a, 0xb6, 0xd1, 0xd8, 0xd9, + 0x20, 0x95, 0x97, 0x92, 0xb5, 0xdd, 0xad, 0xad, 0xe6, 0xd6, 0xfd, 0x9a, 0x42, 0xa4, 0x46, 0xc9, + 0x1b, 0x5f, 0x6d, 0x12, 0xe2, 0x82, 0x4c, 0xbc, 0xbb, 0xf5, 0xa5, 0xad, 0xed, 0xaf, 0x6c, 0xd5, + 0x8a, 0x17, 0xff, 0x7f, 0x1c, 0xd7, 0x13, 0x2d, 0x45, 0x27, 0x61, 0x39, 0x55, 0xa2, 0xbe, 0xf1, + 0xc1, 0xc6, 0xd6, 0x4e, 0x6d, 0x42, 0xce, 0x6c, 0xef, 0x34, 0xb4, 0x28, 0x53, 0x49, 0x66, 0x6e, + 0xb7, 0x5a, 0x61, 0x66, 0x41, 0xce, 0x5c, 0xdf, 0x78, 0xb0, 0x11, 0x71, 0x16, 0x2f, 0x3e, 0x0f, + 0x10, 0x4d, 0x39, 0x34, 0x03, 0xd3, 0x6b, 0xdb, 0xbb, 0x5b, 0x3b, 0x1b, 0x5a, 0x6d, 0x82, 0x68, + 0xf9, 0x7e, 0x63, 0xf7, 0xfe, 0x46, 0x4d, 0xb9, 0x78, 0x01, 0x66, 0xe3, 0x03, 0x90, 0xd0, 0xb5, + 0x3f, 0x6c, 0xef, 0x6c, 0x6c, 0x12, 0x8d, 0xcc, 0x42, 0x79, 0xed, 0xbe, 0xb6, 0xbd, 0xdb, 0xba, + 0xd7, 0xae, 0x29, 0xd7, 0xfe, 0x6b, 0x31, 0x3c, 0x5e, 0x68, 0x63, 0x8f, 0xde, 0x8b, 0x59, 0x87, + 0x69, 0xf1, 0x2f, 0x37, 0xa4, 0x8d, 0x1e, 0xf9, 0x5f, 0x84, 0xd4, 0x4f, 0x66, 0xe6, 0x71, 0x57, + 0x62, 0x02, 0x7d, 0x40, 0x0f, 0x6c, 0x62, 0x6f, 0xd6, 0x9d, 0x4d, 0xec, 0x9b, 0xa7, 0x9e, 0xc6, + 0xab, 0x9f, 0x1b, 0x42, 0x11, 0xca, 0xfd, 0x10, 0xe6, 0xe4, 0xc7, 0x61, 0xd1, 0x39, 0xf9, 0x54, + 0x20, 0xe3, 0xdd, 0xd9, 0xba, 0x3a, 0x8c, 0x24, 0x14, 0xad, 0x43, 0x2d, 0xf9, 0x38, 0x2c, 0x92, + 0x30, 0x4a, 0x39, 0x6f, 0xcf, 0xd6, 0x9f, 0x1f, 0x4e, 0x14, 0x2f, 0x20, 0xf5, 0xe6, 0xe9, 0x73, + 0xc3, 0x5f, 0x91, 0xcc, 0x28, 0x20, 0xef, 0xa9, 0x49, 0xa6, 0x1c, 0x79, 0xa1, 0x45, 0x89, 0x67, + 0x46, 0x33, 0x5e, 0x24, 0x94, 0x95, 0x93, 0xfd, 0x1a, 0x9d, 0x3a, 0x81, 0xfe, 0x17, 0xcc, 0x27, + 0x2e, 0x3d, 0x20, 0x89, 0x31, 0xfb, 0x2e, 0x47, 0xfd, 0xb9, 0xa1, 0x34, 0x72, 0xaf, 0xc6, 0x2f, + 0x36, 0x24, 0x7b, 0x35, 0xe3, 0xc2, 0x44, 0xb2, 0x57, 0x33, 0xef, 0x45, 0xd0, 0x81, 0x28, 0x5d, + 0x62, 0x90, 0x07, 0x62, 0xd6, 0xa5, 0x89, 0xfa, 0xb9, 0x21, 0x14, 0x71, 0x85, 0x24, 0xae, 0x31, + 0xc8, 0x0a, 0xc9, 0xbe, 0x20, 0x51, 0x7f, 0x6e, 0x28, 0x4d, 0xb2, 0x27, 0x23, 0x8c, 0x74, 0xba, + 0x27, 0x53, 0x10, 0xfe, 0x74, 0x4f, 0xa6, 0x21, 0xd6, 0xbc, 0x27, 0x13, 0xa8, 0x66, 0x75, 0x28, + 0x4e, 0x32, 0xab, 0x27, 0xb3, 0xb1, 0x94, 0xea, 0x04, 0x7a, 0x02, 0x2b, 0x79, 0x38, 0x36, 0xf4, + 0xf2, 0x21, 0xe0, 0x76, 0xf5, 0x57, 0xc6, 0x23, 0x0e, 0x0b, 0xc6, 0x80, 0xd2, 0x11, 0x17, 0x7a, + 0x41, 0x56, 0x77, 0x4e, 0x44, 0x57, 0x7f, 0x71, 0x14, 0x59, 0x58, 0xcc, 0x7d, 0x28, 0x0b, 0x84, + 0x1c, 0x92, 0x4c, 0x60, 0x02, 0x99, 0x57, 0x3f, 0x95, 0x9d, 0x19, 0x0a, 0x7a, 0x0b, 0x4a, 0x24, + 0x15, 0x2d, 0x27, 0xe9, 0x84, 0x80, 0x95, 0x74, 0x46, 0xc8, 0xdc, 0x80, 0x29, 0x06, 0xfd, 0x42, + 0xd2, 0x21, 0xaa, 0x04, 0x4d, 0xab, 0xd7, 0xb3, 0xb2, 0x42, 0x11, 0x2d, 0xf6, 0x0f, 0x8c, 0x38, + 0x92, 0x0b, 0xad, 0x26, 0x9f, 0x85, 0x97, 0x21, 0x63, 0xf5, 0x33, 0xb9, 0xf9, 0xf1, 0x31, 0x9b, + 0xd8, 0x58, 0x3d, 0x37, 0xe4, 0xa0, 0x20, 0x6b, 0xcc, 0x66, 0x1f, 0x3f, 0xb0, 0xce, 0x4d, 0x1f, + 0x4f, 0xa0, 0x17, 0x72, 0xc7, 0xbb, 0x54, 0xc4, 0x8b, 0xa3, 0xc8, 0xe2, 0x53, 0x23, 0xf9, 0xbe, + 0x9b, 0x3a, 0xec, 0xed, 0xc5, 0xac, 0xa9, 0x91, 0xf3, 0xa6, 0xa3, 0x3a, 0x81, 0xf6, 0xe1, 0x58, + 0xc6, 0xa3, 0x8f, 0xe8, 0xc5, 0x7c, 0xfb, 0x2b, 0x95, 0xf2, 0xd2, 0x48, 0xba, 0x78, 0x49, 0x19, + 0xf0, 0x0d, 0xb9, 0xa4, 0x7c, 0xfc, 0x88, 0x5c, 0xd2, 0x30, 0x1c, 0x08, 0x1d, 0x88, 0xdc, 0x86, + 0x9c, 0xc8, 0x3a, 0x9c, 0xcf, 0x18, 0x88, 0x29, 0x8b, 0xb1, 0x0f, 0xc7, 0x32, 0x76, 0x25, 0xe4, + 0xca, 0xe6, 0xef, 0x96, 0xc8, 0x95, 0x1d, 0xb6, 0xbd, 0x31, 0x81, 0x3e, 0x02, 0x74, 0x1f, 0x07, + 0xb2, 0x2b, 0xe7, 0x23, 0x69, 0xa2, 0x26, 0x37, 0x40, 0x72, 0xc6, 0xa7, 0xb4, 0x13, 0xa2, 0x4e, + 0x5c, 0x55, 0x90, 0xcd, 0xee, 0x55, 0xa5, 0xe2, 0x77, 0x74, 0x3e, 0xd9, 0x6d, 0x79, 0x5b, 0x00, + 0xf5, 0x0b, 0x63, 0x50, 0x86, 0x6d, 0xb1, 0x93, 0x0f, 0x0c, 0x8b, 0x10, 0xf2, 0x7c, 0xfe, 0x30, + 0x91, 0xc3, 0xf2, 0x74, 0x79, 0xb9, 0x01, 0x7a, 0xe8, 0xcf, 0xc5, 0x06, 0xd3, 0xd9, 0x7c, 0x30, + 0x51, 0x8e, 0x3f, 0x97, 0x35, 0x80, 0xae, 0x7d, 0xaf, 0x08, 0xb3, 0x0c, 0x74, 0xc5, 0xdd, 0xcf, + 0x4d, 0x80, 0x08, 0xbf, 0x88, 0x4e, 0x27, 0xeb, 0x28, 0x81, 0x42, 0xeb, 0xab, 0x79, 0xd9, 0x71, + 0x33, 0x17, 0xc3, 0x05, 0xca, 0x66, 0x2e, 0x0d, 0x73, 0x94, 0xcd, 0x5c, 0x06, 0xa0, 0x50, 0x9d, + 0x40, 0xef, 0x43, 0x25, 0x84, 0xa1, 0xc9, 0x83, 0x27, 0x89, 0xa7, 0xab, 0x9f, 0xce, 0xc9, 0x8d, + 0xd7, 0x2e, 0x86, 0x2e, 0x93, 0x6b, 0x97, 0x46, 0xae, 0xc9, 0xb5, 0xcb, 0x82, 0xa5, 0x45, 0xed, + 0x65, 0x38, 0x82, 0x8c, 0xf6, 0x4a, 0xb8, 0x92, 0x8c, 0xf6, 0xca, 0x00, 0x04, 0x75, 0xe2, 0xee, + 0x9d, 0x9f, 0xfc, 0x7c, 0x55, 0xf9, 0xe9, 0xcf, 0x57, 0x27, 0xfe, 0xef, 0x27, 0xab, 0xca, 0x4f, + 0x3e, 0x59, 0x55, 0xfe, 0xe1, 0x93, 0x55, 0xe5, 0x67, 0x9f, 0xac, 0x2a, 0xdf, 0xfe, 0xd7, 0xd5, + 0x89, 0x8f, 0xd4, 0x47, 0x37, 0xfc, 0xcb, 0x96, 0x73, 0xa5, 0xe3, 0x59, 0x97, 0x0c, 0xd7, 0xba, + 0xe2, 0x3e, 0xea, 0x5e, 0x31, 0x5c, 0xcb, 0xbf, 0xc2, 0xe5, 0x5e, 0x79, 0xfc, 0xea, 0xc3, 0x29, + 0xfa, 0x4f, 0xef, 0x5e, 0xfb, 0xef, 0x00, 0x00, 0x00, 0xff, 0xff, 0xbb, 0x2f, 0xd6, 0x6d, 0xae, + 0x70, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -18353,6 +18416,39 @@ func (m *RuntimeHandler) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *RuntimeFeatures) 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 *RuntimeFeatures) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RuntimeFeatures) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.SupplementalGroupsPolicy { + i-- + if m.SupplementalGroupsPolicy { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + func (m *StatusResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -18373,6 +18469,18 @@ func (m *StatusResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.Features != nil { + { + size, err := m.Features.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintApi(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } if len(m.RuntimeHandlers) > 0 { for iNdEx := len(m.RuntimeHandlers) - 1; iNdEx >= 0; iNdEx-- { { @@ -22568,6 +22676,18 @@ func (m *RuntimeHandler) Size() (n int) { return n } +func (m *RuntimeFeatures) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.SupplementalGroupsPolicy { + n += 2 + } + return n +} + func (m *StatusResponse) Size() (n int) { if m == nil { return 0 @@ -22592,6 +22712,10 @@ func (m *StatusResponse) Size() (n int) { n += 1 + l + sovApi(uint64(l)) } } + if m.Features != nil { + l = m.Features.Size() + n += 1 + l + sovApi(uint64(l)) + } return n } @@ -24979,6 +25103,16 @@ func (this *RuntimeHandler) String() string { }, "") return s } +func (this *RuntimeFeatures) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&RuntimeFeatures{`, + `SupplementalGroupsPolicy:` + fmt.Sprintf("%v", this.SupplementalGroupsPolicy) + `,`, + `}`, + }, "") + return s +} func (this *StatusResponse) String() string { if this == nil { return "nil" @@ -25002,6 +25136,7 @@ func (this *StatusResponse) String() string { `Status:` + strings.Replace(this.Status.String(), "RuntimeStatus", "RuntimeStatus", 1) + `,`, `Info:` + mapStringForInfo + `,`, `RuntimeHandlers:` + repeatedStringForRuntimeHandlers + `,`, + `Features:` + strings.Replace(this.Features.String(), "RuntimeFeatures", "RuntimeFeatures", 1) + `,`, `}`, }, "") return s @@ -44105,6 +44240,76 @@ func (m *RuntimeHandler) Unmarshal(dAtA []byte) error { } return nil } +func (m *RuntimeFeatures) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: RuntimeFeatures: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: RuntimeFeatures: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field SupplementalGroupsPolicy", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.SupplementalGroupsPolicy = bool(v != 0) + default: + iNdEx = preIndex + skippy, err := skipApi(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthApi + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *StatusResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -44331,6 +44536,42 @@ func (m *StatusResponse) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Features", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthApi + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthApi + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Features == nil { + m.Features = &RuntimeFeatures{} + } + if err := m.Features.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipApi(dAtA[iNdEx:]) diff --git a/vendor/k8s.io/cri-api/pkg/apis/runtime/v1/api.proto b/vendor/k8s.io/cri-api/pkg/apis/runtime/v1/api.proto index 4ec8965358..838d151fa7 100644 --- a/vendor/k8s.io/cri-api/pkg/apis/runtime/v1/api.proto +++ b/vendor/k8s.io/cri-api/pkg/apis/runtime/v1/api.proto @@ -1600,6 +1600,7 @@ message StatusRequest { bool verbose = 1; } +// RuntimeHandlerFeatures is a set of features implemented by the runtime handler. message RuntimeHandlerFeatures { // recursive_read_only_mounts is set to true if the runtime handler supports // recursive read-only mounts. @@ -1620,6 +1621,14 @@ message RuntimeHandler { RuntimeHandlerFeatures features = 2; } +// RuntimeFeatures describes the set of features implemented by the CRI implementation. +// The features contained in the RuntimeFeatures should depend only on the cri implementation +// independent of runtime handlers. +message RuntimeFeatures { + // supplemental_groups_policy is set to true if the runtime supports SupplementalGroupsPolicy and ContainerUser. + bool supplemental_groups_policy = 1; +} + message StatusResponse { // Status of the Runtime. RuntimeStatus status = 1; @@ -1630,6 +1639,9 @@ message StatusResponse { map info = 2; // Runtime handlers. repeated RuntimeHandler runtime_handlers = 3; + // features describes the set of features implemented by the CRI implementation. + // This field is supposed to propagate to NodeFeatures in Kubernetes API. + RuntimeFeatures features = 4; } message ImageFsInfoRequest {} diff --git a/vendor/modules.txt b/vendor/modules.txt index 70b7db6241..8d42a14d31 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -552,7 +552,7 @@ k8s.io/component-base/metrics/prometheusextension k8s.io/component-base/tracing k8s.io/component-base/tracing/api/v1 k8s.io/component-base/version -# k8s.io/cri-api v0.31.0-beta.0 +# k8s.io/cri-api v0.31.0-beta.0.0.20240716205706-865479a3e1b3 ## explicit; go 1.22.0 k8s.io/cri-api/pkg/apis k8s.io/cri-api/pkg/apis/runtime/v1 From 64a7db2c2232a5480324c2a2c3bec70f2190f68e Mon Sep 17 00:00:00 2001 From: Shingo Omura Date: Thu, 30 May 2024 22:57:03 +0900 Subject: [PATCH 2/5] KEP-3619: Fine-grained SupplementalGroups control (SupplementalGroupsPolicy). --- pkg/validate/security_context_linux.go | 197 +++++++++++---- .../onsi/gomega/gstruct/elements.go | 231 ++++++++++++++++++ .../gomega/gstruct/errors/nested_types.go | 72 ++++++ .../github.com/onsi/gomega/gstruct/fields.go | 165 +++++++++++++ .../github.com/onsi/gomega/gstruct/ignore.go | 39 +++ vendor/github.com/onsi/gomega/gstruct/keys.go | 126 ++++++++++ .../github.com/onsi/gomega/gstruct/pointer.go | 58 +++++ .../github.com/onsi/gomega/gstruct/types.go | 15 ++ vendor/modules.txt | 2 + 9 files changed, 854 insertions(+), 51 deletions(-) create mode 100644 vendor/github.com/onsi/gomega/gstruct/elements.go create mode 100644 vendor/github.com/onsi/gomega/gstruct/errors/nested_types.go create mode 100644 vendor/github.com/onsi/gomega/gstruct/fields.go create mode 100644 vendor/github.com/onsi/gomega/gstruct/ignore.go create mode 100644 vendor/github.com/onsi/gomega/gstruct/keys.go create mode 100644 vendor/github.com/onsi/gomega/gstruct/pointer.go create mode 100644 vendor/github.com/onsi/gomega/gstruct/types.go diff --git a/pkg/validate/security_context_linux.go b/pkg/validate/security_context_linux.go index 085151eae2..d196c6aa6a 100644 --- a/pkg/validate/security_context_linux.go +++ b/pkg/validate/security_context_linux.go @@ -32,6 +32,7 @@ import ( . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" + . "github.com/onsi/gomega/gstruct" "golang.org/x/sys/unix" internalapi "k8s.io/cri-api/pkg/apis" runtimeapi "k8s.io/cri-api/pkg/apis/runtime/v1" @@ -306,57 +307,6 @@ var _ = framework.KubeDescribe("Security Context", func() { Expect(groups).To(ContainElement("5678")) }) - It("if the container's primary UID belongs to some groups in the image, runtime should add SupplementalGroups to them", func() { - By("create pod") - podID, podConfig, podLogDir = createPodSandboxWithLogDirectory(rc) - - By("create container for security context SupplementalGroups") - supplementalGroup := int64(1234) - containerName := "container-with-SupplementalGroups-and-predefined-group-image-test-" + framework.NewUUID() - logPath := containerName + ".log" - containerConfig := &runtimeapi.ContainerConfig{ - Metadata: framework.BuildContainerMetadata(containerName, framework.DefaultAttempt), - Image: &runtimeapi.ImageSpec{Image: testImagePreDefinedGroup}, - Command: []string{"sh", "-c", "id -G; while :; do sleep 1; done"}, - Linux: &runtimeapi.LinuxContainerConfig{ - SecurityContext: &runtimeapi.LinuxContainerSecurityContext{ - RunAsUser: &runtimeapi.Int64Value{Value: imagePredefinedGroupUID}, - SupplementalGroups: []int64{supplementalGroup}, - }, - }, - LogPath: logPath, - } - containerID := framework.CreateContainer(rc, ic, containerConfig, podID, podConfig) - - By("start container") - startContainer(rc, containerID) - Eventually(func(g Gomega) { - g.Expect(getContainerStatus(rc, containerID).State).To(Equal(runtimeapi.ContainerState_CONTAINER_RUNNING)) - g.Expect(parseLogLine(podConfig, logPath)).NotTo(BeEmpty()) - }, time.Minute, time.Second*4).Should(Succeed()) - - // In testImagePreDefinedGroup, - // - its default user is default-user(uid=1000) - // - default-user belongs to group-defined-in-image(gid=50000) - // - // thus, supplementary group of the container processes should be - // - 1000: self - // - 1234: SupplementalGroups - // - 50000: groups define in the container image - // - // $ id -G - // 1000 1234 5678 50000 - expectedOutput := fmt.Sprintf("%d %d %d\n", imagePredefinedGroupUID, supplementalGroup, imagePredefinedGroupGID) - - By("verify groups for the first process of the container") - verifyLogContents(podConfig, logPath, expectedOutput, stdoutType) - - By("verify groups for 'exec'-ed process of container") - command := []string{"id", "-G"} - o := execSyncContainer(rc, containerID, command) - Expect(o).To(BeEquivalentTo(expectedOutput)) - }) - It("runtime should support RunAsUser", func() { By("create pod") podID, podConfig = framework.CreatePodSandboxForContainer(rc) @@ -639,6 +589,151 @@ var _ = framework.KubeDescribe("Security Context", func() { }) }) + Context("SupplementalGroupsPolicy", func() { + BeforeEach(func(ctx context.Context) { + By("skip if the runtime does not support SupplementalGroupsPolicy") + statusResponse, err := rc.Status(ctx, false) + Expect(err).NotTo(HaveOccurred()) + if !(statusResponse.Features != nil && statusResponse.Features.SupplementalGroupsPolicy) { + Skip("The runtime does not support SupplementalGroupsPolicy feature") + } + }) + + When("SupplementalGroupsPolicy=Merge (Default)", func() { + It("if the container's primary UID belongs to some groups in the image, runtime should add SupplementalGroups to them", func() { + By("create pod") + podID, podConfig, podLogDir = createPodSandboxWithLogDirectory(rc) + + By("create container for security context SupplementalGroups") + supplementalGroup := int64(1234) + containerName := "container-with-SupplementalGroupsPolicyMerge-" + framework.NewUUID() + logPath := containerName + ".log" + containerConfig := &runtimeapi.ContainerConfig{ + Metadata: framework.BuildContainerMetadata(containerName, framework.DefaultAttempt), + Image: &runtimeapi.ImageSpec{Image: testImagePreDefinedGroup}, + Command: []string{"sh", "-c", "id -G; while :; do sleep 1; done"}, + Linux: &runtimeapi.LinuxContainerConfig{ + SecurityContext: &runtimeapi.LinuxContainerSecurityContext{ + RunAsUser: &runtimeapi.Int64Value{Value: imagePredefinedGroupUID}, + SupplementalGroups: []int64{supplementalGroup}, + // SupplementalGroupsPolicy_Merge is default(0) + // SupplementalGroupsPolicy: runtimeapi.SupplementalGroupsPolicy_Merge, + }, + }, + LogPath: logPath, + } + containerID := framework.CreateContainer(rc, ic, containerConfig, podID, podConfig) + + By("start container") + startContainer(rc, containerID) + + Eventually(func(g Gomega) { + containerStatus := getContainerStatus(rc, containerID) + g.Expect(containerStatus.State).To(Equal(runtimeapi.ContainerState_CONTAINER_RUNNING)) + // In testImagePreDefinedGroup, + // - its default user is default-user(uid=1000) + // - default-user belongs to group-defined-in-image(gid=50000) in /etc/group + // And, SupplementalGroupsPolicy is Merge(default) + // + // Thus, firstly attached process identity of the first container processes should be + // - uid: 1000 (RunAsUser) + // - gid: 1000 (default group for uid=1000) + // - supplementary groups + // - 1000: self + // - 1234: SupplementalGroups + // - 50000: groups defined in the container image (/etc/group) + g.Expect(containerStatus.User).To(PointTo(MatchFields(IgnoreExtras, Fields{ + "Linux": PointTo(MatchFields(IgnoreExtras, Fields{ + "Uid": Equal(imagePredefinedGroupUID), + "Gid": Equal(imagePredefinedGroupUID), + // we can not assume the order of gids + "SupplementalGroups": And(ContainElements(imagePredefinedGroupUID, supplementalGroup, imagePredefinedGroupGID), HaveLen(3)), + })), + }))) + g.Expect(parseLogLine(podConfig, logPath)).NotTo(BeEmpty()) + }, time.Minute, time.Second*4).Should(Succeed()) + + // $ id -G + // 1000 1234 50000 + expectedOutput := fmt.Sprintf("%d %d %d\n", imagePredefinedGroupUID, supplementalGroup, imagePredefinedGroupGID) + + By("verify groups for the first process of the container") + verifyLogContents(podConfig, logPath, expectedOutput, stdoutType) + + By("verify groups for 'exec'-ed process of container") + command := []string{"id", "-G"} + o := execSyncContainer(rc, containerID, command) + Expect(o).To(BeEquivalentTo(expectedOutput)) + }) + }) + When("SupplementalGroupsPolicy=Strict", func() { + It("even if the container's primary UID belongs to some groups in the image, runtime should not add SupplementalGroups to them", func() { + By("create pod") + podID, podConfig, podLogDir = createPodSandboxWithLogDirectory(rc) + + By("create container for security context SupplementalGroups") + supplementalGroup := int64(1234) + containerName := "container-with-SupplementalGroupsPolicyMerge-" + framework.NewUUID() + logPath := containerName + ".log" + containerConfig := &runtimeapi.ContainerConfig{ + Metadata: framework.BuildContainerMetadata(containerName, framework.DefaultAttempt), + Image: &runtimeapi.ImageSpec{Image: testImagePreDefinedGroup}, + Command: []string{"sh", "-c", "id -G; while :; do sleep 1; done"}, + Linux: &runtimeapi.LinuxContainerConfig{ + SecurityContext: &runtimeapi.LinuxContainerSecurityContext{ + RunAsUser: &runtimeapi.Int64Value{Value: imagePredefinedGroupUID}, + SupplementalGroups: []int64{supplementalGroup}, + SupplementalGroupsPolicy: runtimeapi.SupplementalGroupsPolicy_Strict, + }, + }, + LogPath: logPath, + } + containerID := framework.CreateContainer(rc, ic, containerConfig, podID, podConfig) + + By("start container") + startContainer(rc, containerID) + + Eventually(func(g Gomega) { + containerStatus := getContainerStatus(rc, containerID) + g.Expect(containerStatus.State).To(Equal(runtimeapi.ContainerState_CONTAINER_RUNNING)) + // In testImagePreDefinedGroup, + // - its default user is default-user(uid=1000) + // - default-user belongs to group-defined-in-image(gid=50000) in /etc/group + // And, SupplementalGroupsPolicy is Strict + // + // Thus, firstly attached process identity of the first container processes should be + // (5000(defined in /etc/group) is not appended to supplementary groups) + // - uid: 1000 (RunAsUser) + // - gid: 1000 (default group for uid=1000) + // - supplementary groups + // - 1000: self + // - 1234: SupplementalGroups + g.Expect(containerStatus.User).To(PointTo(MatchFields(IgnoreExtras, Fields{ + "Linux": PointTo(MatchFields(IgnoreExtras, Fields{ + "Uid": Equal(imagePredefinedGroupUID), + "Gid": Equal(imagePredefinedGroupUID), + // we can not assume the order of gids + "SupplementalGroups": And(ContainElements(imagePredefinedGroupUID, supplementalGroup), HaveLen(2)), + })), + }))) + g.Expect(parseLogLine(podConfig, logPath)).NotTo(BeEmpty()) + }, time.Minute, time.Second*4).Should(Succeed()) + + // $ id -G + // 1000 1234 + expectedOutput := fmt.Sprintf("%d %d\n", imagePredefinedGroupUID, supplementalGroup) + + By("verify groups for the first process of the container") + verifyLogContents(podConfig, logPath, expectedOutput, stdoutType) + + By("verify groups for 'exec'-ed process of container") + command := []string{"id", "-G"} + o := execSyncContainer(rc, containerID, command) + Expect(o).To(BeEquivalentTo(expectedOutput)) + }) + }) + }) + // TODO(random-liu): We should set apparmor to unconfined in seccomp test to prevent // them from interfering with each other. Context("SeccompProfilePath", func() { diff --git a/vendor/github.com/onsi/gomega/gstruct/elements.go b/vendor/github.com/onsi/gomega/gstruct/elements.go new file mode 100644 index 0000000000..b5e5ef2e45 --- /dev/null +++ b/vendor/github.com/onsi/gomega/gstruct/elements.go @@ -0,0 +1,231 @@ +// untested sections: 6 + +package gstruct + +import ( + "errors" + "fmt" + "reflect" + "runtime/debug" + "strconv" + + "github.com/onsi/gomega/format" + errorsutil "github.com/onsi/gomega/gstruct/errors" + "github.com/onsi/gomega/types" +) + +//MatchAllElements succeeds if every element of a slice matches the element matcher it maps to +//through the id function, and every element matcher is matched. +// idFn := func(element interface{}) string { +// return fmt.Sprintf("%v", element) +// } +// +// Expect([]string{"a", "b"}).To(MatchAllElements(idFn, Elements{ +// "a": Equal("a"), +// "b": Equal("b"), +// })) +func MatchAllElements(identifier Identifier, elements Elements) types.GomegaMatcher { + return &ElementsMatcher{ + Identifier: identifier, + Elements: elements, + } +} + +//MatchAllElementsWithIndex succeeds if every element of a slice matches the element matcher it maps to +//through the id with index function, and every element matcher is matched. +// idFn := func(index int, element interface{}) string { +// return strconv.Itoa(index) +// } +// +// Expect([]string{"a", "b"}).To(MatchAllElements(idFn, Elements{ +// "0": Equal("a"), +// "1": Equal("b"), +// })) +func MatchAllElementsWithIndex(identifier IdentifierWithIndex, elements Elements) types.GomegaMatcher { + return &ElementsMatcher{ + Identifier: identifier, + Elements: elements, + } +} + +//MatchElements succeeds if each element of a slice matches the element matcher it maps to +//through the id function. It can ignore extra elements and/or missing elements. +// idFn := func(element interface{}) string { +// return fmt.Sprintf("%v", element) +// } +// +// Expect([]string{"a", "b", "c"}).To(MatchElements(idFn, IgnoreExtras, Elements{ +// "a": Equal("a"), +// "b": Equal("b"), +// })) +// Expect([]string{"a", "c"}).To(MatchElements(idFn, IgnoreMissing, Elements{ +// "a": Equal("a"), +// "b": Equal("b"), +// "c": Equal("c"), +// "d": Equal("d"), +// })) +func MatchElements(identifier Identifier, options Options, elements Elements) types.GomegaMatcher { + return &ElementsMatcher{ + Identifier: identifier, + Elements: elements, + IgnoreExtras: options&IgnoreExtras != 0, + IgnoreMissing: options&IgnoreMissing != 0, + AllowDuplicates: options&AllowDuplicates != 0, + } +} + +//MatchElementsWithIndex succeeds if each element of a slice matches the element matcher it maps to +//through the id with index function. It can ignore extra elements and/or missing elements. +// idFn := func(index int, element interface{}) string { +// return strconv.Itoa(index) +// } +// +// Expect([]string{"a", "b", "c"}).To(MatchElements(idFn, IgnoreExtras, Elements{ +// "0": Equal("a"), +// "1": Equal("b"), +// })) +// Expect([]string{"a", "c"}).To(MatchElements(idFn, IgnoreMissing, Elements{ +// "0": Equal("a"), +// "1": Equal("b"), +// "2": Equal("c"), +// "3": Equal("d"), +// })) +func MatchElementsWithIndex(identifier IdentifierWithIndex, options Options, elements Elements) types.GomegaMatcher { + return &ElementsMatcher{ + Identifier: identifier, + Elements: elements, + IgnoreExtras: options&IgnoreExtras != 0, + IgnoreMissing: options&IgnoreMissing != 0, + AllowDuplicates: options&AllowDuplicates != 0, + } +} + +// ElementsMatcher is a NestingMatcher that applies custom matchers to each element of a slice mapped +// by the Identifier function. +// TODO: Extend this to work with arrays & maps (map the key) as well. +type ElementsMatcher struct { + // Matchers for each element. + Elements Elements + // Function mapping an element to the string key identifying its matcher. + Identifier Identify + + // Whether to ignore extra elements or consider it an error. + IgnoreExtras bool + // Whether to ignore missing elements or consider it an error. + IgnoreMissing bool + // Whether to key duplicates when matching IDs. + AllowDuplicates bool + + // State. + failures []error +} + +// Element ID to matcher. +type Elements map[string]types.GomegaMatcher + +// Function for identifying (mapping) elements. +type Identifier func(element interface{}) string + +// Calls the underlying fucntion with the provided params. +// Identifier drops the index. +func (i Identifier) WithIndexAndElement(index int, element interface{}) string { + return i(element) +} + +// Uses the index and element to generate an element name +type IdentifierWithIndex func(index int, element interface{}) string + +// Calls the underlying fucntion with the provided params. +// IdentifierWithIndex uses the index. +func (i IdentifierWithIndex) WithIndexAndElement(index int, element interface{}) string { + return i(index, element) +} + +// Interface for identifing the element +type Identify interface { + WithIndexAndElement(i int, element interface{}) string +} + +// IndexIdentity is a helper function for using an index as +// the key in the element map +func IndexIdentity(index int, _ interface{}) string { + return strconv.Itoa(index) +} + +func (m *ElementsMatcher) Match(actual interface{}) (success bool, err error) { + if reflect.TypeOf(actual).Kind() != reflect.Slice { + return false, fmt.Errorf("%v is type %T, expected slice", actual, actual) + } + + m.failures = m.matchElements(actual) + if len(m.failures) > 0 { + return false, nil + } + return true, nil +} + +func (m *ElementsMatcher) matchElements(actual interface{}) (errs []error) { + // Provide more useful error messages in the case of a panic. + defer func() { + if err := recover(); err != nil { + errs = append(errs, fmt.Errorf("panic checking %+v: %v\n%s", actual, err, debug.Stack())) + } + }() + + val := reflect.ValueOf(actual) + elements := map[string]bool{} + for i := 0; i < val.Len(); i++ { + element := val.Index(i).Interface() + id := m.Identifier.WithIndexAndElement(i, element) + if elements[id] { + if !m.AllowDuplicates { + errs = append(errs, fmt.Errorf("found duplicate element ID %s", id)) + continue + } + } + elements[id] = true + + matcher, expected := m.Elements[id] + if !expected { + if !m.IgnoreExtras { + errs = append(errs, fmt.Errorf("unexpected element %s", id)) + } + continue + } + + match, err := matcher.Match(element) + if match { + continue + } + + if err == nil { + if nesting, ok := matcher.(errorsutil.NestingMatcher); ok { + err = errorsutil.AggregateError(nesting.Failures()) + } else { + err = errors.New(matcher.FailureMessage(element)) + } + } + errs = append(errs, errorsutil.Nest(fmt.Sprintf("[%s]", id), err)) + } + + for id := range m.Elements { + if !elements[id] && !m.IgnoreMissing { + errs = append(errs, fmt.Errorf("missing expected element %s", id)) + } + } + + return errs +} + +func (m *ElementsMatcher) FailureMessage(actual interface{}) (message string) { + failure := errorsutil.AggregateError(m.failures) + return format.Message(actual, fmt.Sprintf("to match elements: %v", failure)) +} + +func (m *ElementsMatcher) NegatedFailureMessage(actual interface{}) (message string) { + return format.Message(actual, "not to match elements") +} + +func (m *ElementsMatcher) Failures() []error { + return m.failures +} diff --git a/vendor/github.com/onsi/gomega/gstruct/errors/nested_types.go b/vendor/github.com/onsi/gomega/gstruct/errors/nested_types.go new file mode 100644 index 0000000000..188492b212 --- /dev/null +++ b/vendor/github.com/onsi/gomega/gstruct/errors/nested_types.go @@ -0,0 +1,72 @@ +package errors + +import ( + "fmt" + "strings" + + "github.com/onsi/gomega/types" +) + +// A stateful matcher that nests other matchers within it and preserves the error types of the +// nested matcher failures. +type NestingMatcher interface { + types.GomegaMatcher + + // Returns the failures of nested matchers. + Failures() []error +} + +// An error type for labeling errors on deeply nested matchers. +type NestedError struct { + Path string + Err error +} + +func (e *NestedError) Error() string { + // Indent Errors. + indented := strings.Replace(e.Err.Error(), "\n", "\n\t", -1) + return fmt.Sprintf("%s:\n\t%v", e.Path, indented) +} + +// Create a NestedError with the given path. +// If err is a NestedError, prepend the path to it. +// If err is an AggregateError, recursively Nest each error. +func Nest(path string, err error) error { + if ag, ok := err.(AggregateError); ok { + var errs AggregateError + for _, e := range ag { + errs = append(errs, Nest(path, e)) + } + return errs + } + if ne, ok := err.(*NestedError); ok { + return &NestedError{ + Path: path + ne.Path, + Err: ne.Err, + } + } + return &NestedError{ + Path: path, + Err: err, + } +} + +// An error type for treating multiple errors as a single error. +type AggregateError []error + +// Error is part of the error interface. +func (err AggregateError) Error() string { + if len(err) == 0 { + // This should never happen, really. + return "" + } + if len(err) == 1 { + return err[0].Error() + } + result := fmt.Sprintf("[%s", err[0].Error()) + for i := 1; i < len(err); i++ { + result += fmt.Sprintf(", %s", err[i].Error()) + } + result += "]" + return result +} diff --git a/vendor/github.com/onsi/gomega/gstruct/fields.go b/vendor/github.com/onsi/gomega/gstruct/fields.go new file mode 100644 index 0000000000..faf07b1a25 --- /dev/null +++ b/vendor/github.com/onsi/gomega/gstruct/fields.go @@ -0,0 +1,165 @@ +// untested sections: 6 + +package gstruct + +import ( + "errors" + "fmt" + "reflect" + "runtime/debug" + "strings" + + "github.com/onsi/gomega/format" + errorsutil "github.com/onsi/gomega/gstruct/errors" + "github.com/onsi/gomega/types" +) + +//MatchAllFields succeeds if every field of a struct matches the field matcher associated with +//it, and every element matcher is matched. +// actual := struct{ +// A int +// B []bool +// C string +// }{ +// A: 5, +// B: []bool{true, false}, +// C: "foo", +// } +// +// Expect(actual).To(MatchAllFields(Fields{ +// "A": Equal(5), +// "B": ConsistOf(true, false), +// "C": Equal("foo"), +// })) +func MatchAllFields(fields Fields) types.GomegaMatcher { + return &FieldsMatcher{ + Fields: fields, + } +} + +//MatchFields succeeds if each element of a struct matches the field matcher associated with +//it. It can ignore extra fields and/or missing fields. +// actual := struct{ +// A int +// B []bool +// C string +// }{ +// A: 5, +// B: []bool{true, false}, +// C: "foo", +// } +// +// Expect(actual).To(MatchFields(IgnoreExtras, Fields{ +// "A": Equal(5), +// "B": ConsistOf(true, false), +// })) +// Expect(actual).To(MatchFields(IgnoreMissing, Fields{ +// "A": Equal(5), +// "B": ConsistOf(true, false), +// "C": Equal("foo"), +// "D": Equal("extra"), +// })) +func MatchFields(options Options, fields Fields) types.GomegaMatcher { + return &FieldsMatcher{ + Fields: fields, + IgnoreExtras: options&IgnoreExtras != 0, + IgnoreMissing: options&IgnoreMissing != 0, + } +} + +type FieldsMatcher struct { + // Matchers for each field. + Fields Fields + + // Whether to ignore extra elements or consider it an error. + IgnoreExtras bool + // Whether to ignore missing elements or consider it an error. + IgnoreMissing bool + + // State. + failures []error +} + +// Field name to matcher. +type Fields map[string]types.GomegaMatcher + +func (m *FieldsMatcher) Match(actual interface{}) (success bool, err error) { + if reflect.TypeOf(actual).Kind() != reflect.Struct { + return false, fmt.Errorf("%v is type %T, expected struct", actual, actual) + } + + m.failures = m.matchFields(actual) + if len(m.failures) > 0 { + return false, nil + } + return true, nil +} + +func (m *FieldsMatcher) matchFields(actual interface{}) (errs []error) { + val := reflect.ValueOf(actual) + typ := val.Type() + fields := map[string]bool{} + for i := 0; i < val.NumField(); i++ { + fieldName := typ.Field(i).Name + fields[fieldName] = true + + err := func() (err error) { + // This test relies heavily on reflect, which tends to panic. + // Recover here to provide more useful error messages in that case. + defer func() { + if r := recover(); r != nil { + err = fmt.Errorf("panic checking %+v: %v\n%s", actual, r, debug.Stack()) + } + }() + + matcher, expected := m.Fields[fieldName] + if !expected { + if !m.IgnoreExtras { + return fmt.Errorf("unexpected field %s: %+v", fieldName, actual) + } + return nil + } + + field := val.Field(i).Interface() + + match, err := matcher.Match(field) + if err != nil { + return err + } else if !match { + if nesting, ok := matcher.(errorsutil.NestingMatcher); ok { + return errorsutil.AggregateError(nesting.Failures()) + } + return errors.New(matcher.FailureMessage(field)) + } + return nil + }() + if err != nil { + errs = append(errs, errorsutil.Nest("."+fieldName, err)) + } + } + + for field := range m.Fields { + if !fields[field] && !m.IgnoreMissing { + errs = append(errs, fmt.Errorf("missing expected field %s", field)) + } + } + + return errs +} + +func (m *FieldsMatcher) FailureMessage(actual interface{}) (message string) { + failures := make([]string, len(m.failures)) + for i := range m.failures { + failures[i] = m.failures[i].Error() + } + return format.Message(reflect.TypeOf(actual).Name(), + fmt.Sprintf("to match fields: {\n%v\n}\n", strings.Join(failures, "\n"))) +} + +func (m *FieldsMatcher) NegatedFailureMessage(actual interface{}) (message string) { + return format.Message(actual, "not to match fields") +} + +func (m *FieldsMatcher) Failures() []error { + return m.failures +} diff --git a/vendor/github.com/onsi/gomega/gstruct/ignore.go b/vendor/github.com/onsi/gomega/gstruct/ignore.go new file mode 100644 index 0000000000..4396573e44 --- /dev/null +++ b/vendor/github.com/onsi/gomega/gstruct/ignore.go @@ -0,0 +1,39 @@ +// untested sections: 2 + +package gstruct + +import ( + "github.com/onsi/gomega/types" +) + +//Ignore ignores the actual value and always succeeds. +// Expect(nil).To(Ignore()) +// Expect(true).To(Ignore()) +func Ignore() types.GomegaMatcher { + return &IgnoreMatcher{true} +} + +//Reject ignores the actual value and always fails. It can be used in conjunction with IgnoreMissing +//to catch problematic elements, or to verify tests are running. +// Expect(nil).NotTo(Reject()) +// Expect(true).NotTo(Reject()) +func Reject() types.GomegaMatcher { + return &IgnoreMatcher{false} +} + +// A matcher that either always succeeds or always fails. +type IgnoreMatcher struct { + Succeed bool +} + +func (m *IgnoreMatcher) Match(actual interface{}) (bool, error) { + return m.Succeed, nil +} + +func (m *IgnoreMatcher) FailureMessage(_ interface{}) (message string) { + return "Unconditional failure" +} + +func (m *IgnoreMatcher) NegatedFailureMessage(_ interface{}) (message string) { + return "Unconditional success" +} diff --git a/vendor/github.com/onsi/gomega/gstruct/keys.go b/vendor/github.com/onsi/gomega/gstruct/keys.go new file mode 100644 index 0000000000..56aed4bab7 --- /dev/null +++ b/vendor/github.com/onsi/gomega/gstruct/keys.go @@ -0,0 +1,126 @@ +// untested sections: 6 + +package gstruct + +import ( + "errors" + "fmt" + "reflect" + "runtime/debug" + "strings" + + "github.com/onsi/gomega/format" + errorsutil "github.com/onsi/gomega/gstruct/errors" + "github.com/onsi/gomega/types" +) + +func MatchAllKeys(keys Keys) types.GomegaMatcher { + return &KeysMatcher{ + Keys: keys, + } +} + +func MatchKeys(options Options, keys Keys) types.GomegaMatcher { + return &KeysMatcher{ + Keys: keys, + IgnoreExtras: options&IgnoreExtras != 0, + IgnoreMissing: options&IgnoreMissing != 0, + } +} + +type KeysMatcher struct { + // Matchers for each key. + Keys Keys + + // Whether to ignore extra keys or consider it an error. + IgnoreExtras bool + // Whether to ignore missing keys or consider it an error. + IgnoreMissing bool + + // State. + failures []error +} + +type Keys map[interface{}]types.GomegaMatcher + +func (m *KeysMatcher) Match(actual interface{}) (success bool, err error) { + if reflect.TypeOf(actual).Kind() != reflect.Map { + return false, fmt.Errorf("%v is type %T, expected map", actual, actual) + } + + m.failures = m.matchKeys(actual) + if len(m.failures) > 0 { + return false, nil + } + return true, nil +} + +func (m *KeysMatcher) matchKeys(actual interface{}) (errs []error) { + actualValue := reflect.ValueOf(actual) + keys := map[interface{}]bool{} + for _, keyValue := range actualValue.MapKeys() { + key := keyValue.Interface() + keys[key] = true + + err := func() (err error) { + // This test relies heavily on reflect, which tends to panic. + // Recover here to provide more useful error messages in that case. + defer func() { + if r := recover(); r != nil { + err = fmt.Errorf("panic checking %+v: %v\n%s", actual, r, debug.Stack()) + } + }() + + matcher, ok := m.Keys[key] + if !ok { + if !m.IgnoreExtras { + return fmt.Errorf("unexpected key %s: %+v", key, actual) + } + return nil + } + + valInterface := actualValue.MapIndex(keyValue).Interface() + + match, err := matcher.Match(valInterface) + if err != nil { + return err + } + + if !match { + if nesting, ok := matcher.(errorsutil.NestingMatcher); ok { + return errorsutil.AggregateError(nesting.Failures()) + } + return errors.New(matcher.FailureMessage(valInterface)) + } + return nil + }() + if err != nil { + errs = append(errs, errorsutil.Nest(fmt.Sprintf(".%#v", key), err)) + } + } + + for key := range m.Keys { + if !keys[key] && !m.IgnoreMissing { + errs = append(errs, fmt.Errorf("missing expected key %s", key)) + } + } + + return errs +} + +func (m *KeysMatcher) FailureMessage(actual interface{}) (message string) { + failures := make([]string, len(m.failures)) + for i := range m.failures { + failures[i] = m.failures[i].Error() + } + return format.Message(reflect.TypeOf(actual).Name(), + fmt.Sprintf("to match keys: {\n%v\n}\n", strings.Join(failures, "\n"))) +} + +func (m *KeysMatcher) NegatedFailureMessage(actual interface{}) (message string) { + return format.Message(actual, "not to match keys") +} + +func (m *KeysMatcher) Failures() []error { + return m.failures +} diff --git a/vendor/github.com/onsi/gomega/gstruct/pointer.go b/vendor/github.com/onsi/gomega/gstruct/pointer.go new file mode 100644 index 0000000000..cc828a3251 --- /dev/null +++ b/vendor/github.com/onsi/gomega/gstruct/pointer.go @@ -0,0 +1,58 @@ +// untested sections: 3 + +package gstruct + +import ( + "fmt" + "reflect" + + "github.com/onsi/gomega/format" + "github.com/onsi/gomega/types" +) + +//PointTo applies the given matcher to the value pointed to by actual. It fails if the pointer is +//nil. +// actual := 5 +// Expect(&actual).To(PointTo(Equal(5))) +func PointTo(matcher types.GomegaMatcher) types.GomegaMatcher { + return &PointerMatcher{ + Matcher: matcher, + } +} + +type PointerMatcher struct { + Matcher types.GomegaMatcher + + // Failure message. + failure string +} + +func (m *PointerMatcher) Match(actual interface{}) (bool, error) { + val := reflect.ValueOf(actual) + + // return error if actual type is not a pointer + if val.Kind() != reflect.Ptr { + return false, fmt.Errorf("PointerMatcher expects a pointer but we have '%s'", val.Kind()) + } + + if !val.IsValid() || val.IsNil() { + m.failure = format.Message(actual, "not to be ") + return false, nil + } + + // Forward the value. + elem := val.Elem().Interface() + match, err := m.Matcher.Match(elem) + if !match { + m.failure = m.Matcher.FailureMessage(elem) + } + return match, err +} + +func (m *PointerMatcher) FailureMessage(_ interface{}) (message string) { + return m.failure +} + +func (m *PointerMatcher) NegatedFailureMessage(actual interface{}) (message string) { + return m.Matcher.NegatedFailureMessage(actual) +} diff --git a/vendor/github.com/onsi/gomega/gstruct/types.go b/vendor/github.com/onsi/gomega/gstruct/types.go new file mode 100644 index 0000000000..48cbbe8f66 --- /dev/null +++ b/vendor/github.com/onsi/gomega/gstruct/types.go @@ -0,0 +1,15 @@ +package gstruct + +//Options is the type for options passed to some matchers. +type Options int + +const ( + //IgnoreExtras tells the matcher to ignore extra elements or fields, rather than triggering a failure. + IgnoreExtras Options = 1 << iota + //IgnoreMissing tells the matcher to ignore missing elements or fields, rather than triggering a failure. + IgnoreMissing + //AllowDuplicates tells the matcher to permit multiple members of the slice to produce the same ID when + //considered by the indentifier function. All members that map to a given key must still match successfully + //with the matcher that is provided for that key. + AllowDuplicates +) diff --git a/vendor/modules.txt b/vendor/modules.txt index 8d42a14d31..cf2fa39e76 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -156,6 +156,8 @@ github.com/onsi/gomega/gbytes github.com/onsi/gomega/gexec github.com/onsi/gomega/gmeasure github.com/onsi/gomega/gmeasure/table +github.com/onsi/gomega/gstruct +github.com/onsi/gomega/gstruct/errors github.com/onsi/gomega/internal github.com/onsi/gomega/internal/gutil github.com/onsi/gomega/matchers From c45cf828ce27fc728c7e3342d87cd716d295be04 Mon Sep 17 00:00:00 2001 From: Shingo Omura Date: Tue, 23 Jul 2024 21:55:00 +0900 Subject: [PATCH 3/5] KEP-3619: delete comments --- pkg/validate/security_context_linux.go | 2 -- 1 file changed, 2 deletions(-) diff --git a/pkg/validate/security_context_linux.go b/pkg/validate/security_context_linux.go index d196c6aa6a..bd007c57e7 100644 --- a/pkg/validate/security_context_linux.go +++ b/pkg/validate/security_context_linux.go @@ -616,8 +616,6 @@ var _ = framework.KubeDescribe("Security Context", func() { SecurityContext: &runtimeapi.LinuxContainerSecurityContext{ RunAsUser: &runtimeapi.Int64Value{Value: imagePredefinedGroupUID}, SupplementalGroups: []int64{supplementalGroup}, - // SupplementalGroupsPolicy_Merge is default(0) - // SupplementalGroupsPolicy: runtimeapi.SupplementalGroupsPolicy_Merge, }, }, LogPath: logPath, From 695b675120e20045dba36f1721ca7d8de140b21b Mon Sep 17 00:00:00 2001 From: Shingo Omura Date: Tue, 23 Jul 2024 21:55:50 +0900 Subject: [PATCH 4/5] KEP-3619: sort SupplementalGroups field to make the assertion stable --- pkg/validate/security_context_linux.go | 37 +-- .../onsi/gomega/gstruct/elements.go | 231 ------------------ .../gomega/gstruct/errors/nested_types.go | 72 ------ .../github.com/onsi/gomega/gstruct/fields.go | 165 ------------- .../github.com/onsi/gomega/gstruct/ignore.go | 39 --- vendor/github.com/onsi/gomega/gstruct/keys.go | 126 ---------- .../github.com/onsi/gomega/gstruct/pointer.go | 58 ----- .../github.com/onsi/gomega/gstruct/types.go | 15 -- vendor/modules.txt | 2 - 9 files changed, 20 insertions(+), 725 deletions(-) delete mode 100644 vendor/github.com/onsi/gomega/gstruct/elements.go delete mode 100644 vendor/github.com/onsi/gomega/gstruct/errors/nested_types.go delete mode 100644 vendor/github.com/onsi/gomega/gstruct/fields.go delete mode 100644 vendor/github.com/onsi/gomega/gstruct/ignore.go delete mode 100644 vendor/github.com/onsi/gomega/gstruct/keys.go delete mode 100644 vendor/github.com/onsi/gomega/gstruct/pointer.go delete mode 100644 vendor/github.com/onsi/gomega/gstruct/types.go diff --git a/pkg/validate/security_context_linux.go b/pkg/validate/security_context_linux.go index bd007c57e7..f6bff925bc 100644 --- a/pkg/validate/security_context_linux.go +++ b/pkg/validate/security_context_linux.go @@ -32,7 +32,6 @@ import ( . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" - . "github.com/onsi/gomega/gstruct" "golang.org/x/sys/unix" internalapi "k8s.io/cri-api/pkg/apis" runtimeapi "k8s.io/cri-api/pkg/apis/runtime/v1" @@ -640,14 +639,16 @@ var _ = framework.KubeDescribe("Security Context", func() { // - 1000: self // - 1234: SupplementalGroups // - 50000: groups defined in the container image (/etc/group) - g.Expect(containerStatus.User).To(PointTo(MatchFields(IgnoreExtras, Fields{ - "Linux": PointTo(MatchFields(IgnoreExtras, Fields{ - "Uid": Equal(imagePredefinedGroupUID), - "Gid": Equal(imagePredefinedGroupUID), - // we can not assume the order of gids - "SupplementalGroups": And(ContainElements(imagePredefinedGroupUID, supplementalGroup, imagePredefinedGroupGID), HaveLen(3)), - })), - }))) + if containerStatus.User != nil && containerStatus.User.Linux != nil { + slices.Sort(containerStatus.User.Linux.SupplementalGroups) + } + g.Expect(containerStatus.User).To(BeEquivalentTo(&runtimeapi.ContainerUser{ + Linux: &runtimeapi.LinuxContainerUser{ + Uid: imagePredefinedGroupUID, + Gid: imagePredefinedGroupUID, + SupplementalGroups: []int64{imagePredefinedGroupUID, supplementalGroup, imagePredefinedGroupGID}, + }, + })) g.Expect(parseLogLine(podConfig, logPath)).NotTo(BeEmpty()) }, time.Minute, time.Second*4).Should(Succeed()) @@ -706,14 +707,16 @@ var _ = framework.KubeDescribe("Security Context", func() { // - supplementary groups // - 1000: self // - 1234: SupplementalGroups - g.Expect(containerStatus.User).To(PointTo(MatchFields(IgnoreExtras, Fields{ - "Linux": PointTo(MatchFields(IgnoreExtras, Fields{ - "Uid": Equal(imagePredefinedGroupUID), - "Gid": Equal(imagePredefinedGroupUID), - // we can not assume the order of gids - "SupplementalGroups": And(ContainElements(imagePredefinedGroupUID, supplementalGroup), HaveLen(2)), - })), - }))) + if containerStatus.User != nil && containerStatus.User.Linux != nil { + slices.Sort(containerStatus.User.Linux.SupplementalGroups) + } + g.Expect(containerStatus.User).To(BeEquivalentTo(&runtimeapi.ContainerUser{ + Linux: &runtimeapi.LinuxContainerUser{ + Uid: imagePredefinedGroupUID, + Gid: imagePredefinedGroupUID, + SupplementalGroups: []int64{imagePredefinedGroupUID, supplementalGroup}, + }, + })) g.Expect(parseLogLine(podConfig, logPath)).NotTo(BeEmpty()) }, time.Minute, time.Second*4).Should(Succeed()) diff --git a/vendor/github.com/onsi/gomega/gstruct/elements.go b/vendor/github.com/onsi/gomega/gstruct/elements.go deleted file mode 100644 index b5e5ef2e45..0000000000 --- a/vendor/github.com/onsi/gomega/gstruct/elements.go +++ /dev/null @@ -1,231 +0,0 @@ -// untested sections: 6 - -package gstruct - -import ( - "errors" - "fmt" - "reflect" - "runtime/debug" - "strconv" - - "github.com/onsi/gomega/format" - errorsutil "github.com/onsi/gomega/gstruct/errors" - "github.com/onsi/gomega/types" -) - -//MatchAllElements succeeds if every element of a slice matches the element matcher it maps to -//through the id function, and every element matcher is matched. -// idFn := func(element interface{}) string { -// return fmt.Sprintf("%v", element) -// } -// -// Expect([]string{"a", "b"}).To(MatchAllElements(idFn, Elements{ -// "a": Equal("a"), -// "b": Equal("b"), -// })) -func MatchAllElements(identifier Identifier, elements Elements) types.GomegaMatcher { - return &ElementsMatcher{ - Identifier: identifier, - Elements: elements, - } -} - -//MatchAllElementsWithIndex succeeds if every element of a slice matches the element matcher it maps to -//through the id with index function, and every element matcher is matched. -// idFn := func(index int, element interface{}) string { -// return strconv.Itoa(index) -// } -// -// Expect([]string{"a", "b"}).To(MatchAllElements(idFn, Elements{ -// "0": Equal("a"), -// "1": Equal("b"), -// })) -func MatchAllElementsWithIndex(identifier IdentifierWithIndex, elements Elements) types.GomegaMatcher { - return &ElementsMatcher{ - Identifier: identifier, - Elements: elements, - } -} - -//MatchElements succeeds if each element of a slice matches the element matcher it maps to -//through the id function. It can ignore extra elements and/or missing elements. -// idFn := func(element interface{}) string { -// return fmt.Sprintf("%v", element) -// } -// -// Expect([]string{"a", "b", "c"}).To(MatchElements(idFn, IgnoreExtras, Elements{ -// "a": Equal("a"), -// "b": Equal("b"), -// })) -// Expect([]string{"a", "c"}).To(MatchElements(idFn, IgnoreMissing, Elements{ -// "a": Equal("a"), -// "b": Equal("b"), -// "c": Equal("c"), -// "d": Equal("d"), -// })) -func MatchElements(identifier Identifier, options Options, elements Elements) types.GomegaMatcher { - return &ElementsMatcher{ - Identifier: identifier, - Elements: elements, - IgnoreExtras: options&IgnoreExtras != 0, - IgnoreMissing: options&IgnoreMissing != 0, - AllowDuplicates: options&AllowDuplicates != 0, - } -} - -//MatchElementsWithIndex succeeds if each element of a slice matches the element matcher it maps to -//through the id with index function. It can ignore extra elements and/or missing elements. -// idFn := func(index int, element interface{}) string { -// return strconv.Itoa(index) -// } -// -// Expect([]string{"a", "b", "c"}).To(MatchElements(idFn, IgnoreExtras, Elements{ -// "0": Equal("a"), -// "1": Equal("b"), -// })) -// Expect([]string{"a", "c"}).To(MatchElements(idFn, IgnoreMissing, Elements{ -// "0": Equal("a"), -// "1": Equal("b"), -// "2": Equal("c"), -// "3": Equal("d"), -// })) -func MatchElementsWithIndex(identifier IdentifierWithIndex, options Options, elements Elements) types.GomegaMatcher { - return &ElementsMatcher{ - Identifier: identifier, - Elements: elements, - IgnoreExtras: options&IgnoreExtras != 0, - IgnoreMissing: options&IgnoreMissing != 0, - AllowDuplicates: options&AllowDuplicates != 0, - } -} - -// ElementsMatcher is a NestingMatcher that applies custom matchers to each element of a slice mapped -// by the Identifier function. -// TODO: Extend this to work with arrays & maps (map the key) as well. -type ElementsMatcher struct { - // Matchers for each element. - Elements Elements - // Function mapping an element to the string key identifying its matcher. - Identifier Identify - - // Whether to ignore extra elements or consider it an error. - IgnoreExtras bool - // Whether to ignore missing elements or consider it an error. - IgnoreMissing bool - // Whether to key duplicates when matching IDs. - AllowDuplicates bool - - // State. - failures []error -} - -// Element ID to matcher. -type Elements map[string]types.GomegaMatcher - -// Function for identifying (mapping) elements. -type Identifier func(element interface{}) string - -// Calls the underlying fucntion with the provided params. -// Identifier drops the index. -func (i Identifier) WithIndexAndElement(index int, element interface{}) string { - return i(element) -} - -// Uses the index and element to generate an element name -type IdentifierWithIndex func(index int, element interface{}) string - -// Calls the underlying fucntion with the provided params. -// IdentifierWithIndex uses the index. -func (i IdentifierWithIndex) WithIndexAndElement(index int, element interface{}) string { - return i(index, element) -} - -// Interface for identifing the element -type Identify interface { - WithIndexAndElement(i int, element interface{}) string -} - -// IndexIdentity is a helper function for using an index as -// the key in the element map -func IndexIdentity(index int, _ interface{}) string { - return strconv.Itoa(index) -} - -func (m *ElementsMatcher) Match(actual interface{}) (success bool, err error) { - if reflect.TypeOf(actual).Kind() != reflect.Slice { - return false, fmt.Errorf("%v is type %T, expected slice", actual, actual) - } - - m.failures = m.matchElements(actual) - if len(m.failures) > 0 { - return false, nil - } - return true, nil -} - -func (m *ElementsMatcher) matchElements(actual interface{}) (errs []error) { - // Provide more useful error messages in the case of a panic. - defer func() { - if err := recover(); err != nil { - errs = append(errs, fmt.Errorf("panic checking %+v: %v\n%s", actual, err, debug.Stack())) - } - }() - - val := reflect.ValueOf(actual) - elements := map[string]bool{} - for i := 0; i < val.Len(); i++ { - element := val.Index(i).Interface() - id := m.Identifier.WithIndexAndElement(i, element) - if elements[id] { - if !m.AllowDuplicates { - errs = append(errs, fmt.Errorf("found duplicate element ID %s", id)) - continue - } - } - elements[id] = true - - matcher, expected := m.Elements[id] - if !expected { - if !m.IgnoreExtras { - errs = append(errs, fmt.Errorf("unexpected element %s", id)) - } - continue - } - - match, err := matcher.Match(element) - if match { - continue - } - - if err == nil { - if nesting, ok := matcher.(errorsutil.NestingMatcher); ok { - err = errorsutil.AggregateError(nesting.Failures()) - } else { - err = errors.New(matcher.FailureMessage(element)) - } - } - errs = append(errs, errorsutil.Nest(fmt.Sprintf("[%s]", id), err)) - } - - for id := range m.Elements { - if !elements[id] && !m.IgnoreMissing { - errs = append(errs, fmt.Errorf("missing expected element %s", id)) - } - } - - return errs -} - -func (m *ElementsMatcher) FailureMessage(actual interface{}) (message string) { - failure := errorsutil.AggregateError(m.failures) - return format.Message(actual, fmt.Sprintf("to match elements: %v", failure)) -} - -func (m *ElementsMatcher) NegatedFailureMessage(actual interface{}) (message string) { - return format.Message(actual, "not to match elements") -} - -func (m *ElementsMatcher) Failures() []error { - return m.failures -} diff --git a/vendor/github.com/onsi/gomega/gstruct/errors/nested_types.go b/vendor/github.com/onsi/gomega/gstruct/errors/nested_types.go deleted file mode 100644 index 188492b212..0000000000 --- a/vendor/github.com/onsi/gomega/gstruct/errors/nested_types.go +++ /dev/null @@ -1,72 +0,0 @@ -package errors - -import ( - "fmt" - "strings" - - "github.com/onsi/gomega/types" -) - -// A stateful matcher that nests other matchers within it and preserves the error types of the -// nested matcher failures. -type NestingMatcher interface { - types.GomegaMatcher - - // Returns the failures of nested matchers. - Failures() []error -} - -// An error type for labeling errors on deeply nested matchers. -type NestedError struct { - Path string - Err error -} - -func (e *NestedError) Error() string { - // Indent Errors. - indented := strings.Replace(e.Err.Error(), "\n", "\n\t", -1) - return fmt.Sprintf("%s:\n\t%v", e.Path, indented) -} - -// Create a NestedError with the given path. -// If err is a NestedError, prepend the path to it. -// If err is an AggregateError, recursively Nest each error. -func Nest(path string, err error) error { - if ag, ok := err.(AggregateError); ok { - var errs AggregateError - for _, e := range ag { - errs = append(errs, Nest(path, e)) - } - return errs - } - if ne, ok := err.(*NestedError); ok { - return &NestedError{ - Path: path + ne.Path, - Err: ne.Err, - } - } - return &NestedError{ - Path: path, - Err: err, - } -} - -// An error type for treating multiple errors as a single error. -type AggregateError []error - -// Error is part of the error interface. -func (err AggregateError) Error() string { - if len(err) == 0 { - // This should never happen, really. - return "" - } - if len(err) == 1 { - return err[0].Error() - } - result := fmt.Sprintf("[%s", err[0].Error()) - for i := 1; i < len(err); i++ { - result += fmt.Sprintf(", %s", err[i].Error()) - } - result += "]" - return result -} diff --git a/vendor/github.com/onsi/gomega/gstruct/fields.go b/vendor/github.com/onsi/gomega/gstruct/fields.go deleted file mode 100644 index faf07b1a25..0000000000 --- a/vendor/github.com/onsi/gomega/gstruct/fields.go +++ /dev/null @@ -1,165 +0,0 @@ -// untested sections: 6 - -package gstruct - -import ( - "errors" - "fmt" - "reflect" - "runtime/debug" - "strings" - - "github.com/onsi/gomega/format" - errorsutil "github.com/onsi/gomega/gstruct/errors" - "github.com/onsi/gomega/types" -) - -//MatchAllFields succeeds if every field of a struct matches the field matcher associated with -//it, and every element matcher is matched. -// actual := struct{ -// A int -// B []bool -// C string -// }{ -// A: 5, -// B: []bool{true, false}, -// C: "foo", -// } -// -// Expect(actual).To(MatchAllFields(Fields{ -// "A": Equal(5), -// "B": ConsistOf(true, false), -// "C": Equal("foo"), -// })) -func MatchAllFields(fields Fields) types.GomegaMatcher { - return &FieldsMatcher{ - Fields: fields, - } -} - -//MatchFields succeeds if each element of a struct matches the field matcher associated with -//it. It can ignore extra fields and/or missing fields. -// actual := struct{ -// A int -// B []bool -// C string -// }{ -// A: 5, -// B: []bool{true, false}, -// C: "foo", -// } -// -// Expect(actual).To(MatchFields(IgnoreExtras, Fields{ -// "A": Equal(5), -// "B": ConsistOf(true, false), -// })) -// Expect(actual).To(MatchFields(IgnoreMissing, Fields{ -// "A": Equal(5), -// "B": ConsistOf(true, false), -// "C": Equal("foo"), -// "D": Equal("extra"), -// })) -func MatchFields(options Options, fields Fields) types.GomegaMatcher { - return &FieldsMatcher{ - Fields: fields, - IgnoreExtras: options&IgnoreExtras != 0, - IgnoreMissing: options&IgnoreMissing != 0, - } -} - -type FieldsMatcher struct { - // Matchers for each field. - Fields Fields - - // Whether to ignore extra elements or consider it an error. - IgnoreExtras bool - // Whether to ignore missing elements or consider it an error. - IgnoreMissing bool - - // State. - failures []error -} - -// Field name to matcher. -type Fields map[string]types.GomegaMatcher - -func (m *FieldsMatcher) Match(actual interface{}) (success bool, err error) { - if reflect.TypeOf(actual).Kind() != reflect.Struct { - return false, fmt.Errorf("%v is type %T, expected struct", actual, actual) - } - - m.failures = m.matchFields(actual) - if len(m.failures) > 0 { - return false, nil - } - return true, nil -} - -func (m *FieldsMatcher) matchFields(actual interface{}) (errs []error) { - val := reflect.ValueOf(actual) - typ := val.Type() - fields := map[string]bool{} - for i := 0; i < val.NumField(); i++ { - fieldName := typ.Field(i).Name - fields[fieldName] = true - - err := func() (err error) { - // This test relies heavily on reflect, which tends to panic. - // Recover here to provide more useful error messages in that case. - defer func() { - if r := recover(); r != nil { - err = fmt.Errorf("panic checking %+v: %v\n%s", actual, r, debug.Stack()) - } - }() - - matcher, expected := m.Fields[fieldName] - if !expected { - if !m.IgnoreExtras { - return fmt.Errorf("unexpected field %s: %+v", fieldName, actual) - } - return nil - } - - field := val.Field(i).Interface() - - match, err := matcher.Match(field) - if err != nil { - return err - } else if !match { - if nesting, ok := matcher.(errorsutil.NestingMatcher); ok { - return errorsutil.AggregateError(nesting.Failures()) - } - return errors.New(matcher.FailureMessage(field)) - } - return nil - }() - if err != nil { - errs = append(errs, errorsutil.Nest("."+fieldName, err)) - } - } - - for field := range m.Fields { - if !fields[field] && !m.IgnoreMissing { - errs = append(errs, fmt.Errorf("missing expected field %s", field)) - } - } - - return errs -} - -func (m *FieldsMatcher) FailureMessage(actual interface{}) (message string) { - failures := make([]string, len(m.failures)) - for i := range m.failures { - failures[i] = m.failures[i].Error() - } - return format.Message(reflect.TypeOf(actual).Name(), - fmt.Sprintf("to match fields: {\n%v\n}\n", strings.Join(failures, "\n"))) -} - -func (m *FieldsMatcher) NegatedFailureMessage(actual interface{}) (message string) { - return format.Message(actual, "not to match fields") -} - -func (m *FieldsMatcher) Failures() []error { - return m.failures -} diff --git a/vendor/github.com/onsi/gomega/gstruct/ignore.go b/vendor/github.com/onsi/gomega/gstruct/ignore.go deleted file mode 100644 index 4396573e44..0000000000 --- a/vendor/github.com/onsi/gomega/gstruct/ignore.go +++ /dev/null @@ -1,39 +0,0 @@ -// untested sections: 2 - -package gstruct - -import ( - "github.com/onsi/gomega/types" -) - -//Ignore ignores the actual value and always succeeds. -// Expect(nil).To(Ignore()) -// Expect(true).To(Ignore()) -func Ignore() types.GomegaMatcher { - return &IgnoreMatcher{true} -} - -//Reject ignores the actual value and always fails. It can be used in conjunction with IgnoreMissing -//to catch problematic elements, or to verify tests are running. -// Expect(nil).NotTo(Reject()) -// Expect(true).NotTo(Reject()) -func Reject() types.GomegaMatcher { - return &IgnoreMatcher{false} -} - -// A matcher that either always succeeds or always fails. -type IgnoreMatcher struct { - Succeed bool -} - -func (m *IgnoreMatcher) Match(actual interface{}) (bool, error) { - return m.Succeed, nil -} - -func (m *IgnoreMatcher) FailureMessage(_ interface{}) (message string) { - return "Unconditional failure" -} - -func (m *IgnoreMatcher) NegatedFailureMessage(_ interface{}) (message string) { - return "Unconditional success" -} diff --git a/vendor/github.com/onsi/gomega/gstruct/keys.go b/vendor/github.com/onsi/gomega/gstruct/keys.go deleted file mode 100644 index 56aed4bab7..0000000000 --- a/vendor/github.com/onsi/gomega/gstruct/keys.go +++ /dev/null @@ -1,126 +0,0 @@ -// untested sections: 6 - -package gstruct - -import ( - "errors" - "fmt" - "reflect" - "runtime/debug" - "strings" - - "github.com/onsi/gomega/format" - errorsutil "github.com/onsi/gomega/gstruct/errors" - "github.com/onsi/gomega/types" -) - -func MatchAllKeys(keys Keys) types.GomegaMatcher { - return &KeysMatcher{ - Keys: keys, - } -} - -func MatchKeys(options Options, keys Keys) types.GomegaMatcher { - return &KeysMatcher{ - Keys: keys, - IgnoreExtras: options&IgnoreExtras != 0, - IgnoreMissing: options&IgnoreMissing != 0, - } -} - -type KeysMatcher struct { - // Matchers for each key. - Keys Keys - - // Whether to ignore extra keys or consider it an error. - IgnoreExtras bool - // Whether to ignore missing keys or consider it an error. - IgnoreMissing bool - - // State. - failures []error -} - -type Keys map[interface{}]types.GomegaMatcher - -func (m *KeysMatcher) Match(actual interface{}) (success bool, err error) { - if reflect.TypeOf(actual).Kind() != reflect.Map { - return false, fmt.Errorf("%v is type %T, expected map", actual, actual) - } - - m.failures = m.matchKeys(actual) - if len(m.failures) > 0 { - return false, nil - } - return true, nil -} - -func (m *KeysMatcher) matchKeys(actual interface{}) (errs []error) { - actualValue := reflect.ValueOf(actual) - keys := map[interface{}]bool{} - for _, keyValue := range actualValue.MapKeys() { - key := keyValue.Interface() - keys[key] = true - - err := func() (err error) { - // This test relies heavily on reflect, which tends to panic. - // Recover here to provide more useful error messages in that case. - defer func() { - if r := recover(); r != nil { - err = fmt.Errorf("panic checking %+v: %v\n%s", actual, r, debug.Stack()) - } - }() - - matcher, ok := m.Keys[key] - if !ok { - if !m.IgnoreExtras { - return fmt.Errorf("unexpected key %s: %+v", key, actual) - } - return nil - } - - valInterface := actualValue.MapIndex(keyValue).Interface() - - match, err := matcher.Match(valInterface) - if err != nil { - return err - } - - if !match { - if nesting, ok := matcher.(errorsutil.NestingMatcher); ok { - return errorsutil.AggregateError(nesting.Failures()) - } - return errors.New(matcher.FailureMessage(valInterface)) - } - return nil - }() - if err != nil { - errs = append(errs, errorsutil.Nest(fmt.Sprintf(".%#v", key), err)) - } - } - - for key := range m.Keys { - if !keys[key] && !m.IgnoreMissing { - errs = append(errs, fmt.Errorf("missing expected key %s", key)) - } - } - - return errs -} - -func (m *KeysMatcher) FailureMessage(actual interface{}) (message string) { - failures := make([]string, len(m.failures)) - for i := range m.failures { - failures[i] = m.failures[i].Error() - } - return format.Message(reflect.TypeOf(actual).Name(), - fmt.Sprintf("to match keys: {\n%v\n}\n", strings.Join(failures, "\n"))) -} - -func (m *KeysMatcher) NegatedFailureMessage(actual interface{}) (message string) { - return format.Message(actual, "not to match keys") -} - -func (m *KeysMatcher) Failures() []error { - return m.failures -} diff --git a/vendor/github.com/onsi/gomega/gstruct/pointer.go b/vendor/github.com/onsi/gomega/gstruct/pointer.go deleted file mode 100644 index cc828a3251..0000000000 --- a/vendor/github.com/onsi/gomega/gstruct/pointer.go +++ /dev/null @@ -1,58 +0,0 @@ -// untested sections: 3 - -package gstruct - -import ( - "fmt" - "reflect" - - "github.com/onsi/gomega/format" - "github.com/onsi/gomega/types" -) - -//PointTo applies the given matcher to the value pointed to by actual. It fails if the pointer is -//nil. -// actual := 5 -// Expect(&actual).To(PointTo(Equal(5))) -func PointTo(matcher types.GomegaMatcher) types.GomegaMatcher { - return &PointerMatcher{ - Matcher: matcher, - } -} - -type PointerMatcher struct { - Matcher types.GomegaMatcher - - // Failure message. - failure string -} - -func (m *PointerMatcher) Match(actual interface{}) (bool, error) { - val := reflect.ValueOf(actual) - - // return error if actual type is not a pointer - if val.Kind() != reflect.Ptr { - return false, fmt.Errorf("PointerMatcher expects a pointer but we have '%s'", val.Kind()) - } - - if !val.IsValid() || val.IsNil() { - m.failure = format.Message(actual, "not to be ") - return false, nil - } - - // Forward the value. - elem := val.Elem().Interface() - match, err := m.Matcher.Match(elem) - if !match { - m.failure = m.Matcher.FailureMessage(elem) - } - return match, err -} - -func (m *PointerMatcher) FailureMessage(_ interface{}) (message string) { - return m.failure -} - -func (m *PointerMatcher) NegatedFailureMessage(actual interface{}) (message string) { - return m.Matcher.NegatedFailureMessage(actual) -} diff --git a/vendor/github.com/onsi/gomega/gstruct/types.go b/vendor/github.com/onsi/gomega/gstruct/types.go deleted file mode 100644 index 48cbbe8f66..0000000000 --- a/vendor/github.com/onsi/gomega/gstruct/types.go +++ /dev/null @@ -1,15 +0,0 @@ -package gstruct - -//Options is the type for options passed to some matchers. -type Options int - -const ( - //IgnoreExtras tells the matcher to ignore extra elements or fields, rather than triggering a failure. - IgnoreExtras Options = 1 << iota - //IgnoreMissing tells the matcher to ignore missing elements or fields, rather than triggering a failure. - IgnoreMissing - //AllowDuplicates tells the matcher to permit multiple members of the slice to produce the same ID when - //considered by the indentifier function. All members that map to a given key must still match successfully - //with the matcher that is provided for that key. - AllowDuplicates -) diff --git a/vendor/modules.txt b/vendor/modules.txt index cf2fa39e76..8d42a14d31 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -156,8 +156,6 @@ github.com/onsi/gomega/gbytes github.com/onsi/gomega/gexec github.com/onsi/gomega/gmeasure github.com/onsi/gomega/gmeasure/table -github.com/onsi/gomega/gstruct -github.com/onsi/gomega/gstruct/errors github.com/onsi/gomega/internal github.com/onsi/gomega/internal/gutil github.com/onsi/gomega/matchers From c9e3de680e41fe23d4eb7a5aad396a8c8c88eaba Mon Sep 17 00:00:00 2001 From: Shingo Omura Date: Tue, 23 Jul 2024 22:53:19 +0900 Subject: [PATCH 5/5] KEP-3619: use sleep infinity instead of while loop --- pkg/validate/security_context_linux.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/validate/security_context_linux.go b/pkg/validate/security_context_linux.go index f6bff925bc..24a3ffee86 100644 --- a/pkg/validate/security_context_linux.go +++ b/pkg/validate/security_context_linux.go @@ -610,7 +610,7 @@ var _ = framework.KubeDescribe("Security Context", func() { containerConfig := &runtimeapi.ContainerConfig{ Metadata: framework.BuildContainerMetadata(containerName, framework.DefaultAttempt), Image: &runtimeapi.ImageSpec{Image: testImagePreDefinedGroup}, - Command: []string{"sh", "-c", "id -G; while :; do sleep 1; done"}, + Command: []string{"sh", "-c", "id -G; sleep infinity"}, Linux: &runtimeapi.LinuxContainerConfig{ SecurityContext: &runtimeapi.LinuxContainerSecurityContext{ RunAsUser: &runtimeapi.Int64Value{Value: imagePredefinedGroupUID}, @@ -677,7 +677,7 @@ var _ = framework.KubeDescribe("Security Context", func() { containerConfig := &runtimeapi.ContainerConfig{ Metadata: framework.BuildContainerMetadata(containerName, framework.DefaultAttempt), Image: &runtimeapi.ImageSpec{Image: testImagePreDefinedGroup}, - Command: []string{"sh", "-c", "id -G; while :; do sleep 1; done"}, + Command: []string{"sh", "-c", "id -G; sleep infinity"}, Linux: &runtimeapi.LinuxContainerConfig{ SecurityContext: &runtimeapi.LinuxContainerSecurityContext{ RunAsUser: &runtimeapi.Int64Value{Value: imagePredefinedGroupUID},