diff --git a/api/event-source.html b/api/event-source.html index e9db8c7b81..9cfd4f4b24 100644 --- a/api/event-source.html +++ b/api/event-source.html @@ -1436,6 +1436,19 @@

EventSource

Bitbucket Server event sources

+ + +redisStream
+ + +map[string]github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.RedisStreamEventSource + + + + +

Redis stream source

+ + @@ -1844,6 +1857,19 @@

EventSourceSpec

Bitbucket Server event sources

+ + +redisStream
+ + +map[string]github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.RedisStreamEventSource + + + + +

Redis stream source

+ +

EventSourceStatus @@ -3557,6 +3583,125 @@

RedisEventSource +

RedisStreamEventSource +

+

+(Appears on: +EventSourceSpec) +

+

+

RedisStreamEventSource describes an event source for +Redis streams (https://redis.io/topics/streams-intro)

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
+hostAddress
+ +string + +
+

HostAddress refers to the address of the Redis host/server

+
+password
+ + +Kubernetes core/v1.SecretKeySelector + + +
+(Optional) +

Password required for authentication if any.

+
+db
+ +int32 + +
+(Optional) +

DB to use. If not specified, default DB 0 will be used.

+
+streams
+ +[]string + +
+

Streams to look for entries. XREADGROUP is used on all streams using a single consumer group.

+
+maxMsgCountPerRead
+ +int32 + +
+(Optional) +

MaxMsgCountPerRead holds the maximum number of messages per stream that will be read in each XREADGROUP of all streams +Example: if there are 2 streams and MaxMsgCountPerRead=10, then each XREADGROUP may read upto a total of 20 messages. +Same as COUNT option in XREADGROUP(https://redis.io/topics/streams-intro). Defaults to 10

+
+commonConsumerGroup
+ +string + +
+(Optional) +

CommonCG refers to the Redis stream consumer group that will be +created on all redis streams. Messages are read through this group. Defaults to ‘argo-events-cg’

+
+tls
+ +github.com/argoproj/argo-events/pkg/apis/common.TLSConfig + +
+(Optional) +

TLS configuration for the redis client.

+
+metadata
+ +map[string]string + +
+(Optional) +

Metadata holds the user defined metadata which will passed along the event payload.

+

ResourceEventSource

diff --git a/api/event-source.md b/api/event-source.md index 183c4e7526..601044e00f 100644 --- a/api/event-source.md +++ b/api/event-source.md @@ -1487,6 +1487,19 @@ Bitbucket Server event sources

+ + +redisStream
+ +map\[string\]github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.RedisStreamEventSource + + + +

+Redis stream source +

+ + @@ -1895,6 +1908,19 @@ Bitbucket Server event sources

+ + +redisStream
+ +map\[string\]github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.RedisStreamEventSource + + + +

+Redis stream source +

+ +

@@ -3631,6 +3657,131 @@ event payload. +

+RedisStreamEventSource +

+

+(Appears on: +EventSourceSpec) +

+

+

+RedisStreamEventSource describes an event source for Redis streams +(https://redis.io/topics/streams-intro) +

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Field + +Description +
+hostAddress
string +
+

+HostAddress refers to the address of the Redis host/server +

+
+password
+ +Kubernetes core/v1.SecretKeySelector +
+(Optional) +

+Password required for authentication if any. +

+
+db
int32 +
+(Optional) +

+DB to use. If not specified, default DB 0 will be used. +

+
+streams
\[\]string +
+

+Streams to look for entries. XREADGROUP is used on all streams using a +single consumer group. +

+
+maxMsgCountPerRead
int32 +
+(Optional) +

+MaxMsgCountPerRead holds the maximum number of messages per stream that +will be read in each XREADGROUP of all streams Example: if there are 2 +streams and MaxMsgCountPerRead=10, then each XREADGROUP may read upto a +total of 20 messages. Same as COUNT option in +XREADGROUP(https://redis.io/topics/streams-intro). +Defaults to 10 +

+
+commonConsumerGroup
string +
+(Optional) +

+CommonCG refers to the Redis stream consumer group that will be created +on all redis streams. Messages are read through this group. Defaults to +‘argo-events-cg’ +

+
+tls
+github.com/argoproj/argo-events/pkg/apis/common.TLSConfig +
+(Optional) +

+TLS configuration for the redis client. +

+
+metadata
map\[string\]string +
+(Optional) +

+Metadata holds the user defined metadata which will passed along the +event payload. +

+

ResourceEventSource

diff --git a/api/openapi-spec/swagger.json b/api/openapi-spec/swagger.json index 6aadab4df2..5a6dbda943 100644 --- a/api/openapi-spec/swagger.json +++ b/api/openapi-spec/swagger.json @@ -1061,6 +1061,13 @@ "$ref": "#/definitions/io.argoproj.eventsource.v1alpha1.RedisEventSource" } }, + "redisStream": { + "description": "Redis stream source", + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/io.argoproj.eventsource.v1alpha1.RedisStreamEventSource" + } + }, "replicas": { "description": "Replicas is the event source deployment replicas", "type": "integer", @@ -1806,6 +1813,56 @@ } } }, + "io.argoproj.eventsource.v1alpha1.RedisStreamEventSource": { + "description": "RedisStreamEventSource describes an event source for Redis streams (https://redis.io/topics/streams-intro)", + "type": "object", + "required": [ + "hostAddress", + "streams" + ], + "properties": { + "commonConsumerGroup": { + "description": "CommonCG refers to the Redis stream consumer group that will be created on all redis streams. Messages are read through this group. Defaults to 'argo-events-cg'", + "type": "string" + }, + "db": { + "description": "DB to use. If not specified, default DB 0 will be used.", + "type": "integer", + "format": "int32" + }, + "hostAddress": { + "description": "HostAddress refers to the address of the Redis host/server", + "type": "string" + }, + "maxMsgCountPerRead": { + "description": "MaxMsgCountPerRead holds the maximum number of messages per stream that will be read in each XREADGROUP of all streams Example: if there are 2 streams and MaxMsgCountPerRead=10, then each XREADGROUP may read upto a total of 20 messages. Same as COUNT option in XREADGROUP(https://redis.io/topics/streams-intro). Defaults to 10", + "type": "integer", + "format": "int32" + }, + "metadata": { + "description": "Metadata holds the user defined metadata which will passed along the event payload.", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "password": { + "description": "Password required for authentication if any.", + "$ref": "#/definitions/io.k8s.api.core.v1.SecretKeySelector" + }, + "streams": { + "description": "Streams to look for entries. XREADGROUP is used on all streams using a single consumer group.", + "type": "array", + "items": { + "type": "string" + } + }, + "tls": { + "description": "TLS configuration for the redis client.", + "$ref": "#/definitions/io.argoproj.common.TLSConfig" + } + } + }, "io.argoproj.eventsource.v1alpha1.ResourceEventSource": { "description": "ResourceEventSource refers to a event-source for K8s resource related events.", "type": "object", diff --git a/docs/eventsources/setup/redis-streams.md b/docs/eventsources/setup/redis-streams.md new file mode 100644 index 0000000000..b0593d60d2 --- /dev/null +++ b/docs/eventsources/setup/redis-streams.md @@ -0,0 +1,56 @@ +# Redis Streams + +Redis stream event-source listens to messages on Redis streams and helps sensor trigger workloads. + +## Event Structure + +The structure of an event dispatched by the event-source over the eventbus looks like following, + + { + "context": { + "type": "type_of_event_source", + "specversion": "cloud_events_version", + "source": "name_of_the_event_source", + "id": "unique_event_id", + "time": "event_time", + "datacontenttype": "type_of_data", + "subject": "name_of_the_configuration_within_event_source" + }, + "data": { + "stream": "Name of the Redis stream", + "message_id": "Message Id", + "values": "message body" + } + } + +## Specification + +Redis stream event-source specification is available [here](https://github.com/argoproj/argo-events/blob/master/api/event-source.md#argoproj.io/v1alpha1.RedisStreamEventSource). + +## Setup + +1. Follow the [documentation](https://kubernetes.io/docs/tutorials/configuration/configure-redis-using-configmap/#real-world-example-configuring-redis-using-a-configmap) to set up Redis database. + +1. Create the event source by running the following command. + + kubectl apply -n argo-events -f https://raw.githubusercontent.com/argoproj/argo-events/stable/examples/event-sources/redis-streams.yaml + +1. Create the sensor by running the following command. + + kubectl apply -n argo-events -f https://raw.githubusercontent.com/argoproj/argo-events/stable/examples/sensors/redis-streams.yaml + +1. Log into redis pod using `kubectl`. + + kubectl -n argo-events exec -it -c -- /bin/bash + +1. Run `redis-cli` and publish a message on the stream `FOO`. + + XADD FOO * message hello + +1. Once a message is published, an argo workflow will be triggered. Run `argo list` to find the workflow. + +## Troubleshoot + +Redis stream event source expects all the streams to be present on redis server. It only starts pulling messages from the streams when all of the specified streams exist on the redis server. + +Please read the [FAQ](https://argoproj.github.io/argo-events/FAQ/). diff --git a/eventsources/eventing.go b/eventsources/eventing.go index 99d8fe90b1..c18a6182d2 100644 --- a/eventsources/eventing.go +++ b/eventsources/eventing.go @@ -39,6 +39,7 @@ import ( "github.com/argoproj/argo-events/eventsources/sources/nsq" "github.com/argoproj/argo-events/eventsources/sources/pulsar" "github.com/argoproj/argo-events/eventsources/sources/redis" + "github.com/argoproj/argo-events/eventsources/sources/redisstream" "github.com/argoproj/argo-events/eventsources/sources/resource" "github.com/argoproj/argo-events/eventsources/sources/slack" "github.com/argoproj/argo-events/eventsources/sources/storagegrid" @@ -181,6 +182,13 @@ func GetEventingServers(eventSource *v1alpha1.EventSource, metrics *eventsourcem } result[apicommon.RedisEvent] = servers } + if len(eventSource.Spec.RedisStream) != 0 { + servers := []EventingServer{} + for k, v := range eventSource.Spec.RedisStream { + servers = append(servers, &redisstream.EventListener{EventSourceName: eventSource.Name, EventName: k, EventSource: v, Metrics: metrics}) + } + result[apicommon.RedisStreamEvent] = servers + } if len(eventSource.Spec.SNS) != 0 { servers := []EventingServer{} for k, v := range eventSource.Spec.SNS { diff --git a/eventsources/sources/redis/start.go b/eventsources/sources/redis/start.go index 8e9a2dcf47..e328783c7b 100644 --- a/eventsources/sources/redis/start.go +++ b/eventsources/sources/redis/start.go @@ -141,7 +141,7 @@ func (el *EventListener) handleOne(message *redis.Message, dispatch func([]byte) if err != nil { return errors.Wrap(err, "failed to marshal the event data, rejecting the event...") } - log.With("channel", message.Channel).Info("dispatching th event on the data channel...") + log.With("channel", message.Channel).Info("dispatching the event on the data channel...") if err = dispatch(eventBody); err != nil { return errors.Wrap(err, "failed dispatch a Redis event") } diff --git a/eventsources/sources/redisstream/start.go b/eventsources/sources/redisstream/start.go new file mode 100644 index 0000000000..0b8fc48854 --- /dev/null +++ b/eventsources/sources/redisstream/start.go @@ -0,0 +1,202 @@ +/* +Copyright 2020 BlackRock, Inc. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package redisstream + +import ( + "context" + "encoding/json" + "strings" + "time" + + "github.com/go-redis/redis" + "github.com/pkg/errors" + "go.uber.org/zap" + + "github.com/argoproj/argo-events/common" + "github.com/argoproj/argo-events/common/logging" + "github.com/argoproj/argo-events/eventsources/sources" + metrics "github.com/argoproj/argo-events/metrics" + apicommon "github.com/argoproj/argo-events/pkg/apis/common" + "github.com/argoproj/argo-events/pkg/apis/events" + "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1" +) + +// EventListener implements Eventing for the Redis event source +type EventListener struct { + EventSourceName string + EventName string + EventSource v1alpha1.RedisStreamEventSource + Metrics *metrics.Metrics +} + +// GetEventSourceName returns name of event source +func (el *EventListener) GetEventSourceName() string { + return el.EventSourceName +} + +// GetEventName returns name of event +func (el *EventListener) GetEventName() string { + return el.EventName +} + +// GetEventSourceType return type of event server +func (el *EventListener) GetEventSourceType() apicommon.EventSourceType { + return apicommon.RedisStreamEvent +} + +// StartListening listens for new data on specified redis streams +func (el *EventListener) StartListening(ctx context.Context, dispatch func([]byte) error) error { + log := logging.FromContext(ctx). + With(logging.LabelEventSourceType, el.GetEventSourceType(), logging.LabelEventName, el.GetEventName()) + log.Info("started processing the Redis stream event source...") + defer sources.Recover(el.GetEventName()) + + redisEventSource := &el.EventSource + + opt := &redis.Options{ + Addr: redisEventSource.HostAddress, + DB: int(redisEventSource.DB), + } + + log.Info("retrieving password if it has been configured...") + if redisEventSource.Password != nil { + password, err := common.GetSecretFromVolume(redisEventSource.Password) + if err != nil { + return errors.Wrapf(err, "failed to find the secret password %s", redisEventSource.Password.Name) + } + opt.Password = password + } + + if redisEventSource.TLS != nil { + tlsConfig, err := common.GetTLSConfig(redisEventSource.TLS) + if err != nil { + return errors.Wrap(err, "failed to get the tls configuration") + } + opt.TLSConfig = tlsConfig + } + + log.Infof("setting up a redis client for %s...", redisEventSource.HostAddress) + client := redis.NewClient(opt) + + if status := client.Ping(); status.Err() != nil { + return errors.Wrapf(status.Err(), "failed to connect to host %s and db %d for event source %s", redisEventSource.HostAddress, redisEventSource.DB, el.GetEventName()) + } + log.Infof("connected to redis server %s", redisEventSource.HostAddress) + + // Create a common consumer group on all streams to start reading from beginning of the streams. + // Only proceeds if all the streams are already present + consumersGroup := "argo-events-cg" + if len(redisEventSource.CommonCG) != 0 { + consumersGroup = redisEventSource.CommonCG + } + for _, stream := range redisEventSource.Streams { + if err := client.XGroupCreate(stream, consumersGroup, "0").Err(); err != nil { + // redis package doesn't seem to expose concrete error types + if err.Error() != "BUSYGROUP Consumer Group name already exists" { + return errors.Wrapf(err, "creating consumer group %s for stream %s on host %s for event source %s", consumersGroup, stream, redisEventSource.HostAddress, el.GetEventName()) + } + log.Infof("Consumer group %s already exists", stream) + } + } + + readGroupArgs := make([]string, 2*len(redisEventSource.Streams)) + copy(readGroupArgs, redisEventSource.Streams) + // Start by reading our pending messages(previously read but not acknowledged). + streamToLastEntryMapping := make(map[string]string, len(redisEventSource.Streams)) + for _, s := range redisEventSource.Streams { + streamToLastEntryMapping[s] = "0-0" + } + + updateReadGroupArgs := func() { + for i, s := range redisEventSource.Streams { + readGroupArgs[i+len(redisEventSource.Streams)] = streamToLastEntryMapping[s] + } + } + updateReadGroupArgs() + + msgCount := redisEventSource.MaxMsgCountPerRead + if msgCount == 0 { + msgCount = 10 + } + + for { + select { + case <-ctx.Done(): + log.Infof("Redis stream event source for host %s is stopped", redisEventSource.HostAddress) + return nil + default: + } + entries, err := client.XReadGroup(&redis.XReadGroupArgs{ + Group: consumersGroup, + Consumer: "argo-events-worker", + Streams: readGroupArgs, + Count: int64(msgCount), + Block: 2 * time.Second, + NoAck: false, + }).Result() + if err != nil { + if err == redis.Nil { + continue + } + return errors.Wrapf(err, "reading streams %s using XREADGROUP", strings.Join(redisEventSource.Streams, ", ")) + } + + for _, entry := range entries { + if len(entry.Messages) == 0 { + // Completed consuming pending messages. Now start consuming new messages + streamToLastEntryMapping[entry.Stream] = ">" + } + for _, message := range entry.Messages { + if err := el.handleOne(entry.Stream, message, dispatch, log); err != nil { + log.With("stream", entry.Stream, "message_id", message.ID).Errorw("failed to process Redis stream message", zap.Error(err)) + el.Metrics.EventProcessingFailed(el.GetEventSourceName(), el.GetEventName()) + continue + } + if err := client.XAck(entry.Stream, consumersGroup, message.ID).Err(); err != nil { + log.With("stream", entry.Stream, "message_id", message.ID).Errorw("failed to acknowledge Redis stream message", zap.Error(err)) + } + if streamToLastEntryMapping[entry.Stream] != ">" { + streamToLastEntryMapping[entry.Stream] = message.ID + } + } + } + updateReadGroupArgs() + } +} + +func (el *EventListener) handleOne(stream string, message redis.XMessage, dispatch func([]byte) error, log *zap.SugaredLogger) error { + defer func(start time.Time) { + el.Metrics.EventProcessingDuration(el.GetEventSourceName(), el.GetEventName(), float64(time.Since(start)/time.Millisecond)) + }(time.Now()) + + log.With("stream", stream, "message_id", message.ID).Info("received a message") + eventData := &events.RedisStreamEventData{ + Stream: stream, + Id: message.ID, + Values: message.Values, + Metadata: el.EventSource.Metadata, + } + eventBody, err := json.Marshal(&eventData) + if err != nil { + return errors.Wrap(err, "failed to marshal the event data, rejecting the event...") + } + log.With("stream", stream).Info("dispatching the event on the data channel...") + if err = dispatch(eventBody); err != nil { + return errors.Wrap(err, "failed dispatch a Redis stream event") + } + return nil +} diff --git a/eventsources/sources/redisstream/validate.go b/eventsources/sources/redisstream/validate.go new file mode 100644 index 0000000000..3d6806443d --- /dev/null +++ b/eventsources/sources/redisstream/validate.go @@ -0,0 +1,47 @@ +/* +Copyright 2020 BlackRock, Inc. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ +package redisstream + +import ( + "context" + + "github.com/pkg/errors" + + "github.com/argoproj/argo-events/common" + apicommon "github.com/argoproj/argo-events/pkg/apis/common" + "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1" +) + +// ValidateEventSource validates nats event source +func (el *EventListener) ValidateEventSource(ctx context.Context) error { + return validate(&el.EventSource) +} + +func validate(eventSource *v1alpha1.RedisStreamEventSource) error { + if eventSource == nil { + return common.ErrNilEventSource + } + if eventSource.HostAddress == "" { + return errors.New("host address must be specified") + } + if eventSource.Streams == nil { + return errors.New("stream/streams must be specified") + } + if eventSource.TLS != nil { + return apicommon.ValidateTLSConfig(eventSource.TLS) + } + return nil +} diff --git a/eventsources/sources/redisstream/validate_test.go b/eventsources/sources/redisstream/validate_test.go new file mode 100644 index 0000000000..23a469eb00 --- /dev/null +++ b/eventsources/sources/redisstream/validate_test.go @@ -0,0 +1,54 @@ +/* +Copyright 2018 BlackRock, Inc. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package redisstream + +import ( + "context" + "fmt" + "io/ioutil" + "testing" + + "github.com/argoproj/argo-events/eventsources/sources" + "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1" + "github.com/ghodss/yaml" + "github.com/stretchr/testify/assert" +) + +func TestValidateRedisEventSource(t *testing.T) { + listener := &EventListener{} + + err := listener.ValidateEventSource(context.Background()) + assert.Error(t, err) + assert.Equal(t, "host address must be specified", err.Error()) + + content, err := ioutil.ReadFile(fmt.Sprintf("%s/%s", sources.EventSourceDir, "redis-streams.yaml")) + assert.Nil(t, err) + + var eventSource *v1alpha1.EventSource + err = yaml.Unmarshal(content, &eventSource) + assert.Nil(t, err) + assert.NotNil(t, eventSource.Spec.RedisStream) + + for name, value := range eventSource.Spec.RedisStream { + fmt.Println(name) + l := &EventListener{ + EventSource: value, + } + err := l.ValidateEventSource(context.Background()) + assert.NoError(t, err) + } +} diff --git a/examples/event-sources/redis-streams.yaml b/examples/event-sources/redis-streams.yaml new file mode 100644 index 0000000000..e88aaf8aa2 --- /dev/null +++ b/examples/event-sources/redis-streams.yaml @@ -0,0 +1,50 @@ +apiVersion: argoproj.io/v1alpha1 +kind: EventSource +metadata: + name: redis-stream +spec: + redisStream: + example: + # HostAddress refers to the address of the Redis host/server + hostAddress: redis.argo-events.svc:6379 + + # Password required for authentication. + # +optional + # password: + # name: name_of_secret_that_holds_password + # key: key_within_secret_which_holds_password_value + + # DB to use. If not specified, default DB 0 will be used. + # +optional + db: 0 + + # MaxMsgCountPerRead holds the maximum number of messages per stream that will be read in each XREADGROUP of all streams + # Example: if there are 2 streams and MaxMsgCountPerRead=10, then each XREADGROUP may read upto a total of 20 messages. + # Same as COUNT option in XREADGROUP(https://redis.io/topics/streams-intro). Defaults to 10 + # +optional + # maxMsgCountPerRead: 50 + + # CommonCG refers to the Redis stream consumer group that will be created on all redis streams. + # Messages are read through this group. Defaults to 'argo-events-cg' + # +optional + # commonConsumerGroup: argo-events-cg + + # Streams to listen for events. XREADGROUP is used on all streams using a single consumer group. + streams: + - FOO + +# example-tls: +# hostAddress: redis.argo-events.svc:6379 +# db: 0 +# streams: +# - FOO +# tls: +# caCertSecret: +# name: my-secret +# key: ca-cert-key +# clientCertSecret: +# name: my-secret +# key: client-cert-key +# clientKeySecret: +# name: my-secret +# key: client-key-key diff --git a/examples/sensors/redis-streams.yaml b/examples/sensors/redis-streams.yaml new file mode 100644 index 0000000000..487e5364db --- /dev/null +++ b/examples/sensors/redis-streams.yaml @@ -0,0 +1,37 @@ +apiVersion: argoproj.io/v1alpha1 +kind: Sensor +metadata: + name: redis-stream +spec: + template: + serviceAccountName: operate-workflow-sa + dependencies: + - name: test-dep + eventSourceName: redis-stream + eventName: example + triggers: + - template: + name: workflow-trigger + k8s: + operation: create + source: + resource: + apiVersion: argoproj.io/v1alpha1 + kind: Workflow + metadata: + generateName: redis-stream- + spec: + entrypoint: whalesay + templates: + - container: + args: + - "hello" # it will get replaced by the event payload + command: + - cowsay + image: "docker/whalesay:latest" + name: whalesay + parameters: + - src: + dependencyName: test-dep + dataKey: body + dest: spec.templates.0.container.args.0 \ No newline at end of file diff --git a/pkg/apis/common/common.go b/pkg/apis/common/common.go index 6ab619abc9..80a6dc61a2 100644 --- a/pkg/apis/common/common.go +++ b/pkg/apis/common/common.go @@ -46,6 +46,7 @@ var ( StripeEvent EventSourceType = "stripe" EmitterEvent EventSourceType = "emitter" RedisEvent EventSourceType = "redis" + RedisStreamEvent EventSourceType = "redisStream" NSQEvent EventSourceType = "nsq" PulsarEvent EventSourceType = "pulsar" GenericEvent EventSourceType = "generic" @@ -68,6 +69,7 @@ var ( NSQEvent, PulsarEvent, RedisEvent, + RedisStreamEvent, ResourceEvent, HDFSEvent, FileEvent, diff --git a/pkg/apis/events/event-data.go b/pkg/apis/events/event-data.go index 30f1cd6e80..ef908bb02e 100644 --- a/pkg/apis/events/event-data.go +++ b/pkg/apis/events/event-data.go @@ -232,6 +232,18 @@ type RedisEventData struct { Metadata map[string]string `json:"metadata,omitempty"` } +// RedisStreamEventData represents the event data generated by the Redis eventsource. +type RedisStreamEventData struct { + // Source redis stream name. + Stream string `json:"stream"` + // Message Id + Id string `json:"message_id"` + // Message body + Values map[string]interface{} `json:"values"` + // Metadata holds the user defined metadata which will passed along the event payload. + Metadata map[string]string `json:"metadata,omitempty"` +} + // ResourceEventData represents the event data generated by the Resource eventsource. type ResourceEventData struct { // EventType of the type of the event. diff --git a/pkg/apis/eventsource/v1alpha1/generated.pb.go b/pkg/apis/eventsource/v1alpha1/generated.pb.go index 19368f57e5..1400347bbd 100644 --- a/pkg/apis/eventsource/v1alpha1/generated.pb.go +++ b/pkg/apis/eventsource/v1alpha1/generated.pb.go @@ -914,10 +914,38 @@ func (m *RedisEventSource) XXX_DiscardUnknown() { var xxx_messageInfo_RedisEventSource proto.InternalMessageInfo +func (m *RedisStreamEventSource) Reset() { *m = RedisStreamEventSource{} } +func (*RedisStreamEventSource) ProtoMessage() {} +func (*RedisStreamEventSource) Descriptor() ([]byte, []int) { + return fileDescriptor_c9ac5d6cd016403b, []int{31} +} +func (m *RedisStreamEventSource) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RedisStreamEventSource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *RedisStreamEventSource) XXX_Merge(src proto.Message) { + xxx_messageInfo_RedisStreamEventSource.Merge(m, src) +} +func (m *RedisStreamEventSource) XXX_Size() int { + return m.Size() +} +func (m *RedisStreamEventSource) XXX_DiscardUnknown() { + xxx_messageInfo_RedisStreamEventSource.DiscardUnknown(m) +} + +var xxx_messageInfo_RedisStreamEventSource proto.InternalMessageInfo + func (m *ResourceEventSource) Reset() { *m = ResourceEventSource{} } func (*ResourceEventSource) ProtoMessage() {} func (*ResourceEventSource) Descriptor() ([]byte, []int) { - return fileDescriptor_c9ac5d6cd016403b, []int{31} + return fileDescriptor_c9ac5d6cd016403b, []int{32} } func (m *ResourceEventSource) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -945,7 +973,7 @@ var xxx_messageInfo_ResourceEventSource proto.InternalMessageInfo func (m *ResourceFilter) Reset() { *m = ResourceFilter{} } func (*ResourceFilter) ProtoMessage() {} func (*ResourceFilter) Descriptor() ([]byte, []int) { - return fileDescriptor_c9ac5d6cd016403b, []int{32} + return fileDescriptor_c9ac5d6cd016403b, []int{33} } func (m *ResourceFilter) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -973,7 +1001,7 @@ var xxx_messageInfo_ResourceFilter proto.InternalMessageInfo func (m *SNSEventSource) Reset() { *m = SNSEventSource{} } func (*SNSEventSource) ProtoMessage() {} func (*SNSEventSource) Descriptor() ([]byte, []int) { - return fileDescriptor_c9ac5d6cd016403b, []int{33} + return fileDescriptor_c9ac5d6cd016403b, []int{34} } func (m *SNSEventSource) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1001,7 +1029,7 @@ var xxx_messageInfo_SNSEventSource proto.InternalMessageInfo func (m *SQSEventSource) Reset() { *m = SQSEventSource{} } func (*SQSEventSource) ProtoMessage() {} func (*SQSEventSource) Descriptor() ([]byte, []int) { - return fileDescriptor_c9ac5d6cd016403b, []int{34} + return fileDescriptor_c9ac5d6cd016403b, []int{35} } func (m *SQSEventSource) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1029,7 +1057,7 @@ var xxx_messageInfo_SQSEventSource proto.InternalMessageInfo func (m *Selector) Reset() { *m = Selector{} } func (*Selector) ProtoMessage() {} func (*Selector) Descriptor() ([]byte, []int) { - return fileDescriptor_c9ac5d6cd016403b, []int{35} + return fileDescriptor_c9ac5d6cd016403b, []int{36} } func (m *Selector) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1057,7 +1085,7 @@ var xxx_messageInfo_Selector proto.InternalMessageInfo func (m *Service) Reset() { *m = Service{} } func (*Service) ProtoMessage() {} func (*Service) Descriptor() ([]byte, []int) { - return fileDescriptor_c9ac5d6cd016403b, []int{36} + return fileDescriptor_c9ac5d6cd016403b, []int{37} } func (m *Service) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1085,7 +1113,7 @@ var xxx_messageInfo_Service proto.InternalMessageInfo func (m *SlackEventSource) Reset() { *m = SlackEventSource{} } func (*SlackEventSource) ProtoMessage() {} func (*SlackEventSource) Descriptor() ([]byte, []int) { - return fileDescriptor_c9ac5d6cd016403b, []int{37} + return fileDescriptor_c9ac5d6cd016403b, []int{38} } func (m *SlackEventSource) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1113,7 +1141,7 @@ var xxx_messageInfo_SlackEventSource proto.InternalMessageInfo func (m *StorageGridEventSource) Reset() { *m = StorageGridEventSource{} } func (*StorageGridEventSource) ProtoMessage() {} func (*StorageGridEventSource) Descriptor() ([]byte, []int) { - return fileDescriptor_c9ac5d6cd016403b, []int{38} + return fileDescriptor_c9ac5d6cd016403b, []int{39} } func (m *StorageGridEventSource) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1141,7 +1169,7 @@ var xxx_messageInfo_StorageGridEventSource proto.InternalMessageInfo func (m *StorageGridFilter) Reset() { *m = StorageGridFilter{} } func (*StorageGridFilter) ProtoMessage() {} func (*StorageGridFilter) Descriptor() ([]byte, []int) { - return fileDescriptor_c9ac5d6cd016403b, []int{39} + return fileDescriptor_c9ac5d6cd016403b, []int{40} } func (m *StorageGridFilter) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1169,7 +1197,7 @@ var xxx_messageInfo_StorageGridFilter proto.InternalMessageInfo func (m *StripeEventSource) Reset() { *m = StripeEventSource{} } func (*StripeEventSource) ProtoMessage() {} func (*StripeEventSource) Descriptor() ([]byte, []int) { - return fileDescriptor_c9ac5d6cd016403b, []int{40} + return fileDescriptor_c9ac5d6cd016403b, []int{41} } func (m *StripeEventSource) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1197,7 +1225,7 @@ var xxx_messageInfo_StripeEventSource proto.InternalMessageInfo func (m *Template) Reset() { *m = Template{} } func (*Template) ProtoMessage() {} func (*Template) Descriptor() ([]byte, []int) { - return fileDescriptor_c9ac5d6cd016403b, []int{41} + return fileDescriptor_c9ac5d6cd016403b, []int{42} } func (m *Template) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1225,7 +1253,7 @@ var xxx_messageInfo_Template proto.InternalMessageInfo func (m *WatchPathConfig) Reset() { *m = WatchPathConfig{} } func (*WatchPathConfig) ProtoMessage() {} func (*WatchPathConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_c9ac5d6cd016403b, []int{42} + return fileDescriptor_c9ac5d6cd016403b, []int{43} } func (m *WatchPathConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1253,7 +1281,7 @@ var xxx_messageInfo_WatchPathConfig proto.InternalMessageInfo func (m *WebhookContext) Reset() { *m = WebhookContext{} } func (*WebhookContext) ProtoMessage() {} func (*WebhookContext) Descriptor() ([]byte, []int) { - return fileDescriptor_c9ac5d6cd016403b, []int{43} + return fileDescriptor_c9ac5d6cd016403b, []int{44} } func (m *WebhookContext) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1317,6 +1345,7 @@ func init() { proto.RegisterMapType((map[string]PubSubEventSource)(nil), "github.com.argoproj.argo_events.pkg.apis.eventsource.v1alpha1.EventSourceSpec.PubSubEntry") proto.RegisterMapType((map[string]PulsarEventSource)(nil), "github.com.argoproj.argo_events.pkg.apis.eventsource.v1alpha1.EventSourceSpec.PulsarEntry") proto.RegisterMapType((map[string]RedisEventSource)(nil), "github.com.argoproj.argo_events.pkg.apis.eventsource.v1alpha1.EventSourceSpec.RedisEntry") + proto.RegisterMapType((map[string]RedisStreamEventSource)(nil), "github.com.argoproj.argo_events.pkg.apis.eventsource.v1alpha1.EventSourceSpec.RedisStreamEntry") proto.RegisterMapType((map[string]ResourceEventSource)(nil), "github.com.argoproj.argo_events.pkg.apis.eventsource.v1alpha1.EventSourceSpec.ResourceEntry") proto.RegisterMapType((map[string]SlackEventSource)(nil), "github.com.argoproj.argo_events.pkg.apis.eventsource.v1alpha1.EventSourceSpec.SlackEntry") proto.RegisterMapType((map[string]SNSEventSource)(nil), "github.com.argoproj.argo_events.pkg.apis.eventsource.v1alpha1.EventSourceSpec.SnsEntry") @@ -1352,6 +1381,8 @@ func init() { proto.RegisterMapType((map[string]string)(nil), "github.com.argoproj.argo_events.pkg.apis.eventsource.v1alpha1.PulsarEventSource.MetadataEntry") proto.RegisterType((*RedisEventSource)(nil), "github.com.argoproj.argo_events.pkg.apis.eventsource.v1alpha1.RedisEventSource") proto.RegisterMapType((map[string]string)(nil), "github.com.argoproj.argo_events.pkg.apis.eventsource.v1alpha1.RedisEventSource.MetadataEntry") + proto.RegisterType((*RedisStreamEventSource)(nil), "github.com.argoproj.argo_events.pkg.apis.eventsource.v1alpha1.RedisStreamEventSource") + proto.RegisterMapType((map[string]string)(nil), "github.com.argoproj.argo_events.pkg.apis.eventsource.v1alpha1.RedisStreamEventSource.MetadataEntry") proto.RegisterType((*ResourceEventSource)(nil), "github.com.argoproj.argo_events.pkg.apis.eventsource.v1alpha1.ResourceEventSource") proto.RegisterMapType((map[string]string)(nil), "github.com.argoproj.argo_events.pkg.apis.eventsource.v1alpha1.ResourceEventSource.MetadataEntry") proto.RegisterType((*ResourceFilter)(nil), "github.com.argoproj.argo_events.pkg.apis.eventsource.v1alpha1.ResourceFilter") @@ -1380,370 +1411,378 @@ func init() { } var fileDescriptor_c9ac5d6cd016403b = []byte{ - // 5800 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7d, 0xdd, 0x6f, 0x1c, 0xd7, - 0x75, 0xb8, 0x97, 0xfb, 0xc1, 0xdd, 0xb3, 0xfc, 0xbc, 0x92, 0xe5, 0x35, 0x63, 0x4b, 0x02, 0x8d, - 0x9f, 0x20, 0xfd, 0x6a, 0x93, 0xb5, 0xda, 0xb4, 0x8e, 0xdd, 0x38, 0xd8, 0x25, 0x29, 0x8a, 0x16, - 0x49, 0x91, 0x67, 0x49, 0xc9, 0x8a, 0x1d, 0x3b, 0xb3, 0xb3, 0x97, 0xbb, 0x13, 0xce, 0xce, 0x2c, - 0x67, 0x66, 0x29, 0xd1, 0x40, 0x13, 0xa3, 0x40, 0x3f, 0x12, 0xc7, 0x69, 0xdc, 0x26, 0xe9, 0x17, - 0xfa, 0xd2, 0x87, 0x16, 0x68, 0x81, 0xa2, 0x68, 0x81, 0xbe, 0xf4, 0xa9, 0x6f, 0x06, 0xf2, 0xe2, - 0xa2, 0x2f, 0x01, 0x82, 0x0a, 0xb1, 0xda, 0x3f, 0xa0, 0x68, 0x81, 0x02, 0x6d, 0x5f, 0x8a, 0xfb, - 0x31, 0x77, 0x3e, 0x76, 0x48, 0x71, 0xb5, 0xb3, 0x54, 0x1f, 0xfa, 0xc6, 0xbd, 0xe7, 0xdc, 0x73, - 0xce, 0xdc, 0x7b, 0x3e, 0xee, 0xb9, 0xf7, 0xdc, 0x4b, 0xd8, 0x68, 0x19, 0x5e, 0xbb, 0xd7, 0x58, - 0xd0, 0xed, 0xce, 0xa2, 0xe6, 0xb4, 0xec, 0xae, 0x63, 0x7f, 0x83, 0xff, 0xf1, 0x0a, 0x3d, 0xa4, - 0x96, 0xe7, 0x2e, 0x76, 0xf7, 0x5b, 0x8b, 0x5a, 0xd7, 0x70, 0x17, 0xc5, 0x6f, 0xbb, 0xe7, 0xe8, - 0x74, 0xf1, 0xf0, 0x55, 0xcd, 0xec, 0xb6, 0xb5, 0x57, 0x17, 0x5b, 0xd4, 0xa2, 0x8e, 0xe6, 0xd1, - 0xe6, 0x42, 0xd7, 0xb1, 0x3d, 0x9b, 0x7c, 0x39, 0x20, 0xb7, 0xe0, 0x93, 0xe3, 0x7f, 0xbc, 0x2f, - 0xba, 0x2f, 0x74, 0xf7, 0x5b, 0x0b, 0x8c, 0xdc, 0x42, 0x88, 0xdc, 0x82, 0x4f, 0x6e, 0xee, 0x2b, - 0xa7, 0x96, 0x46, 0xb7, 0x3b, 0x1d, 0xdb, 0x8a, 0xf3, 0x9f, 0x7b, 0x25, 0x44, 0xa0, 0x65, 0xb7, - 0xec, 0x45, 0xde, 0xdc, 0xe8, 0xed, 0xf1, 0x5f, 0xfc, 0x07, 0xff, 0x4b, 0xa2, 0xcf, 0xef, 0xbf, - 0xe6, 0x2e, 0x18, 0x36, 0x23, 0xb9, 0xa8, 0xdb, 0x0e, 0xfb, 0xb0, 0x3e, 0x92, 0xbf, 0x18, 0xe0, - 0x74, 0x34, 0xbd, 0x6d, 0x58, 0xd4, 0x39, 0x0a, 0xe4, 0xe8, 0x50, 0x4f, 0x4b, 0xea, 0xb5, 0x78, - 0x5c, 0x2f, 0xa7, 0x67, 0x79, 0x46, 0x87, 0xf6, 0x75, 0xf8, 0xa5, 0xc7, 0x75, 0x70, 0xf5, 0x36, - 0xed, 0x68, 0xf1, 0x7e, 0xf3, 0xff, 0x99, 0x81, 0xd9, 0xea, 0xc6, 0xf6, 0xd6, 0x92, 0x6d, 0xb9, - 0xbd, 0x0e, 0x5d, 0xb2, 0xad, 0x3d, 0xa3, 0x45, 0xbe, 0x08, 0x65, 0x5d, 0x34, 0x38, 0x3b, 0x5a, - 0xab, 0x92, 0xb9, 0x9c, 0xb9, 0x5a, 0xaa, 0x9d, 0xfb, 0xf4, 0xe1, 0xa5, 0x67, 0x1e, 0x3d, 0xbc, - 0x54, 0x5e, 0x0a, 0x40, 0x18, 0xc6, 0x23, 0xd7, 0x60, 0x5c, 0xeb, 0x79, 0x76, 0x55, 0xdf, 0xaf, - 0x8c, 0x5d, 0xce, 0x5c, 0x2d, 0xd6, 0xa6, 0x65, 0x97, 0xf1, 0xaa, 0x68, 0x46, 0x1f, 0x4e, 0x16, - 0xa1, 0x44, 0x1f, 0xe8, 0x66, 0xcf, 0x35, 0x0e, 0x69, 0x25, 0xcb, 0x91, 0x67, 0x25, 0x72, 0x69, - 0xc5, 0x07, 0x60, 0x80, 0xc3, 0x68, 0x5b, 0xf6, 0xba, 0xad, 0x6b, 0x66, 0x25, 0x17, 0xa5, 0xbd, - 0x29, 0x9a, 0xd1, 0x87, 0x93, 0x2b, 0x50, 0xb0, 0xec, 0xbb, 0x9a, 0xe1, 0x55, 0xf2, 0x1c, 0x73, - 0x4a, 0x62, 0x16, 0x36, 0x79, 0x2b, 0x4a, 0xe8, 0xfc, 0x7f, 0x00, 0x4c, 0xb3, 0x6f, 0x5f, 0x61, - 0xca, 0x51, 0xe7, 0xba, 0x44, 0x5e, 0x84, 0x6c, 0xcf, 0x31, 0xe5, 0x17, 0x97, 0x65, 0xc7, 0xec, - 0x2e, 0xae, 0x23, 0x6b, 0x27, 0xaf, 0xc1, 0x04, 0x7d, 0xa0, 0xb7, 0x35, 0xab, 0x45, 0x37, 0xb5, - 0x0e, 0xe5, 0x9f, 0x59, 0xaa, 0x9d, 0x97, 0x78, 0x13, 0x2b, 0x21, 0x18, 0x46, 0x30, 0xc3, 0x3d, - 0x77, 0x8e, 0xba, 0xe2, 0x9b, 0x13, 0x7a, 0x32, 0x18, 0x46, 0x30, 0xc9, 0x75, 0x00, 0xc7, 0xee, - 0x79, 0x86, 0xd5, 0xba, 0x45, 0x8f, 0xf8, 0xc7, 0x97, 0x6a, 0x44, 0xf6, 0x03, 0x54, 0x10, 0x0c, - 0x61, 0x91, 0x5f, 0x85, 0x59, 0xdd, 0xb6, 0x2c, 0xaa, 0x7b, 0x86, 0x6d, 0xd5, 0x34, 0x7d, 0xdf, - 0xde, 0xdb, 0xe3, 0xa3, 0x51, 0xbe, 0xfe, 0xda, 0xc2, 0xa9, 0x8d, 0x4c, 0x58, 0xc9, 0x82, 0xec, - 0x5f, 0x7b, 0xf6, 0xd1, 0xc3, 0x4b, 0xb3, 0x4b, 0x71, 0xb2, 0xd8, 0xcf, 0x89, 0xbc, 0x0c, 0xc5, - 0x6f, 0xb8, 0xb6, 0x55, 0xb3, 0x9b, 0x47, 0x95, 0x02, 0x9f, 0x83, 0x19, 0x29, 0x70, 0xf1, 0xad, - 0xfa, 0xed, 0x4d, 0xd6, 0x8e, 0x0a, 0x83, 0xec, 0x42, 0xd6, 0x33, 0xdd, 0xca, 0x38, 0x17, 0xef, - 0xf5, 0x81, 0xc5, 0xdb, 0x59, 0xaf, 0x0b, 0xb5, 0xad, 0x8d, 0xb3, 0xb9, 0xda, 0x59, 0xaf, 0x23, - 0xa3, 0x47, 0xbe, 0x93, 0x81, 0x22, 0xb3, 0xaf, 0xa6, 0xe6, 0x69, 0x95, 0xe2, 0xe5, 0xec, 0xd5, - 0xf2, 0xf5, 0x77, 0x17, 0x86, 0x72, 0x30, 0x0b, 0x31, 0x6d, 0x59, 0xd8, 0x90, 0xe4, 0x57, 0x2c, - 0xcf, 0x39, 0x0a, 0xbe, 0xd1, 0x6f, 0x46, 0xc5, 0x9f, 0xfc, 0x5e, 0x06, 0xa6, 0xfd, 0x59, 0x5d, - 0xa6, 0xba, 0xa9, 0x39, 0xb4, 0x52, 0xe2, 0x1f, 0xfc, 0x76, 0x1a, 0x32, 0x45, 0x29, 0xcb, 0xe1, - 0x38, 0xf7, 0xe8, 0xe1, 0xa5, 0xe9, 0x18, 0x08, 0xe3, 0x52, 0x90, 0x8f, 0x32, 0x30, 0x71, 0xd0, - 0xa3, 0x3d, 0x25, 0x16, 0x70, 0xb1, 0x76, 0x53, 0x10, 0x6b, 0x3b, 0x44, 0x56, 0xca, 0x34, 0xc3, - 0x94, 0x3d, 0xdc, 0x8e, 0x11, 0xe6, 0xe4, 0x5b, 0x50, 0xe2, 0xbf, 0x6b, 0x86, 0xd5, 0xac, 0x94, - 0xb9, 0x24, 0x98, 0x96, 0x24, 0x8c, 0xa6, 0x14, 0x63, 0x92, 0xf9, 0x19, 0xd5, 0x88, 0x01, 0x4f, - 0x72, 0x1f, 0xc6, 0xa5, 0x4b, 0xab, 0x4c, 0x70, 0xf6, 0x5b, 0x29, 0xb0, 0x8f, 0x78, 0xd7, 0x5a, - 0x99, 0x79, 0x2d, 0xd9, 0x84, 0x3e, 0x37, 0xf2, 0x36, 0xe4, 0xb4, 0x9e, 0xd7, 0xae, 0x4c, 0x3e, - 0xa1, 0x19, 0xd4, 0x34, 0xd7, 0xd0, 0xab, 0x3d, 0xaf, 0x5d, 0x2b, 0x3e, 0x7a, 0x78, 0x29, 0xc7, - 0xfe, 0x42, 0x4e, 0x91, 0x20, 0x94, 0x7a, 0x8e, 0x59, 0xa7, 0xba, 0x43, 0xbd, 0xca, 0x14, 0x27, - 0xff, 0xff, 0x16, 0x44, 0xbc, 0x60, 0x14, 0x16, 0x58, 0xe8, 0x5a, 0x38, 0x7c, 0x75, 0x41, 0x60, - 0xdc, 0xa2, 0x47, 0x75, 0x6a, 0x52, 0xdd, 0xb3, 0x1d, 0x31, 0x4c, 0xbb, 0xb8, 0x2e, 0x20, 0x18, - 0x90, 0x99, 0x7b, 0x03, 0x26, 0x23, 0xca, 0x4f, 0x66, 0x20, 0xbb, 0x4f, 0x8f, 0x84, 0xe3, 0x44, - 0xf6, 0x27, 0x39, 0x0f, 0xf9, 0x43, 0xcd, 0xec, 0x49, 0x27, 0x89, 0xe2, 0xc7, 0xeb, 0x63, 0xaf, - 0x65, 0xe6, 0x3f, 0xcb, 0xc0, 0xf3, 0xc7, 0xaa, 0x2d, 0xf3, 0xf4, 0xcd, 0x9e, 0xa3, 0x35, 0x4c, - 0xca, 0xa9, 0x85, 0x3c, 0xfd, 0xb2, 0x68, 0x46, 0x1f, 0xce, 0x5c, 0x23, 0x0b, 0x28, 0xcb, 0xd4, - 0xa4, 0x1e, 0x95, 0x31, 0x47, 0xb9, 0xc6, 0xaa, 0x82, 0x60, 0x08, 0x8b, 0xf9, 0x26, 0xc3, 0xf2, - 0xa8, 0x63, 0x69, 0xa6, 0x0c, 0x3c, 0xca, 0x6e, 0xd7, 0x64, 0x3b, 0x2a, 0x8c, 0x50, 0x2c, 0xc9, - 0x9d, 0x18, 0x4b, 0xbe, 0x0c, 0xe7, 0x12, 0xf4, 0x2c, 0xd4, 0x3d, 0x73, 0x62, 0xf7, 0x7f, 0xcb, - 0xc0, 0x85, 0x64, 0x8b, 0x21, 0x97, 0x21, 0x67, 0xb1, 0x50, 0x23, 0x42, 0xd2, 0x84, 0x24, 0x90, - 0xe3, 0x21, 0x86, 0x43, 0xc2, 0x03, 0x36, 0x36, 0xd0, 0x80, 0x65, 0x4f, 0x35, 0x60, 0x91, 0x50, - 0x9d, 0x3b, 0x45, 0xa8, 0x3e, 0x6d, 0xfc, 0xfd, 0x41, 0x0e, 0x9e, 0xaf, 0x7e, 0xd0, 0x73, 0x28, - 0x77, 0xa9, 0xee, 0xcd, 0x5e, 0x23, 0x1c, 0x89, 0x2f, 0x43, 0x6e, 0xef, 0xa0, 0x69, 0xc5, 0xbf, - 0xfb, 0xc6, 0xf6, 0xf2, 0x26, 0x72, 0x08, 0xe9, 0xc2, 0x39, 0xb7, 0xad, 0x39, 0xb4, 0x59, 0xd5, - 0x75, 0xea, 0xba, 0xb7, 0xe8, 0x91, 0x8a, 0xc9, 0xa7, 0xd6, 0xf0, 0xe7, 0x1e, 0x3d, 0xbc, 0x74, - 0xae, 0xde, 0x4f, 0x05, 0x93, 0x48, 0x93, 0x26, 0x4c, 0xc7, 0x9a, 0xf9, 0x18, 0x9e, 0x9a, 0x1b, - 0xf7, 0xc8, 0x31, 0x6e, 0x18, 0x27, 0xc9, 0xe6, 0xb3, 0xdd, 0x6b, 0xf0, 0x6f, 0x11, 0xd1, 0x5e, - 0xcd, 0xe7, 0x4d, 0xd1, 0x8c, 0x3e, 0x9c, 0xfc, 0x20, 0x1c, 0xe3, 0xf2, 0x3c, 0xc6, 0xed, 0x0d, - 0xeb, 0xaf, 0x8e, 0x9b, 0x91, 0xd3, 0x47, 0xbb, 0xe1, 0xbc, 0xc3, 0x3f, 0x15, 0x60, 0xae, 0x66, - 0x78, 0x8d, 0x9e, 0xbe, 0x4f, 0xbd, 0x3a, 0x75, 0x0e, 0xa9, 0x13, 0xd6, 0x0b, 0x0f, 0xc6, 0xef, - 0xd3, 0x46, 0xdb, 0xb6, 0xf7, 0x39, 0xb9, 0xf2, 0xf5, 0x8d, 0x21, 0x3f, 0xf8, 0xae, 0xa0, 0xb6, - 0x64, 0x5b, 0x1e, 0x7d, 0xe0, 0x09, 0xef, 0x2c, 0xdb, 0xd0, 0x67, 0xc5, 0x0c, 0x87, 0x91, 0xa5, - 0x3a, 0x9b, 0x4f, 0xb9, 0xec, 0x53, 0x86, 0xb3, 0xa5, 0x20, 0x18, 0xc2, 0x22, 0x6f, 0xc2, 0x94, - 0x43, 0xbb, 0xb6, 0x6b, 0x78, 0xb6, 0x73, 0x54, 0x37, 0x7b, 0x2d, 0xb9, 0xe8, 0xbb, 0x20, 0xfb, - 0x4d, 0x61, 0x04, 0x8a, 0x31, 0x6c, 0x32, 0x0f, 0x05, 0x21, 0x70, 0x25, 0x77, 0x39, 0x7b, 0xb5, - 0x54, 0x03, 0x66, 0x43, 0x62, 0x66, 0x50, 0x42, 0xc8, 0xdb, 0x50, 0xd6, 0xb8, 0xe2, 0xec, 0xd8, - 0xfb, 0xd4, 0x92, 0x4b, 0xbc, 0x53, 0x6a, 0xe3, 0x34, 0x5b, 0xcc, 0x57, 0x83, 0xde, 0x18, 0x26, - 0x45, 0xde, 0x83, 0x49, 0xf9, 0xf1, 0x32, 0x72, 0x14, 0x06, 0xa1, 0x3d, 0xfb, 0xe8, 0xe1, 0xa5, - 0xc9, 0xbb, 0xe1, 0xfe, 0x18, 0x25, 0x47, 0xee, 0xc0, 0x85, 0x86, 0x3f, 0xcb, 0x2e, 0x9f, 0xe5, - 0x9a, 0xe6, 0xd2, 0x5d, 0x5c, 0xaf, 0x14, 0xf9, 0x28, 0x5d, 0x94, 0xa3, 0x74, 0x21, 0xa6, 0x0b, - 0x12, 0x0b, 0x8f, 0xe9, 0x4d, 0xde, 0x02, 0xd2, 0xe4, 0x8e, 0xeb, 0xa6, 0x6d, 0xef, 0xdf, 0xb6, - 0x6e, 0x18, 0x96, 0xe1, 0xb6, 0xf9, 0x5a, 0xab, 0x58, 0x9b, 0x93, 0x34, 0xc9, 0x72, 0x1f, 0x06, - 0x26, 0xf4, 0x22, 0x3f, 0x0c, 0x9b, 0x17, 0x70, 0xf3, 0x6a, 0x0d, 0xa9, 0x6d, 0xc7, 0x6b, 0xf6, - 0x59, 0xd9, 0xd7, 0x5f, 0xe6, 0xe0, 0xdc, 0x92, 0x66, 0x52, 0xab, 0xa9, 0x45, 0x0c, 0xeb, 0x65, - 0x28, 0xb2, 0x24, 0xb1, 0xd9, 0x33, 0xfd, 0x60, 0xa3, 0x44, 0xa8, 0xcb, 0x76, 0x54, 0x18, 0x2a, - 0x8c, 0x1e, 0x6a, 0xa6, 0x34, 0x87, 0x68, 0x18, 0x3d, 0x54, 0x61, 0xf4, 0x50, 0x33, 0xc9, 0xeb, - 0x30, 0x25, 0xe3, 0x83, 0x6d, 0x2d, 0x6b, 0x1e, 0x75, 0x2b, 0x59, 0xae, 0xd2, 0x84, 0x99, 0xc1, - 0x4a, 0x04, 0x82, 0x31, 0x4c, 0xc6, 0x89, 0x65, 0xb0, 0x1f, 0xd8, 0x96, 0xef, 0x0f, 0x15, 0xa7, - 0x1d, 0xd9, 0x8e, 0x0a, 0x83, 0x7c, 0xaf, 0xdf, 0x23, 0x7e, 0x7d, 0xc8, 0x29, 0x4b, 0x18, 0xac, - 0x01, 0x56, 0xfe, 0xbf, 0x96, 0x81, 0x72, 0x97, 0x3a, 0xae, 0xe1, 0x7a, 0xd4, 0xd2, 0xa9, 0x34, - 0xa3, 0xdb, 0x43, 0xca, 0xc4, 0x65, 0xd9, 0x0a, 0xc8, 0x0a, 0x63, 0x0e, 0x35, 0x60, 0x98, 0xe9, - 0x70, 0x0a, 0xf3, 0x00, 0xce, 0x2f, 0x69, 0x9e, 0xde, 0xee, 0x75, 0xc5, 0x92, 0xa4, 0xe7, 0x68, - 0x2c, 0xd9, 0x63, 0x71, 0x8a, 0x5a, 0x6c, 0x59, 0xd1, 0x8c, 0x2f, 0xd4, 0x56, 0x44, 0x33, 0xfa, - 0x70, 0xf2, 0x45, 0x28, 0x77, 0xb4, 0x07, 0xcb, 0xb2, 0xa7, 0x54, 0x18, 0xb5, 0xa1, 0xb0, 0x11, - 0x80, 0x30, 0x8c, 0x37, 0xff, 0x4d, 0x38, 0x2f, 0x58, 0x6e, 0x68, 0xdd, 0xd0, 0xb7, 0x9d, 0x62, - 0x4d, 0xb4, 0x0c, 0x33, 0xba, 0x43, 0x35, 0x8f, 0xae, 0xed, 0x6d, 0xda, 0xde, 0xca, 0x03, 0xc3, - 0xf5, 0xe4, 0xe2, 0xa8, 0x22, 0xb1, 0x67, 0x96, 0x62, 0x70, 0xec, 0xeb, 0x31, 0xff, 0x87, 0x05, - 0x20, 0x2b, 0x1d, 0xc3, 0xf3, 0xa2, 0x21, 0xe8, 0x0a, 0x14, 0x1a, 0x8e, 0xbd, 0x4f, 0x1d, 0x29, - 0x80, 0x5a, 0xe0, 0xd4, 0x78, 0x2b, 0x4a, 0x28, 0x0b, 0x1a, 0x6c, 0x81, 0x6b, 0x51, 0x33, 0x21, - 0x68, 0x2c, 0x29, 0x08, 0x86, 0xb0, 0xf8, 0xd6, 0x8b, 0xf8, 0xc5, 0x17, 0x00, 0xd9, 0xd8, 0xd6, - 0x4b, 0x00, 0xc2, 0x30, 0x1e, 0xb9, 0x0d, 0xc5, 0x9e, 0xcb, 0x96, 0xac, 0x72, 0xd1, 0x70, 0x6a, - 0x47, 0x3d, 0xc1, 0xd4, 0x76, 0x57, 0x76, 0x45, 0x45, 0x84, 0x11, 0xec, 0x6a, 0xae, 0x7b, 0xdf, - 0x76, 0x9a, 0x83, 0x45, 0x15, 0x4e, 0x70, 0x4b, 0x76, 0x45, 0x45, 0x24, 0x79, 0x4b, 0xa2, 0xf0, - 0x54, 0xb6, 0x24, 0xc6, 0x4f, 0xbb, 0x25, 0x51, 0x4c, 0x79, 0x4b, 0xe2, 0xe3, 0xb0, 0x73, 0x2a, - 0x71, 0xe7, 0xf4, 0xfe, 0xb0, 0x8e, 0xa0, 0x4f, 0x3d, 0xcf, 0x2a, 0x8e, 0x7c, 0x32, 0x06, 0x33, - 0x71, 0x37, 0x44, 0x3e, 0x80, 0x71, 0x5d, 0xf8, 0x0a, 0xb9, 0x3a, 0xab, 0x0f, 0xed, 0x7c, 0xfb, - 0x3d, 0x8f, 0xcc, 0xa0, 0x05, 0x04, 0x7d, 0x86, 0xe4, 0xc3, 0x0c, 0x94, 0x74, 0xdf, 0x5d, 0xc8, - 0x34, 0x60, 0x68, 0xf6, 0x09, 0xee, 0x47, 0xa4, 0xc5, 0x0a, 0x82, 0x01, 0xd3, 0xf9, 0x9f, 0x8e, - 0x41, 0x39, 0xec, 0x29, 0xbe, 0x1e, 0x9a, 0x6f, 0x31, 0x1e, 0x3f, 0x1f, 0xb2, 0x22, 0xb5, 0x53, - 0x1b, 0x08, 0xc1, 0xb0, 0x99, 0x5d, 0xdd, 0x6e, 0xb0, 0x55, 0x24, 0x9b, 0x9c, 0xc0, 0x63, 0x04, - 0x6d, 0xa1, 0xf0, 0xd2, 0x85, 0x9c, 0xdb, 0xa5, 0xba, 0xfc, 0xdc, 0xcd, 0x34, 0xc2, 0x8a, 0x90, - 0xbd, 0xde, 0xa5, 0x7a, 0xe0, 0x5a, 0xd9, 0x2f, 0xe4, 0x9c, 0xc8, 0x03, 0x28, 0xb8, 0x9e, 0xe6, - 0xf5, 0x5c, 0x99, 0xfb, 0x6c, 0xa5, 0xc8, 0x93, 0xd3, 0x0d, 0xfc, 0xa9, 0xf8, 0x8d, 0x92, 0xdf, - 0xfc, 0xcf, 0x32, 0x30, 0x1d, 0xc2, 0x5e, 0x37, 0x5c, 0x8f, 0xbc, 0xdb, 0x37, 0xc2, 0x0b, 0xa7, - 0x1b, 0x61, 0xd6, 0x9b, 0x8f, 0xaf, 0x32, 0x10, 0xbf, 0x25, 0x34, 0xba, 0x36, 0xe4, 0x0d, 0x8f, - 0x76, 0xdc, 0xca, 0x18, 0x37, 0xd6, 0xb7, 0xd2, 0xfb, 0xd4, 0xda, 0xa4, 0x64, 0x9b, 0x5f, 0x63, - 0x0c, 0x50, 0xf0, 0x99, 0xff, 0xeb, 0xd7, 0x22, 0x9f, 0xc8, 0x86, 0x9d, 0x6f, 0x1d, 0xb3, 0xa6, - 0x5a, 0xcf, 0xdd, 0x0c, 0xa2, 0x5e, 0xb0, 0x75, 0x1c, 0x82, 0x61, 0x04, 0x93, 0x1c, 0x40, 0xd1, - 0xa3, 0x9d, 0xae, 0xa9, 0x79, 0x7e, 0x5a, 0xbc, 0x3a, 0xe4, 0x17, 0xec, 0x48, 0x72, 0xc2, 0xcd, - 0xfb, 0xbf, 0x50, 0xb1, 0x21, 0x1d, 0x18, 0x67, 0xeb, 0x71, 0x43, 0xa7, 0x52, 0x3d, 0x6e, 0x0c, - 0xc9, 0xb1, 0x2e, 0xa8, 0x09, 0x9b, 0x97, 0x3f, 0xd0, 0xe7, 0x41, 0xbe, 0x09, 0xf9, 0x8e, 0x61, - 0x19, 0x36, 0x4f, 0x91, 0xca, 0xd7, 0xef, 0xa5, 0xab, 0xff, 0x0b, 0x1b, 0x8c, 0xb6, 0xf0, 0xa3, - 0x6a, 0xbe, 0x78, 0x1b, 0x0a, 0xb6, 0x7c, 0x93, 0x59, 0x97, 0xeb, 0x43, 0xb9, 0xdc, 0x7c, 0x37, - 0x65, 0x19, 0xd4, 0xf2, 0x33, 0xea, 0xce, 0xfd, 0x66, 0x54, 0xfc, 0xc9, 0x07, 0x90, 0xdb, 0x33, - 0x4c, 0xb6, 0xc4, 0xcc, 0xa6, 0xb0, 0xb1, 0x1c, 0x97, 0xe3, 0x86, 0x61, 0x52, 0x21, 0x43, 0xb0, - 0x19, 0x63, 0x98, 0x14, 0x39, 0x4f, 0x3e, 0x10, 0x0e, 0x15, 0x34, 0x2a, 0xe3, 0x23, 0x19, 0x08, - 0x94, 0xe4, 0x63, 0x03, 0xe1, 0x37, 0xa3, 0xe2, 0x4f, 0x7e, 0x23, 0x13, 0x6c, 0x12, 0x88, 0x9d, - 0xff, 0x77, 0x52, 0x96, 0x45, 0xa6, 0xb6, 0x42, 0x14, 0xb5, 0xee, 0xed, 0xdb, 0x36, 0xf8, 0x00, - 0x72, 0x5a, 0xe7, 0xa0, 0x2b, 0x63, 0x7d, 0xda, 0x33, 0x52, 0xed, 0x1c, 0x74, 0x63, 0x33, 0x52, - 0xdd, 0xd8, 0xde, 0x42, 0xce, 0x93, 0x99, 0xc6, 0xbe, 0xb6, 0xb7, 0xef, 0x27, 0xae, 0x69, 0x9b, - 0xc6, 0x2d, 0x46, 0x3b, 0x66, 0x1a, 0xbc, 0x0d, 0x05, 0x5b, 0xf6, 0xed, 0x9d, 0x03, 0xcf, 0xab, - 0x94, 0x47, 0xf2, 0xed, 0x1b, 0x07, 0x9e, 0x17, 0xfb, 0xf6, 0x8d, 0xed, 0x9d, 0x1d, 0xe4, 0x3c, - 0x19, 0x6f, 0x4b, 0xf3, 0xdc, 0xca, 0xc4, 0x48, 0x78, 0x6f, 0x6a, 0x9e, 0x1b, 0xe3, 0xbd, 0x59, - 0xdd, 0xa9, 0x23, 0xe7, 0x49, 0x0e, 0x21, 0xeb, 0x5a, 0x6e, 0x65, 0x92, 0xb3, 0xbe, 0x9b, 0x32, - 0xeb, 0xba, 0x25, 0x39, 0xab, 0xb3, 0xc9, 0xfa, 0x66, 0x1d, 0x19, 0x43, 0xce, 0xf7, 0xc0, 0xad, - 0x4c, 0x8d, 0x86, 0xef, 0x41, 0x1f, 0xdf, 0x6d, 0xc6, 0xf7, 0xc0, 0x65, 0x09, 0x6e, 0xa1, 0xdb, - 0x6b, 0xd4, 0x7b, 0x8d, 0xca, 0x34, 0xe7, 0xfd, 0xd5, 0x94, 0x79, 0x6f, 0x71, 0xe2, 0x82, 0xbd, - 0x5a, 0x1a, 0x88, 0x46, 0x94, 0x9c, 0xb9, 0x10, 0x82, 0x6b, 0x65, 0x66, 0x24, 0x42, 0xac, 0x72, - 0x6a, 0x31, 0x21, 0x44, 0x23, 0x4a, 0xce, 0xbe, 0x10, 0xa6, 0xd6, 0xa8, 0xcc, 0x8e, 0x4a, 0x08, - 0x53, 0x4b, 0x10, 0xc2, 0xd4, 0x84, 0x10, 0xa6, 0xd6, 0x60, 0xaa, 0xdf, 0x6e, 0xee, 0xb9, 0x15, - 0x32, 0x12, 0xd5, 0xbf, 0xd9, 0xdc, 0x8b, 0xab, 0xfe, 0xcd, 0xe5, 0x1b, 0x75, 0xe4, 0x3c, 0x99, - 0xcb, 0x71, 0x4d, 0x4d, 0xdf, 0xaf, 0x9c, 0x1b, 0x89, 0xcb, 0xa9, 0x33, 0xda, 0x31, 0x97, 0xc3, - 0xdb, 0x50, 0xb0, 0x25, 0x3f, 0xca, 0x40, 0xd9, 0xf5, 0x6c, 0x47, 0x6b, 0xd1, 0x55, 0xc7, 0x68, - 0x56, 0xce, 0xa7, 0x93, 0x62, 0xc5, 0xc5, 0x08, 0x38, 0x08, 0x61, 0x54, 0x7a, 0x1e, 0x82, 0x60, - 0x58, 0x10, 0xf2, 0x27, 0x19, 0x98, 0xd2, 0x22, 0x1b, 0xeb, 0x95, 0x67, 0xb9, 0x6c, 0x8d, 0xb4, - 0x43, 0x42, 0x74, 0xf7, 0x9e, 0x8b, 0xa7, 0xf6, 0x9b, 0xa3, 0x40, 0x8c, 0x49, 0xc4, 0xd5, 0xd7, - 0xf5, 0x1c, 0xa3, 0x4b, 0x2b, 0x17, 0x46, 0xa2, 0xbe, 0x75, 0x4e, 0x3c, 0xa6, 0xbe, 0xa2, 0x11, - 0x25, 0x67, 0x1e, 0xba, 0xa9, 0xc8, 0x69, 0x2b, 0xcf, 0x8d, 0x24, 0x74, 0xfb, 0x19, 0x73, 0x34, - 0x74, 0xcb, 0x56, 0xf4, 0x99, 0x33, 0x5d, 0x76, 0x68, 0xd3, 0x70, 0x2b, 0x95, 0x91, 0xe8, 0x32, - 0x32, 0xda, 0x31, 0x5d, 0xe6, 0x6d, 0x28, 0xd8, 0x32, 0x77, 0x6e, 0xb9, 0x07, 0x95, 0xe7, 0x47, - 0xe2, 0xce, 0x37, 0xdd, 0x83, 0x98, 0x3b, 0xdf, 0xac, 0x6f, 0x23, 0x63, 0x28, 0xdd, 0xb9, 0xe9, - 0x6a, 0x4e, 0x65, 0x6e, 0x44, 0xee, 0x9c, 0x11, 0xef, 0x73, 0xe7, 0xac, 0x11, 0x25, 0x67, 0xae, - 0x05, 0xbc, 0x54, 0xc9, 0xd0, 0x2b, 0x5f, 0x18, 0x89, 0x16, 0xac, 0x0a, 0xea, 0x31, 0x2d, 0x90, - 0xad, 0xe8, 0x33, 0x27, 0x57, 0xd9, 0xaa, 0xb6, 0x6b, 0x1a, 0xba, 0xe6, 0x56, 0x5e, 0xb8, 0x9c, - 0xb9, 0x9a, 0x17, 0x89, 0x0f, 0xca, 0x36, 0x54, 0x50, 0xf2, 0xa7, 0x19, 0x98, 0x8e, 0x1d, 0x49, - 0x54, 0x5e, 0xe4, 0xa2, 0xeb, 0x29, 0x8b, 0x5e, 0x8b, 0x72, 0x11, 0x9f, 0xf0, 0x9c, 0xfc, 0x84, - 0xe9, 0xd8, 0x01, 0x03, 0xc6, 0x85, 0x9a, 0xeb, 0x01, 0x04, 0x69, 0x4d, 0xc2, 0x8e, 0xcf, 0x76, - 0x78, 0xc7, 0xa7, 0x7c, 0xfd, 0x8d, 0x81, 0x77, 0xbf, 0xea, 0xbf, 0x50, 0x75, 0x3c, 0x63, 0x4f, - 0xd3, 0xbd, 0xd0, 0x76, 0xd1, 0xdc, 0x6f, 0x67, 0x60, 0x32, 0x92, 0xca, 0x24, 0xb0, 0x6e, 0x47, - 0x59, 0x63, 0xfa, 0x1b, 0xf7, 0x61, 0x89, 0x7e, 0x33, 0x03, 0x25, 0x95, 0xd4, 0x24, 0x48, 0xd3, - 0x8c, 0x4a, 0x33, 0xec, 0xde, 0x0a, 0x67, 0x95, 0x2c, 0x09, 0x1b, 0x9b, 0x48, 0x76, 0x33, 0xfa, - 0xb1, 0x51, 0xec, 0x92, 0x25, 0xfa, 0x76, 0x06, 0x26, 0xc2, 0x39, 0x4e, 0x82, 0x40, 0x7a, 0x54, - 0xa0, 0x74, 0x8f, 0x61, 0xe3, 0xf3, 0xa4, 0x52, 0x9d, 0xd1, 0xcf, 0x53, 0xac, 0xc8, 0x2b, 0x36, - 0x2a, 0x10, 0xe4, 0x3d, 0x09, 0xa2, 0xd0, 0xa8, 0x28, 0xc3, 0x9e, 0xf2, 0x08, 0x5e, 0xc7, 0x6b, - 0xaf, 0x4a, 0x82, 0x46, 0x3f, 0x2a, 0x2c, 0xb9, 0x3a, 0x46, 0x92, 0xdf, 0xca, 0x40, 0x49, 0xa5, - 0x44, 0xa3, 0x1f, 0x14, 0x96, 0x6a, 0x89, 0x45, 0x4b, 0xbf, 0x28, 0xbf, 0x9e, 0x81, 0xa2, 0x9f, - 0x22, 0x8d, 0x5e, 0x65, 0xeb, 0x9b, 0xf5, 0x63, 0x86, 0x84, 0xcb, 0x71, 0x70, 0x66, 0x72, 0x6c, - 0x1f, 0x27, 0xc7, 0x47, 0x19, 0x28, 0x87, 0xd2, 0xa7, 0x04, 0x51, 0xf6, 0xa2, 0xa2, 0x0c, 0xbb, - 0x99, 0x2b, 0x99, 0x1d, 0x2f, 0x4d, 0x28, 0x8f, 0x1a, 0xbd, 0x34, 0x92, 0xd9, 0x89, 0xd2, 0xf8, - 0x09, 0xd5, 0x99, 0x48, 0xc3, 0x98, 0x1d, 0x6f, 0xce, 0x2a, 0xb9, 0x1a, 0xbd, 0x39, 0xb3, 0xa4, - 0xed, 0x04, 0x27, 0x17, 0x64, 0x5a, 0xa3, 0xb7, 0x67, 0xc1, 0x2b, 0x59, 0x96, 0x1f, 0x66, 0x60, - 0x26, 0x9e, 0x6e, 0x25, 0x48, 0xb4, 0x1f, 0x95, 0x68, 0xd8, 0xda, 0xd5, 0x30, 0xc7, 0x64, 0xb9, - 0xfe, 0x28, 0x03, 0xe7, 0x12, 0x52, 0xad, 0x04, 0xd1, 0xac, 0xa8, 0x68, 0x6f, 0x8f, 0xaa, 0x3a, - 0x2b, 0xae, 0xd9, 0xa1, 0x5c, 0x6b, 0xf4, 0x9a, 0x2d, 0x99, 0x25, 0x4b, 0xf3, 0x71, 0x06, 0x26, - 0xc2, 0x39, 0x57, 0x82, 0x38, 0xad, 0xa8, 0x38, 0xdb, 0xa9, 0x9f, 0x89, 0xc6, 0xf5, 0x3b, 0xc8, - 0xbe, 0x46, 0xaf, 0xdf, 0x82, 0xd7, 0xf1, 0x71, 0xc2, 0xcf, 0xc5, 0x46, 0x1f, 0x27, 0x36, 0xeb, - 0xdb, 0x27, 0xc6, 0x09, 0x95, 0x97, 0x9d, 0x45, 0x9c, 0xe0, 0xcc, 0x8e, 0xd7, 0x98, 0x70, 0x7e, - 0x36, 0x7a, 0x8d, 0xf1, 0xb9, 0x25, 0xcb, 0xf3, 0xc7, 0x19, 0x38, 0x9f, 0x94, 0x74, 0x25, 0xc8, - 0x65, 0x47, 0xe5, 0xba, 0x37, 0xb2, 0x6a, 0xb1, 0xf0, 0x49, 0xbc, 0x07, 0xb3, 0x7d, 0x87, 0xa8, - 0xe4, 0x7d, 0x75, 0x4c, 0x2b, 0x8e, 0x45, 0x7f, 0x79, 0xf0, 0x3c, 0xee, 0xe4, 0xd3, 0xd8, 0x1f, - 0x67, 0x61, 0x3a, 0x96, 0xd3, 0xf0, 0x5a, 0x61, 0xf6, 0x93, 0x5f, 0x71, 0x11, 0xe7, 0x94, 0x41, - 0xad, 0xb0, 0x0f, 0xc0, 0x00, 0x87, 0x7c, 0x92, 0x81, 0xe9, 0xfb, 0x9a, 0xa7, 0xb7, 0xb7, 0x34, - 0xaf, 0x2d, 0x8e, 0xd4, 0x53, 0x8a, 0x70, 0x77, 0xa3, 0x54, 0x83, 0x04, 0x39, 0x06, 0xc0, 0x38, - 0x7f, 0x72, 0x0d, 0xc6, 0xbb, 0xb6, 0x69, 0x1a, 0x56, 0x4b, 0x56, 0x48, 0xab, 0xed, 0x81, 0x2d, - 0xd1, 0x8c, 0x3e, 0x3c, 0x7a, 0xc7, 0x24, 0x97, 0xca, 0xa9, 0x57, 0x6c, 0x48, 0xcf, 0xaa, 0x9a, - 0xe3, 0xa7, 0x59, 0x20, 0xfd, 0x56, 0xf0, 0xb8, 0xfb, 0x50, 0x57, 0xa0, 0xa0, 0x07, 0x93, 0x16, - 0xaa, 0x84, 0x92, 0x63, 0x2b, 0xa1, 0xa2, 0x5a, 0xd0, 0xa5, 0x7a, 0xcf, 0xa1, 0xfd, 0x45, 0xf7, - 0xa2, 0x1d, 0x15, 0x46, 0xa4, 0x56, 0x27, 0xf7, 0xd8, 0x5a, 0x9d, 0x8f, 0xfb, 0x2b, 0xfe, 0xde, - 0x4f, 0xdd, 0x1d, 0x0c, 0x50, 0xf0, 0xb7, 0xcb, 0x6b, 0xec, 0xdb, 0x4f, 0x52, 0x35, 0x3b, 0x25, - 0xcb, 0xf0, 0x65, 0x67, 0x0c, 0x11, 0x1a, 0x6e, 0x76, 0xff, 0xa0, 0x04, 0xb3, 0x7d, 0x8b, 0x61, - 0x32, 0x07, 0x63, 0x86, 0xa8, 0xdd, 0xcb, 0xd6, 0x40, 0x7e, 0xd1, 0xd8, 0xda, 0x32, 0x8e, 0x19, - 0xcd, 0x70, 0x99, 0xf5, 0xd8, 0xd9, 0x95, 0x59, 0xbf, 0x02, 0x79, 0xfb, 0xbe, 0x45, 0x1d, 0x59, - 0xf7, 0xa6, 0x6c, 0x76, 0x99, 0x76, 0x1d, 0xaa, 0x6b, 0x1e, 0x6d, 0xde, 0x66, 0x60, 0x14, 0x58, - 0xe4, 0x57, 0x00, 0x82, 0x9a, 0x69, 0x59, 0x1c, 0xfa, 0x82, 0xec, 0x73, 0x3e, 0xe8, 0x13, 0xd4, - 0x59, 0x63, 0x08, 0x3f, 0x54, 0x5f, 0x9d, 0x3f, 0xb6, 0xbe, 0xfa, 0x36, 0x14, 0xb5, 0xae, 0x21, - 0x8a, 0xab, 0x0b, 0x03, 0x97, 0xc1, 0x55, 0xb7, 0xd6, 0x44, 0x65, 0xb5, 0x22, 0xd2, 0x5f, 0x56, - 0x3d, 0x9e, 0x6e, 0x59, 0x75, 0xd8, 0xd2, 0x8a, 0x8f, 0xb5, 0xb4, 0x2b, 0x50, 0xd0, 0x74, 0xcf, - 0x38, 0xa4, 0xb2, 0x40, 0x5a, 0xd9, 0x6f, 0x95, 0xb7, 0xa2, 0x84, 0xca, 0x0b, 0xa1, 0x9e, 0xef, - 0xd9, 0xa1, 0xef, 0x42, 0xa8, 0x0f, 0xc2, 0x30, 0x1e, 0x79, 0x03, 0x26, 0x85, 0xd2, 0xf8, 0xa5, - 0xdd, 0x65, 0xde, 0xf1, 0x59, 0xd9, 0x71, 0x72, 0x35, 0x0c, 0xc4, 0x28, 0x2e, 0xa9, 0xc2, 0xb4, - 0x68, 0xd8, 0xed, 0x9a, 0xb6, 0xd6, 0x64, 0xdd, 0x27, 0xa2, 0x5a, 0xb1, 0x1a, 0x05, 0x63, 0x1c, - 0xff, 0x98, 0x5a, 0xf0, 0xc9, 0x27, 0xaa, 0x05, 0xff, 0x6e, 0xd8, 0xcd, 0x88, 0x43, 0xd6, 0xf7, - 0xd2, 0x4e, 0x4f, 0x07, 0xf0, 0x32, 0xdf, 0xc9, 0xc0, 0x84, 0xd2, 0x65, 0x83, 0xba, 0xf2, 0xec, - 0x75, 0xd8, 0x75, 0x19, 0x33, 0xaf, 0xc0, 0x5e, 0x0c, 0xea, 0x06, 0x75, 0x46, 0xe1, 0x56, 0x8c, - 0xf0, 0x1e, 0xce, 0x37, 0xfd, 0x6b, 0x81, 0xfb, 0xa6, 0x68, 0x6a, 0xfc, 0x94, 0xae, 0x79, 0x7c, - 0x09, 0x4a, 0xf2, 0x02, 0xc7, 0xda, 0xb2, 0x0c, 0x69, 0x5f, 0x90, 0xdf, 0x7f, 0x2e, 0xf0, 0x27, - 0x5b, 0x3e, 0x0a, 0x06, 0xd8, 0x21, 0x6f, 0x92, 0x3d, 0xed, 0x6d, 0x8d, 0x5c, 0x7a, 0xb7, 0x35, - 0xea, 0xf0, 0xac, 0xa8, 0xb5, 0xae, 0xd7, 0xd7, 0xef, 0x50, 0xc7, 0xd8, 0x33, 0x74, 0x51, 0x6a, - 0x2d, 0xae, 0x60, 0xbd, 0x28, 0x3f, 0xe2, 0xd9, 0x95, 0x24, 0x24, 0x4c, 0xee, 0x2b, 0xcd, 0xd7, - 0xd4, 0x94, 0xf9, 0x16, 0xfa, 0xcc, 0x37, 0x00, 0x62, 0x14, 0xf7, 0x18, 0xdb, 0x2b, 0x0e, 0x6f, - 0x7b, 0xa5, 0xb4, 0x6c, 0x2f, 0xaa, 0x71, 0x03, 0xd8, 0xde, 0x55, 0x28, 0xca, 0x79, 0x77, 0x79, - 0x71, 0x4d, 0x49, 0x16, 0x3d, 0xcb, 0x36, 0x54, 0x50, 0x36, 0xe1, 0x2e, 0x9f, 0x49, 0x31, 0xe1, - 0xe5, 0x81, 0x27, 0xbc, 0x1e, 0xf4, 0xc6, 0x30, 0xa9, 0xe1, 0x4c, 0xee, 0xcf, 0x8a, 0x30, 0x1d, - 0xdb, 0x01, 0x4a, 0x5c, 0x89, 0x67, 0x9e, 0xf2, 0x4a, 0xfc, 0x32, 0xe4, 0x3c, 0x16, 0x6f, 0xc6, - 0xa2, 0x75, 0xfe, 0x3c, 0xd0, 0x70, 0x08, 0x53, 0x51, 0xbd, 0x4d, 0xf5, 0x7d, 0xff, 0xce, 0x89, - 0x5c, 0x38, 0x28, 0x15, 0x5d, 0x0a, 0x03, 0x31, 0x8a, 0x4b, 0x7e, 0x0e, 0x4a, 0x5a, 0xb3, 0xe9, - 0x50, 0xd7, 0xa5, 0xfe, 0x1d, 0x2b, 0x5e, 0xda, 0x5b, 0xf5, 0x1b, 0x31, 0x80, 0xb3, 0xc0, 0xda, - 0x6e, 0xee, 0xb9, 0xbb, 0x2e, 0x75, 0xb8, 0x51, 0x85, 0xae, 0xa1, 0xb0, 0xa1, 0x64, 0xed, 0xa8, - 0x30, 0x48, 0x13, 0xa6, 0xf7, 0x9d, 0xc6, 0xd2, 0x92, 0xa6, 0xb7, 0xe9, 0x93, 0xac, 0x04, 0xf9, - 0x4d, 0xc1, 0x5b, 0x51, 0x0a, 0x18, 0x27, 0x29, 0xb9, 0xdc, 0xa2, 0x47, 0x9e, 0xd6, 0x78, 0x92, - 0xe5, 0x84, 0xcf, 0x25, 0x4c, 0x01, 0xe3, 0x24, 0x59, 0xf0, 0xdf, 0x77, 0x1a, 0xfe, 0x1d, 0x01, - 0x79, 0x3d, 0x4b, 0x05, 0xff, 0x5b, 0x01, 0x08, 0xc3, 0x78, 0x6c, 0xc0, 0xf6, 0x9d, 0x06, 0x52, - 0xcd, 0xec, 0xf0, 0xd5, 0x45, 0x68, 0xc0, 0x6e, 0xc9, 0x76, 0x54, 0x18, 0xa4, 0x0b, 0x84, 0x7d, - 0x1d, 0x9f, 0x77, 0x55, 0x5a, 0x2d, 0xef, 0xa2, 0x5f, 0x4d, 0xfa, 0x1a, 0x85, 0x14, 0xfe, 0xa0, - 0x0b, 0xcc, 0xa9, 0xdc, 0xea, 0xa3, 0x83, 0x09, 0xb4, 0xc9, 0x3d, 0x78, 0x6e, 0xdf, 0x69, 0xc8, - 0x8a, 0xd2, 0x2d, 0xc7, 0xb0, 0x74, 0xa3, 0xab, 0x89, 0x5b, 0x17, 0x62, 0x99, 0x72, 0x49, 0x8a, - 0xfb, 0xdc, 0xad, 0x64, 0x34, 0x3c, 0xae, 0x7f, 0x34, 0x2d, 0x9c, 0x48, 0x25, 0x2d, 0x8c, 0x99, - 0xeb, 0x59, 0xa5, 0x85, 0x7f, 0x9b, 0x01, 0xc2, 0x4f, 0xa1, 0xfc, 0x47, 0x3f, 0x56, 0x1d, 0xbb, - 0xd7, 0x65, 0x79, 0x7e, 0x8b, 0xfd, 0x11, 0xaa, 0x47, 0x56, 0x79, 0xfe, 0xaa, 0x0f, 0xc0, 0x00, - 0x87, 0x2d, 0x34, 0x6d, 0xb3, 0x49, 0xd5, 0x2d, 0x1c, 0xb5, 0xd0, 0xbc, 0xcd, 0x5b, 0x51, 0x42, - 0xc9, 0x2a, 0xcc, 0x3a, 0xb4, 0xa1, 0x99, 0x9a, 0xa5, 0xd3, 0xba, 0xe7, 0x68, 0x1e, 0x6d, 0x1d, - 0x49, 0x9b, 0x7e, 0x5e, 0x76, 0x99, 0xc5, 0x38, 0x02, 0xf6, 0xf7, 0x99, 0xff, 0xbb, 0x71, 0x98, - 0x89, 0x1f, 0x9f, 0x3d, 0x2e, 0x9b, 0x5d, 0x84, 0x52, 0x57, 0x73, 0x3c, 0x23, 0x74, 0x47, 0x49, - 0x7d, 0xd5, 0x96, 0x0f, 0xc0, 0x00, 0x87, 0xbc, 0x04, 0x79, 0xcf, 0xee, 0x1a, 0xba, 0x94, 0x50, - 0x15, 0x72, 0xec, 0xb0, 0x46, 0x14, 0xb0, 0xe4, 0x8b, 0x2f, 0xb9, 0x33, 0xbb, 0xf8, 0x22, 0xaf, - 0xb2, 0xe4, 0x53, 0xbe, 0xca, 0x32, 0xd8, 0x13, 0x1f, 0x1f, 0x85, 0x0d, 0x42, 0x54, 0x07, 0x7f, - 0x2d, 0xe5, 0xb3, 0xd1, 0xc1, 0xd6, 0xce, 0x93, 0x7a, 0x58, 0x9f, 0xe5, 0x45, 0x9f, 0xed, 0x34, - 0x44, 0x8a, 0x18, 0x8a, 0x48, 0xd8, 0x22, 0x4d, 0x18, 0x65, 0x4d, 0xb6, 0xe0, 0xbc, 0x69, 0x74, - 0x0c, 0x4f, 0x2c, 0x15, 0xb7, 0xa8, 0x53, 0xa7, 0xba, 0x6d, 0x35, 0xb9, 0xcb, 0xcc, 0x06, 0xd9, - 0xec, 0x7a, 0x02, 0x0e, 0x26, 0xf6, 0x24, 0xd7, 0x60, 0xfc, 0x90, 0x3a, 0x2e, 0x53, 0x62, 0x88, - 0xde, 0x1f, 0xbf, 0x23, 0x9a, 0xd1, 0x87, 0x93, 0x7b, 0x90, 0x73, 0x35, 0xd7, 0x94, 0x0b, 0x93, - 0x27, 0x28, 0xf5, 0xa8, 0xd6, 0xd7, 0xa5, 0x7a, 0xf0, 0x57, 0x27, 0xd8, 0x6f, 0xe4, 0x24, 0x87, - 0x73, 0x3b, 0xff, 0x90, 0x83, 0xe9, 0xd8, 0x89, 0xf3, 0xe3, 0x8c, 0x57, 0xd9, 0xe2, 0xd8, 0x09, - 0xb6, 0xf8, 0x32, 0x14, 0x75, 0xd3, 0xa0, 0x96, 0xb7, 0xd6, 0x94, 0x36, 0x1b, 0xd4, 0xd3, 0x8b, - 0xf6, 0x65, 0x54, 0x18, 0x4f, 0xdb, 0x72, 0xc3, 0x26, 0x96, 0x3f, 0xed, 0x95, 0xb5, 0xc2, 0x28, - 0x5f, 0xd1, 0x49, 0xa7, 0xae, 0x3f, 0x36, 0xb1, 0x67, 0x15, 0xca, 0x7e, 0x3c, 0x06, 0xc5, 0xcd, - 0xea, 0x4e, 0xbd, 0xda, 0xf3, 0xda, 0xe4, 0x1d, 0xc8, 0x37, 0x34, 0xd7, 0xd0, 0xe5, 0x12, 0x77, - 0x98, 0xe7, 0x56, 0x4a, 0x4c, 0xcb, 0xf8, 0x4f, 0x14, 0x34, 0xc9, 0x0d, 0xa6, 0x8a, 0x6c, 0xbd, - 0x3f, 0xd0, 0x53, 0x14, 0x25, 0xa1, 0xad, 0x6c, 0xa5, 0x2f, 0xba, 0x93, 0x25, 0xc8, 0x59, 0xfb, - 0x83, 0xbe, 0x31, 0xc1, 0xed, 0x70, 0xf3, 0x16, 0x3d, 0x42, 0xde, 0x99, 0xec, 0x02, 0xe8, 0x0e, - 0x6d, 0x52, 0xcb, 0x33, 0xe4, 0xdb, 0x59, 0x83, 0x6d, 0x47, 0x2e, 0xa9, 0xce, 0x18, 0x22, 0x34, - 0xff, 0x3b, 0x79, 0x98, 0x89, 0x57, 0x62, 0x3c, 0xce, 0x44, 0xaf, 0xc1, 0xb8, 0xdb, 0xe3, 0x97, - 0xd8, 0xa4, 0x91, 0x2a, 0xc7, 0x54, 0x17, 0xcd, 0xe8, 0xc3, 0x93, 0x4d, 0x2f, 0xfb, 0x54, 0x4c, - 0x2f, 0x77, 0x5a, 0xd3, 0x4b, 0x3b, 0xc4, 0x46, 0x82, 0x66, 0x21, 0x95, 0xa0, 0x19, 0x9f, 0xb1, - 0x01, 0x82, 0x26, 0x95, 0xef, 0x13, 0x8d, 0xa7, 0x72, 0x8f, 0xcc, 0x37, 0xc4, 0xf8, 0x63, 0x45, - 0xc3, 0x99, 0xf8, 0xbf, 0xe4, 0x60, 0x2a, 0x7a, 0xc8, 0xc9, 0x92, 0x97, 0xb6, 0xed, 0x7a, 0x32, - 0xa5, 0x8b, 0x3f, 0x65, 0x77, 0x33, 0x00, 0x61, 0x18, 0xef, 0x74, 0xd1, 0xe4, 0x1a, 0x8c, 0xcb, - 0x3b, 0xd8, 0x32, 0x98, 0x28, 0x7d, 0x96, 0xf7, 0xb4, 0xd1, 0x87, 0xff, 0x5f, 0x28, 0x31, 0x5d, - 0xf2, 0xed, 0xfe, 0x50, 0xf2, 0x4e, 0xaa, 0x27, 0xda, 0x67, 0x15, 0x49, 0xee, 0xc1, 0x6c, 0xdf, - 0x3e, 0x29, 0xd3, 0x18, 0x71, 0x74, 0x91, 0x89, 0x6a, 0x4c, 0xe4, 0xc0, 0xe2, 0x12, 0xe4, 0x59, - 0x6e, 0x2c, 0xee, 0x93, 0x96, 0x84, 0xcb, 0x67, 0xf9, 0x91, 0x8b, 0xa2, 0x7d, 0xfe, 0xaf, 0xf2, - 0x30, 0xdb, 0x57, 0x43, 0xc5, 0x13, 0x13, 0xb5, 0x2d, 0x19, 0x4b, 0xb7, 0x12, 0x37, 0x23, 0xdf, - 0x84, 0x29, 0xae, 0xa2, 0x5b, 0xb1, 0xcd, 0x4c, 0x75, 0x15, 0x60, 0x27, 0x02, 0xc5, 0x18, 0xf6, - 0xe9, 0x12, 0x9b, 0x37, 0x61, 0xca, 0xed, 0x35, 0x5c, 0xdd, 0x31, 0xba, 0x4c, 0xd7, 0xd6, 0x96, - 0xe5, 0x09, 0x8c, 0x62, 0x52, 0x8f, 0x40, 0x31, 0x86, 0x4d, 0x5a, 0xfc, 0x8d, 0x06, 0x19, 0x50, - 0xe4, 0xf6, 0xc5, 0x40, 0x4f, 0x0d, 0x9c, 0x97, 0xcf, 0x38, 0x44, 0x48, 0x60, 0x1f, 0x51, 0xd2, - 0x80, 0x39, 0xb1, 0xa9, 0x18, 0x16, 0x48, 0x6d, 0x49, 0x8a, 0xec, 0x65, 0x5e, 0x0a, 0x3d, 0xb7, - 0x7c, 0x2c, 0x26, 0x9e, 0x40, 0x65, 0xc0, 0xf7, 0x05, 0xbe, 0xdb, 0xff, 0x36, 0xe1, 0x7b, 0x69, - 0x57, 0xde, 0x9d, 0x95, 0x35, 0xfc, 0xe3, 0x38, 0x53, 0xd9, 0x58, 0x39, 0x07, 0x99, 0x87, 0x02, - 0xd7, 0x12, 0xe6, 0x72, 0xd5, 0x76, 0x38, 0x57, 0x1f, 0x17, 0x25, 0xe4, 0x14, 0xdb, 0x7b, 0x72, - 0x41, 0x91, 0x3d, 0x66, 0x41, 0xd1, 0x85, 0x73, 0x9e, 0xe9, 0xee, 0x38, 0x3d, 0xd7, 0x5b, 0xa2, - 0x8e, 0xe7, 0x4a, 0x25, 0xca, 0x0d, 0xfc, 0x02, 0xd8, 0xce, 0x7a, 0x3d, 0x4e, 0x05, 0x93, 0x48, - 0x33, 0x55, 0xf2, 0x4c, 0xb7, 0x6a, 0x9a, 0xf6, 0x7d, 0xff, 0x38, 0x2d, 0x70, 0xc0, 0xd2, 0xb5, - 0x2a, 0x55, 0xda, 0x59, 0xaf, 0x1f, 0x83, 0x89, 0x27, 0x50, 0x21, 0x1b, 0xfc, 0xab, 0xee, 0x68, - 0xa6, 0xd1, 0xd4, 0x3c, 0xca, 0x42, 0x14, 0xdf, 0x77, 0x13, 0x7a, 0xaa, 0x8e, 0x23, 0x76, 0xd6, - 0xeb, 0x71, 0x14, 0x4c, 0xea, 0x37, 0xaa, 0xe7, 0x35, 0x13, 0x23, 0x5a, 0xf1, 0xa9, 0x44, 0xb4, - 0xd2, 0x60, 0xf6, 0x06, 0x29, 0xd9, 0x5b, 0x4c, 0xe5, 0x07, 0x58, 0x4b, 0x35, 0x61, 0x9a, 0x2d, - 0x76, 0xf8, 0x62, 0x5f, 0xea, 0x6c, 0x79, 0xe0, 0x7d, 0xdb, 0x6a, 0x94, 0x02, 0xc6, 0x49, 0x0e, - 0x67, 0xd5, 0x7f, 0x93, 0x83, 0x99, 0x78, 0xe5, 0xda, 0x93, 0x2e, 0xa6, 0xc2, 0x6f, 0xc9, 0x8c, - 0xa5, 0xf1, 0x96, 0xcc, 0x22, 0x94, 0x78, 0xb8, 0xec, 0x6a, 0xba, 0xff, 0x44, 0x8e, 0x8a, 0x87, - 0x9b, 0x3e, 0x00, 0x03, 0x1c, 0x32, 0x07, 0x63, 0xcd, 0x06, 0xf7, 0x0b, 0xf9, 0xa0, 0xd2, 0x61, - 0xb9, 0x86, 0x63, 0xcd, 0x06, 0xb9, 0x0a, 0x45, 0xb9, 0x4a, 0xf3, 0x0b, 0x01, 0x38, 0x5b, 0xb9, - 0x84, 0x73, 0x51, 0x41, 0x47, 0xb5, 0x2e, 0x1a, 0xc1, 0xe6, 0x58, 0x7c, 0xe6, 0xce, 0xac, 0x8a, - 0x28, 0x07, 0xe7, 0x12, 0x6e, 0x96, 0x44, 0x27, 0x2c, 0x73, 0x8a, 0x09, 0x3b, 0x80, 0xc2, 0x9e, - 0x61, 0x7a, 0xd4, 0x49, 0xa9, 0xfa, 0xc4, 0x17, 0xea, 0x06, 0x27, 0x2a, 0xa2, 0x91, 0xf8, 0x1b, - 0x25, 0x23, 0xe6, 0x23, 0xce, 0xf3, 0x0d, 0x6b, 0x7f, 0x97, 0xcc, 0x7f, 0xcd, 0x20, 0x2b, 0xe7, - 0xfb, 0x54, 0xcf, 0x8a, 0xac, 0x26, 0x50, 0x08, 0x76, 0xf1, 0x92, 0xa0, 0x98, 0xc8, 0x95, 0x2c, - 0x01, 0xa8, 0x32, 0x39, 0xff, 0x74, 0xea, 0x25, 0x96, 0x90, 0xab, 0x3a, 0x3a, 0xf7, 0xbf, 0xf8, - 0x66, 0x78, 0x68, 0xb4, 0x79, 0xe4, 0x0c, 0x75, 0x1b, 0xc5, 0x6b, 0x68, 0x09, 0xd3, 0x7b, 0x56, - 0xda, 0xf5, 0x17, 0x59, 0x98, 0x8a, 0x4e, 0x24, 0xb9, 0x02, 0x85, 0xae, 0x43, 0xf7, 0x8c, 0x07, - 0xf1, 0xa7, 0xb8, 0xb6, 0x78, 0x2b, 0x4a, 0x28, 0xb1, 0xa1, 0x60, 0x6a, 0x0d, 0x66, 0xe2, 0xe2, - 0x25, 0x97, 0xd5, 0xa1, 0x5f, 0x25, 0xf1, 0xf7, 0x48, 0x7c, 0x86, 0xeb, 0x9c, 0x3c, 0x4a, 0x36, - 0x8c, 0xe1, 0x9e, 0x41, 0xcd, 0xa6, 0x28, 0x07, 0x18, 0x05, 0xc3, 0x1b, 0x9c, 0x3c, 0x4a, 0x36, - 0xe4, 0x1d, 0x28, 0x89, 0xf7, 0xcb, 0x9a, 0xb5, 0x23, 0xb9, 0x02, 0xfa, 0xff, 0xa7, 0x53, 0xd9, - 0x1d, 0xa3, 0x43, 0x03, 0x73, 0x5c, 0xf2, 0x89, 0x60, 0x40, 0x8f, 0xbf, 0x1b, 0xbb, 0xe7, 0x51, - 0xa7, 0xee, 0x69, 0x8e, 0xff, 0xac, 0x6b, 0xf0, 0x6e, 0xac, 0x82, 0x60, 0x08, 0x6b, 0xfe, 0xef, - 0xf3, 0x30, 0x15, 0xbd, 0x21, 0xf3, 0x94, 0x8a, 0x3a, 0x5e, 0x86, 0x22, 0x5f, 0x70, 0x56, 0x1d, - 0x2b, 0xfe, 0x54, 0xe1, 0x8e, 0x6c, 0x47, 0x85, 0x41, 0x10, 0x4a, 0xda, 0x93, 0xbd, 0xee, 0x2a, - 0xce, 0x8e, 0xd5, 0xbb, 0xae, 0x01, 0x19, 0x46, 0xd3, 0xf5, 0xd1, 0x07, 0x5b, 0x9d, 0x72, 0x9a, - 0xaa, 0x19, 0x03, 0x32, 0x4c, 0xf3, 0x1d, 0xda, 0xf2, 0x57, 0x9d, 0x21, 0xcd, 0x47, 0xde, 0x8a, - 0x12, 0x4a, 0xae, 0xc1, 0xb8, 0x63, 0x9b, 0xb4, 0x8a, 0x9b, 0xb2, 0x7c, 0x43, 0x6d, 0x52, 0xa0, - 0x68, 0x46, 0x1f, 0x3e, 0x8a, 0x04, 0x3d, 0xaa, 0x00, 0x03, 0x2c, 0x91, 0x56, 0x61, 0xf6, 0x50, - 0xae, 0x64, 0xeb, 0x46, 0xcb, 0xd2, 0xbc, 0xa0, 0xa0, 0x4d, 0x1d, 0x04, 0xde, 0x89, 0x23, 0x60, - 0x7f, 0x9f, 0xe1, 0x3c, 0xce, 0x9f, 0x33, 0x1d, 0x8e, 0xdc, 0xae, 0x8a, 0xea, 0x47, 0x66, 0x04, - 0xfa, 0x31, 0x96, 0xb6, 0x7e, 0x64, 0x4f, 0xd4, 0x8f, 0x97, 0x20, 0xcf, 0x5f, 0x3f, 0x97, 0xc9, - 0xbb, 0x4a, 0xf5, 0xf9, 0x53, 0xd4, 0x28, 0x60, 0xa4, 0x0a, 0xd3, 0xf7, 0x35, 0xc3, 0x63, 0x9e, - 0x42, 0x1c, 0x32, 0x89, 0xdd, 0xce, 0x6c, 0xb8, 0x96, 0x23, 0x02, 0xc6, 0x38, 0xfe, 0x20, 0x7a, - 0x38, 0x58, 0x2e, 0xfd, 0x26, 0x4c, 0x71, 0x21, 0xab, 0xba, 0x6e, 0xf7, 0xf8, 0xc9, 0x4e, 0x31, - 0xba, 0x0d, 0xb1, 0x1d, 0x86, 0x2e, 0x63, 0x0c, 0x3b, 0xaa, 0xf5, 0xa5, 0x74, 0xb4, 0x7e, 0xfb, - 0x69, 0x9c, 0xd5, 0x7f, 0x0b, 0x8a, 0xbe, 0x5e, 0xb0, 0xc4, 0x59, 0xf5, 0x0b, 0x12, 0x67, 0xa6, - 0x22, 0x9c, 0xc8, 0x22, 0x94, 0xec, 0x2e, 0x8d, 0xbc, 0xc6, 0xa9, 0x02, 0xc0, 0x6d, 0x1f, 0x80, - 0x01, 0x0e, 0xd3, 0x12, 0xc1, 0x35, 0xb6, 0x21, 0x74, 0x87, 0x35, 0x4a, 0x21, 0xe6, 0x3f, 0xcc, - 0x80, 0xff, 0x42, 0x17, 0x59, 0x86, 0x7c, 0xd7, 0x76, 0x3c, 0x91, 0xfe, 0x97, 0xaf, 0x5f, 0x4a, - 0x56, 0x67, 0x51, 0x3b, 0x61, 0x3b, 0x5e, 0x40, 0x91, 0xfd, 0x72, 0x51, 0x74, 0x66, 0x72, 0xea, - 0x66, 0xcf, 0xf5, 0xa8, 0xb3, 0xb6, 0x15, 0x97, 0x73, 0xc9, 0x07, 0x60, 0x80, 0x33, 0xff, 0xdf, - 0x59, 0x98, 0x89, 0x5f, 0x28, 0x23, 0xef, 0xc1, 0xa4, 0x6b, 0xb4, 0x2c, 0xc3, 0x6a, 0xc9, 0x64, - 0x2b, 0x33, 0x70, 0xcd, 0x6d, 0x3d, 0xdc, 0x1f, 0xa3, 0xe4, 0x52, 0x3b, 0xef, 0x09, 0x85, 0xc7, - 0xec, 0xd9, 0x85, 0xc7, 0x8f, 0xfa, 0xef, 0x30, 0x7c, 0x2d, 0xe5, 0x2b, 0x7d, 0x67, 0x65, 0x01, - 0xff, 0x9e, 0x87, 0x0b, 0xc9, 0x97, 0xf7, 0x9e, 0xd2, 0xd2, 0x23, 0x28, 0x0a, 0x1d, 0x3b, 0xb6, - 0x28, 0xd4, 0x53, 0xa9, 0x4e, 0x36, 0xa5, 0xcb, 0x78, 0x6a, 0x00, 0x4e, 0xc8, 0x76, 0xc2, 0x8b, - 0xa2, 0xdc, 0x63, 0x17, 0x45, 0x57, 0xa0, 0x20, 0xee, 0x21, 0xc5, 0x17, 0x1b, 0x35, 0xde, 0x8a, - 0x12, 0x1a, 0x0a, 0x3a, 0x85, 0x13, 0x83, 0x0e, 0x0b, 0xa2, 0xfe, 0x6e, 0xc5, 0x60, 0x25, 0x6b, - 0x22, 0x88, 0xfa, 0x7d, 0x31, 0x20, 0xc3, 0x6b, 0xd9, 0xbb, 0x46, 0xf0, 0x80, 0x78, 0x50, 0xcb, - 0xbe, 0xb5, 0xb6, 0x8b, 0xeb, 0x28, 0xa1, 0xe4, 0x93, 0x7e, 0x7f, 0xaf, 0x8f, 0xe4, 0xc2, 0xe8, - 0x59, 0x69, 0xbd, 0x0e, 0xb3, 0x7d, 0x73, 0x7e, 0xea, 0xc4, 0xe8, 0x0a, 0x14, 0xdc, 0xde, 0x1e, - 0xc3, 0x8b, 0xdd, 0xe0, 0xa9, 0xf3, 0x56, 0x94, 0xd0, 0xf9, 0xef, 0xe7, 0x18, 0x97, 0xd8, 0x35, - 0xcf, 0xa7, 0x64, 0x55, 0x6f, 0xc0, 0xa4, 0x48, 0x4d, 0xee, 0x86, 0x6e, 0xa8, 0x14, 0x43, 0x45, - 0x9f, 0x61, 0x20, 0x46, 0x71, 0xc9, 0x1a, 0x57, 0x93, 0x81, 0x17, 0xf7, 0x20, 0x35, 0x89, 0x85, - 0x50, 0x49, 0x80, 0xbc, 0x0a, 0x65, 0xfe, 0x11, 0x62, 0xc8, 0x65, 0x8e, 0xce, 0xcb, 0x76, 0x57, - 0x82, 0x66, 0x0c, 0xe3, 0x44, 0x37, 0x22, 0xf3, 0xa9, 0x6c, 0x44, 0xf6, 0xcd, 0xca, 0x59, 0xe9, - 0xdd, 0xf7, 0x8a, 0xa0, 0x5e, 0x00, 0x25, 0x7a, 0xdf, 0x3b, 0xac, 0x5f, 0x1a, 0x78, 0x83, 0xcc, - 0x17, 0x45, 0x6c, 0xc0, 0x25, 0x24, 0x05, 0x6f, 0x01, 0x91, 0x0f, 0x7f, 0xca, 0xe5, 0x5b, 0xe8, - 0x9f, 0x70, 0xa9, 0x9a, 0xf2, 0x7a, 0x1f, 0x06, 0x26, 0xf4, 0x22, 0x6f, 0xf1, 0xc7, 0x82, 0x3d, - 0xcd, 0xb0, 0x94, 0xe7, 0x7d, 0xf1, 0x98, 0x3a, 0x53, 0x81, 0xa4, 0x9e, 0xfd, 0x15, 0x3f, 0x31, - 0xe8, 0x4e, 0x56, 0x60, 0xfc, 0xd0, 0x36, 0x7b, 0x1d, 0xb9, 0x51, 0x53, 0xbe, 0x3e, 0x97, 0x44, - 0xe9, 0x0e, 0x47, 0x09, 0x55, 0x63, 0x89, 0x2e, 0xe8, 0xf7, 0x25, 0x14, 0xa6, 0xf9, 0x61, 0x80, - 0xe1, 0x1d, 0x49, 0x03, 0x90, 0xe7, 0x61, 0x57, 0x92, 0xc8, 0x6d, 0xd9, 0xcd, 0x7a, 0x14, 0x5b, - 0xfe, 0x7f, 0x91, 0x68, 0x23, 0xc6, 0x69, 0x92, 0x1b, 0x50, 0xd4, 0xf6, 0xf6, 0x0c, 0xcb, 0xf0, - 0x8e, 0xe4, 0x5e, 0xe6, 0x0b, 0x49, 0xf4, 0xab, 0x12, 0x47, 0x5e, 0x65, 0x92, 0xbf, 0x50, 0xf5, - 0x25, 0xbb, 0x50, 0xf6, 0x6c, 0x53, 0xae, 0x10, 0x5d, 0x99, 0x30, 0x5e, 0x4c, 0x22, 0xb5, 0xa3, - 0xd0, 0x82, 0xdd, 0xe2, 0xa0, 0xcd, 0xc5, 0x30, 0x1d, 0xf2, 0xbb, 0x19, 0x98, 0xb0, 0xec, 0x26, - 0xf5, 0x4d, 0x4f, 0x9e, 0x8f, 0xdd, 0x4b, 0xe9, 0xe5, 0xda, 0x85, 0xcd, 0x10, 0x6d, 0x61, 0x21, - 0xea, 0x8a, 0x4b, 0x18, 0x84, 0x11, 0x21, 0x88, 0x05, 0x33, 0x46, 0x47, 0x6b, 0xd1, 0xad, 0x9e, - 0x29, 0x8f, 0x15, 0x5d, 0x19, 0x3c, 0x12, 0xab, 0x93, 0xf9, 0x7f, 0xa2, 0x13, 0x0f, 0x36, 0x23, - 0xdd, 0xa3, 0x0e, 0x7f, 0x37, 0x5a, 0x3d, 0x3d, 0xbf, 0x16, 0xa3, 0x84, 0x7d, 0xb4, 0x59, 0xfe, - 0xdb, 0x75, 0x0c, 0x9b, 0xcf, 0x9b, 0xa9, 0xb9, 0xe2, 0xe5, 0x5f, 0x88, 0x16, 0xc2, 0x6e, 0xc5, - 0x11, 0xb0, 0xbf, 0x8f, 0xb8, 0xac, 0x20, 0x1a, 0xf9, 0x21, 0x43, 0xde, 0xbf, 0xac, 0x20, 0xda, - 0x50, 0x41, 0xe7, 0xbe, 0x02, 0xb3, 0x7d, 0x63, 0x33, 0x90, 0x43, 0xf8, 0xfd, 0x0c, 0xc4, 0x6b, - 0xfa, 0xd9, 0x0a, 0xbe, 0x69, 0x38, 0x9c, 0xe0, 0x51, 0x7c, 0xe7, 0x77, 0xd9, 0x07, 0x60, 0x80, - 0x43, 0x2e, 0x43, 0xae, 0xab, 0x79, 0xed, 0xf8, 0xa1, 0x20, 0x23, 0x89, 0x1c, 0xc2, 0xff, 0x17, - 0x0b, 0xfb, 0x45, 0x5b, 0xf4, 0x41, 0x57, 0x26, 0x24, 0xc1, 0xff, 0x62, 0x51, 0x10, 0x0c, 0x61, - 0xcd, 0xff, 0x28, 0x0f, 0x53, 0xd1, 0xd8, 0xc2, 0x56, 0x40, 0xd4, 0x6a, 0x76, 0x6d, 0xc3, 0xf2, - 0xe2, 0xff, 0xef, 0x62, 0x45, 0xb6, 0xa3, 0xc2, 0x60, 0x71, 0xb2, 0x43, 0xbd, 0xb6, 0xdd, 0x8c, - 0xc7, 0xc9, 0x0d, 0xde, 0x8a, 0x12, 0xca, 0xc5, 0xb7, 0x1d, 0x4f, 0x8a, 0x15, 0x88, 0x6f, 0x3b, - 0x1e, 0x72, 0x88, 0x7f, 0xa6, 0x99, 0x3b, 0xe6, 0x4c, 0xb3, 0x05, 0x33, 0xe2, 0x8a, 0xf9, 0x12, - 0x75, 0xbc, 0x27, 0x3e, 0x15, 0xaf, 0xc7, 0x48, 0x60, 0x1f, 0x51, 0xfe, 0xcf, 0x8c, 0x78, 0x1b, - 0xef, 0xfc, 0x84, 0x57, 0x14, 0xea, 0x51, 0x0a, 0x18, 0x27, 0x39, 0x8a, 0x3d, 0xa5, 0xe8, 0x3c, - 0x3e, 0xf1, 0xcd, 0xdc, 0xe2, 0xff, 0x86, 0x9b, 0xb9, 0xb5, 0x85, 0x4f, 0x3f, 0xbf, 0xf8, 0xcc, - 0x67, 0x9f, 0x5f, 0x7c, 0xe6, 0x27, 0x9f, 0x5f, 0x7c, 0xe6, 0xc3, 0x47, 0x17, 0x33, 0x9f, 0x3e, - 0xba, 0x98, 0xf9, 0xec, 0xd1, 0xc5, 0xcc, 0x4f, 0x1e, 0x5d, 0xcc, 0xfc, 0xec, 0xd1, 0xc5, 0xcc, - 0xf7, 0xff, 0xf9, 0xe2, 0x33, 0x5f, 0x2d, 0xfa, 0x1f, 0xff, 0x3f, 0x01, 0x00, 0x00, 0xff, 0xff, - 0xd7, 0xbe, 0x9c, 0xa3, 0x72, 0x75, 0x00, 0x00, + // 5928 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x3d, 0x5d, 0x6f, 0x1c, 0xd7, + 0x75, 0x5e, 0xee, 0x07, 0x77, 0x0f, 0xbf, 0xaf, 0x64, 0x79, 0xcd, 0xc4, 0x92, 0xc0, 0x20, 0x82, + 0xdc, 0x3a, 0x64, 0xad, 0x36, 0xad, 0x63, 0x37, 0x0e, 0x76, 0x49, 0x89, 0xa6, 0x45, 0x52, 0xe4, + 0x59, 0x4a, 0xb6, 0xe3, 0xc4, 0xce, 0xec, 0xec, 0xe5, 0xee, 0x84, 0xb3, 0x33, 0xcb, 0x99, 0x59, + 0x4a, 0x34, 0xd0, 0x24, 0x28, 0xd0, 0x8f, 0xc4, 0x49, 0x9a, 0xb4, 0x49, 0xfa, 0x11, 0xf4, 0xa5, + 0x0f, 0x2d, 0xd0, 0x02, 0x45, 0x81, 0x02, 0x7d, 0xe9, 0x53, 0xdf, 0x02, 0xe4, 0x25, 0x45, 0x5f, + 0x02, 0x04, 0x15, 0x12, 0xa5, 0x3f, 0xa0, 0x68, 0x81, 0x02, 0x6d, 0x5f, 0x8a, 0xfb, 0x31, 0x77, + 0xee, 0xcc, 0x0e, 0x29, 0xae, 0x76, 0x96, 0xca, 0x43, 0xdf, 0xb8, 0xe7, 0x9c, 0x7b, 0xce, 0x99, + 0x99, 0xf3, 0x71, 0xcf, 0xbd, 0xe7, 0x5e, 0xc2, 0x56, 0xdb, 0x0a, 0x3a, 0xfd, 0xe6, 0xb2, 0xe9, + 0x76, 0x57, 0x0c, 0xaf, 0xed, 0xf6, 0x3c, 0xf7, 0x8b, 0xfc, 0x8f, 0x4f, 0xd0, 0x23, 0xea, 0x04, + 0xfe, 0x4a, 0xef, 0xa0, 0xbd, 0x62, 0xf4, 0x2c, 0x7f, 0x45, 0xfc, 0x76, 0xfb, 0x9e, 0x49, 0x57, + 0x8e, 0x5e, 0x36, 0xec, 0x5e, 0xc7, 0x78, 0x79, 0xa5, 0x4d, 0x1d, 0xea, 0x19, 0x01, 0x6d, 0x2d, + 0xf7, 0x3c, 0x37, 0x70, 0xc9, 0xa7, 0x23, 0x76, 0xcb, 0x21, 0x3b, 0xfe, 0xc7, 0xfb, 0x62, 0xf8, + 0x72, 0xef, 0xa0, 0xbd, 0xcc, 0xd8, 0x2d, 0x6b, 0xec, 0x96, 0x43, 0x76, 0x8b, 0x9f, 0x39, 0xb3, + 0x36, 0xa6, 0xdb, 0xed, 0xba, 0x4e, 0x52, 0xfe, 0xe2, 0x27, 0x34, 0x06, 0x6d, 0xb7, 0xed, 0xae, + 0x70, 0x70, 0xb3, 0xbf, 0xcf, 0x7f, 0xf1, 0x1f, 0xfc, 0x2f, 0x49, 0xbe, 0x74, 0xf0, 0x8a, 0xbf, + 0x6c, 0xb9, 0x8c, 0xe5, 0x8a, 0xe9, 0x7a, 0xec, 0xc1, 0x06, 0x58, 0xfe, 0x5a, 0x44, 0xd3, 0x35, + 0xcc, 0x8e, 0xe5, 0x50, 0xef, 0x38, 0xd2, 0xa3, 0x4b, 0x03, 0x23, 0x6d, 0xd4, 0xca, 0x49, 0xa3, + 0xbc, 0xbe, 0x13, 0x58, 0x5d, 0x3a, 0x30, 0xe0, 0xd7, 0x1f, 0x37, 0xc0, 0x37, 0x3b, 0xb4, 0x6b, + 0x24, 0xc7, 0x2d, 0xfd, 0x77, 0x0e, 0x16, 0x6a, 0x5b, 0xbb, 0x3b, 0xab, 0xae, 0xe3, 0xf7, 0xbb, + 0x74, 0xd5, 0x75, 0xf6, 0xad, 0x36, 0xf9, 0x24, 0x4c, 0x99, 0x02, 0xe0, 0xed, 0x19, 0xed, 0x6a, + 0xee, 0x6a, 0xee, 0x7a, 0xa5, 0x7e, 0xe1, 0x07, 0x0f, 0xaf, 0x3c, 0xf3, 0xe8, 0xe1, 0x95, 0xa9, + 0xd5, 0x08, 0x85, 0x3a, 0x1d, 0x79, 0x11, 0x26, 0x8d, 0x7e, 0xe0, 0xd6, 0xcc, 0x83, 0xea, 0xc4, + 0xd5, 0xdc, 0xf5, 0x72, 0x7d, 0x4e, 0x0e, 0x99, 0xac, 0x09, 0x30, 0x86, 0x78, 0xb2, 0x02, 0x15, + 0xfa, 0xc0, 0xb4, 0xfb, 0xbe, 0x75, 0x44, 0xab, 0x79, 0x4e, 0xbc, 0x20, 0x89, 0x2b, 0x37, 0x43, + 0x04, 0x46, 0x34, 0x8c, 0xb7, 0xe3, 0x6e, 0xba, 0xa6, 0x61, 0x57, 0x0b, 0x71, 0xde, 0xdb, 0x02, + 0x8c, 0x21, 0x9e, 0x5c, 0x83, 0x92, 0xe3, 0xbe, 0x65, 0x58, 0x41, 0xb5, 0xc8, 0x29, 0x67, 0x25, + 0x65, 0x69, 0x9b, 0x43, 0x51, 0x62, 0x97, 0xfe, 0x0b, 0x60, 0x8e, 0x3d, 0xfb, 0x4d, 0x66, 0x1c, + 0x0d, 0x6e, 0x4b, 0xe4, 0x05, 0xc8, 0xf7, 0x3d, 0x5b, 0x3e, 0xf1, 0x94, 0x1c, 0x98, 0xbf, 0x8b, + 0x9b, 0xc8, 0xe0, 0xe4, 0x15, 0x98, 0xa6, 0x0f, 0xcc, 0x8e, 0xe1, 0xb4, 0xe9, 0xb6, 0xd1, 0xa5, + 0xfc, 0x31, 0x2b, 0xf5, 0x8b, 0x92, 0x6e, 0xfa, 0xa6, 0x86, 0xc3, 0x18, 0xa5, 0x3e, 0x72, 0xef, + 0xb8, 0x27, 0x9e, 0x39, 0x65, 0x24, 0xc3, 0x61, 0x8c, 0x92, 0xdc, 0x00, 0xf0, 0xdc, 0x7e, 0x60, + 0x39, 0xed, 0xdb, 0xf4, 0x98, 0x3f, 0x7c, 0xa5, 0x4e, 0xe4, 0x38, 0x40, 0x85, 0x41, 0x8d, 0x8a, + 0xfc, 0x16, 0x2c, 0x98, 0xae, 0xe3, 0x50, 0x33, 0xb0, 0x5c, 0xa7, 0x6e, 0x98, 0x07, 0xee, 0xfe, + 0x3e, 0x7f, 0x1b, 0x53, 0x37, 0x5e, 0x59, 0x3e, 0xb3, 0x93, 0x09, 0x2f, 0x59, 0x96, 0xe3, 0xeb, + 0xcf, 0x3e, 0x7a, 0x78, 0x65, 0x61, 0x35, 0xc9, 0x16, 0x07, 0x25, 0x91, 0x97, 0xa0, 0xfc, 0x45, + 0xdf, 0x75, 0xea, 0x6e, 0xeb, 0xb8, 0x5a, 0xe2, 0xdf, 0x60, 0x5e, 0x2a, 0x5c, 0x7e, 0xb3, 0x71, + 0x67, 0x9b, 0xc1, 0x51, 0x51, 0x90, 0xbb, 0x90, 0x0f, 0x6c, 0xbf, 0x3a, 0xc9, 0xd5, 0x7b, 0x75, + 0x68, 0xf5, 0xf6, 0x36, 0x1b, 0xc2, 0x6c, 0xeb, 0x93, 0xec, 0x5b, 0xed, 0x6d, 0x36, 0x90, 0xf1, + 0x23, 0x5f, 0xcb, 0x41, 0x99, 0xf9, 0x57, 0xcb, 0x08, 0x8c, 0x6a, 0xf9, 0x6a, 0xfe, 0xfa, 0xd4, + 0x8d, 0xcf, 0x2d, 0x8f, 0x14, 0x60, 0x96, 0x13, 0xd6, 0xb2, 0xbc, 0x25, 0xd9, 0xdf, 0x74, 0x02, + 0xef, 0x38, 0x7a, 0xc6, 0x10, 0x8c, 0x4a, 0x3e, 0xf9, 0xe3, 0x1c, 0xcc, 0x85, 0x5f, 0x75, 0x8d, + 0x9a, 0xb6, 0xe1, 0xd1, 0x6a, 0x85, 0x3f, 0xf0, 0xdb, 0x59, 0xe8, 0x14, 0xe7, 0x2c, 0x5f, 0xc7, + 0x85, 0x47, 0x0f, 0xaf, 0xcc, 0x25, 0x50, 0x98, 0xd4, 0x82, 0x7c, 0x98, 0x83, 0xe9, 0xc3, 0x3e, + 0xed, 0x2b, 0xb5, 0x80, 0xab, 0x75, 0x37, 0x03, 0xb5, 0x76, 0x35, 0xb6, 0x52, 0xa7, 0x79, 0x66, + 0xec, 0x3a, 0x1c, 0x63, 0xc2, 0xc9, 0x97, 0xa1, 0xc2, 0x7f, 0xd7, 0x2d, 0xa7, 0x55, 0x9d, 0xe2, + 0x9a, 0x60, 0x56, 0x9a, 0x30, 0x9e, 0x52, 0x8d, 0x19, 0x16, 0x67, 0x14, 0x10, 0x23, 0x99, 0xe4, + 0x3e, 0x4c, 0xca, 0x90, 0x56, 0x9d, 0xe6, 0xe2, 0x77, 0x32, 0x10, 0x1f, 0x8b, 0xae, 0xf5, 0x29, + 0x16, 0xb5, 0x24, 0x08, 0x43, 0x69, 0xe4, 0x6d, 0x28, 0x18, 0xfd, 0xa0, 0x53, 0x9d, 0x79, 0x42, + 0x37, 0xa8, 0x1b, 0xbe, 0x65, 0xd6, 0xfa, 0x41, 0xa7, 0x5e, 0x7e, 0xf4, 0xf0, 0x4a, 0x81, 0xfd, + 0x85, 0x9c, 0x23, 0x41, 0xa8, 0xf4, 0x3d, 0xbb, 0x41, 0x4d, 0x8f, 0x06, 0xd5, 0x59, 0xce, 0xfe, + 0xe3, 0xcb, 0x22, 0x5f, 0x30, 0x0e, 0xcb, 0x2c, 0x75, 0x2d, 0x1f, 0xbd, 0xbc, 0x2c, 0x28, 0x6e, + 0xd3, 0xe3, 0x06, 0xb5, 0xa9, 0x19, 0xb8, 0x9e, 0x78, 0x4d, 0x77, 0x71, 0x53, 0x60, 0x30, 0x62, + 0xb3, 0xf8, 0x1a, 0xcc, 0xc4, 0x8c, 0x9f, 0xcc, 0x43, 0xfe, 0x80, 0x1e, 0x8b, 0xc0, 0x89, 0xec, + 0x4f, 0x72, 0x11, 0x8a, 0x47, 0x86, 0xdd, 0x97, 0x41, 0x12, 0xc5, 0x8f, 0x57, 0x27, 0x5e, 0xc9, + 0x2d, 0xfd, 0x28, 0x07, 0xcf, 0x9f, 0x68, 0xb6, 0x2c, 0xd2, 0xb7, 0xfa, 0x9e, 0xd1, 0xb4, 0x29, + 0xe7, 0xa6, 0x45, 0xfa, 0x35, 0x01, 0xc6, 0x10, 0xcf, 0x42, 0x23, 0x4b, 0x28, 0x6b, 0xd4, 0xa6, + 0x01, 0x95, 0x39, 0x47, 0x85, 0xc6, 0x9a, 0xc2, 0xa0, 0x46, 0xc5, 0x62, 0x93, 0xe5, 0x04, 0xd4, + 0x73, 0x0c, 0x5b, 0x26, 0x1e, 0xe5, 0xb7, 0x1b, 0x12, 0x8e, 0x8a, 0x42, 0xcb, 0x25, 0x85, 0x53, + 0x73, 0xc9, 0xa7, 0xe1, 0x42, 0x8a, 0x9d, 0x69, 0xc3, 0x73, 0xa7, 0x0e, 0xff, 0x8f, 0x1c, 0x5c, + 0x4a, 0xf7, 0x18, 0x72, 0x15, 0x0a, 0x0e, 0x4b, 0x35, 0x22, 0x25, 0x4d, 0x4b, 0x06, 0x05, 0x9e, + 0x62, 0x38, 0x46, 0x7f, 0x61, 0x13, 0x43, 0xbd, 0xb0, 0xfc, 0x99, 0x5e, 0x58, 0x2c, 0x55, 0x17, + 0xce, 0x90, 0xaa, 0xcf, 0x9a, 0x7f, 0xbf, 0x53, 0x80, 0xe7, 0x6b, 0x1f, 0xf4, 0x3d, 0xca, 0x43, + 0xaa, 0xff, 0x46, 0xbf, 0xa9, 0x67, 0xe2, 0xab, 0x50, 0xd8, 0x3f, 0x6c, 0x39, 0xc9, 0xe7, 0xbe, + 0xb5, 0xbb, 0xb6, 0x8d, 0x1c, 0x43, 0x7a, 0x70, 0xc1, 0xef, 0x18, 0x1e, 0x6d, 0xd5, 0x4c, 0x93, + 0xfa, 0xfe, 0x6d, 0x7a, 0xac, 0x72, 0xf2, 0x99, 0x2d, 0xfc, 0xb9, 0x47, 0x0f, 0xaf, 0x5c, 0x68, + 0x0c, 0x72, 0xc1, 0x34, 0xd6, 0xa4, 0x05, 0x73, 0x09, 0x30, 0x7f, 0x87, 0x67, 0x96, 0xc6, 0x23, + 0x72, 0x42, 0x1a, 0x26, 0x59, 0xb2, 0xef, 0xd9, 0xe9, 0x37, 0xf9, 0xb3, 0x88, 0x6c, 0xaf, 0xbe, + 0xe7, 0x1b, 0x02, 0x8c, 0x21, 0x9e, 0x7c, 0x47, 0xcf, 0x71, 0x45, 0x9e, 0xe3, 0xf6, 0x47, 0x8d, + 0x57, 0x27, 0x7d, 0x91, 0xb3, 0x67, 0xbb, 0xd1, 0xa2, 0xc3, 0xbf, 0x96, 0x60, 0xb1, 0x6e, 0x05, + 0xcd, 0xbe, 0x79, 0x40, 0x83, 0x06, 0xf5, 0x8e, 0xa8, 0xa7, 0xdb, 0x45, 0x00, 0x93, 0xf7, 0x69, + 0xb3, 0xe3, 0xba, 0x07, 0x9c, 0xdd, 0xd4, 0x8d, 0xad, 0x11, 0x1f, 0xf8, 0x2d, 0xc1, 0x6d, 0xd5, + 0x75, 0x02, 0xfa, 0x20, 0x10, 0xd1, 0x59, 0xc2, 0x30, 0x14, 0xc5, 0x1c, 0x87, 0xb1, 0xa5, 0x26, + 0xfb, 0x9e, 0x72, 0xda, 0xa7, 0x1c, 0x67, 0x47, 0x61, 0x50, 0xa3, 0x22, 0xaf, 0xc3, 0xac, 0x47, + 0x7b, 0xae, 0x6f, 0x05, 0xae, 0x77, 0xdc, 0xb0, 0xfb, 0x6d, 0x39, 0xe9, 0xbb, 0x24, 0xc7, 0xcd, + 0x62, 0x0c, 0x8b, 0x09, 0x6a, 0xb2, 0x04, 0x25, 0xa1, 0x70, 0xb5, 0x70, 0x35, 0x7f, 0xbd, 0x52, + 0x07, 0xe6, 0x43, 0xe2, 0xcb, 0xa0, 0xc4, 0x90, 0xb7, 0x61, 0xca, 0xe0, 0x86, 0xb3, 0xe7, 0x1e, + 0x50, 0x47, 0x4e, 0xf1, 0xce, 0x68, 0x8d, 0x73, 0x6c, 0x32, 0x5f, 0x8b, 0x46, 0xa3, 0xce, 0x8a, + 0xbc, 0x07, 0x33, 0xf2, 0xe1, 0x65, 0xe6, 0x28, 0x0d, 0xc3, 0x7b, 0xe1, 0xd1, 0xc3, 0x2b, 0x33, + 0x6f, 0xe9, 0xe3, 0x31, 0xce, 0x8e, 0xdc, 0x83, 0x4b, 0xcd, 0xf0, 0x2b, 0xfb, 0xfc, 0x2b, 0xd7, + 0x0d, 0x9f, 0xde, 0xc5, 0xcd, 0x6a, 0x99, 0xbf, 0xa5, 0xcb, 0xf2, 0x2d, 0x5d, 0x4a, 0xd8, 0x82, + 0xa4, 0xc2, 0x13, 0x46, 0x93, 0x37, 0x81, 0xb4, 0x78, 0xe0, 0x7a, 0xc3, 0x75, 0x0f, 0xee, 0x38, + 0xb7, 0x2c, 0xc7, 0xf2, 0x3b, 0x7c, 0xae, 0x55, 0xae, 0x2f, 0x4a, 0x9e, 0x64, 0x6d, 0x80, 0x02, + 0x53, 0x46, 0x91, 0xef, 0xea, 0xee, 0x05, 0xdc, 0xbd, 0xda, 0x23, 0x5a, 0xdb, 0xc9, 0x96, 0x7d, + 0x5e, 0xfe, 0xf5, 0xb7, 0x05, 0xb8, 0xb0, 0x6a, 0xd8, 0xd4, 0x69, 0x19, 0x31, 0xc7, 0x7a, 0x09, + 0xca, 0xac, 0x48, 0x6c, 0xf5, 0xed, 0x30, 0xd9, 0x28, 0x15, 0x1a, 0x12, 0x8e, 0x8a, 0x42, 0xa5, + 0xd1, 0x23, 0xc3, 0x96, 0xee, 0x10, 0x4f, 0xa3, 0x47, 0x2a, 0x8d, 0x1e, 0x19, 0x36, 0x79, 0x15, + 0x66, 0x65, 0x7e, 0x70, 0x9d, 0x35, 0x23, 0xa0, 0x7e, 0x35, 0xcf, 0x4d, 0x9a, 0x30, 0x37, 0xb8, + 0x19, 0xc3, 0x60, 0x82, 0x92, 0x49, 0x62, 0x15, 0xec, 0x07, 0xae, 0x13, 0xc6, 0x43, 0x25, 0x69, + 0x4f, 0xc2, 0x51, 0x51, 0x90, 0x6f, 0x0e, 0x46, 0xc4, 0x2f, 0x8c, 0xf8, 0xc9, 0x52, 0x5e, 0xd6, + 0x10, 0x33, 0xff, 0xdf, 0xce, 0xc1, 0x54, 0x8f, 0x7a, 0xbe, 0xe5, 0x07, 0xd4, 0x31, 0xa9, 0x74, + 0xa3, 0x3b, 0x23, 0xea, 0xc4, 0x75, 0xd9, 0x89, 0xd8, 0x0a, 0x67, 0xd6, 0x00, 0xa8, 0x0b, 0x1d, + 0xcd, 0x60, 0x1e, 0xc0, 0xc5, 0x55, 0x23, 0x30, 0x3b, 0xfd, 0x9e, 0x98, 0x92, 0xf4, 0x3d, 0x83, + 0x15, 0x7b, 0x2c, 0x4f, 0x51, 0x87, 0x4d, 0x2b, 0x5a, 0xc9, 0x89, 0xda, 0x4d, 0x01, 0xc6, 0x10, + 0x4f, 0x3e, 0x09, 0x53, 0x5d, 0xe3, 0xc1, 0x9a, 0x1c, 0x29, 0x0d, 0x46, 0x2d, 0x28, 0x6c, 0x45, + 0x28, 0xd4, 0xe9, 0x96, 0xbe, 0x04, 0x17, 0x85, 0xc8, 0x2d, 0xa3, 0xa7, 0x3d, 0xdb, 0x19, 0xe6, + 0x44, 0x6b, 0x30, 0x6f, 0x7a, 0xd4, 0x08, 0xe8, 0xc6, 0xfe, 0xb6, 0x1b, 0xdc, 0x7c, 0x60, 0xf9, + 0x81, 0x9c, 0x1c, 0x55, 0x25, 0xf5, 0xfc, 0x6a, 0x02, 0x8f, 0x03, 0x23, 0x96, 0xfe, 0xac, 0x04, + 0xe4, 0x66, 0xd7, 0x0a, 0x82, 0x78, 0x0a, 0xba, 0x06, 0xa5, 0xa6, 0xe7, 0x1e, 0x50, 0x4f, 0x2a, + 0xa0, 0x26, 0x38, 0x75, 0x0e, 0x45, 0x89, 0x65, 0x49, 0x83, 0x4d, 0x70, 0x1d, 0x6a, 0xa7, 0x24, + 0x8d, 0x55, 0x85, 0x41, 0x8d, 0x8a, 0x2f, 0xbd, 0x88, 0x5f, 0x7c, 0x02, 0x90, 0x4f, 0x2c, 0xbd, + 0x44, 0x28, 0xd4, 0xe9, 0xc8, 0x1d, 0x28, 0xf7, 0x7d, 0x36, 0x65, 0x95, 0x93, 0x86, 0x33, 0x07, + 0xea, 0x69, 0x66, 0xb6, 0x77, 0xe5, 0x50, 0x54, 0x4c, 0x18, 0xc3, 0x9e, 0xe1, 0xfb, 0xf7, 0x5d, + 0xaf, 0x35, 0x5c, 0x56, 0xe1, 0x0c, 0x77, 0xe4, 0x50, 0x54, 0x4c, 0xd2, 0x97, 0x24, 0x4a, 0x4f, + 0x65, 0x49, 0x62, 0xf2, 0xac, 0x4b, 0x12, 0xe5, 0x8c, 0x97, 0x24, 0xbe, 0xa1, 0x07, 0xa7, 0x0a, + 0x0f, 0x4e, 0xef, 0x8f, 0x1a, 0x08, 0x06, 0xcc, 0xf3, 0xbc, 0xf2, 0xc8, 0xb7, 0x27, 0x60, 0x3e, + 0x19, 0x86, 0xc8, 0x07, 0x30, 0x69, 0x8a, 0x58, 0x21, 0x67, 0x67, 0x8d, 0x91, 0x83, 0xef, 0x60, + 0xe4, 0x91, 0x15, 0xb4, 0xc0, 0x60, 0x28, 0x90, 0x7c, 0x25, 0x07, 0x15, 0x33, 0x0c, 0x17, 0xb2, + 0x0c, 0x18, 0x59, 0x7c, 0x4a, 0xf8, 0x11, 0x65, 0xb1, 0xc2, 0x60, 0x24, 0x74, 0xe9, 0x27, 0x13, + 0x30, 0xa5, 0x47, 0x8a, 0x2f, 0x68, 0xdf, 0x5b, 0xbc, 0x8f, 0x5f, 0xd1, 0xbc, 0x48, 0xad, 0xd4, + 0x46, 0x4a, 0x30, 0x6a, 0xe6, 0x57, 0x77, 0x9a, 0x6c, 0x16, 0xc9, 0x3e, 0x4e, 0x14, 0x31, 0x22, + 0x98, 0x96, 0x5e, 0x7a, 0x50, 0xf0, 0x7b, 0xd4, 0x94, 0x8f, 0xbb, 0x9d, 0x45, 0x5a, 0x11, 0xba, + 0x37, 0x7a, 0xd4, 0x8c, 0x42, 0x2b, 0xfb, 0x85, 0x5c, 0x12, 0x79, 0x00, 0x25, 0x3f, 0x30, 0x82, + 0xbe, 0x2f, 0x6b, 0x9f, 0x9d, 0x0c, 0x65, 0x72, 0xbe, 0x51, 0x3c, 0x15, 0xbf, 0x51, 0xca, 0x5b, + 0xfa, 0x69, 0x0e, 0xe6, 0x34, 0xea, 0x4d, 0xcb, 0x0f, 0xc8, 0xe7, 0x06, 0xde, 0xf0, 0xf2, 0xd9, + 0xde, 0x30, 0x1b, 0xcd, 0xdf, 0xaf, 0x72, 0x90, 0x10, 0xa2, 0xbd, 0x5d, 0x17, 0x8a, 0x56, 0x40, + 0xbb, 0x7e, 0x75, 0x82, 0x3b, 0xeb, 0x9b, 0xd9, 0x3d, 0x6a, 0x7d, 0x46, 0x8a, 0x2d, 0x6e, 0x30, + 0x01, 0x28, 0xe4, 0x2c, 0xfd, 0xfc, 0xd5, 0xd8, 0x23, 0xb2, 0xd7, 0xce, 0x97, 0x8e, 0x19, 0xa8, + 0xde, 0xf7, 0xb7, 0xa3, 0xac, 0x17, 0x2d, 0x1d, 0x6b, 0x38, 0x8c, 0x51, 0x92, 0x43, 0x28, 0x07, + 0xb4, 0xdb, 0xb3, 0x8d, 0x20, 0x2c, 0x8b, 0xd7, 0x47, 0x7c, 0x82, 0x3d, 0xc9, 0x4e, 0x84, 0xf9, + 0xf0, 0x17, 0x2a, 0x31, 0xa4, 0x0b, 0x93, 0x6c, 0x3e, 0x6e, 0x99, 0x54, 0x9a, 0xc7, 0xad, 0x11, + 0x25, 0x36, 0x04, 0x37, 0xe1, 0xf3, 0xf2, 0x07, 0x86, 0x32, 0xc8, 0x97, 0xa0, 0xd8, 0xb5, 0x1c, + 0xcb, 0xe5, 0x25, 0xd2, 0xd4, 0x8d, 0x77, 0xb2, 0xb5, 0xff, 0xe5, 0x2d, 0xc6, 0x5b, 0xc4, 0x51, + 0xf5, 0xbd, 0x38, 0x0c, 0x85, 0x58, 0xbe, 0xc8, 0x6c, 0xca, 0xf9, 0xa1, 0x9c, 0x6e, 0x7e, 0x2e, + 0x63, 0x1d, 0xd4, 0xf4, 0x33, 0x1e, 0xce, 0x43, 0x30, 0x2a, 0xf9, 0xe4, 0x03, 0x28, 0xec, 0x5b, + 0x36, 0x9b, 0x62, 0xe6, 0x33, 0x58, 0x58, 0x4e, 0xea, 0x71, 0xcb, 0xb2, 0xa9, 0xd0, 0x21, 0x5a, + 0x8c, 0xb1, 0x6c, 0x8a, 0x5c, 0x26, 0x7f, 0x11, 0x1e, 0x15, 0x3c, 0xaa, 0x93, 0x63, 0x79, 0x11, + 0x28, 0xd9, 0x27, 0x5e, 0x44, 0x08, 0x46, 0x25, 0x9f, 0xfc, 0x6e, 0x2e, 0x5a, 0x24, 0x10, 0x2b, + 0xff, 0xef, 0x66, 0xac, 0x8b, 0x2c, 0x6d, 0x85, 0x2a, 0x6a, 0xde, 0x3b, 0xb0, 0x6c, 0xf0, 0x01, + 0x14, 0x8c, 0xee, 0x61, 0x4f, 0xe6, 0xfa, 0xac, 0xbf, 0x48, 0xad, 0x7b, 0xd8, 0x4b, 0x7c, 0x91, + 0xda, 0xd6, 0xee, 0x0e, 0x72, 0x99, 0xcc, 0x35, 0x0e, 0x8c, 0xfd, 0x83, 0xb0, 0x70, 0xcd, 0xda, + 0x35, 0x6e, 0x33, 0xde, 0x09, 0xd7, 0xe0, 0x30, 0x14, 0x62, 0xd9, 0xb3, 0x77, 0x0f, 0x83, 0xa0, + 0x3a, 0x35, 0x96, 0x67, 0xdf, 0x3a, 0x0c, 0x82, 0xc4, 0xb3, 0x6f, 0xed, 0xee, 0xed, 0x21, 0x97, + 0xc9, 0x64, 0x3b, 0x46, 0xe0, 0x57, 0xa7, 0xc7, 0x22, 0x7b, 0xdb, 0x08, 0xfc, 0x84, 0xec, 0xed, + 0xda, 0x5e, 0x03, 0xb9, 0x4c, 0x72, 0x04, 0x79, 0xdf, 0xf1, 0xab, 0x33, 0x5c, 0xf4, 0x5b, 0x19, + 0x8b, 0x6e, 0x38, 0x52, 0xb2, 0xda, 0x9b, 0x6c, 0x6c, 0x37, 0x90, 0x09, 0xe4, 0x72, 0x0f, 0xfd, + 0xea, 0xec, 0x78, 0xe4, 0x1e, 0x0e, 0xc8, 0xdd, 0x65, 0x72, 0x0f, 0x7d, 0x56, 0xe0, 0x96, 0x7a, + 0xfd, 0x66, 0xa3, 0xdf, 0xac, 0xce, 0x71, 0xd9, 0x9f, 0xcd, 0x58, 0xf6, 0x0e, 0x67, 0x2e, 0xc4, + 0xab, 0xa9, 0x81, 0x00, 0xa2, 0x94, 0xcc, 0x95, 0x10, 0x52, 0xab, 0xf3, 0x63, 0x51, 0x62, 0x9d, + 0x73, 0x4b, 0x28, 0x21, 0x80, 0x28, 0x25, 0x87, 0x4a, 0xd8, 0x46, 0xb3, 0xba, 0x30, 0x2e, 0x25, + 0x6c, 0x23, 0x45, 0x09, 0xdb, 0x10, 0x4a, 0xd8, 0x46, 0x93, 0x99, 0x7e, 0xa7, 0xb5, 0xef, 0x57, + 0xc9, 0x58, 0x4c, 0xff, 0x8d, 0xd6, 0x7e, 0xd2, 0xf4, 0xdf, 0x58, 0xbb, 0xd5, 0x40, 0x2e, 0x93, + 0x85, 0x1c, 0xdf, 0x36, 0xcc, 0x83, 0xea, 0x85, 0xb1, 0x84, 0x9c, 0x06, 0xe3, 0x9d, 0x08, 0x39, + 0x1c, 0x86, 0x42, 0x2c, 0xf9, 0x5e, 0x0e, 0xa6, 0xfc, 0xc0, 0xf5, 0x8c, 0x36, 0x5d, 0xf7, 0xac, + 0x56, 0xf5, 0x62, 0x36, 0x25, 0x56, 0x52, 0x8d, 0x48, 0x82, 0x50, 0x46, 0x95, 0xe7, 0x1a, 0x06, + 0x75, 0x45, 0xc8, 0x5f, 0xe4, 0x60, 0xd6, 0x88, 0x2d, 0xac, 0x57, 0x9f, 0xe5, 0xba, 0x35, 0xb3, + 0x4e, 0x09, 0xf1, 0xd5, 0x7b, 0xae, 0x9e, 0x5a, 0x6f, 0x8e, 0x23, 0x31, 0xa1, 0x11, 0x37, 0x5f, + 0x3f, 0xf0, 0xac, 0x1e, 0xad, 0x5e, 0x1a, 0x8b, 0xf9, 0x36, 0x38, 0xf3, 0x84, 0xf9, 0x0a, 0x20, + 0x4a, 0xc9, 0x3c, 0x75, 0x53, 0x51, 0xd3, 0x56, 0x9f, 0x1b, 0x4b, 0xea, 0x0e, 0x2b, 0xe6, 0x78, + 0xea, 0x96, 0x50, 0x0c, 0x85, 0x33, 0x5b, 0xf6, 0x68, 0xcb, 0xf2, 0xab, 0xd5, 0xb1, 0xd8, 0x32, + 0x32, 0xde, 0x09, 0x5b, 0xe6, 0x30, 0x14, 0x62, 0x59, 0x38, 0x77, 0xfc, 0xc3, 0xea, 0xf3, 0x63, + 0x09, 0xe7, 0xdb, 0xfe, 0x61, 0x22, 0x9c, 0x6f, 0x37, 0x76, 0x91, 0x09, 0x94, 0xe1, 0xdc, 0xf6, + 0x0d, 0xaf, 0xba, 0x38, 0xa6, 0x70, 0xce, 0x98, 0x0f, 0x84, 0x73, 0x06, 0x44, 0x29, 0x99, 0x5b, + 0x01, 0x6f, 0x55, 0xb2, 0xcc, 0xea, 0x47, 0xc6, 0x62, 0x05, 0xeb, 0x82, 0x7b, 0xc2, 0x0a, 0x24, + 0x14, 0x43, 0xe1, 0xe4, 0x3a, 0x9b, 0xd5, 0xf6, 0x6c, 0xcb, 0x34, 0xfc, 0xea, 0x47, 0xaf, 0xe6, + 0xae, 0x17, 0x45, 0xe1, 0x83, 0x12, 0x86, 0x0a, 0x4b, 0xfe, 0x32, 0x07, 0x73, 0x89, 0x2d, 0x89, + 0xea, 0x0b, 0x5c, 0x75, 0x33, 0x63, 0xd5, 0xeb, 0x71, 0x29, 0xe2, 0x11, 0x9e, 0x93, 0x8f, 0x30, + 0x97, 0xd8, 0x60, 0xc0, 0xa4, 0x52, 0x3c, 0x48, 0x72, 0x13, 0x6b, 0x04, 0x1e, 0x35, 0xba, 0xd5, + 0xcb, 0x63, 0x09, 0x92, 0x18, 0x49, 0x48, 0x04, 0x49, 0x0d, 0x83, 0xba, 0x22, 0x8b, 0x7d, 0x80, + 0xa8, 0xde, 0x4a, 0x59, 0x8a, 0xda, 0xd5, 0x97, 0xa2, 0xa6, 0x6e, 0xbc, 0x36, 0xf4, 0xb2, 0x5c, + 0xe3, 0x57, 0x6b, 0x5e, 0x60, 0xed, 0x1b, 0x66, 0xa0, 0xad, 0x63, 0x2d, 0xfe, 0x41, 0x0e, 0x66, + 0x62, 0x35, 0x56, 0x8a, 0xe8, 0x4e, 0x5c, 0x34, 0x66, 0xbf, 0xa3, 0xa0, 0x6b, 0xf4, 0x7b, 0x39, + 0xa8, 0xa8, 0x6a, 0x2b, 0x45, 0x9b, 0x56, 0x5c, 0x9b, 0x51, 0x17, 0x7d, 0xb8, 0xa8, 0x74, 0x4d, + 0xd8, 0xbb, 0x89, 0x95, 0x5d, 0xe3, 0x7f, 0x37, 0x4a, 0x5c, 0xba, 0x46, 0x5f, 0xcd, 0xc1, 0xb4, + 0x5e, 0x7c, 0xa5, 0x28, 0x64, 0xc6, 0x15, 0xca, 0x76, 0x7f, 0x38, 0xf9, 0x9d, 0x54, 0x0d, 0x36, + 0xfe, 0xef, 0x94, 0xe8, 0x3e, 0x4b, 0xbc, 0x15, 0x88, 0x0a, 0xb2, 0x14, 0x55, 0x68, 0x5c, 0x95, + 0x51, 0xb7, 0x9f, 0x84, 0xac, 0x93, 0xad, 0x57, 0x55, 0x67, 0xe3, 0x7f, 0x2b, 0xac, 0xea, 0x3b, + 0x41, 0x93, 0xdf, 0xcf, 0x41, 0x45, 0xd5, 0x6a, 0xe3, 0x7f, 0x29, 0xac, 0x06, 0x14, 0xb3, 0xa9, + 0x41, 0x55, 0x7e, 0x27, 0x07, 0xe5, 0xb0, 0x76, 0x1b, 0xbf, 0xc9, 0x36, 0xb6, 0x1b, 0x27, 0xbc, + 0x12, 0xae, 0xc7, 0xe1, 0xb9, 0xe9, 0xb1, 0x7b, 0x92, 0x1e, 0x1f, 0xe6, 0x60, 0x4a, 0xab, 0xeb, + 0x52, 0x54, 0xd9, 0x8f, 0xab, 0x32, 0xea, 0x2a, 0xb3, 0x14, 0x76, 0xb2, 0x36, 0x5a, 0x81, 0x37, + 0x7e, 0x6d, 0xa4, 0xb0, 0x53, 0xb5, 0x09, 0x2b, 0xbd, 0x73, 0xd1, 0x86, 0x09, 0x3b, 0xd9, 0x9d, + 0x55, 0xd5, 0x37, 0x7e, 0x77, 0x66, 0xd5, 0xe4, 0x29, 0x41, 0x2e, 0x2a, 0x01, 0xc7, 0xef, 0xcf, + 0x42, 0x56, 0xba, 0x2e, 0xdf, 0xcd, 0xc1, 0x7c, 0xb2, 0x0e, 0x4c, 0xd1, 0xe8, 0x20, 0xae, 0xd1, + 0xa8, 0x4d, 0xb5, 0xba, 0xc4, 0x74, 0xbd, 0xbe, 0x9f, 0x83, 0x0b, 0x29, 0x35, 0x60, 0x8a, 0x6a, + 0x4e, 0x5c, 0xb5, 0xb7, 0xc7, 0xd5, 0x36, 0x96, 0xb4, 0x6c, 0xad, 0x08, 0x1c, 0xbf, 0x65, 0x4b, + 0x61, 0xe9, 0xda, 0x7c, 0x23, 0x07, 0xd3, 0x7a, 0x31, 0x98, 0xa2, 0x4e, 0x3b, 0xae, 0xce, 0x6e, + 0xe6, 0x9b, 0xb5, 0x49, 0xfb, 0x8e, 0xca, 0xc2, 0xf1, 0xdb, 0xb7, 0x90, 0x75, 0x72, 0x9e, 0x08, + 0x8b, 0xc4, 0xf1, 0xe7, 0x89, 0xed, 0xc6, 0xee, 0xa9, 0x79, 0x42, 0x15, 0x8c, 0xe7, 0x91, 0x27, + 0xb8, 0xb0, 0x93, 0x2d, 0x46, 0x2f, 0x1c, 0xc7, 0x6f, 0x31, 0xa1, 0xb4, 0x74, 0x7d, 0xfe, 0x3c, + 0x07, 0x17, 0xd3, 0xaa, 0xc1, 0x14, 0xbd, 0xdc, 0xb8, 0x5e, 0xef, 0x8c, 0xad, 0x8d, 0x2d, 0x19, + 0x25, 0x93, 0x85, 0xe0, 0xf8, 0xa3, 0xa4, 0x2e, 0x31, 0x55, 0xaf, 0xa5, 0x00, 0x16, 0x06, 0x76, + 0x9d, 0xc9, 0xfb, 0x6a, 0x5f, 0x5b, 0xec, 0x23, 0xff, 0xc6, 0xf0, 0xf5, 0xe5, 0xe9, 0xdb, 0xd7, + 0x3f, 0xcc, 0xc3, 0x5c, 0xa2, 0xd6, 0xe2, 0xcd, 0xd5, 0xec, 0x27, 0x3f, 0x13, 0x24, 0x36, 0x76, + 0xa3, 0xe6, 0xea, 0x10, 0x81, 0x11, 0x0d, 0xf9, 0x76, 0x0e, 0xe6, 0xee, 0x1b, 0x81, 0xd9, 0xd9, + 0x31, 0x82, 0x8e, 0xe8, 0x41, 0xc8, 0x28, 0xf3, 0xbe, 0x15, 0xe7, 0x1a, 0xad, 0x28, 0x24, 0x10, + 0x98, 0x94, 0x4f, 0x5e, 0x84, 0xc9, 0x9e, 0x6b, 0xdb, 0x96, 0xd3, 0x96, 0x2d, 0xe5, 0x6a, 0x3d, + 0x65, 0x47, 0x80, 0x31, 0xc4, 0xc7, 0x0f, 0xe5, 0x14, 0x32, 0xd9, 0x26, 0x4c, 0xbc, 0xd2, 0xf3, + 0x6a, 0x7f, 0xf9, 0x49, 0x1e, 0xc8, 0xa0, 0x77, 0x3e, 0xee, 0x00, 0xd9, 0x35, 0x28, 0x99, 0xd1, + 0x47, 0xd3, 0x5a, 0xc7, 0xe4, 0xbb, 0x95, 0x58, 0xd1, 0x5e, 0xe9, 0x53, 0xb3, 0xef, 0xd1, 0xc1, + 0x53, 0x0a, 0x02, 0x8e, 0x8a, 0x22, 0xd6, 0xdc, 0x54, 0x78, 0x6c, 0x73, 0xd3, 0x37, 0x06, 0x5b, + 0x24, 0xdf, 0xcf, 0x3c, 0x4c, 0x0d, 0xd1, 0x21, 0x79, 0x97, 0x1f, 0x4a, 0xe8, 0x3c, 0x49, 0x9b, + 0xf1, 0xac, 0x3c, 0xb7, 0x20, 0x07, 0xa3, 0xc6, 0x68, 0xb4, 0xaf, 0xfb, 0xa7, 0x15, 0x58, 0x18, + 0x98, 0xa4, 0x93, 0x45, 0x98, 0xb0, 0x44, 0xb3, 0x63, 0xbe, 0x0e, 0xf2, 0x89, 0x26, 0x36, 0xd6, + 0x70, 0xc2, 0x6a, 0xe9, 0x7d, 0xe9, 0x13, 0xe7, 0xd7, 0x97, 0xfe, 0x09, 0x28, 0xba, 0xf7, 0x1d, + 0xea, 0xc9, 0x46, 0x41, 0xe5, 0xb3, 0x6b, 0xb4, 0xe7, 0x51, 0xd3, 0x08, 0x68, 0xeb, 0x0e, 0x43, + 0xa3, 0xa0, 0x22, 0xbf, 0x09, 0x10, 0x35, 0x99, 0xcb, 0x6e, 0xda, 0x8f, 0xca, 0x31, 0x17, 0xa3, + 0x31, 0x51, 0x63, 0x3a, 0x6a, 0xf4, 0x5a, 0x43, 0x7a, 0xf1, 0xc4, 0x86, 0xf4, 0x3b, 0x50, 0x36, + 0x7a, 0x96, 0xe8, 0x46, 0x2f, 0x0d, 0xdd, 0x37, 0x58, 0xdb, 0xd9, 0x10, 0xad, 0xe8, 0x8a, 0xc9, + 0x60, 0x1f, 0xfa, 0x64, 0xb6, 0x7d, 0xe8, 0xba, 0xa7, 0x95, 0x1f, 0xeb, 0x69, 0xd7, 0xa0, 0x64, + 0x98, 0x81, 0x75, 0x44, 0x65, 0x47, 0xb9, 0xf2, 0xdf, 0x1a, 0x87, 0xa2, 0xc4, 0xca, 0x13, 0xb4, + 0x41, 0x18, 0xd9, 0x61, 0xe0, 0x04, 0x6d, 0x88, 0x42, 0x9d, 0x8e, 0xbc, 0x06, 0x33, 0xc2, 0x68, + 0xc2, 0x5e, 0xf8, 0x29, 0x3e, 0xf0, 0x59, 0x39, 0x70, 0x66, 0x5d, 0x47, 0x62, 0x9c, 0x96, 0xd4, + 0x60, 0x4e, 0x00, 0xee, 0xf6, 0x6c, 0xd7, 0x68, 0xb1, 0xe1, 0xd3, 0x71, 0xab, 0x58, 0x8f, 0xa3, + 0x31, 0x49, 0x7f, 0x42, 0xf3, 0xfc, 0xcc, 0x13, 0x35, 0xcf, 0x7f, 0x5d, 0x0f, 0x33, 0x62, 0x57, + 0xfa, 0xbd, 0xac, 0xcb, 0xe6, 0x21, 0xa2, 0xcc, 0xd7, 0x72, 0x30, 0xad, 0x6c, 0xd9, 0xa2, 0xbe, + 0xdc, 0xac, 0x1e, 0x75, 0xbe, 0xc8, 0xdc, 0x2b, 0xf2, 0x17, 0x8b, 0xfa, 0x51, 0x63, 0x96, 0x0e, + 0xc5, 0x98, 0xec, 0xd1, 0x62, 0xd3, 0xbf, 0x97, 0x78, 0x6c, 0x8a, 0x97, 0xec, 0x4f, 0xe9, 0x5c, + 0xcc, 0xa7, 0xa0, 0x22, 0x4f, 0xbc, 0x6c, 0xac, 0xc9, 0x94, 0xf6, 0x11, 0xf9, 0xfc, 0x17, 0xa2, + 0x78, 0xb2, 0x13, 0x92, 0x60, 0x44, 0xad, 0x45, 0x93, 0xfc, 0x59, 0x8f, 0xb7, 0x14, 0xb2, 0x3b, + 0xde, 0xd2, 0x80, 0x67, 0x45, 0x73, 0x7a, 0xa3, 0xb1, 0x79, 0x8f, 0x7a, 0xd6, 0xbe, 0x65, 0x8a, + 0xde, 0x74, 0x71, 0x66, 0xed, 0x05, 0xf9, 0x10, 0xcf, 0xde, 0x4c, 0x23, 0xc2, 0xf4, 0xb1, 0xd2, + 0x7d, 0x6d, 0x43, 0xb9, 0x6f, 0x69, 0xc0, 0x7d, 0x23, 0x24, 0xc6, 0x69, 0x4f, 0xf0, 0xbd, 0xf2, + 0xe8, 0xbe, 0x57, 0xc9, 0xca, 0xf7, 0xe2, 0x16, 0x37, 0x84, 0xef, 0x5d, 0x87, 0xb2, 0xfc, 0xee, + 0x3e, 0xef, 0x46, 0xaa, 0xc8, 0x2e, 0x71, 0x09, 0x43, 0x85, 0x65, 0x1f, 0xdc, 0xe7, 0x5f, 0x52, + 0x7c, 0xf0, 0xa9, 0xa1, 0x3f, 0x78, 0x23, 0x1a, 0x8d, 0x3a, 0xab, 0xd1, 0x5c, 0xee, 0xaf, 0xca, + 0x30, 0x97, 0x58, 0x99, 0x4a, 0x9d, 0x89, 0xe7, 0x9e, 0xf2, 0x4c, 0xfc, 0x2a, 0x14, 0x02, 0x96, + 0x6f, 0x26, 0xe2, 0x07, 0x23, 0x78, 0xa2, 0xe1, 0x18, 0x66, 0xa2, 0x66, 0x87, 0x9a, 0x07, 0xe1, + 0x21, 0x1d, 0x39, 0x71, 0x50, 0x26, 0xba, 0xaa, 0x23, 0x31, 0x4e, 0x4b, 0x7e, 0x19, 0x2a, 0x46, + 0xab, 0xe5, 0x51, 0xdf, 0xa7, 0xe1, 0xa1, 0x34, 0xde, 0x0b, 0x5d, 0x0b, 0x81, 0x18, 0xe1, 0x59, + 0x62, 0xed, 0xb4, 0xf6, 0xfd, 0xbb, 0x3e, 0xf5, 0xb8, 0x53, 0x69, 0xe7, 0x76, 0xd8, 0xab, 0x64, + 0x70, 0x54, 0x14, 0xa4, 0x05, 0x73, 0x07, 0x5e, 0x73, 0x75, 0xd5, 0x30, 0x3b, 0xf4, 0x49, 0x66, + 0x82, 0xfc, 0x68, 0xe5, 0xed, 0x38, 0x07, 0x4c, 0xb2, 0x94, 0x52, 0x6e, 0xd3, 0xe3, 0xc0, 0x68, + 0x3e, 0xc9, 0x74, 0x22, 0x94, 0xa2, 0x73, 0xc0, 0x24, 0x4b, 0x96, 0xfc, 0x0f, 0xbc, 0x66, 0x78, + 0xa8, 0x42, 0x9e, 0x67, 0x53, 0xc9, 0xff, 0x76, 0x84, 0x42, 0x9d, 0x8e, 0xbd, 0xb0, 0x03, 0xaf, + 0x89, 0xd4, 0xb0, 0xbb, 0x7c, 0x76, 0xa1, 0xbd, 0xb0, 0xdb, 0x12, 0x8e, 0x8a, 0x82, 0xf4, 0x80, + 0xb0, 0xa7, 0xe3, 0xdf, 0x5d, 0xf5, 0xa2, 0xcb, 0xc3, 0xfb, 0xd7, 0xd3, 0x9e, 0x46, 0x11, 0xe9, + 0x0f, 0x74, 0x89, 0x05, 0x95, 0xdb, 0x03, 0x7c, 0x30, 0x85, 0x37, 0x79, 0x07, 0x9e, 0x3b, 0xf0, + 0x9a, 0xb2, 0x05, 0x77, 0xc7, 0xb3, 0x1c, 0xd3, 0xea, 0x19, 0xe2, 0x98, 0x8a, 0x98, 0xa6, 0x5c, + 0x91, 0xea, 0x3e, 0x77, 0x3b, 0x9d, 0x0c, 0x4f, 0x1a, 0x1f, 0x2f, 0x0b, 0xa7, 0x33, 0x29, 0x0b, + 0x13, 0xee, 0x7a, 0x5e, 0x65, 0xe1, 0x3f, 0xe4, 0x80, 0xf0, 0xdd, 0xb1, 0xf0, 0x96, 0x94, 0x75, + 0xcf, 0xed, 0xf7, 0x58, 0x9d, 0xdf, 0x66, 0x7f, 0x68, 0x0d, 0xdc, 0xaa, 0xce, 0x5f, 0x0f, 0x11, + 0x18, 0xd1, 0xb0, 0x89, 0xa6, 0x6b, 0xb7, 0xa8, 0x3a, 0xb6, 0xa4, 0x26, 0x9a, 0x77, 0x38, 0x14, + 0x25, 0x96, 0xac, 0xc3, 0x82, 0x47, 0x9b, 0x86, 0x6d, 0x38, 0x26, 0x6d, 0x04, 0x9e, 0x11, 0xd0, + 0xf6, 0xb1, 0xf4, 0xe9, 0xe7, 0xe5, 0x90, 0x05, 0x4c, 0x12, 0xe0, 0xe0, 0x98, 0xa5, 0x7f, 0x9c, + 0x84, 0xf9, 0xe4, 0xb6, 0xde, 0xe3, 0xaa, 0xd9, 0x15, 0xa8, 0xf4, 0x0c, 0x2f, 0xb0, 0xb4, 0x43, + 0x5d, 0xea, 0xa9, 0x76, 0x42, 0x04, 0x46, 0x34, 0xe4, 0x63, 0x50, 0x0c, 0xdc, 0x9e, 0x65, 0x4a, + 0x0d, 0x55, 0xe7, 0xcb, 0x1e, 0x03, 0xa2, 0xc0, 0xa5, 0x9f, 0x14, 0x2a, 0x9c, 0xdb, 0x49, 0x21, + 0x79, 0xf6, 0xa7, 0x98, 0xf1, 0xd9, 0x9f, 0xe1, 0xee, 0x44, 0xf9, 0x50, 0x77, 0x08, 0xd1, 0x4e, + 0xfd, 0xf9, 0x8c, 0xf7, 0x6c, 0x87, 0x9b, 0x3b, 0xcf, 0x98, 0xba, 0x3d, 0xcb, 0x93, 0x51, 0xbb, + 0x59, 0xa8, 0x14, 0x73, 0x14, 0x51, 0xb0, 0xc5, 0x40, 0x18, 0x17, 0x4d, 0x76, 0xe0, 0xa2, 0x6d, + 0x75, 0xad, 0x40, 0x4c, 0x15, 0x77, 0xa8, 0xd7, 0xa0, 0xa6, 0xeb, 0xb4, 0x78, 0xc8, 0xcc, 0x47, + 0xd5, 0xec, 0x66, 0x0a, 0x0d, 0xa6, 0x8e, 0x24, 0x2f, 0xc2, 0xe4, 0x11, 0xf5, 0x7c, 0x66, 0xc4, + 0x10, 0x3f, 0x70, 0x7f, 0x4f, 0x80, 0x31, 0xc4, 0x93, 0x77, 0xa0, 0xe0, 0x1b, 0xbe, 0x2d, 0x27, + 0x26, 0x4f, 0xd0, 0x82, 0x52, 0x6b, 0x6c, 0x4a, 0xf3, 0xe0, 0xd7, 0x74, 0xb0, 0xdf, 0xc8, 0x59, + 0x8e, 0x16, 0x76, 0xfe, 0xb9, 0x00, 0x73, 0x89, 0x9d, 0xf0, 0xc7, 0x39, 0xaf, 0xf2, 0xc5, 0x89, + 0x53, 0x7c, 0xf1, 0x25, 0x28, 0x9b, 0xb6, 0x45, 0x9d, 0x60, 0xa3, 0x25, 0x7d, 0x36, 0x3a, 0x80, + 0x20, 0xe0, 0x6b, 0xa8, 0x28, 0x9e, 0xb6, 0xe7, 0xea, 0x2e, 0x56, 0x3c, 0xeb, 0x19, 0xbf, 0xd2, + 0x38, 0xaf, 0x1d, 0xca, 0xe6, 0x20, 0x44, 0xe2, 0xc3, 0x9e, 0x57, 0x2a, 0xfb, 0xe1, 0x04, 0x94, + 0xb7, 0x6b, 0x7b, 0x8d, 0x5a, 0x3f, 0xe8, 0x90, 0x77, 0xa1, 0xd8, 0x34, 0x7c, 0xcb, 0x94, 0x53, + 0xdc, 0x51, 0xee, 0xa7, 0xa9, 0x30, 0x2b, 0xe3, 0x3f, 0x51, 0xf0, 0x24, 0xb7, 0x98, 0x29, 0xb2, + 0xf9, 0xfe, 0x50, 0x77, 0x77, 0x54, 0x84, 0xb5, 0xb2, 0x99, 0xbe, 0x18, 0x4e, 0x56, 0xa1, 0xe0, + 0x1c, 0x0c, 0x7b, 0x29, 0x07, 0xf7, 0xc3, 0xed, 0xdb, 0xf4, 0x18, 0xf9, 0x60, 0x72, 0x17, 0xc0, + 0xf4, 0x68, 0x8b, 0x3a, 0x81, 0x25, 0x2f, 0x1b, 0x1b, 0x6e, 0x39, 0x72, 0x55, 0x0d, 0x46, 0x8d, + 0xd1, 0xd2, 0x1f, 0x16, 0x61, 0x3e, 0xd9, 0x21, 0xf2, 0x38, 0x17, 0x7d, 0x11, 0x26, 0xfd, 0x3e, + 0x3f, 0xf5, 0x27, 0x9d, 0x54, 0x05, 0xa6, 0x86, 0x00, 0x63, 0x88, 0x4f, 0x77, 0xbd, 0xfc, 0x53, + 0x71, 0xbd, 0xc2, 0x59, 0x5d, 0x2f, 0xeb, 0x14, 0x1b, 0x4b, 0x9a, 0xa5, 0x4c, 0x92, 0x66, 0xf2, + 0x8b, 0x0d, 0x91, 0x34, 0xa9, 0xbc, 0xd0, 0x69, 0x32, 0x93, 0x83, 0x77, 0xa1, 0x23, 0x26, 0x6f, + 0x77, 0x1a, 0xcd, 0xc5, 0xff, 0xad, 0x00, 0xb3, 0xf1, 0xcd, 0x57, 0x56, 0xbc, 0x74, 0x5c, 0x3f, + 0x90, 0x25, 0x5d, 0xf2, 0xee, 0xbf, 0x37, 0x22, 0x14, 0xea, 0x74, 0x67, 0xcb, 0x26, 0x2f, 0xc2, + 0xa4, 0x3c, 0xb4, 0x2e, 0x93, 0x89, 0xb2, 0x67, 0x79, 0xb0, 0x1d, 0x43, 0xfc, 0xff, 0xa7, 0x12, + 0xdb, 0x27, 0x5f, 0x1d, 0x4c, 0x25, 0xef, 0x66, 0xba, 0xd3, 0x7e, 0x5e, 0x99, 0xe4, 0x1d, 0x58, + 0x18, 0x58, 0x27, 0x65, 0x16, 0x23, 0xb6, 0x2e, 0x72, 0x71, 0x8b, 0x89, 0x6d, 0x58, 0x5c, 0x81, + 0x22, 0xab, 0x8d, 0xc5, 0x01, 0xdc, 0x8a, 0x08, 0xf9, 0xac, 0x3e, 0xf2, 0x51, 0xc0, 0x97, 0xfe, + 0xae, 0x08, 0x0b, 0x03, 0xbd, 0x5d, 0xbc, 0x30, 0x51, 0xcb, 0x92, 0x89, 0x72, 0x2b, 0x75, 0x31, + 0xf2, 0x75, 0x98, 0xe5, 0x26, 0xba, 0x93, 0x58, 0xcc, 0x54, 0x67, 0x27, 0xf6, 0x62, 0x58, 0x4c, + 0x50, 0x9f, 0xad, 0xb0, 0x79, 0x1d, 0x66, 0xfd, 0x7e, 0xd3, 0x37, 0x3d, 0xab, 0xc7, 0x6c, 0x6d, + 0x63, 0x4d, 0xee, 0xc0, 0x28, 0x21, 0x8d, 0x18, 0x16, 0x13, 0xd4, 0xa4, 0xcd, 0x2f, 0xb5, 0x90, + 0x09, 0x45, 0x2e, 0x5f, 0x0c, 0x75, 0x37, 0xc3, 0x45, 0x79, 0xef, 0x45, 0x8c, 0x05, 0x0e, 0x30, + 0x25, 0x4d, 0x58, 0x14, 0x8b, 0x8a, 0xba, 0x42, 0x6a, 0x49, 0x52, 0x54, 0x2f, 0x4b, 0x52, 0xe9, + 0xc5, 0xb5, 0x13, 0x29, 0xf1, 0x14, 0x2e, 0x43, 0x5e, 0xc8, 0xf0, 0xf5, 0xc1, 0xcb, 0x1c, 0xdf, + 0xcb, 0xba, 0x23, 0xf0, 0xbc, 0xbc, 0xe1, 0x5f, 0x26, 0x99, 0xc9, 0x26, 0xda, 0x4c, 0xc8, 0x12, + 0x94, 0xb8, 0x95, 0xb0, 0x90, 0xab, 0x96, 0xc3, 0xb9, 0xf9, 0xf8, 0x28, 0x31, 0x67, 0x58, 0xde, + 0x93, 0x13, 0x8a, 0xfc, 0x09, 0x13, 0x8a, 0x1e, 0x5c, 0x08, 0x6c, 0x7f, 0xcf, 0xeb, 0xfb, 0xc1, + 0x2a, 0xf5, 0x02, 0x5f, 0x1a, 0x51, 0x61, 0xe8, 0x2b, 0xd3, 0xf6, 0x36, 0x1b, 0x49, 0x2e, 0x98, + 0xc6, 0x9a, 0x99, 0x52, 0x60, 0xfb, 0x35, 0xdb, 0x76, 0xef, 0x87, 0xdb, 0x69, 0x51, 0x00, 0x96, + 0xa1, 0x55, 0x99, 0xd2, 0xde, 0x66, 0xe3, 0x04, 0x4a, 0x3c, 0x85, 0x0b, 0xd9, 0xe2, 0x4f, 0x75, + 0xcf, 0xb0, 0xad, 0x96, 0x11, 0x50, 0x96, 0xa2, 0xf8, 0xba, 0x9b, 0xb0, 0x53, 0xb5, 0x1d, 0xb1, + 0xb7, 0xd9, 0x48, 0x92, 0x60, 0xda, 0xb8, 0x71, 0xdd, 0x47, 0x9a, 0x9a, 0xd1, 0xca, 0x4f, 0x25, + 0xa3, 0x55, 0x86, 0xf3, 0x37, 0xc8, 0xc8, 0xdf, 0x12, 0x26, 0x3f, 0xc4, 0x5c, 0xaa, 0x05, 0x73, + 0x6c, 0xb2, 0xc3, 0x27, 0xfb, 0xd2, 0x66, 0xa7, 0x86, 0x5e, 0xb7, 0xad, 0xc5, 0x39, 0x60, 0x92, + 0xe5, 0x68, 0x5e, 0xfd, 0xf7, 0x05, 0xd9, 0xeb, 0x94, 0xc1, 0x64, 0x4a, 0xbf, 0x7c, 0x67, 0x22, + 0x8b, 0xcb, 0x77, 0x56, 0xa0, 0xc2, 0xd3, 0x65, 0xcf, 0x30, 0xc3, 0x3b, 0x85, 0x54, 0x3e, 0xdc, + 0x0e, 0x11, 0x18, 0xd1, 0x90, 0x45, 0x98, 0x68, 0x35, 0x79, 0x5c, 0x28, 0x46, 0x9d, 0x0e, 0x6b, + 0x75, 0x9c, 0x68, 0x35, 0xc9, 0x75, 0x28, 0xcb, 0x59, 0x5a, 0xd8, 0x08, 0xc0, 0xc5, 0xca, 0x29, + 0x9c, 0x8f, 0x0a, 0x3b, 0xae, 0x79, 0xd1, 0x18, 0x16, 0xc7, 0x92, 0x5f, 0xee, 0xbc, 0x72, 0xc1, + 0xf7, 0x8b, 0x70, 0x29, 0xbd, 0x5f, 0xed, 0x17, 0xc6, 0x76, 0x84, 0x29, 0xe4, 0x53, 0x4d, 0xe1, + 0xe3, 0x30, 0xe9, 0x73, 0xc5, 0xc3, 0xed, 0x20, 0x71, 0x4b, 0x87, 0x00, 0x61, 0x88, 0x23, 0x6f, + 0x02, 0xe9, 0x1a, 0x0f, 0xb6, 0xfc, 0xf6, 0xaa, 0xdb, 0xe7, 0xf7, 0x05, 0x21, 0x35, 0xc4, 0xb5, + 0x52, 0xc5, 0x68, 0x6b, 0x73, 0x6b, 0x80, 0x02, 0x53, 0x46, 0x91, 0x3a, 0x5c, 0x10, 0xe6, 0x11, + 0x5b, 0x24, 0x94, 0x3b, 0xad, 0xd1, 0xe2, 0x94, 0x20, 0x59, 0xc7, 0x34, 0xe2, 0x71, 0x45, 0xf8, + 0x6f, 0x0f, 0x4e, 0x52, 0xcc, 0xb1, 0xf4, 0x32, 0x9e, 0x5b, 0x8f, 0x5b, 0x01, 0x2e, 0xa4, 0x9c, + 0xc7, 0x8a, 0x87, 0x93, 0xdc, 0x19, 0xc2, 0xc9, 0x21, 0x94, 0xf6, 0x2d, 0x3b, 0xa0, 0x5e, 0x46, + 0xbd, 0x51, 0xa1, 0x52, 0xb7, 0x38, 0x53, 0x31, 0x57, 0x12, 0x7f, 0xa3, 0x14, 0xc4, 0x32, 0xd8, + 0x45, 0xbe, 0x9d, 0x12, 0xae, 0xe1, 0x86, 0x97, 0x93, 0xe4, 0xe5, 0x57, 0x3f, 0xd3, 0x2d, 0x41, + 0xeb, 0x29, 0x1c, 0xa2, 0x35, 0xe6, 0x34, 0x2c, 0xa6, 0x4a, 0x25, 0xab, 0x00, 0xaa, 0x89, 0x33, + 0x74, 0x96, 0x8f, 0x3d, 0x7a, 0x78, 0x05, 0x54, 0x97, 0xa7, 0xff, 0x3f, 0x7c, 0xab, 0x46, 0x7b, + 0xdb, 0x7c, 0x5e, 0xa7, 0x0d, 0x1b, 0xc7, 0xe5, 0x86, 0x29, 0x9f, 0xf7, 0xbc, 0xac, 0xeb, 0x6f, + 0xf2, 0x30, 0x1b, 0xff, 0x90, 0xe4, 0x1a, 0x94, 0x7a, 0x1e, 0xdd, 0xb7, 0x1e, 0x24, 0x6f, 0xd6, + 0xdb, 0xe1, 0x50, 0x94, 0x58, 0xe2, 0x42, 0xc9, 0x36, 0x9a, 0x2c, 0x01, 0x89, 0x8b, 0x99, 0xd6, + 0x47, 0xbe, 0x64, 0x28, 0x5c, 0xc1, 0x0b, 0x05, 0x6e, 0x72, 0xf6, 0x28, 0xc5, 0x30, 0x81, 0xfb, + 0x16, 0xb5, 0x5b, 0xa2, 0x59, 0x65, 0x1c, 0x02, 0x6f, 0x71, 0xf6, 0x28, 0xc5, 0x90, 0x77, 0xa1, + 0x22, 0xae, 0x23, 0x6c, 0xd5, 0x8f, 0xe5, 0xfc, 0xfc, 0x97, 0xce, 0x66, 0xb2, 0x7b, 0x56, 0x97, + 0x46, 0xee, 0xb8, 0x1a, 0x32, 0xc1, 0x88, 0x1f, 0xbf, 0x06, 0x7a, 0x3f, 0xa0, 0x5e, 0x23, 0x30, + 0xbc, 0xf0, 0x96, 0xe6, 0xe8, 0x1a, 0x68, 0x85, 0x41, 0x8d, 0x6a, 0xe9, 0x9f, 0x8a, 0x30, 0x1b, + 0x3f, 0x57, 0xf6, 0x94, 0x5a, 0x8e, 0x5e, 0x82, 0x32, 0x2f, 0x87, 0x6a, 0x9e, 0x93, 0xbc, 0x79, + 0x74, 0x4f, 0xc2, 0x51, 0x51, 0x10, 0x84, 0x8a, 0xf1, 0x64, 0x97, 0x35, 0x8b, 0xce, 0x06, 0x75, + 0x4d, 0x73, 0xc4, 0x86, 0xf1, 0xf4, 0x43, 0xf2, 0xe1, 0x6a, 0x27, 0xce, 0x53, 0x81, 0x31, 0x62, + 0xc3, 0x2c, 0xdf, 0xa3, 0xed, 0xb0, 0x26, 0xd2, 0x2c, 0x1f, 0x39, 0x14, 0x25, 0x96, 0xbc, 0x08, + 0x93, 0x9e, 0x6b, 0xd3, 0x1a, 0x6e, 0xcb, 0x94, 0xa7, 0x96, 0xd0, 0x50, 0x80, 0x31, 0xc4, 0x8f, + 0x63, 0xf9, 0x28, 0x6e, 0x00, 0x43, 0x4c, 0xe0, 0xd7, 0x61, 0xe1, 0x48, 0xd6, 0x59, 0x0d, 0xab, + 0xed, 0x18, 0x41, 0xd4, 0x6e, 0xa9, 0xb6, 0xa9, 0xef, 0x25, 0x09, 0x70, 0x70, 0xcc, 0x68, 0x11, + 0xe7, 0xaf, 0x99, 0x0d, 0xc7, 0xce, 0x24, 0xc6, 0xed, 0x23, 0x37, 0x06, 0xfb, 0x98, 0xc8, 0xda, + 0x3e, 0xf2, 0xa7, 0xda, 0xc7, 0xc7, 0xa0, 0xc8, 0xff, 0x99, 0x81, 0x5c, 0x5a, 0x52, 0x0b, 0x51, + 0xfc, 0x66, 0x79, 0x14, 0x38, 0x52, 0x83, 0xb9, 0xfb, 0x86, 0x15, 0xb0, 0x48, 0x21, 0xb6, 0x40, + 0xc5, 0x5a, 0x7c, 0x5e, 0xef, 0x34, 0x8a, 0xa1, 0x31, 0x49, 0x3f, 0x8c, 0x1d, 0x0e, 0xb7, 0xd2, + 0xf3, 0x3a, 0xcc, 0x72, 0x25, 0x6b, 0xa6, 0xc9, 0xa6, 0x7d, 0x1b, 0x2d, 0xd9, 0x3f, 0xa3, 0x16, + 0xc9, 0x76, 0x75, 0xec, 0x1a, 0x26, 0xa8, 0xe3, 0x56, 0x5f, 0xc9, 0xc6, 0xea, 0x77, 0x9f, 0x46, + 0x27, 0xc9, 0x97, 0xa1, 0x1c, 0xda, 0x05, 0x79, 0x41, 0x1b, 0x17, 0x2d, 0xeb, 0x30, 0x13, 0xe1, + 0x4c, 0x56, 0xa0, 0xe2, 0xf6, 0x68, 0xec, 0x72, 0x5d, 0x95, 0x00, 0xee, 0x84, 0x08, 0x8c, 0x68, + 0x98, 0x95, 0x08, 0xa9, 0x89, 0xe5, 0xca, 0x7b, 0x0c, 0x28, 0x95, 0x58, 0xfa, 0x4a, 0x0e, 0xc2, + 0x0b, 0xf7, 0xc8, 0x1a, 0x14, 0x7b, 0xae, 0x17, 0x88, 0xc5, 0xa9, 0xa9, 0x1b, 0x57, 0xd2, 0xcd, + 0x59, 0x74, 0xf6, 0xb8, 0x5e, 0x10, 0x71, 0x64, 0xbf, 0x7c, 0x14, 0x83, 0x99, 0x9e, 0xa6, 0xdd, + 0xf7, 0x03, 0xea, 0x6d, 0xec, 0x24, 0xf5, 0x5c, 0x0d, 0x11, 0x18, 0xd1, 0x2c, 0xfd, 0x6f, 0x1e, + 0xe6, 0x93, 0xc7, 0x30, 0xc9, 0x7b, 0x30, 0xe3, 0x5b, 0x6d, 0xc7, 0x72, 0xda, 0x72, 0x29, 0x20, + 0x37, 0x74, 0x47, 0x78, 0x43, 0x1f, 0x8f, 0x71, 0x76, 0x99, 0xed, 0x46, 0x6a, 0xe9, 0x31, 0x7f, + 0x7e, 0xe9, 0xf1, 0xc3, 0xc1, 0x13, 0x36, 0x9f, 0xcf, 0xf8, 0x20, 0xec, 0x79, 0x79, 0xc0, 0x7f, + 0x16, 0xe1, 0x52, 0xfa, 0x91, 0xd7, 0xa7, 0x34, 0xf5, 0x88, 0x5a, 0x96, 0x27, 0x4e, 0x6c, 0x59, + 0x0e, 0x54, 0xa9, 0x93, 0xcf, 0xe8, 0x08, 0xab, 0x7a, 0x01, 0xa7, 0x54, 0x3b, 0xfa, 0xa4, 0xa8, + 0xf0, 0xd8, 0x49, 0xd1, 0x35, 0x28, 0x89, 0xd3, 0x7b, 0xc9, 0xc9, 0x46, 0x9d, 0x43, 0x51, 0x62, + 0xb5, 0xa4, 0x53, 0x3a, 0x35, 0xe9, 0xb0, 0x24, 0x1a, 0xae, 0xa5, 0x0d, 0xd7, 0x50, 0x29, 0x92, + 0x68, 0x38, 0x16, 0x23, 0x36, 0xfc, 0xa4, 0x45, 0xcf, 0x8a, 0xfe, 0x1f, 0x40, 0x74, 0xd2, 0x62, + 0x67, 0xe3, 0x2e, 0x6e, 0xa2, 0xc4, 0xc6, 0x8b, 0xee, 0x4a, 0x26, 0x45, 0x77, 0xba, 0xcd, 0x9d, + 0x97, 0xd5, 0x9b, 0xb0, 0x30, 0xf0, 0xcd, 0xcf, 0x5c, 0x18, 0x5d, 0x83, 0x92, 0xdf, 0xdf, 0x67, + 0x74, 0x89, 0xf3, 0x65, 0x0d, 0x0e, 0x45, 0x89, 0x5d, 0xfa, 0x56, 0x81, 0x49, 0x49, 0x1c, 0x8e, + 0x7e, 0x4a, 0x5e, 0xf5, 0x1a, 0xcc, 0x88, 0xd2, 0xe4, 0x2d, 0xed, 0xfc, 0x54, 0x59, 0x6b, 0x49, + 0xd6, 0x91, 0x18, 0xa7, 0x25, 0x1b, 0xdc, 0x4c, 0x86, 0x9e, 0xdc, 0x83, 0xb4, 0x24, 0x96, 0x42, + 0x25, 0x03, 0xf2, 0x32, 0x4c, 0xf1, 0x87, 0x10, 0xaf, 0x5c, 0xd6, 0xe8, 0xbc, 0xa9, 0xfc, 0x66, + 0x04, 0x46, 0x9d, 0x26, 0xbe, 0x4c, 0x5e, 0xcc, 0x64, 0x99, 0x7c, 0xe0, 0xab, 0x9c, 0x97, 0xdd, + 0x7d, 0xb3, 0x0c, 0xea, 0x42, 0x5f, 0x62, 0x0e, 0x5c, 0xab, 0xfc, 0xa9, 0xa1, 0x97, 0xc9, 0x42, + 0x55, 0xc4, 0xca, 0x62, 0x4a, 0x51, 0xf0, 0x26, 0x10, 0x79, 0x8f, 0xaf, 0x9c, 0xbe, 0x69, 0xff, + 0x53, 0x4f, 0x2d, 0x0b, 0x36, 0x06, 0x28, 0x30, 0x65, 0x14, 0x79, 0x93, 0xdf, 0xfd, 0x1d, 0x18, + 0x96, 0xa3, 0x22, 0xef, 0x0b, 0x27, 0x74, 0x41, 0x0b, 0x22, 0x75, 0x8b, 0xb7, 0xf8, 0x89, 0xd1, + 0x70, 0x72, 0x13, 0x26, 0x8f, 0x5c, 0xbb, 0xdf, 0x95, 0x0b, 0x35, 0x53, 0x37, 0x16, 0xd3, 0x38, + 0xdd, 0xe3, 0x24, 0x5a, 0xaf, 0xa0, 0x18, 0x82, 0xe1, 0x58, 0x42, 0x61, 0x8e, 0x6f, 0x55, 0x59, + 0xc1, 0xb1, 0x74, 0x00, 0xb9, 0x5b, 0x7b, 0x2d, 0x8d, 0xdd, 0x8e, 0xdb, 0x6a, 0xc4, 0xa9, 0xe5, + 0xbf, 0x0b, 0x8a, 0x03, 0x31, 0xc9, 0x93, 0xdc, 0x82, 0xb2, 0xb1, 0xbf, 0x6f, 0x39, 0x56, 0x70, + 0x2c, 0x57, 0xda, 0x3f, 0x9a, 0xc6, 0xbf, 0x26, 0x69, 0xe4, 0x41, 0x3b, 0xf9, 0x0b, 0xd5, 0x58, + 0x72, 0x17, 0xa6, 0x02, 0xd7, 0x96, 0x33, 0x44, 0x5f, 0x16, 0x8c, 0x97, 0xd3, 0x58, 0xed, 0x29, + 0xb2, 0x68, 0x3d, 0x3a, 0x82, 0xf9, 0xa8, 0xf3, 0x21, 0x7f, 0x94, 0x83, 0x69, 0xc7, 0x6d, 0xd1, + 0xd0, 0xf5, 0xe4, 0xc2, 0xe8, 0x3b, 0x19, 0x5d, 0x44, 0xbd, 0xbc, 0xad, 0xf1, 0x16, 0x1e, 0xa2, + 0x0e, 0x60, 0xe9, 0x28, 0x8c, 0x29, 0x41, 0x1c, 0x98, 0xb7, 0xba, 0x46, 0x9b, 0xee, 0xf4, 0x6d, + 0xb9, 0xe9, 0xed, 0xcb, 0xe4, 0x91, 0xda, 0x3b, 0xcf, 0xff, 0xb1, 0xa4, 0xb8, 0x7f, 0x1d, 0xe9, + 0x3e, 0xf5, 0xf8, 0x35, 0xf0, 0xea, 0x3f, 0x49, 0x6c, 0x24, 0x38, 0xe1, 0x00, 0x6f, 0x56, 0xff, + 0xf6, 0x3c, 0xcb, 0xe5, 0xdf, 0xcd, 0x36, 0x7c, 0x71, 0x91, 0x37, 0xc4, 0xdb, 0xb4, 0x77, 0x92, + 0x04, 0x38, 0x38, 0x46, 0x1c, 0xa5, 0x11, 0x40, 0xbe, 0x05, 0x56, 0x0c, 0x8f, 0xd2, 0x08, 0x18, + 0x2a, 0xec, 0xe2, 0x67, 0x60, 0x61, 0xe0, 0xdd, 0x0c, 0x15, 0x10, 0xfe, 0x24, 0x07, 0xc9, 0x13, + 0x27, 0x6c, 0x06, 0xdf, 0xb2, 0x3c, 0xce, 0xf0, 0x38, 0xb9, 0xf2, 0xbb, 0x16, 0x22, 0x30, 0xa2, + 0x21, 0x57, 0xa1, 0xd0, 0x33, 0x82, 0x4e, 0x72, 0xcb, 0x9a, 0xb1, 0x44, 0x8e, 0xe1, 0xff, 0x5a, + 0x89, 0xfd, 0xa2, 0x6d, 0xfa, 0xa0, 0x27, 0x0b, 0x92, 0xe8, 0x5f, 0x2b, 0x29, 0x0c, 0x6a, 0x54, + 0x4b, 0xdf, 0x2b, 0xc2, 0x6c, 0x3c, 0xb7, 0xb0, 0x19, 0x10, 0x75, 0x5a, 0x3d, 0xd7, 0x72, 0x82, + 0xe4, 0xbf, 0xaf, 0xb9, 0x29, 0xe1, 0xa8, 0x28, 0x58, 0x9e, 0xec, 0xd2, 0xa0, 0xe3, 0xb6, 0x92, + 0x79, 0x72, 0x8b, 0x43, 0x51, 0x62, 0xb9, 0xfa, 0xae, 0x17, 0x48, 0xb5, 0x22, 0xf5, 0x5d, 0x2f, + 0x40, 0x8e, 0x09, 0x77, 0xdc, 0x0b, 0x27, 0xec, 0xb8, 0xb7, 0x61, 0x5e, 0x5c, 0xcc, 0xb0, 0x4a, + 0xbd, 0xe0, 0x89, 0x7b, 0x36, 0x1a, 0x09, 0x16, 0x38, 0xc0, 0x94, 0xff, 0x6f, 0x32, 0x0e, 0xe3, + 0x83, 0x9f, 0xf0, 0x00, 0x4d, 0x23, 0xce, 0x01, 0x93, 0x2c, 0xc7, 0xb1, 0xa6, 0x14, 0xff, 0x8e, + 0x4f, 0x7c, 0x6e, 0xbc, 0xfc, 0x8b, 0x70, 0x6e, 0xbc, 0xbe, 0xfc, 0x83, 0x9f, 0x5d, 0x7e, 0xe6, + 0x47, 0x3f, 0xbb, 0xfc, 0xcc, 0x8f, 0x7f, 0x76, 0xf9, 0x99, 0xaf, 0x3c, 0xba, 0x9c, 0xfb, 0xc1, + 0xa3, 0xcb, 0xb9, 0x1f, 0x3d, 0xba, 0x9c, 0xfb, 0xf1, 0xa3, 0xcb, 0xb9, 0x9f, 0x3e, 0xba, 0x9c, + 0xfb, 0xd6, 0xcf, 0x2f, 0x3f, 0xf3, 0xd9, 0x72, 0xf8, 0xf0, 0xff, 0x17, 0x00, 0x00, 0xff, 0xff, + 0x7b, 0x20, 0x3b, 0xee, 0x41, 0x79, 0x00, 0x00, } func (m *AMQPConsumeConfig) Marshal() (dAtA []byte, err error) { @@ -2759,6 +2798,37 @@ func (m *EventSourceSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if len(m.RedisStream) > 0 { + keysForRedisStream := make([]string, 0, len(m.RedisStream)) + for k := range m.RedisStream { + keysForRedisStream = append(keysForRedisStream, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForRedisStream) + for iNdEx := len(keysForRedisStream) - 1; iNdEx >= 0; iNdEx-- { + v := m.RedisStream[string(keysForRedisStream[iNdEx])] + baseI := i + { + size, err := (&v).MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + i -= len(keysForRedisStream[iNdEx]) + copy(dAtA[i:], keysForRedisStream[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(keysForRedisStream[iNdEx]))) + i-- + dAtA[i] = 0xa + i = encodeVarintGenerated(dAtA, i, uint64(baseI-i)) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xf2 + } + } if len(m.BitbucketServer) > 0 { keysForBitbucketServer := make([]string, 0, len(m.BitbucketServer)) for k := range m.BitbucketServer { @@ -5044,6 +5114,102 @@ func (m *RedisEventSource) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *RedisStreamEventSource) 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 *RedisStreamEventSource) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RedisStreamEventSource) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Metadata) > 0 { + keysForMetadata := make([]string, 0, len(m.Metadata)) + for k := range m.Metadata { + keysForMetadata = append(keysForMetadata, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForMetadata) + for iNdEx := len(keysForMetadata) - 1; iNdEx >= 0; iNdEx-- { + v := m.Metadata[string(keysForMetadata[iNdEx])] + baseI := i + i -= len(v) + copy(dAtA[i:], v) + i = encodeVarintGenerated(dAtA, i, uint64(len(v))) + i-- + dAtA[i] = 0x12 + i -= len(keysForMetadata[iNdEx]) + copy(dAtA[i:], keysForMetadata[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(keysForMetadata[iNdEx]))) + i-- + dAtA[i] = 0xa + i = encodeVarintGenerated(dAtA, i, uint64(baseI-i)) + i-- + dAtA[i] = 0x42 + } + } + if m.TLS != nil { + { + size, err := m.TLS.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x3a + } + i -= len(m.CommonCG) + copy(dAtA[i:], m.CommonCG) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.CommonCG))) + i-- + dAtA[i] = 0x32 + i = encodeVarintGenerated(dAtA, i, uint64(m.MaxMsgCountPerRead)) + i-- + dAtA[i] = 0x28 + if len(m.Streams) > 0 { + for iNdEx := len(m.Streams) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Streams[iNdEx]) + copy(dAtA[i:], m.Streams[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Streams[iNdEx]))) + i-- + dAtA[i] = 0x22 + } + } + i = encodeVarintGenerated(dAtA, i, uint64(m.DB)) + i-- + dAtA[i] = 0x18 + if m.Password != nil { + { + size, err := m.Password.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + i -= len(m.HostAddress) + copy(dAtA[i:], m.HostAddress) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.HostAddress))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + func (m *ResourceEventSource) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -6681,6 +6847,15 @@ func (m *EventSourceSpec) Size() (n int) { n += mapEntrySize + 2 + sovGenerated(uint64(mapEntrySize)) } } + if len(m.RedisStream) > 0 { + for k, v := range m.RedisStream { + _ = k + _ = v + l = v.Size() + mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + l + sovGenerated(uint64(l)) + n += mapEntrySize + 2 + sovGenerated(uint64(mapEntrySize)) + } + } return n } @@ -7205,6 +7380,43 @@ func (m *RedisEventSource) Size() (n int) { return n } +func (m *RedisStreamEventSource) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.HostAddress) + n += 1 + l + sovGenerated(uint64(l)) + if m.Password != nil { + l = m.Password.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + n += 1 + sovGenerated(uint64(m.DB)) + if len(m.Streams) > 0 { + for _, s := range m.Streams { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + n += 1 + sovGenerated(uint64(m.MaxMsgCountPerRead)) + l = len(m.CommonCG) + n += 1 + l + sovGenerated(uint64(l)) + if m.TLS != nil { + l = m.TLS.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if len(m.Metadata) > 0 { + for k, v := range m.Metadata { + _ = k + _ = v + mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + len(v) + sovGenerated(uint64(len(v))) + n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + } + } + return n +} + func (m *ResourceEventSource) Size() (n int) { if m == nil { return 0 @@ -8102,6 +8314,16 @@ func (this *EventSourceSpec) String() string { mapStringForBitbucketServer += fmt.Sprintf("%v: %v,", k, this.BitbucketServer[k]) } mapStringForBitbucketServer += "}" + keysForRedisStream := make([]string, 0, len(this.RedisStream)) + for k := range this.RedisStream { + keysForRedisStream = append(keysForRedisStream, k) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForRedisStream) + mapStringForRedisStream := "map[string]RedisStreamEventSource{" + for _, k := range keysForRedisStream { + mapStringForRedisStream += fmt.Sprintf("%v: %v,", k, this.RedisStream[k]) + } + mapStringForRedisStream += "}" s := strings.Join([]string{`&EventSourceSpec{`, `EventBusName:` + fmt.Sprintf("%v", this.EventBusName) + `,`, `Template:` + strings.Replace(this.Template.String(), "Template", "Template", 1) + `,`, @@ -8132,6 +8354,7 @@ func (this *EventSourceSpec) String() string { `Generic:` + mapStringForGeneric + `,`, `Replicas:` + valueToStringGenerated(this.Replicas) + `,`, `BitbucketServer:` + mapStringForBitbucketServer + `,`, + `RedisStream:` + mapStringForRedisStream + `,`, `}`, }, "") return s @@ -8520,6 +8743,33 @@ func (this *RedisEventSource) String() string { }, "") return s } +func (this *RedisStreamEventSource) String() string { + if this == nil { + return "nil" + } + keysForMetadata := make([]string, 0, len(this.Metadata)) + for k := range this.Metadata { + keysForMetadata = append(keysForMetadata, k) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForMetadata) + mapStringForMetadata := "map[string]string{" + for _, k := range keysForMetadata { + mapStringForMetadata += fmt.Sprintf("%v: %v,", k, this.Metadata[k]) + } + mapStringForMetadata += "}" + s := strings.Join([]string{`&RedisStreamEventSource{`, + `HostAddress:` + fmt.Sprintf("%v", this.HostAddress) + `,`, + `Password:` + strings.Replace(fmt.Sprintf("%v", this.Password), "SecretKeySelector", "v1.SecretKeySelector", 1) + `,`, + `DB:` + fmt.Sprintf("%v", this.DB) + `,`, + `Streams:` + fmt.Sprintf("%v", this.Streams) + `,`, + `MaxMsgCountPerRead:` + fmt.Sprintf("%v", this.MaxMsgCountPerRead) + `,`, + `CommonCG:` + fmt.Sprintf("%v", this.CommonCG) + `,`, + `TLS:` + strings.Replace(fmt.Sprintf("%v", this.TLS), "TLSConfig", "common.TLSConfig", 1) + `,`, + `Metadata:` + mapStringForMetadata + `,`, + `}`, + }, "") + return s +} func (this *ResourceEventSource) String() string { if this == nil { return "nil" @@ -15460,38 +15710,167 @@ func (m *EventSourceSpec) Unmarshal(dAtA []byte) error { } m.BitbucketServer[mapkey] = *mapvalue iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err + case 30: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RedisStream", wireType) } - if (skippy < 0) || (iNdEx+skippy) < 0 { + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { return ErrInvalidLengthGenerated } - if (iNdEx + skippy) > l { + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { return io.ErrUnexpectedEOF } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *EventSourceStatus) 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 ErrIntOverflowGenerated + if m.RedisStream == nil { + m.RedisStream = make(map[string]RedisStreamEventSource) } - if iNdEx >= l { + var mapkey string + mapvalue := &RedisStreamEventSource{} + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthGenerated + } + postmsgIndex := iNdEx + mapmsglen + if postmsgIndex < 0 { + return ErrInvalidLengthGenerated + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue = &RedisStreamEventSource{} + if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.RedisStream[mapkey] = *mapvalue + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *EventSourceStatus) 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 ErrIntOverflowGenerated + } + if iNdEx >= l { return io.ErrUnexpectedEOF } b := dAtA[iNdEx] @@ -20979,6 +21358,389 @@ func (m *RedisEventSource) Unmarshal(dAtA []byte) error { } return nil } +func (m *RedisStreamEventSource) 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 ErrIntOverflowGenerated + } + 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: RedisStreamEventSource: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: RedisStreamEventSource: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field HostAddress", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.HostAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Password", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Password == nil { + m.Password = &v1.SecretKeySelector{} + } + if err := m.Password.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field DB", wireType) + } + m.DB = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.DB |= int32(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Streams", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Streams = append(m.Streams, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 5: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field MaxMsgCountPerRead", wireType) + } + m.MaxMsgCountPerRead = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.MaxMsgCountPerRead |= int32(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CommonCG", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.CommonCG = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TLS", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.TLS == nil { + m.TLS = &common.TLSConfig{} + } + if err := m.TLS.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Metadata", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Metadata == nil { + m.Metadata = make(map[string]string) + } + var mapkey string + var mapvalue string + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var stringLenmapvalue uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapvalue |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapvalue := int(stringLenmapvalue) + if intStringLenmapvalue < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapvalue := iNdEx + intStringLenmapvalue + if postStringIndexmapvalue < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapvalue > l { + return io.ErrUnexpectedEOF + } + mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) + iNdEx = postStringIndexmapvalue + } else { + iNdEx = entryPreIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.Metadata[mapkey] = mapvalue + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *ResourceEventSource) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 diff --git a/pkg/apis/eventsource/v1alpha1/generated.proto b/pkg/apis/eventsource/v1alpha1/generated.proto index 89b6873343..76971c558f 100644 --- a/pkg/apis/eventsource/v1alpha1/generated.proto +++ b/pkg/apis/eventsource/v1alpha1/generated.proto @@ -425,6 +425,9 @@ message EventSourceSpec { // Bitbucket Server event sources map bitbucketserver = 29; + + // Redis stream source + map redisStream = 30; } // EventSourceStatus holds the status of the event-source resource @@ -914,6 +917,43 @@ message RedisEventSource { map metadata = 7; } +// RedisStreamEventSource describes an event source for +// Redis streams (https://redis.io/topics/streams-intro) +message RedisStreamEventSource { + // HostAddress refers to the address of the Redis host/server + optional string hostAddress = 1; + + // Password required for authentication if any. + // +optional + optional k8s.io.api.core.v1.SecretKeySelector password = 2; + + // DB to use. If not specified, default DB 0 will be used. + // +optional + optional int32 db = 3; + + // Streams to look for entries. XREADGROUP is used on all streams using a single consumer group. + repeated string streams = 4; + + // MaxMsgCountPerRead holds the maximum number of messages per stream that will be read in each XREADGROUP of all streams + // Example: if there are 2 streams and MaxMsgCountPerRead=10, then each XREADGROUP may read upto a total of 20 messages. + // Same as COUNT option in XREADGROUP(https://redis.io/topics/streams-intro). Defaults to 10 + // +optional + optional int32 maxMsgCountPerRead = 5; + + // CommonCG refers to the Redis stream consumer group that will be + // created on all redis streams. Messages are read through this group. Defaults to 'argo-events-cg' + // +optional + optional string commonConsumerGroup = 6; + + // TLS configuration for the redis client. + // +optional + optional github.com.argoproj.argo_events.pkg.apis.common.TLSConfig tls = 7; + + // Metadata holds the user defined metadata which will passed along the event payload. + // +optional + map metadata = 8; +} + // ResourceEventSource refers to a event-source for K8s resource related events. message ResourceEventSource { // Namespace where resource is deployed diff --git a/pkg/apis/eventsource/v1alpha1/openapi_generated.go b/pkg/apis/eventsource/v1alpha1/openapi_generated.go index acbbdce2d9..422550e695 100644 --- a/pkg/apis/eventsource/v1alpha1/openapi_generated.go +++ b/pkg/apis/eventsource/v1alpha1/openapi_generated.go @@ -61,6 +61,7 @@ func GetOpenAPIDefinitions(ref common.ReferenceCallback) map[string]common.OpenA "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.PubSubEventSource": schema_pkg_apis_eventsource_v1alpha1_PubSubEventSource(ref), "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.PulsarEventSource": schema_pkg_apis_eventsource_v1alpha1_PulsarEventSource(ref), "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.RedisEventSource": schema_pkg_apis_eventsource_v1alpha1_RedisEventSource(ref), + "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.RedisStreamEventSource": schema_pkg_apis_eventsource_v1alpha1_RedisStreamEventSource(ref), "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.ResourceEventSource": schema_pkg_apis_eventsource_v1alpha1_ResourceEventSource(ref), "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.ResourceFilter": schema_pkg_apis_eventsource_v1alpha1_ResourceFilter(ref), "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.SNSEventSource": schema_pkg_apis_eventsource_v1alpha1_SNSEventSource(ref), @@ -1253,11 +1254,26 @@ func schema_pkg_apis_eventsource_v1alpha1_EventSourceSpec(ref common.ReferenceCa }, }, }, + "redisStream": { + SchemaProps: spec.SchemaProps{ + Description: "Redis stream source", + Type: []string{"object"}, + AdditionalProperties: &spec.SchemaOrBool{ + Allows: true, + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Default: map[string]interface{}{}, + Ref: ref("github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.RedisStreamEventSource"), + }, + }, + }, + }, + }, }, }, }, Dependencies: []string{ - "github.com/argoproj/argo-events/pkg/apis/common.S3Artifact", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.AMQPEventSource", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.AzureEventsHubEventSource", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.BitbucketServerEventSource", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.CalendarEventSource", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.EmitterEventSource", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.FileEventSource", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.GenericEventSource", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.GithubEventSource", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.GitlabEventSource", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.HDFSEventSource", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.KafkaEventSource", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.MQTTEventSource", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.NATSEventsSource", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.NSQEventSource", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.PubSubEventSource", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.PulsarEventSource", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.RedisEventSource", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.ResourceEventSource", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.SNSEventSource", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.SQSEventSource", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.Service", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.SlackEventSource", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.StorageGridEventSource", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.StripeEventSource", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.Template", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.WebhookContext"}, + "github.com/argoproj/argo-events/pkg/apis/common.S3Artifact", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.AMQPEventSource", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.AzureEventsHubEventSource", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.BitbucketServerEventSource", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.CalendarEventSource", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.EmitterEventSource", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.FileEventSource", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.GenericEventSource", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.GithubEventSource", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.GitlabEventSource", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.HDFSEventSource", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.KafkaEventSource", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.MQTTEventSource", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.NATSEventsSource", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.NSQEventSource", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.PubSubEventSource", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.PulsarEventSource", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.RedisEventSource", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.RedisStreamEventSource", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.ResourceEventSource", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.SNSEventSource", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.SQSEventSource", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.Service", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.SlackEventSource", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.StorageGridEventSource", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.StripeEventSource", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.Template", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.WebhookContext"}, } } @@ -2505,6 +2521,94 @@ func schema_pkg_apis_eventsource_v1alpha1_RedisEventSource(ref common.ReferenceC } } +func schema_pkg_apis_eventsource_v1alpha1_RedisStreamEventSource(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "RedisStreamEventSource describes an event source for Redis streams (https://redis.io/topics/streams-intro)", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "hostAddress": { + SchemaProps: spec.SchemaProps{ + Description: "HostAddress refers to the address of the Redis host/server", + Default: "", + Type: []string{"string"}, + Format: "", + }, + }, + "password": { + SchemaProps: spec.SchemaProps{ + Description: "Password required for authentication if any.", + Ref: ref("k8s.io/api/core/v1.SecretKeySelector"), + }, + }, + "db": { + SchemaProps: spec.SchemaProps{ + Description: "DB to use. If not specified, default DB 0 will be used.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "streams": { + SchemaProps: spec.SchemaProps{ + Description: "Streams to look for entries. XREADGROUP is used on all streams using a single consumer group.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Default: "", + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "maxMsgCountPerRead": { + SchemaProps: spec.SchemaProps{ + Description: "MaxMsgCountPerRead holds the maximum number of messages per stream that will be read in each XREADGROUP of all streams Example: if there are 2 streams and MaxMsgCountPerRead=10, then each XREADGROUP may read upto a total of 20 messages. Same as COUNT option in XREADGROUP(https://redis.io/topics/streams-intro). Defaults to 10", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "commonConsumerGroup": { + SchemaProps: spec.SchemaProps{ + Description: "CommonCG refers to the Redis stream consumer group that will be created on all redis streams. Messages are read through this group. Defaults to 'argo-events-cg'", + Type: []string{"string"}, + Format: "", + }, + }, + "tls": { + SchemaProps: spec.SchemaProps{ + Description: "TLS configuration for the redis client.", + Ref: ref("github.com/argoproj/argo-events/pkg/apis/common.TLSConfig"), + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Metadata holds the user defined metadata which will passed along the event payload.", + Type: []string{"object"}, + AdditionalProperties: &spec.SchemaOrBool{ + Allows: true, + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Default: "", + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + }, + Required: []string{"hostAddress", "streams"}, + }, + }, + Dependencies: []string{ + "github.com/argoproj/argo-events/pkg/apis/common.TLSConfig", "k8s.io/api/core/v1.SecretKeySelector"}, + } +} + func schema_pkg_apis_eventsource_v1alpha1_ResourceEventSource(ref common.ReferenceCallback) common.OpenAPIDefinition { return common.OpenAPIDefinition{ Schema: spec.Schema{ diff --git a/pkg/apis/eventsource/v1alpha1/types.go b/pkg/apis/eventsource/v1alpha1/types.go index 60dfee4aa8..38ecfb5fef 100644 --- a/pkg/apis/eventsource/v1alpha1/types.go +++ b/pkg/apis/eventsource/v1alpha1/types.go @@ -108,6 +108,8 @@ type EventSourceSpec struct { Replicas *int32 `json:"replicas,omitempty" protobuf:"varint,28,opt,name=replicas"` // Bitbucket Server event sources BitbucketServer map[string]BitbucketServerEventSource `json:"bitbucketserver,omitempty" protobuf:"bytes,29,rep,name=bitbucketserver"` + // Redis stream source + RedisStream map[string]RedisStreamEventSource `json:"redisStream,omitempty" protobuf:"bytes,30,rep,name=redisStream"` } func (e EventSourceSpec) GetReplicas() int32 { @@ -965,6 +967,36 @@ type RedisEventSource struct { Metadata map[string]string `json:"metadata,omitempty" protobuf:"bytes,7,rep,name=metadata"` } +// RedisStreamEventSource describes an event source for +// Redis streams (https://redis.io/topics/streams-intro) +type RedisStreamEventSource struct { + // HostAddress refers to the address of the Redis host/server + HostAddress string `json:"hostAddress" protobuf:"bytes,1,opt,name=hostAddress"` + // Password required for authentication if any. + // +optional + Password *corev1.SecretKeySelector `json:"password,omitempty" protobuf:"bytes,2,opt,name=password"` + // DB to use. If not specified, default DB 0 will be used. + // +optional + DB int32 `json:"db,omitempty" protobuf:"varint,3,opt,name=db"` + // Streams to look for entries. XREADGROUP is used on all streams using a single consumer group. + Streams []string `json:"streams" protobuf:"bytes,4,rep,name=streams"` + // MaxMsgCountPerRead holds the maximum number of messages per stream that will be read in each XREADGROUP of all streams + // Example: if there are 2 streams and MaxMsgCountPerRead=10, then each XREADGROUP may read upto a total of 20 messages. + // Same as COUNT option in XREADGROUP(https://redis.io/topics/streams-intro). Defaults to 10 + // +optional + MaxMsgCountPerRead int32 `json:"maxMsgCountPerRead,omitempty" protobuf:"varint,5,opt,name=maxMsgCountPerRead"` + // CommonCG refers to the Redis stream consumer group that will be + // created on all redis streams. Messages are read through this group. Defaults to 'argo-events-cg' + // +optional + CommonCG string `json:"commonConsumerGroup,omitempty" protobuf:"bytes,6,opt,name=commonConsumerGroup"` + // TLS configuration for the redis client. + // +optional + TLS *apicommon.TLSConfig `json:"tls,omitempty" protobuf:"bytes,7,opt,name=tls"` + // Metadata holds the user defined metadata which will passed along the event payload. + // +optional + Metadata map[string]string `json:"metadata,omitempty" protobuf:"bytes,8,rep,name=metadata"` +} + // NSQEventSource describes the event source for NSQ PubSub // More info at https://godoc.org/github.com/nsqio/go-nsq type NSQEventSource struct { diff --git a/pkg/apis/eventsource/v1alpha1/zz_generated.deepcopy.go b/pkg/apis/eventsource/v1alpha1/zz_generated.deepcopy.go index 78e6f96567..e143184fb3 100644 --- a/pkg/apis/eventsource/v1alpha1/zz_generated.deepcopy.go +++ b/pkg/apis/eventsource/v1alpha1/zz_generated.deepcopy.go @@ -618,6 +618,13 @@ func (in *EventSourceSpec) DeepCopyInto(out *EventSourceSpec) { (*out)[key] = *val.DeepCopy() } } + if in.RedisStream != nil { + in, out := &in.RedisStream, &out.RedisStream + *out = make(map[string]RedisStreamEventSource, len(*in)) + for key, val := range *in { + (*out)[key] = *val.DeepCopy() + } + } return } @@ -1176,6 +1183,44 @@ func (in *RedisEventSource) DeepCopy() *RedisEventSource { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *RedisStreamEventSource) DeepCopyInto(out *RedisStreamEventSource) { + *out = *in + if in.Password != nil { + in, out := &in.Password, &out.Password + *out = new(v1.SecretKeySelector) + (*in).DeepCopyInto(*out) + } + if in.Streams != nil { + in, out := &in.Streams, &out.Streams + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.TLS != nil { + in, out := &in.TLS, &out.TLS + *out = new(common.TLSConfig) + (*in).DeepCopyInto(*out) + } + if in.Metadata != nil { + in, out := &in.Metadata, &out.Metadata + *out = make(map[string]string, len(*in)) + for key, val := range *in { + (*out)[key] = val + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RedisStreamEventSource. +func (in *RedisStreamEventSource) DeepCopy() *RedisStreamEventSource { + if in == nil { + return nil + } + out := new(RedisStreamEventSource) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ResourceEventSource) DeepCopyInto(out *ResourceEventSource) { *out = *in