From 611897b302d8e50e937a28602310f8d154612808 Mon Sep 17 00:00:00 2001 From: Quentin Faidide Date: Mon, 8 Apr 2024 22:28:27 +0300 Subject: [PATCH 1/3] feat: add RetryInterval to Pipeline and Vertex limits Signed-off-by: Quentin Faidide --- api/json-schema/schema.json | 8 + api/openapi-spec/swagger.json | 8 + .../full/numaflow.numaproj.io_pipelines.yaml | 5 + .../full/numaflow.numaproj.io_vertices.yaml | 10 + config/install.yaml | 15 + config/namespace-install.yaml | 15 + docs/APIs.md | 32 + go.mod | 1 + go.sum | 2 + pkg/apis/numaflow/v1alpha1/const.go | 3 + pkg/apis/numaflow/v1alpha1/generated.pb.go | 961 ++++++++++-------- pkg/apis/numaflow/v1alpha1/generated.proto | 12 + .../numaflow/v1alpha1/openapi_generated.go | 12 + pkg/apis/numaflow/v1alpha1/pipeline_types.go | 11 + .../numaflow/v1alpha1/pipeline_types_test.go | 3 + pkg/apis/numaflow/v1alpha1/vertex_types.go | 4 + .../v1alpha1/zz_generated.deepcopy.go | 10 + pkg/reconciler/pipeline/controller.go | 6 + pkg/reconciler/pipeline/controller_test.go | 73 ++ pkg/sinks/blackhole/blackhole.go | 3 + pkg/sinks/forward/options.go | 3 +- pkg/sinks/kafka/kafka.go | 3 + pkg/sinks/logger/log.go | 3 + pkg/sinks/udsink/sink.go | 3 + pkg/sources/forward/options.go | 2 +- pkg/sources/generator/tickgen.go | 3 + pkg/sources/http/http.go | 3 + pkg/sources/kafka/reader.go | 3 + pkg/sources/nats/nats.go | 3 + pkg/sources/udsource/user_defined_source.go | 3 + pkg/udf/forward/options.go | 2 +- .../common/SpecEditor/index.test.tsx | 1 + .../components/pages/Namespace/index.test.tsx | 1 + .../NamespaceListingWrapper/PipelinesTypes.ts | 1 + .../partials/PipelineCard/index.test.tsx | 2 + .../PipelineSummaryStatus/index.test.tsx | 1 + 36 files changed, 801 insertions(+), 430 deletions(-) diff --git a/api/json-schema/schema.json b/api/json-schema/schema.json index 9575e20969..67aa8b2141 100644 --- a/api/json-schema/schema.json +++ b/api/json-schema/schema.json @@ -19144,6 +19144,10 @@ "readTimeout": { "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Duration", "description": "Read timeout for all the vertices in the pipeline, can be overridden by the vertex's limit settings" + }, + "retryInterval": { + "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Duration", + "description": "RetryInterval is the wait time before retrying a batch after getting an error from a user defined processor or ISBSVC. A small value similar to the default of 0.001s will use more CPU if a processor or buffer enters a prolonged failed state, while a larger value might introduce unecessary delays on short-lived errors." } }, "type": "object" @@ -19832,6 +19836,10 @@ "readTimeout": { "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Duration", "description": "Read timeout duration from the source or buffer It overrides the settings from pipeline limits." + }, + "retryInterval": { + "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Duration", + "description": "RetryInterval is the duration waited for before retrying after a UDF processing or buffer writing. It overrides the settings from the pipeline limits." } }, "type": "object" diff --git a/api/openapi-spec/swagger.json b/api/openapi-spec/swagger.json index bb0db10138..c222052c0a 100644 --- a/api/openapi-spec/swagger.json +++ b/api/openapi-spec/swagger.json @@ -19131,6 +19131,10 @@ "readTimeout": { "description": "Read timeout for all the vertices in the pipeline, can be overridden by the vertex's limit settings", "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Duration" + }, + "retryInterval": { + "description": "RetryInterval is the wait time before retrying a batch after getting an error from a user defined processor or ISBSVC. A small value similar to the default of 0.001s will use more CPU if a processor or buffer enters a prolonged failed state, while a larger value might introduce unecessary delays on short-lived errors.", + "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Duration" } } }, @@ -19810,6 +19814,10 @@ "readTimeout": { "description": "Read timeout duration from the source or buffer It overrides the settings from pipeline limits.", "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Duration" + }, + "retryInterval": { + "description": "RetryInterval is the duration waited for before retrying after a UDF processing or buffer writing. It overrides the settings from the pipeline limits.", + "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Duration" } } }, diff --git a/config/base/crds/full/numaflow.numaproj.io_pipelines.yaml b/config/base/crds/full/numaflow.numaproj.io_pipelines.yaml index 18f6f70ff0..ef41d89e51 100644 --- a/config/base/crds/full/numaflow.numaproj.io_pipelines.yaml +++ b/config/base/crds/full/numaflow.numaproj.io_pipelines.yaml @@ -140,6 +140,9 @@ spec: readTimeout: default: 1s type: string + retryInterval: + default: 0.001s + type: string type: object sideInputs: items: @@ -5902,6 +5905,8 @@ spec: type: integer readTimeout: type: string + retryInterval: + type: string type: object metadata: properties: diff --git a/config/base/crds/full/numaflow.numaproj.io_vertices.yaml b/config/base/crds/full/numaflow.numaproj.io_vertices.yaml index 7845f90ce9..b6affba521 100644 --- a/config/base/crds/full/numaflow.numaproj.io_vertices.yaml +++ b/config/base/crds/full/numaflow.numaproj.io_vertices.yaml @@ -679,6 +679,8 @@ spec: type: integer readTimeout: type: string + retryInterval: + type: string type: object fromVertexPartitionCount: format: int32 @@ -705,6 +707,8 @@ spec: type: integer readTimeout: type: string + retryInterval: + type: string type: object toVertexPartitionCount: format: int32 @@ -1548,6 +1552,8 @@ spec: type: integer readTimeout: type: string + retryInterval: + type: string type: object metadata: properties: @@ -3756,6 +3762,8 @@ spec: type: integer readTimeout: type: string + retryInterval: + type: string type: object fromVertexPartitionCount: format: int32 @@ -3782,6 +3790,8 @@ spec: type: integer readTimeout: type: string + retryInterval: + type: string type: object toVertexPartitionCount: format: int32 diff --git a/config/install.yaml b/config/install.yaml index 3ce65c0c17..995bc79eb8 100644 --- a/config/install.yaml +++ b/config/install.yaml @@ -2749,6 +2749,9 @@ spec: readTimeout: default: 1s type: string + retryInterval: + default: 0.001s + type: string type: object sideInputs: items: @@ -8511,6 +8514,8 @@ spec: type: integer readTimeout: type: string + retryInterval: + type: string type: object metadata: properties: @@ -12488,6 +12493,8 @@ spec: type: integer readTimeout: type: string + retryInterval: + type: string type: object fromVertexPartitionCount: format: int32 @@ -12514,6 +12521,8 @@ spec: type: integer readTimeout: type: string + retryInterval: + type: string type: object toVertexPartitionCount: format: int32 @@ -13357,6 +13366,8 @@ spec: type: integer readTimeout: type: string + retryInterval: + type: string type: object metadata: properties: @@ -15565,6 +15576,8 @@ spec: type: integer readTimeout: type: string + retryInterval: + type: string type: object fromVertexPartitionCount: format: int32 @@ -15591,6 +15604,8 @@ spec: type: integer readTimeout: type: string + retryInterval: + type: string type: object toVertexPartitionCount: format: int32 diff --git a/config/namespace-install.yaml b/config/namespace-install.yaml index b937cffc03..e405f205fc 100644 --- a/config/namespace-install.yaml +++ b/config/namespace-install.yaml @@ -2749,6 +2749,9 @@ spec: readTimeout: default: 1s type: string + retryInterval: + default: 0.001s + type: string type: object sideInputs: items: @@ -8511,6 +8514,8 @@ spec: type: integer readTimeout: type: string + retryInterval: + type: string type: object metadata: properties: @@ -12488,6 +12493,8 @@ spec: type: integer readTimeout: type: string + retryInterval: + type: string type: object fromVertexPartitionCount: format: int32 @@ -12514,6 +12521,8 @@ spec: type: integer readTimeout: type: string + retryInterval: + type: string type: object toVertexPartitionCount: format: int32 @@ -13357,6 +13366,8 @@ spec: type: integer readTimeout: type: string + retryInterval: + type: string type: object metadata: properties: @@ -15565,6 +15576,8 @@ spec: type: integer readTimeout: type: string + retryInterval: + type: string type: object fromVertexPartitionCount: format: int32 @@ -15591,6 +15604,8 @@ spec: type: integer readTimeout: type: string + retryInterval: + type: string type: object toVertexPartitionCount: format: int32 diff --git a/docs/APIs.md b/docs/APIs.md index ea7eeaee37..7498e6825e 100644 --- a/docs/APIs.md +++ b/docs/APIs.md @@ -3528,6 +3528,23 @@ the vertex’s limit settings

+ + +retryInterval
+ +Kubernetes meta/v1.Duration + + +(Optional) +

+RetryInterval is the wait time before retrying a batch after getting an +error from a user defined processor or ISBSVC. A small value similar to +the default of 0.001s will use more CPU if a processor or buffer enters +a prolonged failed state, while a larger value might introduce +unecessary delays on short-lived errors. +

+ +

@@ -5353,6 +5370,21 @@ overrides the settings from pipeline limits.

+ + +retryInterval
+ +Kubernetes meta/v1.Duration + + +(Optional) +

+RetryInterval is the duration waited for before retrying after a UDF +processing or buffer writing. It overrides the settings from the +pipeline limits. +

+ +

diff --git a/go.mod b/go.mod index 9f0da9e14a..64d07712ae 100644 --- a/go.mod +++ b/go.mod @@ -27,6 +27,7 @@ require ( github.com/grpc-ecosystem/grpc-gateway v1.16.0 github.com/hashicorp/golang-lru/v2 v2.0.7 github.com/imdario/mergo v0.3.13 + github.com/kylelemons/godebug v1.1.0 github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe github.com/nats-io/nats-server/v2 v2.10.4 github.com/nats-io/nats.go v1.33.1 diff --git a/go.sum b/go.sum index 8d6cf26138..c533e6ef37 100644 --- a/go.sum +++ b/go.sum @@ -585,6 +585,8 @@ github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= +github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY= github.com/leodido/go-urn v1.2.4 h1:XlAE/cm/ms7TE/VMVoduSpNBoyc2dOxHs5MZSwAN63Q= github.com/leodido/go-urn v1.2.4/go.mod h1:7ZrI8mTSeBSHl/UaRyKQW1qZeMgak41ANeCNaVckg+4= diff --git a/pkg/apis/numaflow/v1alpha1/const.go b/pkg/apis/numaflow/v1alpha1/const.go index 90768a5dcc..7560dad52c 100644 --- a/pkg/apis/numaflow/v1alpha1/const.go +++ b/pkg/apis/numaflow/v1alpha1/const.go @@ -136,6 +136,9 @@ const ( DefaultBufferUsageLimit = 0.8 DefaultReadBatchSize = 500 + // Time to wait before a retry for datum batches on user defined processors or isbsvc errors. + DefaultRetryInterval = time.Millisecond + // Auto scaling DefaultLookbackSeconds = 120 // Default lookback seconds for calculating avg rate and pending DefaultCooldownSeconds = 90 // Default cooldown seconds after a scaling operation diff --git a/pkg/apis/numaflow/v1alpha1/generated.pb.go b/pkg/apis/numaflow/v1alpha1/generated.pb.go index ce24f3c6f6..cd45e0cc1a 100644 --- a/pkg/apis/numaflow/v1alpha1/generated.pb.go +++ b/pkg/apis/numaflow/v1alpha1/generated.pb.go @@ -2385,436 +2385,437 @@ func init() { } var fileDescriptor_9d0d1b17d3865563 = []byte{ - // 6854 bytes of a gzipped FileDescriptorProto + // 6877 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7d, 0x5d, 0x6c, 0x24, 0xd9, 0x55, 0xf0, 0xf6, 0x9f, 0xdd, 0x7d, 0xda, 0x9e, 0x9f, 0x3b, 0xbb, 0xb3, 0x1e, 0xef, 0xec, 0x78, - 0x52, 0xf9, 0x76, 0xbf, 0xc9, 0xf7, 0x25, 0xf6, 0xb7, 0xfe, 0x76, 0xb3, 0x1b, 0x20, 0xd9, 0x75, - 0xdb, 0x63, 0xaf, 0x77, 0xec, 0x19, 0xe7, 0xb4, 0x3d, 0xbb, 0xc9, 0x92, 0x2c, 0xe5, 0xaa, 0xeb, - 0x76, 0x6d, 0x57, 0x57, 0x75, 0xaa, 0x6e, 0x7b, 0xc6, 0x1b, 0x22, 0xf2, 0xf3, 0xb0, 0x8b, 0x00, - 0x81, 0x78, 0x40, 0x11, 0x28, 0x20, 0x24, 0x24, 0x1e, 0xa2, 0xbc, 0x20, 0x85, 0x07, 0x24, 0x04, + 0x52, 0xf9, 0x76, 0xbf, 0xc9, 0xf7, 0x25, 0x9e, 0x6f, 0xfd, 0xed, 0x66, 0x37, 0x40, 0xb2, 0xeb, + 0xb6, 0xc7, 0x5e, 0xef, 0xd8, 0x33, 0xce, 0x69, 0x7b, 0x76, 0x93, 0x25, 0x59, 0xca, 0x55, 0xd7, + 0xed, 0x9a, 0xae, 0xae, 0xea, 0x54, 0xdd, 0xf6, 0x8c, 0x37, 0x44, 0xe4, 0xe7, 0x61, 0x17, 0x01, + 0x02, 0x21, 0x14, 0x45, 0xa0, 0x80, 0x90, 0x90, 0x78, 0x40, 0xbc, 0x20, 0x85, 0x07, 0x24, 0x04, 0xbc, 0xa0, 0x00, 0x01, 0xf2, 0x80, 0x94, 0x20, 0x24, 0x8b, 0x18, 0xf1, 0x00, 0x88, 0x28, 0x22, - 0x12, 0x44, 0x23, 0xa4, 0xa0, 0xfb, 0x57, 0x7f, 0x5d, 0x3d, 0x63, 0x77, 0xdb, 0x9b, 0x09, 0xe4, - 0xad, 0xeb, 0xde, 0x73, 0xcf, 0xb9, 0x75, 0xeb, 0xde, 0xf3, 0x7f, 0x4f, 0xc3, 0x4a, 0xcb, 0x61, - 0xbb, 0xbd, 0xed, 0x59, 0xcb, 0xef, 0xcc, 0x79, 0xbd, 0x8e, 0xd9, 0x0d, 0xfc, 0x37, 0xc5, 0x8f, - 0x1d, 0xd7, 0xbf, 0x33, 0xd7, 0x6d, 0xb7, 0xe6, 0xcc, 0xae, 0x13, 0xc6, 0x2d, 0x7b, 0xcf, 0x98, - 0x6e, 0x77, 0xd7, 0x7c, 0x66, 0xae, 0x45, 0x3d, 0x1a, 0x98, 0x8c, 0xda, 0xb3, 0xdd, 0xc0, 0x67, - 0x3e, 0x79, 0x3e, 0x46, 0x34, 0xab, 0x11, 0xcd, 0xea, 0x61, 0xb3, 0xdd, 0x76, 0x6b, 0x96, 0x23, - 0x8a, 0x5b, 0x34, 0xa2, 0xe9, 0x0f, 0x24, 0x66, 0xd0, 0xf2, 0x5b, 0xfe, 0x9c, 0xc0, 0xb7, 0xdd, - 0xdb, 0x11, 0x4f, 0xe2, 0x41, 0xfc, 0x92, 0x74, 0xa6, 0x8d, 0xf6, 0x0b, 0xe1, 0xac, 0xe3, 0xf3, - 0x69, 0xcd, 0x59, 0x7e, 0x40, 0xe7, 0xf6, 0xfa, 0xe6, 0x32, 0xfd, 0x6c, 0x0c, 0xd3, 0x31, 0xad, - 0x5d, 0xc7, 0xa3, 0xc1, 0xbe, 0x7e, 0x97, 0xb9, 0x80, 0x86, 0x7e, 0x2f, 0xb0, 0xe8, 0xb1, 0x46, - 0x85, 0x73, 0x1d, 0xca, 0xcc, 0x3c, 0x5a, 0x73, 0x83, 0x46, 0x05, 0x3d, 0x8f, 0x39, 0x9d, 0x7e, - 0x32, 0x1f, 0x7c, 0xd0, 0x80, 0xd0, 0xda, 0xa5, 0x1d, 0x33, 0x3b, 0xce, 0xf8, 0xbb, 0x1a, 0x5c, - 0x58, 0xd8, 0x0e, 0x59, 0x60, 0x5a, 0x6c, 0xc3, 0xb7, 0x37, 0x69, 0xa7, 0xeb, 0x9a, 0x8c, 0x92, - 0x36, 0x54, 0xf9, 0xdc, 0x6c, 0x93, 0x99, 0x53, 0x85, 0xab, 0x85, 0x6b, 0xf5, 0xf9, 0x85, 0xd9, - 0x21, 0xbf, 0xc5, 0xec, 0xba, 0x42, 0xd4, 0x98, 0x38, 0x3c, 0x98, 0xa9, 0xea, 0x27, 0x8c, 0x08, - 0x90, 0x2f, 0x16, 0x60, 0xc2, 0xf3, 0x6d, 0xda, 0xa4, 0x2e, 0xb5, 0x98, 0x1f, 0x4c, 0x15, 0xaf, - 0x96, 0xae, 0xd5, 0xe7, 0x3f, 0x39, 0x34, 0xc5, 0x9c, 0x37, 0x9a, 0xbd, 0x99, 0x20, 0x70, 0xdd, - 0x63, 0xc1, 0x7e, 0xe3, 0xd1, 0xaf, 0x1d, 0xcc, 0x3c, 0x72, 0x78, 0x30, 0x33, 0x91, 0xec, 0xc2, - 0xd4, 0x4c, 0xc8, 0x16, 0xd4, 0x99, 0xef, 0xf2, 0x25, 0x73, 0x7c, 0x2f, 0x9c, 0x2a, 0x89, 0x89, - 0x5d, 0x99, 0x95, 0xab, 0xcd, 0xc9, 0xcf, 0xf2, 0xed, 0x32, 0xbb, 0xf7, 0xcc, 0xec, 0x66, 0x04, - 0xd6, 0xb8, 0xa0, 0x10, 0xd7, 0xe3, 0xb6, 0x10, 0x93, 0x78, 0x08, 0x85, 0xb3, 0x21, 0xb5, 0x7a, - 0x81, 0xc3, 0xf6, 0x17, 0x7d, 0x8f, 0xd1, 0xbb, 0x6c, 0xaa, 0x2c, 0x56, 0xf9, 0xe9, 0x3c, 0xd4, - 0x1b, 0xbe, 0xdd, 0x4c, 0x43, 0x37, 0x2e, 0x1c, 0x1e, 0xcc, 0x9c, 0xcd, 0x34, 0x62, 0x16, 0x27, - 0xf1, 0xe0, 0x9c, 0xd3, 0x31, 0x5b, 0x74, 0xa3, 0xe7, 0xba, 0x4d, 0x6a, 0x05, 0x94, 0x85, 0x53, - 0x15, 0xf1, 0x0a, 0xd7, 0xf2, 0xe8, 0xac, 0xf9, 0x96, 0xe9, 0xde, 0xda, 0x7e, 0x93, 0x5a, 0x0c, - 0xe9, 0x0e, 0x0d, 0xa8, 0x67, 0xd1, 0xc6, 0x94, 0x7a, 0x99, 0x73, 0xab, 0x19, 0x4c, 0xd8, 0x87, - 0x9b, 0xac, 0xc0, 0xf9, 0x6e, 0xe0, 0xf8, 0x62, 0x0a, 0xae, 0x19, 0x86, 0x37, 0xcd, 0x0e, 0x9d, - 0x1a, 0xbb, 0x5a, 0xb8, 0x56, 0x6b, 0x5c, 0x52, 0x68, 0xce, 0x6f, 0x64, 0x01, 0xb0, 0x7f, 0x0c, - 0xb9, 0x06, 0x55, 0xdd, 0x38, 0x35, 0x7e, 0xb5, 0x70, 0xad, 0x22, 0xf7, 0x8e, 0x1e, 0x8b, 0x51, - 0x2f, 0x59, 0x86, 0xaa, 0xb9, 0xb3, 0xe3, 0x78, 0x1c, 0xb2, 0x2a, 0x96, 0xf0, 0x72, 0xde, 0xab, - 0x2d, 0x28, 0x18, 0x89, 0x47, 0x3f, 0x61, 0x34, 0x96, 0xbc, 0x02, 0x24, 0xa4, 0xc1, 0x9e, 0x63, - 0xd1, 0x05, 0xcb, 0xf2, 0x7b, 0x1e, 0x13, 0x73, 0xaf, 0x89, 0xb9, 0x4f, 0xab, 0xb9, 0x93, 0x66, - 0x1f, 0x04, 0xe6, 0x8c, 0x22, 0x2f, 0xc1, 0x39, 0x75, 0xec, 0xe2, 0x55, 0x00, 0x81, 0xe9, 0x51, - 0xbe, 0x90, 0x98, 0xe9, 0xc3, 0x3e, 0x68, 0x62, 0xc3, 0x65, 0xb3, 0xc7, 0xfc, 0x0e, 0x47, 0x99, - 0x26, 0xba, 0xe9, 0xb7, 0xa9, 0x37, 0x55, 0xbf, 0x5a, 0xb8, 0x56, 0x6d, 0x5c, 0x3d, 0x3c, 0x98, - 0xb9, 0xbc, 0x70, 0x1f, 0x38, 0xbc, 0x2f, 0x16, 0x72, 0x0b, 0x6a, 0xb6, 0x17, 0x6e, 0xf8, 0xae, - 0x63, 0xed, 0x4f, 0x4d, 0x88, 0x09, 0x3e, 0xa3, 0x5e, 0xb5, 0xb6, 0x74, 0xb3, 0x29, 0x3b, 0xee, - 0x1d, 0xcc, 0x5c, 0xee, 0xe7, 0x8e, 0xb3, 0x51, 0x3f, 0xc6, 0x38, 0xc8, 0xba, 0x40, 0xb8, 0xe8, - 0x7b, 0x3b, 0x4e, 0x6b, 0x6a, 0x52, 0x7c, 0x8d, 0xab, 0x03, 0x36, 0xf4, 0xd2, 0xcd, 0xa6, 0x84, - 0x6b, 0x4c, 0x2a, 0x72, 0xf2, 0x11, 0x63, 0x0c, 0xd3, 0x2f, 0xc2, 0xf9, 0xbe, 0x53, 0x4b, 0xce, - 0x41, 0xa9, 0x4d, 0xf7, 0x05, 0x53, 0xaa, 0x21, 0xff, 0x49, 0x1e, 0x85, 0xca, 0x9e, 0xe9, 0xf6, - 0xe8, 0x54, 0x51, 0xb4, 0xc9, 0x87, 0x9f, 0x28, 0xbe, 0x50, 0x30, 0xbe, 0x53, 0x87, 0x33, 0x9a, - 0x17, 0xdc, 0xa6, 0x01, 0xa3, 0x77, 0xc9, 0x55, 0x28, 0x7b, 0xfc, 0x7b, 0x88, 0xf1, 0x8d, 0x09, - 0xf5, 0xba, 0x65, 0xf1, 0x1d, 0x44, 0x0f, 0xb1, 0x60, 0x4c, 0xf2, 0x72, 0x81, 0xaf, 0x3e, 0xff, - 0xe2, 0xd0, 0x6c, 0xa8, 0x29, 0xd0, 0x34, 0xe0, 0xf0, 0x60, 0x66, 0x4c, 0xfe, 0x46, 0x85, 0x9a, - 0xbc, 0x0e, 0xe5, 0xd0, 0xf1, 0xda, 0x53, 0x25, 0x41, 0xe2, 0xc3, 0xc3, 0x93, 0x70, 0xbc, 0x76, - 0xa3, 0xca, 0xdf, 0x80, 0xff, 0x42, 0x81, 0x94, 0xbc, 0x0a, 0xa5, 0x9e, 0xbd, 0xa3, 0x38, 0xca, - 0x4f, 0x0d, 0x8d, 0x7b, 0x6b, 0x69, 0xb9, 0x31, 0x7e, 0x78, 0x30, 0x53, 0xda, 0x5a, 0x5a, 0x46, - 0x8e, 0x91, 0xfc, 0x72, 0x01, 0xce, 0x5b, 0xbe, 0xc7, 0x4c, 0x2e, 0x5f, 0x34, 0x67, 0x9d, 0xaa, - 0x08, 0x3a, 0xaf, 0x0c, 0x4d, 0x67, 0x31, 0x8b, 0xb1, 0xf1, 0x18, 0x67, 0x14, 0x7d, 0xcd, 0xd8, - 0x4f, 0x9b, 0xfc, 0x46, 0x01, 0x1e, 0xe3, 0x07, 0xb8, 0x0f, 0x58, 0xb0, 0x9d, 0x93, 0x9d, 0xd5, - 0xa5, 0xc3, 0x83, 0x99, 0xc7, 0x56, 0xf3, 0x88, 0x61, 0xfe, 0x1c, 0xf8, 0xec, 0x2e, 0x98, 0xfd, - 0xb2, 0x48, 0xb0, 0xb4, 0xfa, 0xfc, 0xda, 0x49, 0xca, 0xb7, 0xc6, 0x13, 0x6a, 0x2b, 0xe7, 0x89, - 0x73, 0xcc, 0x9b, 0x05, 0xb9, 0x0e, 0xe3, 0x7b, 0xbe, 0xdb, 0xeb, 0xd0, 0x70, 0xaa, 0x2a, 0x84, - 0xc2, 0x74, 0xde, 0x59, 0xbd, 0x2d, 0x40, 0x1a, 0x67, 0x15, 0xfa, 0x71, 0xf9, 0x1c, 0xa2, 0x1e, - 0x4b, 0x1c, 0x18, 0x73, 0x9d, 0x8e, 0xc3, 0x42, 0xc1, 0x2d, 0xeb, 0xf3, 0xd7, 0x87, 0x7e, 0x2d, - 0x79, 0x44, 0xd7, 0x04, 0x32, 0x79, 0x6a, 0xe4, 0x6f, 0x54, 0x04, 0x88, 0x05, 0x95, 0xd0, 0x32, - 0x5d, 0xc9, 0x4d, 0xeb, 0xf3, 0x1f, 0x19, 0xfe, 0xd8, 0x70, 0x2c, 0x8d, 0x49, 0xf5, 0x4e, 0x15, - 0xf1, 0x88, 0x12, 0x37, 0xf9, 0x04, 0x9c, 0x49, 0x7d, 0xcd, 0x70, 0xaa, 0x2e, 0x56, 0xe7, 0xc9, - 0xbc, 0xd5, 0x89, 0xa0, 0x1a, 0x17, 0x15, 0xb2, 0x33, 0xa9, 0x1d, 0x12, 0x62, 0x06, 0x19, 0xb9, - 0x01, 0xd5, 0xd0, 0xb1, 0xa9, 0x65, 0x06, 0xe1, 0xd4, 0xc4, 0x51, 0x10, 0x9f, 0x53, 0x88, 0xab, - 0x4d, 0x35, 0x0c, 0x23, 0x04, 0x64, 0x16, 0xa0, 0x6b, 0x06, 0xcc, 0x91, 0xda, 0xc9, 0xa4, 0x90, - 0x94, 0x67, 0x0e, 0x0f, 0x66, 0x60, 0x23, 0x6a, 0xc5, 0x04, 0x04, 0x87, 0xe7, 0x63, 0x57, 0xbd, - 0x6e, 0x8f, 0x85, 0x53, 0x67, 0xae, 0x96, 0xae, 0xd5, 0x24, 0x7c, 0x33, 0x6a, 0xc5, 0x04, 0x04, - 0xf9, 0x4a, 0x01, 0x9e, 0x88, 0x1f, 0xfb, 0x0f, 0xd9, 0xd9, 0x13, 0x3f, 0x64, 0x33, 0x87, 0x07, - 0x33, 0x4f, 0x34, 0x07, 0x93, 0xc4, 0xfb, 0xcd, 0xc7, 0x78, 0x15, 0x26, 0x17, 0x7a, 0x6c, 0xd7, - 0x0f, 0x9c, 0xb7, 0x84, 0xa6, 0x45, 0x96, 0xa1, 0xc2, 0x84, 0xc4, 0x94, 0x4a, 0xec, 0x53, 0x79, - 0x4b, 0x2d, 0xb5, 0x97, 0x1b, 0x74, 0x5f, 0x0b, 0x9a, 0x46, 0x8d, 0x6f, 0x0a, 0x29, 0x41, 0xe5, - 0x70, 0xe3, 0xb7, 0x0b, 0x50, 0x6b, 0x98, 0xa1, 0x63, 0x71, 0xf4, 0x64, 0x11, 0xca, 0xbd, 0x90, - 0x06, 0xc7, 0x43, 0x2a, 0xb8, 0xf4, 0x56, 0x48, 0x03, 0x14, 0x83, 0xc9, 0x2d, 0xa8, 0x76, 0xcd, - 0x30, 0xbc, 0xe3, 0x07, 0xb6, 0x92, 0x34, 0x47, 0x44, 0x24, 0x55, 0x21, 0x35, 0x14, 0x23, 0x24, - 0x46, 0x1d, 0x6a, 0x0d, 0xd7, 0xb4, 0xda, 0xbb, 0xbe, 0x4b, 0x8d, 0xef, 0x15, 0xe0, 0x42, 0xa3, - 0xb7, 0xb3, 0x43, 0x03, 0x25, 0xf9, 0xa5, 0x4c, 0x25, 0x14, 0x2a, 0x01, 0xb5, 0x9d, 0x50, 0xcd, - 0x7d, 0x69, 0xe8, 0x4f, 0x87, 0x1c, 0x8b, 0x12, 0xe1, 0x62, 0xbd, 0x44, 0x03, 0x4a, 0xec, 0xa4, - 0x07, 0xb5, 0x37, 0x29, 0x0b, 0x59, 0x40, 0xcd, 0x8e, 0x7a, 0xbb, 0x97, 0x87, 0x26, 0xf5, 0x0a, - 0x65, 0x4d, 0x81, 0x29, 0xa9, 0x31, 0x44, 0x8d, 0x18, 0x53, 0x32, 0xfe, 0xa4, 0x02, 0x13, 0x8b, - 0x7e, 0x67, 0xdb, 0xf1, 0xa8, 0x7d, 0xdd, 0x6e, 0x51, 0xf2, 0x06, 0x94, 0xa9, 0xdd, 0xa2, 0xea, - 0x6d, 0x87, 0x97, 0xb3, 0x1c, 0x59, 0xac, 0x2d, 0xf0, 0x27, 0x14, 0x88, 0xc9, 0x1a, 0x9c, 0xd9, - 0x09, 0xfc, 0x8e, 0x64, 0x5d, 0x9b, 0xfb, 0x5d, 0xa5, 0x85, 0x34, 0xfe, 0x97, 0x66, 0x07, 0xcb, - 0xa9, 0xde, 0x7b, 0x07, 0x33, 0x10, 0x3f, 0x61, 0x66, 0x2c, 0x79, 0x0d, 0xa6, 0xe2, 0x96, 0xe8, - 0x0c, 0x2f, 0x72, 0x95, 0x4d, 0xa8, 0x0a, 0x95, 0xc6, 0xe5, 0xc3, 0x83, 0x99, 0xa9, 0xe5, 0x01, - 0x30, 0x38, 0x70, 0x34, 0x79, 0xbb, 0x00, 0xe7, 0xe2, 0x4e, 0xc9, 0x57, 0x95, 0x86, 0x70, 0x42, - 0x0c, 0x5b, 0xe8, 0xb6, 0xcb, 0x19, 0x12, 0xd8, 0x47, 0x94, 0x2c, 0xc3, 0x04, 0xf3, 0x13, 0xeb, - 0x55, 0x11, 0xeb, 0x65, 0x68, 0x63, 0x6c, 0xd3, 0x1f, 0xb8, 0x5a, 0xa9, 0x71, 0x04, 0xe1, 0xa2, - 0x7e, 0xce, 0xac, 0xd4, 0x98, 0x58, 0xa9, 0xe9, 0xc3, 0x83, 0x99, 0x8b, 0x9b, 0xb9, 0x10, 0x38, - 0x60, 0x24, 0xf9, 0x5c, 0x01, 0xce, 0xe8, 0x2e, 0xb5, 0x46, 0xe3, 0x27, 0xb9, 0x46, 0x84, 0xef, - 0x88, 0xcd, 0x14, 0x01, 0xcc, 0x10, 0x34, 0xbe, 0x5f, 0x86, 0x5a, 0xc4, 0xd9, 0xc8, 0x7b, 0xa1, - 0x22, 0xcc, 0x2c, 0xa5, 0xb0, 0x46, 0x22, 0x4b, 0x58, 0x63, 0x28, 0xfb, 0xc8, 0x53, 0x30, 0x6e, - 0xf9, 0x9d, 0x8e, 0xe9, 0xd9, 0xc2, 0x74, 0xae, 0x35, 0xea, 0x5c, 0x52, 0x2f, 0xca, 0x26, 0xd4, - 0x7d, 0xe4, 0x32, 0x94, 0xcd, 0xa0, 0x25, 0xad, 0xd8, 0x9a, 0xe4, 0x47, 0x0b, 0x41, 0x2b, 0x44, - 0xd1, 0x4a, 0x3e, 0x04, 0x25, 0xea, 0xed, 0x4d, 0x95, 0x07, 0xab, 0x02, 0xd7, 0xbd, 0xbd, 0xdb, - 0x66, 0xd0, 0xa8, 0xab, 0x39, 0x94, 0xae, 0x7b, 0x7b, 0xc8, 0xc7, 0x90, 0x35, 0x18, 0xa7, 0xde, - 0x1e, 0xff, 0xf6, 0xca, 0xbc, 0x7c, 0xcf, 0x80, 0xe1, 0x1c, 0x44, 0x69, 0xc5, 0x91, 0x42, 0xa1, - 0x9a, 0x51, 0xa3, 0x20, 0x1f, 0x83, 0x09, 0xa9, 0x5b, 0xac, 0xf3, 0x6f, 0x12, 0x4e, 0x8d, 0x09, - 0x94, 0x33, 0x83, 0x95, 0x13, 0x01, 0x17, 0x9b, 0xf3, 0x89, 0xc6, 0x10, 0x53, 0xa8, 0xc8, 0xc7, - 0xa0, 0xa6, 0x3d, 0x35, 0xfa, 0xcb, 0xe6, 0x5a, 0xc2, 0xa8, 0x80, 0x90, 0x7e, 0xaa, 0xe7, 0x04, - 0xb4, 0x43, 0x3d, 0x16, 0x36, 0xce, 0x6b, 0xdb, 0x48, 0xf7, 0x86, 0x18, 0x63, 0x23, 0xdb, 0xfd, - 0x26, 0xbd, 0xb4, 0x47, 0xdf, 0x3b, 0x80, 0xab, 0x0f, 0x61, 0xcf, 0x7f, 0x12, 0xce, 0x46, 0x36, - 0xb7, 0x32, 0xdb, 0xa4, 0x85, 0xfa, 0x2c, 0x1f, 0xbe, 0x9a, 0xee, 0xba, 0x77, 0x30, 0xf3, 0x64, - 0x8e, 0xe1, 0x16, 0x03, 0x60, 0x16, 0x99, 0xf1, 0x47, 0x25, 0xe8, 0x57, 0xbb, 0xd3, 0x8b, 0x56, - 0x38, 0xe9, 0x45, 0xcb, 0xbe, 0x90, 0x64, 0x9f, 0x2f, 0xa8, 0x61, 0xa3, 0xbf, 0x54, 0xde, 0x87, - 0x29, 0x9d, 0xf4, 0x87, 0x79, 0x58, 0xce, 0x8e, 0xf1, 0x4e, 0x19, 0xce, 0x2c, 0x99, 0xb4, 0xe3, - 0x7b, 0x0f, 0x34, 0x42, 0x0a, 0x0f, 0x85, 0x11, 0x72, 0x0d, 0xaa, 0x01, 0xed, 0xba, 0x8e, 0x65, - 0x86, 0xe2, 0xd3, 0x2b, 0x4f, 0x0f, 0xaa, 0x36, 0x8c, 0x7a, 0x07, 0x18, 0x9f, 0xa5, 0x87, 0xd2, - 0xf8, 0x2c, 0xff, 0xf0, 0x8d, 0x4f, 0xe3, 0x73, 0x45, 0x10, 0x8a, 0x0a, 0xb9, 0x0a, 0x65, 0x2e, - 0x84, 0xb3, 0x2e, 0x0f, 0xb1, 0x71, 0x44, 0x0f, 0x99, 0x86, 0x22, 0xf3, 0xd5, 0xc9, 0x03, 0xd5, - 0x5f, 0xdc, 0xf4, 0xb1, 0xc8, 0x7c, 0xf2, 0x16, 0x80, 0xe5, 0x7b, 0xb6, 0xa3, 0x1d, 0xa0, 0xa3, - 0xbd, 0xd8, 0xb2, 0x1f, 0xdc, 0x31, 0x03, 0x7b, 0x31, 0xc2, 0x28, 0xcd, 0x8f, 0xf8, 0x19, 0x13, - 0xd4, 0xc8, 0x8b, 0x30, 0xe6, 0x7b, 0xcb, 0x3d, 0xd7, 0x15, 0x0b, 0x5a, 0x6b, 0xfc, 0x6f, 0x6e, - 0x13, 0xde, 0x12, 0x2d, 0xf7, 0x0e, 0x66, 0x2e, 0x49, 0xfd, 0x96, 0x3f, 0xbd, 0x1a, 0x38, 0xcc, - 0xf1, 0x5a, 0x4d, 0x16, 0x98, 0x8c, 0xb6, 0xf6, 0x51, 0x0d, 0x33, 0x7e, 0xb5, 0x00, 0xf5, 0x65, - 0xe7, 0x2e, 0xb5, 0x5f, 0x75, 0x3c, 0xdb, 0xbf, 0x43, 0x10, 0xc6, 0x5c, 0xea, 0xb5, 0xd8, 0xae, - 0xda, 0xfd, 0xb3, 0x89, 0xb3, 0x16, 0xf9, 0xcd, 0xe3, 0xf9, 0x77, 0x28, 0x33, 0xf9, 0xe9, 0x5b, - 0xea, 0x29, 0xcf, 0xae, 0x34, 0x4a, 0x05, 0x06, 0x54, 0x98, 0xc8, 0x1c, 0xd4, 0xa4, 0xf6, 0xe9, - 0x78, 0x2d, 0xb1, 0x86, 0xd5, 0x98, 0xe9, 0x35, 0x75, 0x07, 0xc6, 0x30, 0xc6, 0x3e, 0x9c, 0xef, - 0x5b, 0x06, 0x62, 0x43, 0x99, 0x99, 0x2d, 0xcd, 0x5f, 0x97, 0x87, 0x5e, 0xe0, 0x4d, 0xb3, 0x95, - 0x58, 0x5c, 0x21, 0xe3, 0x37, 0x4d, 0x2e, 0xe3, 0x39, 0x76, 0xe3, 0x3f, 0x0b, 0x50, 0x5d, 0xee, - 0x79, 0x96, 0xb0, 0x8d, 0x1e, 0xec, 0x0a, 0xd3, 0x0a, 0x43, 0x31, 0x57, 0x61, 0xe8, 0xc1, 0x58, - 0xfb, 0x4e, 0xa4, 0x50, 0xd4, 0xe7, 0xd7, 0x87, 0xdf, 0x15, 0x6a, 0x4a, 0xb3, 0x37, 0x04, 0x3e, - 0xe9, 0x9e, 0x3f, 0xa3, 0x26, 0x34, 0x76, 0xe3, 0x55, 0x41, 0x54, 0x11, 0x9b, 0xfe, 0x10, 0xd4, - 0x13, 0x60, 0xc7, 0xf2, 0x07, 0xfe, 0x7e, 0x19, 0xc6, 0x56, 0x9a, 0xcd, 0x85, 0x8d, 0x55, 0xf2, - 0x1c, 0xd4, 0x95, 0xe7, 0xf6, 0x66, 0xbc, 0x06, 0x91, 0xe3, 0xbe, 0x19, 0x77, 0x61, 0x12, 0x8e, - 0xab, 0x63, 0x01, 0x35, 0xdd, 0x8e, 0x3a, 0x2c, 0x91, 0x3a, 0x86, 0xbc, 0x11, 0x65, 0x1f, 0x31, - 0xe1, 0x0c, 0xb7, 0xf0, 0xf8, 0x12, 0x4a, 0xeb, 0x4d, 0x1d, 0x9b, 0x23, 0xda, 0x77, 0x42, 0x49, - 0xdc, 0x4a, 0x21, 0xc0, 0x0c, 0x42, 0xf2, 0x02, 0x54, 0xcd, 0x1e, 0xdb, 0x15, 0x0a, 0xb4, 0x3c, - 0x1b, 0x97, 0x85, 0x63, 0x5b, 0xb5, 0xdd, 0x3b, 0x98, 0x99, 0xb8, 0x81, 0x8d, 0xe7, 0xf4, 0x33, - 0x46, 0xd0, 0x7c, 0x72, 0xda, 0x62, 0x54, 0x93, 0xab, 0x1c, 0x7b, 0x72, 0x1b, 0x29, 0x04, 0x98, - 0x41, 0x48, 0x5e, 0x87, 0x89, 0x36, 0xdd, 0x67, 0xe6, 0xb6, 0x22, 0x30, 0x76, 0x1c, 0x02, 0xe7, - 0xb8, 0x0a, 0x77, 0x23, 0x31, 0x1c, 0x53, 0xc8, 0x48, 0x08, 0x8f, 0xb6, 0x69, 0xb0, 0x4d, 0x03, - 0x5f, 0x59, 0x9f, 0x8a, 0xc8, 0xf8, 0x71, 0x88, 0x4c, 0x1d, 0x1e, 0xcc, 0x3c, 0x7a, 0x23, 0x07, - 0x0d, 0xe6, 0x22, 0x37, 0xbe, 0x5e, 0x84, 0xb3, 0x2b, 0x32, 0x74, 0xe6, 0x07, 0x52, 0x08, 0x93, - 0x4b, 0x50, 0x0a, 0xba, 0x3d, 0xb1, 0x73, 0x4a, 0xd2, 0x4f, 0x8a, 0x1b, 0x5b, 0xc8, 0xdb, 0xc8, - 0x6b, 0x50, 0xb5, 0x15, 0xcb, 0x50, 0xc6, 0xef, 0x71, 0x19, 0x8d, 0x10, 0x82, 0xfa, 0x09, 0x23, - 0x6c, 0x5c, 0xd3, 0xef, 0x84, 0xad, 0xa6, 0xf3, 0x16, 0x55, 0xf6, 0xa0, 0xd0, 0xf4, 0xd7, 0x65, - 0x13, 0xea, 0x3e, 0x2e, 0x55, 0xdb, 0x74, 0x5f, 0x5a, 0x43, 0xe5, 0x58, 0xaa, 0xde, 0x50, 0x6d, - 0x18, 0xf5, 0x92, 0x19, 0x7d, 0x58, 0xf8, 0x2e, 0x28, 0x4b, 0x4b, 0xfe, 0x36, 0x6f, 0x50, 0xe7, - 0x86, 0xb3, 0xcc, 0x37, 0x1d, 0xc6, 0x68, 0xa0, 0x3e, 0xe3, 0x50, 0x2c, 0xf3, 0x15, 0x81, 0x01, - 0x15, 0x26, 0xe3, 0x07, 0x45, 0xb8, 0xb8, 0x42, 0x99, 0x54, 0x54, 0x96, 0x68, 0xd7, 0xf5, 0xf7, - 0xb9, 0xb6, 0x88, 0xf4, 0x53, 0xe4, 0x25, 0x00, 0x27, 0xdc, 0x6e, 0xee, 0x59, 0x62, 0x6b, 0xcb, - 0x63, 0x79, 0x55, 0x9d, 0x32, 0x58, 0x6d, 0x36, 0x54, 0xcf, 0xbd, 0xd4, 0x13, 0x26, 0xc6, 0xc4, - 0x16, 0x53, 0xf1, 0x3e, 0x16, 0x53, 0x13, 0xa0, 0x1b, 0xeb, 0x9c, 0x25, 0x01, 0xf9, 0xff, 0x35, - 0x99, 0xe3, 0xa8, 0x9b, 0x09, 0x34, 0xa3, 0x68, 0x81, 0x1e, 0x9c, 0xb3, 0xe9, 0x8e, 0xd9, 0x73, - 0x59, 0xa4, 0x27, 0xab, 0x73, 0x79, 0x74, 0x55, 0x3b, 0x8a, 0xd4, 0x2d, 0x65, 0x30, 0x61, 0x1f, - 0x6e, 0xe3, 0x0f, 0x4a, 0x30, 0xbd, 0x42, 0x59, 0xe4, 0x44, 0x51, 0x0c, 0xaf, 0xd9, 0xa5, 0x16, - 0xff, 0x0a, 0x6f, 0x17, 0x60, 0xcc, 0x35, 0xb7, 0xa9, 0xcb, 0x05, 0x12, 0x7f, 0x9b, 0x37, 0x86, - 0xe6, 0xed, 0x83, 0xa9, 0xcc, 0xae, 0x09, 0x0a, 0x19, 0x6e, 0x2f, 0x1b, 0x51, 0x91, 0xe7, 0x7c, - 0xda, 0x72, 0x7b, 0x21, 0xa3, 0xc1, 0x86, 0x1f, 0x30, 0xa5, 0x22, 0x46, 0x7c, 0x7a, 0x31, 0xee, - 0xc2, 0x24, 0x1c, 0x99, 0x07, 0xb0, 0x5c, 0x87, 0x7a, 0x4c, 0x8c, 0x92, 0x47, 0x85, 0xe8, 0xef, - 0xbb, 0x18, 0xf5, 0x60, 0x02, 0x8a, 0x93, 0xea, 0xf8, 0x9e, 0xc3, 0x7c, 0x49, 0xaa, 0x9c, 0x26, - 0xb5, 0x1e, 0x77, 0x61, 0x12, 0x4e, 0x0c, 0xa3, 0x2c, 0x70, 0xac, 0x50, 0x0c, 0xab, 0x64, 0x86, - 0xc5, 0x5d, 0x98, 0x84, 0xe3, 0x62, 0x2c, 0xf1, 0xfe, 0xc7, 0x12, 0x63, 0x5f, 0xae, 0xc1, 0x95, - 0xd4, 0xb2, 0x32, 0x93, 0xd1, 0x9d, 0x9e, 0xdb, 0xa4, 0x4c, 0x7f, 0xc0, 0x21, 0xc5, 0xdb, 0x2f, - 0xc4, 0xdf, 0x5d, 0xc6, 0xe0, 0xad, 0x93, 0xf9, 0xee, 0x7d, 0x13, 0x3c, 0xd2, 0xb7, 0x9f, 0x83, - 0x9a, 0x67, 0xb2, 0x50, 0x1c, 0x5c, 0x75, 0x46, 0x23, 0xcd, 0xea, 0xa6, 0xee, 0xc0, 0x18, 0x86, - 0x6c, 0xc0, 0xa3, 0x6a, 0x89, 0xaf, 0xdf, 0xed, 0xfa, 0x01, 0xa3, 0x81, 0x1c, 0xab, 0x24, 0xa4, - 0x1a, 0xfb, 0xe8, 0x7a, 0x0e, 0x0c, 0xe6, 0x8e, 0x24, 0xeb, 0x70, 0xc1, 0x92, 0x71, 0x49, 0xea, - 0xfa, 0xa6, 0xad, 0x11, 0x4a, 0x9f, 0x55, 0x64, 0xed, 0x2c, 0xf6, 0x83, 0x60, 0xde, 0xb8, 0xec, - 0x6e, 0x1e, 0x1b, 0x6a, 0x37, 0x8f, 0x0f, 0xb3, 0x9b, 0xab, 0xc3, 0xed, 0xe6, 0xda, 0xd1, 0x76, - 0x33, 0x5f, 0x79, 0xbe, 0x8f, 0x68, 0xc0, 0x35, 0x0e, 0x29, 0x34, 0x13, 0x61, 0xef, 0x68, 0xe5, - 0x9b, 0x39, 0x30, 0x98, 0x3b, 0x92, 0x6c, 0xc3, 0xb4, 0x6c, 0xbf, 0xee, 0x59, 0xc1, 0x7e, 0x97, - 0xcb, 0x92, 0x04, 0xde, 0x7a, 0xca, 0x69, 0x38, 0xdd, 0x1c, 0x08, 0x89, 0xf7, 0xc1, 0x42, 0x7e, - 0x12, 0x26, 0xe5, 0x57, 0x5a, 0x37, 0xbb, 0x02, 0xad, 0x0c, 0x82, 0x3f, 0xa6, 0xd0, 0x4e, 0x2e, - 0x26, 0x3b, 0x31, 0x0d, 0x4b, 0x16, 0xe0, 0x6c, 0x77, 0xcf, 0xe2, 0x3f, 0x57, 0x77, 0x6e, 0x52, - 0x6a, 0x53, 0x5b, 0x04, 0x60, 0x6a, 0x8d, 0xc7, 0xb5, 0xef, 0x62, 0x23, 0xdd, 0x8d, 0x59, 0x78, - 0xf2, 0x02, 0x4c, 0x84, 0xcc, 0x0c, 0x98, 0xf2, 0xd4, 0x4d, 0x9d, 0x91, 0x49, 0x02, 0xda, 0x91, - 0xd5, 0x4c, 0xf4, 0x61, 0x0a, 0x32, 0x57, 0x5e, 0x9c, 0x3d, 0x3d, 0x79, 0x31, 0x0a, 0xb7, 0xba, - 0x27, 0x85, 0xbd, 0x08, 0x0f, 0x64, 0xc4, 0xcc, 0x17, 0xb2, 0x62, 0xe6, 0xf5, 0x51, 0xd8, 0x4d, - 0x0e, 0x85, 0x23, 0xb1, 0x99, 0x57, 0x80, 0x04, 0x2a, 0x98, 0x21, 0x4d, 0xe8, 0x84, 0xa4, 0x89, - 0x52, 0x3f, 0xb0, 0x0f, 0x02, 0x73, 0x46, 0x91, 0x26, 0x3c, 0x16, 0x52, 0x8f, 0x39, 0x1e, 0x75, - 0xd3, 0xe8, 0xa4, 0x08, 0x7a, 0x52, 0xa1, 0x7b, 0xac, 0x99, 0x07, 0x84, 0xf9, 0x63, 0x47, 0x59, - 0xfc, 0xaf, 0x83, 0x90, 0xf3, 0x72, 0x69, 0x4e, 0x4c, 0x4c, 0xbc, 0x9d, 0x15, 0x13, 0x6f, 0x8c, - 0xfe, 0xdd, 0x86, 0x13, 0x11, 0xf3, 0x00, 0xe2, 0x2b, 0x24, 0x65, 0x44, 0xc4, 0x19, 0x31, 0xea, - 0xc1, 0x04, 0x14, 0x3f, 0xf5, 0x7a, 0x9d, 0x93, 0xe2, 0x21, 0x3a, 0xf5, 0xcd, 0x64, 0x27, 0xa6, - 0x61, 0x07, 0x8a, 0x98, 0xca, 0xd0, 0x22, 0xe6, 0x15, 0x20, 0x29, 0x07, 0x8e, 0xc4, 0x37, 0x96, - 0xce, 0x3c, 0x5a, 0xed, 0x83, 0xc0, 0x9c, 0x51, 0x03, 0xb6, 0xf2, 0xf8, 0xc9, 0x6e, 0xe5, 0xea, - 0xf0, 0x5b, 0x99, 0xbc, 0x01, 0x97, 0x04, 0x29, 0xb5, 0x3e, 0x69, 0xc4, 0x52, 0xd8, 0xbc, 0x47, - 0x21, 0xbe, 0x84, 0x83, 0x00, 0x71, 0x30, 0x0e, 0xfe, 0x7d, 0xac, 0x80, 0xda, 0x9c, 0xb8, 0xe9, - 0x0e, 0x16, 0x44, 0x8b, 0x39, 0x30, 0x98, 0x3b, 0x92, 0x6f, 0x31, 0xc6, 0xb7, 0xa1, 0xb9, 0xed, - 0x52, 0x5b, 0x65, 0x5e, 0x45, 0x5b, 0x6c, 0x73, 0xad, 0xa9, 0x7a, 0x30, 0x01, 0x95, 0x27, 0x1b, - 0x26, 0x8e, 0x29, 0x1b, 0x56, 0x84, 0xb7, 0x73, 0x27, 0x25, 0x82, 0x94, 0x80, 0x89, 0x72, 0xe9, - 0x16, 0xb3, 0x00, 0xd8, 0x3f, 0x46, 0x88, 0x66, 0x2b, 0x70, 0xba, 0x2c, 0x4c, 0xe3, 0x3a, 0x93, - 0x11, 0xcd, 0x39, 0x30, 0x98, 0x3b, 0x92, 0x2b, 0x45, 0xbb, 0xd4, 0x74, 0xd9, 0x6e, 0x1a, 0xe1, - 0xd9, 0xb4, 0x52, 0xf4, 0x72, 0x3f, 0x08, 0xe6, 0x8d, 0xcb, 0x95, 0x65, 0xe7, 0x1e, 0x4e, 0x59, - 0xf6, 0xf9, 0x12, 0x5c, 0x5a, 0xa1, 0x2c, 0xca, 0x4f, 0xf8, 0xb1, 0xed, 0xfa, 0x43, 0xb0, 0x5d, - 0xff, 0xa2, 0x04, 0x17, 0x56, 0xa8, 0x4a, 0xe8, 0xdb, 0xf0, 0x6d, 0x2d, 0xcc, 0xfe, 0x87, 0x2e, - 0xff, 0x3a, 0x5c, 0x88, 0x53, 0x62, 0x9a, 0xcc, 0x0f, 0xa4, 0x2c, 0xcf, 0x98, 0x28, 0xcd, 0x7e, - 0x10, 0xcc, 0x1b, 0x97, 0xfb, 0x35, 0xc7, 0x4e, 0xf1, 0x6b, 0xfe, 0x5b, 0x11, 0xc6, 0x57, 0x02, - 0xbf, 0xd7, 0x6d, 0xec, 0x93, 0x16, 0x8c, 0xdd, 0x11, 0x8e, 0x7a, 0xe5, 0x06, 0x1f, 0x3e, 0xf5, - 0x52, 0xfa, 0xfb, 0x63, 0xb5, 0x41, 0x3e, 0xa3, 0x42, 0xcf, 0x3f, 0x74, 0x9b, 0xee, 0x53, 0x5b, - 0xf9, 0xeb, 0xa3, 0x0f, 0x7d, 0x83, 0x37, 0xa2, 0xec, 0x23, 0x1d, 0x38, 0x6b, 0xba, 0xae, 0x7f, - 0x87, 0xda, 0x6b, 0x26, 0xa3, 0x1e, 0x0d, 0x75, 0xf8, 0xe3, 0xb8, 0x2e, 0x30, 0x11, 0x43, 0x5c, - 0x48, 0xa3, 0xc2, 0x2c, 0x6e, 0xf2, 0x26, 0x8c, 0x87, 0xcc, 0x0f, 0xb4, 0x42, 0x52, 0x9f, 0x5f, - 0x1c, 0xfa, 0xed, 0x37, 0x1a, 0x1f, 0x6d, 0x4a, 0x54, 0xd2, 0x3f, 0xa8, 0x1e, 0x50, 0x13, 0x30, - 0xbe, 0x54, 0x00, 0x78, 0x79, 0x73, 0x73, 0x43, 0xb9, 0x32, 0x6d, 0x28, 0x9b, 0xbd, 0x28, 0x28, - 0x32, 0x7c, 0xf0, 0x21, 0x95, 0x7b, 0xa5, 0xe2, 0x05, 0x3d, 0xb6, 0x8b, 0x02, 0x3b, 0x79, 0x1f, - 0x8c, 0x2b, 0x25, 0x52, 0x2d, 0x7b, 0x14, 0xc6, 0x54, 0x8a, 0x26, 0xea, 0x7e, 0xe3, 0xf7, 0x8a, - 0x00, 0xab, 0xb6, 0x4b, 0x9b, 0x3a, 0x5b, 0xb6, 0xc6, 0x76, 0x03, 0x1a, 0xee, 0xfa, 0xae, 0x3d, - 0x64, 0xe4, 0x46, 0xe4, 0x0c, 0x6d, 0x6a, 0x24, 0x18, 0xe3, 0x23, 0x36, 0x37, 0xc2, 0x68, 0x77, - 0xd5, 0x63, 0x34, 0xd8, 0x33, 0xdd, 0x21, 0x1d, 0xb6, 0xe7, 0xa4, 0xc1, 0x16, 0xe3, 0xc1, 0x14, - 0x56, 0x62, 0x42, 0xdd, 0xf1, 0x2c, 0x79, 0x40, 0x1a, 0xfb, 0x43, 0x6e, 0xa4, 0xb3, 0x5c, 0x2b, - 0x5f, 0x8d, 0xd1, 0x60, 0x12, 0xa7, 0xf1, 0xdd, 0x22, 0x5c, 0x14, 0xf4, 0xf8, 0x34, 0x52, 0xb9, - 0x5f, 0xe4, 0x67, 0xfa, 0xae, 0x73, 0xfc, 0xbf, 0xa3, 0x91, 0x96, 0xb7, 0x01, 0xd6, 0x29, 0x33, - 0x63, 0x9d, 0x27, 0x6e, 0x4b, 0xdc, 0xe1, 0xe8, 0x41, 0x39, 0xec, 0x52, 0x4b, 0xad, 0x5e, 0x73, - 0xe8, 0x2d, 0x94, 0xff, 0x02, 0x9c, 0xc5, 0xc7, 0x11, 0x2a, 0xc1, 0xf0, 0x05, 0x39, 0xf2, 0x19, - 0x18, 0x0b, 0x99, 0xc9, 0x7a, 0xfa, 0x68, 0x6e, 0x9d, 0x34, 0x61, 0x81, 0x3c, 0xe6, 0x23, 0xf2, - 0x19, 0x15, 0x51, 0xe3, 0xbb, 0x05, 0x98, 0xce, 0x1f, 0xb8, 0xe6, 0x84, 0x8c, 0xfc, 0x74, 0xdf, - 0xb2, 0x1f, 0xf1, 0x8b, 0xf3, 0xd1, 0x62, 0xd1, 0xa3, 0xe4, 0x4f, 0xdd, 0x92, 0x58, 0x72, 0x06, - 0x15, 0x87, 0xd1, 0x8e, 0xb6, 0xc1, 0x6e, 0x9d, 0xf0, 0xab, 0x27, 0xc4, 0x1f, 0xa7, 0x82, 0x92, - 0x98, 0xf1, 0x4e, 0x71, 0xd0, 0x2b, 0xf3, 0xcf, 0x42, 0xdc, 0x74, 0x7e, 0xe1, 0x8d, 0xd1, 0xf2, - 0x0b, 0xd3, 0x13, 0xea, 0x4f, 0x33, 0xfc, 0xd9, 0xfe, 0x34, 0xc3, 0x5b, 0xa3, 0xa7, 0x19, 0x66, - 0x96, 0x61, 0x60, 0xb6, 0xe1, 0x2f, 0x96, 0xe0, 0xf2, 0xfd, 0xb6, 0x0d, 0x97, 0x67, 0x6a, 0x77, - 0x8e, 0x2a, 0xcf, 0xee, 0xbf, 0x0f, 0xc9, 0x3c, 0x54, 0xba, 0xbb, 0x66, 0xa8, 0x15, 0x17, 0xad, - 0xd4, 0x57, 0x36, 0x78, 0xe3, 0x3d, 0xce, 0x34, 0x84, 0xc2, 0x23, 0x1e, 0x51, 0x82, 0x72, 0x76, - 0xdc, 0xa1, 0x61, 0x18, 0xdb, 0xcd, 0x11, 0x3b, 0x5e, 0x97, 0xcd, 0xa8, 0xfb, 0x09, 0x83, 0x31, - 0xe9, 0xfb, 0x52, 0x92, 0x69, 0xf8, 0xa4, 0x91, 0x9c, 0x94, 0xd4, 0xf8, 0xa5, 0x94, 0x1b, 0x55, - 0xd1, 0x22, 0xb3, 0x50, 0x66, 0x71, 0x82, 0xa0, 0x36, 0x5f, 0xcb, 0x39, 0x3a, 0x9c, 0x80, 0x33, - 0xfe, 0xba, 0x0a, 0x17, 0xf3, 0xbf, 0x21, 0x7f, 0xd7, 0x3d, 0x1a, 0x84, 0x8e, 0xef, 0x29, 0xbd, - 0x30, 0x4e, 0x67, 0x97, 0xcd, 0xa8, 0xfb, 0x7f, 0xa4, 0x13, 0x52, 0x7e, 0xb7, 0xc0, 0xcd, 0x6b, - 0xe9, 0x70, 0x7e, 0x37, 0x92, 0x52, 0x9e, 0x94, 0x66, 0xfa, 0x00, 0x82, 0x38, 0x78, 0x2e, 0xe4, - 0x77, 0x0a, 0x30, 0xd5, 0xc9, 0xd8, 0xef, 0xa7, 0x78, 0xa1, 0x44, 0x64, 0xcd, 0xae, 0x0f, 0xa0, - 0x87, 0x03, 0x67, 0x42, 0x7e, 0x0e, 0xea, 0x5d, 0xbe, 0x2f, 0x42, 0x46, 0x3d, 0x4b, 0xdf, 0x29, - 0x19, 0x7e, 0xf7, 0x6f, 0xc4, 0xb8, 0x74, 0xaa, 0x8a, 0x94, 0xe9, 0x89, 0x0e, 0x4c, 0x52, 0x7c, - 0xc8, 0x6f, 0x90, 0x5c, 0x83, 0x6a, 0x48, 0x19, 0x73, 0xbc, 0x56, 0x28, 0xbc, 0x42, 0x35, 0x79, - 0x56, 0x9a, 0xaa, 0x0d, 0xa3, 0x5e, 0xf2, 0x7f, 0xa1, 0x26, 0xfc, 0xd7, 0x0b, 0x41, 0x2b, 0x9c, - 0xaa, 0x89, 0x74, 0x92, 0x49, 0x99, 0x20, 0xa3, 0x1a, 0x31, 0xee, 0x27, 0xcf, 0xc2, 0xc4, 0xb6, - 0x38, 0xbe, 0xea, 0x26, 0x99, 0xf4, 0xdd, 0x08, 0x0d, 0xab, 0x91, 0x68, 0xc7, 0x14, 0x14, 0x99, - 0x07, 0xa0, 0x91, 0x93, 0x3f, 0xeb, 0xa7, 0x89, 0xdd, 0xff, 0x98, 0x80, 0x22, 0x4f, 0x42, 0x89, - 0xb9, 0xa1, 0xf0, 0xcd, 0x54, 0x63, 0xd3, 0x6a, 0x73, 0xad, 0x89, 0xbc, 0xdd, 0xf8, 0x41, 0x01, - 0xce, 0x66, 0x92, 0xcf, 0xf9, 0x90, 0x5e, 0xe0, 0x2a, 0x36, 0x12, 0x0d, 0xd9, 0xc2, 0x35, 0xe4, - 0xed, 0xe4, 0x0d, 0xa5, 0x4a, 0x17, 0x47, 0xbc, 0x34, 0x7b, 0xd3, 0x64, 0x21, 0xd7, 0x9d, 0xfb, - 0xb4, 0x68, 0x11, 0x33, 0x88, 0xe7, 0xa3, 0x78, 0x77, 0x22, 0x66, 0x10, 0xf7, 0x61, 0x0a, 0x32, - 0xe3, 0xc8, 0x2a, 0x1f, 0xc5, 0x91, 0x65, 0xfc, 0x79, 0x09, 0xea, 0xaf, 0xf8, 0xdb, 0x3f, 0x22, - 0xc9, 0x84, 0xf9, 0x1c, 0xb9, 0xf8, 0x43, 0xe4, 0xc8, 0x5b, 0xf0, 0x38, 0x63, 0x6e, 0x93, 0x5a, - 0xbe, 0x67, 0x87, 0x0b, 0x3b, 0x8c, 0x06, 0xcb, 0x8e, 0xe7, 0x84, 0xbb, 0xd4, 0x56, 0x11, 0x81, - 0x27, 0x0e, 0x0f, 0x66, 0x1e, 0xdf, 0xdc, 0x5c, 0xcb, 0x03, 0xc1, 0x41, 0x63, 0xc5, 0x09, 0x31, - 0xad, 0xb6, 0xbf, 0xb3, 0x23, 0x92, 0xc6, 0x55, 0xac, 0x5a, 0x9e, 0x90, 0x44, 0x3b, 0xa6, 0xa0, - 0x8c, 0xaf, 0x16, 0xa1, 0x76, 0xc3, 0xdc, 0x69, 0x9b, 0x4d, 0xc7, 0x6b, 0x93, 0xa7, 0x60, 0x7c, - 0x3b, 0xf0, 0xdb, 0x34, 0x90, 0xc1, 0x17, 0x95, 0x34, 0xde, 0x90, 0x4d, 0xa8, 0xfb, 0xb8, 0xa9, - 0xcc, 0xfc, 0xae, 0x63, 0x65, 0x7d, 0x22, 0x9b, 0xbc, 0x11, 0x65, 0x1f, 0x79, 0x55, 0x9e, 0xa3, - 0xd2, 0x88, 0x37, 0x0e, 0x37, 0xd7, 0x9a, 0x32, 0x93, 0x46, 0x9f, 0x40, 0xf2, 0x74, 0x4a, 0xf3, - 0xa8, 0x0d, 0xd4, 0x15, 0x5e, 0x87, 0x72, 0x68, 0x86, 0xae, 0x12, 0x1d, 0x23, 0xdc, 0xa7, 0x5c, - 0x68, 0xae, 0xa9, 0xfb, 0x94, 0x0b, 0xcd, 0x35, 0x14, 0x48, 0x8d, 0xef, 0x17, 0xa1, 0x2e, 0xd7, - 0x4d, 0x9a, 0xa3, 0x27, 0xb9, 0x72, 0x2f, 0x8a, 0x10, 0x64, 0xd8, 0xeb, 0xd0, 0x40, 0x78, 0x41, - 0xd4, 0x79, 0x4e, 0xba, 0x78, 0xe3, 0xce, 0x28, 0x0c, 0x19, 0x37, 0xe9, 0xa5, 0x2f, 0x9f, 0xe2, - 0xd2, 0x57, 0x8e, 0xb4, 0xf4, 0x63, 0xa7, 0xb1, 0xf4, 0x6f, 0x17, 0xa1, 0xb6, 0xe6, 0xec, 0x50, - 0x6b, 0xdf, 0x72, 0xc5, 0xf5, 0x18, 0x9b, 0xba, 0x94, 0xd1, 0x95, 0xc0, 0xb4, 0xe8, 0x06, 0x0d, - 0x1c, 0x71, 0x33, 0x9e, 0x9f, 0x0f, 0xc1, 0x81, 0xd4, 0xf5, 0x98, 0xa5, 0x01, 0x30, 0x38, 0x70, - 0x34, 0x59, 0x85, 0x09, 0x9b, 0x86, 0x4e, 0x40, 0xed, 0x8d, 0x84, 0x1e, 0xfd, 0x94, 0xe6, 0xaa, - 0x4b, 0x89, 0xbe, 0x7b, 0x07, 0x33, 0x93, 0x1b, 0x4e, 0x97, 0xba, 0x8e, 0x47, 0xa5, 0x42, 0x9d, - 0x1a, 0xca, 0x8f, 0x7c, 0xd7, 0xec, 0x85, 0x79, 0x73, 0x4c, 0x1c, 0xf9, 0x8d, 0x7c, 0x10, 0x1c, - 0x34, 0xd6, 0xa8, 0x40, 0x69, 0xcd, 0x6f, 0x19, 0xef, 0x94, 0x20, 0x2a, 0xa1, 0x40, 0x7e, 0xbe, - 0x00, 0x75, 0xd3, 0xf3, 0x7c, 0xa6, 0xca, 0x13, 0xc8, 0x20, 0x2a, 0x8e, 0x5c, 0xa9, 0x61, 0x76, - 0x21, 0x46, 0x2a, 0xe3, 0x6f, 0x51, 0x4c, 0x30, 0xd1, 0x83, 0x49, 0xda, 0xa4, 0x97, 0x09, 0x09, - 0xae, 0x8f, 0x3e, 0x8b, 0x23, 0x04, 0x00, 0xa7, 0x3f, 0x02, 0xe7, 0xb2, 0x93, 0x3d, 0x8e, 0x47, - 0x7f, 0x94, 0x60, 0xc0, 0x17, 0x6a, 0x50, 0xbf, 0x69, 0x32, 0x67, 0x8f, 0x0a, 0x9b, 0xf4, 0x74, - 0x8c, 0x8c, 0xdf, 0x2c, 0xc0, 0xc5, 0x74, 0x70, 0xee, 0x14, 0x2d, 0x0d, 0x71, 0x65, 0x0a, 0x73, - 0xa9, 0xe1, 0x80, 0x59, 0x08, 0x9b, 0xa3, 0x2f, 0xd6, 0x77, 0xda, 0x36, 0x47, 0x73, 0x10, 0x41, - 0x1c, 0x3c, 0x97, 0x1f, 0x15, 0x9b, 0xe3, 0xe1, 0xbe, 0xd2, 0x9e, 0xb1, 0x88, 0xc6, 0x1f, 0x1a, - 0x8b, 0xa8, 0xfa, 0x50, 0x68, 0xa0, 0xdd, 0x84, 0x45, 0x54, 0x1b, 0xd1, 0x9b, 0xae, 0xf2, 0x59, - 0x24, 0xb6, 0x41, 0x96, 0x95, 0x48, 0xe9, 0xd7, 0xc6, 0x02, 0xb1, 0xa0, 0xb2, 0x6d, 0x86, 0x8e, - 0xa5, 0xf4, 0xf1, 0xc6, 0xf0, 0x7e, 0x1a, 0x7d, 0xd7, 0x59, 0x3a, 0xdd, 0xc4, 0x23, 0x4a, 0xdc, - 0xf1, 0x9d, 0xea, 0xe2, 0x48, 0x77, 0xaa, 0xc9, 0x22, 0x94, 0x3d, 0xce, 0x6c, 0x4b, 0xc7, 0xbe, - 0x45, 0x7d, 0xf3, 0x06, 0xdd, 0x47, 0x31, 0x98, 0xeb, 0xb4, 0xc0, 0x5f, 0x5f, 0xa9, 0x66, 0x0f, - 0xb0, 0xce, 0xde, 0x07, 0xe3, 0x61, 0x4f, 0xb8, 0xaf, 0x95, 0x84, 0x8f, 0x43, 0x10, 0xb2, 0x19, - 0x75, 0x3f, 0xd7, 0xde, 0x3e, 0xd5, 0xa3, 0x3d, 0xed, 0x1c, 0x8b, 0xb4, 0xb7, 0x8f, 0xf2, 0x46, - 0x94, 0x7d, 0xa7, 0xa7, 0x7c, 0x69, 0x33, 0xb2, 0x72, 0x4a, 0x66, 0xa4, 0x51, 0x83, 0xf1, 0x9b, - 0xbe, 0x88, 0xfa, 0x19, 0xff, 0x5c, 0x04, 0x88, 0x23, 0x46, 0xe4, 0x4b, 0x05, 0x78, 0x2c, 0x3a, - 0x70, 0x4c, 0x5e, 0xa6, 0x5c, 0x74, 0x4d, 0xa7, 0x33, 0xb2, 0x91, 0x97, 0x77, 0xd8, 0x05, 0x07, - 0xda, 0xc8, 0x23, 0x87, 0xf9, 0xb3, 0x20, 0x08, 0x55, 0xda, 0xe9, 0xb2, 0xfd, 0x25, 0x27, 0x50, - 0x3b, 0x30, 0x37, 0x30, 0x79, 0x5d, 0xc1, 0xc8, 0xa1, 0xea, 0xe2, 0x9c, 0x38, 0x44, 0xba, 0x07, - 0x23, 0x3c, 0x64, 0x17, 0xaa, 0x9e, 0xff, 0x46, 0xc8, 0x97, 0x43, 0x6d, 0xc7, 0x97, 0x86, 0x5f, - 0x72, 0xb9, 0xac, 0xd2, 0x28, 0x50, 0x0f, 0x38, 0xee, 0xa9, 0xc5, 0xfe, 0x62, 0x11, 0x2e, 0xe4, - 0xac, 0x03, 0x79, 0x09, 0xce, 0xa9, 0xe0, 0x5c, 0x5c, 0x33, 0xa8, 0x10, 0xd7, 0x0c, 0x6a, 0x66, - 0xfa, 0xb0, 0x0f, 0x9a, 0xbc, 0x01, 0x60, 0x5a, 0x16, 0x0d, 0xc3, 0x75, 0xdf, 0xd6, 0x0a, 0xec, - 0x8b, 0xdc, 0xb4, 0x5f, 0x88, 0x5a, 0xef, 0x1d, 0xcc, 0x7c, 0x20, 0x2f, 0x26, 0x9d, 0x59, 0xe7, - 0x78, 0x00, 0x26, 0x50, 0x92, 0x4f, 0x02, 0xc8, 0xcb, 0xb4, 0xd1, 0xf5, 0x83, 0x07, 0xc4, 0x33, - 0x66, 0xf5, 0x45, 0xcf, 0xd9, 0x8f, 0xf6, 0x4c, 0x8f, 0x39, 0x6c, 0x5f, 0xde, 0xf6, 0xba, 0x1d, - 0x61, 0xc1, 0x04, 0x46, 0xe3, 0x4f, 0x8b, 0x50, 0xd5, 0x8a, 0xf5, 0xbb, 0x10, 0xb1, 0x6a, 0xa5, - 0x22, 0x56, 0xc3, 0x5f, 0xf0, 0xd6, 0x53, 0x1e, 0x18, 0xa3, 0xf2, 0x33, 0x31, 0xaa, 0x95, 0xd1, - 0x49, 0xdd, 0x3f, 0x2a, 0xf5, 0x95, 0x22, 0x9c, 0xd1, 0xa0, 0xea, 0xd2, 0xfd, 0xf3, 0x30, 0x19, - 0x50, 0xd3, 0x6e, 0x98, 0xcc, 0xda, 0x15, 0x9f, 0xaf, 0x20, 0xae, 0x7b, 0x9c, 0x3f, 0x3c, 0x98, - 0x99, 0xc4, 0x64, 0x07, 0xa6, 0xe1, 0xc8, 0x87, 0xe1, 0xac, 0xf4, 0xb2, 0xad, 0x9b, 0x77, 0xe5, - 0xc5, 0x37, 0xb1, 0x60, 0x65, 0x19, 0xd4, 0x6e, 0xa4, 0xbb, 0x30, 0x0b, 0xcb, 0xb7, 0xb5, 0x6c, - 0xda, 0x0a, 0xcd, 0x96, 0x9c, 0x8c, 0x58, 0x85, 0x49, 0xb9, 0xad, 0x1b, 0x99, 0x3e, 0xec, 0x83, - 0x26, 0x26, 0xd4, 0xf9, 0x8c, 0x36, 0x9d, 0x0e, 0xf5, 0x7b, 0xba, 0x4c, 0xda, 0x50, 0x81, 0x53, - 0x8c, 0xd1, 0x60, 0x12, 0xa7, 0xf1, 0x37, 0x05, 0x98, 0x88, 0xd7, 0xeb, 0xd4, 0xe3, 0x76, 0x3b, - 0xe9, 0xb8, 0xdd, 0xc2, 0xc8, 0xdb, 0x61, 0x40, 0xa4, 0xee, 0x97, 0xc6, 0xe3, 0xd7, 0x12, 0xb1, - 0xb9, 0x6d, 0x98, 0x76, 0x72, 0xc3, 0x55, 0x09, 0x6e, 0x13, 0xa5, 0x54, 0xaf, 0x0e, 0x84, 0xc4, - 0xfb, 0x60, 0x21, 0x3d, 0xa8, 0xee, 0xd1, 0x80, 0x39, 0x16, 0xd5, 0xef, 0xb7, 0x32, 0xb2, 0x4a, - 0x26, 0x33, 0x7d, 0xe2, 0x35, 0xbd, 0xad, 0x08, 0x60, 0x44, 0x8a, 0x6c, 0x43, 0x85, 0xda, 0x2d, - 0xaa, 0xaf, 0x22, 0x8e, 0x58, 0xe8, 0x23, 0x5a, 0x4f, 0xfe, 0x14, 0xa2, 0x44, 0x4d, 0x42, 0xa8, - 0xb9, 0xda, 0x15, 0xa1, 0xf6, 0xe1, 0xf0, 0x0a, 0x56, 0xe4, 0xd4, 0x88, 0xaf, 0x34, 0x44, 0x4d, - 0x18, 0xd3, 0x21, 0xed, 0xa8, 0xba, 0x52, 0xe5, 0x84, 0x98, 0xc7, 0x7d, 0xea, 0x2b, 0x85, 0x50, - 0xbb, 0x63, 0x32, 0x1a, 0x74, 0xcc, 0xa0, 0xad, 0xac, 0x8d, 0xe1, 0xdf, 0xf0, 0x55, 0x8d, 0x29, - 0x7e, 0xc3, 0xa8, 0x09, 0x63, 0x3a, 0xc4, 0x87, 0x1a, 0x53, 0xea, 0xb3, 0xae, 0xc9, 0x30, 0x3c, - 0x51, 0xad, 0x88, 0x87, 0x2a, 0xe1, 0x43, 0x3f, 0x62, 0x4c, 0x83, 0xec, 0xa5, 0x8a, 0x20, 0xc9, - 0xd2, 0x57, 0x8d, 0x11, 0x2a, 0xb0, 0x29, 0x54, 0xb1, 0xb8, 0xc9, 0x2f, 0xa6, 0x64, 0xdc, 0x2b, - 0xc5, 0x6c, 0xf9, 0xdd, 0x0e, 0x10, 0x3f, 0x9b, 0x0e, 0x10, 0x5f, 0xc9, 0x06, 0x88, 0x33, 0x1e, - 0xad, 0xe3, 0x87, 0x88, 0x4d, 0xa8, 0xbb, 0x66, 0xc8, 0xb6, 0xba, 0xb6, 0xc9, 0x54, 0x74, 0xa1, - 0x3e, 0xff, 0x7f, 0x8e, 0xc6, 0x35, 0x39, 0x1f, 0x8e, 0x3d, 0x4c, 0x6b, 0x31, 0x1a, 0x4c, 0xe2, - 0x24, 0xcf, 0x40, 0x7d, 0x4f, 0x70, 0x02, 0x79, 0xaf, 0xb1, 0x22, 0xc4, 0x88, 0xe0, 0xec, 0xb7, - 0xe3, 0x66, 0x4c, 0xc2, 0xf0, 0x21, 0x52, 0x03, 0x89, 0x0b, 0xc3, 0xa8, 0x21, 0xcd, 0xb8, 0x19, - 0x93, 0x30, 0x22, 0x52, 0xe5, 0x78, 0x6d, 0x39, 0x60, 0x5c, 0x0c, 0x90, 0x91, 0x2a, 0xdd, 0x88, - 0x71, 0x3f, 0xb9, 0x06, 0xd5, 0x9e, 0xbd, 0x23, 0x61, 0xab, 0x02, 0x56, 0x68, 0x98, 0x5b, 0x4b, - 0xcb, 0xea, 0x9e, 0xa5, 0xee, 0x35, 0xbe, 0x53, 0x00, 0xd2, 0x9f, 0xd2, 0x40, 0x76, 0x61, 0xcc, - 0x13, 0x2e, 0xa4, 0x91, 0xeb, 0x31, 0x25, 0x3c, 0x51, 0xf2, 0x6c, 0xab, 0x06, 0x85, 0x9f, 0x78, - 0x50, 0xa5, 0x77, 0x19, 0x0d, 0xbc, 0x28, 0xc5, 0xe9, 0x64, 0x6a, 0x3f, 0x49, 0x95, 0x5a, 0x61, - 0xc6, 0x88, 0x86, 0xf1, 0xbd, 0x22, 0xd4, 0x13, 0x70, 0x0f, 0xb2, 0xcc, 0xc4, 0x4d, 0x04, 0xe9, - 0xb9, 0xd9, 0x0a, 0x5c, 0xb5, 0x4d, 0x13, 0x37, 0x11, 0x54, 0x17, 0xae, 0x61, 0x12, 0x8e, 0xcc, - 0x03, 0x74, 0xcc, 0x90, 0xd1, 0x40, 0x88, 0xb0, 0x4c, 0xfe, 0xff, 0x7a, 0xd4, 0x83, 0x09, 0x28, - 0x72, 0x55, 0x55, 0xef, 0x2a, 0xa7, 0xef, 0xbd, 0x0f, 0x28, 0xcd, 0x55, 0x39, 0x81, 0xd2, 0x5c, - 0xa4, 0x05, 0xe7, 0xf4, 0xac, 0x75, 0xef, 0xf1, 0x6e, 0x45, 0x4b, 0x23, 0x20, 0x83, 0x02, 0xfb, - 0x90, 0x1a, 0x5f, 0x2d, 0xc0, 0x64, 0xca, 0x6f, 0x20, 0x6f, 0xac, 0xeb, 0x84, 0x9c, 0xd4, 0x8d, - 0xf5, 0x44, 0x1e, 0xcd, 0xd3, 0x30, 0x26, 0x17, 0x48, 0x2d, 0x7c, 0xc4, 0x46, 0xe4, 0x12, 0xa2, - 0xea, 0xe5, 0x0c, 0x41, 0x79, 0x26, 0xb3, 0x0c, 0x41, 0xb9, 0x2e, 0x51, 0xf7, 0x93, 0xf7, 0x43, - 0x55, 0xcf, 0x4e, 0xad, 0x74, 0x5c, 0xc8, 0x4e, 0xb5, 0x63, 0x04, 0x61, 0xfc, 0x47, 0x09, 0x84, - 0xdb, 0x9f, 0x3c, 0x0f, 0xb5, 0x0e, 0xb5, 0x76, 0x4d, 0xcf, 0x09, 0x75, 0xc5, 0x0a, 0x6e, 0x22, - 0xd6, 0xd6, 0x75, 0xe3, 0x3d, 0x8e, 0x60, 0xa1, 0xb9, 0x26, 0x12, 0x3f, 0x62, 0x58, 0x62, 0xc1, - 0x58, 0x2b, 0x0c, 0xcd, 0xae, 0x33, 0x72, 0xd9, 0x4e, 0x59, 0x21, 0x40, 0x1e, 0x22, 0xf9, 0x1b, - 0x15, 0x6a, 0x62, 0x41, 0xa5, 0xeb, 0x9a, 0x8e, 0xa7, 0x34, 0xf9, 0xc6, 0x48, 0xc1, 0x8e, 0x0d, - 0x8e, 0x49, 0xfa, 0x45, 0xc4, 0x4f, 0x94, 0xb8, 0x49, 0x0f, 0xea, 0xa1, 0x15, 0x98, 0x9d, 0x70, - 0xd7, 0x9c, 0x7f, 0xee, 0x83, 0x23, 0x6b, 0x1a, 0x31, 0x29, 0xc9, 0xf8, 0x16, 0x71, 0x61, 0xbd, - 0xf9, 0xf2, 0xc2, 0xfc, 0x73, 0x1f, 0xc4, 0x24, 0x9d, 0x24, 0xd9, 0xe7, 0x9e, 0x99, 0x57, 0xfb, - 0xfe, 0xc4, 0xc9, 0x3e, 0xf7, 0xcc, 0x3c, 0x26, 0xe9, 0x18, 0xff, 0x5e, 0x80, 0x5a, 0x04, 0x4b, - 0xb6, 0x00, 0xf8, 0x09, 0x54, 0x77, 0xfa, 0x8f, 0x55, 0x5f, 0x4f, 0x98, 0x96, 0x5b, 0xd1, 0x60, - 0x4c, 0x20, 0xca, 0x29, 0x7a, 0x50, 0x3c, 0xe9, 0xa2, 0x07, 0x73, 0x50, 0xdb, 0x35, 0x3d, 0x3b, - 0xdc, 0x35, 0xdb, 0x92, 0x11, 0x25, 0xca, 0x80, 0xbc, 0xac, 0x3b, 0x30, 0x86, 0x31, 0xfe, 0xa5, - 0x02, 0xb2, 0xf0, 0x24, 0x3f, 0x2a, 0xb6, 0x13, 0xca, 0xb0, 0x7c, 0x41, 0x8c, 0x8c, 0x8e, 0xca, - 0x92, 0x6a, 0xc7, 0x08, 0x82, 0x5c, 0x82, 0x52, 0xc7, 0xf1, 0x54, 0xd8, 0x40, 0x78, 0x8d, 0xd6, - 0x1d, 0x0f, 0x79, 0x9b, 0xe8, 0x32, 0xef, 0xaa, 0x30, 0x93, 0xec, 0x32, 0xef, 0x22, 0x6f, 0xe3, - 0x76, 0x9c, 0xeb, 0xfb, 0xed, 0x6d, 0xd3, 0x6a, 0xeb, 0x68, 0x54, 0x59, 0x08, 0x2c, 0x61, 0xc7, - 0xad, 0xa5, 0xbb, 0x30, 0x0b, 0x4b, 0x56, 0xe0, 0xac, 0xe5, 0xfb, 0xae, 0xed, 0xdf, 0xf1, 0xf4, - 0x70, 0x29, 0x7f, 0x85, 0x3b, 0x7e, 0x89, 0x76, 0x03, 0x6a, 0x71, 0x21, 0xbd, 0x98, 0x06, 0xc2, - 0xec, 0x28, 0xb2, 0x05, 0x8f, 0xbf, 0x45, 0x03, 0x5f, 0xb1, 0x8b, 0xa6, 0x4b, 0x69, 0x57, 0x23, - 0x94, 0xd2, 0x59, 0x44, 0xc7, 0x3e, 0x9e, 0x0f, 0x82, 0x83, 0xc6, 0x8a, 0x38, 0xbb, 0x19, 0xb4, - 0x28, 0xdb, 0x08, 0x7c, 0x8b, 0x86, 0xa1, 0xe3, 0xb5, 0x34, 0xda, 0xf1, 0x18, 0xed, 0x66, 0x3e, - 0x08, 0x0e, 0x1a, 0x4b, 0x5e, 0x83, 0x29, 0xd9, 0x25, 0xa5, 0xf6, 0xc2, 0x9e, 0xe9, 0xb8, 0xe6, - 0xb6, 0xe3, 0xea, 0x6a, 0xd3, 0x93, 0xd2, 0xcb, 0xbf, 0x39, 0x00, 0x06, 0x07, 0x8e, 0x16, 0x35, - 0xa2, 0x55, 0x8c, 0x67, 0x83, 0x06, 0x62, 0x1f, 0x08, 0x87, 0xb1, 0x32, 0x8c, 0x31, 0xd3, 0x87, - 0x7d, 0xd0, 0x04, 0xe1, 0xa2, 0x28, 0x58, 0xba, 0xd5, 0xcd, 0x2c, 0xba, 0xc8, 0x97, 0x99, 0x94, - 0xc1, 0x9c, 0x66, 0x2e, 0x04, 0x0e, 0x18, 0xc9, 0xdf, 0x57, 0xf4, 0x2c, 0xf9, 0x77, 0xbc, 0x2c, - 0xd6, 0x7a, 0xfc, 0xbe, 0xcd, 0x01, 0x30, 0x38, 0x70, 0xb4, 0xb1, 0x03, 0x93, 0x4d, 0xbe, 0xb6, - 0xbe, 0xa7, 0x4a, 0xf1, 0x6c, 0xc1, 0x38, 0x53, 0x36, 0xfd, 0x70, 0x19, 0xdd, 0xc2, 0xbf, 0xa6, - 0xed, 0x79, 0x8d, 0xcb, 0xf8, 0x66, 0x11, 0x6a, 0x91, 0xfe, 0x7d, 0x84, 0x12, 0x37, 0x3e, 0xd4, - 0xa2, 0xac, 0x0d, 0xc5, 0x14, 0x1a, 0xa3, 0x07, 0x58, 0xa4, 0xca, 0x18, 0x3d, 0x62, 0x4c, 0x23, - 0x59, 0x75, 0xb7, 0x34, 0x42, 0xd5, 0xdd, 0x2e, 0x8c, 0xb3, 0xc0, 0x69, 0xb5, 0x94, 0x1e, 0x53, - 0x9f, 0x5f, 0x1d, 0xdd, 0x82, 0xd9, 0x94, 0x08, 0xd5, 0xca, 0xca, 0x07, 0xd4, 0x64, 0x8c, 0x37, - 0xe1, 0x5c, 0x16, 0x52, 0x08, 0x79, 0x6b, 0x97, 0xda, 0x3d, 0x57, 0xaf, 0x71, 0x2c, 0xe4, 0x55, - 0x3b, 0x46, 0x10, 0x5c, 0x5b, 0xe6, 0x9f, 0xe9, 0x2d, 0xdf, 0xd3, 0x76, 0x88, 0xd0, 0x97, 0x36, - 0x55, 0x1b, 0x46, 0xbd, 0xc6, 0x3f, 0x95, 0xe0, 0x52, 0x6c, 0x45, 0xad, 0x9b, 0x9e, 0xd9, 0x3a, - 0x42, 0x59, 0xe5, 0x1f, 0x27, 0x21, 0x1d, 0xb7, 0x4e, 0x59, 0xe9, 0x21, 0xa8, 0x53, 0xf6, 0xeb, - 0x5c, 0xf5, 0x53, 0x65, 0xcb, 0x5d, 0xbf, 0xa5, 0xbe, 0xe2, 0xf0, 0xc1, 0x94, 0x35, 0xbf, 0x25, - 0x65, 0xdf, 0x9a, 0xdf, 0x42, 0x8e, 0x91, 0x6b, 0x6d, 0x6d, 0x73, 0xa7, 0x6d, 0x8e, 0x7c, 0xbe, - 0xa3, 0xe4, 0x29, 0xa9, 0xb5, 0x89, 0x47, 0x94, 0xb8, 0x39, 0x23, 0xd9, 0xd6, 0xd5, 0x77, 0x47, - 0x56, 0x0f, 0xa3, 0x3a, 0xbe, 0x92, 0x91, 0x44, 0x8f, 0x18, 0xd3, 0xe0, 0x0a, 0x6f, 0xcf, 0x16, - 0x45, 0xe4, 0xcb, 0x23, 0x2a, 0xbc, 0x5b, 0x4b, 0xe2, 0x9d, 0x84, 0xc2, 0x2b, 0x7f, 0xa3, 0x42, - 0x6d, 0xfc, 0x63, 0x01, 0x26, 0x9b, 0xae, 0x63, 0x3b, 0x5e, 0xeb, 0x14, 0x4b, 0xa8, 0xdd, 0x82, - 0x4a, 0xe8, 0x3a, 0x36, 0x1d, 0xf2, 0xee, 0x8d, 0xf8, 0x18, 0x7c, 0x96, 0x14, 0x25, 0x9e, 0x74, - 0x4d, 0xb6, 0xd2, 0x11, 0x6a, 0xb2, 0xfd, 0x5a, 0x05, 0x54, 0x89, 0x7e, 0xd2, 0x83, 0x5a, 0x4b, - 0x97, 0x7a, 0x52, 0xef, 0xf8, 0xf2, 0x08, 0xd7, 0xdb, 0x53, 0x45, 0xa3, 0xe4, 0xe7, 0x8c, 0x1a, - 0x31, 0xa6, 0x44, 0x68, 0x7a, 0x93, 0x2e, 0x8d, 0xb8, 0x49, 0x25, 0xb9, 0xfe, 0x6d, 0x6a, 0x42, - 0x79, 0x97, 0xb1, 0xae, 0xda, 0xa1, 0xc3, 0x5f, 0x31, 0x8b, 0x6f, 0x8f, 0xc9, 0xd0, 0x22, 0x7f, - 0x46, 0x81, 0x9a, 0x93, 0xf0, 0xcc, 0xa8, 0xba, 0xf0, 0xe2, 0x48, 0xb1, 0xcb, 0x24, 0x09, 0xfe, - 0x8c, 0x02, 0x35, 0xf9, 0x34, 0xd4, 0x59, 0x60, 0x7a, 0xe1, 0x8e, 0x1f, 0x74, 0x68, 0xa0, 0x6c, - 0x95, 0xe5, 0x11, 0x0e, 0xc0, 0x66, 0x8c, 0x4d, 0x06, 0x45, 0x52, 0x4d, 0x98, 0xa4, 0x46, 0xda, - 0x50, 0xed, 0xd9, 0x72, 0x62, 0xca, 0x88, 0x5f, 0x18, 0xe5, 0xe8, 0x25, 0x22, 0x93, 0xfa, 0x09, - 0x23, 0x02, 0x46, 0x07, 0x94, 0x2b, 0x8f, 0x58, 0xa9, 0x42, 0x8c, 0x32, 0xd5, 0x6b, 0xee, 0x68, - 0x27, 0x25, 0xaa, 0x08, 0x98, 0xa8, 0x1a, 0x93, 0x5b, 0x71, 0xd1, 0xf8, 0xdb, 0x22, 0x94, 0x36, - 0xd7, 0x9a, 0xb2, 0x28, 0x81, 0xa8, 0x72, 0x4a, 0x9b, 0x6d, 0xa7, 0x7b, 0x9b, 0x06, 0xce, 0xce, - 0xbe, 0x32, 0x4e, 0x12, 0x45, 0x09, 0xb2, 0x10, 0x98, 0x33, 0x8a, 0xbc, 0x0e, 0x13, 0x96, 0xb9, - 0x48, 0x03, 0x36, 0x8c, 0xe9, 0x25, 0x72, 0x5a, 0x17, 0x17, 0xe2, 0xe1, 0x98, 0x42, 0xc6, 0x0d, - 0x46, 0x2b, 0x46, 0x5d, 0x3a, 0xb6, 0xc1, 0x98, 0x40, 0x9c, 0x40, 0x44, 0x10, 0x6a, 0x6d, 0x0e, - 0x2a, 0xb0, 0x96, 0x8f, 0x83, 0x55, 0x9c, 0xf0, 0x1b, 0x7a, 0x2c, 0xc6, 0x68, 0x0c, 0x0f, 0x26, - 0x53, 0xd5, 0x19, 0xc9, 0x87, 0xa0, 0xea, 0x77, 0x13, 0x8c, 0xa6, 0x26, 0xac, 0xa9, 0xea, 0x2d, - 0xd5, 0x76, 0xef, 0x60, 0x66, 0x72, 0xcd, 0x6f, 0x39, 0x96, 0x6e, 0xc0, 0x08, 0x9c, 0x18, 0x30, - 0x26, 0x12, 0xd1, 0x74, 0x6d, 0x46, 0xc1, 0x55, 0x45, 0xdd, 0xb6, 0x10, 0x55, 0x8f, 0xf1, 0xd9, - 0x32, 0xc4, 0x0e, 0x70, 0x12, 0xc2, 0x98, 0x2d, 0xea, 0xad, 0x29, 0x9e, 0x36, 0x7c, 0x20, 0x21, - 0x5d, 0x5f, 0x56, 0x1a, 0xc7, 0xe9, 0x36, 0x54, 0xa4, 0x48, 0x0b, 0x4a, 0x6f, 0xfa, 0xdb, 0x23, - 0xb3, 0xb4, 0x44, 0x06, 0xba, 0xf4, 0x26, 0x24, 0x1a, 0x90, 0x53, 0x20, 0xbf, 0x55, 0x80, 0xf3, - 0x61, 0x56, 0x61, 0x54, 0xdb, 0x01, 0x47, 0xd7, 0x8c, 0xb3, 0x2a, 0xa8, 0xca, 0x42, 0x1b, 0xd4, - 0x8d, 0xfd, 0x73, 0xe1, 0xeb, 0x2f, 0x3d, 0xd3, 0x6a, 0x3b, 0xad, 0x8c, 0x58, 0x51, 0x3c, 0xbd, - 0xfe, 0xe9, 0x36, 0x54, 0xa4, 0x8c, 0xcf, 0x17, 0xa1, 0x9e, 0xe0, 0x63, 0x23, 0x97, 0xfc, 0xbc, - 0x9b, 0x29, 0xf9, 0xb9, 0x31, 0x7c, 0xa0, 0x26, 0x9e, 0xd5, 0x69, 0x57, 0xfd, 0xfc, 0xb3, 0x22, - 0x94, 0xb6, 0x96, 0x96, 0xd3, 0xa6, 0x5e, 0xe1, 0x5d, 0x30, 0xf5, 0x76, 0x61, 0x7c, 0xbb, 0xe7, - 0xb8, 0xcc, 0xf1, 0x46, 0xbe, 0x0e, 0xa2, 0x2b, 0xa4, 0xaa, 0x54, 0x73, 0x89, 0x15, 0x35, 0x7a, - 0xd2, 0x82, 0xf1, 0x96, 0xbc, 0x43, 0x3f, 0x72, 0xfa, 0x8a, 0xba, 0x8b, 0x2f, 0x09, 0xa9, 0x07, - 0xd4, 0xd8, 0x8d, 0xcf, 0x80, 0xd2, 0x10, 0x49, 0x78, 0x3a, 0xab, 0x19, 0xa9, 0x69, 0x79, 0x2b, - 0x6a, 0x7c, 0x1a, 0x22, 0x19, 0xf9, 0xae, 0x7f, 0x4e, 0xe3, 0x5f, 0x0b, 0x90, 0x56, 0x0b, 0xde, - 0xfd, 0x1d, 0xd5, 0xce, 0xee, 0xa8, 0xa5, 0x93, 0x38, 0x80, 0xf9, 0x9b, 0xca, 0xf8, 0xe3, 0x22, - 0x8c, 0xa9, 0x7f, 0xcd, 0x3a, 0xfd, 0x6c, 0x1c, 0x9a, 0xca, 0xc6, 0x59, 0x1c, 0x91, 0x39, 0x0e, - 0xcc, 0xc5, 0xe9, 0x64, 0x72, 0x71, 0x46, 0xfd, 0x5f, 0x87, 0x07, 0x64, 0xe2, 0xfc, 0x55, 0x01, - 0x14, 0x6b, 0x5e, 0xf5, 0x42, 0x66, 0x7a, 0x96, 0x30, 0xdb, 0x94, 0x1c, 0x18, 0x35, 0xe4, 0xab, - 0xd2, 0x22, 0xa4, 0xe8, 0x17, 0xbf, 0x35, 0xdf, 0x27, 0xef, 0x87, 0xea, 0xae, 0x1f, 0x32, 0xc1, - 0xeb, 0x8b, 0x69, 0xbf, 0xcc, 0xcb, 0xaa, 0x1d, 0x23, 0x88, 0x6c, 0x54, 0xa7, 0x32, 0x38, 0xaa, - 0x63, 0x7c, 0xb9, 0x08, 0x13, 0xa9, 0x7f, 0xf3, 0x18, 0x3a, 0xb1, 0x28, 0x93, 0xd7, 0x53, 0x3c, - 0xf9, 0xbc, 0x9e, 0xbc, 0xdc, 0xa5, 0xd2, 0x88, 0xb9, 0x4b, 0xe5, 0xe3, 0xe4, 0x2e, 0x19, 0xdf, - 0x28, 0x00, 0xe8, 0xd5, 0x3a, 0xf5, 0xb4, 0x22, 0x3b, 0x9d, 0x56, 0x34, 0xf2, 0xbe, 0xca, 0x4f, - 0x2a, 0xfa, 0xc3, 0x8a, 0x7e, 0x25, 0x91, 0x52, 0xf4, 0x76, 0x01, 0xce, 0x98, 0xa9, 0x34, 0x9d, - 0x91, 0xd5, 0xcb, 0x4c, 0xd6, 0x4f, 0xf4, 0xbf, 0x5a, 0xe9, 0x76, 0xcc, 0x90, 0x25, 0x2f, 0xc0, - 0x44, 0x57, 0xe5, 0x30, 0xdc, 0x8c, 0xb7, 0x7d, 0x74, 0x2f, 0x72, 0x23, 0xd1, 0x87, 0x29, 0xc8, - 0x07, 0xa4, 0x45, 0x95, 0x4e, 0x24, 0x2d, 0x2a, 0x79, 0xe1, 0xa3, 0x7c, 0xdf, 0x0b, 0x1f, 0x7b, - 0x50, 0xdb, 0x09, 0xfc, 0x8e, 0xc8, 0x3c, 0x52, 0xff, 0x08, 0x71, 0x7d, 0x04, 0x99, 0x12, 0xff, - 0x17, 0x52, 0x2c, 0x5a, 0x97, 0x35, 0x7e, 0x8c, 0x49, 0x09, 0x87, 0xb2, 0x2f, 0xa9, 0x8e, 0x9d, - 0x24, 0xd5, 0x88, 0x97, 0x6c, 0x4a, 0xec, 0xa8, 0xc9, 0xa4, 0xb3, 0x8d, 0xc6, 0xdf, 0x9d, 0x6c, - 0x23, 0xe3, 0x9b, 0x11, 0x03, 0x6b, 0x66, 0x4a, 0x27, 0x14, 0x06, 0x94, 0x4e, 0x50, 0x75, 0xa6, - 0x92, 0x79, 0x31, 0x4f, 0xc3, 0x58, 0x40, 0xcd, 0xd0, 0xf7, 0x54, 0x99, 0xbe, 0x88, 0xfd, 0xa3, - 0x68, 0x45, 0xd5, 0x9b, 0xcc, 0x9f, 0x29, 0x3e, 0x20, 0x7f, 0xe6, 0xfd, 0x89, 0x0d, 0x22, 0x13, - 0x24, 0xa3, 0xb3, 0x9e, 0xb3, 0x49, 0x44, 0x70, 0x5d, 0xfd, 0x59, 0x6e, 0x25, 0x1b, 0x5c, 0x57, - 0x7f, 0x64, 0x1b, 0x41, 0x10, 0x1b, 0x26, 0x5c, 0x33, 0x64, 0x22, 0x6a, 0x63, 0x2f, 0xb0, 0x21, - 0x92, 0x73, 0xa2, 0x63, 0xb4, 0x96, 0xc0, 0x83, 0x29, 0xac, 0xc6, 0x41, 0x09, 0x32, 0x66, 0xc8, - 0x8f, 0x1d, 0xf5, 0xff, 0xad, 0x1c, 0xf5, 0xef, 0x14, 0x21, 0x3e, 0x53, 0xc7, 0x0c, 0x5a, 0xbf, - 0x06, 0xd5, 0x8e, 0x79, 0x77, 0x89, 0xba, 0xe6, 0xfe, 0x28, 0x15, 0xf1, 0xd7, 0x15, 0x0e, 0x8c, - 0xb0, 0x91, 0x10, 0xc0, 0x89, 0x2a, 0x45, 0x8d, 0xec, 0xd6, 0x8c, 0x8b, 0x4e, 0x49, 0xf7, 0x50, - 0xfc, 0x8c, 0x09, 0x32, 0xc6, 0x5f, 0x16, 0x41, 0x95, 0x14, 0x23, 0x14, 0x2a, 0x3b, 0xce, 0x5d, - 0x6a, 0x8f, 0x9c, 0xc0, 0x95, 0xf8, 0x9f, 0x12, 0xe9, 0xb7, 0x15, 0x0d, 0x28, 0xb1, 0x93, 0x0e, - 0x8c, 0x87, 0xd2, 0x0f, 0xaf, 0xd6, 0x6f, 0x78, 0x6f, 0x67, 0xca, 0x9f, 0xaf, 0x0a, 0x84, 0xc9, - 0x26, 0xd4, 0x34, 0x04, 0x39, 0x19, 0xae, 0x55, 0x4b, 0x3a, 0x02, 0xb9, 0x64, 0xd8, 0x57, 0x91, - 0x93, 0x4d, 0xa8, 0x69, 0x34, 0x3e, 0xf1, 0xb5, 0x6f, 0x5f, 0x79, 0xe4, 0x1b, 0xdf, 0xbe, 0xf2, - 0xc8, 0xb7, 0xbe, 0x7d, 0xe5, 0x91, 0xcf, 0x1e, 0x5e, 0x29, 0x7c, 0xed, 0xf0, 0x4a, 0xe1, 0x1b, - 0x87, 0x57, 0x0a, 0xdf, 0x3a, 0xbc, 0x52, 0xf8, 0xfb, 0xc3, 0x2b, 0x85, 0x5f, 0xf9, 0x87, 0x2b, - 0x8f, 0x7c, 0xfc, 0xf9, 0x21, 0xff, 0x56, 0xfe, 0xbf, 0x02, 0x00, 0x00, 0xff, 0xff, 0x08, 0xc6, - 0x89, 0xf6, 0x90, 0x7e, 0x00, 0x00, + 0x12, 0x44, 0x23, 0xa4, 0xa0, 0xfb, 0x57, 0x7f, 0x5d, 0x3d, 0x63, 0x77, 0xdb, 0x93, 0x09, 0xe4, + 0xad, 0xeb, 0xde, 0x73, 0xcf, 0xb9, 0x75, 0xeb, 0xde, 0xf3, 0x7f, 0x4f, 0xc3, 0x72, 0xcb, 0x61, + 0x3b, 0xbd, 0xad, 0x59, 0xcb, 0xef, 0x5c, 0xf5, 0x7a, 0x1d, 0xb3, 0x1b, 0xf8, 0xb7, 0xc5, 0x8f, + 0x6d, 0xd7, 0xbf, 0x73, 0xb5, 0xdb, 0x6e, 0x5d, 0x35, 0xbb, 0x4e, 0x18, 0xb7, 0xec, 0x3e, 0x67, + 0xba, 0xdd, 0x1d, 0xf3, 0xb9, 0xab, 0x2d, 0xea, 0xd1, 0xc0, 0x64, 0xd4, 0x9e, 0xed, 0x06, 0x3e, + 0xf3, 0xc9, 0x8b, 0x31, 0xa2, 0x59, 0x8d, 0x68, 0x56, 0x0f, 0x9b, 0xed, 0xb6, 0x5b, 0xb3, 0x1c, + 0x51, 0xdc, 0xa2, 0x11, 0x4d, 0x7f, 0x20, 0x31, 0x83, 0x96, 0xdf, 0xf2, 0xaf, 0x0a, 0x7c, 0x5b, + 0xbd, 0x6d, 0xf1, 0x24, 0x1e, 0xc4, 0x2f, 0x49, 0x67, 0xda, 0x68, 0xbf, 0x14, 0xce, 0x3a, 0x3e, + 0x9f, 0xd6, 0x55, 0xcb, 0x0f, 0xe8, 0xd5, 0xdd, 0xbe, 0xb9, 0x4c, 0x3f, 0x1f, 0xc3, 0x74, 0x4c, + 0x6b, 0xc7, 0xf1, 0x68, 0xb0, 0xa7, 0xdf, 0xe5, 0x6a, 0x40, 0x43, 0xbf, 0x17, 0x58, 0xf4, 0x48, + 0xa3, 0xc2, 0xab, 0x1d, 0xca, 0xcc, 0x3c, 0x5a, 0x57, 0x07, 0x8d, 0x0a, 0x7a, 0x1e, 0x73, 0x3a, + 0xfd, 0x64, 0x3e, 0xf8, 0xa0, 0x01, 0xa1, 0xb5, 0x43, 0x3b, 0x66, 0x76, 0x9c, 0xf1, 0x77, 0x35, + 0x38, 0x37, 0xbf, 0x15, 0xb2, 0xc0, 0xb4, 0xd8, 0xba, 0x6f, 0x6f, 0xd0, 0x4e, 0xd7, 0x35, 0x19, + 0x25, 0x6d, 0xa8, 0xf2, 0xb9, 0xd9, 0x26, 0x33, 0xa7, 0x0a, 0x97, 0x0b, 0x57, 0xea, 0x73, 0xf3, + 0xb3, 0x43, 0x7e, 0x8b, 0xd9, 0x35, 0x85, 0xa8, 0x31, 0x71, 0xb0, 0x3f, 0x53, 0xd5, 0x4f, 0x18, + 0x11, 0x20, 0x5f, 0x2a, 0xc0, 0x84, 0xe7, 0xdb, 0xb4, 0x49, 0x5d, 0x6a, 0x31, 0x3f, 0x98, 0x2a, + 0x5e, 0x2e, 0x5d, 0xa9, 0xcf, 0x7d, 0x72, 0x68, 0x8a, 0x39, 0x6f, 0x34, 0x7b, 0x23, 0x41, 0xe0, + 0x9a, 0xc7, 0x82, 0xbd, 0xc6, 0xe3, 0x5f, 0xdd, 0x9f, 0x79, 0xec, 0x60, 0x7f, 0x66, 0x22, 0xd9, + 0x85, 0xa9, 0x99, 0x90, 0x4d, 0xa8, 0x33, 0xdf, 0xe5, 0x4b, 0xe6, 0xf8, 0x5e, 0x38, 0x55, 0x12, + 0x13, 0xbb, 0x34, 0x2b, 0x57, 0x9b, 0x93, 0x9f, 0xe5, 0xdb, 0x65, 0x76, 0xf7, 0xb9, 0xd9, 0x8d, + 0x08, 0xac, 0x71, 0x4e, 0x21, 0xae, 0xc7, 0x6d, 0x21, 0x26, 0xf1, 0x10, 0x0a, 0xa7, 0x43, 0x6a, + 0xf5, 0x02, 0x87, 0xed, 0x2d, 0xf8, 0x1e, 0xa3, 0x77, 0xd9, 0x54, 0x59, 0xac, 0xf2, 0xb3, 0x79, + 0xa8, 0xd7, 0x7d, 0xbb, 0x99, 0x86, 0x6e, 0x9c, 0x3b, 0xd8, 0x9f, 0x39, 0x9d, 0x69, 0xc4, 0x2c, + 0x4e, 0xe2, 0xc1, 0x19, 0xa7, 0x63, 0xb6, 0xe8, 0x7a, 0xcf, 0x75, 0x9b, 0xd4, 0x0a, 0x28, 0x0b, + 0xa7, 0x2a, 0xe2, 0x15, 0xae, 0xe4, 0xd1, 0x59, 0xf5, 0x2d, 0xd3, 0xbd, 0xb9, 0x75, 0x9b, 0x5a, + 0x0c, 0xe9, 0x36, 0x0d, 0xa8, 0x67, 0xd1, 0xc6, 0x94, 0x7a, 0x99, 0x33, 0x2b, 0x19, 0x4c, 0xd8, + 0x87, 0x9b, 0x2c, 0xc3, 0xd9, 0x6e, 0xe0, 0xf8, 0x62, 0x0a, 0xae, 0x19, 0x86, 0x37, 0xcc, 0x0e, + 0x9d, 0x1a, 0xbb, 0x5c, 0xb8, 0x52, 0x6b, 0x5c, 0x50, 0x68, 0xce, 0xae, 0x67, 0x01, 0xb0, 0x7f, + 0x0c, 0xb9, 0x02, 0x55, 0xdd, 0x38, 0x35, 0x7e, 0xb9, 0x70, 0xa5, 0x22, 0xf7, 0x8e, 0x1e, 0x8b, + 0x51, 0x2f, 0x59, 0x82, 0xaa, 0xb9, 0xbd, 0xed, 0x78, 0x1c, 0xb2, 0x2a, 0x96, 0xf0, 0x62, 0xde, + 0xab, 0xcd, 0x2b, 0x18, 0x89, 0x47, 0x3f, 0x61, 0x34, 0x96, 0xbc, 0x06, 0x24, 0xa4, 0xc1, 0xae, + 0x63, 0xd1, 0x79, 0xcb, 0xf2, 0x7b, 0x1e, 0x13, 0x73, 0xaf, 0x89, 0xb9, 0x4f, 0xab, 0xb9, 0x93, + 0x66, 0x1f, 0x04, 0xe6, 0x8c, 0x22, 0xaf, 0xc0, 0x19, 0x75, 0xec, 0xe2, 0x55, 0x00, 0x81, 0xe9, + 0x71, 0xbe, 0x90, 0x98, 0xe9, 0xc3, 0x3e, 0x68, 0x62, 0xc3, 0x45, 0xb3, 0xc7, 0xfc, 0x0e, 0x47, + 0x99, 0x26, 0xba, 0xe1, 0xb7, 0xa9, 0x37, 0x55, 0xbf, 0x5c, 0xb8, 0x52, 0x6d, 0x5c, 0x3e, 0xd8, + 0x9f, 0xb9, 0x38, 0x7f, 0x1f, 0x38, 0xbc, 0x2f, 0x16, 0x72, 0x13, 0x6a, 0xb6, 0x17, 0xae, 0xfb, + 0xae, 0x63, 0xed, 0x4d, 0x4d, 0x88, 0x09, 0x3e, 0xa7, 0x5e, 0xb5, 0xb6, 0x78, 0xa3, 0x29, 0x3b, + 0xee, 0xed, 0xcf, 0x5c, 0xec, 0xe7, 0x8e, 0xb3, 0x51, 0x3f, 0xc6, 0x38, 0xc8, 0x9a, 0x40, 0xb8, + 0xe0, 0x7b, 0xdb, 0x4e, 0x6b, 0x6a, 0x52, 0x7c, 0x8d, 0xcb, 0x03, 0x36, 0xf4, 0xe2, 0x8d, 0xa6, + 0x84, 0x6b, 0x4c, 0x2a, 0x72, 0xf2, 0x11, 0x63, 0x0c, 0xd3, 0x2f, 0xc3, 0xd9, 0xbe, 0x53, 0x4b, + 0xce, 0x40, 0xa9, 0x4d, 0xf7, 0x04, 0x53, 0xaa, 0x21, 0xff, 0x49, 0x1e, 0x87, 0xca, 0xae, 0xe9, + 0xf6, 0xe8, 0x54, 0x51, 0xb4, 0xc9, 0x87, 0x1f, 0x2b, 0xbe, 0x54, 0x30, 0xbe, 0x5d, 0x87, 0x53, + 0x9a, 0x17, 0xdc, 0xa2, 0x01, 0xa3, 0x77, 0xc9, 0x65, 0x28, 0x7b, 0xfc, 0x7b, 0x88, 0xf1, 0x8d, + 0x09, 0xf5, 0xba, 0x65, 0xf1, 0x1d, 0x44, 0x0f, 0xb1, 0x60, 0x4c, 0xf2, 0x72, 0x81, 0xaf, 0x3e, + 0xf7, 0xf2, 0xd0, 0x6c, 0xa8, 0x29, 0xd0, 0x34, 0xe0, 0x60, 0x7f, 0x66, 0x4c, 0xfe, 0x46, 0x85, + 0x9a, 0xbc, 0x09, 0xe5, 0xd0, 0xf1, 0xda, 0x53, 0x25, 0x41, 0xe2, 0xc3, 0xc3, 0x93, 0x70, 0xbc, + 0x76, 0xa3, 0xca, 0xdf, 0x80, 0xff, 0x42, 0x81, 0x94, 0xbc, 0x0e, 0xa5, 0x9e, 0xbd, 0xad, 0x38, + 0xca, 0x4f, 0x0c, 0x8d, 0x7b, 0x73, 0x71, 0xa9, 0x31, 0x7e, 0xb0, 0x3f, 0x53, 0xda, 0x5c, 0x5c, + 0x42, 0x8e, 0x91, 0xfc, 0x62, 0x01, 0xce, 0x5a, 0xbe, 0xc7, 0x4c, 0x2e, 0x5f, 0x34, 0x67, 0x9d, + 0xaa, 0x08, 0x3a, 0xaf, 0x0d, 0x4d, 0x67, 0x21, 0x8b, 0xb1, 0xf1, 0x04, 0x67, 0x14, 0x7d, 0xcd, + 0xd8, 0x4f, 0x9b, 0xfc, 0x5a, 0x01, 0x9e, 0xe0, 0x07, 0xb8, 0x0f, 0x58, 0xb0, 0x9d, 0xe3, 0x9d, + 0xd5, 0x85, 0x83, 0xfd, 0x99, 0x27, 0x56, 0xf2, 0x88, 0x61, 0xfe, 0x1c, 0xf8, 0xec, 0xce, 0x99, + 0xfd, 0xb2, 0x48, 0xb0, 0xb4, 0xfa, 0xdc, 0xea, 0x71, 0xca, 0xb7, 0xc6, 0x53, 0x6a, 0x2b, 0xe7, + 0x89, 0x73, 0xcc, 0x9b, 0x05, 0xb9, 0x06, 0xe3, 0xbb, 0xbe, 0xdb, 0xeb, 0xd0, 0x70, 0xaa, 0x2a, + 0x84, 0xc2, 0x74, 0xde, 0x59, 0xbd, 0x25, 0x40, 0x1a, 0xa7, 0x15, 0xfa, 0x71, 0xf9, 0x1c, 0xa2, + 0x1e, 0x4b, 0x1c, 0x18, 0x73, 0x9d, 0x8e, 0xc3, 0x42, 0xc1, 0x2d, 0xeb, 0x73, 0xd7, 0x86, 0x7e, + 0x2d, 0x79, 0x44, 0x57, 0x05, 0x32, 0x79, 0x6a, 0xe4, 0x6f, 0x54, 0x04, 0x88, 0x05, 0x95, 0xd0, + 0x32, 0x5d, 0xc9, 0x4d, 0xeb, 0x73, 0x1f, 0x19, 0xfe, 0xd8, 0x70, 0x2c, 0x8d, 0x49, 0xf5, 0x4e, + 0x15, 0xf1, 0x88, 0x12, 0x37, 0xf9, 0x04, 0x9c, 0x4a, 0x7d, 0xcd, 0x70, 0xaa, 0x2e, 0x56, 0xe7, + 0xe9, 0xbc, 0xd5, 0x89, 0xa0, 0x1a, 0xe7, 0x15, 0xb2, 0x53, 0xa9, 0x1d, 0x12, 0x62, 0x06, 0x19, + 0xb9, 0x0e, 0xd5, 0xd0, 0xb1, 0xa9, 0x65, 0x06, 0xe1, 0xd4, 0xc4, 0x61, 0x10, 0x9f, 0x51, 0x88, + 0xab, 0x4d, 0x35, 0x0c, 0x23, 0x04, 0x64, 0x16, 0xa0, 0x6b, 0x06, 0xcc, 0x91, 0xda, 0xc9, 0xa4, + 0x90, 0x94, 0xa7, 0x0e, 0xf6, 0x67, 0x60, 0x3d, 0x6a, 0xc5, 0x04, 0x04, 0x87, 0xe7, 0x63, 0x57, + 0xbc, 0x6e, 0x8f, 0x85, 0x53, 0xa7, 0x2e, 0x97, 0xae, 0xd4, 0x24, 0x7c, 0x33, 0x6a, 0xc5, 0x04, + 0x04, 0xf9, 0xdd, 0x02, 0x3c, 0x15, 0x3f, 0xf6, 0x1f, 0xb2, 0xd3, 0xc7, 0x7e, 0xc8, 0x66, 0x0e, + 0xf6, 0x67, 0x9e, 0x6a, 0x0e, 0x26, 0x89, 0xf7, 0x9b, 0x8f, 0xf1, 0x3a, 0x4c, 0xce, 0xf7, 0xd8, + 0x8e, 0x1f, 0x38, 0x6f, 0x0b, 0x4d, 0x8b, 0x2c, 0x41, 0x85, 0x09, 0x89, 0x29, 0x95, 0xd8, 0x67, + 0xf2, 0x96, 0x5a, 0x6a, 0x2f, 0xd7, 0xe9, 0x9e, 0x16, 0x34, 0x8d, 0x1a, 0xdf, 0x14, 0x52, 0x82, + 0xca, 0xe1, 0xc6, 0x6f, 0x16, 0xa0, 0xd6, 0x30, 0x43, 0xc7, 0xe2, 0xe8, 0xc9, 0x02, 0x94, 0x7b, + 0x21, 0x0d, 0x8e, 0x86, 0x54, 0x70, 0xe9, 0xcd, 0x90, 0x06, 0x28, 0x06, 0x93, 0x9b, 0x50, 0xed, + 0x9a, 0x61, 0x78, 0xc7, 0x0f, 0x6c, 0x25, 0x69, 0x0e, 0x89, 0x48, 0xaa, 0x42, 0x6a, 0x28, 0x46, + 0x48, 0x8c, 0x3a, 0xd4, 0x1a, 0xae, 0x69, 0xb5, 0x77, 0x7c, 0x97, 0x1a, 0xdf, 0x2d, 0xc0, 0xb9, + 0x46, 0x6f, 0x7b, 0x9b, 0x06, 0x4a, 0xf2, 0x4b, 0x99, 0x4a, 0x28, 0x54, 0x02, 0x6a, 0x3b, 0xa1, + 0x9a, 0xfb, 0xe2, 0xd0, 0x9f, 0x0e, 0x39, 0x16, 0x25, 0xc2, 0xc5, 0x7a, 0x89, 0x06, 0x94, 0xd8, + 0x49, 0x0f, 0x6a, 0xb7, 0x29, 0x0b, 0x59, 0x40, 0xcd, 0x8e, 0x7a, 0xbb, 0x57, 0x87, 0x26, 0xf5, + 0x1a, 0x65, 0x4d, 0x81, 0x29, 0xa9, 0x31, 0x44, 0x8d, 0x18, 0x53, 0x32, 0xfe, 0xa4, 0x02, 0x13, + 0x0b, 0x7e, 0x67, 0xcb, 0xf1, 0xa8, 0x7d, 0xcd, 0x6e, 0x51, 0xf2, 0x16, 0x94, 0xa9, 0xdd, 0xa2, + 0xea, 0x6d, 0x87, 0x97, 0xb3, 0x1c, 0x59, 0xac, 0x2d, 0xf0, 0x27, 0x14, 0x88, 0xc9, 0x2a, 0x9c, + 0xda, 0x0e, 0xfc, 0x8e, 0x64, 0x5d, 0x1b, 0x7b, 0x5d, 0xa5, 0x85, 0x34, 0xfe, 0x97, 0x66, 0x07, + 0x4b, 0xa9, 0xde, 0x7b, 0xfb, 0x33, 0x10, 0x3f, 0x61, 0x66, 0x2c, 0x79, 0x03, 0xa6, 0xe2, 0x96, + 0xe8, 0x0c, 0x2f, 0x70, 0x95, 0x4d, 0xa8, 0x0a, 0x95, 0xc6, 0xc5, 0x83, 0xfd, 0x99, 0xa9, 0xa5, + 0x01, 0x30, 0x38, 0x70, 0x34, 0x79, 0xa7, 0x00, 0x67, 0xe2, 0x4e, 0xc9, 0x57, 0x95, 0x86, 0x70, + 0x4c, 0x0c, 0x5b, 0xe8, 0xb6, 0x4b, 0x19, 0x12, 0xd8, 0x47, 0x94, 0x2c, 0xc1, 0x04, 0xf3, 0x13, + 0xeb, 0x55, 0x11, 0xeb, 0x65, 0x68, 0x63, 0x6c, 0xc3, 0x1f, 0xb8, 0x5a, 0xa9, 0x71, 0x04, 0xe1, + 0xbc, 0x7e, 0xce, 0xac, 0xd4, 0x98, 0x58, 0xa9, 0xe9, 0x83, 0xfd, 0x99, 0xf3, 0x1b, 0xb9, 0x10, + 0x38, 0x60, 0x24, 0xf9, 0x5c, 0x01, 0x4e, 0xe9, 0x2e, 0xb5, 0x46, 0xe3, 0xc7, 0xb9, 0x46, 0x84, + 0xef, 0x88, 0x8d, 0x14, 0x01, 0xcc, 0x10, 0x34, 0xbe, 0x57, 0x86, 0x5a, 0xc4, 0xd9, 0xc8, 0x7b, + 0xa1, 0x22, 0xcc, 0x2c, 0xa5, 0xb0, 0x46, 0x22, 0x4b, 0x58, 0x63, 0x28, 0xfb, 0xc8, 0x33, 0x30, + 0x6e, 0xf9, 0x9d, 0x8e, 0xe9, 0xd9, 0xc2, 0x74, 0xae, 0x35, 0xea, 0x5c, 0x52, 0x2f, 0xc8, 0x26, + 0xd4, 0x7d, 0xe4, 0x22, 0x94, 0xcd, 0xa0, 0x25, 0xad, 0xd8, 0x9a, 0xe4, 0x47, 0xf3, 0x41, 0x2b, + 0x44, 0xd1, 0x4a, 0x3e, 0x04, 0x25, 0xea, 0xed, 0x4e, 0x95, 0x07, 0xab, 0x02, 0xd7, 0xbc, 0xdd, + 0x5b, 0x66, 0xd0, 0xa8, 0xab, 0x39, 0x94, 0xae, 0x79, 0xbb, 0xc8, 0xc7, 0x90, 0x55, 0x18, 0xa7, + 0xde, 0x2e, 0xff, 0xf6, 0xca, 0xbc, 0x7c, 0xcf, 0x80, 0xe1, 0x1c, 0x44, 0x69, 0xc5, 0x91, 0x42, + 0xa1, 0x9a, 0x51, 0xa3, 0x20, 0x1f, 0x83, 0x09, 0xa9, 0x5b, 0xac, 0xf1, 0x6f, 0x12, 0x4e, 0x8d, + 0x09, 0x94, 0x33, 0x83, 0x95, 0x13, 0x01, 0x17, 0x9b, 0xf3, 0x89, 0xc6, 0x10, 0x53, 0xa8, 0xc8, + 0xc7, 0xa0, 0xa6, 0x3d, 0x35, 0xfa, 0xcb, 0xe6, 0x5a, 0xc2, 0xa8, 0x80, 0x90, 0x7e, 0xaa, 0xe7, + 0x04, 0xb4, 0x43, 0x3d, 0x16, 0x36, 0xce, 0x6a, 0xdb, 0x48, 0xf7, 0x86, 0x18, 0x63, 0x23, 0x5b, + 0xfd, 0x26, 0xbd, 0xb4, 0x47, 0xdf, 0x3b, 0x80, 0xab, 0x0f, 0x61, 0xcf, 0x7f, 0x12, 0x4e, 0x47, + 0x36, 0xb7, 0x32, 0xdb, 0xa4, 0x85, 0xfa, 0x3c, 0x1f, 0xbe, 0x92, 0xee, 0xba, 0xb7, 0x3f, 0xf3, + 0x74, 0x8e, 0xe1, 0x16, 0x03, 0x60, 0x16, 0x99, 0xf1, 0x47, 0x25, 0xe8, 0x57, 0xbb, 0xd3, 0x8b, + 0x56, 0x38, 0xee, 0x45, 0xcb, 0xbe, 0x90, 0x64, 0x9f, 0x2f, 0xa9, 0x61, 0xa3, 0xbf, 0x54, 0xde, + 0x87, 0x29, 0x1d, 0xf7, 0x87, 0x79, 0x54, 0xce, 0x8e, 0xf1, 0x6e, 0x19, 0x4e, 0x2d, 0x9a, 0xb4, + 0xe3, 0x7b, 0x0f, 0x34, 0x42, 0x0a, 0x8f, 0x84, 0x11, 0x72, 0x05, 0xaa, 0x01, 0xed, 0xba, 0x8e, + 0x65, 0x86, 0xe2, 0xd3, 0x2b, 0x4f, 0x0f, 0xaa, 0x36, 0x8c, 0x7a, 0x07, 0x18, 0x9f, 0xa5, 0x47, + 0xd2, 0xf8, 0x2c, 0xff, 0xe0, 0x8d, 0x4f, 0xe3, 0x73, 0x45, 0x10, 0x8a, 0x0a, 0xb9, 0x0c, 0x65, + 0x2e, 0x84, 0xb3, 0x2e, 0x0f, 0xb1, 0x71, 0x44, 0x0f, 0x99, 0x86, 0x22, 0xf3, 0xd5, 0xc9, 0x03, + 0xd5, 0x5f, 0xdc, 0xf0, 0xb1, 0xc8, 0x7c, 0xf2, 0x36, 0x80, 0xe5, 0x7b, 0xb6, 0xa3, 0x1d, 0xa0, + 0xa3, 0xbd, 0xd8, 0x92, 0x1f, 0xdc, 0x31, 0x03, 0x7b, 0x21, 0xc2, 0x28, 0xcd, 0x8f, 0xf8, 0x19, + 0x13, 0xd4, 0xc8, 0xcb, 0x30, 0xe6, 0x7b, 0x4b, 0x3d, 0xd7, 0x15, 0x0b, 0x5a, 0x6b, 0xfc, 0x6f, + 0x6e, 0x13, 0xde, 0x14, 0x2d, 0xf7, 0xf6, 0x67, 0x2e, 0x48, 0xfd, 0x96, 0x3f, 0xbd, 0x1e, 0x38, + 0xcc, 0xf1, 0x5a, 0x4d, 0x16, 0x98, 0x8c, 0xb6, 0xf6, 0x50, 0x0d, 0x33, 0x7e, 0xb9, 0x00, 0xf5, + 0x25, 0xe7, 0x2e, 0xb5, 0x5f, 0x77, 0x3c, 0xdb, 0xbf, 0x43, 0x10, 0xc6, 0x5c, 0xea, 0xb5, 0xd8, + 0x8e, 0xda, 0xfd, 0xb3, 0x89, 0xb3, 0x16, 0xf9, 0xcd, 0xe3, 0xf9, 0x77, 0x28, 0x33, 0xf9, 0xe9, + 0x5b, 0xec, 0x29, 0xcf, 0xae, 0x34, 0x4a, 0x05, 0x06, 0x54, 0x98, 0xc8, 0x55, 0xa8, 0x49, 0xed, + 0xd3, 0xf1, 0x5a, 0x62, 0x0d, 0xab, 0x31, 0xd3, 0x6b, 0xea, 0x0e, 0x8c, 0x61, 0x8c, 0x3d, 0x38, + 0xdb, 0xb7, 0x0c, 0xc4, 0x86, 0x32, 0x33, 0x5b, 0x9a, 0xbf, 0x2e, 0x0d, 0xbd, 0xc0, 0x1b, 0x66, + 0x2b, 0xb1, 0xb8, 0x42, 0xc6, 0x6f, 0x98, 0x5c, 0xc6, 0x73, 0xec, 0xc6, 0x7f, 0x16, 0xa0, 0xba, + 0xd4, 0xf3, 0x2c, 0x61, 0x1b, 0x3d, 0xd8, 0x15, 0xa6, 0x15, 0x86, 0x62, 0xae, 0xc2, 0xd0, 0x83, + 0xb1, 0xf6, 0x9d, 0x48, 0xa1, 0xa8, 0xcf, 0xad, 0x0d, 0xbf, 0x2b, 0xd4, 0x94, 0x66, 0xaf, 0x0b, + 0x7c, 0xd2, 0x3d, 0x7f, 0x4a, 0x4d, 0x68, 0xec, 0xfa, 0xeb, 0x82, 0xa8, 0x22, 0x36, 0xfd, 0x21, + 0xa8, 0x27, 0xc0, 0x8e, 0xe4, 0x0f, 0xfc, 0xfd, 0x32, 0x8c, 0x2d, 0x37, 0x9b, 0xf3, 0xeb, 0x2b, + 0xe4, 0x05, 0xa8, 0x2b, 0xcf, 0xed, 0x8d, 0x78, 0x0d, 0x22, 0xc7, 0x7d, 0x33, 0xee, 0xc2, 0x24, + 0x1c, 0x57, 0xc7, 0x02, 0x6a, 0xba, 0x1d, 0x75, 0x58, 0x22, 0x75, 0x0c, 0x79, 0x23, 0xca, 0x3e, + 0x62, 0xc2, 0x29, 0x6e, 0xe1, 0xf1, 0x25, 0x94, 0xd6, 0x9b, 0x3a, 0x36, 0x87, 0xb4, 0xef, 0x84, + 0x92, 0xb8, 0x99, 0x42, 0x80, 0x19, 0x84, 0xe4, 0x25, 0xa8, 0x9a, 0x3d, 0xb6, 0x23, 0x14, 0x68, + 0x79, 0x36, 0x2e, 0x0a, 0xc7, 0xb6, 0x6a, 0xbb, 0xb7, 0x3f, 0x33, 0x71, 0x1d, 0x1b, 0x2f, 0xe8, + 0x67, 0x8c, 0xa0, 0xf9, 0xe4, 0xb4, 0xc5, 0xa8, 0x26, 0x57, 0x39, 0xf2, 0xe4, 0xd6, 0x53, 0x08, + 0x30, 0x83, 0x90, 0xbc, 0x09, 0x13, 0x6d, 0xba, 0xc7, 0xcc, 0x2d, 0x45, 0x60, 0xec, 0x28, 0x04, + 0xce, 0x70, 0x15, 0xee, 0x7a, 0x62, 0x38, 0xa6, 0x90, 0x91, 0x10, 0x1e, 0x6f, 0xd3, 0x60, 0x8b, + 0x06, 0xbe, 0xb2, 0x3e, 0x15, 0x91, 0xf1, 0xa3, 0x10, 0x99, 0x3a, 0xd8, 0x9f, 0x79, 0xfc, 0x7a, + 0x0e, 0x1a, 0xcc, 0x45, 0x6e, 0x7c, 0xad, 0x08, 0xa7, 0x97, 0x65, 0xe8, 0xcc, 0x0f, 0xa4, 0x10, + 0x26, 0x17, 0xa0, 0x14, 0x74, 0x7b, 0x62, 0xe7, 0x94, 0xa4, 0x9f, 0x14, 0xd7, 0x37, 0x91, 0xb7, + 0x91, 0x37, 0xa0, 0x6a, 0x2b, 0x96, 0xa1, 0x8c, 0xdf, 0xa3, 0x32, 0x1a, 0x21, 0x04, 0xf5, 0x13, + 0x46, 0xd8, 0xb8, 0xa6, 0xdf, 0x09, 0x5b, 0x4d, 0xe7, 0x6d, 0xaa, 0xec, 0x41, 0xa1, 0xe9, 0xaf, + 0xc9, 0x26, 0xd4, 0x7d, 0x5c, 0xaa, 0xb6, 0xe9, 0x9e, 0xb4, 0x86, 0xca, 0xb1, 0x54, 0xbd, 0xae, + 0xda, 0x30, 0xea, 0x25, 0x33, 0xfa, 0xb0, 0xf0, 0x5d, 0x50, 0x96, 0x96, 0xfc, 0x2d, 0xde, 0xa0, + 0xce, 0x0d, 0x67, 0x99, 0xb7, 0x1d, 0xc6, 0x68, 0xa0, 0x3e, 0xe3, 0x50, 0x2c, 0xf3, 0x35, 0x81, + 0x01, 0x15, 0x26, 0xe3, 0xfb, 0x45, 0x38, 0xbf, 0x4c, 0x99, 0x54, 0x54, 0x16, 0x69, 0xd7, 0xf5, + 0xf7, 0xb8, 0xb6, 0x88, 0xf4, 0x53, 0xe4, 0x15, 0x00, 0x27, 0xdc, 0x6a, 0xee, 0x5a, 0x62, 0x6b, + 0xcb, 0x63, 0x79, 0x59, 0x9d, 0x32, 0x58, 0x69, 0x36, 0x54, 0xcf, 0xbd, 0xd4, 0x13, 0x26, 0xc6, + 0xc4, 0x16, 0x53, 0xf1, 0x3e, 0x16, 0x53, 0x13, 0xa0, 0x1b, 0xeb, 0x9c, 0x25, 0x01, 0xf9, 0xff, + 0x35, 0x99, 0xa3, 0xa8, 0x9b, 0x09, 0x34, 0xa3, 0x68, 0x81, 0x1e, 0x9c, 0xb1, 0xe9, 0xb6, 0xd9, + 0x73, 0x59, 0xa4, 0x27, 0xab, 0x73, 0x79, 0x78, 0x55, 0x3b, 0x8a, 0xd4, 0x2d, 0x66, 0x30, 0x61, + 0x1f, 0x6e, 0xe3, 0x0f, 0x4a, 0x30, 0xbd, 0x4c, 0x59, 0xe4, 0x44, 0x51, 0x0c, 0xaf, 0xd9, 0xa5, + 0x16, 0xff, 0x0a, 0xef, 0x14, 0x60, 0xcc, 0x35, 0xb7, 0xa8, 0xcb, 0x05, 0x12, 0x7f, 0x9b, 0xb7, + 0x86, 0xe6, 0xed, 0x83, 0xa9, 0xcc, 0xae, 0x0a, 0x0a, 0x19, 0x6e, 0x2f, 0x1b, 0x51, 0x91, 0xe7, + 0x7c, 0xda, 0x72, 0x7b, 0x21, 0xa3, 0xc1, 0xba, 0x1f, 0x30, 0xa5, 0x22, 0x46, 0x7c, 0x7a, 0x21, + 0xee, 0xc2, 0x24, 0x1c, 0x99, 0x03, 0xb0, 0x5c, 0x87, 0x7a, 0x4c, 0x8c, 0x92, 0x47, 0x85, 0xe8, + 0xef, 0xbb, 0x10, 0xf5, 0x60, 0x02, 0x8a, 0x93, 0xea, 0xf8, 0x9e, 0xc3, 0x7c, 0x49, 0xaa, 0x9c, + 0x26, 0xb5, 0x16, 0x77, 0x61, 0x12, 0x4e, 0x0c, 0xa3, 0x2c, 0x70, 0xac, 0x50, 0x0c, 0xab, 0x64, + 0x86, 0xc5, 0x5d, 0x98, 0x84, 0xe3, 0x62, 0x2c, 0xf1, 0xfe, 0x47, 0x12, 0x63, 0xbf, 0x53, 0x83, + 0x4b, 0xa9, 0x65, 0x65, 0x26, 0xa3, 0xdb, 0x3d, 0xb7, 0x49, 0x99, 0xfe, 0x80, 0x43, 0x8a, 0xb7, + 0x9f, 0x8b, 0xbf, 0xbb, 0x8c, 0xc1, 0x5b, 0xc7, 0xf3, 0xdd, 0xfb, 0x26, 0x78, 0xa8, 0x6f, 0x7f, + 0x15, 0x6a, 0x9e, 0xc9, 0x42, 0x71, 0x70, 0xd5, 0x19, 0x8d, 0x34, 0xab, 0x1b, 0xba, 0x03, 0x63, + 0x18, 0xb2, 0x0e, 0x8f, 0xab, 0x25, 0xbe, 0x76, 0xb7, 0xeb, 0x07, 0x8c, 0x06, 0x72, 0xac, 0x92, + 0x90, 0x6a, 0xec, 0xe3, 0x6b, 0x39, 0x30, 0x98, 0x3b, 0x92, 0xac, 0xc1, 0x39, 0x4b, 0xc6, 0x25, + 0xa9, 0xeb, 0x9b, 0xb6, 0x46, 0x28, 0x7d, 0x56, 0x91, 0xb5, 0xb3, 0xd0, 0x0f, 0x82, 0x79, 0xe3, + 0xb2, 0xbb, 0x79, 0x6c, 0xa8, 0xdd, 0x3c, 0x3e, 0xcc, 0x6e, 0xae, 0x0e, 0xb7, 0x9b, 0x6b, 0x87, + 0xdb, 0xcd, 0x7c, 0xe5, 0xf9, 0x3e, 0xa2, 0x01, 0xd7, 0x38, 0xa4, 0xd0, 0x4c, 0x84, 0xbd, 0xa3, + 0x95, 0x6f, 0xe6, 0xc0, 0x60, 0xee, 0x48, 0xb2, 0x05, 0xd3, 0xb2, 0xfd, 0x9a, 0x67, 0x05, 0x7b, + 0x5d, 0x2e, 0x4b, 0x12, 0x78, 0xeb, 0x29, 0xa7, 0xe1, 0x74, 0x73, 0x20, 0x24, 0xde, 0x07, 0x0b, + 0xf9, 0x71, 0x98, 0x94, 0x5f, 0x69, 0xcd, 0xec, 0x0a, 0xb4, 0x32, 0x08, 0xfe, 0x84, 0x42, 0x3b, + 0xb9, 0x90, 0xec, 0xc4, 0x34, 0x2c, 0x99, 0x87, 0xd3, 0xdd, 0x5d, 0x8b, 0xff, 0x5c, 0xd9, 0xbe, + 0x41, 0xa9, 0x4d, 0x6d, 0x11, 0x80, 0xa9, 0x35, 0x9e, 0xd4, 0xbe, 0x8b, 0xf5, 0x74, 0x37, 0x66, + 0xe1, 0xc9, 0x4b, 0x30, 0x11, 0x32, 0x33, 0x60, 0xca, 0x53, 0x37, 0x75, 0x4a, 0x26, 0x09, 0x68, + 0x47, 0x56, 0x33, 0xd1, 0x87, 0x29, 0xc8, 0x5c, 0x79, 0x71, 0xfa, 0xe4, 0xe4, 0xc5, 0x28, 0xdc, + 0xea, 0x9e, 0x14, 0xf6, 0x22, 0x3c, 0x90, 0x11, 0x33, 0x5f, 0xc8, 0x8a, 0x99, 0x37, 0x47, 0x61, + 0x37, 0x39, 0x14, 0x0e, 0xc5, 0x66, 0x5e, 0x03, 0x12, 0xa8, 0x60, 0x86, 0x34, 0xa1, 0x13, 0x92, + 0x26, 0x4a, 0xfd, 0xc0, 0x3e, 0x08, 0xcc, 0x19, 0x45, 0x9a, 0xf0, 0x44, 0x48, 0x3d, 0xe6, 0x78, + 0xd4, 0x4d, 0xa3, 0x93, 0x22, 0xe8, 0x69, 0x85, 0xee, 0x89, 0x66, 0x1e, 0x10, 0xe6, 0x8f, 0x1d, + 0x65, 0xf1, 0xbf, 0x06, 0x42, 0xce, 0xcb, 0xa5, 0x39, 0x36, 0x31, 0xf1, 0x4e, 0x56, 0x4c, 0xbc, + 0x35, 0xfa, 0x77, 0x1b, 0x4e, 0x44, 0xcc, 0x01, 0x88, 0xaf, 0x90, 0x94, 0x11, 0x11, 0x67, 0xc4, + 0xa8, 0x07, 0x13, 0x50, 0xfc, 0xd4, 0xeb, 0x75, 0x4e, 0x8a, 0x87, 0xe8, 0xd4, 0x37, 0x93, 0x9d, + 0x98, 0x86, 0x1d, 0x28, 0x62, 0x2a, 0x43, 0x8b, 0x98, 0xd7, 0x80, 0xa4, 0x1c, 0x38, 0x12, 0xdf, + 0x58, 0x3a, 0xf3, 0x68, 0xa5, 0x0f, 0x02, 0x73, 0x46, 0x0d, 0xd8, 0xca, 0xe3, 0xc7, 0xbb, 0x95, + 0xab, 0xc3, 0x6f, 0x65, 0xf2, 0x16, 0x5c, 0x10, 0xa4, 0xd4, 0xfa, 0xa4, 0x11, 0x4b, 0x61, 0xf3, + 0x1e, 0x85, 0xf8, 0x02, 0x0e, 0x02, 0xc4, 0xc1, 0x38, 0xf8, 0xf7, 0xb1, 0x02, 0x6a, 0x73, 0xe2, + 0xa6, 0x3b, 0x58, 0x10, 0x2d, 0xe4, 0xc0, 0x60, 0xee, 0x48, 0xbe, 0xc5, 0x18, 0xdf, 0x86, 0xe6, + 0x96, 0x4b, 0x6d, 0x95, 0x79, 0x15, 0x6d, 0xb1, 0x8d, 0xd5, 0xa6, 0xea, 0xc1, 0x04, 0x54, 0x9e, + 0x6c, 0x98, 0x38, 0xa2, 0x6c, 0x58, 0x16, 0xde, 0xce, 0xed, 0x94, 0x08, 0x52, 0x02, 0x26, 0xca, + 0xa5, 0x5b, 0xc8, 0x02, 0x60, 0xff, 0x18, 0x21, 0x9a, 0xad, 0xc0, 0xe9, 0xb2, 0x30, 0x8d, 0xeb, + 0x54, 0x46, 0x34, 0xe7, 0xc0, 0x60, 0xee, 0x48, 0xae, 0x14, 0xed, 0x50, 0xd3, 0x65, 0x3b, 0x69, + 0x84, 0xa7, 0xd3, 0x4a, 0xd1, 0xab, 0xfd, 0x20, 0x98, 0x37, 0x2e, 0x57, 0x96, 0x9d, 0x79, 0x34, + 0x65, 0xd9, 0xe7, 0x4b, 0x70, 0x61, 0x99, 0xb2, 0x28, 0x3f, 0xe1, 0x47, 0xb6, 0xeb, 0x0f, 0xc0, + 0x76, 0xfd, 0x8b, 0x12, 0x9c, 0x5b, 0xa6, 0x2a, 0xa1, 0x6f, 0xdd, 0xb7, 0xb5, 0x30, 0xfb, 0x1f, + 0xba, 0xfc, 0x6b, 0x70, 0x2e, 0x4e, 0x89, 0x69, 0x32, 0x3f, 0x90, 0xb2, 0x3c, 0x63, 0xa2, 0x34, + 0xfb, 0x41, 0x30, 0x6f, 0x5c, 0xee, 0xd7, 0x1c, 0x3b, 0xc1, 0xaf, 0xf9, 0x6f, 0x45, 0x18, 0x5f, + 0x0e, 0xfc, 0x5e, 0xb7, 0xb1, 0x47, 0x5a, 0x30, 0x76, 0x47, 0x38, 0xea, 0x95, 0x1b, 0x7c, 0xf8, + 0xd4, 0x4b, 0xe9, 0xef, 0x8f, 0xd5, 0x06, 0xf9, 0x8c, 0x0a, 0x3d, 0xff, 0xd0, 0x6d, 0xba, 0x47, + 0x6d, 0xe5, 0xaf, 0x8f, 0x3e, 0xf4, 0x75, 0xde, 0x88, 0xb2, 0x8f, 0x74, 0xe0, 0xb4, 0xe9, 0xba, + 0xfe, 0x1d, 0x6a, 0xaf, 0x9a, 0x8c, 0x7a, 0x34, 0xd4, 0xe1, 0x8f, 0xa3, 0xba, 0xc0, 0x44, 0x0c, + 0x71, 0x3e, 0x8d, 0x0a, 0xb3, 0xb8, 0xc9, 0x6d, 0x18, 0x0f, 0x99, 0x1f, 0x68, 0x85, 0xa4, 0x3e, + 0xb7, 0x30, 0xf4, 0xdb, 0xaf, 0x37, 0x3e, 0xda, 0x94, 0xa8, 0xa4, 0x7f, 0x50, 0x3d, 0xa0, 0x26, + 0x60, 0x7c, 0xb9, 0x00, 0xf0, 0xea, 0xc6, 0xc6, 0xba, 0x72, 0x65, 0xda, 0x50, 0x36, 0x7b, 0x51, + 0x50, 0x64, 0xf8, 0xe0, 0x43, 0x2a, 0xf7, 0x4a, 0xc5, 0x0b, 0x7a, 0x6c, 0x07, 0x05, 0x76, 0xf2, + 0x3e, 0x18, 0x57, 0x4a, 0xa4, 0x5a, 0xf6, 0x28, 0x8c, 0xa9, 0x14, 0x4d, 0xd4, 0xfd, 0xc6, 0xef, + 0x15, 0x01, 0x56, 0x6c, 0x97, 0x36, 0x75, 0xb6, 0x6c, 0x8d, 0xed, 0x04, 0x34, 0xdc, 0xf1, 0x5d, + 0x7b, 0xc8, 0xc8, 0x8d, 0xc8, 0x19, 0xda, 0xd0, 0x48, 0x30, 0xc6, 0x47, 0x6c, 0x6e, 0x84, 0xd1, + 0xee, 0x8a, 0xc7, 0x68, 0xb0, 0x6b, 0xba, 0x43, 0x3a, 0x6c, 0xcf, 0x48, 0x83, 0x2d, 0xc6, 0x83, + 0x29, 0xac, 0xc4, 0x84, 0xba, 0xe3, 0x59, 0xf2, 0x80, 0x34, 0xf6, 0x86, 0xdc, 0x48, 0xa7, 0xb9, + 0x56, 0xbe, 0x12, 0xa3, 0xc1, 0x24, 0x4e, 0xe3, 0x3b, 0x45, 0x38, 0x2f, 0xe8, 0xf1, 0x69, 0xa4, + 0x72, 0xbf, 0xc8, 0x4f, 0xf5, 0x5d, 0xe7, 0xf8, 0x7f, 0x87, 0x23, 0x2d, 0x6f, 0x03, 0xac, 0x51, + 0x66, 0xc6, 0x3a, 0x4f, 0xdc, 0x96, 0xb8, 0xc3, 0xd1, 0x83, 0x72, 0xd8, 0xa5, 0x96, 0x5a, 0xbd, + 0xe6, 0xd0, 0x5b, 0x28, 0xff, 0x05, 0x38, 0x8b, 0x8f, 0x23, 0x54, 0x82, 0xe1, 0x0b, 0x72, 0xe4, + 0x33, 0x30, 0x16, 0x32, 0x93, 0xf5, 0xf4, 0xd1, 0xdc, 0x3c, 0x6e, 0xc2, 0x02, 0x79, 0xcc, 0x47, + 0xe4, 0x33, 0x2a, 0xa2, 0xc6, 0x77, 0x0a, 0x30, 0x9d, 0x3f, 0x70, 0xd5, 0x09, 0x19, 0xf9, 0xc9, + 0xbe, 0x65, 0x3f, 0xe4, 0x17, 0xe7, 0xa3, 0xc5, 0xa2, 0x47, 0xc9, 0x9f, 0xba, 0x25, 0xb1, 0xe4, + 0x0c, 0x2a, 0x0e, 0xa3, 0x1d, 0x6d, 0x83, 0xdd, 0x3c, 0xe6, 0x57, 0x4f, 0x88, 0x3f, 0x4e, 0x05, + 0x25, 0x31, 0xe3, 0xdd, 0xe2, 0xa0, 0x57, 0xe6, 0x9f, 0x85, 0xb8, 0xe9, 0xfc, 0xc2, 0xeb, 0xa3, + 0xe5, 0x17, 0xa6, 0x27, 0xd4, 0x9f, 0x66, 0xf8, 0xd3, 0xfd, 0x69, 0x86, 0x37, 0x47, 0x4f, 0x33, + 0xcc, 0x2c, 0xc3, 0xc0, 0x6c, 0xc3, 0x9f, 0x2f, 0xc1, 0xc5, 0xfb, 0x6d, 0x1b, 0x2e, 0xcf, 0xd4, + 0xee, 0x1c, 0x55, 0x9e, 0xdd, 0x7f, 0x1f, 0x92, 0x39, 0xa8, 0x74, 0x77, 0xcc, 0x50, 0x2b, 0x2e, + 0x5a, 0xa9, 0xaf, 0xac, 0xf3, 0xc6, 0x7b, 0x9c, 0x69, 0x08, 0x85, 0x47, 0x3c, 0xa2, 0x04, 0xe5, + 0xec, 0xb8, 0x43, 0xc3, 0x30, 0xb6, 0x9b, 0x23, 0x76, 0xbc, 0x26, 0x9b, 0x51, 0xf7, 0x13, 0x06, + 0x63, 0xd2, 0xf7, 0xa5, 0x24, 0xd3, 0xf0, 0x49, 0x23, 0x39, 0x29, 0xa9, 0xf1, 0x4b, 0x29, 0x37, + 0xaa, 0xa2, 0x45, 0x66, 0xa1, 0xcc, 0xe2, 0x04, 0x41, 0x6d, 0xbe, 0x96, 0x73, 0x74, 0x38, 0x01, + 0x67, 0xfc, 0x75, 0x15, 0xce, 0xe7, 0x7f, 0x43, 0xfe, 0xae, 0xbb, 0x34, 0x08, 0x1d, 0xdf, 0x53, + 0x7a, 0x61, 0x9c, 0xce, 0x2e, 0x9b, 0x51, 0xf7, 0xff, 0x50, 0x27, 0xa4, 0xfc, 0x76, 0x81, 0x9b, + 0xd7, 0xd2, 0xe1, 0xfc, 0x30, 0x92, 0x52, 0x9e, 0x96, 0x66, 0xfa, 0x00, 0x82, 0x38, 0x78, 0x2e, + 0xe4, 0xb7, 0x0a, 0x30, 0xd5, 0xc9, 0xd8, 0xef, 0x27, 0x78, 0xa1, 0x44, 0x64, 0xcd, 0xae, 0x0d, + 0xa0, 0x87, 0x03, 0x67, 0x42, 0x7e, 0x06, 0xea, 0x5d, 0xbe, 0x2f, 0x42, 0x46, 0x3d, 0x4b, 0xdf, + 0x29, 0x19, 0x7e, 0xf7, 0xaf, 0xc7, 0xb8, 0x74, 0xaa, 0x8a, 0x94, 0xe9, 0x89, 0x0e, 0x4c, 0x52, + 0x7c, 0xc4, 0x6f, 0x90, 0x5c, 0x81, 0x6a, 0x48, 0x19, 0x73, 0xbc, 0x56, 0x28, 0xbc, 0x42, 0x35, + 0x79, 0x56, 0x9a, 0xaa, 0x0d, 0xa3, 0x5e, 0xf2, 0x7f, 0xa1, 0x26, 0xfc, 0xd7, 0xf3, 0x41, 0x2b, + 0x9c, 0xaa, 0x89, 0x74, 0x92, 0x49, 0x99, 0x20, 0xa3, 0x1a, 0x31, 0xee, 0x27, 0xcf, 0xc3, 0xc4, + 0x96, 0x38, 0xbe, 0xea, 0x26, 0x99, 0xf4, 0xdd, 0x08, 0x0d, 0xab, 0x91, 0x68, 0xc7, 0x14, 0x14, + 0x99, 0x03, 0xa0, 0x91, 0x93, 0x3f, 0xeb, 0xa7, 0x89, 0xdd, 0xff, 0x98, 0x80, 0x22, 0x4f, 0x43, + 0x89, 0xb9, 0xa1, 0xf0, 0xcd, 0x54, 0x63, 0xd3, 0x6a, 0x63, 0xb5, 0x89, 0xbc, 0xdd, 0xf8, 0x7e, + 0x01, 0x4e, 0x67, 0x92, 0xcf, 0xf9, 0x90, 0x5e, 0xe0, 0x2a, 0x36, 0x12, 0x0d, 0xd9, 0xc4, 0x55, + 0xe4, 0xed, 0xe4, 0x2d, 0xa5, 0x4a, 0x17, 0x47, 0xbc, 0x34, 0x7b, 0xc3, 0x64, 0x21, 0xd7, 0x9d, + 0xfb, 0xb4, 0x68, 0x11, 0x33, 0x88, 0xe7, 0xa3, 0x78, 0x77, 0x22, 0x66, 0x10, 0xf7, 0x61, 0x0a, + 0x32, 0xe3, 0xc8, 0x2a, 0x1f, 0xc6, 0x91, 0x65, 0xfc, 0x79, 0x09, 0xea, 0xaf, 0xf9, 0x5b, 0x3f, + 0x24, 0xc9, 0x84, 0xf9, 0x1c, 0xb9, 0xf8, 0x03, 0xe4, 0xc8, 0x9b, 0xf0, 0x24, 0x63, 0x6e, 0x93, + 0x5a, 0xbe, 0x67, 0x87, 0xf3, 0xdb, 0x8c, 0x06, 0x4b, 0x8e, 0xe7, 0x84, 0x3b, 0xd4, 0x56, 0x11, + 0x81, 0xa7, 0x0e, 0xf6, 0x67, 0x9e, 0xdc, 0xd8, 0x58, 0xcd, 0x03, 0xc1, 0x41, 0x63, 0xc5, 0x09, + 0x31, 0xad, 0xb6, 0xbf, 0xbd, 0x2d, 0x92, 0xc6, 0x55, 0xac, 0x5a, 0x9e, 0x90, 0x44, 0x3b, 0xa6, + 0xa0, 0x8c, 0xaf, 0x14, 0xa1, 0x76, 0xdd, 0xdc, 0x6e, 0x9b, 0x4d, 0xc7, 0x6b, 0x93, 0x67, 0x60, + 0x7c, 0x2b, 0xf0, 0xdb, 0x34, 0x90, 0xc1, 0x17, 0x95, 0x34, 0xde, 0x90, 0x4d, 0xa8, 0xfb, 0xb8, + 0xa9, 0xcc, 0xfc, 0xae, 0x63, 0x65, 0x7d, 0x22, 0x1b, 0xbc, 0x11, 0x65, 0x1f, 0x79, 0x5d, 0x9e, + 0xa3, 0xd2, 0x88, 0x37, 0x0e, 0x37, 0x56, 0x9b, 0x32, 0x93, 0x46, 0x9f, 0x40, 0xf2, 0x6c, 0x4a, + 0xf3, 0xa8, 0x0d, 0xd4, 0x15, 0xde, 0x84, 0x72, 0x68, 0x86, 0xae, 0x12, 0x1d, 0x23, 0xdc, 0xa7, + 0x9c, 0x6f, 0xae, 0xaa, 0xfb, 0x94, 0xf3, 0xcd, 0x55, 0x14, 0x48, 0x8d, 0xef, 0x15, 0xa1, 0x2e, + 0xd7, 0x4d, 0x9a, 0xa3, 0xc7, 0xb9, 0x72, 0x2f, 0x8b, 0x10, 0x64, 0xd8, 0xeb, 0xd0, 0x40, 0x78, + 0x41, 0xd4, 0x79, 0x4e, 0xba, 0x78, 0xe3, 0xce, 0x28, 0x0c, 0x19, 0x37, 0xe9, 0xa5, 0x2f, 0x9f, + 0xe0, 0xd2, 0x57, 0x0e, 0xb5, 0xf4, 0x63, 0x27, 0xb1, 0xf4, 0xef, 0x14, 0xa1, 0xb6, 0xea, 0x6c, + 0x53, 0x6b, 0xcf, 0x72, 0xc5, 0xf5, 0x18, 0x9b, 0xba, 0x94, 0xd1, 0xe5, 0xc0, 0xb4, 0xe8, 0x3a, + 0x0d, 0x1c, 0x71, 0x33, 0x9e, 0x9f, 0x0f, 0xc1, 0x81, 0xd4, 0xf5, 0x98, 0xc5, 0x01, 0x30, 0x38, + 0x70, 0x34, 0x59, 0x81, 0x09, 0x9b, 0x86, 0x4e, 0x40, 0xed, 0xf5, 0x84, 0x1e, 0xfd, 0x8c, 0xe6, + 0xaa, 0x8b, 0x89, 0xbe, 0x7b, 0xfb, 0x33, 0x93, 0xeb, 0x4e, 0x97, 0xba, 0x8e, 0x47, 0xa5, 0x42, + 0x9d, 0x1a, 0xca, 0x8f, 0x7c, 0xd7, 0xec, 0x85, 0x79, 0x73, 0x4c, 0x1c, 0xf9, 0xf5, 0x7c, 0x10, + 0x1c, 0x34, 0xd6, 0xa8, 0x40, 0x69, 0xd5, 0x6f, 0x19, 0xef, 0x96, 0x20, 0x2a, 0xa1, 0x40, 0x7e, + 0xb6, 0x00, 0x75, 0xd3, 0xf3, 0x7c, 0xa6, 0xca, 0x13, 0xc8, 0x20, 0x2a, 0x8e, 0x5c, 0xa9, 0x61, + 0x76, 0x3e, 0x46, 0x2a, 0xe3, 0x6f, 0x51, 0x4c, 0x30, 0xd1, 0x83, 0x49, 0xda, 0xa4, 0x97, 0x09, + 0x09, 0xae, 0x8d, 0x3e, 0x8b, 0x43, 0x04, 0x00, 0xa7, 0x3f, 0x02, 0x67, 0xb2, 0x93, 0x3d, 0x8a, + 0x47, 0x7f, 0x94, 0x60, 0xc0, 0x17, 0x6a, 0x50, 0xbf, 0x61, 0x32, 0x67, 0x97, 0x0a, 0x9b, 0xf4, + 0x64, 0x8c, 0x8c, 0x5f, 0x2f, 0xc0, 0xf9, 0x74, 0x70, 0xee, 0x04, 0x2d, 0x0d, 0x71, 0x65, 0x0a, + 0x73, 0xa9, 0xe1, 0x80, 0x59, 0x08, 0x9b, 0xa3, 0x2f, 0xd6, 0x77, 0xd2, 0x36, 0x47, 0x73, 0x10, + 0x41, 0x1c, 0x3c, 0x97, 0x1f, 0x16, 0x9b, 0xe3, 0xd1, 0xbe, 0xd2, 0x9e, 0xb1, 0x88, 0xc6, 0x1f, + 0x19, 0x8b, 0xa8, 0xfa, 0x48, 0x68, 0xa0, 0xdd, 0x84, 0x45, 0x54, 0x1b, 0xd1, 0x9b, 0xae, 0xf2, + 0x59, 0x24, 0xb6, 0x41, 0x96, 0x95, 0x48, 0xe9, 0xd7, 0xc6, 0x02, 0xb1, 0xa0, 0xb2, 0x65, 0x86, + 0x8e, 0xa5, 0xf4, 0xf1, 0xc6, 0xf0, 0x7e, 0x1a, 0x7d, 0xd7, 0x59, 0x3a, 0xdd, 0xc4, 0x23, 0x4a, + 0xdc, 0xf1, 0x9d, 0xea, 0xe2, 0x48, 0x77, 0xaa, 0xc9, 0x02, 0x94, 0x3d, 0xce, 0x6c, 0x4b, 0x47, + 0xbe, 0x45, 0x7d, 0xe3, 0x3a, 0xdd, 0x43, 0x31, 0x98, 0xeb, 0xb4, 0xc0, 0x5f, 0x5f, 0xa9, 0x66, + 0x0f, 0xb0, 0xce, 0xde, 0x07, 0xe3, 0x61, 0x4f, 0xb8, 0xaf, 0x95, 0x84, 0x8f, 0x43, 0x10, 0xb2, + 0x19, 0x75, 0x3f, 0xd7, 0xde, 0x3e, 0xd5, 0xa3, 0x3d, 0xed, 0x1c, 0x8b, 0xb4, 0xb7, 0x8f, 0xf2, + 0x46, 0x94, 0x7d, 0x27, 0xa7, 0x7c, 0x69, 0x33, 0xb2, 0x72, 0x42, 0x66, 0xa4, 0x51, 0x83, 0xf1, + 0x1b, 0xbe, 0x88, 0xfa, 0x19, 0xff, 0x5c, 0x04, 0x88, 0x23, 0x46, 0xe4, 0xcb, 0x05, 0x78, 0x22, + 0x3a, 0x70, 0x4c, 0x5e, 0xa6, 0x5c, 0x70, 0x4d, 0xa7, 0x33, 0xb2, 0x91, 0x97, 0x77, 0xd8, 0x05, + 0x07, 0x5a, 0xcf, 0x23, 0x87, 0xf9, 0xb3, 0x20, 0x08, 0x55, 0xda, 0xe9, 0xb2, 0xbd, 0x45, 0x27, + 0x50, 0x3b, 0x30, 0x37, 0x30, 0x79, 0x4d, 0xc1, 0xc8, 0xa1, 0xea, 0xe2, 0x9c, 0x38, 0x44, 0xba, + 0x07, 0x23, 0x3c, 0x64, 0x07, 0xaa, 0x9e, 0xff, 0x56, 0xc8, 0x97, 0x43, 0x6d, 0xc7, 0x57, 0x86, + 0x5f, 0x72, 0xb9, 0xac, 0xd2, 0x28, 0x50, 0x0f, 0x38, 0xee, 0xa9, 0xc5, 0xfe, 0x52, 0x11, 0xce, + 0xe5, 0xac, 0x03, 0x79, 0x05, 0xce, 0xa8, 0xe0, 0x5c, 0x5c, 0x33, 0xa8, 0x10, 0xd7, 0x0c, 0x6a, + 0x66, 0xfa, 0xb0, 0x0f, 0x9a, 0xbc, 0x05, 0x60, 0x5a, 0x16, 0x0d, 0xc3, 0x35, 0xdf, 0xd6, 0x0a, + 0xec, 0xcb, 0xdc, 0xb4, 0x9f, 0x8f, 0x5a, 0xef, 0xed, 0xcf, 0x7c, 0x20, 0x2f, 0x26, 0x9d, 0x59, + 0xe7, 0x78, 0x00, 0x26, 0x50, 0x92, 0x4f, 0x02, 0xc8, 0xcb, 0xb4, 0xd1, 0xf5, 0x83, 0x07, 0xc4, + 0x33, 0x66, 0xf5, 0x45, 0xcf, 0xd9, 0x8f, 0xf6, 0x4c, 0x8f, 0x39, 0x6c, 0x4f, 0xde, 0xf6, 0xba, + 0x15, 0x61, 0xc1, 0x04, 0x46, 0xe3, 0x4f, 0x8b, 0x50, 0xd5, 0x8a, 0xf5, 0x43, 0x88, 0x58, 0xb5, + 0x52, 0x11, 0xab, 0xe1, 0x2f, 0x78, 0xeb, 0x29, 0x0f, 0x8c, 0x51, 0xf9, 0x99, 0x18, 0xd5, 0xf2, + 0xe8, 0xa4, 0xee, 0x1f, 0x95, 0xfa, 0x62, 0x09, 0x4e, 0x69, 0x50, 0x75, 0xe9, 0xfe, 0x45, 0x98, + 0x0c, 0xa8, 0x69, 0x37, 0x4c, 0x66, 0xed, 0x88, 0xcf, 0x57, 0x10, 0xd7, 0x3d, 0xce, 0x1e, 0xec, + 0xcf, 0x4c, 0x62, 0xb2, 0x03, 0xd3, 0x70, 0xe4, 0xc3, 0x70, 0x5a, 0x7a, 0xd9, 0xd6, 0xcc, 0xbb, + 0xf2, 0xe2, 0x9b, 0x58, 0xb0, 0xb2, 0x0c, 0x6a, 0x37, 0xd2, 0x5d, 0x98, 0x85, 0xe5, 0xdb, 0x5a, + 0x36, 0x6d, 0x86, 0x66, 0x4b, 0x4e, 0x46, 0xac, 0xc2, 0xa4, 0xdc, 0xd6, 0x8d, 0x4c, 0x1f, 0xf6, + 0x41, 0x13, 0x13, 0xea, 0x7c, 0x46, 0x1b, 0x4e, 0x87, 0xfa, 0x3d, 0x5d, 0x26, 0x6d, 0xa8, 0xc0, + 0x29, 0xc6, 0x68, 0x30, 0x89, 0x93, 0xb4, 0xf8, 0xe2, 0xb0, 0x60, 0x2f, 0x0a, 0x01, 0x57, 0x86, + 0x22, 0xa2, 0x16, 0x33, 0x81, 0x08, 0xd3, 0x78, 0x8d, 0xbf, 0x29, 0xc0, 0x44, 0xfc, 0x61, 0x4e, + 0x3c, 0x40, 0xb8, 0x9d, 0x0e, 0x10, 0xce, 0x8f, 0xbc, 0xef, 0x06, 0x84, 0x04, 0x7f, 0x61, 0x3c, + 0x7e, 0x2d, 0x11, 0x04, 0xdc, 0x82, 0x69, 0x27, 0x37, 0x2e, 0x96, 0x60, 0x6b, 0x51, 0xee, 0xf6, + 0xca, 0x40, 0x48, 0xbc, 0x0f, 0x16, 0xd2, 0x83, 0xea, 0x2e, 0x0d, 0x98, 0x63, 0x51, 0xfd, 0x7e, + 0xcb, 0x23, 0xeb, 0x7e, 0x32, 0xa5, 0x28, 0x5e, 0xd3, 0x5b, 0x8a, 0x00, 0x46, 0xa4, 0xc8, 0x16, + 0x54, 0xa8, 0xdd, 0xa2, 0xfa, 0xce, 0xe3, 0x88, 0x15, 0x45, 0xa2, 0xf5, 0xe4, 0x4f, 0x21, 0x4a, + 0xd4, 0x24, 0x84, 0x9a, 0xab, 0x7d, 0x1e, 0x6a, 0xc3, 0x0f, 0xaf, 0xc9, 0x45, 0xde, 0x93, 0xf8, + 0xee, 0x44, 0xd4, 0x84, 0x31, 0x1d, 0xd2, 0x8e, 0xca, 0x38, 0x55, 0x8e, 0x89, 0x4b, 0xdd, 0xa7, + 0x90, 0x53, 0x08, 0xb5, 0x3b, 0x26, 0xa3, 0x41, 0xc7, 0x0c, 0xda, 0xca, 0xac, 0x19, 0xfe, 0x0d, + 0x5f, 0xd7, 0x98, 0xe2, 0x37, 0x8c, 0x9a, 0x30, 0xa6, 0x43, 0x7c, 0xa8, 0x31, 0xa5, 0xa7, 0xeb, + 0xe2, 0x0f, 0xc3, 0x13, 0xd5, 0x1a, 0x7f, 0xa8, 0x32, 0x4b, 0xf4, 0x23, 0xc6, 0x34, 0xc8, 0x6e, + 0xaa, 0xda, 0x92, 0xac, 0xb1, 0xd5, 0x18, 0xa1, 0xd4, 0x9b, 0x42, 0x15, 0xcb, 0xb5, 0xfc, 0xaa, + 0x4d, 0xc6, 0xbd, 0x04, 0xff, 0x7f, 0xd8, 0x91, 0xe8, 0xe7, 0xd3, 0x91, 0xe8, 0x4b, 0xd9, 0x48, + 0x74, 0xc6, 0x75, 0x76, 0xf4, 0x58, 0xb4, 0x09, 0x75, 0xd7, 0x0c, 0xd9, 0x66, 0xd7, 0x36, 0x99, + 0x0a, 0x63, 0xd4, 0xe7, 0xfe, 0xcf, 0xe1, 0xb8, 0x26, 0x67, 0xf8, 0xb1, 0x2b, 0x6b, 0x35, 0x46, + 0x83, 0x49, 0x9c, 0xe4, 0x39, 0xa8, 0xef, 0x0a, 0x4e, 0x20, 0x2f, 0x50, 0x56, 0x84, 0xbc, 0x12, + 0x22, 0xe4, 0x56, 0xdc, 0x8c, 0x49, 0x18, 0x3e, 0x44, 0xaa, 0x3a, 0x71, 0x05, 0x1a, 0x35, 0xa4, + 0x19, 0x37, 0x63, 0x12, 0x46, 0x84, 0xc4, 0x1c, 0xaf, 0x2d, 0x07, 0x8c, 0x8b, 0x01, 0x32, 0x24, + 0xa6, 0x1b, 0x31, 0xee, 0x27, 0x57, 0xa0, 0xda, 0xb3, 0xb7, 0x25, 0x6c, 0x55, 0xc0, 0x0a, 0x55, + 0x76, 0x73, 0x71, 0x49, 0x5d, 0xe8, 0xd4, 0xbd, 0xc6, 0xb7, 0x0b, 0x40, 0xfa, 0x73, 0x27, 0xc8, + 0x0e, 0x8c, 0x79, 0xc2, 0x57, 0x35, 0x72, 0xe1, 0xa7, 0x84, 0xcb, 0x4b, 0x9e, 0x6d, 0xd5, 0xa0, + 0xf0, 0x13, 0x0f, 0xaa, 0xf4, 0x2e, 0xa3, 0x81, 0x17, 0xe5, 0x52, 0x1d, 0x4f, 0x91, 0x29, 0xa9, + 0xbb, 0x2b, 0xcc, 0x18, 0xd1, 0x30, 0xbe, 0x5b, 0x84, 0x7a, 0x02, 0xee, 0x41, 0x26, 0xa0, 0xb8, + 0xf2, 0x20, 0x5d, 0x44, 0x9b, 0x81, 0xab, 0xb6, 0x69, 0xe2, 0xca, 0x83, 0xea, 0xc2, 0x55, 0x4c, + 0xc2, 0x91, 0x39, 0x80, 0x8e, 0x19, 0x32, 0x1a, 0x08, 0x11, 0x96, 0xb9, 0x68, 0xb0, 0x16, 0xf5, + 0x60, 0x02, 0x8a, 0x5c, 0x56, 0x65, 0xc2, 0xca, 0xe9, 0x0b, 0xf6, 0x03, 0x6a, 0x80, 0x55, 0x8e, + 0xa1, 0x06, 0x18, 0x69, 0xc1, 0x19, 0x3d, 0x6b, 0xdd, 0x7b, 0xb4, 0xeb, 0xd7, 0xd2, 0xda, 0xc8, + 0xa0, 0xc0, 0x3e, 0xa4, 0xc6, 0x57, 0x0a, 0x30, 0x99, 0x72, 0x50, 0xc8, 0xab, 0xf1, 0x3a, 0xf3, + 0x27, 0x75, 0x35, 0x3e, 0x91, 0xb0, 0xf3, 0x2c, 0x8c, 0xc9, 0x05, 0x52, 0x0b, 0x1f, 0xb1, 0x11, + 0xb9, 0x84, 0xa8, 0x7a, 0x39, 0x43, 0x50, 0x2e, 0xd0, 0x2c, 0x43, 0x50, 0x3e, 0x52, 0xd4, 0xfd, + 0xe4, 0xfd, 0x50, 0xd5, 0xb3, 0x53, 0x2b, 0x1d, 0x57, 0xcc, 0x53, 0xed, 0x18, 0x41, 0x18, 0xff, + 0x51, 0x02, 0x11, 0x5f, 0x20, 0x2f, 0x42, 0xad, 0x43, 0xad, 0x1d, 0xd3, 0x73, 0x42, 0x5d, 0x1a, + 0x83, 0xdb, 0xa2, 0xb5, 0x35, 0xdd, 0x78, 0x8f, 0x23, 0x98, 0x6f, 0xae, 0x8a, 0x0c, 0x93, 0x18, + 0x96, 0x58, 0x30, 0xd6, 0x0a, 0x43, 0xb3, 0xeb, 0x8c, 0x5c, 0x1f, 0x54, 0x96, 0x22, 0x90, 0x87, + 0x48, 0xfe, 0x46, 0x85, 0x9a, 0x58, 0x50, 0xe9, 0xba, 0xa6, 0xe3, 0x29, 0x93, 0xa1, 0x31, 0x52, + 0x54, 0x65, 0x9d, 0x63, 0x92, 0x0e, 0x18, 0xf1, 0x13, 0x25, 0x6e, 0xd2, 0x83, 0x7a, 0x68, 0x05, + 0x66, 0x27, 0xdc, 0x31, 0xe7, 0x5e, 0xf8, 0xe0, 0xc8, 0x9a, 0x46, 0x4c, 0x4a, 0x32, 0xbe, 0x05, + 0x9c, 0x5f, 0x6b, 0xbe, 0x3a, 0x3f, 0xf7, 0xc2, 0x07, 0x31, 0x49, 0x27, 0x49, 0xf6, 0x85, 0xe7, + 0xe6, 0xd4, 0xbe, 0x3f, 0x76, 0xb2, 0x2f, 0x3c, 0x37, 0x87, 0x49, 0x3a, 0xc6, 0xbf, 0x17, 0xa0, + 0x16, 0xc1, 0x92, 0x4d, 0x00, 0x7e, 0x02, 0x55, 0xf1, 0x80, 0x23, 0x15, 0xf2, 0x13, 0x36, 0xec, + 0x66, 0x34, 0x18, 0x13, 0x88, 0x72, 0xaa, 0x2b, 0x14, 0x8f, 0xbb, 0xba, 0xc2, 0x55, 0xa8, 0xed, + 0x98, 0x9e, 0x1d, 0xee, 0x98, 0x6d, 0xc9, 0x88, 0x12, 0xf5, 0x46, 0x5e, 0xd5, 0x1d, 0x18, 0xc3, + 0x18, 0xff, 0x52, 0x01, 0x59, 0xe1, 0x92, 0x1f, 0x15, 0xdb, 0x09, 0x65, 0xfc, 0xbf, 0x20, 0x46, + 0x46, 0x47, 0x65, 0x51, 0xb5, 0x63, 0x04, 0x41, 0x2e, 0x40, 0xa9, 0xe3, 0x78, 0x2a, 0x3e, 0x21, + 0xdc, 0x53, 0x6b, 0x8e, 0x87, 0xbc, 0x4d, 0x74, 0x99, 0x77, 0x55, 0x3c, 0x4b, 0x76, 0x99, 0x77, + 0x91, 0xb7, 0x71, 0x83, 0xd1, 0xf5, 0xfd, 0xf6, 0x96, 0x69, 0xb5, 0x75, 0xd8, 0xab, 0x2c, 0x04, + 0x96, 0x30, 0x18, 0x57, 0xd3, 0x5d, 0x98, 0x85, 0x25, 0xcb, 0x70, 0xda, 0xf2, 0x7d, 0xd7, 0xf6, + 0xef, 0x78, 0x7a, 0xb8, 0x94, 0xbf, 0xc2, 0xef, 0xbf, 0x48, 0xbb, 0x01, 0xb5, 0xb8, 0x90, 0x5e, + 0x48, 0x03, 0x61, 0x76, 0x14, 0xd9, 0x84, 0x27, 0xdf, 0xa6, 0x81, 0xaf, 0xd8, 0x45, 0xd3, 0xa5, + 0xb4, 0xab, 0x11, 0x4a, 0xe9, 0x2c, 0xc2, 0x70, 0x1f, 0xcf, 0x07, 0xc1, 0x41, 0x63, 0x45, 0x40, + 0xdf, 0x0c, 0x5a, 0x94, 0xad, 0x07, 0xbe, 0x45, 0xc3, 0xd0, 0xf1, 0x5a, 0x1a, 0xed, 0x78, 0x8c, + 0x76, 0x23, 0x1f, 0x04, 0x07, 0x8d, 0x25, 0x6f, 0xc0, 0x94, 0xec, 0x92, 0x52, 0x7b, 0x7e, 0xd7, + 0x74, 0x5c, 0x73, 0xcb, 0x71, 0x75, 0x59, 0xeb, 0x49, 0x19, 0x4e, 0xd8, 0x18, 0x00, 0x83, 0x03, + 0x47, 0x8b, 0x62, 0xd4, 0x2a, 0x98, 0xb4, 0x4e, 0x03, 0xb1, 0x0f, 0x84, 0x67, 0x5a, 0x59, 0xe0, + 0x98, 0xe9, 0xc3, 0x3e, 0x68, 0x82, 0x70, 0x5e, 0x54, 0x46, 0xdd, 0xec, 0x66, 0x16, 0x5d, 0x24, + 0xe6, 0x4c, 0xca, 0xa8, 0x51, 0x33, 0x17, 0x02, 0x07, 0x8c, 0xe4, 0xef, 0x2b, 0x7a, 0x16, 0xfd, + 0x3b, 0x5e, 0x16, 0x6b, 0x3d, 0x7e, 0xdf, 0xe6, 0x00, 0x18, 0x1c, 0x38, 0xda, 0xd8, 0x86, 0xc9, + 0x26, 0x5f, 0x5b, 0xdf, 0x53, 0x35, 0x7f, 0x36, 0x61, 0x9c, 0x29, 0xe7, 0xc1, 0x70, 0xa9, 0xe3, + 0xc2, 0x91, 0xa7, 0x1d, 0x07, 0x1a, 0x97, 0xf1, 0x8d, 0x22, 0xd4, 0x22, 0xfd, 0xfb, 0x10, 0xb5, + 0x74, 0x7c, 0xa8, 0x45, 0xe9, 0x21, 0x8a, 0x29, 0x34, 0x46, 0x8f, 0xe4, 0x48, 0x95, 0x31, 0x7a, + 0xc4, 0x98, 0x46, 0xb2, 0xbc, 0x6f, 0x69, 0x84, 0xf2, 0xbe, 0x5d, 0x18, 0x67, 0x81, 0xd3, 0x6a, + 0x29, 0x3d, 0xa6, 0x3e, 0xb7, 0x32, 0xba, 0x05, 0xb3, 0x21, 0x11, 0xaa, 0x95, 0x95, 0x0f, 0xa8, + 0xc9, 0x18, 0xb7, 0xe1, 0x4c, 0x16, 0x52, 0x08, 0x79, 0x6b, 0x87, 0xda, 0x3d, 0x57, 0xaf, 0x71, + 0x2c, 0xe4, 0x55, 0x3b, 0x46, 0x10, 0x5c, 0x5b, 0xe6, 0x9f, 0xe9, 0x6d, 0xdf, 0xd3, 0x76, 0x88, + 0xd0, 0x97, 0x36, 0x54, 0x1b, 0x46, 0xbd, 0xc6, 0x3f, 0x95, 0xe0, 0x42, 0x6c, 0x45, 0xad, 0x99, + 0x9e, 0xd9, 0x3a, 0x44, 0xfd, 0xe6, 0x1f, 0x65, 0x3b, 0x1d, 0xb5, 0x20, 0x5a, 0xe9, 0x11, 0x28, + 0x88, 0xf6, 0xab, 0x5c, 0xf5, 0x53, 0xf5, 0xd1, 0x5d, 0xbf, 0xa5, 0xbe, 0xe2, 0xf0, 0x51, 0x9b, + 0x55, 0xbf, 0x25, 0x65, 0xdf, 0xaa, 0xdf, 0x42, 0x8e, 0x91, 0x6b, 0x6d, 0x6d, 0x73, 0xbb, 0x6d, + 0x8e, 0x7c, 0xbe, 0xa3, 0x2c, 0x2d, 0xa9, 0xb5, 0x89, 0x47, 0x94, 0xb8, 0x39, 0x23, 0xd9, 0xd2, + 0x65, 0x7e, 0x47, 0x56, 0x0f, 0xa3, 0x82, 0xc1, 0x92, 0x91, 0x44, 0x8f, 0x18, 0xd3, 0xe0, 0x0a, + 0x6f, 0xcf, 0x16, 0xd5, 0xea, 0xcb, 0x23, 0x2a, 0xbc, 0x9b, 0x8b, 0xe2, 0x9d, 0x84, 0xc2, 0x2b, + 0x7f, 0xa3, 0x42, 0x6d, 0xfc, 0x63, 0x01, 0x26, 0x9b, 0xae, 0x63, 0x3b, 0x5e, 0xeb, 0x04, 0x6b, + 0xb5, 0xdd, 0x84, 0x4a, 0xe8, 0x3a, 0x36, 0x1d, 0xf2, 0x92, 0x8f, 0xf8, 0x18, 0x7c, 0x96, 0x14, + 0x25, 0x9e, 0x74, 0xf1, 0xb7, 0xd2, 0x21, 0x8a, 0xbf, 0x7d, 0xb1, 0x02, 0xea, 0xbf, 0x00, 0x48, + 0x0f, 0x6a, 0x2d, 0x5d, 0x53, 0x4a, 0xbd, 0xe3, 0xab, 0x23, 0xdc, 0xa3, 0x4f, 0x55, 0xa7, 0x92, + 0x9f, 0x33, 0x6a, 0xc4, 0x98, 0x12, 0xa1, 0xe9, 0x4d, 0xba, 0x38, 0xe2, 0x26, 0x95, 0xe4, 0xfa, + 0xb7, 0xa9, 0x09, 0xe5, 0x1d, 0xc6, 0xba, 0x6a, 0x87, 0x0e, 0x7f, 0x97, 0x2d, 0xbe, 0xa6, 0x26, + 0x63, 0x98, 0xfc, 0x19, 0x05, 0x6a, 0x4e, 0xc2, 0x33, 0xa3, 0x32, 0xc6, 0x0b, 0x23, 0x05, 0x49, + 0x93, 0x24, 0xf8, 0x33, 0x0a, 0xd4, 0xe4, 0xd3, 0x50, 0x67, 0x81, 0xe9, 0x85, 0xdb, 0x7e, 0xd0, + 0xa1, 0x81, 0xb2, 0x55, 0x96, 0x46, 0x38, 0x00, 0x1b, 0x31, 0x36, 0x19, 0x30, 0x48, 0x35, 0x61, + 0x92, 0x1a, 0x69, 0x43, 0xb5, 0x67, 0xcb, 0x89, 0x29, 0x23, 0x7e, 0x7e, 0x94, 0xa3, 0x97, 0x08, + 0x81, 0xea, 0x27, 0x8c, 0x08, 0x18, 0x1d, 0x50, 0xae, 0x3c, 0x62, 0xa5, 0x2a, 0x3e, 0xca, 0x9c, + 0xb2, 0xab, 0x87, 0x3b, 0x29, 0x51, 0xe9, 0xc1, 0x44, 0x79, 0x9a, 0xdc, 0xd2, 0x8e, 0xc6, 0xdf, + 0x16, 0xa1, 0xb4, 0xb1, 0xda, 0x94, 0xd5, 0x0f, 0x44, 0x39, 0x55, 0xda, 0x6c, 0x3b, 0xdd, 0x5b, + 0x34, 0x70, 0xb6, 0xf7, 0x94, 0x71, 0x92, 0xa8, 0x7e, 0x90, 0x85, 0xc0, 0x9c, 0x51, 0xe4, 0x4d, + 0x98, 0xb0, 0xcc, 0x05, 0x1a, 0xb0, 0x61, 0x4c, 0x2f, 0x91, 0x3c, 0xbb, 0x30, 0x1f, 0x0f, 0xc7, + 0x14, 0x32, 0x6e, 0x30, 0x5a, 0x31, 0xea, 0xd2, 0x91, 0x0d, 0xc6, 0x04, 0xe2, 0x04, 0x22, 0x82, + 0x50, 0x6b, 0x73, 0x50, 0x81, 0xb5, 0x7c, 0x14, 0xac, 0xe2, 0x84, 0x5f, 0xd7, 0x63, 0x31, 0x46, + 0x63, 0x78, 0x30, 0x99, 0x2a, 0x03, 0x49, 0x3e, 0x04, 0x55, 0xbf, 0x9b, 0x60, 0x34, 0x35, 0x61, + 0x4d, 0x55, 0x6f, 0xaa, 0xb6, 0x7b, 0xfb, 0x33, 0x93, 0xab, 0x7e, 0xcb, 0xb1, 0x74, 0x03, 0x46, + 0xe0, 0xc4, 0x80, 0x31, 0x91, 0xf1, 0xa6, 0x8b, 0x40, 0x0a, 0xae, 0x2a, 0x0a, 0xc4, 0x85, 0xa8, + 0x7a, 0x8c, 0xcf, 0x96, 0x21, 0x76, 0x80, 0x93, 0x10, 0xc6, 0x6c, 0x51, 0xd8, 0x4d, 0xf1, 0xb4, + 0xe1, 0x03, 0x09, 0xe9, 0x42, 0xb6, 0xd2, 0x38, 0x4e, 0xb7, 0xa1, 0x22, 0x45, 0x5a, 0x50, 0xba, + 0xed, 0x6f, 0x8d, 0xcc, 0xd2, 0x12, 0xa9, 0xee, 0xd2, 0x9b, 0x90, 0x68, 0x40, 0x4e, 0x81, 0xfc, + 0x46, 0x01, 0xce, 0x86, 0x59, 0x85, 0x51, 0x6d, 0x07, 0x1c, 0x5d, 0x33, 0xce, 0xaa, 0xa0, 0x2a, + 0xdd, 0x6d, 0x50, 0x37, 0xf6, 0xcf, 0x85, 0xaf, 0xbf, 0xf4, 0x4c, 0xab, 0xed, 0xb4, 0x3c, 0x62, + 0xe9, 0xf2, 0xf4, 0xfa, 0xa7, 0xdb, 0x50, 0x91, 0x32, 0x3e, 0x5f, 0x84, 0x7a, 0x82, 0x8f, 0x8d, + 0x5c, 0x5b, 0xf4, 0x6e, 0xa6, 0xb6, 0xe8, 0xfa, 0xf0, 0x81, 0x9a, 0x78, 0x56, 0x27, 0x5d, 0x5e, + 0xf4, 0xcf, 0x8a, 0x50, 0xda, 0x5c, 0x5c, 0x4a, 0x9b, 0x7a, 0x85, 0x87, 0x60, 0xea, 0xed, 0xc0, + 0xf8, 0x56, 0xcf, 0x71, 0x99, 0xe3, 0x8d, 0x7c, 0xef, 0x44, 0x97, 0x62, 0x55, 0x39, 0xed, 0x12, + 0x2b, 0x6a, 0xf4, 0xa4, 0x05, 0xe3, 0x2d, 0x79, 0x59, 0x7f, 0xe4, 0x3c, 0x19, 0x75, 0xe9, 0x5f, + 0x12, 0x52, 0x0f, 0xa8, 0xb1, 0x1b, 0x9f, 0x01, 0xa5, 0x21, 0x92, 0xf0, 0x64, 0x56, 0x33, 0x52, + 0xd3, 0xf2, 0x56, 0xd4, 0xf8, 0x34, 0x44, 0x32, 0xf2, 0xa1, 0x7f, 0x4e, 0xe3, 0x5f, 0x0b, 0x90, + 0x56, 0x0b, 0x1e, 0xfe, 0x8e, 0x6a, 0x67, 0x77, 0xd4, 0xe2, 0x71, 0x1c, 0xc0, 0xfc, 0x4d, 0x65, + 0xfc, 0x71, 0x11, 0xc6, 0xd4, 0xdf, 0x73, 0x9d, 0x7c, 0xda, 0x0f, 0x4d, 0xa5, 0xfd, 0x2c, 0x8c, + 0xc8, 0x1c, 0x07, 0x26, 0xfd, 0x74, 0x32, 0x49, 0x3f, 0xa3, 0xfe, 0x81, 0xc4, 0x03, 0x52, 0x7e, + 0xfe, 0xaa, 0x00, 0x8a, 0x35, 0xaf, 0x78, 0x21, 0x33, 0x3d, 0x4b, 0x98, 0x6d, 0x4a, 0x0e, 0x8c, + 0x1a, 0xf2, 0x55, 0x69, 0x11, 0x52, 0xf4, 0x8b, 0xdf, 0x9a, 0xef, 0x93, 0xf7, 0x43, 0x75, 0xc7, + 0x0f, 0x99, 0xe0, 0xf5, 0xc5, 0xb4, 0x5f, 0xe6, 0x55, 0xd5, 0x8e, 0x11, 0x44, 0x36, 0xaa, 0x53, + 0x19, 0x1c, 0xd5, 0x31, 0x7e, 0xa5, 0x04, 0x13, 0xa9, 0xbf, 0x0d, 0x19, 0x3a, 0x83, 0x29, 0x93, + 0x40, 0x54, 0x3c, 0x81, 0x04, 0xa2, 0x9c, 0x24, 0xa9, 0xd2, 0x88, 0x49, 0x52, 0xe5, 0x23, 0x25, + 0x49, 0x3d, 0xb4, 0x0c, 0xa6, 0xaf, 0x17, 0x00, 0xf4, 0x67, 0x39, 0xf1, 0xfc, 0x25, 0x3b, 0x9d, + 0xbf, 0x34, 0xf2, 0x06, 0xce, 0xcf, 0x5e, 0xfa, 0xc3, 0x8a, 0x7e, 0x25, 0x91, 0xbb, 0xf4, 0x4e, + 0x01, 0x4e, 0x99, 0xa9, 0x7c, 0xa0, 0x91, 0xf5, 0xd8, 0x4c, 0x7a, 0x51, 0xf4, 0x4f, 0x61, 0xe9, + 0x76, 0xcc, 0x90, 0x25, 0x2f, 0xc1, 0x44, 0x57, 0x25, 0x4b, 0xdc, 0x88, 0xcf, 0x57, 0x74, 0xd3, + 0x73, 0x3d, 0xd1, 0x87, 0x29, 0xc8, 0x07, 0xe4, 0x5f, 0x95, 0x8e, 0x25, 0xff, 0x2a, 0x79, 0x85, + 0xa5, 0x7c, 0xdf, 0x2b, 0x2c, 0xbb, 0x50, 0xdb, 0x0e, 0xfc, 0x8e, 0x48, 0x71, 0x52, 0xff, 0x71, + 0x71, 0x6d, 0x04, 0xe1, 0x15, 0xff, 0xbb, 0x53, 0x2c, 0xc3, 0x97, 0x34, 0x7e, 0x8c, 0x49, 0x09, + 0xcf, 0xb5, 0x2f, 0xa9, 0x8e, 0x1d, 0x27, 0xd5, 0x88, 0x69, 0x6d, 0x48, 0xec, 0xa8, 0xc9, 0xa4, + 0xd3, 0x9a, 0xc6, 0x1f, 0x4e, 0x5a, 0x93, 0xf1, 0x8d, 0xa2, 0xe6, 0x94, 0xcd, 0x4c, 0x31, 0x88, + 0xc2, 0x80, 0x62, 0x10, 0xaa, 0x72, 0x56, 0x32, 0x01, 0xe7, 0x59, 0x18, 0x0b, 0xa8, 0x19, 0xfa, + 0x9e, 0x2a, 0x3c, 0x18, 0xc9, 0x19, 0x14, 0xad, 0xa8, 0x7a, 0x93, 0x89, 0x3a, 0xc5, 0x07, 0x24, + 0xea, 0xbc, 0x3f, 0xb1, 0x41, 0x64, 0xca, 0x67, 0x74, 0xd6, 0x73, 0x36, 0x89, 0x88, 0xe2, 0xab, + 0xbf, 0xff, 0xad, 0x64, 0xa3, 0xf8, 0xea, 0xaf, 0x79, 0x23, 0x08, 0x62, 0xc3, 0x84, 0x6b, 0x86, + 0x4c, 0x84, 0x87, 0xec, 0x79, 0x36, 0x44, 0x16, 0x50, 0x74, 0x8c, 0x56, 0x13, 0x78, 0x30, 0x85, + 0xd5, 0xd8, 0x2f, 0x41, 0xc6, 0xde, 0xf9, 0x51, 0x44, 0xe0, 0xbf, 0x55, 0x44, 0xe0, 0xdd, 0x22, + 0xc4, 0x67, 0xea, 0x88, 0xd1, 0xf1, 0x37, 0xa0, 0xda, 0x31, 0xef, 0x2e, 0x52, 0xd7, 0xdc, 0x1b, + 0xa5, 0xc6, 0xff, 0x9a, 0xc2, 0x81, 0x11, 0x36, 0x12, 0x02, 0x38, 0x51, 0xed, 0xab, 0x91, 0xfd, + 0xa7, 0x71, 0x19, 0x2d, 0xe9, 0x87, 0x8a, 0x9f, 0x31, 0x41, 0xc6, 0xf8, 0xcb, 0x22, 0xa8, 0x22, + 0x69, 0x84, 0x42, 0x65, 0xdb, 0xb9, 0x4b, 0xed, 0x91, 0x33, 0xc5, 0x12, 0xff, 0xbc, 0x22, 0x1d, + 0xc4, 0xa2, 0x01, 0x25, 0x76, 0xd2, 0x81, 0xf1, 0x50, 0x3a, 0xfc, 0xd5, 0xfa, 0x0d, 0xef, 0x56, + 0x4d, 0x05, 0x0e, 0x54, 0xc9, 0x33, 0xd9, 0x84, 0x9a, 0x86, 0x20, 0x27, 0xe3, 0xc2, 0x6a, 0x49, + 0x47, 0x20, 0x97, 0x8c, 0x2f, 0x2b, 0x72, 0xb2, 0x09, 0x35, 0x8d, 0xc6, 0x27, 0xbe, 0xfa, 0xad, + 0x4b, 0x8f, 0x7d, 0xfd, 0x5b, 0x97, 0x1e, 0xfb, 0xe6, 0xb7, 0x2e, 0x3d, 0xf6, 0xd9, 0x83, 0x4b, + 0x85, 0xaf, 0x1e, 0x5c, 0x2a, 0x7c, 0xfd, 0xe0, 0x52, 0xe1, 0x9b, 0x07, 0x97, 0x0a, 0x7f, 0x7f, + 0x70, 0xa9, 0xf0, 0x4b, 0xff, 0x70, 0xe9, 0xb1, 0x8f, 0xbf, 0x38, 0xe4, 0x1f, 0xe5, 0xff, 0x57, + 0x00, 0x00, 0x00, 0xff, 0xff, 0xaf, 0x1f, 0xc0, 0xc4, 0x62, 0x7f, 0x00, 0x00, } func (m *AbstractPodTemplate) Marshal() (dAtA []byte, err error) { @@ -5859,6 +5860,18 @@ func (m *PipelineLimits) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.RetryInterval != nil { + { + size, err := m.RetryInterval.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2a + } if m.ReadTimeout != nil { { size, err := m.ReadTimeout.MarshalToSizedBuffer(dAtA[:i]) @@ -7473,6 +7486,18 @@ func (m *VertexLimits) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.RetryInterval != nil { + { + size, err := m.RetryInterval.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2a + } if m.BufferUsageLimit != nil { i = encodeVarintGenerated(dAtA, i, uint64(*m.BufferUsageLimit)) i-- @@ -9008,6 +9033,10 @@ func (m *PipelineLimits) Size() (n int) { l = m.ReadTimeout.Size() n += 1 + l + sovGenerated(uint64(l)) } + if m.RetryInterval != nil { + l = m.RetryInterval.Size() + n += 1 + l + sovGenerated(uint64(l)) + } return n } @@ -9610,6 +9639,10 @@ func (m *VertexLimits) Size() (n int) { if m.BufferUsageLimit != nil { n += 1 + sovGenerated(uint64(*m.BufferUsageLimit)) } + if m.RetryInterval != nil { + l = m.RetryInterval.Size() + n += 1 + l + sovGenerated(uint64(l)) + } return n } @@ -10529,6 +10562,7 @@ func (this *PipelineLimits) String() string { `BufferMaxLength:` + valueToStringGenerated(this.BufferMaxLength) + `,`, `BufferUsageLimit:` + valueToStringGenerated(this.BufferUsageLimit) + `,`, `ReadTimeout:` + strings.Replace(fmt.Sprintf("%v", this.ReadTimeout), "Duration", "v11.Duration", 1) + `,`, + `RetryInterval:` + strings.Replace(fmt.Sprintf("%v", this.RetryInterval), "Duration", "v11.Duration", 1) + `,`, `}`, }, "") return s @@ -10924,6 +10958,7 @@ func (this *VertexLimits) String() string { `ReadTimeout:` + strings.Replace(fmt.Sprintf("%v", this.ReadTimeout), "Duration", "v11.Duration", 1) + `,`, `BufferMaxLength:` + valueToStringGenerated(this.BufferMaxLength) + `,`, `BufferUsageLimit:` + valueToStringGenerated(this.BufferUsageLimit) + `,`, + `RetryInterval:` + strings.Replace(fmt.Sprintf("%v", this.RetryInterval), "Duration", "v11.Duration", 1) + `,`, `}`, }, "") return s @@ -21044,6 +21079,42 @@ func (m *PipelineLimits) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RetryInterval", 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.RetryInterval == nil { + m.RetryInterval = &v11.Duration{} + } + if err := m.RetryInterval.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -25771,6 +25842,42 @@ func (m *VertexLimits) Unmarshal(dAtA []byte) error { } } m.BufferUsageLimit = &v + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RetryInterval", 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.RetryInterval == nil { + m.RetryInterval = &v11.Duration{} + } + if err := m.RetryInterval.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) diff --git a/pkg/apis/numaflow/v1alpha1/generated.proto b/pkg/apis/numaflow/v1alpha1/generated.proto index ea5b760b5c..31361ffdf0 100644 --- a/pkg/apis/numaflow/v1alpha1/generated.proto +++ b/pkg/apis/numaflow/v1alpha1/generated.proto @@ -916,6 +916,13 @@ message PipelineLimits { // +kubebuilder:default= "1s" // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.Duration readTimeout = 4; + + // RetryInterval is the wait time before retrying a batch after getting an error from a user defined processor or ISBSVC. + // A small value similar to the default of 0.001s will use more CPU if a processor or buffer enters a prolonged failed state, while a larger value might + // introduce unecessary delays on short-lived errors. + // +kubebuilder:default= "0.001s" + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.Duration retryInterval = 5; } // +kubebuilder:object:root=true @@ -1348,6 +1355,11 @@ message VertexLimits { // It overrides the settings from pipeline limits. // +optional optional uint32 bufferUsageLimit = 4; + + // RetryInterval is the duration waited for before retrying after a UDF processing or buffer writing. + // It overrides the settings from the pipeline limits. + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.Duration retryInterval = 5; } // +kubebuilder:object:root=true diff --git a/pkg/apis/numaflow/v1alpha1/openapi_generated.go b/pkg/apis/numaflow/v1alpha1/openapi_generated.go index 5c5e058aa0..348906058f 100644 --- a/pkg/apis/numaflow/v1alpha1/openapi_generated.go +++ b/pkg/apis/numaflow/v1alpha1/openapi_generated.go @@ -3054,6 +3054,12 @@ func schema_pkg_apis_numaflow_v1alpha1_PipelineLimits(ref common.ReferenceCallba Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), }, }, + "retryInterval": { + SchemaProps: spec.SchemaProps{ + Description: "RetryInterval is the wait time before retrying a batch after getting an error from a user defined processor or ISBSVC. A small value similar to the default of 0.001s will use more CPU if a processor or buffer enters a prolonged failed state, while a larger value might introduce unecessary delays on short-lived errors.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), + }, + }, }, }, }, @@ -4323,6 +4329,12 @@ func schema_pkg_apis_numaflow_v1alpha1_VertexLimits(ref common.ReferenceCallback Format: "int64", }, }, + "retryInterval": { + SchemaProps: spec.SchemaProps{ + Description: "RetryInterval is the duration waited for before retrying after a UDF processing or buffer writing. It overrides the settings from the pipeline limits.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), + }, + }, }, }, }, diff --git a/pkg/apis/numaflow/v1alpha1/pipeline_types.go b/pkg/apis/numaflow/v1alpha1/pipeline_types.go index 39d3670a6b..9ba79868bb 100644 --- a/pkg/apis/numaflow/v1alpha1/pipeline_types.go +++ b/pkg/apis/numaflow/v1alpha1/pipeline_types.go @@ -377,11 +377,13 @@ func (p Pipeline) GetPipelineLimits() PipelineLimits { defaultBufferMaxLength := uint64(DefaultBufferLength) defaultBufferUsageLimit := uint32(100 * DefaultBufferUsageLimit) defaultReadTimeout := time.Second + defaultRetryInterval := time.Millisecond limits := PipelineLimits{ ReadBatchSize: &defaultReadBatchSize, BufferMaxLength: &defaultBufferMaxLength, BufferUsageLimit: &defaultBufferUsageLimit, ReadTimeout: &metav1.Duration{Duration: defaultReadTimeout}, + RetryInterval: &metav1.Duration{Duration: defaultRetryInterval}, } if x := p.Spec.Limits; x != nil { if x.ReadBatchSize != nil { @@ -396,6 +398,9 @@ func (p Pipeline) GetPipelineLimits() PipelineLimits { if x.ReadTimeout != nil { limits.ReadTimeout = x.ReadTimeout } + if x.RetryInterval != nil { + limits.RetryInterval = x.RetryInterval + } } return limits } @@ -590,6 +595,12 @@ type PipelineLimits struct { // +kubebuilder:default= "1s" // +optional ReadTimeout *metav1.Duration `json:"readTimeout,omitempty" protobuf:"bytes,4,opt,name=readTimeout"` + // RetryInterval is the wait time before retrying a batch after getting an error from a user defined processor or ISBSVC. + // A small value similar to the default of 0.001s will use more CPU if a processor or buffer enters a prolonged failed state, while a larger value might + // introduce unecessary delays on short-lived errors. + // +kubebuilder:default= "0.001s" + // +optional + RetryInterval *metav1.Duration `json:"retryInterval,omitempty" protobuf:"bytes,5,opt,name=retryInterval"` } type PipelineStatus struct { diff --git a/pkg/apis/numaflow/v1alpha1/pipeline_types_test.go b/pkg/apis/numaflow/v1alpha1/pipeline_types_test.go index 38f339e8e4..82782a39dc 100644 --- a/pkg/apis/numaflow/v1alpha1/pipeline_types_test.go +++ b/pkg/apis/numaflow/v1alpha1/pipeline_types_test.go @@ -359,6 +359,7 @@ func Test_GetPipelineLimits(t *testing.T) { assert.Equal(t, float64(DefaultBufferUsageLimit), float64(*l.BufferUsageLimit)/100) assert.Equal(t, int64(DefaultReadBatchSize), int64(*l.ReadBatchSize)) assert.Equal(t, "1s", l.ReadTimeout.Duration.String()) + //assert.Equal(t, "1ms", l.RetryInterval.Duration.String()) length := uint64(2000) usuageLimit := uint32(40) @@ -368,12 +369,14 @@ func Test_GetPipelineLimits(t *testing.T) { BufferUsageLimit: &usuageLimit, ReadBatchSize: &readBatch, ReadTimeout: &metav1.Duration{Duration: time.Duration(5 * time.Second)}, + RetryInterval: &metav1.Duration{Duration: time.Duration(500 * time.Millisecond)}, } l = pl.GetPipelineLimits() assert.Equal(t, length, *l.BufferMaxLength) assert.Equal(t, float64(40)/100, float64(*l.BufferUsageLimit)/100) assert.Equal(t, readBatch, *l.ReadBatchSize) assert.Equal(t, "5s", l.ReadTimeout.Duration.String()) + assert.Equal(t, "500ms", l.RetryInterval.Duration.String()) } func Test_GetAllBuckets(t *testing.T) { diff --git a/pkg/apis/numaflow/v1alpha1/vertex_types.go b/pkg/apis/numaflow/v1alpha1/vertex_types.go index d90c192b01..90ea01af87 100644 --- a/pkg/apis/numaflow/v1alpha1/vertex_types.go +++ b/pkg/apis/numaflow/v1alpha1/vertex_types.go @@ -677,6 +677,10 @@ type VertexLimits struct { // It overrides the settings from pipeline limits. // +optional BufferUsageLimit *uint32 `json:"bufferUsageLimit,omitempty" protobuf:"varint,4,opt,name=bufferUsageLimit"` + // RetryInterval is the duration waited for before retrying after a UDF processing or buffer writing. + // It overrides the settings from the pipeline limits. + // +optional + RetryInterval *metav1.Duration `json:"retryInterval,omitempty" protobuf:"bytes,5,opt,name=retryInterval"` } func (v VertexSpec) getType() containerSupplier { diff --git a/pkg/apis/numaflow/v1alpha1/zz_generated.deepcopy.go b/pkg/apis/numaflow/v1alpha1/zz_generated.deepcopy.go index 1ce24ed8b8..c112f0fb11 100644 --- a/pkg/apis/numaflow/v1alpha1/zz_generated.deepcopy.go +++ b/pkg/apis/numaflow/v1alpha1/zz_generated.deepcopy.go @@ -1448,6 +1448,11 @@ func (in *PipelineLimits) DeepCopyInto(out *PipelineLimits) { *out = new(metav1.Duration) **out = **in } + if in.RetryInterval != nil { + in, out := &in.RetryInterval, &out.RetryInterval + *out = new(metav1.Duration) + **out = **in + } return } @@ -2303,6 +2308,11 @@ func (in *VertexLimits) DeepCopyInto(out *VertexLimits) { *out = new(uint32) **out = **in } + if in.RetryInterval != nil { + in, out := &in.RetryInterval, &out.RetryInterval + *out = new(metav1.Duration) + **out = **in + } return } diff --git a/pkg/reconciler/pipeline/controller.go b/pkg/reconciler/pipeline/controller.go index 9686f05c9f..7a37a400e1 100644 --- a/pkg/reconciler/pipeline/controller.go +++ b/pkg/reconciler/pipeline/controller.go @@ -628,6 +628,8 @@ func copyVertexLimits(pl *dfv1.Pipeline, v *dfv1.AbstractVertex) { v.Limits = &mergedLimits } +// mergeLimits returns a new dfv1.VertexLimits struct copied from vLimits +// and where all the unset entries are replaced with the values from plLimits. func mergeLimits(plLimits dfv1.PipelineLimits, vLimits *dfv1.VertexLimits) dfv1.VertexLimits { result := dfv1.VertexLimits{} if vLimits != nil { @@ -635,6 +637,7 @@ func mergeLimits(plLimits dfv1.PipelineLimits, vLimits *dfv1.VertexLimits) dfv1. result.BufferUsageLimit = vLimits.BufferUsageLimit result.ReadBatchSize = vLimits.ReadBatchSize result.ReadTimeout = vLimits.ReadTimeout + result.RetryInterval = vLimits.RetryInterval } if result.ReadBatchSize == nil { result.ReadBatchSize = plLimits.ReadBatchSize @@ -648,6 +651,9 @@ func mergeLimits(plLimits dfv1.PipelineLimits, vLimits *dfv1.VertexLimits) dfv1. if result.BufferUsageLimit == nil { result.BufferUsageLimit = plLimits.BufferUsageLimit } + if result.RetryInterval == nil { + result.RetryInterval = plLimits.RetryInterval + } return result } diff --git a/pkg/reconciler/pipeline/controller_test.go b/pkg/reconciler/pipeline/controller_test.go index 99f10d795d..8c10388c36 100644 --- a/pkg/reconciler/pipeline/controller_test.go +++ b/pkg/reconciler/pipeline/controller_test.go @@ -18,9 +18,12 @@ package pipeline import ( "context" + "reflect" "testing" + "time" "github.com/goccy/go-json" + "github.com/kylelemons/godebug/pretty" "github.com/stretchr/testify/assert" "go.uber.org/zap/zaptest" appv1 "k8s.io/api/apps/v1" @@ -550,6 +553,76 @@ func TestCreateOrUpdateDaemon(t *testing.T) { }) } +// abortIfStructHasZeroValueFields will ensure that this instance of limits has no +// field which are set to nil or to a zero value. This is used to ensure a change +// of vertex limits will be tested and reflected in controller's mergeLimits. +func abortIfStructHasZeroValueFields(t *testing.T, limits dfv1.PipelineLimits) { + v := reflect.ValueOf(limits) + for i := 0; i < v.NumField(); i++ { + if v.Field(i).IsZero() { + t.Fatal("Field " + v.Type().Field(i).Name + " of PipelineLimits object has a non zero value which is not allowed in this test") + } + } +} + +// Test_mergeLimits verifies that the mergeLimits function work as expect. +// This test asserts that all defaultLimits test struct have a non zero value with reflect. +// A person updating the VertexLimits or PipelineLimits would have to change this test as well. +func Test_mergeLimits(t *testing.T) { + + // defining test inputs + v1 := uint64(20) + v2 := uint32(30) + v3 := uint64(24) + v4 := uint64(120) + v6 := uint64(124) + // by convention, for this test, this one should have no nil values + defaultLimits := dfv1.PipelineLimits{ + ReadBatchSize: &v1, + ReadTimeout: &metav1.Duration{Duration: time.Minute * time.Duration(3)}, + BufferMaxLength: &v3, + BufferUsageLimit: &v2, + RetryInterval: &metav1.Duration{Duration: time.Minute * time.Duration(5)}, + } + customLimits1 := dfv1.VertexLimits{} + customLimits2 := dfv1.VertexLimits{ + ReadBatchSize: &v4, + ReadTimeout: &metav1.Duration{Duration: time.Minute * time.Duration(13)}, + BufferMaxLength: &v6, + BufferUsageLimit: nil, + RetryInterval: &metav1.Duration{Duration: time.Minute * time.Duration(15)}, + } + + // this ensures that users won't forget about updating mergeLimits and its tests after + // modifying PipelineLimits or VertexLimits + abortIfStructHasZeroValueFields(t, defaultLimits) + + // defining expected output + expectedOutput1 := defaultLimits + expectedOutput2 := dfv1.VertexLimits{ + ReadBatchSize: &v4, + ReadTimeout: &metav1.Duration{Duration: time.Minute * time.Duration(13)}, + BufferMaxLength: &v6, + BufferUsageLimit: &v2, + RetryInterval: &metav1.Duration{Duration: time.Minute * time.Duration(15)}, + } + + // running tests + testResult1 := mergeLimits(defaultLimits, &customLimits1) + testResult2 := mergeLimits(defaultLimits, &customLimits2) + + // comparings results and providing the struct pretty diff on failure + if !reflect.DeepEqual(testResult1, expectedOutput1) { + t.Logf("Expected: %+v\n", expectedOutput1) + t.Logf("Actual: %+v\n", testResult1) + t.Fatal("Divergint expected and returned result for mergeLimits test 1") + } + if !reflect.DeepEqual(testResult2, expectedOutput2) { + t.Log("Divergeance: \n" + pretty.Compare(testResult2, expectedOutput2)) + t.Fatal("Divergint expected and returned result for mergeLimits test 2") + } +} + func Test_createOrUpdateSIMDeployments(t *testing.T) { cl := fake.NewClientBuilder().Build() ctx := context.TODO() diff --git a/pkg/sinks/blackhole/blackhole.go b/pkg/sinks/blackhole/blackhole.go index e72c9e055b..c011b94c90 100644 --- a/pkg/sinks/blackhole/blackhole.go +++ b/pkg/sinks/blackhole/blackhole.go @@ -75,6 +75,9 @@ func NewBlackhole(vertexInstance *dfv1.VertexInstance, if x.ReadBatchSize != nil { forwardOpts = append(forwardOpts, sinkforward.WithReadBatchSize(int64(*x.ReadBatchSize))) } + if x.RetryInterval != nil { + forwardOpts = append(forwardOpts, sinkforward.WithRetryInterval(x.RetryInterval.Duration)) + } } isdf, err := sinkforward.NewDataForward(vertexInstance, fromBuffer, bh, fetchWatermark, publishWatermark, idleManager, forwardOpts...) diff --git a/pkg/sinks/forward/options.go b/pkg/sinks/forward/options.go index dcfba6b5be..986150e730 100644 --- a/pkg/sinks/forward/options.go +++ b/pkg/sinks/forward/options.go @@ -39,11 +39,12 @@ type options struct { type Option func(*options) error +// DefaultOptions return the default options. func DefaultOptions() *options { return &options{ readBatchSize: dfv1.DefaultReadBatchSize, sinkConcurrency: dfv1.DefaultReadBatchSize, - retryInterval: time.Millisecond, + retryInterval: dfv1.DefaultRetryInterval, logger: logging.NewLogger(), } } diff --git a/pkg/sinks/kafka/kafka.go b/pkg/sinks/kafka/kafka.go index ac3bb06ad4..3b25bb0b1e 100644 --- a/pkg/sinks/kafka/kafka.go +++ b/pkg/sinks/kafka/kafka.go @@ -88,6 +88,9 @@ func NewToKafka(vertexInstance *dfv1.VertexInstance, if x.ReadBatchSize != nil { forwardOpts = append(forwardOpts, sinkforward.WithReadBatchSize(int64(*x.ReadBatchSize))) } + if x.RetryInterval != nil { + forwardOpts = append(forwardOpts, sinkforward.WithRetryInterval(x.RetryInterval.Duration)) + } } f, err := sinkforward.NewDataForward(vertexInstance, fromBuffer, toKafka, fetchWatermark, publishWatermark, idleManager, forwardOpts...) diff --git a/pkg/sinks/logger/log.go b/pkg/sinks/logger/log.go index ce6d787bbb..ddc2edc273 100644 --- a/pkg/sinks/logger/log.go +++ b/pkg/sinks/logger/log.go @@ -78,6 +78,9 @@ func NewToLog(vertexInstance *dfv1.VertexInstance, if x.ReadBatchSize != nil { forwardOpts = append(forwardOpts, sinkforward.WithReadBatchSize(int64(*x.ReadBatchSize))) } + if x.RetryInterval != nil { + forwardOpts = append(forwardOpts, sinkforward.WithRetryInterval(x.RetryInterval.Duration)) + } } isdf, err := sinkforward.NewDataForward(vertexInstance, fromBuffer, toLog, fetchWatermark, publishWatermark, idleManager, forwardOpts...) diff --git a/pkg/sinks/udsink/sink.go b/pkg/sinks/udsink/sink.go index de991edcbd..6768113c05 100644 --- a/pkg/sinks/udsink/sink.go +++ b/pkg/sinks/udsink/sink.go @@ -77,6 +77,9 @@ func NewUserDefinedSink(vertexInstance *dfv1.VertexInstance, if x.ReadBatchSize != nil { forwardOpts = append(forwardOpts, sinkforward.WithReadBatchSize(int64(*x.ReadBatchSize))) } + if x.RetryInterval != nil { + forwardOpts = append(forwardOpts, sinkforward.WithRetryInterval(x.RetryInterval.Duration)) + } } s.udsink = udsink isdf, err := sinkforward.NewDataForward(vertexInstance, fromBuffer, s, fetchWatermark, publishWatermark, idleManager, forwardOpts...) diff --git a/pkg/sources/forward/options.go b/pkg/sources/forward/options.go index bfdddf5e07..ac79bc977d 100644 --- a/pkg/sources/forward/options.go +++ b/pkg/sources/forward/options.go @@ -43,7 +43,7 @@ func DefaultOptions() *options { return &options{ readBatchSize: dfv1.DefaultReadBatchSize, transformerConcurrency: dfv1.DefaultReadBatchSize, - retryInterval: time.Millisecond, + retryInterval: dfv1.DefaultRetryInterval, logger: logging.NewLogger(), } } diff --git a/pkg/sources/generator/tickgen.go b/pkg/sources/generator/tickgen.go index 2b12832769..63030f01d8 100644 --- a/pkg/sources/generator/tickgen.go +++ b/pkg/sources/generator/tickgen.go @@ -203,6 +203,9 @@ func NewMemGen( if x.ReadBatchSize != nil { forwardOpts = append(forwardOpts, sourceforward.WithReadBatchSize(int64(*x.ReadBatchSize))) } + if x.RetryInterval != nil { + forwardOpts = append(forwardOpts, sourceforward.WithRetryInterval(x.RetryInterval.Duration)) + } } // create a source watermark publisher diff --git a/pkg/sources/http/http.go b/pkg/sources/http/http.go index 8dcc9ddd52..a4903d38b1 100644 --- a/pkg/sources/http/http.go +++ b/pkg/sources/http/http.go @@ -210,6 +210,9 @@ func New( if x.ReadBatchSize != nil { forwardOpts = append(forwardOpts, sourceforward.WithReadBatchSize(int64(*x.ReadBatchSize))) } + if x.RetryInterval != nil { + forwardOpts = append(forwardOpts, sourceforward.WithRetryInterval(x.RetryInterval.Duration)) + } } ctx, cancel := context.WithCancel(context.Background()) h.cancelFunc = cancel diff --git a/pkg/sources/kafka/reader.go b/pkg/sources/kafka/reader.go index 1fe27be8ab..0f8f2a3694 100644 --- a/pkg/sources/kafka/reader.go +++ b/pkg/sources/kafka/reader.go @@ -351,6 +351,9 @@ func NewKafkaSource( if x.ReadBatchSize != nil { forwardOpts = append(forwardOpts, sourceforward.WithReadBatchSize(int64(*x.ReadBatchSize))) } + if x.RetryInterval != nil { + forwardOpts = append(forwardOpts, sourceforward.WithRetryInterval(x.RetryInterval.Duration)) + } } // create a source watermark publisher sourceWmPublisher := publish.NewSourcePublish(ctx, ks.pipelineName, ks.vertexName, publishWMStores, publish.WithDelay(vertexInstance.Vertex.Spec.Watermark.GetMaxDelay())) diff --git a/pkg/sources/nats/nats.go b/pkg/sources/nats/nats.go index 1ab71536eb..9a38853fdd 100644 --- a/pkg/sources/nats/nats.go +++ b/pkg/sources/nats/nats.go @@ -87,6 +87,9 @@ func New( if x.ReadBatchSize != nil { forwardOpts = append(forwardOpts, sourceforward.WithReadBatchSize(int64(*x.ReadBatchSize))) } + if x.RetryInterval != nil { + forwardOpts = append(forwardOpts, sourceforward.WithRetryInterval(x.RetryInterval.Duration)) + } } ctx, cancel := context.WithCancel(context.Background()) diff --git a/pkg/sources/udsource/user_defined_source.go b/pkg/sources/udsource/user_defined_source.go index ea2be3cad8..198dc1d2d5 100644 --- a/pkg/sources/udsource/user_defined_source.go +++ b/pkg/sources/udsource/user_defined_source.go @@ -97,6 +97,9 @@ func New( if x.ReadBatchSize != nil { forwardOpts = append(forwardOpts, sourceforward.WithReadBatchSize(int64(*x.ReadBatchSize))) } + if x.RetryInterval != nil { + forwardOpts = append(forwardOpts, sourceforward.WithRetryInterval(x.RetryInterval.Duration)) + } } ctx, cancel := context.WithCancel(context.Background()) diff --git a/pkg/udf/forward/options.go b/pkg/udf/forward/options.go index 42d80848b9..6790fbcee1 100644 --- a/pkg/udf/forward/options.go +++ b/pkg/udf/forward/options.go @@ -45,7 +45,7 @@ func DefaultOptions() *options { return &options{ readBatchSize: dfv1.DefaultReadBatchSize, udfConcurrency: dfv1.DefaultReadBatchSize, - retryInterval: time.Millisecond, + retryInterval: dfv1.DefaultRetryInterval, logger: logging.NewLogger(), enableMapUdfStream: false, } diff --git a/ui/src/components/common/SpecEditor/index.test.tsx b/ui/src/components/common/SpecEditor/index.test.tsx index 63afa41310..a256cc79c1 100644 --- a/ui/src/components/common/SpecEditor/index.test.tsx +++ b/ui/src/components/common/SpecEditor/index.test.tsx @@ -156,6 +156,7 @@ const mockYaml = { bufferMaxLength: 30000, bufferUsageLimit: 80, readTimeout: "1s", + retryInterval: "0.001s", }, watermark: { maxDelay: "0s", diff --git a/ui/src/components/pages/Namespace/index.test.tsx b/ui/src/components/pages/Namespace/index.test.tsx index 34d7176594..07bdb33b81 100644 --- a/ui/src/components/pages/Namespace/index.test.tsx +++ b/ui/src/components/pages/Namespace/index.test.tsx @@ -356,6 +356,7 @@ const mockPipelineRawData = { bufferMaxLength: 30000, bufferUsageLimit: 80, readTimeout: "1s", + retryInterval: "0.001s", }, watermark: { maxDelay: "0s", diff --git a/ui/src/components/pages/Namespace/partials/NamespaceListingWrapper/PipelinesTypes.ts b/ui/src/components/pages/Namespace/partials/NamespaceListingWrapper/PipelinesTypes.ts index e793005b9d..fddf88f8d5 100644 --- a/ui/src/components/pages/Namespace/partials/NamespaceListingWrapper/PipelinesTypes.ts +++ b/ui/src/components/pages/Namespace/partials/NamespaceListingWrapper/PipelinesTypes.ts @@ -51,6 +51,7 @@ interface Limits { bufferMaxLength: number; bufferUsageLimit: number; readTimeout: string; + retryInterval: string; } interface Lifecycle { diff --git a/ui/src/components/pages/Namespace/partials/PipelineCard/index.test.tsx b/ui/src/components/pages/Namespace/partials/PipelineCard/index.test.tsx index 0a76789ca6..ab7c4a08dd 100644 --- a/ui/src/components/pages/Namespace/partials/PipelineCard/index.test.tsx +++ b/ui/src/components/pages/Namespace/partials/PipelineCard/index.test.tsx @@ -158,6 +158,7 @@ const mockData = { bufferMaxLength: 30000, bufferUsageLimit: 80, readTimeout: "1s", + retryInterval: "0.001s", }, watermark: { maxDelay: "0s", @@ -339,6 +340,7 @@ const mockStatusData = { bufferMaxLength: 30000, bufferUsageLimit: 80, readTimeout: "1s", + retryInterval: "0.001s", }, watermark: { maxDelay: "0s", diff --git a/ui/src/components/pages/Pipeline/partials/PipelineSummaryStatus/index.test.tsx b/ui/src/components/pages/Pipeline/partials/PipelineSummaryStatus/index.test.tsx index 8426e7ba50..8ee7a16522 100644 --- a/ui/src/components/pages/Pipeline/partials/PipelineSummaryStatus/index.test.tsx +++ b/ui/src/components/pages/Pipeline/partials/PipelineSummaryStatus/index.test.tsx @@ -162,6 +162,7 @@ const mockPipeline = { bufferMaxLength: 30000, bufferUsageLimit: 80, readTimeout: "1s", + retryInterval: "0.001s", }, watermark: { maxDelay: "0s", From e1a11d2e031ba8733b50eadbe9d7c0b745dc821e Mon Sep 17 00:00:00 2001 From: Quentin Faidide Date: Mon, 8 Apr 2024 23:17:01 +0300 Subject: [PATCH 2/3] doc: refrain from entering into too much details about retryInterval in the doc Signed-off-by: Quentin Faidide --- api/json-schema/schema.json | 2 +- api/openapi-spec/swagger.json | 2 +- docs/APIs.md | 5 +---- pkg/apis/numaflow/v1alpha1/generated.proto | 2 -- pkg/apis/numaflow/v1alpha1/openapi_generated.go | 2 +- pkg/apis/numaflow/v1alpha1/pipeline_types.go | 2 -- 6 files changed, 4 insertions(+), 11 deletions(-) diff --git a/api/json-schema/schema.json b/api/json-schema/schema.json index 67aa8b2141..50f2305c90 100644 --- a/api/json-schema/schema.json +++ b/api/json-schema/schema.json @@ -19147,7 +19147,7 @@ }, "retryInterval": { "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Duration", - "description": "RetryInterval is the wait time before retrying a batch after getting an error from a user defined processor or ISBSVC. A small value similar to the default of 0.001s will use more CPU if a processor or buffer enters a prolonged failed state, while a larger value might introduce unecessary delays on short-lived errors." + "description": "RetryInterval is the wait time before retrying a batch after getting an error from a user defined processor or ISBSVC." } }, "type": "object" diff --git a/api/openapi-spec/swagger.json b/api/openapi-spec/swagger.json index c222052c0a..98059ecf90 100644 --- a/api/openapi-spec/swagger.json +++ b/api/openapi-spec/swagger.json @@ -19133,7 +19133,7 @@ "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Duration" }, "retryInterval": { - "description": "RetryInterval is the wait time before retrying a batch after getting an error from a user defined processor or ISBSVC. A small value similar to the default of 0.001s will use more CPU if a processor or buffer enters a prolonged failed state, while a larger value might introduce unecessary delays on short-lived errors.", + "description": "RetryInterval is the wait time before retrying a batch after getting an error from a user defined processor or ISBSVC.", "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Duration" } } diff --git a/docs/APIs.md b/docs/APIs.md index 7498e6825e..22f22a3e51 100644 --- a/docs/APIs.md +++ b/docs/APIs.md @@ -3538,10 +3538,7 @@ Kubernetes meta/v1.Duration (Optional)

RetryInterval is the wait time before retrying a batch after getting an -error from a user defined processor or ISBSVC. A small value similar to -the default of 0.001s will use more CPU if a processor or buffer enters -a prolonged failed state, while a larger value might introduce -unecessary delays on short-lived errors. +error from a user defined processor or ISBSVC.

diff --git a/pkg/apis/numaflow/v1alpha1/generated.proto b/pkg/apis/numaflow/v1alpha1/generated.proto index 31361ffdf0..399f49aed9 100644 --- a/pkg/apis/numaflow/v1alpha1/generated.proto +++ b/pkg/apis/numaflow/v1alpha1/generated.proto @@ -918,8 +918,6 @@ message PipelineLimits { optional k8s.io.apimachinery.pkg.apis.meta.v1.Duration readTimeout = 4; // RetryInterval is the wait time before retrying a batch after getting an error from a user defined processor or ISBSVC. - // A small value similar to the default of 0.001s will use more CPU if a processor or buffer enters a prolonged failed state, while a larger value might - // introduce unecessary delays on short-lived errors. // +kubebuilder:default= "0.001s" // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.Duration retryInterval = 5; diff --git a/pkg/apis/numaflow/v1alpha1/openapi_generated.go b/pkg/apis/numaflow/v1alpha1/openapi_generated.go index 348906058f..f58aa6944f 100644 --- a/pkg/apis/numaflow/v1alpha1/openapi_generated.go +++ b/pkg/apis/numaflow/v1alpha1/openapi_generated.go @@ -3056,7 +3056,7 @@ func schema_pkg_apis_numaflow_v1alpha1_PipelineLimits(ref common.ReferenceCallba }, "retryInterval": { SchemaProps: spec.SchemaProps{ - Description: "RetryInterval is the wait time before retrying a batch after getting an error from a user defined processor or ISBSVC. A small value similar to the default of 0.001s will use more CPU if a processor or buffer enters a prolonged failed state, while a larger value might introduce unecessary delays on short-lived errors.", + Description: "RetryInterval is the wait time before retrying a batch after getting an error from a user defined processor or ISBSVC.", Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), }, }, diff --git a/pkg/apis/numaflow/v1alpha1/pipeline_types.go b/pkg/apis/numaflow/v1alpha1/pipeline_types.go index 9ba79868bb..b73a0cb35f 100644 --- a/pkg/apis/numaflow/v1alpha1/pipeline_types.go +++ b/pkg/apis/numaflow/v1alpha1/pipeline_types.go @@ -596,8 +596,6 @@ type PipelineLimits struct { // +optional ReadTimeout *metav1.Duration `json:"readTimeout,omitempty" protobuf:"bytes,4,opt,name=readTimeout"` // RetryInterval is the wait time before retrying a batch after getting an error from a user defined processor or ISBSVC. - // A small value similar to the default of 0.001s will use more CPU if a processor or buffer enters a prolonged failed state, while a larger value might - // introduce unecessary delays on short-lived errors. // +kubebuilder:default= "0.001s" // +optional RetryInterval *metav1.Duration `json:"retryInterval,omitempty" protobuf:"bytes,5,opt,name=retryInterval"` From 29bb098e6dc4ee5f4850903fe797ccd1ec404fdd Mon Sep 17 00:00:00 2001 From: Quentin Faidide Date: Tue, 9 Apr 2024 00:11:30 +0300 Subject: [PATCH 3/3] doc: add example and explanation for retryInterval in pipeline tuning page Signed-off-by: Quentin Faidide --- docs/user-guide/reference/pipeline-tuning.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/user-guide/reference/pipeline-tuning.md b/docs/user-guide/reference/pipeline-tuning.md index 5a36830b70..c8be83c2d5 100644 --- a/docs/user-guide/reference/pipeline-tuning.md +++ b/docs/user-guide/reference/pipeline-tuning.md @@ -7,6 +7,7 @@ processing cycle. - `readBatchSize` - How many messages to read for each cycle, defaults to `500`. - `bufferMaxLength` - How many unprocessed messages can be existing in the Inter-Step Buffer, defaults to `30000`. - `bufferUsageLimit` - The percentage of the buffer usage limit, a valid number should be less than 100. Default value is `80`, which means `80%`. +- `retryInterval` - The time to wait before retrying after a failure of the UDF or of the ISBSVC. These parameters can be customized under `spec.limits` as below, once defined, they apply to all the vertices and Inter-Step Buffers of the pipeline. @@ -20,6 +21,7 @@ spec: readBatchSize: 100 bufferMaxLength: 30000 bufferUsageLimit: 85 + retryInterval: 0.05s ``` They also can be defined in a vertex level, which will override the pipeline level settings. @@ -34,6 +36,7 @@ spec: readBatchSize: 100 bufferMaxLength: 30000 bufferUsageLimit: 85 + retryInterval: 0.05s vertices: - name: in source: